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.
58 lines
1.1 KiB
Markdown
58 lines
1.1 KiB
Markdown
# 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
|