Railway
Backend Hosting + PostgreSQL Database
Railway hosts your Hono backend API and PostgreSQL database. It automatically deploys when you push to your connected Git branch and handles environment variables, scaling, and SSL certificates.
- Deployment status (green = healthy)
- CPU & memory usage graphs
- Database storage usage
- Build logs for deployment errors
- Monthly usage vs. free tier limits
- View live logs: click "Deployments" → latest
- Restart service: "Settings" → "Restart"
- Update env vars: "Variables" tab
- Connect to DB: copy
DATABASE_URL - Redeploy: push to Git or click "Redeploy"
- Red deployment status = build failed
- High memory = potential memory leak
- Slow response times in metrics
- Database approaching storage limit
- Frequent restarts = crash loop
Cloudflare Pages
Web App CDN & Static Hosting
Cloudflare Pages hosts the web export of your Expo app. It serves static files from edge locations worldwide for fast loading. You deploy using npx wrangler pages deploy dist.
- Deployment history in "Pages" section
- Web Analytics (if enabled)
- Request volume and bandwidth
- Custom domain status & SSL
- Build logs for each deployment
- Deploy:
wrangler pages deploy dist - Rollback: select previous deployment → "Rollback"
- Add domain: "Custom domains" tab
- View live site: click deployment URL
- Purge cache: "Caching" → "Purge Cache"
- Failed deployments in Pages list
- SSL certificate errors on custom domain
- High error rate in Analytics
- Old deployment still active after push
Expo / EAS
React Native Builds & OTA Updates
Expo Application Services (EAS) builds your iOS and Android apps in the cloud, handles code signing, and manages over-the-air (OTA) updates.
- Build status (queued, building, finished)
- Build logs for errors
- OTA update deployment status
- Credentials (certificates, provisioning)
- App version numbers
- Build iOS:
eas build -p ios - Build Android:
eas build -p android - Submit to stores:
eas submit - OTA update:
eas update - Download build artifacts from web dashboard
- Build failures (check logs)
- Expired certificates (iOS)
- Version mismatch between builds
- OTA updates not reaching users
- Long queue times
App Store Connect
iOS App Distribution & Analytics
App Store Connect manages your iOS app submission, TestFlight beta testing, app metadata, pricing, and analytics.
- App review status (Waiting, In Review, Approved)
- TestFlight builds and testers
- Crash reports in "Crashes" tab
- User reviews and ratings
- Download and sales analytics
- Submit new version: App Store tab → version
- Add TestFlight testers: TestFlight tab
- Reply to reviews: "Ratings and Reviews"
- Update screenshots/description
- Manage in-app purchases
- App rejected (check Resolution Center)
- Spike in crash reports
- Negative reviews mentioning bugs
- Certificate expiration warnings
- Missing compliance declarations
Anthropic (Claude)
AI-Powered OCR & Contact Extraction
Claude's vision API extracts contact information (name, phone, email) from uploaded images. It's used in the /api/upload/extract-contact endpoint. Requires ANTHROPIC_API_KEY env var.
- API usage and token consumption
- Monthly spending vs. budget
- Rate limit status
- API key permissions
- Error rates in API logs
- View usage: "Usage" tab in console
- Generate new API key if compromised
- Set spending limits
- Check model availability
- Review API documentation for updates
- Unexpected usage spike
- Rate limit errors (429)
- API key authentication failures
- Approaching spending limit
- Model deprecation notices
GitHub
Source Code Repository
GitHub stores your source code and triggers deployments to Railway when you push. It's the single source of truth for your codebase and collaboration history.
- Recent commits and branches
- Pull request status
- GitHub Actions workflow runs
- Security alerts (Dependabot)
- Issues and project boards
- Push changes:
git push origin main - Create branch for features
- Review and merge PRs
- Check Actions for CI/CD status
- Update Dependabot alerts
- Failed GitHub Actions workflows
- Security vulnerabilities flagged
- Merge conflicts in PRs
- Stale branches accumulating
Prisma
Database ORM & Migrations
Prisma is your database toolkit. It generates type-safe queries from schema.prisma, handles migrations, and provides Prisma Studio for visual database browsing. Your schema defines Users, Sessions, Drivers, and more.
- Migration status (applied vs pending)
- Schema changes before deploying
- Query performance (N+1 issues)
- Generated client is up-to-date
- Generate client:
bunx prisma generate - Create migration:
bunx prisma migrate dev - Deploy migrations:
bunx prisma migrate deploy - Open Studio:
bunx prisma studio - Reset DB:
bunx prisma migrate reset
- Migration failed to apply
- Schema drift (DB doesn't match schema)
- Slow queries in logs
- Type errors after schema change
Hono
Backend Web Framework
Hono is your lightweight, fast web framework running on Bun. It handles routing, middleware (CORS, logging), and serves your API endpoints like /api/drivers, /api/auth/*, and /api/upload.
- Server logs via Railway
- Response times for endpoints
- Error responses (4xx, 5xx)
- CORS issues from frontend
- Run locally:
bun run dev - Test endpoint:
curl localhost:3000/health - Add route: create file in
src/routes/ - Add middleware in
src/index.ts
- 500 errors in server logs
- CORS blocked requests
- Unhandled promise rejections
- Memory leaks over time
Better Auth
Authentication Library
Better Auth handles user authentication with email/password. It manages sessions, cookies, and integrates with Prisma for user storage. Configured in backend/src/auth.ts with Expo plugin support.
- User sign-up/sign-in success rates
- Session validity and expiration
- Auth errors in server logs
- Trusted origins configuration
- Auth endpoints:
/api/auth/* - Get session:
/api/auth/session - Update trusted origins in
auth.ts - Check
BETTER_AUTH_SECRETis set
- Users can't sign in (check cookies)
- Session not persisting
- CORS errors on auth endpoints
- Missing
BETTER_AUTH_SECRET
TanStack Query
Data Fetching & Caching
TanStack Query (React Query) manages server state in your React Native app. It handles caching, background refetching, optimistic updates, and loading/error states for API calls.
- Query states (loading, error, success)
- Cache invalidation behavior
- Stale time vs. refetch intervals
- DevTools in development (if enabled)
- Use
useQueryfor fetching - Use
useMutationfor updates - Invalidate queries after mutations
- Configure in
src/lib/queryClient.ts
- Infinite refetch loops
- Stale data after mutations
- Too many network requests
- Memory issues from large caches
NativeWind
Tailwind CSS for React Native
NativeWind brings Tailwind CSS to React Native. Use utility classes like className="bg-blue-500 p-4 rounded-lg" for styling. Configured in tailwind.config.js and global.css.
- Styles applying correctly on all platforms
- Dark mode handling
- Custom theme values in config
- Build warnings about CSS
- Use
classNameprop for styles - Add custom colors in
tailwind.config.js - Import
global.cssin entry file - Use
cn()utility for conditionals
- Styles not applying (check imports)
- Web vs native style differences
- Missing content paths in config
- Babel config issues
Zustand
State Management
Zustand is a lightweight state management library. Use it for global client state that doesn't need to be fetched from the server (TanStack Query handles that). Great for UI state, filters, and preferences.
- State updates triggering re-renders
- Store organization and size
- Persistence working (if using)
- DevTools state inspection
- Create store:
create((set) => ({...})) - Use in components:
useStore() - Use selectors for performance
- Add persist middleware for local storage
- Excessive re-renders (use selectors)
- State not persisting on reload
- Circular dependencies in stores
- Large state causing performance issues