Jamorham
Nightscout용 xDrip+ 버전
바코드 스캔·AI 라벨 인식으로 식사·체인점 주문·맞춤 제작을 몇 초 만에 기록하고, 주간 목표에 맞게 조정
Log meals, chain-store orders, and custom builds in seconds — with barcode scanning, AI label reading, and goals that flex with your week.
건강TypeScript · CSSGitHub @Parzivalart3mis온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Personal-first nutrition tracker with optional multiuser support — fast diary
logging, shared chain-store menus with verified items, custom store builds,
full nutrition panels, fasting history, voice and natural-language logging,
weekly analysis, and exportable reports. Installable as an iPhone Safari PWA.
Exercise lives in Iron Log, recipes in The Cookbook — MacroMap does food only.README 전문 보기 ↗Personal-first nutrition tracker with optional multiuser support — fast diary logging, shared chain-store menus with verified items, custom store builds, full nutrition panels, fasting history, voice and natural-language logging, weekly analysis, and exportable reports. Installable as an iPhone Safari PWA.
Exercise lives in Iron Log, recipes in The Cookbook — MacroMap does food only.
| Layer | Choice |
|---|---|
| Framework | Next.js 16 App Router + TypeScript |
| Styling | Tailwind CSS v4 + shadcn/ui (Radix) + Lucide |
| Database | Neon Postgres + Drizzle ORM (pg_trgm for fuzzy duplicate detection) |
| Auth | Clerk (proxy middleware, webhook user sync) |
| Rate limiting | Upstash Redis (no-op locally when unset) |
| AI | Gemini (@google/genai) text generation (natural-language/voice parse, day analysis with rule-based fallback) |
| Speech | Web Speech API (browser-native, zero cost) |
| Barcode scan | Native BarcodeDetector with manual-entry fallback |
| React-PDF rendered in a Node route | |
| Charts | Recharts (palette validated for CVD + contrast in both themes) |
| PWA | Serwist service worker, manifest, splash screens, safe-area CSS |
similarity > 0.4), every edit is logged per-field in
food_edit_history and shown on the food page.record_type discriminator), PDF export (streamed behind auth).pnpm install
cp .env.example .env.local # fill in Clerk + Neon at minimum
pnpm db:migrate # applies drizzle/migrations (enables pg_trgm)
pnpm db:seed # 11 stores, menus, ingredients, demo data
pnpm dev
Optional integrations degrade gracefully: without Upstash rate limits are
skipped; without GEMINI_API_KEY day-analysis falls back to rule-based
insights and natural-language logging returns 503; without BARCODE_API_KEY
(a free USDA FoodData Central key) the barcode pipeline stops after Open Food Facts.
Point a Clerk webhook (user.created / user.updated / user.deleted) at
/api/webhooks/clerk and set CLERK_WEBHOOK_SECRET. Write routes also upsert
the user row lazily, so local dev works without a tunnel.
| Command | Purpose |
|---|---|
pnpm dev | Dev server (Turbopack; service worker disabled) |
pnpm build | Production build (--webpack, required by Serwist on Next 16) |
pnpm test | Vitest suite (40 tests: nutrition math, Zod boundaries, CSV, weekly summary, insights, dates/theming) |
pnpm lint / pnpm typecheck | ESLint / tsc --noEmit |
pnpm db:generate / db:migrate / db:seed | Drizzle schema → SQL → apply → seed |
pnpm icons | Regenerate PWA icons + splash screens from the SVG mark |
diary_entries.nutrition_snapshot_json
stores label + scaled totals at log time; quantity edits rescale the stored
snapshot rather than re-reading the (possibly edited) shared food.src/lib/db/index.ts proxies Drizzle creation so
next build needs no DATABASE_URL. neon-http has no transactions;
multi-statement writes are sequential by design.name || ' ' || coalesce(brand_name, ''); POST /api/foods returns a
duplicate_warning payload unless forceCreate is set.--primary, --cta, --store-*) on a scoped wrapper, with
luminance-based text contrast and an optional per-store override.touch-action: manipulation
everywhere tappable, and 16px inputs on coarse pointers to kill focus zoom.Vercel + Neon + Clerk production instance: set the env vars from
.env.example, run pnpm db:migrate && pnpm db:seed against the production
branch, then verify the PWA checklist on a real iPhone (install from Share →
Add to Home Screen, standalone launch, no pinch zoom, store accent shift).