Phase 1: A full stack mobile app using React Native and FastAPI.
- Tech Stack
- Prerequisites
- Project Setup
- Running the Application
- Project Structure
- Development Workflow
- Troubleshooting
- Version Control (See Git & GitHub Guide)
- Additional Resources
- Contributing
Backend:
- Python 3.13+ with FastAPI
- Supabase (Authentication & PostgreSQL Database)
- MongoDB (NoSQL Database)
- uv (Python Package Manager)
Frontend:
- React Native with Expo
- TypeScript
- Expo Router (File-based routing)
- NativeWind (Tailwind CSS for React Native)
IDE & MCPs
- Cursor (strongly recommended, not required)
- Context7 MCP (extremely helpful), contact me to install for free
Before you begin, ensure you have the following installed on your system:
macOS:
# Using Homebrew
brew install python@3.13Windows:
- Download the installer from python.org
- During installation, check "Add Python to PATH"
- Verify installation:
python --version
macOS:
# Using Homebrew
brew install nodeWindows:
- Download the installer from nodejs.org
- Run the installer (npm is included)
- Verify installation:
node --versionandnpm --version
macOS and Linux:
curl -LsSf https://astral.sh/uv/install.sh | shWindows:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"Verify installation:
uv --versionmacOS:
brew install gitWindows:
- Download from git-scm.com
git clone <repository-url>Navigate to the backend directory and install dependencies:
cd backend
uv venv
source .venv/bin/activate OR .venv/Scripts/activate (windows)
uv syncCreate a .env file in the directory:
touch .envThen, add these keys (found in notion database) to your env file.
# backend/.env
SUPABASE_URL=your-supabase-url
SUPABASE_KEY=your-supabase-anon-key
MONGODB_URI=your-mongodb-connection-stringNote: Get these credentials from the project Notion page.
Navigate to the frontend directory and install dependencies:
cd ../frontend
npm installInstall Expo CLI globally for easier development:
npm install -g expo-cliFor Testing on Physical Device (Recommended for Beginners):
- Install the Expo Go app on your iOS or Android device
- Download from App Store or Google Play
- Scan the QR code when you run
npm startto test on your device
Note: You do NOT need Xcode, Android Studio, or CocoaPods for Expo Go development. Only install them if you specifically need iOS Simulator or Android Emulator.
The uv package manager automatically handles virtual environments. When you run uv sync, it creates a .venv folder with an isolated Python environment. When you use uv run, it automatically activates this environment.
No need to manually activate the virtual environment!
From the backend directory:
cd backend/src
uvicorn main:app --reloadThe API will be available at http://127.0.0.1:8000
From the frontend directory:
cd frontend
npm startThis will open the Expo DevTools in your browser. You can then:
- Press
ito open iOS simulator (macOS only) - Press
ato open Android emulator - Press
wto open in web browser - Scan the QR code with Expo Go app on your physical device
the-contributor/
├── backend/
│ ├── main.py # FastAPI application entry point
│ ├── pyproject.toml # Python dependencies
│ └── .env # Backend environment variables (create this)
│
├── frontend/
│ ├── app/ # Expo Router pages
│ │ ├── _layout.tsx # Root layout
│ │ └── (tabs)/ # Tab navigation
│ ├── components/ # Reusable components
│ ├── constants/ # Theme and constants
│ ├── tailwind.config.js # Tailwind CSS configuration
│ ├── global.css # Global styles with Tailwind directives
│ └── package.json # Frontend dependencies
│
└── helpful-docs/ # Documentation
├── GITHUB.md # Git & GitHub workflow guide
├── SUPABASE.md # Supabase authentication guide
├── MONGODB.md # MongoDB operations guide
└── NATIVEWIND.md # NativeWind styling guide
- Make changes to Python files in
backend/ - FastAPI will auto-reload on file changes
- API documentation available at
http://localhost:8000/docs
- Make changes to files in
frontend/app/orfrontend/components/ - Changes will hot-reload automatically in Expo
- Shake your device or press
min terminal to open developer menu
Backend won't start:
- Ensure Python 3.13+ is installed:
python --version - Verify uv sync completed successfully
- Check that
.envfile exists with correct credentials
Frontend won't start:
- Clear npm cache:
npm cache clean --force - Delete
node_modulesand reinstall:rm -rf node_modules && npm install - Ensure Expo CLI is up to date:
npm install -g expo-cli@latest
Expo app won't connect:
- Ensure your phone and computer are on the same WiFi network
- Try using tunnel connection:
npx expo start --tunnel - Check firewall settings aren't blocking connections
Environment variables not loading:
- Restart the development server after creating/modifying
.envfiles - Verify
.envfile is in the correct directory - Check for typos in variable names
For detailed instructions on Git workflow, branching, pull requests, and resolving merge conflicts, see:
Quick reminders:
- Always work on your own branch:
git checkout -b your-name/your-feature - Never commit directly to
main - Sync with main regularly:
git merge mainorgit rebase main - You can merge your own PRs for regular work
- Contact mentors for critical changes or breaking conflicts
Project Guides:
- Git & GitHub Workflow Guide
- Supabase Authentication Guide
- MongoDB Operations Guide
- NativeWind Styling Guide
External Documentation:
Please refer to the project Notion page for contribution guidelines and development standards.