A web and mobile app for organizing and managing packing lists for trips, adventures, and activities. Create packs, categorize items, track weight and volume, and share with others.
- Smart Pack Organization: Hierarchical structure (Packs β Categories β Items)
- Weight & Volume Tracking: Support for multiple units (g, kg, oz, lb, ml, l) with accurate conversions
- Drag & Drop: Intuitive item and category reordering on desktop and mobile
- Visual Capacity Indicators: See how full your bag is at a glance with circular progress charts
- Category Visibility: Hide categories from capacity calculations while keeping them in your pack
- CSV Import/Export: Import from LighterPack or other Pack-Pal users exported CSV files, export for offline access
- Pack Sharing: Share packs via public URLs
- Worn Weight Tracking: Mark items as worn to exclude from pack weight
- Email Authentication: Secure signup with email/password or Google Oauth
- Cross-Platform: Mobile (iOS/Android via React Native) and Web
- Frontend: React Native (0.81.5) + Expo (54.0.22)
- Language: TypeScript (~5.9.2)
- Styling: StyleSheet API (no external styling libraries)
- Backend: Supabase (PostgreSQL, Auth, Real-time)
- State Management: Zustand
- Navigation: React Navigation v7 (Native Stack)
- Charts: Victory Native + Skia
- Icons: @expo/vector-icons (Feather)
- Node.js 18+
- npm or yarn
- Expo CLI
- Supabase account
cd Pack-Pal
npm install- Create a new project at supabase.com
- Go to Project Settings β API
- Copy your project URL and anon key
- Create a
.envfile in the root directory:
cp .env.example .env- Add your Supabase credentials to
.env:
Required environment variables:
EXPO_PUBLIC_SUPABASE_URL: Your Supabase project URLEXPO_PUBLIC_SUPABASE_KEY: Your Supabase anon public key
Run the SQL migrations in your Supabase project:
-
Go to your Supabase project dashboard β SQL Editor
-
Run the main schema:
- Copy contents of
supabase/schema.sql - Execute in SQL Editor
- Copy contents of
-
Run migrations in order:
supabase/migrations/20251112_add_pack_weight.sqlsupabase/migrations/20251112_add_category_is_hidden.sql
For Web:
npm run webFor iOS:
npm run iosFor Android:
npm run androidPack-Pal/
βββ src/
β βββ components/
β β βββ home/ # Home screen tabs and components
β β βββ modals/ # Modal dialogs (Create, Edit, Share, etc.)
β β βββ pack/ # Pack detail components
β β βββ shared/ # Shared components (Header, Nav)
β β βββ ui/ # Reusable UI (Button, Input, Card, etc.)
β βββ hooks/ # Custom React hooks
β βββ navigation/ # App navigation setup
β βββ screens/
β β βββ auth/ # Login, SignUp, AuthCallback
β β βββ onboarding/ # Landing page
β β βββ packs/ # Pack management screens
β βββ services/ # API calls (Supabase, cache)
β βββ stores/ # Zustand state stores
β βββ types/ # TypeScript definitions
β βββ utils/ # Helpers (conversions, CSV, etc.)
βββ supabase/
β βββ schema.sql # Database schema
β βββ migrations/ # Database migrations
βββ assets/ # Images, icons
βββ .env.example # Environment template
βββ app.config.js # Expo configuration
βββ vercel.json # Deployment config
βββ PRE-DEPLOYMENT-REVIEW.md # Production readiness checklist
-
Update Base URL:
- Edit
src/utils/helpers.ts - Change fallback in
getBaseUrl()to your production domain
- Edit
-
Build and Deploy:
# Build for web
npm run build:web
# Deploy (if using Vercel CLI)
vercel --prod- Set Environment Variables in Vercel:
- Go to Project Settings β Environment Variables
- Add
EXPO_PUBLIC_SUPABASE_URL - Add
EXPO_PUBLIC_SUPABASE_KEY
# Build for iOS
eas build --platform ios
# Build for Android
eas build --platform android
# Submit to stores
eas submit --platform ios
eas submit --platform android# Start development server
npm start
# Run on web
npm run web
# Run on iOS simulator
npm run ios
# Run on Android emulator
npm run android
# Lint code
npm run lint
# Format code
npm run format
# Build for production
npm run build:web- Architecture: See
docs/architecture.mdfor detailed system design - Development Guide: See
.github/copilot-instructions.mdfor coding patterns - Deployment: See
PRE-DEPLOYMENT-REVIEW.mdfor production checklist
- Verify
.envfile exists and has correct values - Restart development server after adding env variables
- Clear cache:
expo start -c - Delete node_modules and reinstall:
rm -rf node_modules && npm install
- Verify migrations have been run in correct order
- Check Supabase project logs for details
- Ensure RLS policies are configured correctly
Contributions are welcome! Please feel free to submit an Issue or Pull Request.
MIT License - feel free to use this project for personal or commercial purposes.