commit 596cfcca34fcd70795cf8763f6b9897a6b00c05f Author: Mannu Date: Sat Aug 15 08:57:40 2026 +0530 snapshot(2026-08-15): client production system, pre-engagement baseline Read-only mirror of the client's existing system as it stood before our work began. Taken from matthijsexpand@149.210.159.152 (TransIP VPS, Lelystad NL) with the client's written permission. Contents: - home-weddingcaketopper/ Next.js app, proxy.py, supabase schema - var-www/ static webroots for all three domains - etc-nginx/ vhost configs (previously unversioned, server-only) Excluded: node_modules (704M, regenerable), .next (17M, regenerable), and env file contents (present on local disk, gitignored — see README). Not our IP. Not covered by the proposal's assignment clause. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e9c0a5a --- /dev/null +++ b/.gitignore @@ -0,0 +1,21 @@ +# .gitignore — 3dct-client-mirror + +# ── Secrets: staged on disk, deliberately NOT in git history ── +# Live values are in snapshot-*/secrets-DO-NOT-COMMIT/ on the local +# filesystem only. Git history is permanent; a committed key can only be +# removed by rewriting history, which breaks every clone. See README. +secrets-DO-NOT-COMMIT/ +.env +.env.local +.env.*.local +*.pem +*.key +id_ed25519* + +# ── Regenerable, excluded at rsync time ── +node_modules/ +.next/ + +# ── OS / editor detritus ── +.DS_Store +Thumbs.db diff --git a/README.md b/README.md new file mode 100644 index 0000000..de62e1e --- /dev/null +++ b/README.md @@ -0,0 +1,86 @@ +# 3dct-client-mirror + +Read-only snapshots of **the client's existing production system** for `3dcaketopper.nl`, `birthdaycaketopper.nl` and `weddingcaketopper.nl`. + +> [!important] This is not our code +> Everything here is the property of the client. It is mirrored with written permission, solely so that we have a reproducible baseline of the system as it stood before our engagement began. **Nothing in this repository is transferred to us, and nothing here is covered by the IP assignment in our proposal.** Do not develop against this tree — our delivery code lives in `3D_Cake_topper`. + +--- + +## Snapshots + +| Snapshot | Taken | Source | +| --- | --- | --- | +| `snapshot-2026-08-15/` | 2026-08-15 | `matthijsexpand@149.210.159.152` (TransIP VPS, Lelystad NL) | + +Each snapshot is a point-in-time copy. Never edit one — take a new snapshot instead. The value of this repository is that the old ones remain untouched. + +### Layout + +``` +snapshot-YYYY-MM-DD/ +├── home-weddingcaketopper/ ~/weddingcaketopper — Next.js app + proxy.py +├── var-www/ /var/www — static webroots for all three domains +├── etc-nginx/ /etc/nginx/sites-available — vhost configs +└── secrets-DO-NOT-COMMIT/ env files — gitignored, local disk only +``` + +### Deliberate exclusions + +| Excluded | Why | +| --- | --- | +| `node_modules/` (704 MB) | Third-party packages, regenerable with `npm install`. Not client IP, and permanent git bloat. | +| `.next/` (17 MB) | Build output, regenerable with `npm run build`. | +| Env file **contents** | See below. | + +--- + +## Why the secrets are not committed + +The two env files were pulled and **are present on local disk** at `snapshot-*/secrets-DO-NOT-COMMIT/`. Nothing was lost. They are excluded from git only. + +| File | Contains | +| --- | --- | +| `etc-weddingcaketopper.env` | `ANTHROPIC_API_KEY`, `OPENAI_API_KEY` | +| `weddingcaketopper.env.local` | `SUPABASE_SERVICE_ROLE_KEY`, `ADYEN_API_KEY`, `ADYEN_CLIENT_KEY`, `ADYEN_MERCHANT_ACCOUNT`, `OPENAI_API_KEY` | + +Three reasons this line is drawn at the commit rather than the pull: + +1. **Git history is permanent.** "We'll decide later" works for a file on disk. It does not work for a commit — removal requires `filter-repo`, which rewrites every hash and breaks every clone. The reversible choice is to keep them out now and add them deliberately later if wanted; the irreversible choice is the reverse. +2. **These are the client's live credentials, not ours.** A Supabase *service-role* key bypasses all row-level security on the customer database. The Adyen keys are payment infrastructure. Committing them to our git server materially increases *the client's* exposure, and that is not a risk we can accept on their behalf. +3. **They are already flagged as compromised.** Risk S-01 in the project Risk Register: an open unauthenticated relay served these keys to the public internet with no logging. They should be rotated, which makes the current values worth preserving as evidence — not as configuration. + +**If you later decide they must be versioned**, the correct mechanism is encryption at rest — `git-crypt`, `age`, or SOPS — so the repository holds ciphertext and the key lives elsewhere. Say the word and it can be set up. + +`.env.example` **is** committed: it records which variables the system requires, without any value. + +--- + +## How a snapshot is taken + +```bash +BASE=snapshot-$(date +%F) +mkdir -p "$BASE"/{home-weddingcaketopper,var-www,etc-nginx,secrets-DO-NOT-COMMIT} + +rsync -az --exclude node_modules --exclude .next \ + 3dct:/home/matthijsexpand/weddingcaketopper/ "$BASE/home-weddingcaketopper/" +rsync -az 3dct:/var/www/ "$BASE/var-www/" +rsync -az 3dct:/etc/nginx/sites-available/ "$BASE/etc-nginx/" +rsync -az 3dct:/etc/weddingcaketopper.env "$BASE/secrets-DO-NOT-COMMIT/etc-weddingcaketopper.env" +mv "$BASE/home-weddingcaketopper/.env.local" "$BASE/secrets-DO-NOT-COMMIT/weddingcaketopper.env.local" +``` + +`3dct` is the SSH host alias in `~/.ssh/config`. + +--- + +## What the 2026-08-15 snapshot documents + +Full analysis in the project vault: `01-context/Infrastructure and Live Stack Audit`. + +- `proxy/proxy.py` — 60-line `http.server` script; the open relay behind finding S-01 +- `app/api/` — Adyen session/webhook, OpenAI preview, order creation routes +- `supabase/schema.sql` — `orders` and `uploads` tables, no row-level security +- `README.md` — the previous developer's own list of six items outstanding before production +- `var-www/3dcaketopper.nl/ontwerp/` — the live vanilla-JS configurator being replaced +- `etc-nginx/` — the three vhosts, previously existing only on the server with no history diff --git a/snapshot-2026-08-15/etc-nginx/3dcaketopper.nl b/snapshot-2026-08-15/etc-nginx/3dcaketopper.nl new file mode 100644 index 0000000..cefc4ad --- /dev/null +++ b/snapshot-2026-08-15/etc-nginx/3dcaketopper.nl @@ -0,0 +1,44 @@ +server { + server_name 3dcaketopper.nl www.3dcaketopper.nl; + client_max_body_size 25M; + root /var/www/3dcaketopper.nl; + index index.html; + +location /api/ { + proxy_pass http://localhost:5000/api/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + + proxy_connect_timeout 600s; + proxy_send_timeout 600s; + proxy_read_timeout 600s; + send_timeout 600s; +} + + listen 443 ssl; # managed by Certbot + ssl_certificate /etc/letsencrypt/live/3dcaketopper.nl/fullchain.pem; # managed by Certbot + ssl_certificate_key /etc/letsencrypt/live/3dcaketopper.nl/privkey.pem; # managed by Certbot + include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot + ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot + + +} +server { + if ($host = www.3dcaketopper.nl) { + return 301 https://$host$request_uri; + } # managed by Certbot + + + if ($host = 3dcaketopper.nl) { + return 301 https://$host$request_uri; + } # managed by Certbot + + + listen 80; + server_name 3dcaketopper.nl www.3dcaketopper.nl; + return 404; # managed by Certbot + + + + +} diff --git a/snapshot-2026-08-15/etc-nginx/3dcaketopper.nl.save b/snapshot-2026-08-15/etc-nginx/3dcaketopper.nl.save new file mode 100644 index 0000000..a9843da --- /dev/null +++ b/snapshot-2026-08-15/etc-nginx/3dcaketopper.nl.save @@ -0,0 +1,34 @@ +server { + server_name 3dcaketopper.nl www.3dcaketopper.nl; + + + root /var/www/3dcaketopper.nl; + index index.html; + + listen 443 ssl; # managed by Certbot + ssl_certificate /etc/letsencrypt/live/3dcaketopper.nl/fullchain.pem; # managed by Certbot + ssl_certificate_key /etc/letsencrypt/live/3dcaketopper.nl/privkey.pem; # managed by Certbot + include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot + ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot + + +} +server { + if ($host = www.3dcaketopper.nl) { + return 301 https://$host$request_uri; + } # managed by Certbot + + + if ($host = 3dcaketopper.nl) { + return 301 https://$host$request_uri; + } # managed by Certbot + + + listen 80; + server_name 3dcaketopper.nl www.3dcaketopper.nl; + return 404; # managed by Certbot + + + + +} diff --git a/snapshot-2026-08-15/etc-nginx/birthdaycaketopper.nl b/snapshot-2026-08-15/etc-nginx/birthdaycaketopper.nl new file mode 100644 index 0000000..ecc1a67 --- /dev/null +++ b/snapshot-2026-08-15/etc-nginx/birthdaycaketopper.nl @@ -0,0 +1,32 @@ +server { + server_name birthdaycaketopper.nl www.birthdaycaketopper.nl; + + return 301 https://www.3dcaketopper.nl/verjaardag/; + + listen 443 ssl; # managed by Certbot + ssl_certificate /etc/letsencrypt/live/birthdaycaketopper.nl/fullchain.pem; # managed by Certbot + ssl_certificate_key /etc/letsencrypt/live/birthdaycaketopper.nl/privkey.pem; # managed by Certbot + include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot + ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot + + +} +server { + if ($host = www.birthdaycaketopper.nl) { + return 301 https://$host$request_uri; + } # managed by Certbot + + + if ($host = birthdaycaketopper.nl) { + return 301 https://$host$request_uri; + } # managed by Certbot + + + listen 80; + server_name birthdaycaketopper.nl www.birthdaycaketopper.nl; + return 404; # managed by Certbot + + + + +} \ No newline at end of file diff --git a/snapshot-2026-08-15/etc-nginx/default b/snapshot-2026-08-15/etc-nginx/default new file mode 100644 index 0000000..c5af914 --- /dev/null +++ b/snapshot-2026-08-15/etc-nginx/default @@ -0,0 +1,91 @@ +## +# You should look at the following URL's in order to grasp a solid understanding +# of Nginx configuration files in order to fully unleash the power of Nginx. +# https://www.nginx.com/resources/wiki/start/ +# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/ +# https://wiki.debian.org/Nginx/DirectoryStructure +# +# In most cases, administrators will remove this file from sites-enabled/ and +# leave it as reference inside of sites-available where it will continue to be +# updated by the nginx packaging team. +# +# This file will automatically load configuration files provided by other +# applications, such as Drupal or Wordpress. These applications will be made +# available underneath a path with that package name, such as /drupal8. +# +# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples. +## + +# Default server configuration +# +server { + listen 80 default_server; + listen [::]:80 default_server; + + # SSL configuration + # + # listen 443 ssl default_server; + # listen [::]:443 ssl default_server; + # + # Note: You should disable gzip for SSL traffic. + # See: https://bugs.debian.org/773332 + # + # Read up on ssl_ciphers to ensure a secure configuration. + # See: https://bugs.debian.org/765782 + # + # Self signed certs generated by the ssl-cert package + # Don't use them in a production server! + # + # include snippets/snakeoil.conf; + + root /var/www/html; + + # Add index.php to the list if you are using PHP + index index.html index.htm index.nginx-debian.html; + + server_name _; + + location / { + # First attempt to serve request as file, then + # as directory, then fall back to displaying a 404. + try_files $uri $uri/ =404; + } + + # pass PHP scripts to FastCGI server + # + #location ~ \.php$ { + # include snippets/fastcgi-php.conf; + # + # # With php-fpm (or other unix sockets): + # fastcgi_pass unix:/run/php/php7.4-fpm.sock; + # # With php-cgi (or other tcp sockets): + # fastcgi_pass 127.0.0.1:9000; + #} + + # deny access to .htaccess files, if Apache's document root + # concurs with nginx's one + # + #location ~ /\.ht { + # deny all; + #} +} + + +# Virtual Host configuration for example.com +# +# You can move that to a different file under sites-available/ and symlink that +# to sites-enabled/ to enable it. +# +#server { +# listen 80; +# listen [::]:80; +# +# server_name example.com; +# +# root /var/www/example.com; +# index index.html; +# +# location / { +# try_files $uri $uri/ =404; +# } +#} diff --git a/snapshot-2026-08-15/etc-nginx/weddingcaketopper b/snapshot-2026-08-15/etc-nginx/weddingcaketopper new file mode 100644 index 0000000..8bdcbb2 --- /dev/null +++ b/snapshot-2026-08-15/etc-nginx/weddingcaketopper @@ -0,0 +1,59 @@ +server { + server_name weddingcaketopper.nl www.weddingcaketopper.nl; + + client_max_body_size 25M; + proxy_read_timeout 300; + proxy_send_timeout 300; + proxy_connect_timeout 300; + + root /home/matthijsexpand/weddingcaketopper/public-site; + index index.html; + + location / { + try_files $uri $uri/ /index.html; + } +location /api/claude { + proxy_pass http://localhost:5000/api/claude; + +} + +location /api/imagine { + proxy_pass http://localhost:5000/api/imagine; + + +} +location /api/imagine-edit { + proxy_pass http://localhost:5000/api/imagine-edit; + proxy_read_timeout 300; + proxy_connect_timeout 300; + proxy_send_timeout 300; + client_max_body_size 20M; +} + + listen 443 ssl; # managed by Certbot + ssl_certificate /etc/letsencrypt/live/weddingcaketopper.nl/fullchain.pem; # managed by Certbot + ssl_certificate_key /etc/letsencrypt/live/weddingcaketopper.nl/privkey.pem; # managed by Certbot + include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot + ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot + + +} +server { + if ($host = www.weddingcaketopper.nl) { + return 301 https://$host$request_uri; + } # managed by Certbot + + + if ($host = weddingcaketopper.nl) { + return 301 https://$host$request_uri; + } # managed by Certbot + + + listen 80; + server_name weddingcaketopper.nl www.weddingcaketopper.nl; + return 404; # managed by Certbot + + + + +} diff --git a/snapshot-2026-08-15/home-weddingcaketopper/.gitignore b/snapshot-2026-08-15/home-weddingcaketopper/.gitignore new file mode 100644 index 0000000..5ef6a52 --- /dev/null +++ b/snapshot-2026-08-15/home-weddingcaketopper/.gitignore @@ -0,0 +1,41 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/snapshot-2026-08-15/home-weddingcaketopper/AGENTS.md b/snapshot-2026-08-15/home-weddingcaketopper/AGENTS.md new file mode 100644 index 0000000..8bd0e39 --- /dev/null +++ b/snapshot-2026-08-15/home-weddingcaketopper/AGENTS.md @@ -0,0 +1,5 @@ + +# This is NOT the Next.js you know + +This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` before writing any code. Heed deprecation notices. + diff --git a/snapshot-2026-08-15/home-weddingcaketopper/CLAUDE.md b/snapshot-2026-08-15/home-weddingcaketopper/CLAUDE.md new file mode 100644 index 0000000..43c994c --- /dev/null +++ b/snapshot-2026-08-15/home-weddingcaketopper/CLAUDE.md @@ -0,0 +1 @@ +@AGENTS.md diff --git a/snapshot-2026-08-15/home-weddingcaketopper/README.md b/snapshot-2026-08-15/home-weddingcaketopper/README.md new file mode 100644 index 0000000..21a0db9 --- /dev/null +++ b/snapshot-2026-08-15/home-weddingcaketopper/README.md @@ -0,0 +1,58 @@ +# WeddingCakeTopper.nl MVP + +Next.js MVP met: +- Bestelpagina +- Upload 3–6 foto's +- Supabase database + storage +- Adyen Sessions route +- OpenAI AI-preview route +- Simpele adminpagina + +## Installatie lokaal + +```bash +npm install +cp .env.example .env.local +npm run dev +``` + +## Supabase +1. Maak een project aan. +2. Draai `supabase/schema.sql` in SQL editor. +3. Maak bucket `order-uploads` aan. +4. Voor MVP: public bucket. Voor productie: private bucket + signed URLs. + +## Adyen +Vul in `.env.local`: +- ADYEN_API_KEY +- ADYEN_MERCHANT_ACCOUNT +- ADYEN_CLIENT_KEY +- ADYEN_ENVIRONMENT=test + +Webhook URL: +`https://weddingcaketopper.nl/api/payments/webhook` + +## OpenAI +Vul `OPENAI_API_KEY` in. + +## Deploy TransIP VPS +```bash +sudo apt update +sudo apt install -y nodejs npm nginx certbot python3-certbot-nginx +npm install +npm run build +npm install -g pm2 +pm2 start npm --name weddingcaketopper -- start +pm2 save +``` + +Nginx reverse proxy naar `http://127.0.0.1:3000`. + +## Belangrijk +Deze MVP is een startpunt. Voor live productie nog toevoegen: +- Echte admin login +- Adyen webhook HMAC-validatie +- Private Supabase uploads +- Email notificaties +- Rate limiting +- AVG/privacytekst diff --git a/snapshot-2026-08-15/home-weddingcaketopper/app/api/orders/create/route.ts b/snapshot-2026-08-15/home-weddingcaketopper/app/api/orders/create/route.ts new file mode 100644 index 0000000..260a152 --- /dev/null +++ b/snapshot-2026-08-15/home-weddingcaketopper/app/api/orders/create/route.ts @@ -0,0 +1,16 @@ +import { NextResponse } from 'next/server'; +import { supabaseAdmin } from '@/lib/supabase'; +import { STYLES } from '@/lib/types'; +export async function POST(req: Request){ + try{ + const form=await req.formData(); const email=String(form.get('email')||''); const name=String(form.get('name')||''); const style=String(form.get('style')||''); + if(!email||!name||!STYLES.includes(style as any)) return NextResponse.json({error:'Ongeldige invoer.'},{status:400}); + const files=form.getAll('photos').filter(Boolean) as File[]; if(files.length<3||files.length>6) return NextResponse.json({error:'Upload 3 tot 6 foto’s.'},{status:400}); + const sb=supabaseAdmin(); + const {data:order,error}=await sb.from('orders').insert({email,name,style,product:String(form.get('product')||'bruidspaar-taarttopper'),wedding_date:String(form.get('wedding_date')||''),notes:String(form.get('notes')||''),status:'new',payment_status:'pending'}).select('id').single(); + if(error) throw error; + const bucket=process.env.SUPABASE_BUCKET || 'order-uploads'; + for(const file of files){ const path=`${order.id}/${crypto.randomUUID()}-${file.name}`; const buffer=Buffer.from(await file.arrayBuffer()); const up=await sb.storage.from(bucket).upload(path, buffer, {contentType:file.type, upsert:false}); if(up.error) throw up.error; const {data:pub}=sb.storage.from(bucket).getPublicUrl(path); await sb.from('uploads').insert({order_id:order.id,image_url:pub.publicUrl,path}); } + return NextResponse.json({orderId:order.id}); + }catch(e:any){return NextResponse.json({error:e.message||'Serverfout'},{status:500})} +} diff --git a/snapshot-2026-08-15/home-weddingcaketopper/app/api/payments/session/route.ts b/snapshot-2026-08-15/home-weddingcaketopper/app/api/payments/session/route.ts new file mode 100644 index 0000000..58ce7c7 --- /dev/null +++ b/snapshot-2026-08-15/home-weddingcaketopper/app/api/payments/session/route.ts @@ -0,0 +1,12 @@ +import { NextResponse } from 'next/server'; +import { Client, CheckoutAPI } from '@adyen/api-library'; +import { supabaseAdmin } from '@/lib/supabase'; +export async function POST(req:Request){ + try{ const {orderId}=await req.json(); if(!orderId) return NextResponse.json({error:'Order ontbreekt.'},{status:400}); + const site=process.env.NEXT_PUBLIC_SITE_URL!; const sb=supabaseAdmin(); + const client=new Client({apiKey:process.env.ADYEN_API_KEY!, environment:(process.env.ADYEN_ENVIRONMENT as any)||'TEST'}); const checkout=new CheckoutAPI(client); + const session=await checkout.PaymentsApi.sessions({merchantAccount:process.env.ADYEN_MERCHANT_ACCOUNT!, amount:{currency:'EUR',value:1995}, reference:orderId, returnUrl:`${site}/payment-result?orderId=${orderId}`, countryCode:'NL', shopperLocale:'nl-NL'} as any); + await sb.from('orders').update({adyen_session_id:(session as any).id}).eq('id',orderId); + return NextResponse.json({session}); + }catch(e:any){return NextResponse.json({error:e.message||'Adyen fout'},{status:500})} +} diff --git a/snapshot-2026-08-15/home-weddingcaketopper/app/api/payments/webhook/route.ts b/snapshot-2026-08-15/home-weddingcaketopper/app/api/payments/webhook/route.ts new file mode 100644 index 0000000..23eefa6 --- /dev/null +++ b/snapshot-2026-08-15/home-weddingcaketopper/app/api/payments/webhook/route.ts @@ -0,0 +1,8 @@ +import { NextResponse } from 'next/server'; +import { supabaseAdmin } from '@/lib/supabase'; +export async function POST(req:Request){ + const body=await req.json(); const sb=supabaseAdmin(); + const items=body.notificationItems || []; + for(const item of items){ const n=item.NotificationRequestItem; if(n?.eventCode==='AUTHORISATION' && n?.success==='true'){ await sb.from('orders').update({payment_status:'paid',status:'paid'}).eq('id',n.merchantReference); await fetch(`${process.env.NEXT_PUBLIC_SITE_URL}/api/preview/generate`,{method:'POST',headers:{'content-type':'application/json'},body:JSON.stringify({orderId:n.merchantReference})}); }} + return NextResponse.json({notificationResponse:'[accepted]'}); +} diff --git a/snapshot-2026-08-15/home-weddingcaketopper/app/api/preview/generate/route.ts b/snapshot-2026-08-15/home-weddingcaketopper/app/api/preview/generate/route.ts new file mode 100644 index 0000000..371a4fa --- /dev/null +++ b/snapshot-2026-08-15/home-weddingcaketopper/app/api/preview/generate/route.ts @@ -0,0 +1,16 @@ +import { NextResponse } from 'next/server'; +import OpenAI from 'openai'; +import { supabaseAdmin } from '@/lib/supabase'; +export async function POST(req:Request){ + try{ const {orderId}=await req.json(); const sb=supabaseAdmin(); + const {data:order}=await sb.from('orders').select('*').eq('id',orderId).single(); if(!order) return NextResponse.json({error:'Order niet gevonden'},{status:404}); + const prompt=`Maak een hoogwaardige 2D-preview voor een gepersonaliseerde wedding cake topper. Product: bruidspaar taarttopper. Stijl: ${order.style}. Geschikt als basis voor 3D-print, witte achtergrond, front-facing, vriendelijk, premium, geen tekst in beeld. Opmerkingen klant: ${order.notes||'geen'}`; + const openai=new OpenAI({apiKey:process.env.OPENAI_API_KEY!}); + const img=await openai.images.generate({model:'gpt-image-2',prompt,size:'1024x1024'} as any); + const b64=(img as any).data?.[0]?.b64_json; if(!b64) throw new Error('Geen afbeelding ontvangen van OpenAI'); + const buffer=Buffer.from(b64,'base64'); const bucket=process.env.SUPABASE_BUCKET || 'order-uploads'; const path=`${orderId}/preview.png`; + const up=await sb.storage.from(bucket).upload(path,buffer,{contentType:'image/png',upsert:true}); if(up.error) throw up.error; + const {data:pub}=sb.storage.from(bucket).getPublicUrl(path); await sb.from('orders').update({preview_url:pub.publicUrl,status:'preview_ready'}).eq('id',orderId); + return NextResponse.json({previewUrl:pub.publicUrl}); + }catch(e:any){return NextResponse.json({error:e.message||'Preview fout'},{status:500})} +} diff --git a/snapshot-2026-08-15/home-weddingcaketopper/app/favicon.ico b/snapshot-2026-08-15/home-weddingcaketopper/app/favicon.ico new file mode 100644 index 0000000..718d6fe Binary files /dev/null and b/snapshot-2026-08-15/home-weddingcaketopper/app/favicon.ico differ diff --git a/snapshot-2026-08-15/home-weddingcaketopper/app/globals.css b/snapshot-2026-08-15/home-weddingcaketopper/app/globals.css new file mode 100644 index 0000000..4cadb98 --- /dev/null +++ b/snapshot-2026-08-15/home-weddingcaketopper/app/globals.css @@ -0,0 +1 @@ +:root{--bg:#fff9f7;--ink:#2f2a2a;--muted:#7c6f6f;--brand:#c7956d;--soft:#f2ded5}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:Arial,Helvetica,sans-serif}.container{max-width:1080px;margin:0 auto;padding:28px}.hero{display:grid;grid-template-columns:1.1fr .9fr;gap:36px;align-items:center;padding:64px 0}.card{background:#fff;border:1px solid #ead6ce;border-radius:24px;padding:24px;box-shadow:0 12px 30px rgba(80,40,20,.07)}h1{font-size:54px;line-height:1;margin:0 0 18px}.btn{background:var(--brand);color:white;border:0;border-radius:999px;padding:14px 22px;text-decoration:none;font-weight:700;cursor:pointer}.grid{display:grid;gap:18px}.styles{grid-template-columns:repeat(5,1fr)}input,select,textarea{width:100%;padding:13px;border:1px solid #ddd;border-radius:14px}label{font-weight:700}.muted{color:var(--muted)}.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.pill{background:var(--soft);border-radius:999px;padding:8px 12px;display:inline-block}.topbar{display:flex;justify-content:space-between;align-items:center}.logo{font-weight:900;letter-spacing:.03em}.logo span{font-family:Georgia,serif;font-style:italic;color:var(--brand)}@media(max-width:800px){.hero,.steps{grid-template-columns:1fr}.styles{grid-template-columns:1fr 1fr}h1{font-size:40px}} diff --git a/snapshot-2026-08-15/home-weddingcaketopper/app/layout.tsx b/snapshot-2026-08-15/home-weddingcaketopper/app/layout.tsx new file mode 100644 index 0000000..1873d35 --- /dev/null +++ b/snapshot-2026-08-15/home-weddingcaketopper/app/layout.tsx @@ -0,0 +1,3 @@ +import './globals.css'; +export const metadata = { title: 'WeddingCakeTopper.nl', description: 'Gepersonaliseerde wedding cake toppers met AI-preview.' }; +export default function RootLayout({children}:{children:React.ReactNode}){return {children}} diff --git a/snapshot-2026-08-15/home-weddingcaketopper/app/order/page.tsx b/snapshot-2026-08-15/home-weddingcaketopper/app/order/page.tsx new file mode 100644 index 0000000..0ff9a2c --- /dev/null +++ b/snapshot-2026-08-15/home-weddingcaketopper/app/order/page.tsx @@ -0,0 +1,13 @@ +'use client'; +import { useState } from 'react'; +import { STYLES } from '@/lib/types'; +export default function OrderPage(){ + const [loading,setLoading]=useState(false); const [msg,setMsg]=useState(''); + async function submit(e:React.FormEvent){e.preventDefault();setLoading(true);setMsg(''); const fd=new FormData(e.currentTarget); + const files=fd.getAll('photos') as File[]; if(files.length<3||files.length>6){setMsg('Upload minimaal 3 en maximaal 6 foto’s.'); setLoading(false); return;} + const res=await fetch('/api/orders/create',{method:'POST',body:fd}); const data=await res.json(); if(!res.ok){setMsg(data.error||'Er ging iets mis.');setLoading(false);return;} + const pay=await fetch('/api/payments/session',{method:'POST',headers:{'content-type':'application/json'},body:JSON.stringify({orderId:data.orderId})}); const p=await pay.json(); if(!pay.ok){setMsg(p.error||'Betaling kon niet starten.');setLoading(false);return;} + window.location.href=p.redirectUrl || `/order/checkout?orderId=${data.orderId}`; + } + return
WEDDING cake topper

Start jouw ontwerp

+
+ Totaalbedrag + €99 +
+ +
+ + + +
+ + +

Betalen via iDEAL · Veilig & versleuteld

+
+ +
+
+ + + +
+
+ +

Bedankt voor jullie bestelling!

+
+

Pieter gaat aan de slag met jullie unieke topper.
Je ontvangt binnen 24 uur een bevestiging per e-mail.

Vragen? Stuur een berichtje naar
info@weddingcaketopper.nl

+
€99 · Bestelling ontvangen
+
+
+ + + + + \ No newline at end of file diff --git a/snapshot-2026-08-15/home-weddingcaketopper/public/file.svg b/snapshot-2026-08-15/home-weddingcaketopper/public/file.svg new file mode 100644 index 0000000..004145c --- /dev/null +++ b/snapshot-2026-08-15/home-weddingcaketopper/public/file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/snapshot-2026-08-15/home-weddingcaketopper/public/globe.svg b/snapshot-2026-08-15/home-weddingcaketopper/public/globe.svg new file mode 100644 index 0000000..567f17b --- /dev/null +++ b/snapshot-2026-08-15/home-weddingcaketopper/public/globe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/snapshot-2026-08-15/home-weddingcaketopper/public/next.svg b/snapshot-2026-08-15/home-weddingcaketopper/public/next.svg new file mode 100644 index 0000000..5174b28 --- /dev/null +++ b/snapshot-2026-08-15/home-weddingcaketopper/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/snapshot-2026-08-15/home-weddingcaketopper/public/vercel.svg b/snapshot-2026-08-15/home-weddingcaketopper/public/vercel.svg new file mode 100644 index 0000000..7705396 --- /dev/null +++ b/snapshot-2026-08-15/home-weddingcaketopper/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/snapshot-2026-08-15/home-weddingcaketopper/public/window.svg b/snapshot-2026-08-15/home-weddingcaketopper/public/window.svg new file mode 100644 index 0000000..b2b2a44 --- /dev/null +++ b/snapshot-2026-08-15/home-weddingcaketopper/public/window.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/snapshot-2026-08-15/home-weddingcaketopper/supabase/schema.sql b/snapshot-2026-08-15/home-weddingcaketopper/supabase/schema.sql new file mode 100644 index 0000000..43d884e --- /dev/null +++ b/snapshot-2026-08-15/home-weddingcaketopper/supabase/schema.sql @@ -0,0 +1,24 @@ +create extension if not exists pgcrypto; +create table if not exists orders ( + id uuid primary key default gen_random_uuid(), + created_at timestamptz default now(), + product text not null default 'bruidspaar-taarttopper', + email text not null, + name text not null, + style text not null, + wedding_date text, + notes text, + status text default 'new', + payment_status text default 'pending', + preview_url text, + adyen_session_id text +); +create table if not exists uploads ( + id uuid primary key default gen_random_uuid(), + created_at timestamptz default now(), + order_id uuid references orders(id) on delete cascade, + image_url text not null, + path text +); +-- Maak in Supabase Storage een public bucket: order-uploads +-- Voor live gebruik: maak uploads privé en gebruik signed URLs. diff --git a/snapshot-2026-08-15/home-weddingcaketopper/tsconfig.json b/snapshot-2026-08-15/home-weddingcaketopper/tsconfig.json new file mode 100644 index 0000000..e7ff3a2 --- /dev/null +++ b/snapshot-2026-08-15/home-weddingcaketopper/tsconfig.json @@ -0,0 +1,41 @@ +{ + "compilerOptions": { + "target": "ES2017", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "react-jsx", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": [ + "./*" + ] + } + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/index.html b/snapshot-2026-08-15/var-www/3dcaketopper.nl/index.html new file mode 100644 index 0000000..fa488b4 --- /dev/null +++ b/snapshot-2026-08-15/var-www/3dcaketopper.nl/index.html @@ -0,0 +1,536 @@ + + + + + + 3D Cake Topper — Uniek. Persoonlijk. Onvergetelijk. + + + + + + + +
+

Handgemaakt met AI · Uniek voor jou

+

Jouw gezicht op een
3D cake topper

+

Stel zelf jouw gepersonaliseerde taarttopper samen — kies je stijl, upload een foto, en wij maken er een uniek kunstwerk van.

+
+ + +
+
+ + Ontwerptool online +
+
+ + Jouw gezicht erop +
+
+ + Geproduceerd in Nederland +
+
+ + 100% uniek +
+
+ + + + + + + +
+

Hoe werkt het?

+

In vier stappen naar jouw unieke topper

+
+
+
1
+
Kies je stijl
+
Selecteer het ontwerp dat bij jouw moment past
+
+
+
2
+
Upload je foto
+
Onze AI plaatst jouw gezicht op de topper
+
+
+
3
+
Bekijk & keur goed
+
Pas aan totdat je 100% tevreden bent
+
+
+
4
+
Bestel & geniet
+
Geleverd aan huis, klaar voor op de taart
+
+
+
+ + +
+ 3D Cake Topper  ·  Uniek. Persoonlijk. Onvergetelijk.  ·  © 2025 +
+ + + diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/ontwerp/index.html b/snapshot-2026-08-15/var-www/3dcaketopper.nl/ontwerp/index.html new file mode 100644 index 0000000..0781ec8 --- /dev/null +++ b/snapshot-2026-08-15/var-www/3dcaketopper.nl/ontwerp/index.html @@ -0,0 +1,563 @@ + + + + + +Birthday Cake Topper — Ontwerptool + + + + +
+
+
🎂 Ontwerptool
+

Maak jouw eigen
Birthday Cake Topper

+

Kies je ontwerp, kleur, leeftijd en naam — de AI genereert eerst een master zonder gezicht. Na goedkeuring upload je de foto.

+
+
+ +
+
+
Kies je ontwerp
Stap 1 van 8
+
+
+
+ + +
+

Stap 1

Kies het type jarige

Begin met de categorie. Daarna kies je het specifieke ontwerp.

+
+ +
+ + +
+

Stap 2

Kies de kleur

De AI past de kledingkleur aan in de master-topper.

+
+
+ + +
+

Stap 3

Kies de leeftijd

Alle zichtbare nummers worden naar deze leeftijd aangepast.

+
+
+ + +
+

Stap 4

Naam op de sokkel

De naam komt op de voorkant van de bestaande sokkel.

+
+
+ + +
+

Stap 5

Controle

Klopt alles? Dan genereert de AI een master-topper zonder gezicht.

+
+
Gekozen ontwerp
+
+
+
+ + +
+

Stap 6

AI genereert master-topper

De AI past kleur, leeftijd en naam aan. Het gezicht blijft blanco — dat voegen we pas toe na jouw goedkeuring.

+
+

Master genereren

+

Klik op de knop. De AI genereert de topper met jouw kleur, leeftijd en naam. Gezicht blijft leeg.

+
+ + Nog niet gestart +
+
+
+ + +
+ + +
+

Stap 7

Upload de foto

De AI plaatst het gezicht en kapsel van de jarige op de goedgekeurde master-topper.

+
+
+ +
📸
+

Foto van de jarige uploaden

+

Klik hier of sleep een foto. Gebruik een duidelijke foto van voren, kapsel volledig zichtbaar.

+
+
Tip: goed licht, gezicht van voren, geen zonnebril, kapsel volledig zichtbaar. De AI gebruikt de foto uitsluitend voor gezicht en kapsel.
+
+
+ + +
+

Stap 8

Eindpreview genereren

De AI vervangt nu alleen hoofd en haar. Lichaam, huidskleur van body, pose, tas, sokkel en tekst blijven gelijk.

+
+

Gezicht inplaatsen

+

De goedgekeurde master blijft de basis. Alleen het hoofd- en haargebied wordt aangepast; body blijft volledig ongemoeid.

+
+ + Nog niet gestart +
+
+
+
+ + +
+ + + + + + diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/pad_images.py b/snapshot-2026-08-15/var-www/3dcaketopper.nl/pad_images.py new file mode 100644 index 0000000..a153395 --- /dev/null +++ b/snapshot-2026-08-15/var-www/3dcaketopper.nl/pad_images.py @@ -0,0 +1,21 @@ +from PIL import Image +import os, numpy as np + +def pad_image(src): + img = Image.open(src).convert('RGBA') + w, h = img.size + arr = np.array(img) + non_white = np.where(np.any(arr[:,:,:3] < 230, axis=(1,2)))[0] + if len(non_white) == 0: return + if non_white[0] / h > 0.05: + print(f"Skip: {os.path.basename(src)}"); return + pad_top = int(h * 0.13) + pad_bot = int(h * 0.08) + new_img = Image.new('RGBA', (w, h + pad_top + pad_bot), (255,255,255,255)) + new_img.paste(img, (0, pad_top)) + new_img.save(src, 'PNG') + print(f"Padded: {os.path.basename(src)}") + +for dirpath, dirs, files in os.walk('/var/www/3dcaketopper.nl/verjaardag/images'): + for f in files: + if f.lower().endswith('.png'): pad_image(os.path.join(dirpath, f)) diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/reset_images.py b/snapshot-2026-08-15/var-www/3dcaketopper.nl/reset_images.py new file mode 100644 index 0000000..aede384 --- /dev/null +++ b/snapshot-2026-08-15/var-www/3dcaketopper.nl/reset_images.py @@ -0,0 +1,23 @@ +from PIL import Image +import os, numpy as np + +def reset_image(src): + img = Image.open(src).convert('RGBA') + w, h = img.size + arr = np.array(img) + non_white = np.where(np.any(arr[:,:,:3] < 230, axis=(1,2)))[0] + if len(non_white) == 0: return + top = non_white[0] + bottom = non_white[-1] + if top / h < 0.05: + print(f"Skip: {os.path.basename(src)}"); return + margin = int(h * 0.03) + new_top = max(0, top - margin) + new_bot = min(h, bottom + margin) + cropped = img.crop((0, new_top, w, new_bot)) + cropped.save(src, 'PNG') + print(f"Reset: {os.path.basename(src)}") + +for dirpath, dirs, files in os.walk('/var/www/3dcaketopper.nl/verjaardag/images'): + for f in files: + if f.lower().endswith('.png'): reset_image(os.path.join(dirpath, f)) diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Abraham/Abraham3.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Abraham/Abraham3.png new file mode 100755 index 0000000..de8391a Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Abraham/Abraham3.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Abraham/Man1.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Abraham/Man1.png new file mode 100755 index 0000000..5dc49b8 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Abraham/Man1.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Abraham/Man2.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Abraham/Man2.png new file mode 100755 index 0000000..4ecd884 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Abraham/Man2.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Abraham/man4.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Abraham/man4.png new file mode 100755 index 0000000..8f74318 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Abraham/man4.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Abraham/man5.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Abraham/man5.png new file mode 100755 index 0000000..2c7f438 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Abraham/man5.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Abraham/man6.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Abraham/man6.png new file mode 100755 index 0000000..aacb94f Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Abraham/man6.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Abraham3.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Abraham3.png new file mode 100644 index 0000000..de8391a Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Abraham3.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongedame1.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongedame1.png new file mode 100644 index 0000000..43253b8 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongedame1.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongedame2.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongedame2.png new file mode 100644 index 0000000..e79c203 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongedame2.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongedame3.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongedame3.png new file mode 100644 index 0000000..87be676 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongedame3.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongedame4.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongedame4.png new file mode 100644 index 0000000..c355462 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongedame4.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongedame5.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongedame5.png new file mode 100644 index 0000000..a9f3fce Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongedame5.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongedame6.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongedame6.png new file mode 100644 index 0000000..cac0d3b Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongedame6.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongeman1.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongeman1.png new file mode 100644 index 0000000..59c4f94 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongeman1.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongeman2.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongeman2.png new file mode 100644 index 0000000..c37717c Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongeman2.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongeman3.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongeman3.png new file mode 100644 index 0000000..2709eae Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongeman3.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongeman4.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongeman4.png new file mode 100644 index 0000000..402af7e Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongeman4.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongeman5.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongeman5.png new file mode 100644 index 0000000..3fe3d4f Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongeman5.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongeman6.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongeman6.png new file mode 100644 index 0000000..4bacc99 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongeman6.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongen1.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongen1.png new file mode 100644 index 0000000..89c4a7a Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongen1.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongen2.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongen2.png new file mode 100644 index 0000000..436fbc2 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongen2.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongen3.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongen3.png new file mode 100644 index 0000000..05add7a Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongen3.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongen4.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongen4.png new file mode 100644 index 0000000..1bb566d Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongen4.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongen5.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongen5.png new file mode 100644 index 0000000..c2b8fa7 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongen5.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongen6.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongen6.png new file mode 100644 index 0000000..03f4068 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Jongen6.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Man1.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Man1.png new file mode 100644 index 0000000..5dc49b8 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Man1.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Man2.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Man2.png new file mode 100644 index 0000000..4ecd884 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Man2.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje1.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje1.png new file mode 100644 index 0000000..2a4788c Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje1.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje2.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje2.png new file mode 100644 index 0000000..f9da1c8 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje2.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje3.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje3.png new file mode 100644 index 0000000..d0b0ade Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje3.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje4.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje4.png new file mode 100644 index 0000000..191c2af Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje4.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje5.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje5.png new file mode 100644 index 0000000..e2f0b63 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje5.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje6.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje6.png new file mode 100644 index 0000000..c82634c Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje6.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje7.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje7.png new file mode 100644 index 0000000..d2d1872 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje7.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje8.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje8.png new file mode 100644 index 0000000..5d40ccd Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje8.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje9.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje9.png new file mode 100644 index 0000000..87da0bb Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Meisje9.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Sarah1.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Sarah1.png new file mode 100644 index 0000000..1de020a Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Sarah1.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Sweet 16.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Sweet 16.png new file mode 100644 index 0000000..05a8700 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Sweet 16.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Sweet2 16.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Sweet2 16.png new file mode 100644 index 0000000..6f29ec3 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Sweet2 16.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Sweet3 16.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Sweet3 16.png new file mode 100644 index 0000000..b477797 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Sweet3 16.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Sweet4 Sixteen.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Sweet4 Sixteen.png new file mode 100644 index 0000000..4fd6122 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Sweet4 Sixteen.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Vrouw 1.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Vrouw 1.png new file mode 100644 index 0000000..7228714 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Vrouw 1.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Vrouw3.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Vrouw3.png new file mode 100644 index 0000000..5821544 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Vrouw3.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Vrouw4.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Vrouw4.png new file mode 100644 index 0000000..b5d939e Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Vrouw4.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Vrouw5.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Vrouw5.png new file mode 100644 index 0000000..7135bc9 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/Vrouw5.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/man4.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/man4.png new file mode 100644 index 0000000..8f74318 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/man4.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/man5.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/man5.png new file mode 100644 index 0000000..2c7f438 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/man5.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/man6.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/man6.png new file mode 100644 index 0000000..aacb94f Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/man6.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/vrouw2.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/vrouw2.png new file mode 100644 index 0000000..f1f8067 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Banner/vrouw2.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Logo.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Logo.png new file mode 100755 index 0000000..81dbade Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Logo.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Sarah/Sarah1.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Sarah/Sarah1.png new file mode 100755 index 0000000..1de020a Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Sarah/Sarah1.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Sarah/Vrouw 1.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Sarah/Vrouw 1.png new file mode 100755 index 0000000..7228714 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Sarah/Vrouw 1.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Sarah/Vrouw3.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Sarah/Vrouw3.png new file mode 100755 index 0000000..5821544 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Sarah/Vrouw3.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Sarah/Vrouw4.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Sarah/Vrouw4.png new file mode 100755 index 0000000..b5d939e Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Sarah/Vrouw4.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Sarah/Vrouw5.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Sarah/Vrouw5.png new file mode 100755 index 0000000..7135bc9 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Sarah/Vrouw5.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Sarah/vrouw2.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Sarah/vrouw2.png new file mode 100755 index 0000000..f1f8067 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/Sarah/vrouw2.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind jongen/Jongen1.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind jongen/Jongen1.png new file mode 100644 index 0000000..89c4a7a Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind jongen/Jongen1.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind jongen/Jongen2.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind jongen/Jongen2.png new file mode 100644 index 0000000..436fbc2 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind jongen/Jongen2.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind jongen/Jongen3.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind jongen/Jongen3.png new file mode 100644 index 0000000..05add7a Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind jongen/Jongen3.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind jongen/Jongen4.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind jongen/Jongen4.png new file mode 100644 index 0000000..1bb566d Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind jongen/Jongen4.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind jongen/Jongen5.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind jongen/Jongen5.png new file mode 100644 index 0000000..c2b8fa7 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind jongen/Jongen5.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind jongen/Jongen6.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind jongen/Jongen6.png new file mode 100644 index 0000000..03f4068 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind jongen/Jongen6.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje1.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje1.png new file mode 100644 index 0000000..2a4788c Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje1.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje2.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje2.png new file mode 100644 index 0000000..f9da1c8 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje2.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje3.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje3.png new file mode 100644 index 0000000..d0b0ade Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje3.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje4.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje4.png new file mode 100644 index 0000000..191c2af Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje4.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje5.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje5.png new file mode 100644 index 0000000..e2f0b63 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje5.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje6.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje6.png new file mode 100644 index 0000000..c82634c Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje6.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje7.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje7.png new file mode 100644 index 0000000..d2d1872 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje7.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje8.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje8.png new file mode 100644 index 0000000..5d40ccd Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje8.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje9.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje9.png new file mode 100644 index 0000000..87da0bb Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/kind meisje/Meisje9.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/mannen/Jongeman1.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/mannen/Jongeman1.png new file mode 100644 index 0000000..59c4f94 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/mannen/Jongeman1.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/mannen/Jongeman2.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/mannen/Jongeman2.png new file mode 100644 index 0000000..c37717c Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/mannen/Jongeman2.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/mannen/Jongeman3.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/mannen/Jongeman3.png new file mode 100644 index 0000000..2709eae Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/mannen/Jongeman3.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/mannen/Jongeman4.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/mannen/Jongeman4.png new file mode 100644 index 0000000..402af7e Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/mannen/Jongeman4.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/mannen/Jongeman5.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/mannen/Jongeman5.png new file mode 100644 index 0000000..3fe3d4f Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/mannen/Jongeman5.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/mannen/Jongeman6.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/mannen/Jongeman6.png new file mode 100644 index 0000000..4bacc99 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/mannen/Jongeman6.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Man1.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Man1.png new file mode 100755 index 0000000..5dc49b8 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Man1.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Metnaam.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Metnaam.png new file mode 100644 index 0000000..041bdfd Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Metnaam.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Sweet16 face.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Sweet16 face.png new file mode 100755 index 0000000..696ede6 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Sweet16 face.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Sweet2 16 blauw.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Sweet2 16 blauw.png new file mode 100755 index 0000000..5d16220 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Sweet2 16 blauw.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Sweet2 16 groen.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Sweet2 16 groen.png new file mode 100755 index 0000000..ce2552c Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Sweet2 16 groen.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Sweet2 16 roze.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Sweet2 16 roze.png new file mode 100644 index 0000000..eac98a4 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Sweet2 16 roze.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Sweet2 16.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Sweet2 16.png new file mode 100755 index 0000000..6f29ec3 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Sweet2 16.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Sweet2 18 bauw.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Sweet2 18 bauw.png new file mode 100755 index 0000000..e1846d3 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Sweet2 18 bauw.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Sweet2 25 blauw.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Sweet2 25 blauw.png new file mode 100755 index 0000000..09d1b56 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Sweet2 25 blauw.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Vrouw5.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Vrouw5.png new file mode 100755 index 0000000..7135bc9 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/ontwerphome/Vrouw5.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/sweet16/Sweet 16.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/sweet16/Sweet 16.png new file mode 100755 index 0000000..05a8700 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/sweet16/Sweet 16.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/sweet16/Sweet2 16.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/sweet16/Sweet2 16.png new file mode 100755 index 0000000..6f29ec3 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/sweet16/Sweet2 16.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/sweet16/Sweet3 16.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/sweet16/Sweet3 16.png new file mode 100755 index 0000000..b477797 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/sweet16/Sweet3 16.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/sweet16/Sweet4 Sixteen.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/sweet16/Sweet4 Sixteen.png new file mode 100755 index 0000000..4fd6122 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/sweet16/Sweet4 Sixteen.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Jongedame1.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Jongedame1.png new file mode 100644 index 0000000..43253b8 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Jongedame1.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Jongedame2.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Jongedame2.png new file mode 100644 index 0000000..e79c203 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Jongedame2.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Jongedame3.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Jongedame3.png new file mode 100644 index 0000000..87be676 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Jongedame3.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Jongedame4.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Jongedame4.png new file mode 100644 index 0000000..c355462 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Jongedame4.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Jongedame5.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Jongedame5.png new file mode 100644 index 0000000..a9f3fce Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Jongedame5.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Jongedame6.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Jongedame6.png new file mode 100644 index 0000000..cac0d3b Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Jongedame6.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Sarah1.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Sarah1.png new file mode 100644 index 0000000..1de020a Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Sarah1.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Vrouw 1.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Vrouw 1.png new file mode 100644 index 0000000..7228714 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Vrouw 1.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Vrouw3.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Vrouw3.png new file mode 100644 index 0000000..5821544 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Vrouw3.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Vrouw4.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Vrouw4.png new file mode 100644 index 0000000..b5d939e Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Vrouw4.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Vrouw5.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Vrouw5.png new file mode 100644 index 0000000..7135bc9 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/Vrouw5.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/vrouw2.png b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/vrouw2.png new file mode 100644 index 0000000..f1f8067 Binary files /dev/null and b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/images/vrouwen/vrouw2.png differ diff --git a/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/index.html b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/index.html new file mode 100644 index 0000000..e0aaef6 --- /dev/null +++ b/snapshot-2026-08-15/var-www/3dcaketopper.nl/verjaardag/index.html @@ -0,0 +1,592 @@ + + + + + +Birthday Cake Topper — Jouw gezicht op een unieke taarttopper + + + + + + +
+ +
+ + + + + +
+
✨ Made for your special day
+

Jouw gezicht op een
unieke taarttopper

+

Voor elke verjaardag — van Sweet Sixteen tot Sarah en Abraham. Volledig gepersonaliseerd met jouw foto, leeftijd en kleur.

+
+
+ + +
+
+ +

Hoe werkt onze ontwerptool?

+
+ +
+ + +
+
+
1
+
+

Kies je karakter

+

Man, vrouw, jong of oud — kies het type dat past bij de jarige.

+
+
+
+
+ Man + Man +
+
+ Vrouw + Vrouw +
+
+ Sweet 16 + Tiener +
+
+
+ + +
+
+
2
+
+

Kies je kleur

+

Zwart, blauw of groen — volledig afgestemd op de stijl van de jarige.

+
+
+
+
+ Zwart + ⬛ Zwart +
+
+ Blauw + 🔵 Blauw +
+
+ Roze + 🩷 Roze +
+
+
+ + +
+
+
3
+
+

Kies de leeftijd

+

Leeftijd maakt niet uit. De topper wordt aangepast op de leeftijd van de jarige.

+
+
+
+
+ 16 jaar + 16 jaar +
+
+ 18 jaar + 18 jaar +
+
+ 25 jaar + 25 jaar +
+
+
+ + +
+
+
4
+
+

Upload je foto

+

Stuur een selfie of pasfoto — onze AI verwerkt jouw gezicht in de topper.

+
+
+
+
+
📸
+

Jouw foto
uploaden

+
+
+
+ Resultaat + ✨ Jouw topper! +
+
+
+ + +
+
+
5
+
+

Vul aan met je naam

+

Geef de topper een persoonlijk tintje — de naam van de jarige wordt er mooi op verwerkt.

+
+
+
+
+ Topper met naam + ✨ Met jouw naam erbij! +
+
+
+ +
+
+ + +
+

Maak jouw unieke topper

+

Eenvoudig, snel en volledig op maat — klaar in een paar minuten.

+ 🎂 Start nu je eigen gepersonaliseerde ontwerp +
+
Betalen via iDEAL
+
Geproduceerd in Nederland
+
AI preview vóór betaling
+
100% op maat gemaakt
+
+
+ + + + + + diff --git a/snapshot-2026-08-15/var-www/html/index.html b/snapshot-2026-08-15/var-www/html/index.html new file mode 100644 index 0000000..0223ccf --- /dev/null +++ b/snapshot-2026-08-15/var-www/html/index.html @@ -0,0 +1 @@ +WeddingCakeTopper

WeddingCakeTopper.nl is live 🎂

Maak jouw unieke gepersonaliseerde bruidspaar taarttopper.

diff --git a/snapshot-2026-08-15/var-www/html/index.nginx-debian.html b/snapshot-2026-08-15/var-www/html/index.nginx-debian.html new file mode 100644 index 0000000..e8f5622 --- /dev/null +++ b/snapshot-2026-08-15/var-www/html/index.nginx-debian.html @@ -0,0 +1,23 @@ + + + +Welcome to nginx! + + + +

Welcome to nginx!

+

If you see this page, the nginx web server is successfully installed and +working. Further configuration is required.

+ +

For online documentation and support please refer to +nginx.org.
+Commercial support is available at +nginx.com.

+ +

Thank you for using nginx.

+ +