Eerste commit voor Helvoirt Gevelreiniging

This commit is contained in:
Joery Disselhof
2026-08-26 13:57:08 +02:00
commit 276dba07a2
225 changed files with 23121 additions and 0 deletions
+48
View File
@@ -0,0 +1,48 @@
/**
* Wave 1 — verfijning Over ons (klantfeedback):
* - "Waarden" van een aparte collectie -> een INLINE repeater-veld op `over_ons`
* (rijen toevoegen/verwijderen/verslepen binnen de pagina; WP-Bakery-achtig).
* - Kern-inhoudvelden verplicht maken zodat "(optional)" daar verdwijnt.
* - De losse `waarden`-collectie opruimen.
*/
import { ulid } from "ulidx";
import { writeFileSync, mkdirSync } from "node:fs";
const waarden = [
{ title: "Eerlijke prijs vooraf", text: "Je krijgt een duidelijke offerte op papier. Geen verrassingen achteraf, geen kleine lettertjes.", icon: '<path d="M20.59 13.41 13.42 20.58a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z"/><circle cx="7" cy="7" r="1.4"/>' },
{ title: "Echt vakwerk", text: "We kennen ons vak en de materialen. Elke gevel, elk dak en elke schoorsteen krijgt de juiste aanpak.", icon: '<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/><path d="m8.5 12 2.2 2.2 4.5-4.5"/>' },
{ title: "Netjes opgeleverd", text: "We dekken alles goed af, ruimen op en lopen het werk samen met je na. Je huis blijft schoon achter.", icon: '<path d="M12 3l1.8 5.4L19 10l-5.2 1.6L12 17l-1.8-5.4L5 10l5.2-1.6z"/>' },
{ title: "Lokaal en betrokken", text: "We werken in Helvoirt en omgeving. Korte lijnen, snel even langs en altijd persoonlijk aanspreekbaar.", icon: '<path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/>' },
];
const subFields = [
{ slug: "title", type: "string", label: "Titel", required: true },
{ slug: "text", type: "text", label: "Tekst" },
{ slug: "icon", type: "text", label: "Icoon (SVG-inhoud, geavanceerd)" },
];
const q = (s) => "'" + String(s).replace(/'/g, "''") + "'";
const coll = "(SELECT id FROM _emdash_collections WHERE slug='over_ons')";
const sql = `-- Auto-gegenereerd — Over ons: waarden -> inline repeater + minder "(optional)".
-- 1. Repeater-kolom + velddefinitie (rijen toevoegen/verwijderen/verslepen).
ALTER TABLE ec_over_ons ADD COLUMN waarden JSON;
UPDATE _emdash_fields SET sort_order=8 WHERE collection_id=${coll} AND slug='meta_title';
UPDATE _emdash_fields SET sort_order=9 WHERE collection_id=${coll} AND slug='meta_description';
INSERT INTO _emdash_fields (id, collection_id, slug, label, type, column_type, required, sort_order, searchable, translatable, validation)
VALUES (${q(ulid())}, ${coll}, 'waarden', 'Waarden (rijen: voeg toe / verwijder / versleep)', 'repeater', 'JSON', 0, 7, 0, 1, ${q(JSON.stringify({ subFields, minItems: 0, maxItems: 8 }))});
UPDATE ec_over_ons SET waarden=${q(JSON.stringify(waarden))} WHERE slug='main';
-- 2. Kern-inhoudvelden verplicht -> "(optional)" verdwijnt daar (SEO blijft optioneel).
UPDATE _emdash_fields SET required=1 WHERE collection_id=${coll} AND slug IN ('hero_lead','story_title','story_body','values_title');
-- 3. Losse 'waarden'-collectie opruimen (vervangen door het repeater-veld hierboven).
DROP TABLE IF EXISTS ec_waarden;
DELETE FROM _emdash_fields WHERE collection_id=(SELECT id FROM _emdash_collections WHERE slug='waarden');
DELETE FROM _emdash_collections WHERE slug='waarden';
`;
mkdirSync("migrations", { recursive: true });
writeFileSync("migrations/0003_over_ons_repeater.sql", sql, "utf8");
console.log("geschreven: migrations/0003_over_ons_repeater.sql");