Fujimod
Try your camera firmware in the browser and build Fujimod SD boot files.
Tell us where you are, what time it is and what you are eating. We pick the wine.
LifestyleTypeScript · JavaScriptGitHub @leandroBarbosaFROnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
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 ↗"I'm in Marseille, it's 00:12 and we're eating spaghetti bolognese." → three real bottles from your catalog, with the reason on each label.
sommelier/
├── studio/ Sanity Studio (standalone) — schemas, desk structure, seed data
└── web/ Next.js 16 + Tailwind 4 — the sentence form, the agent route, wine labels
Browser ── city / GPS, local time, timezone, locale ──▶ /api/chat
│
nearest appellations (from Sanity geopoints)┤
▼
AI SDK agent loop (model in web/src/lib/agent/model.ts)
1. findDish GROQ → dish flavours, protein, intensity
2. getPairingRules GROQ → house rules → target profile
3. (optional) Knowledge Base tools via Sanity Context MCP
4. searchWines GROQ → catalog filtered by profile, local first
5. showRecommendations → re-fetches the picked ids → wine label cards
Cards are always rendered from catalog data fetched by id, never from model text, so the agent can't invent a bottle, price or merchant.
cd studio
npm install
export SANITY_STUDIO_PROJECT_ID=<your id>
node seed/build-seed.mjs # writes seed/seed.ndjson (demo data)
npm run seed # imports it into the production dataset
npm run dev # http://localhost:3333
cd web
npm install
cp .env.example .env.local # fill in project id + ANTHROPIC_API_KEY
npm run dev # http://localhost:3000
The seed wines are clearly marked "(demo)" and have no merchant links. Replace them with your feed import.
| Type | Role |
|---|---|
wine | The catalog. Taste profile on a 1–5 scale, offers[] for buy links, externalIds (LWIN, feed id) for sync, reviewStatus for AI-enriched data |
appellation | Region + geopoint, used to find what's local to the user |
grape, producer | Reference data |
dish | Flavours, protein, intensity, aliases ("spag bol") |
pairingRule | The house doctrine: when it applies → target profile → why. This is your moat |
guide | Long-form editorial, the best Knowledge Base source |
The agent works without it. To add one:
pairingRule and guide documents (not the raw catalog).?mode=knowledge_base&knowledgeBases=kb_… in SANITY_CONTEXT_MCP_URL, and an org token in SANITY_ORGANIZATION_TOKEN.The route then merges the KB tools with the catalog tools and adds the initial context to the system prompt.
Everything goes through web/src/lib/agent/model.ts. Swap the provider there; the rest of the code doesn't change. Jev is mentioned in Sanity's engineering blog but isn't documented as a public API yet. If Sanity exposes it through an OpenAI-compatible endpoint, the commented snippet in that file is all you need.
web/src/lib/geo.ts knows a dozen cities. Swap in a real geocoder (or rely on "Use my location")./api/chat before it's public.studio/sanity.cli.ts is configured to write types into web/src/sanity/sanity.types.ts.studio/scripts/sync-*.ts: import an affiliate feed, upsert by externalIds.feedId, only fill empty editorial fields./wines/[slug] page per bottle (good for SEO and as Knowledge Base URLs).