App mobile nativa Expo/React Native per capire dove si muove la serata: luoghi creati da admin, filtri geografici, lista + mappa, login OTP Supabase e presenza unica Io ci sono! per notte.
- App Expo TypeScript con modalita demo locale pronta da aprire.
- Architettura repository con source
mock+supabasee fallback resiliente. - UI mobile-first con lista calda, mappa, dettagli luogo con foto, amici, QR invito e console admin.
- Redesign Neo-Mediterraneo con animazioni Reanimated e supporto Reduce Motion.
- Dataset demo Sicilia con luoghi curati in tutte le 9 province, punteggi di affollamento e immagini da Wikimedia Commons.
- Regole dominio testate: reset alle 06:00, una sola presenza per notte, avatar visibili solo agli amici non bloccati.
- Client Supabase opzionale: se le env non sono configurate, l'app resta usabile in demo.
- Schema Supabase in
supabase/schema.sqlcon tabelle, RLS e RPC principali.
npm install
npm startPoi apri con Expo Go o con simulatori iOS/Android.
npm run start:onlinePer rete locale (stessa Wi-Fi):
npm run start:lan- Crea un progetto Supabase.
- Esegui
supabase/schema.sqlnel SQL editor. - Copia
.env.examplein.enve imposta:
EXPO_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
EXPO_PUBLIC_SUPABASE_ANON_KEY=your-anon-key- Abilita Phone Auth nel pannello Supabase e configura un provider SMS.
- Per rendere un utente admin, imposta
app_metadata.role = "admin"sull'utente Supabase.
npm run typecheck
npm test
npm run check
npm run check:images
npm run report:nightly
npm run report:publish-assets
npm run report:verify-assets
npm run ios
npm run android
npm run web:exportcheck:images per default fallisce solo sui 404 (asset mancanti) e non su errori rete temporanei.
Scansiona automaticamente tutti i file TypeScript in src/data/ (esclusi test e .d.ts) per trovare imageUrl.
Modalita strict (utile in CI notturna):
IMAGE_CHECK_STRICT=1 npm run check:imagesFlag opzionali:
IMAGE_CHECK_FAIL_ON_429=1per fallire anche su rate limit.IMAGE_CHECK_FAIL_ON_5XX=1per fallire anche su errori server remoti.IMAGE_CHECK_FAIL_ON_NETWORK=1per fallire su errori DNS/rete.IMAGE_CHECK_FAIL_ON_INCONCLUSIVE=1per fallire se non arriva nessuna risposta HTTP (verifica non conclusiva).IMAGE_CHECK_CONCURRENCY=6per aumentare/ridurre controlli URL in parallelo (default4).IMAGE_CHECK_INTER_REQUEST_DELAY_MS=200per regolare la pausa tra richieste successive (default120ms).IMAGE_CHECK_RETRY_ATTEMPTS=2per aggiungere retry su errori transienti (429/5xx) oltre al primo tentativo (default1).IMAGE_CHECK_RETRY_BACKOFF_MS=500per aumentare/ridurre il backoff progressivo tra retry (default350ms).IMAGE_CHECK_RETRY_ON_NETWORK=1per ritentare anche gli errori di rete (status=0), utile solo in ambienti con rete intermittente.IMAGE_CHECK_MAX_LIST_ITEMS=50per aumentare/ridurre quanti URL vengono stampati per categoria.IMAGE_CHECK_RESULT_JSON_PATH=nightly-report/image-check.jsonper salvare il riepilogo strutturato in JSON.
Export statico:
npm run web:exportIl comando crea dist/, pronto da pubblicare su hosting statico (Netlify, Vercel, Cloudflare Pages, GitHub Pages).
Per override manuale del path base (se il sito non e su root dominio):
EXPO_DEPLOY_BASE_URL=/nome-repo npm run web:exportAnteprima locale della build:
cd dist
python3 -m http.server 4173- Workflow CI:
.github/workflows/ci.yml(typecheck + test + export web su push/PR). - Workflow deploy:
.github/workflows/deploy-pages.yml(genera bundle web + report CI e pubblicadist/su GitHub Pages a ogni push sumain). - Workflow report notturno:
.github/workflows/nightly-ci-report.yml(esegue quality suite + export + check immagini, pubblica artifact del report e ridistribuisce il sito con report aggiornato ogni notte, cron UTC01:10).
Il deploy Pages imposta automaticamente EXPO_DEPLOY_BASE_URL:
- root (
/) se il repository eowner.github.io /repo-nameper i repository progetto
Report locale equivalente al workflow notturno:
npm run report:nightlyOutput:
nightly-report/nightly-ci-report.mdnightly-report/nightly-ci-report.jsonnightly-report/nightly-ci-report.htmlnightly-report/nightly-ci-status.jsonnightly-report/image-check-summary.jsonnightly-report/logs/*.log
Se lo script del report va in errore interno (es. configurazione path non valida), viene comunque prodotto un report di fallback completo con dettagli in nightly-report/logs/internal-error.log, cosi la pipeline puo continuare a pubblicare artifact diagnostici.
Il JSON include anche:
results[].status(PASS,WARN,FAIL,TIMEOUT)hasWarningspublicReportUrl(quando determinabile da ambiente GitHub)
Per pubblicare il report dentro la build web (dist/nightly-ci/):
npm run report:publish-assetsLo script crea anche dist/.nojekyll per evitare che GitHub Pages ignori asset/cartelle che iniziano con _ (es. _expo/).
Per validare l'integrita del bundle pubblicato (JSON/HTML/status e file richiesti):
npm run report:verify-assetsNel CI questa verifica viene eseguita dopo il publish assets, sia nel deploy su push sia nel workflow notturno.
Variabili opzionali per URL pubblico/report:
NIGHTLY_REPORT_PUBLIC_SUBDIR=nightly-ci(subpath pubblico dove copiare il report indist/).NIGHTLY_PUBLIC_REPORT_URL=https://example.com/nightly-ci/(override esplicito URL da mostrare nel report Markdown/HTML).
In GitHub Actions il report notturno abilita automaticamente il fail su check immagini inconclusivo (nessuna risposta HTTP) usando NIGHTLY_FAIL_ON_IMAGE_INCONCLUSIVE (default: attivo quando CI=true).
Per attivare GitHub Pages:
- Apri il repository su GitHub.
- Vai su Settings -> Pages.
- In Build and deployment, imposta Source: GitHub Actions.
Dopo il primo deploy riuscito, il sito sara disponibile su https://<owner>.github.io/<repo>/.
Il report pubblico e raggiungibile su https://<owner>.github.io/<repo>/nightly-ci/.
- La posizione GPS viene richiesta solo in foreground per centrare la mappa; non viene salvata come posizione live.
- Il conteggio totale dei luoghi e pubblico; gli avatar/presenze nominative sono visibili solo agli amici accettati.
- La presenza puo essere spostata durante la stessa serata: il vecchio luogo scende e il nuovo sale.
Built and maintained by Alessandro Caramazza — informatico in Sicilia. Software su misura, automazioni, gestionali e bot per PMI.