AI-powered fishing lure identification app with cloud sync, subscription management, and catch tracking.
git clone <your-repo-url>
cd "Fishing Lure"
# Backend (Flask) β from repo root
cd backend
pip install -r requirements.txt
# Mobile app (Expo) β from repo root
cd ../frontend
npm install
backend/.env.example to backend/.env and fill in values.frontend/.env.example to frontend/.env and set EXPO_PUBLIC_* variables as documented there.Run these SQL files from the database/ folder in the Supabase SQL Editor (in order):
1. database/supabase_schema.sql
2. database/supabase_subscriptions_schema.sql
3. database/supabase_security_patch.sql
4. database/supabase_add_favorites.sql
5. database/supabase_soft_delete.sql
cd backend
python app.py
# Server runs on http://localhost:5000 (or FLASK_PORT from .env)
cd frontend
npx expo start
# Press 'a' for Android, 'i' for iOS
frontend/.env (EXPO_PUBLIC_RC_*) and frontend/src/services/subscriptionService.js as needed:const REVENUECAT_API_KEY_IOS = 'your-ios-key';
const REVENUECAT_API_KEY_ANDROID = 'your-android-key';
Product IDs (same for both stores): monthly_pro, yearly_pro (no lifetime).
monthly_pro - $4.99/monthyearly_pro - $39.99/yearEarly adoption pricing β locked in for our first wave of users.
iOS: Create in App Store Connect β In-App Purchases Android: Create in Google Play Console β Monetization β Subscriptions
Full guide: See frontend/SUBSCRIPTION_SETUP.md
| Tier | Price | Features |
|---|---|---|
| Free | $0 | 10 scans/month, basic features |
| PRO Monthly | $4.99/mo | Unlimited scans, catches, advanced features |
| PRO Yearly | $39.99/yr | Save 33%, all PRO features |
Current PRO prices are early adoption pricing and stay for our first wave of users.
Cost per scan: ~$0.001 (GPT-4o-mini) Profit margin: ~90% on PRO subscriptions
Fishing Lure/
βββ frontend/ # Expo React Native app
β βββ src/
β β βββ screens/
β β βββ services/
β β βββ contexts/
β βββ package.json
β
βββ backend/ # Flask API
β βββ app.py
β βββ mobile_lure_classifier.py
β βββ supabase_client.py
β βββ config.py
β βββ requirements.txt
β βββ templates/
β
βββ database/ # Supabase SQL migrations
βββ docs/ # Guides and legal copy
βββ render.yaml # Render Blueprint (rootDir: backend)
Security patches applied:
iOS (Sandbox):
Android (Internal Testing):
cd backend
python test_production.py
python test_supabase_connection.py
# Unit tests (install once: pip install pytest)
pytest tests/
cd frontend
# Build for iOS
eas build --platform ios --profile production
# Build for Android
eas build --platform android --profile production
# Submit to stores
eas submit --platform ios
eas submit --platform android
Set environment variables on the web service. Root Directory in Render should be backend (or use the repo-root render.yaml Blueprint with rootDir: backend).
Environment Variables to Set:
OPENAI_API_KEYSUPABASE_URLSUPABASE_SERVICE_ROLE_KEYFLASK_HOST=0.0.0.0FLASK_PORT=5000Start command: gunicorn --bind 0.0.0.0:$PORT app:app
backend/.env from backend/.env.examplecd frontend
rm -rf node_modules
npm install
npx expo start -c
-- Get subscription stats
SELECT * FROM subscription_stats;
-- Most scanned lure types
SELECT lure_type, COUNT(*) as scans
FROM lure_analyses
GROUP BY lure_type
ORDER BY scans DESC;
-- PRO conversion rate
SELECT
COUNT(*) FILTER (WHERE is_pro) * 100.0 / COUNT(*) as conversion_rate
FROM user_subscriptions;
config.py[Your License Here]
[Your contribution guidelines]
Built with β€οΈ for fishermen everywhere π£