Unabhängige Rangliste für Padel-Amateure. SvelteKit auf Cloudflare Pages, Daten in Supabase.
Die Landing-Page, das Vereins-Widget und der Rating-Kern liegen in diesem Repo. Phase 1: Site, Waitlist, öffentliches Club-Leaderboard. Noch kein Login und kein Match-Melden.
@sveltejs/adapter-cloudflareembed.jspadelindex/padelindex). Hosting ist Cloudflare Pages, nicht GitHub Pages.cp .env.example .env
# Keys eintragen, siehe unten
npm install
npm run dev
/c/stc-oberland/api/v1/clubs/stc-oberland/leaderboard?limit=10/embed/stc-oberland/embed.jsOhne Supabase-Keys läuft die Landing trotzdem. Waitlist und Leaderboard antworten dann mit 503.
npm test
npm run check
npm run build
eu-central-1).http://localhost:5173).PUBLIC_SUPABASE_URLanon public → PUBLIC_SUPABASE_ANON_KEYservice_role → SUPABASE_SERVICE_ROLE_KEY (nie ins Client-Bundle, nie committen)Storage-Bucket ranking-claims erst in Phase 2 (Screenshot-Nachweise).
padelindex/padelindex koppeln.npm run build.svelte-kit/cloudflare| Variable | Secret? |
|---|---|
PUBLIC_SUPABASE_URL |
nein |
PUBLIC_SUPABASE_ANON_KEY |
nein |
SUPABASE_SERVICE_ROLE_KEY |
ja |
padelindex.de auf dieses Pages-Projekt.Das alte padelindex.github.io ist kein Host mehr — GitHub Pages dort deaktivieren.
.envSiehe .env.example. Datei nicht committen.
| Pfad | Inhalt |
|---|---|
src/routes/+page.svelte |
Landing |
src/routes/c/[slug] |
Öffentliche Vereinsseite |
src/routes/embed/[slug] |
iframe-Fallback fürs Widget |
src/routes/api/waitlist |
Waitlist → Postgres |
src/routes/api/v1/clubs/[slug]/leaderboard |
Widget-API (CORS, Cache 5 min) |
static/embed.js |
Custom Element für Vereinswebsites |
src/lib/server/rating/ |
OpenSkill-Kern, Confirm-Worker, Claims |
supabase/migrations/ |
Schema + RPCs |
docs/ |
Widget-Konzept, Verification-Pipeline |
applyRatingForMatch().wrangler.toml) für die 48h-Frist.Sobald die Domain steht:
<script src="https://padelindex.de/embed.js" async></script>
<padelindex-leaderboard club="stc-oberland" limit="10" accent="#0F6E5C">
</padelindex-leaderboard>
Lokal: api="http://localhost:5173/api/v1" am Custom Element setzen.