Architecture
High-Level
AsphaltGhost ist eine mobile Expo App mit Supabase als Backend.
- Frontend: Expo Router + React Native + TypeScript
- Backend: Supabase (Auth, Postgres, Storage, Edge Functions)
- Maps: Mapbox (
@rnmapbox/maps) - Data Fetching: React Query
- Local State: Zustand
App Routing
Routenstruktur (vereinfacht):
app/_layout.tsx- Root Layout, Auth Guard, Providerapp/(auth)/login.tsx,app/(auth)/register.tsxapp/(tabs)/map.tsxapp/(tabs)/submit.tsxapp/(tabs)/feed.tsxapp/(tabs)/profile.tsxapp/spot/[id].tsxapp/post/[id].tsxapp/profile/[id].tsxapp/create-post.tsxapp/moderation.tsxapp/pick-location.tsx
Data Layer
API Layer in src/api/ kapselt Supabase Zugriff:
auth.ts- Login/Register/Signoutspots.ts- Spot CRUD, Ratings, Comments, AI-Analyze Callposts.ts- Feed, Create Post, Likes, Post Commentsprofiles.ts- Profil und Moderator-Status
Hooks in src/hooks/ kapseln Query/Mutation Logik (React Query):
useSpots,useSpotDetail,useSubmitSpotusePosts,useProfile,useModeration
Security Model
- RLS auf allen Haupttabellen aktiv
- Owner-basierte Policies fuer User-Content
- Moderation ueber
moderatorsTabelle und spezielle Spots-Policies
Native Integration
- Mapbox wird appweit in
src/lib/mapbox.tsinitialisiert - Supabase Session wird ueber
expo-secure-storepersistiert (src/lib/supabase.ts)
Non-Goals (MVP)
- Keine komplexe Rollenverwaltung ausser Moderation
- Kein umfassendes Analytics/Telemetry Setup
- Kein Production-grade Admin Panel ausser Basis-Moderation-View