尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
pSEO-site voor thuisladen en EV-fiscaliteit in de Benelux. Spec: CLAUDE.md, visueel systeem: DESIGN.md. • /nl-be/laadpaal-voor/tesla-model-3-rwd-2025 (11 kW, capaciteitstarief Vlaanderen) • /nl-be/laadpaal-voor/peugeot-e-208-51-2025 (7,4 kW 1-fasig: twee rijen "geen winst") • /fr-be/borne-pour/renault-zoe-r135-52-2023 (22 kW, Wallonië: geen piekblok) • /design-lab (alle componenten met voorbeelddata)查看完整 README ↗
pSEO-site voor thuisladen en EV-fiscaliteit in de Benelux. Spec: CLAUDE.md, visueel systeem: DESIGN.md.
PowerShell (Windows):
pnpm install
Copy-Item .env.example .env.local # leeg laten = lokale seed-data, geen Supabase nodig
pnpm dev # http://localhost:3000/nl-be
pnpm test # calc, rules, hreflang, related, lead-matching
pnpm typecheck; pnpm lint
Bash / macOS / Linux:
pnpm install
cp .env.example .env.local
pnpm dev
pnpm test
pnpm typecheck && pnpm lint
Voorbeeldpagina's zonder database:
/nl-be/laadpaal-voor/tesla-model-3-rwd-2025 (11 kW, capaciteitstarief Vlaanderen)/nl-be/laadpaal-voor/peugeot-e-208-51-2025 (7,4 kW 1-fasig: twee rijen "geen winst")/fr-be/borne-pour/renault-zoe-r135-52-2023 (22 kW, Wallonië: geen piekblok)/design-lab (alle componenten met voorbeelddata)supabase/migrations/0001_init.up.sql uit (idempotent; down-migratie ernaast)..env.example.pnpm seed laadt data/seed/*.json; pnpm recalc-pages zet pages.status volgens het indexatiebeleid (CLAUDE.md 4.3) en triggert revalidate.Regels en tarieven met TODO(verify in notes houden alle afhankelijke pagina's op noindex. Verwijder de TODO pas na controle bij de bron.
| Map | Inhoud |
|---|---|
lib/calc/ | Pure rekenfuncties + tests, zie lib/calc/README.md |
lib/rules/ | Zod-schema's voor rules.params, regelselectie op datum |
lib/copy/ | Alle tekst per locale (nl-BE, fr-BE, nl-NL) |
lib/seo/ | hreflang (alternates.ts), interne links (related.ts) |
lib/db/ | Repo-interface, Supabase-implementatie, lokale seed-implementatie, gecachte loaders met tags |
lib/pages/ | Indexatiebeleid (status.ts), assemblage P1-pagina (charger.ts), route-helper |
lib/lead/ | Zod-schema, installateursmatching, rate-limit, Resend-mails |
components/ | UI-componenten volgens DESIGN.md; alleen LeadForm is client-side |
app/[locale]/(pseo)/ | laadpaal-voor/[slug] (nl) en borne-pour/[slug] (fr) |
app/api/revalidate | On-demand revalidate, Authorization: Bearer <REVALIDATE_SECRET> |
scripts/ | seed, import-specs, recalc-pages, audit-sources, screenshot |
PowerShell:
Invoke-RestMethod -Method Post -Uri "$env:NEXT_PUBLIC_SITE_URL/api/revalidate" `
-Headers @{ authorization = "Bearer $env:REVALIDATE_SECRET" } -ContentType "application/json" `
-Body '{"tags":["rules:BE","tariffs:BE","pages"]}'
Bash:
curl -X POST $NEXT_PUBLIC_SITE_URL/api/revalidate \
-H "authorization: Bearer $REVALIDATE_SECRET" -H "content-type: application/json" \
-d '{"tags":["rules:BE","tariffs:BE","pages"]}'
Tags: version:{slug}, rules:{BE|NL}, tariffs:{BE|NL}, pages:{locale}, pages, versions.
Open bronnen landen in spec_candidates (migratie 0002), nooit rechtstreeks in versions. Zonder Supabase-env schrijven de scripts naar data/import/candidates/.
pnpm fetch-open-ev-data # laatste release naar data/import/
pnpm import-open-ev-data data/import/open-ev-data-v1.24.0.json # github.com/open-ev-data/open-ev-data-dataset
pnpm review-candidates --make tesla # of zonder filter
review-candidates schrijft data/import/review/report.txt (matches en conflicten per bestaande versie, drempel 3 %, fasen exact) en data/import/review/new-versions.csv voor onbekende modellen. Die CSV heeft het formaat van import-specs, maar zonder spec_source_url en spec_source_date: die vul je in vanuit de fabrikantenprijslijst voor je importeert. De dataset bevat geen WLTP-verbruik; dat veld blijft leeg tot de prijslijst het invult. De kolom oem_source_url_suggested is de fabrikantenbron die de dataset opgeeft: een startpunt om te controleren, geen bewijs.
pnpm fetch-eea --min 5 # via de EEA Discodata SQL-endpoint, geen download nodig
pnpm review-candidates
fetch-eea laat de EEA-server zelf tellen per variant voor BE en NL (tabelnaam met --table, standaard co2cars_2025Pv31; de naam staat op de Datahub-pagina onder "SQL Rest Endpoint"). Het oudere import-eea leest hetzelfde uit een gedownload CSV-jaarbestand. review-candidates gebruikt die tellingen om new-versions.csv op volume te sorteren en vult de kolommen registrations_be en registrations_nl. Kolomnamen wijken per jaargang af; pas ze zo nodig aan in lib/specs/eea.ts.
Regelpagina's (template rule) bestaan alleen als er een entry staat in lib/content/rules.ts; de tekst is handgeschreven, met bronnen en datum. Over, contact en privacy staan in lib/content/static.ts.
Een lead wordt altijd opgeslagen in leads (status new) met het tijdstip van toestemming. Daarna:
installers.regions: postcodeprefix of gewest), dan gaat de lead meteen naar maximaal drie installateurs en krijgt status forwarded.new staan. De aanvrager krijgt een bevestiging dat de aanvraag binnen vier weken doorgestuurd wordt. De toestemmingstekst dekt dat uitstel.LEAD_NOTIFY_EMAIL, met de status erbij.Wachtrij doorsturen zodra er installateurs zijn:
pnpm forward-leads --dry # toont wie wat zou krijgen
pnpm forward-leads # verstuurt en zet status forwarded
pnpm forward-leads --max-age-days 42
Leads ouder dan --max-age-days (standaard 42) krijgen status expired en worden niet meer doorgestuurd. Zonder RESEND_API_KEY worden mails alleen gelogd. De testinstallateur in de seed staat op inactief; activeer nooit een installateur met een niet-bestaand e-mailadres, want een doorgestuurde lead komt niet terug in de wachtrij.