Fujimod
Try your camera firmware in the browser and build Fujimod SD boot files.
Find hawker food, cafes, restaurants, and home-based food businesses in Singapore by dish, craving, and area.
Translation pending
LifestyleGitHub @siewheanOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full 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.