Landing Page für AsphaltGhost mit Waitlist (Pre-Registration) bzw. Download-Buttons wenn die App live ist.
cd homepage
npm install
cp .env.example .env # falls vorhanden, sonst .env anlegen
# .env: VITE_WAITLIST_API_URL auf die waitlist-signup Edge Function setzen (siehe unten)
npm run devÖffne http://localhost:5173.
npm run buildAusgabe in dist/. Auf Vercel, Netlify oder GitHub Pages deployen. Dort die gleichen Umgebungsvariablen setzen wie in .env.example.
| Variable | Beschreibung |
|---|---|
VITE_WAITLIST_API_URL |
URL der waitlist-signup Edge Function. |
VITE_APP_CONFIG_URL |
Optional. URL der app-config Edge Function. Wenn gesetzt, werden app_live und Store-URLs aus der Supabase-Tabelle app_public_config geladen (keine Env-Variablen nötig). |
VITE_APP_LIVE / VITE_APP_STORE_URL / VITE_APP_PLAY_URL |
Fallback, wenn VITE_APP_CONFIG_URL nicht gesetzt ist. |
App-Konfiguration aus Supabase: Wenn VITE_APP_CONFIG_URL gesetzt ist, lädt die Homepage beim Start die Werte aus der Tabelle app_public_config (über die Edge Function). Dort im Supabase Dashboard Table Editor → app_public_config die Zeile mit id = 1 bearbeiten: app_live (boolean), store_url_apple, store_url_play (text). So kannst du „App live“ und Store-Links zentral in Supabase pflegen.
Die Waitlist speichert E-Mails in einer Tabelle im gleichen Supabase-Projekt wie die App. RLS (Row Level Security) sorgt dafür, dass nur anonyme Inserts erlaubt sind – niemand kann die Liste ohne Admin-Zugang auslesen.
Die Waitlist-Tabelle wird durch eine Migration im Haupt-Repo (base-app) angelegt.
Option A – Supabase CLI (empfohlen):
# Im Haupt-Repo (base-app)
npx supabase db pushOption B – Supabase Dashboard:
- Supabase Dashboard öffnen → Projekt wählen.
- SQL Editor → New query.
- Inhalt der Datei
supabase/migrations/0023_waitlist.sqlaus dem Haupt-Repo kopieren und ausführen (Run).
Die Migration enthält bereits:
alter table public.waitlist enable row level security;Damit ist RLS für die Tabelle public.waitlist aktiv. Ohne RLS könnte jeder mit dem Anon-Key alle Einträge lesen oder löschen. Mit RLS und der Policy „Allow anonymous insert“ gilt:
- anon (nicht eingeloggte Nutzer): nur
INSERTerlaubt – Eintrag in die Waitlist möglich. - Kein
SELECT,UPDATEoderDELETEfür anon – die Liste ist öffentlich nicht einsehbar.
Im Supabase Dashboard: Database → Tables → waitlist → RLS Policies.
Es sollte eine Policy existieren:
- Name: z. B. „Allow anonymous insert“
- Operation: INSERT
- Target roles: anon
- WITH CHECK:
true
Für app_live und Store-URLs aus Supabase:
npx supabase db pushDamit wird u. a. die Migration 0024_app_public_config.sql ausgeführt. Anschließend im Table Editor die Tabelle app_public_config öffnen, Zeile id = 1 bearbeiten: app_live, store_url_apple, store_url_play setzen.
Die Waitlist-Anmeldung läuft über eine Edge Function, damit Supabase-URL und Keys nicht im Frontend stehen.
Im Haupt-Repo (base-app):
npx supabase functions deploy waitlist-signup
npx supabase functions deploy app-configBeide Functions sind ohne JWT aufrufbar (verify_jwt = false in supabase/config.toml).
URLs für die Homepage:
VITE_WAITLIST_API_URL:https://<project-ref>.supabase.co/functions/v1/waitlist-signupVITE_APP_CONFIG_URL:https://<project-ref>.supabase.co/functions/v1/app-config
In homepage/.env (oder im Deployment-Host):
VITE_WAITLIST_API_URL= URL der deployten Edge Function (siehe oben).
Für den Modus App live (Download-Buttons statt Waitlist):
VITE_APP_LIVE=trueund optionalVITE_APP_STORE_URLundVITE_APP_PLAY_URLmit den finalen Store-Links.