Repository organizzato in 2 ambienti separati:
framer-site/→ ambiente dedicato al sito su Framer (code components).cloudflare-worker/→ ambiente dedicato al Worker Cloudflare (API upload/lista/serve immagini su R2).
Contiene i componenti custom da usare nel progetto Framer.
framer-site/components/RSVP_Google_Sheets.tsxframer-site/components/WeddingPhotoWall.tsx- UI aggiornata: action bar sempre sticky bottom con props Framer dedicate (Fill, Padding, Radius, Border, Shadows, Z Index) per styling e UX.
- Fix controllo
Shadows: ora il valore BoxShadow proveniente dalle property controls Framer viene normalizzato correttamente anche quando arriva come oggetto/lista, quindi lo shadow della sticky action bar si applica sempre. - Overlay gallery completamente ridisegnato: navigazione foto con frecce, tastiera (← → Esc) e swipe touch.
- Il lightbox mostra ora l'immagine senza riquadro quadrato forzato, con visualizzazione fluida in full viewport.
- Lazy loading progressivo della galleria: rendering iniziale a blocchi e caricamento automatico di altre foto durante lo scroll.
- Nuovo limite preview canvas Framer (
Canvas · Max foto) per ridurre il carico in editing mostrando solo le prime N immagini nel canvas. - Rimossa la card/cella di upload fissa dalla griglia foto; l'upload resta disponibile solo nella action bar sticky.
- Nel lightbox è disponibile un pulsante download per salvare la foto aperta in dimensione originale: il download viene forzato in full size tramite query
?download=1. - Durante upload foto in corso, il pulsante refresh della action bar viene sostituito da un indicatore circolare di avanzamento percentuale (con icona stop centrale) per feedback immediato sul caricamento.
framer-site/README.md
- Apri Framer e vai nei Code Components.
- Inserisci il contenuto del file
RSVP_Google_Sheets.tsxoWeddingPhotoWall.tsx. - Imposta le property del componente.
- Configura l'endpoint del componente verso il dominio del Worker Cloudflare.
Contiene il Worker che:
- gestisce upload immagini (
POST /api/upload) - elenca foto (
GET /api/photos) - serve immagini da R2 (
GET /img/<key>)
cloudflare-worker/src/index.jscloudflare-worker/wrangler.tomlcloudflare-worker/package.json
- account Cloudflare
- bucket R2 creato
- Node.js installato
cd cloudflare-worker
npm installNel dashboard (o via wrangler) imposta:
- binding:
PHOTOS - bucket: il tuo bucket R2 (es.
sicileni-wedding-photos)
npx wrangler secret put EVENT_CODE
npx wrangler secret put R2_ACCOUNT_ID
npx wrangler secret put R2_ACCESS_KEY_ID
npx wrangler secret put R2_SECRET_ACCESS_KEYNota: il codice attuale usa in modo diretto
EVENT_CODEper autorizzare upload. Gli altri secret sono mantenuti perché presenti nelle specifiche iniziali.
npm run devnpm run deployCon Worker pubblicato su https://<nome-worker>.<subdomain>.workers.dev:
GET /api/photosPOST /api/upload(multipart/form-data con campofilee headerX-Event-Code)GET /img/<key>(supporta anche?download=1per forzare il download dell'originale)
Esempio base upload:
curl -X POST "https://<worker>.workers.dev/api/upload" \
-H "X-Event-Code: <EVENT_CODE>" \
-F "file=@/percorso/immagine.jpg"- CORS aperto (
Access-Control-Allow-Origin: *) nel Worker. - Limite upload per file: 15MB.
- MIME consentiti:
image/jpeg,image/png,image/webp,image/heic,image/heif. - Le immagini sono salvate con prefisso
uploads/in R2.