尚未收集儲存庫資訊。
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Hungry is a dish-first food discovery app for Singapore hawker centres and food courts. Built with Expo + React Native. Mock-first for local demos, with Supabase-backed integrations staged behind release gates.
| Need | Go to |
|---|---|
| Start here (agents) | AGENTS.md |
| Workflow rules | CLAUDE.md |
| Operating model | WORKFLOW.md |
| Low-token defaults | ops/low-token-cheatsheet.md |
| Active backlog | tasks/backlog.md |
| Verification evidence | tasks/verification.md |
| Session history | tasks/session-log.md |
| Tech stack + commands | tasks/environment.md |
| Design tokens + components | tasks/design-system.md |
| Screen inventory + navigation | tasks/screens.md |
| Domain types + mock data | tasks/data-contracts.md |
| Testing + feedback loops | tasks/test-harness.md |
| Accessibility source guide | docs/accessibility-style-guide.md |
| Product requirements (summarised) | tasks/product-context.md |
| Marketing launch kit | marketing/ |
| Historical roadmap + audit trail | tasks/todo.md |
| Past lessons | tasks/lessons.md |
| Product requirements | Research/01_Product_Requirements_Document_Hungry.docx |
| App flow spec | Research/02_App_Flow_Document_Hungry.docx |
| Frontend guidelines | Research/03_Frontend_Guidelines_Hungry.docx |
| UI prototypes | design/figma-v2/ and design/stitch/ |
| Key | Value |
|---|---|
| Product | Hungry — dish-first food discovery |
| Market | Singapore (hawker centres, food courts, restaurants) |
| Platform | iOS + Android (Expo SDK 55 / React Native 0.83.6) |
| Phase | Consumer mobile app, mock-first locally with Supabase-backed MVP integrations |
| Production posture | MVP production defaults keep DMs, comments, stories, collections, gamification, merchant centre, merchant claim CTA, prototype routes, and floorplans disabled until separate launch gates pass |
| Still production-disabled | OAuth providers, merchant centre, merchant claim CTA, direct messages, comments, stories, collections, gamification/passport, prototype routes, and indoor floorplans |
| Core idea | Find the dish you want, then see which stall serves it — not the other way around |
| Taste model | 6-axis vector: sweet · spicy · sour · salty · rich · aromatic |
| Layer | Choice |
|---|---|
| Framework | Expo SDK 55 + React Native 0.83.6 |
| Language | TypeScript (strict mode) |
| Navigation | React Navigation v7 |
| State | Zustand |
| Forms | React Hook Form |
| Animation | Reanimated 3 |
| Sheets | @gorhom/bottom-sheet |
| Map | @rnmapbox/maps (mock surface available) |
| Icons | lucide-react-native |
| Fonts | Nunito + DM Mono |
| Command | Purpose |
|---|---|
npm install | Install deps |
npm run typecheck | TypeScript check — primary gate |
npm run start | Expo dev server |
npm run ios | iOS simulator |
npm run android | Android emulator |
npx expo-doctor | Dependency health |
npm run test | TSX/Node test suite |
npm run data:supabase:stage:canonical | Generate staging-only SQL for the canonical Singapore food-business CSV |
npm run data:supabase:stage:canonical:split | Generate chunked staging SQL files for linked Supabase imports |
The application uses feature flags to toggle functionality for development and release branches. These are configured in src/constants/featureFlags.ts.
| Flag | Description | Default |
|---|---|---|
HUNGRY_DATA_SOURCE | Toggle between mock and supabase data layers. | mock |
FEATURE_FLAGS.directMessagesEnabled | Enable the Direct Messages tab and chat functionality. | true outside production, false in production |
FEATURE_FLAGS.prototypeRoutesEnabled | Register V2/prototype routes outside production release builds. | true in development/staging, false in production |
FEATURE_FLAGS.merchantCentreEnabled | Register merchant centre beta routes behind auth, role, and verification guards. | true outside production, false in production |
FEATURE_FLAGS.merchantClaimCtaEnabled | Enable the consumer stall claim CTA. | true outside production, false in production |
FEATURE_FLAGS.commentsEnabled | Enable community comments on posts and reviews. | true outside production, false in production |
FEATURE_FLAGS.oauthProvidersEnabled | Enable Google/Apple OAuth provider buttons. | true in development/staging, false in production |
FEATURE_FLAGS.floorplansEnabled | Register indoor floorplan routes and entry points. | false in all environments until launch gates pass |
FEATURE_FLAGS.gamificationEnabled | Enable Passport and Missions surfaces. | true outside production, false in production |
FEATURE_FLAGS.collectionsEnabled | Enable collection list/detail routes. | true outside production, false in production |
FEATURE_FLAGS.storiesEnabled | Enable story viewer and story creation surfaces. | true outside production, false in production |
FEATURE_FLAGS.craveEnabled |
To override these locally, you can use .env.development or modify the constants directly during prototyping.
Stitch screen iteration (23 October 2026): eight Search, Profile, Achievements,
Settings, Reviews, Saved Dishes, Stall, and Dish design exports are saved in
design/stitch/iterations-11940609752387078506/.
The corresponding React Native screens are updated on codex/stitch-eight-screens;
focused contracts pass 30/30. PR CI and native visual acceptance remain pending.
| Area | Status |
|---|---|
| Expo scaffold | Done |
| Domain types + stores | Done |
| Mock repositories | Done |
| Navigation shell | Done |
| Home, Discover, Maps, Search | Done |
| Auth, Onboarding | Done |
| Developer launcher (dev-only) | Done |
| Profile, Favourites, Review History | Done |
| Review flow | Done |
| Reads (feature-flagged) | Done |
| Offline + NotFound states | Done |
| Marketing launch kit | Done |
| Excel Ingestion & ETL Migration | Done — reconciled workbook and rights-safe runtime catalog published |
| Singapore F&B source refresh | In progress — 38,584-record public-access Excel; 294 catalogue-linked websites reviewed with 507 menu and 2,682 image URL candidates in separate review-only tabs. 11 operator snapshots contribute 246 exact outlet joins, 461 brand menu items, and 553 operator/exact-venue image candidates. OSM contributes 132 strict plus 694 labelled tier-2 joins. Fresh outlet-level menus, ratings, image rights, and closure verification remain incomplete. |
| Typecheck | Passing |
| Expo Doctor | Passing (18/18) |
| Agent harness docs | Done |
| Unit tests | Passing (npm test) |
| Playwright E2E | Passing when run with localhost access; Codex sandbox TCP bind needs elevated/local shell |
src/lib/services/mock/data.tssrc/theme/tokens.ts — never hardcode valuesFEATURE_FLAGS.prototypeRoutesEnabled is true; production builds keep unfinished prototype/design routes off the root navigatorMerchantTabs is registered only when FEATURE_FLAGS.merchantCentreEnabled is trueFEATURE_FLAGS.directMessagesEnabled is falseFEATURE_FLAGS.floorplansEnabled is trueFEATURE_FLAGS.mockMapboxEnabled = true for test environmentsEXPO_PUBLIC_MAPBOX_ACCESS_TOKEN locally to enable the live Mapbox surface; without it, the map falls back to a static coordinate preview so the repo screens stay inspectable.16% / 44% / 82%) and dynamic camera padding; the active pilot directory overlay is Koufu @ JEM (L2 + L3) with official floor-map image backplates, unit-aligned polygons, computed fit-to-viewport scaling, and explicit zoom controls.expo-image-picker (dev client/native build required).npm installnpm run startnpm run iosnpm run androidnpm run typechecknpm run data:enrichnpm run data:supabase:stage:canonicalnpm run data:supabase:stage:canonical:splitResearch/agent_interview_question_bank.md.data/ folder also contains the Singapore food-business workbook, a checked-in curated seed snapshot, and the refresh pipeline for rebuilding the database from public datasets plus supplementary hawker- and food-court-source discovery.marketing/ workspace now contains repo-grounded launch materials plus the Next.js marketing site in marketing/web/ with the homepage, for-merchants, about, and privacy routes.tasks/backlog.md.tasks/verification.md.tasks/todo.md remains the historical roadmap and audit trail, not the live status surface.See tasks/todo.md for the historical/full roadmap and tasks/backlog.md for the currently active work. Key future features include:
design/figma-v2/building-layout.html for mockups).| Enable the "Daily Crave" swiping discovery mode. |
true |
FEATURE_FLAGS.mockMapboxEnabled | Use a static fallback for the map in test environments. | false |
__DEV__, app now boots into the Developer Launcher to speed QA state setup (signed out / onboarding incomplete / onboarding complete presets).Maps tab, a real MapZoomedIn route, and polygon-based building directory layouts (including Wisma and JEM mall-style floor overlays with vertical level switching).docs/audit/. These serve as the authoritative implementation guide for Batch 1–8.main. Typecheck, lint, format, 650 source tests (2 credential-gated staging skips), local Playwright, Expo Doctor 18/18, dependency/security, asset, static Supabase, and Edge checks pass. This remains a release No-Go until Supabase capacity/provenance and live smokes are resolved, CI/Security run green on the final SHA, final iOS/Android artifacts receive device QA, and five tester journeys are recorded; see tasks/Roadmap/Release/release-0.1-week-1-2-completion-report.md.getCatalogRawService()). Supabase serves the authenticated, release-versioned raw-catalog RPCs; mock and Excel serve the same contract from their local repository (src/lib/services/mock/catalogMockService.ts). The legacy client-side search/browse path and its catalogReadV2 / EXPO_PUBLIC_CATALOG_READ_V2 flag are gone, so dev, preview and production all run one path.mapEnabled). Sign-in is required before any app route, so the map and raw-catalog RPCs are never reached as a guest.