// ============================================================
// SCREENS — Home, Quiz, Result, BreedDetail, Catalog, Shop, Guide
// ============================================================
const { useState: useS, useEffect: useE, useMemo: useM, useRef: useR } = React;
function HomeScreen({ onNav, onSelectBreed, t }) {
const featured = window.DATA.BREEDS.slice(0, 8);
const dutchBreeds = window.DATA.BREEDS.filter(b => b.tags?.includes('nederlands'));
const heroLayout = t.heroLayout || 'split-right';
const heroContent = (
Vind jouw ideale viervoeter
Welke hond
past echt
bij jou?
Beantwoord 13 eerlijke vragen en wij koppelen je aan je top 3 rassen — met diepgaande analyses, weekschema's en kostenplaatjes. Zonder gokwerk.
onNav('quiz')}>Start de quiz {Icon.arrow}
onNav('breeds')}>Bekijk alle rassen
200+
Hondenrassen volledig geanalyseerd
13
Vragen voor een echte match
94%
Tevreden baasjes (n=2.847)
);
const heroImage =
;
const heroTag = (
2.847 mensen vonden hun match deze maand
);
return (
<>
{heroContent}
{heroLayout !== 'centered' && heroImage}
{heroTag}
Hondenmatch · 4 minuten
Niet elke hond past bij elk leven.
Onze quiz kijkt verder dan alleen "ik wil een schattige hond". We wegen je woonsituatie, energieniveau, ervaring en budget. Je krijgt een eerlijke top 3.
onNav('quiz')}>Start de match {Icon.arrow}
Vraag 3 van 13
Wat past het best bij jouw levensstijl?
Rustig — wandelingen, op de bank
Gemiddeld — fietsen, boswandelingen
Actief — hardlopen, sporten met hond
Populaire rassen
Een kleine selectie uit onze 200+ rassen
Van de altijd vrolijke Labrador tot de eigenwijze Shiba Inu — elk ras heeft een eigen verhaal.
{featured.map(b => onSelectBreed(b)} />)}
onNav('breeds')}>Bekijk alle 200+ rassen {Icon.arrow}
Made in Holland
Nederlandse rassen die we koesteren
{dutchBreeds.map(b =>
onSelectBreed(b)} />)}
Lange-lees · 8 min
Waarom Nederlandse rassen zo bijzonder zijn
Drentse Patrijshond, Stabij, Kooikerhondje — onze polders bracht honden voort die zachtaardig en allround zijn.
Lees verder
Webshop
Alles voor een gelukkige hond
Van de eerste mand tot de senior-supplementen. Wij testen, jij geniet.
{window.DATA.CATEGORIES.map(c => (
onNav('shop')}>
{c.icon}
{c.name}
{c.count} producten
))}
PHOTO · DOG TRAINER WITH PUP
Het verhaal
Een hond is voor het leven — laten we de juiste keuze maken.
Elk jaar belanden 25.000 honden in Nederlandse asielen, vaak omdat het niet de juiste match was.
Pootje is gebouwd door dierenartsen, gedragsdeskundigen en — vooral — bezorgde hondenliefhebbers.
Lees meer over ons
>
);
}
function QuizScreen({ onComplete, t }) {
const [step, setStep] = useS(0);
const [answers, setAnswers] = useS({});
const [direction, setDirection] = useS(0);
const Q = window.DATA.QUIZ;
const current = Q[step];
const progress = (step / Q.length) * 100;
const select = (v) => {
setAnswers({ ...answers, [current.id]: v });
setTimeout(() => {
if (step < Q.length - 1) { setDirection(1); setStep(step + 1); }
else { onComplete({ ...answers, [current.id]: v }); }
}, 280);
};
const back = () => { if (step > 0) { setDirection(-1); setStep(step - 1); } };
return (
{String(step + 1).padStart(2, '0')} / {String(Q.length).padStart(2, '0')}
Hondenmatch
Vraag {step + 1}
{current.question}
{current.help &&
{current.help}
}
{current.options.map(opt => (
select(opt.v)}>
{opt.label}
))}
{Icon.arrowL} Terug
Druk op een antwoord om verder te gaan
);
}
function ResultScreen({ answers, onNav, onSelectBreed, t }) {
const ranked = useM(() => {
return [...window.DATA.ALL_BREEDS]
.map(b => ({ ...b, score: window.DATA.scoreBreed(b, answers) }))
.sort((a, b) => b.score - a.score);
}, [answers]);
const top = ranked[0];
const [revealed, setRevealed] = useS(false);
useE(() => { const tm = setTimeout(() => setRevealed(true), 600); return () => clearTimeout(tm); }, []);
return (
· Jouw match ·
Jij past bij{top.name}
Geschiktheid {top.score}%
{top.name}
{top.group} · {top.size} · {top.lifespan} · {top.price}
{Icon.share} Deel
{Icon.heart} Bewaar
PHOTO · {top.name.toUpperCase()}
Waarom deze match? {top.short}
Karaktereigenschappen
onSelectBreed(top)}>Bekijk volledige analyse {Icon.arrow}
onNav('quiz')}>Quiz opnieuw
Ook interessant
{ranked.slice(1, 4).map(b => (
onSelectBreed(b)}>
🐶
{b.name}
{b.score}% match
))}
Pootje Plus
Ontgrendel alle 200+ ras-gidsen
Compleet kostenoverzicht, weekschema en persoonlijk matchadvies per ras.
onNav('lid')}>Word lid →
);
}
function BreedDetailScreen({ breed, onBack, onSelectBreed, onNav }) {
if (!breed) return null;
const [bqDone, setBqDone] = useS(false);
const bundle = window.DATA.bundleForBreed(breed);
const related = window.DATA.BREEDS.filter(b => b.group === breed.group && b.id !== breed.id).slice(0, 3);
return (
{Icon.arrowL} Terug
{breed.group}
{breed.origin}
{breed.size}
{breed.lifespan}
{breed.name}
{breed.short}
FOTO · {breed.name.toUpperCase()}
{[
['Gewicht', breed.weight],
['Levensspan', breed.lifespan],
['Oorsprong', breed.origin],
['Prijs pup', breed.price],
['Beweging', breed.care.beweging],
['Voer/mnd', breed.care.voer],
].map(([l, v]) => (
))}
{breed.unique && (
<>
Karakter-eigenaardigheid
{breed.unique.quirk}
Perfect voor
{breed.unique.perfectFor}
Niet voor
{breed.unique.notFor}
Weet dit voor je begint
{breed.unique.knowBefore}
Rode vlaggen
{breed.unique.redFlags}
>
)}
Karaktereigenschappen
Kosten per maand
Dagschema (voorbeeld)
Aanbevolen voor {breed.name}
Wat heb je allemaal nodig?
{bundle.map(p => (
{p.tag}
{p.brand}
{p.name}
€{p.price.toFixed(2)}
))}
{related.length > 0 && (
Vergelijkbare rassen
Ook interessant in {breed.group}
{related.map(b => onSelectBreed(b)} />)}
)}
);
}
function CatalogScreen({ onSelectBreed }) {
const [filter, setFilter] = useS('Alle');
const [search, setSearch] = useS('');
const groups = ['Alle', ...new Set(window.DATA.ALL_BREEDS.filter(b => !b.isFiller).map(b => b.group))];
const filtered = useM(() => {
return window.DATA.ALL_BREEDS.filter(b => {
const matchGroup = filter === 'Alle' || b.group === filter;
const matchSearch = !search || b.name.toLowerCase().includes(search.toLowerCase());
return matchGroup && matchSearch;
});
}, [filter, search]);
return (
Alle rassen
200+ hondenrassen,volledig geanalyseerd.
Van de trouwe Labrador tot de exotische Xoloitzcuintli — elk ras heeft z’n eigen karakter, zorgbehoefte en perfecte baasje.
setSearch(e.target.value)}
placeholder="Zoek een ras..."
style={{ width: '100%', maxWidth: 440, padding: '12px 18px', border: '1px solid var(--line)', borderRadius: 999, fontSize: 15, background: 'white', marginBottom: 8, display: 'block' }} />
{groups.map(g => (
setFilter(g)}>{g}
))}
{filtered.map(b => !b.isFiller && onSelectBreed(b)} />)}
);
}
function ShopScreen({ cart, onAdd }) {
const [cat, setCat] = useS('alle');
const filtered = cat === 'alle' ? window.DATA.PRODUCTS : window.DATA.PRODUCTS.filter(p => p.cat === cat);
return (
Webshop
Alles voor eengelukkige hond.
Geselecteerde producten, getest en goedgekeurd door Pootje-redacteuren.
{[{ id: 'alle', name: 'Alles', icon: '🐾', count: window.DATA.PRODUCTS.length }, ...window.DATA.CATEGORIES].map(c => (
setCat(c.id)} style={cat === c.id ? { borderColor: 'var(--forest)', background: 'var(--paper)' } : {}}>
{c.icon}
{c.name}
{c.count} items
))}
);
}
function GuideScreen({ onNav }) {
const articles = [
{ tag: 'Gedrag', title: 'Hoe leer je je hond alleen te zijn?', min: 6, img: 'GEDRAG' },
{ tag: 'Voeding', title: 'Rauw voer: voor- en nadelen', min: 8, img: 'VOEDING' },
{ tag: 'Gezondheid', title: 'Vaccinaties: wat is verplicht in NL?', min: 5, img: 'GEZONDHEID' },
{ tag: 'Opvoeding', title: 'Clicker-training stap voor stap', min: 10, img: 'OPVOEDING' },
{ tag: 'Ras-gidsen', title: 'Border Collie vs. Australian Shepherd', min: 7, img: 'RASSEN' },
{ tag: 'Budget', title: 'Wat kost een hond echt per jaar?', min: 4, img: 'BUDGET' },
];
return (
Kennisbank
Alles overhondenbezit.
Geschreven door dierenartsen en gedragsdeskundigen. Geen reclame, alleen kennis.
{articles.map((a, i) => (
ARTIKEL · {a.img}
{a.tag} · {a.min} min lezen
{a.title}
))}
Nieuwsbrief
Hondenkennis in je inbox
Wekelijks: gedrag, gezondheid en ras-inzichten van onze experts.
Aanmelden
);
}
Object.assign(window, { HomeScreen, QuizScreen, ResultScreen, BreedDetailScreen, CatalogScreen, ShopScreen, GuideScreen });