Log the events you live.
A mobile-first logbook for sports games, concerts, movies, and more.
People track the events they attend in Notes, spreadsheets, photos, or memory. Those methods are fragmented and hard to search. LogIt replaces all of that with a clean, structured logbook that feels like a personal collection.
Think Letterboxd, but for live events — starting with sports.
| Feature | Description |
|---|---|
| 🔍 Game Search | Find any game from a structured sports database powered by ESPN |
| ✅ One-Tap Logging | Log that you were there, with optional notes, rating, photos, and companions |
| 📖 Personal Logbook | Browse and filter your full history by sport, team, venue, or date |
| 📊 Event Detail | Rich game context — teams, score, venue, date, box score |
| 📡 Feed | See your activity and discover what others are logging |
| 🔒 Privacy Controls | Each log can be public, friends-only, or private |
| 🏟️ Venue Enrichment | Auto-populated venue photos and coordinates via Wikimedia + Nominatim |
| 🏈 Multi-Sport | NBA, NFL, NHL, MLB, WNBA + 6 NCAA sports (Football, Basketball M/W, Hockey M/W, Baseball) |
| 🛠️ Admin Portal | Static HTML dashboard for viewing venue and game data with filters |
| Layer | Technology |
|---|---|
| Framework | React Native with Expo (SDK 54) |
| Navigation | Expo Router (file-based routing) |
| Database | Supabase (Postgres + Row Level Security) |
| Auth | Firebase Authentication (Google + Apple Sign-In) |
| API / Cron | Vercel (serverless functions + scheduled cron jobs) |
| Sports Data | ESPN API (NBA, NFL, NHL, MLB, WNBA + 6 NCAA leagues) |
| Venue Media | Nominatim (geocoding) + Wikimedia Commons (images) |
| Language | TypeScript |
├── app/ # Expo Router screens (file-based routing)
│ ├── (auth)/ # Auth screens (login, onboarding)
│ ├── (tabs)/ # Main tab screens
│ │ ├── feed.tsx # Activity feed
│ │ ├── logbook.tsx # Personal logbook with filters/sort
│ │ ├── add-log.tsx # Log new event (search, browse by sport)
│ │ ├── search.tsx # Explore & discover events
│ │ └── profile.tsx # User profile
│ └── _layout.tsx # Root layout with auth guard
├── components/ # Reusable UI components
│ ├── ui/ # GlassCard, EventDetailModal, EditLogModal,
│ │ # SharedModal, SettingsModal, SocialModal,
│ │ # PageHeader, etc.
│ └── ...
├── server-lib/ # Shared server utilities
│ ├── espn.ts # Shared ESPN fetch/parse/upsert for all sports
│ ├── venue-lookup.ts # findOrCreateVenue() + auto-enrichment
│ ├── nba-venues.ts # Static NBA arena mappings (30 teams)
│ ├── nfl-venues.ts # Static NFL stadium mappings (32 teams)
│ ├── nhl-venues.ts # Static NHL arena mappings (32 teams)
│ └── supabase-admin.ts # Supabase service-role client
├── api/ # Vercel serverless functions
│ ├── cron/ # Scheduled sync jobs
│ │ ├── sync-nba.ts # Daily NBA game sync (ESPN)
│ │ ├── sync-nfl.ts # Daily NFL game sync (ESPN)
│ │ ├── sync-nhl.ts # Daily NHL game sync (ESPN)
│ │ ├── backfill-nba.ts # Historical NBA season backfill
│ │ ├── backfill-nfl.ts # Historical NFL season backfill
│ │ └── backfill-nhl.ts # Historical NHL season backfill
│ ├── events/ # Event search & box score APIs
│ ├── logs/ # Log CRUD APIs
│ └── scripts/ # One-off scripts (venue backfill)
├── admin/ # Static HTML admin dashboard
│ └── index.html # Venue & game data viewer with filters
├── store/ # Zustand state stores
├── constants/ # Design tokens, colors, typography
├── supabase/migrations/ # Database migrations (numbered SQL files)
├── docs/ # Planning & reference documentation
│ ├── event-types/ # Workflow guides for adding new event types
│ └── *.md # Product, tech stack, data models, API, etc.
└── assets/ # Images, fonts, and icons
- Node.js 18+
- Expo CLI
- Xcode 15+ (for iOS builds)
- Supabase project with Postgres
- Firebase project with Auth enabled
- Vercel account (for API deployment)
# Clone the repo
git clone https://github.com/jonahr4/LogIt.git
cd LogIt
# Install dependencies
npm install
# Create your .env.local file
cp .env.example .env.local
# Fill in Supabase, Firebase, and Vercel credentials
# Start the dev server
npx expo start
# Run on iOS simulator
npx expo run:ios| Variable | Description |
|---|---|
NEXT_PUBLIC_SUPABASE_URL |
Supabase project URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY |
Supabase anon/public key |
SUPABASE_SERVICE_ROLE_KEY |
Supabase service-role key (server only) |
FIREBASE_API_KEY |
Firebase API key |
FIREBASE_AUTH_DOMAIN |
Firebase auth domain |
CRON_SECRET |
Secret for Vercel cron job auth |
All planning and reference docs live in docs/:
| Document | Purpose |
|---|---|
PRODUCT_OVERVIEW.md |
Vision, positioning, and MVP scope |
DATA_MODELS.md |
Database schema and entity relationships |
TECH_STACK.md |
Architecture, tech choices, and project structure |
UI_AND_FLOWS.md |
Screens, navigation, and design system |
API_DESIGN.md |
API endpoints and request/response contracts |
FEATURE_ROADMAP.md |
Phased feature breakdown with progress |
SOCIAL_FEATURES.md |
Privacy model, friend system, and social layer |
EXTERNAL_SERVICES.md |
Data ingestion and external API integration |
ADMIN_DASHBOARD.md |
Admin portal setup, features, and RLS policies |
event-types/sports.md |
Workflow for adding new sports leagues |
| Phase | Focus |
|---|---|
| MVP (v1.0) | Auth, NBA game search, log creation with photos, logbook, event detail, feed |
| v1.5 | Multi-sport (NFL ✅, NHL ✅, MLB ✅, WNBA ✅, 6 NCAA ✅), friend system, stats, map view |
| v2.0 | Shared attendance, event discovery & reviews, comments/reactions, beyond sports |
🟢 MVP core complete — Auth, onboarding, full UI (Spatial Green v2 design with unified SharedModal system), 11 sports leagues syncing from ESPN (NBA, NFL, NHL, MLB, WNBA + 6 NCAA), Supabase-backed event search with fuzzy matching and league filtering, log creation with companions, personal logbook with sort/filter, venue auto-enrichment, Letterboxd-style profile with Top 4 + stats + highlights, global settings + social modals accessible from every screen, and admin data portal.
| Date | Update |
|---|---|
| 2026-05-28 | UI refactor — SharedModal unified modal system, global PageHeader (settings + social on all screens), Letterboxd-style profile (Top 4, stats, highlights), sticky headers on feed/logbook/explore, SettingsModal + SocialModal + StatDetailModal all using SharedModal shell |
| 2026-04-02 | WNBA integration — sync + backfill + 13 WNBA teams in browse UI, cron at 6:20 AM UTC |
| 2026-04-02 | MLB integration — sync + backfill + 30 MLB teams in browse UI, cron at 6:10 AM UTC |
| 2026-04-02 | NHL integration — sync + backfill + 32 NHL teams in browse UI, cron at 6:10 AM UTC |
| 2026-03-31 | Season metadata — season_type + playoff round tracking, multi-sport box score, team browse with season headers |
| 2026-03-31 | NFL integration — shared ESPN utility, sync + backfill scripts, 32 NFL teams in browse UI |
| 2026-03-31 | Admin portal — static HTML dashboard for venues & games with filters, pagination, sorting |
| 2026-03-31 | Venue auto-enrichment — Nominatim geocoding + Wikimedia Commons images |
| 2026-03-30 | Logbook & Add Log — connected to Supabase, real API search, log creation |
| 2026-03-29 | Event Detail Modal — ticket-style UI, box score, delete log |
| 2026-03-28 | NBA game sync — ESPN cron job, venue normalization, sports_events child table |
| 2026-03-27 | UI foundation — Spatial Green v2 design system, glassmorphism, floating nav |
| 2026-03-27 | Auth — Firebase Google + Apple Sign-In, cross-platform hybrid strategy |
Log it. Remember it. Own it.