A family notification app built with Expo + Supabase.
This commit scaffolds the foundation: Supabase client wiring, Expo Router navigation shell, and email/password auth. Features (events, push notifications) are placeholders to be filled in.
-
Install dependencies
npm install
-
Create a Supabase project at https://supabase.com and copy the project URL + anon key.
-
Copy
.env.exampleto.envand fill in your credentials:cp .env.example .env
EXPO_PUBLIC_SUPABASE_URL=https://<project-ref>.supabase.co EXPO_PUBLIC_SUPABASE_ANON_KEY=<anon-key>
-
Apply the initial schema. Open the Supabase SQL editor and paste
supabase/migrations/0001_init_profiles.sql, or runsupabase db pushif you use the Supabase CLI. This creates theprofilestable, thehandle_new_usertrigger, and RLS policies. -
Start the app
npx expo start
src/
app/
_layout.tsx Root layout + auth gate (redirects based on session)
(auth)/
_layout.tsx
sign-in.tsx
sign-up.tsx
(tabs)/
_layout.tsx Bottom tab nav
index.tsx Home
events.tsx
notifications.tsx
settings.tsx Profile + sign out
components/ Shared UI (themed text/view, etc.)
constants/theme.ts Colors, spacing
hooks/
use-session.ts Subscribes to Supabase auth state
use-theme.ts
lib/supabase.ts Supabase client (uses AsyncStorage for session)
store/auth.ts Zustand auth store
supabase/
migrations/0001_init_profiles.sql
src/lib/supabase.tscreates the client withAsyncStorageso sessions persist across app launches.src/hooks/use-session.tscallssupabase.auth.getSession()once at startup and subscribes toonAuthStateChange.src/app/_layout.tsxreads the session from the Zustand store and redirects: no session →/sign-in, has session →/.- Sign-up writes
nametouser_metadata; thehandle_new_usertrigger reads it intopublic.profiles.
- Family groups (
families,family_memberstables and invite-code flow) - Events CRUD + upcoming-events feed
- Expo push notifications + the
/functions/notifyEdge Function - NativeWind styling (currently uses StyleSheet + the template's themed components)