For Human Developers - If you're an AI assistant, read AI_BOOTSTRAP.md instead.
Get your app running in production in under 30 minutes.
./scripts/setup.shThis interactive script will:
- Check prerequisites (gcloud, pulumi, go)
- Configure git hooks (pre-commit, commit-msg, pre-push)
- Configure your Google Cloud project
- Enable required APIs
- Set up Pulumi infrastructure stacks
Quick setup without GCP (just git hooks and dependencies):
make setup-hooks # Configure git hooks
cd backend && make deps # Install Go dependenciescd infrastructure/pulumi
make deploy-devThis creates:
- Artifact Registry (for Docker images)
- Cloud Run service
- Firestore database
- Service account with proper permissions
cd backend
make runVisit http://localhost:8080/health
iOS:
cd mobile/ios
xcodegen generate
open App.xcodeprojAndroid:
- Open
mobile/androidin Android Studio - Sync Gradle and run
| Tool | Install | Verify |
|---|---|---|
| gcloud | Install Guide | gcloud version |
| Pulumi | brew install pulumi |
pulumi version |
| Go 1.24+ | brew install go |
go version |
| Node.js | brew install node |
node --version |
| Firebase CLI | npm install -g firebase-tools |
firebase --version |
.
├── backend/ # Go API server
│ ├── cmd/api/main.go # Entry point
│ └── Makefile # Build commands
├── mobile/
│ ├── ios/ # SwiftUI app
│ │ ├── project.yml # XcodeGen config
│ │ └── App/ # Source files
│ └── android/ # Kotlin/Compose app
│ └── app/ # Source files
├── infrastructure/
│ └── pulumi/ # Infrastructure as Code
│ ├── main.go # Pulumi program
│ └── Makefile # Deploy commands
├── scripts/
│ ├── setup.sh # Initial setup
│ └── openapi_workflow.py # API code generation
└── docs/
├── ARCHITECTURE.md # Technology decisions
└── GETTING_STARTED.md # This file
- Edit API spec:
backend/api/openapi.yaml - Regenerate code:
python scripts/openapi_workflow.py --full - Implement handlers: Backend handlers are regenerated
- Build clients: iOS and Android clients are regenerated
# Backend changes
cd backend && make test && make run
# iOS changes
cd mobile/ios && xcodegen generate
# Open Xcode, build and run
# Android changes
cd mobile/android && ./gradlew build
# Run in Android Studio# Deploy to development
cd infrastructure/pulumi
make deploy-dev
# Deploy to production (requires confirmation)
make deploy-prodconfig:
gcp:region: us-central1
gcp:project: YOUR_DEV_PROJECT
app-infrastructure:environment: devconfig:
gcp:region: us-central1
gcp:project: YOUR_PROD_PROJECT
app-infrastructure:environment: prod-
Go to Firebase Console
-
Add Firebase to your GCP project
-
Enable services:
- Firestore (Native mode, us-central1)
- Authentication (Email, Google, Apple Sign-In)
- Storage (for file uploads)
-
Download config files:
- iOS:
GoogleService-Info.plist - Android:
google-services.json
- iOS:
chmod +x scripts/setup.shcd infrastructure/pulumi
pulumi cancel --yes
pulumi refresh --stack dev --yescd backend
go mod tidy
make runcd mobile/ios
rm -rf App.xcodeproj
xcodegen generateNever commit secrets to git!
| Environment | Where to Store | How to Access |
|---|---|---|
| Local Dev | .env.local (gitignored) |
os.Getenv() |
| CI/CD | GitHub Actions Secrets | ${{ secrets.X }} |
| Production | Google Secret Manager | SDK or mount as env var |
For API keys, database URLs, and other sensitive config:
- Create secrets in GCP:
gcloud secrets create my-secret --data-file=- - Mount in Cloud Run or use the Secret Manager SDK
See SECRETS.md for complete setup instructions.
- Customize the API: Edit
backend/api/openapi.yaml - Add authentication: See Firebase Auth docs
- Configure secrets: See SECRETS.md for production secrets
- Set up CI/CD:
.github/workflows/is pre-configured - Read architecture: ARCHITECTURE.md
Need help? Check the Troubleshooting section or open an issue.