{"id":48810390,"url":"https://github.com/intent-solutions-io/no-you-pick.","last_synced_at":"2026-04-14T07:02:19.884Z","repository":{"id":328084260,"uuid":"1110832691","full_name":"intent-solutions-io/No-You-Pick.","owner":"intent-solutions-io","description":"Decision randomizer for groups who can't decide. Spin the wheel, pick a random option, end the debate.","archived":false,"fork":false,"pushed_at":"2026-04-14T02:27:11.000Z","size":723,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-14T03:20:56.692Z","etag":null,"topics":["decision-making","fun","groups","productivity","randomizer","utility","web-app"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/intent-solutions-io.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"github":["jeremylongshore"],"buy_me_a_coffee":"jeremylongshore"}},"created_at":"2025-12-05T19:43:31.000Z","updated_at":"2026-04-14T02:27:14.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/intent-solutions-io/No-You-Pick.","commit_stats":null,"previous_names":["pabs-ai/no-you-pick.","intent-solutions-io/no-you-pick."],"tags_count":0,"template":false,"template_full_name":"google-gemini/aistudio-repository-template","purl":"pkg:github/intent-solutions-io/No-You-Pick.","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intent-solutions-io%2FNo-You-Pick.","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intent-solutions-io%2FNo-You-Pick./tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intent-solutions-io%2FNo-You-Pick./releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intent-solutions-io%2FNo-You-Pick./manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/intent-solutions-io","download_url":"https://codeload.github.com/intent-solutions-io/No-You-Pick./tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intent-solutions-io%2FNo-You-Pick./sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31785681,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T02:24:21.117Z","status":"ssl_error","status_checked_at":"2026-04-14T02:24:20.627Z","response_time":153,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["decision-making","fun","groups","productivity","randomizer","utility","web-app"],"created_at":"2026-04-14T07:02:16.933Z","updated_at":"2026-04-14T07:02:19.872Z","avatar_url":"https://github.com/intent-solutions-io.png","language":"TypeScript","funding_links":["https://github.com/sponsors/jeremylongshore","https://buymeacoffee.com/jeremylongshore"],"categories":[],"sub_categories":[],"readme":"# No, YOU Pick!\n\n\u003e **The Argument Ender** - AI-powered restaurant picker that chooses 3 random spots so you don't have to fight about it.\n\n[![Live Web App](https://img.shields.io/badge/Web%20App-Live-00C853?logo=firebase\u0026logoColor=white)](https://noupick-prod.web.app)\n[![Cloud Run API](https://img.shields.io/badge/API-Production-4285F4?logo=google-cloud\u0026logoColor=white)](https://noupick-api-246498703732.us-central1.run.app/health)\n[![Made with React](https://img.shields.io/badge/React-19.2-61DAFB?logo=react\u0026logoColor=white)](https://react.dev/)\n[![React Native](https://img.shields.io/badge/React%20Native-Expo-000020?logo=expo\u0026logoColor=white)](https://expo.dev/)\n[![Powered by Vertex AI](https://img.shields.io/badge/Vertex%20AI-Gemini%202.5-4285F4?logo=google\u0026logoColor=white)](https://cloud.google.com/vertex-ai)\n\n---\n\n## Live Demo\n\n**Web App:** https://noupick-prod.web.app\n**API Health:** https://noupick-api-246498703732.us-central1.run.app/health\n\n---\n\n## What It Does\n\nCan't decide where to eat? **No, YOU Pick!** uses Google Vertex AI Gemini to instantly suggest **3 random restaurants** based on:\n\n- **Your Location** - City, address, or zip code\n- **Cuisine Preferences** - 16 options from Pizza to Thai\n- **Search Radius** - 1mi to 30mi\n- **Spin Again** - Don't like the picks? Get 3 new ones\n\n---\n\n## Architecture\n\n```\n+-------------------+     +-------------------+     +-------------------+\n|   Mobile App      |     |    Web App        |     |   Cloud Run API   |\n|   (React Native)  | --\u003e |   (React/Vite)    | --\u003e |   (Node.js)       |\n|   pablo-mobile/   |     |   Firebase Host   |     |   Vertex AI       |\n+-------------------+     +-------------------+     +-------------------+\n                                    |                        |\n                                    v                        v\n                          +-------------------+     +-------------------+\n                          | Firebase Hosting  |     | Gemini 2.5 Flash  |\n                          | noupick-prod      |     | us-central1       |\n                          +-------------------+     +-------------------+\n```\n\n### Production Stack\n\n| Component | Technology | URL/Location |\n|-----------|------------|--------------|\n| **Backend API** | Cloud Run + Node.js | https://noupick-api-246498703732.us-central1.run.app |\n| **AI Engine** | Vertex AI Gemini 2.5 Flash | `us-central1` |\n| **Web App** | React 19 + Vite + Firebase | https://noupick-prod.web.app |\n| **Mobile App** | React Native + Expo | `pablo-mobile/` |\n| **Auth** | Application Default Credentials | No API keys exposed |\n\n### Security\n\n- **No client-side API keys** - All AI calls go through Cloud Run\n- **Rate limiting** - 10 requests/minute per IP\n- **CORS protection** - Whitelisted origins only\n- **ADC authentication** - Service account with minimal permissions\n\n---\n\n## Project Structure\n\n```\nnoupick/\n├── App.tsx                    # Web app main component\n├── index.html                 # Web entry point\n├── services/\n│   └── geminiService.ts       # Frontend service (calls Cloud Run)\n├── components/                # React components\n│   ├── Button.tsx\n│   ├── Card.tsx\n│   ├── Mascot.tsx\n│   └── SlotMachine.tsx\n├── functions/                 # Cloud Run backend\n│   └── src/\n│       ├── index.ts           # Firebase Functions entry point\n│       └── cloudrun.ts        # Cloud Run production entry point\n├── pablo-mobile/              # React Native mobile app\n│   ├── App.tsx                # Mobile app main component\n│   ├── services/\n│   │   └── api.ts             # API client for Cloud Run\n│   ├── app.json               # Expo/App Store config\n│   └── eas.json               # EAS Build profiles\n├── 000-docs/                  # Documentation\n│   ├── 001-DR-STND-...        # Filing system standard\n│   ├── 002-AA-AUDT-...        # DevOps playbook\n│   ├── 003-DR-GUID-...        # CLI learning guide\n│   └── 012-MOBILE-...         # App store deployment guide\n├── firebase.json              # Firebase config\n├── .firebaserc                # Firebase project aliases\n└── package.json               # Dependencies\n```\n\n---\n\n## Quick Start\n\n### Prerequisites\n\n- **Node.js** v20+\n- **Google Cloud Project** with Vertex AI enabled (for backend)\n- **Expo Go** app (for mobile testing)\n\n### Run Web App Locally\n\n```bash\n# Clone the repo\ngit clone https://github.com/intent-solutions-io/No-You-Pick..git\ncd No-You-Pick.\n\n# Install dependencies\nnpm install\n\n# Create .env with production API\necho \"VITE_API_BASE_URL=https://noupick-api-246498703732.us-central1.run.app\" \u003e .env\n\n# Start dev server\nnpm run dev\n```\n\nOpen http://localhost:3000\n\n### Run Mobile App Locally\n\n```bash\ncd pablo-mobile\n\n# Install dependencies\nnpm install\n\n# Start Expo\nnpx expo start\n\n# Scan QR code with Expo Go app on your phone\n```\n\n---\n\n## Deployment Status\n\n### Backend API (Cloud Run)\n\n| Item | Status |\n|------|--------|\n| Docker image | `us-central1-docker.pkg.dev/noupick-prod/noupick/noupick-api:latest` |\n| Cloud Run service | `noupick-api` in `us-central1` |\n| Vertex AI | Gemini 2.5 Flash |\n| Rate limiting | 10 req/min |\n| Health check | https://noupick-api-246498703732.us-central1.run.app/health |\n\n### Web App (Firebase Hosting)\n\n| Item | Status |\n|------|--------|\n| URL | https://noupick-prod.web.app |\n| Firebase project | `noupick-prod` |\n| Build | Vite production build |\n\n### Mobile App (React Native)\n\n| Item | Status |\n|------|--------|\n| Framework | React Native + Expo SDK 54 |\n| Location | `pablo-mobile/` |\n| Bundle ID (iOS) | `com.pabsai.noyoupick` |\n| Package (Android) | `com.pabsai.noyoupick` |\n| EAS configured | Yes |\n\n---\n\n## For Pablo: App Store Deployment Guide\n\n### Step 1: Create Developer Accounts\n\n1. **Apple Developer Program** - $99/year\n   - Go to https://developer.apple.com/programs/\n   - Enroll as individual or organization\n   - Wait for approval (usually 24-48 hours)\n\n2. **Google Play Console** - $25 one-time\n   - Go to https://play.google.com/console\n   - Pay registration fee\n   - Complete account setup\n\n### Step 2: Create Expo Account\n\n```bash\n# Create account at expo.dev, then login\ncd pablo-mobile\nnpx eas login\n```\n\n### Step 3: Configure App Credentials\n\n**For iOS (update `eas.json`):**\n```json\n{\n  \"submit\": {\n    \"production\": {\n      \"ios\": {\n        \"appleId\": \"your@email.com\",\n        \"ascAppId\": \"YOUR_APP_STORE_CONNECT_APP_ID\",\n        \"appleTeamId\": \"YOUR_TEAM_ID\"\n      }\n    }\n  }\n}\n```\n\n**For Android:**\n- Create a service account in Google Cloud Console\n- Download JSON key file\n- Save as `pablo-mobile/google-services.json`\n\n### Step 4: Create App Icons\n\nReplace default icons in `pablo-mobile/assets/`:\n- `icon.png` - 1024x1024 (app icon)\n- `adaptive-icon.png` - 1024x1024 (Android adaptive)\n- `splash-icon.png` - 1284x2778 (splash screen)\n- `favicon.png` - 48x48 (web)\n\nTools: Figma, Canva, or https://icon.kitchen\n\n### Step 5: Build for App Stores\n\n```bash\ncd pablo-mobile\n\n# Build for iOS (requires Apple Developer account)\nnpx eas build --platform ios --profile production\n\n# Build for Android (Play Store AAB)\nnpx eas build --platform android --profile production\n\n# Build Android APK (for testing)\nnpx eas build --platform android --profile preview\n```\n\n### Step 6: Submit to Stores\n\n```bash\n# Submit to App Store (after build completes)\nnpx eas submit --platform ios\n\n# Submit to Play Store (after build completes)\nnpx eas submit --platform android\n```\n\n### Step 7: Store Listing Content\n\n**App Name:** No, YOU Pick!\n**Subtitle:** AI Restaurant Picker\n**Description:**\n```\nCan't decide where to eat? Let AI pick for you!\n\nNo, YOU Pick! uses AI to suggest 3 random restaurants based on your location, cuisine preferences, and search radius. Perfect for ending the \"where should we eat?\" debate.\n\nFeatures:\n- AI-powered restaurant recommendations\n- 16 cuisine types to choose from\n- Adjustable search radius (1-30 miles)\n- One-tap Google Maps directions\n- Spin Again for new picks\n\nStop arguing, start eating!\n```\n\n**Keywords:** restaurant picker, where to eat, food finder, AI restaurant, dinner decider\n\n**Screenshots needed:**\n- 6.7\" iPhone (1290 x 2796)\n- 5.5\" iPhone (1242 x 2208)\n- 12.9\" iPad (2048 x 2732)\n- Android phone (1080 x 1920)\n- Android tablet (1200 x 1920)\n\n---\n\n## API Reference\n\n### POST /api/restaurants\n\nRequest restaurant recommendations.\n\n**Request:**\n```json\n{\n  \"locationQuery\": \"Los Angeles, CA\",\n  \"cuisine\": \"Mexican\",\n  \"radius\": \"10\",\n  \"excludeNames\": [\"Taco Bell\", \"Chipotle\"]\n}\n```\n\n**Response:**\n```json\n{\n  \"restaurants\": [\n    {\n      \"id\": \"rest-0-1702234567890\",\n      \"name\": \"El Cholo\",\n      \"cuisine\": \"Mexican\",\n      \"address\": \"1121 S Western Ave, LA\",\n      \"rating\": \"4.5\",\n      \"openStatus\": \"Open\",\n      \"reason\": \"Classic LA Mexican since 1923, famous margaritas\",\n      \"googleMapLink\": \"https://maps.google.com/...\"\n    }\n  ],\n  \"rawText\": \"...\"\n}\n```\n\n### GET /health\n\nHealth check endpoint.\n\n**Response:**\n```json\n{\n  \"status\": \"healthy\",\n  \"timestamp\": \"2024-12-10T22:00:00.000Z\",\n  \"version\": \"1.0.0\"\n}\n```\n\n---\n\n## Development\n\n### Web App Commands\n\n```bash\nnpm run dev        # Start dev server (port 3000)\nnpm run build      # Production build to dist/\nnpm run preview    # Preview production build\nnpm run typecheck   # Type check\n```\n\n### Mobile App Commands\n\n```bash\ncd pablo-mobile\nnpx expo start           # Start Expo dev server\nnpx expo start --web     # Start web version\nnpx eas build --platform android --profile preview  # Build APK\nnpx eas build --platform ios --profile preview      # Build iOS simulator\n```\n\n### Deploy Backend\n\n```bash\ncd functions\nnpm run build\n\n# Build and push Docker image\ndocker build -t us-central1-docker.pkg.dev/noupick-prod/noupick/noupick-api:latest .\ndocker push us-central1-docker.pkg.dev/noupick-prod/noupick/noupick-api:latest\n\n# Deploy to Cloud Run\ngcloud run deploy noupick-api \\\n  --image us-central1-docker.pkg.dev/noupick-prod/noupick/noupick-api:latest \\\n  --region us-central1 \\\n  --project noupick-prod \\\n  --allow-unauthenticated \\\n  --set-env-vars GOOGLE_CLOUD_PROJECT=noupick-prod\n```\n\n### Deploy Web App\n\n```bash\nnpm run build\nfirebase deploy --only hosting --project noupick-prod\n```\n\n---\n\n## Testing\n\n### API Test\n\n```bash\ncurl -X POST https://noupick-api-246498703732.us-central1.run.app/api/restaurants \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"locationQuery\": \"Austin, TX\", \"cuisine\": \"BBQ\", \"radius\": \"10\"}'\n```\n\n### Mobile App Test\n\n1. Install **Expo Go** on your phone\n2. Run `npx expo start` in `pablo-mobile/`\n3. Scan QR code\n4. Test the full flow:\n   - Enter location\n   - Select cuisine\n   - Tap \"No, YOU Pick!\"\n   - Verify results display\n   - Tap restaurant to open Maps\n\n---\n\n## Costs\n\n| Service | Cost |\n|---------|------|\n| Cloud Run | ~$0.50-2/month (usage-based) |\n| Firebase Hosting | Free tier |\n| Vertex AI | ~$0.001/request |\n| Apple Developer | $99/year |\n| Google Play | $25 one-time |\n\n**Total to launch:** ~$125 + minimal monthly costs\n\n---\n\n## Troubleshooting\n\n### \"No restaurants found\"\n\n- Try \"Any\" cuisine instead of specific type\n- Increase radius to 15 or 30 miles\n- Check if location is valid (try a major city)\n\n### Mobile app won't connect\n\n- Verify phone has internet connection\n- Check that Cloud Run API is healthy: https://noupick-api-246498703732.us-central1.run.app/health\n- Try restarting Expo Go app\n\n### EAS build fails\n\n- Run `npx eas whoami` to verify login\n- Check `app.json` bundle ID matches developer account\n- For iOS: ensure Apple Developer account is active\n\n---\n\n## Contributing\n\n1. Fork the repository\n2. Create feature branch: `git checkout -b feature/amazing-feature`\n3. Commit changes: `git commit -m \"Add amazing feature\"`\n4. Push to branch: `git push origin feature/amazing-feature`\n5. Open Pull Request\n\n---\n\n## License\n\nProprietary License - See LICENSE file\n\n---\n\n## Acknowledgments\n\n- **Google Vertex AI** - Gemini 2.5 Flash for recommendations\n- **Google Cloud Run** - Serverless backend hosting\n- **Firebase** - Web app hosting\n- **Expo** - React Native tooling\n- **Pablo** - Co-creator and product visionary\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n**Made with love by Jeremy \u0026 Pablo**\n\nStop arguing, start eating!\n\n[Live App](https://noupick-prod.web.app) | [Report Bug](https://github.com/intent-solutions-io/No-You-Pick./issues) | [Request Feature](https://github.com/intent-solutions-io/No-You-Pick./issues)\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fintent-solutions-io%2Fno-you-pick.","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fintent-solutions-io%2Fno-you-pick.","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fintent-solutions-io%2Fno-you-pick./lists"}