Swim Carpool
Mobile-first web app for swim team families to coordinate practice drop-offs and pick-ups. Share one private link; each parent picks their family name once on their phone.
Features
Week View
- Weekly schedule with color-coded family assignments
- Quick navigation between weeks with Prev/Next buttons
- Family switcher dropdown - select your family as driver from top-right menu
- Theme toggle - switch between light and dark mode
- Print schedule - printer-friendly tabular view with all week details
- Share team link - easily share the team URL with other families
Day Management
- Tap any day to view/edit details in a bottom sheet
- Assign drivers for drop-off and pick-up (tap "Open" or family name)
- Mark absences - tap family names to toggle skipping
- Home pickups - specify custom pickup times at family homes
- Location & time - edit practice location and time
- Cancel sessions - mark practices as cancelled with visual indicators
- Location notes - add details like parking instructions or court numbers
AI Agent Assistant
- Natural language commands - speak or type requests like "Make Smith family drive Monday"
- Smart scheduling - assign drivers, mark absences, update times/locations
- Color-coded summaries - family names highlighted in their team colors
- Action history - see what the agent changed in each response
- iPhone voice input - use native voice typing for hands-free control
Team Settings
- Manage families - add/remove families with custom colors
- Home locations - set pickup addresses with Google Places integration
- Official schedule link - add external calendar URL
- Visible days - configure which days of the week show in schedule
- Location management - add/edit practice locations with map links
- Team renaming - update team name anytime
- Schedule source - optionally connect a Commit Swimming team to auto-fill weekly practices by group
Mobile-First Design
- iPhone-optimized - designed for one-screen-no-scroll layouts
- PWA support - install as home screen app with safe areas
- Touch targets - 44px primary actions, 40px compact controls
- Bottom sheets - modal UI that slides up from bottom
- Dark mode - full support with system preference detection
- Responsive - works on phones, tablets, and desktop
Data & Privacy
- Local family selection - your driver selection saved on device only
- Near real-time updates - 30-second polling keeps everyone in sync (pauses when the tab is hidden)
- Team isolation - each team has unique slug, no cross-team access
- No authentication - simple link sharing, no login required
Setup
-
Clone and install
npm install
-
Database — create a Neon or Vercel Postgres database and copy the connection string.
cp .env.example .env.local
# Edit .env.local and set POSTGRES_URL
-
Initialize schema
npm run db:init
-
Run locally
npm run dev
Open http://localhost:3000, go to Create a team, add family names, and share the /c/{slug} link with your group.
Add to Home Screen (iPhone)
- Open your team link in Safari (not Chrome).
- Tap the Share button (square with arrow).
- Scroll down and tap Add to Home Screen.
- Name it "Swim Carpool" and tap Add.
The app opens full-screen with safe-area padding for the notch and home indicator. Your selected family is remembered on that device.
First Time Setup
- Visit your deployment at the root URL
- Tap Create a team (or go to
/setup)
- Enter team name and add family names
- Share the generated
/c/{slug} link with your group
- Each family member opens the link and selects their family from the dropdown
Usage
Weekly Schedule
- View current week - see all practices with driver assignments
- Navigate weeks - use ‹ Prev / Next › buttons
- Switch family - tap family button (top right) to pick your role
- Print schedule - tap printer icon for printable view
- Share link - tap share icon to send team URL
Managing a Day
- Tap any practice day to open details
- Assign drop-off driver - tap "Open" or current driver name
- Assign pick-up driver - tap "Open" or current driver name
- Mark absences - tap family names in "Skipping" section
- Add home pickups - set custom times for pickup at homes
- Edit location - tap location to change or add notes
- Change time - tap time to update start/end
- Cancel practice - toggle cancel switch (shows red on schedule)
Using the AI Agent
- Tap the AI icon (animated sparkles in speech bubble)
- Type or speak your request, like:
- "Make Johnson family drive Tuesday"
- "Mark Smith as skipping Wednesday"
- "Change Thursday practice to 4pm"
- "Assign dropoff to Garcia and pickup to Lee on Friday"
- Review changes - see color-coded summary of what changed
- Close when done - tap X or swipe down
Team Settings
- Tap team name at top to open settings
- Add families - enter name and optional home address
- Edit locations - manage practice venues
- Set schedule link - add external calendar URL
- Configure days - choose which weekdays appear
- Rename team - update team name
Deploy on Vercel
- Push to GitHub and import the repo in Vercel.
- Add environment variable
POSTGRES_URL (Vercel Postgres or Neon connection string).
- Deploy, then run
npm run db:init locally against production POSTGRES_URL, or use the Vercel CLI / SQL console to run sql/schema.sql.
- Visit your deployment, create a team at
/setup, and share the carpool link.
여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗