WallpaperMachine
당신이 사랑하는 배경화면, 맥에서 새롭게 만나보세요
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.