Skip to content

Jared-Krajewski/Pack-Pal

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

98 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸŽ’ Pack-Pal

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.

πŸš€ Features

  • 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

πŸ› οΈ Tech Stack

  • 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)

πŸ“‹ Prerequisites

  • Node.js 18+
  • npm or yarn
  • Expo CLI
  • Supabase account

πŸ—οΈ Setup Instructions

1. Clone and Install Dependencies

cd Pack-Pal
npm install

2. Set Up Supabase

  1. Create a new project at supabase.com
  2. Go to Project Settings β†’ API
  3. Copy your project URL and anon key
  4. Create a .env file in the root directory:
cp .env.example .env
  1. Add your Supabase credentials to .env:

πŸ” Environment Variables

Required environment variables:

  • EXPO_PUBLIC_SUPABASE_URL: Your Supabase project URL
  • EXPO_PUBLIC_SUPABASE_KEY: Your Supabase anon public key

3. Set Up Database

Run the SQL migrations in your Supabase project:

  1. Go to your Supabase project dashboard β†’ SQL Editor

  2. Run the main schema:

    • Copy contents of supabase/schema.sql
    • Execute in SQL Editor
  3. Run migrations in order:

    • supabase/migrations/20251112_add_pack_weight.sql
    • supabase/migrations/20251112_add_category_is_hidden.sql

4. Run the App

For Web:

npm run web

For iOS:

npm run ios

For Android:

npm run android

πŸ“ Project Structure

Pack-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

🚒 Deployment

Web (Vercel)

  1. Update Base URL:

    • Edit src/utils/helpers.ts
    • Change fallback in getBaseUrl() to your production domain
  2. Build and Deploy:

# Build for web
npm run build:web

# Deploy (if using Vercel CLI)
vercel --prod
  1. Set Environment Variables in Vercel:
    • Go to Project Settings β†’ Environment Variables
    • Add EXPO_PUBLIC_SUPABASE_URL
    • Add EXPO_PUBLIC_SUPABASE_KEY

Mobile (Expo)

# 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

οΏ½ Development

Key Commands

# 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

πŸ“š Documentation

  • Architecture: See docs/architecture.md for detailed system design
  • Development Guide: See .github/copilot-instructions.md for coding patterns
  • Deployment: See PRE-DEPLOYMENT-REVIEW.md for production checklist

πŸ› Troubleshooting

"Supabase configuration missing" error

  • Verify .env file exists and has correct values
  • Restart development server after adding env variables

Build errors on web

  • Clear cache: expo start -c
  • Delete node_modules and reinstall: rm -rf node_modules && npm install

Database errors

  • Verify migrations have been run in correct order
  • Check Supabase project logs for details
  • Ensure RLS policies are configured correctly

🀝 Contributing

Contributions are welcome! Please feel free to submit an Issue or Pull Request.

πŸ“„ License

MIT License - feel free to use this project for personal or commercial purposes.

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published