Terug naar portfolio
Fotocase://huisdierfotobuild · ≈ 7 werkdagen

Huisdierfoto: A Lifetime Print

Productsite die het emotionele verhaal achter elk huisdierportret vertelt en bezoekers stap-voor-stap door het bestelproces leidt.

Preview op desktop en mobiel

huisdierfoto.nl
Huisdierfoto: A Lifetime Print – desktop hero

Wat je hierboven ziet is een echte screenshot van de live site op desktop — direct uit de browser, geen mock-up.

viewport: 1280×720·render: SSR + hydrate·format: avif/webp
Huisdierfoto: A Lifetime Print – echte mobiele preview

Echte mobiele rendering — knoppen worden duim-vriendelijk, blokken stapelen verticaal, lettergrootte schaalt mee.

390×844 · iOS Safari

De volledige pagina in één beeld

Zo ziet de hele site eruit als je 'm helemaal naar beneden scrolt — alle secties, in volgorde.

huisdierfoto.nl
Huisdierfoto: A Lifetime Print – volledige pagina
In gewone taal

Wat betekent dit eigenlijk?

Voor als je geen developer bent — hier is wat we deden, zonder jargon.

Een emotioneel verhaal als opening, daarna een rustige bestelflow waarin je materialen vergelijkt en in een paar klikken bestelt.

  • Op mobiel schuiven materialen langs in een swipe-vergelijking — geen kleine, frustrerende dropdowns.
  • Hoge-resolutie foto's worden lazy geladen: pas zichtbaar als ze in beeld komen.
  • Warme, ambachtelijke beeldtaal in plaats van koude e-commerce — het voelt persoonlijk.
  • Tweetalig (NL/EN) met aparte URL's, zodat Engelstalige klanten ook gevonden worden.

Engineering write-up

// hoe deze site technisch in elkaar zit

Dit is verkopen op emotie met een tweetalige UI eronder. Routes worden via een optionele {-$locale}-segment afgehandeld, content via een typed key-store zodat ontbrekende vertalingen build-time falen.

De materialen-vergelijking is een CSS-grid met aspect-ratio en object-fit, zonder JS — werkt zelfs als hydratie zou falen. Cadeaubonnen lopen via Stripe Checkout (hosted) zodat we geen PCI-scope dragen.

Beeldtaal wordt via een vast aspect-ratio gepubliceerd en met Cloudinary CDN gegenereerd in webp/avif, met srcset op 2 breakpoints — voldoende voor een fotosite zonder bundle-bloat.

Stack en integraties

Stack
TanStack Start v1React 19TypeScript (strict)Tailwind CSS v4Vite 7Edge SSR
Integraties
Stripe CheckoutResendi18n (nl/en)

Routes en componenten

Routes / informatie-architectuur
  • /Verhaal + materialen
  • /materialenVergelijking glans/mat/metaal
  • /cadeaubonBestelflow met Stripe
  • /procesStap-voor-stap uitleg
Belangrijkste componenten
<StoryHero /><MaterialCompare /><GiftcardForm /><ProcessTimeline /><LangSwitch /><TestimonialCarousel />
src/
├─ routes/        # file-based routing (TanStack)
├─ components/    # presentational + UI primitives
├─ lib/           # data, helpers, schema
└─ styles.css     # design tokens (oklch)

Conversie-flow

// pad van bezoeker → klant

  1. 01Bezoeker leest emotioneel verhaal → materialen-pagina
  2. 02Vergelijkt afwerkingen in side-by-side render
  3. 03Voegt cadeaubon toe → Stripe Checkout (hosted)
  4. 04Bevestiging + persoonlijke bedankmail (Resend)

Performance, toegankelijkheid en SEO

Performance budget
LCP
≤ 1.8s
CLS
< 0.05
INP
< 150ms
JS bundle
≈ 95 kB gz
Toegankelijkheid (WCAG 2.2 AA)
  • WCAG 2.2 AA contrast op alle tekstniveaus
  • Toetsenbord-volledige navigatie + zichtbare focus-rings
  • Semantische landmarks (header/main/footer/nav)
  • Alt-teksten op alle inhoudelijke afbeeldingen
  • prefers-reduced-motion gerespecteerd
SEO-fundering
  • Per-route <title> en meta description
  • Open Graph + Twitter Card per pagina
  • JSON-LD (LocalBusiness / Service / Product)
  • Sitemap.xml + robots.txt
  • Canonical tags + responsive viewport

Wat we bouwden

Doelgroep

Huisdiereigenaren die een tijdloos aandenken zoeken in premium printkwaliteit.

Kernfeatures

  • Materialen-vergelijking (glans, mat, metaal)
  • Cadeaubon-flow voor verjaardagen
  • Tweetalig (NL/EN) met taal-switch
  • Warme, ambachtelijke beeldtaal

Deliverables

  • Volledige source in Git
  • Vaste prijs + 7 dagen oplevering
  • 1 jaar hosting + SSL inbegrepen
  • Gratis kleine wijzigingen 30 dagen

Brand kit

Visuele identiteit zoals die op de live site terugkomt — klik op een kleur om de hex-code te kopiëren.

Kleurpalet

Light mode

Typografie

Heading
Aa Bb 123
DM Serif Display
Body
Aa Bb 123
Inter

Stijl

"Warm, familiair en natuurlijk — tijdloos."

Wil je ook zo'n site?

We bouwen 'm in vaste prijs en binnen 7 dagen online.

Plan een gesprek