Skip to content

Releases: VoMinhKhoii/Kallo

v1.20.0

Choose a tag to compare

@github-actions github-actions released this 12 Oct 16:33
c3d24ca

1.20.0 (2026-10-12)

Features

  • logging: plate-first manual log on iOS and phone web (#437) (95a3a47)
  • show the sender's avatar on iOS push notifications (#439) (269d40e)

Bug Fixes

  • mobile: skip the avatar and nutrition fetches while signed out (#435) (095a1c6)
  • pipeline: meal accuracy and latency — portions, review, parallel matching and Call 2 (#438) (db58771)

v1.19.0

Choose a tag to compare

@github-actions github-actions released this 11 Oct 15:13
1ab7269

1.19.0 (2026-10-11)

Features

  • admin: premium console with welcome offer switch, account search and undo (#415) (d1a73a9)
  • ai: a per-ingredient candidate selector beside Call 2 (19ef01d)
  • ai: Call 1 splits dishes into single foods and plans them first (f5cf4f5)
  • ai: Call 1 splits dishes into single foods and plans them first (784f2d0)
  • ai: rank 16 candidates per ingredient with a selector beside Call 2 (ae01aa3)
  • ai: rescue a dish Call 2 rejects by splitting it into single foods (9140fc0)
  • ai: rescue a dish Call 2 rejects by splitting it into single foods (65addd4)
  • ai: run the meal pipeline on Claude Haiku 5.5 behind a model profile (ce54cf0)
  • ai: run the meal pipeline on Claude Haiku 5.5 behind a model profile (b06867f)
  • billing: replace the app-level trial with 14-day welcome Premium (395c9d4)
  • billing: replace the app-level trial with 14-day welcome Premium (18b0d30)
  • matching: retrieve curated food cards instead of raw table rows (4d6962c)
  • matching: retrieve curated food cards instead of raw table rows (0a72738)
  • mobile: put cheat "log it again" on the relog picker band (#424) (d23457d)
  • paywall: end onboarding on a welcome face for complimentary Premium (87ed2bc)
  • storage: move uploaded files from Supabase Storage to Cloudflare R2 (#416) (e676da4)
  • web: full-screen logging feed on phones (e7b7929)
  • web: native-feeling mobile shell modelled on the Flutter app (492d559)
  • web: native-feeling mobile shell modelled on the Flutter app (065a65a)

Bug Fixes

  • ai: carry a dish's count to its parts; keep named sugar in the Call 1 rules (2e0eab7)
  • ai: carry Call 2's macro adjustment as an offset; no selector for estimator bakeoffs (03a1aa8)
  • ai: check the run budget before every rescue start, eager ones included (585852d)
  • ai: honour sugar-free and keep table-backed sweetened products whole (4f0c282)
  • ai: honour sugar-free on desserts too (2f4f9a6)
  • ai: keep a rescued dish's vessel envelope when its evidence was on the replaced ingredient (7ff6bda)
  • ai: keep Call 2's none, rescale macros on override, cap selector fan-out (293f840)
  • ai: keep latte unsweetened and counted buns whole in the Call 1 rules (0a81b52)
  • ai: keep named milk in a fruit milk bubble tea (a69acb4)
  • ai: keep per-part amounts when a counted dish splits; no default sugar in iced tea or smoothies (bc7f604)
  • ai: keep the cooking method and preparation notes in rescue mini-meal text (7d2cd09)
  • ai: let a Call 2 retry overwrite the abandoned attempt's item_macros (6df3a4a)
  • ai: make dish rescue mass-safe and stop it cleanly (ac99004)
  • ai: make the Claude fallback reset stream parsers and file spend by provider (faa9ee0)
  • ai: match rescue modifiers against the name on whole words (b265b79)
  • ai: never let the selector's grace run past Call 2's own deadline (e5a4df4)
  • ai: no milk for fruit or clear-tea bubble teas (f93c729)
  • ai: override only rows Call 2's grams fit (same state and inedible share) (624b670)
  • ai: put the Call 1 rules back to the benchmarked wording (9c02b31)
  • ai: recheck the run budget when a queued rescue actually starts (97cbe1a)
  • ai: recompute a rescued dish's vessel class while keeping its container (7f4492e)
  • ai: reconcile the Call 1 rules with the existing routing and examples (8d6e0d3)
  • ai: rescue Call 2 uses the run's estimator; recompute rescued dishes' vessel envelopes (5186352)
  • ai: rescue every verdict resolution classifies as rejected (8019e44)
  • ai: settle the selector inside the nutrition stage trace (6a791d4)
  • ai: start no rescue mini-meal once the run budget is spent (f8e2d74)
  • ai: stop copying a dish's count onto its parts (afa4b1e)
  • ai: stop waiting for rescue 35 s in, leaving room for the 15 s persist deadline (2122d14)
  • ai: stop waiting for rescue 45 s into the run, inside the 60 s route budget (6b9b4c0)
  • ai: tell the selector which dish and cooking method an ingredient belongs to (70dc288)
  • ai: the plan adds only the milk and sugar a drink's name implies (15e4938)
  • ai: trace the repaired Claude answer, the one the pipeline used (a8f0ebc)
  • ai: treat the selector's meal text as escaped, untrusted data (ffbb1c3)
  • auth: send signed-out app visits to the sign-in dialog (#418) (028b023)
  • barcode: let a v3 refresh clear a zero the old fill invented (453fcd5)
  • barcode: read polyols and never zero-fill macros beside them (cb08993)
  • barcode: read polyols and never zero-fill macros beside them (1caafb5)
  • billing: let a renewing subscription own the lifecycle fields over a promo ([b519cef](b519...
Read more

v1.18.0

Choose a tag to compare

@github-actions github-actions released this 29 Sep 16:03
16c17c3

1.18.0 (2026-09-29)

Features

  • mobile: Circle block & report UI, settings profile header, squircle buttons (#401) (2c9880d)
  • mobile: Circle group tabs with faces, and a native group-info sheet (a74baec)
  • mobile: Circle tabs carry the group's faces; the open tab opens it (d49f7c5)
  • mobile: Circle tabs span the full width (ebaa643)
  • mobile: full-width Circle tabs, smooth group sheet, steady feed scroll (4595c2a)
  • mobile: rebuild the Circle group sheet as an iOS group-info page (c9eddaa)
  • mobile: the open Circle tab shows as many faces as its tab holds (a85aed0)
  • scan: editor headers, inline errors, Save, and the fourth macro fills itself (dbbccf3)
  • scan: one swipeable scan sheet and a smarter food editor (272d17b)

Bug Fixes

  • circle: keep share order for installed apps; new clients opt into eaten order (d236430)
  • circle: keep unread on the share clock under eaten-order feeds (0a6a7d2)
  • circle: place shared meals by when they were eaten, not shared (0a9265b)
  • circle: poll the unread marker, and keep the share trigger off updates (8ee5c8d)
  • circle: refresh the unread marker when a friend is removed (4564d3e)
  • circle: swipe back from Edit circle's first tab (1d26e62)
  • ios: ship iPhone-only for the App Store release (215d771)
  • logging: cheat-slider labels no longer overlap the section title (12b89dc)
  • logging: drop the Share card button; action presses are circles (#399) (f0f6427)
  • mobile: address Codex review on Circle tabs and the group sheet (8150f6a)
  • mobile: App Store polish — iPhone-only, brand printed twice, weight-axis collision, cheat-slider overlap (b5bf9c7)
  • mobile: Back from rename no longer reopens the keyboard (68cf500)
  • mobile: group sheet faces sit in the header row (11249c9)
  • mobile: only the current rename page may focus its field (4538b47)
  • mobile: scrolling the Circle feed no longer jolts the tab row (994e00b)
  • mobile: steady Circle tabs and group sheet (Codex review) (5283316)
  • mobile: the group sheet slides between levels without jumping (1f96466)
  • mobile: VoiceOver can activate Circle tabs and group rows (c47b325)
  • progress: drop a date tick that collides with the now label (604bb26)
  • scan: check the whole character after the brand, not one UTF-16 unit (148fcf3)
  • scan: don't print the brand twice when the name already carries it (e6641b2)
  • scan: group labels flush with their cards (c55eda3)
  • scan: one sheet whose pages push and pop, instead of a new sheet per level (a309c44)
  • scan: settle the sheet after a pull-down that only goes back a level; reject a lone separator (594d323)
  • scan: sheet gestures, name field, pull-down backdrop, camera dip (f18b7f6)

Refactor

  • mobile: one person row and one rows card for the group sheet (261adbd)

v1.17.0

Choose a tag to compare

@github-actions github-actions released this 28 Sep 07:43
3151f1b

1.17.0 (2026-09-28)

Features

  • add Sentry error reporting and PostHog analytics (web + mobile) (#383) (f0b280b)
  • auth: revoke Sign in with Apple tokens on account deletion (#391) (a22c868)
  • barcode: liquids in ml, micronutrients and the product photo (a78ba96)
  • billing: new pricing with a paid first week, /pricing as the purchase page (ff9835d)
  • billing: new pricing with a paid first week, /pricing as the purchase page (#386) (fab35f0)
  • circle: block, report and objectionable-text filter for App Store 1.2 (#392) (6d2c1a6)
  • format tab titles as "Page / Kallo" (#384) (d5e5799)
  • logging: restyle the calendar dialog with per-day calorie rings (e25bc39)
  • mobile: iOS 26 sheet header and a shared pull-down (98a27f3)
  • mobile: launch intro — the black K clacks Kallo into place (#398) (a96d73a)
  • mobile: settings sub-pages reuse the onboarding steps, with native chrome (#385) (6ef879a)
  • next: upgrade to Next.js 16.3.6 and adopt Instant Navigations (KALLO-01) (5c8a407)
  • nutrition-label: keep scanned label photos with their scan outcome (#394) (2181092)
  • privacy: ask for AI-processing consent before the first AI request (#393) (a7af2f1)
  • scan: enriched barcode data and the redesigned scanner (iOS + web) (b5691e3)
  • scan: full-screen scanner with results over the frozen camera (4b032f5)
  • scan: the web scanner, anchored on the iOS one (8b8eef9)
  • security: enforce a Content-Security-Policy compatible with prerendered shells (54c8bd4)
  • security: enforce a Content-Security-Policy compatible with prerendered shells (f943211)

Bug Fixes

  • account: export allowlisted Auth identity data; index chat and coach lookups (bd5f2a8)
  • account: export every user-linked record in "Export my data" (a3d3fc0)
  • account: export friendships.acceptedAt; guard export coverage per column (4e4d30b)
  • account: index the user columns the data export filters by (7466055)
  • account: regenerate the export index migration after main; export auto-share consent time (113af49)
  • api: align OpenAPI with runtime and validate chat-group bodies (537207e)
  • api: answer a retried one-shot log as already saved (4d5a7b0)
  • api: authenticate day-complete before reading its body (be47994)
  • api: document 413 on every byte-capped operation (f7ce06c)
  • api: document analyze-meal's 413 and follow helpers in the 413 guard (32ffb9e)
  • api: map bad input to 400/401/409/413 instead of retryable 500 (903ab9f)
  • api: mark the macro-card PNG response as binary (55c6147)
  • api: model the analysis SSE body as text and document every error code (462a8bf)
  • api: serialize every analyze-meal pre-stream failure and keep nutrition tz optional (b771cd3)
  • api: throw away a one-shot log's staged row on any failed confirm (6c5e818)
  • app: clear transient results when a kept-alive page is revealed (4d08f74)
  • app: re-sync kept-alive state when its props or URL change (6e18fe0)
  • auth-proxy: canonicalize proxied paths and stop leaking the origin host (93ad5ed)
  • auth: mark the session cookie Secure and cap its lifetime under HSTS (2fe58be)
  • auth: measure the password minimum in UTF-8 bytes like GoTrue (8bbee13)
  • auth: say how accented letters count toward the password limits (507620f)
  • auth: sync the password policy to 8+ characters with letters and digits (970794b)
  • avatars: route every avatar write through server processing (8b3d46a)
  • build: keep test files out of the next build type-check (ae3c7d4)
  • circle: default auto-share off and hide shares made before a friendship (18d24f2)
  • circle: stamp friendships.accepted_at at the status flip (4481f44)
  • dashboard: ignore week-strip taps on the first-run dashboard (#397) (5c5e558)
  • gauge: stop the kcal dial reading as eaten/remaining swapped (#396) (dfdd74c)
  • pricing: clear a finished checkout on reveal and visitor change (74f50b1)
  • pricing: hide the beta note beside a checkout status (097585b)
  • pricing: keep unresolved payments on reveal; drop stale-account results (d94c42d)
  • scan: log the barcode amount the result showed, not a rounded one (16b6e78)
  • security: log CSP report URLs as route templates, not raw paths (82a7b34)
  • security: redact CSP report paths by route position, not spelling (501c557)
  • settings: drop Google Play from the iOS delete-account warning (#389) (3f5c69e)

Performance

  • ai: track AI spend per call and cut meal-analysis cost 11% (...
Read more

v1.16.0

Choose a tag to compare

@github-actions github-actions released this 23 Sep 04:19
5920471

1.16.0 (2026-09-23)

Features

  • circle: confirm before accepting or dismissing a meal-share offer (9eed755)
  • circle: one reply pill, a centred empty state and pull-to-refresh (6b03e8e)
  • circle: rebuild the thread reply surface on mobile and web (4a58cd2)
  • dashboard: plot weight by calendar day and restyle to a rounded spline (9a49075)
  • dashboard: plot weight by calendar day and restyle to a rounded spline (c38b80b)
  • db: meal_share_invites.copy_factor (656bf4d)
  • logging: add a calendar picker to the timeline sidebar (8cec058)
  • logging: let the desktop timeline reach an unlogged day (661a5cc)
  • logging: open the calendar as a dialog instead of a popover (c7af872)
  • logging: per-day totals, a calendar picker, and one voice on the meal turn (2bbda7f)
  • logging: show each day's calorie total in the timeline (191c4e9)
  • mobile: cheat-meal sharing, and the copy-only share sheet (a6d4bc9)
  • mobile: draw real squircles, and take CupertinoSwitch directly (5502ebb)
  • mobile: give the eight silent controls their iOS haptic (29664d6)
  • mobile: portion battery (610ebc2)
  • mobile: remove non-nativeness from custom components (62967cd)
  • mobile: rewrite the share sheet around the portion battery (f4fdc1f)
  • mobile: split parts logic (8baab2d)
  • mobile: splits on the wire, and the undo mutation (a01bc6c)
  • mobile: Threads-shaped invite card, no status chips (108e08d)
  • remove the sugar-in-braised-dishes cooking preference (167d7b8)
  • remove the sugar-in-braised-dishes cooking preference (b5c09a8)
  • social: accept honours copy_factor (044d71f)
  • social: discarding a staged cheat card hands the offer back (966499d)
  • social: make a shared cheat meal read as one in the circle feed (b92556a)
  • social: share a cheat meal to a friend, amount set by the recipient (eddefe7)
  • social: share a cheat meal, keep the original time, stack the invite inbox (629e475)
  • social: split parts maths (777772e)
  • social: stack pending meal offers into one deck (7a0bf62)
  • social: undo a meal share (12a50ab)
  • social: uneven meal splits (8433ac1)
  • social: uneven meal splits on the portion battery (4ed1807)
  • web: share dialog and activity row on the portion battery (e23d047)

Bug Fixes

  • address Codex review on the invite confirm and discard test (dacfaa7)
  • circle: a failed refresh keeps the post, and the pull waits for it (b1bf6f1)
  • circle: a send button a screen reader can actually activate (d6f1499)
  • circle: a swapped-in thread opens at its own top (50428db)
  • circle: hold the thread's post across a refetch underneath it (84d6e31)
  • circle: key the reply dock on the share, not the whole thread ref (db8dbb0)
  • circle: nothing from one thread survives into another (053ad67)
  • circle: refresh only the source the thread page is reading (9e00da8)
  • circle: the send button stands as tall as the field it sends (09b12a7)
  • circle: the send glyph drops one tier, primary to action (3c8c269)
  • circle: the share is the thread page's identity, not the whole ref (73b9d2e)
  • circle: uniform inset in the reply pill, send button outside it (713eb69)
  • defer the sugar_braised column drop to a follow-up deploy (e9a8ab7)
  • generate the copy_factor migration through Drizzle; restore mobile docs (430cfc4)
  • logging: agree on the abandoned horizon; clear the parked day on sign-out (7f5f42d)
  • logging: agree with the feed on which staged cards are live (9e6c6f6)
  • logging: drop the day total when a pending card shares the day (182ba98)
  • logging: give the meal card's expand toggle a real touch target (e3673c8)
  • logging: localize the calendar and refresh totals after an edit (d26585f)
  • logging: localize the labels DayPicker writes, not just the dates (3e70aaa)
  • logging: never report a partial day total as a complete one (ec2795e)
  • logging: put the meal turn on one voice and one body size (5e2c15d)
  • logging: read the scan boundary off the probe row (689791a)
  • logging: read the timeline's three scans from one snapshot (4ea6ddc)
  • logging: reconcile the day read with the sweep running beside it (c5154b6)
  • logging: share one definition of a renderable staged card (2010bea)
  • logging: start the calendar's week on Monday (b0c52d6)
  • logging: take the union of both pending scans (47fc10e)
  • mobile,social: the confirmation toast never rendered; scope undo's delete ([0bc8652](https://github.co...
Read more

v1.15.0

Choose a tag to compare

@github-actions github-actions released this 13 Sep 17:04
6e8a0c5

1.15.0 (2026-09-13)

Features

  • analytics: expose bounded raw meal text (aeef79d)
  • brand: add the Koboyo surface-state illustration cast (b9725fb)
  • circle: Threads-style feed and thread page, notifications open the post, menu and state fixes (f130249)
  • dashboard: one green ramp that stops at target, one colour past it (cbfeca0)
  • db: add day_completion_marks for user-attested full days (bf9bfa5)
  • expose bounded meal input to analytics trace (153cd93)
  • logging: a scanned product is a composer pick, and the meal keeps its name (dd37ee1)
  • logging: let a user attest an under-logged day ("Mình ăn đủ rồi") (be99db5)
  • logging: let web users mark an under-logged day complete (20c92ca)
  • logging: mark a day complete from the server side (58c790d)
  • mobile: a right swipe on an onboarding screen steps back (64ea913)
  • mobile: a share notification tap opens that post's thread (5ca9da9)
  • mobile: add "Mình ăn đủ rồi" to the under-logged notice (7e31ecf)
  • mobile: add KalloSurfaceState and the illustration assets (0634263)
  • mobile: Circle feed card and thread page read like Threads (40e1cbe)
  • mobile: compose every empty and error surface from KalloSurfaceState (6103e46)
  • mobile: finish the sent-message long-press menu and add Edit (3843ead)
  • mobile: micronutrients as a 2-column grid of cards (66f6ac8)
  • mobile: onboarding-first flow, animated bun guide, gold-yearly paywall (983f294)
  • mobile: port the heatmap's range chooser so iPad shows a year (2844bab)
  • mobile: put a sent message back in the composer with Edit (9dae375)
  • mobile: rebuild the paywall around a Free vs Pro comparison (871d684)
  • mobile: stable-chrome step transitions, BMI goal default, email route, top sweep (409774f)
  • mobile: start-screen dish scatter, step backdrop blobs, slimmer tests (6932238)
  • mobile: tapping anywhere on a Circle post opens its thread (89db7da)
  • mobile: the back gesture starts anywhere on the page, not on a 20pt edge (823d6cd)
  • mobile: the message menu is the app's own, and the bubble stays put (635cbbd)
  • mobile: the thread page fetches a post the feed cache does not hold (e2984f4)
  • notifications: push carries the share it is about (620740c)
  • nutrition: let an attested day override the partial-day gate (1c41b26)
  • nutrition: NASEM fiber Adequate Intake for every profile (7e3e4c5)
  • push: send to APNs directly and register the iOS device (0986dbd)
  • states: hand-drawn surface states on web and mobile (4d2f79f)
  • states: ink action button and one-sentence copy on every surface state (71a7045)
  • web: a post's own page at /circle/<shareId> (e03578e)
  • web: add the shared SurfaceState component (532c56d)
  • web: compose every empty and error surface from SurfaceState (c70a70a)
  • web: dogfood the surface states on the design-system page (4ac9fe7)

Bug Fixes

  • analytics: restore trace reader grants (de05b5b)
  • analytics: restore trace reader grants (7ccb289)
  • dashboard: drop the duplicated window label, restyle the attest button (92688c2)
  • dashboard: make the heatmap key describe the grid, and pin it with goldens (51a2ba5)
  • dashboard: make the heatmap legend describe the grid it sits under (bc13198)
  • honour an attested day on every surface that reads the gate (727b100)
  • i18n: the Instant mode reads "Tính ngay" in Vietnamese (fed5ea9)
  • ios: drive aps-environment from a per-configuration build setting (ed75851)
  • logging: picks keep their order and their hygiene, and a stale scan is refused up front (1dcb4ee)
  • logging: the composer's picks — keyboard, order, scanned products, and a calm feed (9bde362)
  • mobile,web: brand-sweep tab bar "+", 7d nutrition default, closable paywall, Google grant reuse (fe32767)
  • mobile,web: guard brand names from capitalisation; web heart in web's red (786a61e)
  • mobile,web: recent meals order, Circle thread page, dialog surface, nutrient grid (024af82)
  • mobile,web: recent-meals order, Circle thread page, dialog surface (870996f)
  • mobile: a build exception no longer bricks the app into a grey rectangle (e6eb325)
  • mobile: a disabled glyph inside a post absorbs its tap (ab78c1e)
  • mobile: a scanned pick never splits, drops, or outlives another pick (b967562)
  • mobile: act on CodeRabbit's review of #353 (38cf2d5)
  • mobile: app-wide swipe-back, Circle polish, onboarding back-stack, and a Free vs Pro paywall (70a7630)
  • mobile: audience the iOS Google token to the iOS client, not the Web one (a56e086)
  • mobile: Circle action row presses with a wash, not a ripple ([4d583da](4d583dae...
Read more

v1.14.0

Choose a tag to compare

@github-actions github-actions released this 04 Sep 02:41
b4ae472

1.14.0 (2026-09-04)

Features

  • mobile: cheat-meal intensity row and composer mode pill (ef9564c)
  • mobile: feedback page follows the settings sub-page design; drop restating subheadings (5c40459)
  • mobile: heavier active tab glyph, nav hides on scroll, header avatar renders and caches (aacd09e)
  • mobile: home date strip pages back through earlier weeks (2084120)
  • mobile: iOS-native baseline — tokens, shared components, pill nav shell (ddf7fdb)
  • mobile: iOS-native design pass — canvas, buttons, pill nav, all screens (bc5459a)
  • mobile: iOS-native design pass — Threads type ramp, brand wordmark, QA + audit fixes (335695f)
  • mobile: iOS-native pass — all bottom sheets (12c8e70)
  • mobile: iOS-native pass — Circle feed and the auth screens (561a7f6)
  • mobile: iOS-native pass — logging feed + nutrition (3ae03c7)
  • mobile: lighten the canvas to #F8F7F4 (5224f73)
  • mobile: metric-compensated type ramp for Be Vietnam Pro (0c2e55a)
  • mobile: native confirm dialog with explicit verbs, swipe-through sheet pages, centred attribution (055b71e)
  • mobile: post-fan-out sweep — gauge over-cap, umber retirement, flake fix (a9b4f5e)
  • mobile: restyle the dashboard to the iOS-native pass (8b10507)
  • mobile: Settings on the iOS-native grouped-card system (93e2423)
  • mobile: step Log dial readouts down one tier (44add4a)
  • mobile: Threads-scale type ramp — body 17, meta 15 (12b8f9b)
  • rate-limit: one-statement Postgres limiter engine, reapers, CF-only IP source (b4969aa)
  • rate-limit: one-statement Postgres limiter engine, reapers, CF-only IP source (5ecb43e)
  • security: guard the authenticated abuse surfaces and add the route-inventory gate (32a9625)
  • security: guard the authenticated abuse surfaces and add the route-inventory gate (2f5fc82)
  • security: harden the anonymous auth surface — proxy limits, bounded bodies, origin-lock fail-closed, healthz, headers (6f0e5cb)
  • security: harden the anonymous auth surface — proxy limits, bounded bodies, origin-lock, headers (e44302f)

Bug Fixes

  • gauge: draw the dial's fill at small values instead of dropping it (7d8b06d)
  • logging: give the save pill room to clear the meal card (f576fd1)
  • mobile: address review — shrink oversized label stills, camera lifecycle, DST-safe paging, structure (57f22fc)
  • mobile: async lifecycle guards, stale-date completion, idempotent log entry (60cc1b2)
  • mobile: brand wordmark, unified sheet X, tick-only selection, intensity subpage (4517108)
  • mobile: clean up shrunk label stills, treat restricted camera as unavailable, serialize camera reopen (47c429f)
  • mobile: hold 3-digit macro figures inside their columns (89c2b5b)
  • mobile: iOS alert anatomy for confirms; logging composer rides the keyboard (eb419ba)
  • mobile: iOS alert anatomy, composer rides the keyboard, unified segmented switch (8222818)
  • mobile: iOS polish batch — keyboard, scanner, dialogs, dashboard, nav (fb82607)
  • mobile: keep the keyboard inset out of the empty-feed easing (196b66a)
  • mobile: quick-log sheet rides the iOS keyboard, sends cleanly, offers scan (ee81176)
  • mobile: reset sticky Log UI state when the signed-in user changes (0e40016)
  • mobile: restore date-chip design and tighten meal-card expand timing (e7ea793)
  • mobile: restore dial typography and spacing, left weight axis, Kallo wordmark (c821eac)
  • mobile: restore shell layout and Log/weight behavior after native-pass regressions (0fd3e44)
  • mobile: scanner opens at 1x, stops re-searching a miss, shares the error card; live label camera (db7edd7)
  • mobile: sheet layering, weight-sheet error path, popover Material + QA polish (24eb201)
  • mobile: steady composer focus ring on dismiss; one segmented switch with iOS-style thumb motion (ec32039)
  • mobile: tab-preserving log entry, measured nav inset, draft-not-controller, dirty-flag totals (34cd2c7)
  • mobile: weight log no longer skeletons the home page; single-point chart and heatmap month row fit (d44abcc)
  • pipeline: keep each repeated dish's Call-2 estimate (310b28b)
  • rate-limit: guard query cancel; probe the anon grant boundary without tripping supautils (38a4196)
  • security: close CodeRabbit findings on the auth surface (6a8889e)

Performance

  • rate-limit: batch the events reaper and index its retention predicate (88b451d)

Documentation

  • mobile: native-component audit, dialog and header docs (2edac34)
  • record the audit's deferred structural follow-ups (DEV-121) (58e76a6)

v1.13.0

Choose a tag to compare

@github-actions github-actions released this 30 Aug 16:05
e1a34ff

1.13.0 (2026-08-30)

Features

  • activity: Threads-style activity page, nav entries and unread badges (43a4515)
  • api: harden agent-facing contracts (eb0c262)
  • billing: premium-tier gating across web and mobile (487941f)
  • billing: re-enable copy/split under an initiator-pays gate (f520488)
  • gauge: size the day's marks from the room they get (c5cd091)
  • gauge: size the day's marks from the room they get (9737705)
  • logging: staged-meal discard, message copy, and dialog/perf fixes (d2196a7)
  • mobile: let a staged meal be discarded; fix the composer's tail (d7432e8)
  • mobile: press and hold a sent message to copy it (1540576)
  • notifications: schema, aggregation write path, producers, API and hooks (7777fb4)
  • nutrition: explain the complete-day rule on the day summary card (b383ff0)
  • nutrition: port the gauge dial to the remaining surfaces (483908d)
  • nutrition: require 85% of the calorie target for a fully logged day (f4fec7e)
  • nutrition: require 85% of the calorie target for a fully logged day (b8008df)
  • prompts: deep composed-dish decomposition examples (vi + global) (091ca8e)
  • prompts: locale-block prompt split (vi/global) + locale-aware eval harness (68bb65d)
  • prompts: split V2 prompts into base + vi/global locale blocks (a25b84d)
  • prompts: teach ingredient-level decomposition with deep composed-dish examples (b36e8a7)
  • push: FCM pipeline, device token API and producer fan-out (3e1655a)
  • seo: make kallo.fit legible to AI agents (1a23669)
  • seo: make kallo.fit legible to AI agents (48bd241)

Bug Fixes

  • address Codex adversarial review findings on the stack (cd37bb1)
  • auth: return JSON from email hook (2e9f71b)
  • auth: return JSON from email hook (e846faa)
  • billing: keep the OG card readable and invalidate on trial expiry (63c963a)
  • chat: re-verify sender membership under the group lock before sending (59af09c)
  • dashboard: give the Today card its own height budget (d487a3d)
  • dashboard: give the Today card its own height budget (8494969)
  • db: audit remediations — reap grants, retention cron, meals check (ed2b8a9)
  • db: harden audit migrations per adversarial review (cfc3812)
  • db: make audit migrations standalone-valid on main (1d11531)
  • db: move the data-plane migration past main's newest timestamp (a7532bb)
  • db: override global PUBLIC EXECUTE default for future functions (5a6381d)
  • db: prod audit remediations — reap grants, retention cron, meals check (90b480e)
  • db: prod audit remediations — reap grants, retention cron, meals check (ff37ecb)
  • db: rename cron loop variable shadowing cron.job (18d761b)
  • eval,matching: vessel check tolerates deep decomposition; tôm sú/thẻ aliases (0835574)
  • eval: derive per-fixture user context from locale tags (17ab7ee)
  • gauge: let the logging dial say what the dashboard dial says (9f660dc)
  • gauge: pick the dial's wording by fit, not by radius (b96a502)
  • gauge: pick the dial's wording by fit, not by radius (f65d9f4)
  • logging: stop the feed collapsing to zero width (50e33c8)
  • matching: alias 'carne asada' to the broiled flank-steak row (06494c7)
  • matching: alias 'carne asada' to the broiled flank-steak row (172d409)
  • matching: break similarity-saturation ties and show Call 2 the English row name (5dfd1ee)
  • matching: similarity-saturation tie-break + English row names for Call 2 (1bb5530)
  • mobile-settings: tighten the settings index and fix four defects (693562c)
  • mobile: define common.remove, which nothing did (e4e4e7c)
  • mobile: four logging and shell UI fixes (6434a3d)
  • mobile: give the chat bubble the iOS system context menu (abcf777)
  • mobile: make the swipe-to-delete reveal read as one shape (8602934)
  • mobile: match the confirm dialog's buttons to the rest of the app (8a73f20)
  • mobile: open the sidebar with a swipe from anywhere (88bf22f)
  • mobile: repair two defects the perf refactor introduced (fe4a0bc)
  • mobile: stop the logging feed collapsing to zero width (a8f5629)
  • mobile: travel the newest turn to the top on send (420ed60)
  • mobile: widen macro labels and unify the confirm dialog (f6fb1b7)
  • notifications: atomic chat audience capture and server-side invite close (792dbc9)
  • notifications: e2e defect fixes — mark-seen precision, plural copy, visibility 500 (b6babd2)
  • notifications: exact aggregate membership, push once per open aggregate, neutral invite chip (d6379f2)
  • notifications: first-mount feed healing and deterministic lock...
Read more

v1.12.0

Choose a tag to compare

@github-actions github-actions released this 22 Aug 06:41
2f7f1be

1.12.0 (2026-08-22)

Features

  • barcode: resolve barcodes through a multi-provider chain (OFF + USDA FDC) (2dc4a13)
  • circle: centre each macro figure under its slice of the bar (30ff1f5)
  • circle: rebuild the feed's hierarchy, rhythm and action row (c065d5a)
  • circle: rebuild the feed's hierarchy, rhythm and action row (1156b91)
  • circle: show the logged clock time, not an elapsed span (3922cab)
  • dashboard: rebuild the dock around a 240° gauge dial (4e6de7f)
  • dashboard: rebuild the dock around a 240° gauge dial (621793a)
  • lib: dissolve the lib/ root into concern folders (35b2cbb)
  • light the meal composer, and give web the empty-day question (71912f4)
  • logging: finalize nutrition label ocr pipeline with micronutrient support (f734c7d)
  • logging: streaming ticker on both platforms, lit composer, first-paint layout (12926c6)
  • nutrition-ocr: expand micronutrients extraction and upgrade vis… (27ec63b)
  • nutrition-ocr: expand micronutrients extraction and upgrade vision model (2f46f64)
  • scan: read a nutrition label on mobile, and unify the scan surfaces (fbba8a3)
  • scan: read a nutrition label on mobile, and unify the scan surfaces (4dc8875)
  • seo: make the site discoverable, and stop describing it as Vietnamese-only (a9344a1)
  • seo: name the category "nutrition tracker", not meal or calories (a4ab128)
  • seo: put the hook in the title, and stop pages dropping their og:image (c881307)
  • seo: put the hook in the title, and stop pages dropping their og:image (920d826)
  • seo: reposition the en metadata from Vietnamese-only to global (1c529b6)
  • web: let the server say where the composer goes (ef65c1b)

Bug Fixes

  • address adversarial review findings (447672c)
  • ai: stop counting bone weight as meat in grounded estimation (3841a57)
  • ai: stop counting bone weight as meat in grounded estimation (d4579a5)
  • biome: organize imports/exports in lib/ai/gemini.ts (147cb10)
  • circle: bar to 6pt, macro figures to ink (ad5ece6)
  • circle: one rule per day boundary, bold the author name (1e82f25)
  • circle: take the weight back out of the feed's nutrition block (8847e40)
  • ci: refactor barcode scanner dialog under 200 lines threshold (871d2b2)
  • ci: resolve tsc build errors and test import paths for label ocr (62dff72)
  • land the composer where it belongs instead of flying it there (6e7df77)
  • logging: optimize barcode scanner framerate, format filter, and scan bounds (2769cf4)
  • mobile: keep the auth session stream alive across gotrue errors (0a0ff04)
  • mobile: keep the auth session stream alive across gotrue errors (93199da)
  • mobile: keep the composer halo off the meal cards (428316b)
  • nutrition: stop the composition bar collapsing to zero width (c3e8b67)
  • nutrition: stretch the composition bar's segments to the bar height (0e66e99)
  • ocr: address CodeRabbit logic findings on the hardening PR (7d10b59)
  • ocr: address CodeRabbit UI and lifecycle findings (b202d30)
  • ocr: fix seam-test CI flake and restore Flutter barcode scan window (846bfdb)
  • ocr: harden nutrition label OCR data flow and execution lifecycle (bc450db)
  • ocr: read thousands groups as thousands, not decimals (d1b2fbf)
  • ocr: stop advertising server-side HEIF, pluralize serving label (ed78138)
  • security: sanitize previewUrl in ocr-scanner-tab to resolve CodeQL alert (eed29cb)
  • security: stop emitting a CSP directive that report-only ignores (8aed570)
  • security: stop emitting a CSP directive that report-only ignores (04bc627)
  • seo: drop the hook from the Vietnamese title (0cc3334)
  • seo: restore "Trình theo dõi" to the Vietnamese title (f368933)
  • seo: reword the Vietnamese title (c44dca5)
  • test: use direct wikimedia image URL with browser User-Agent in label-ocr live test (11cade3)
  • web: stop the halo being cut off by its own box, and stage its entrance (5163836)

Refactor

  • ai: decompose the meal pipeline into named concern folders (15cb62b)
  • ai: extract gemini-provider module to satisfy file size limit (3d27e85)
  • ai: make the gross+refuse schema permanent, not a toggle (3bd8013)
  • ai: restructure the rest of lib/ai into concern folders (43e29ea)
  • app: thin the fat route handlers and lift admin out of the route tree (21c8488)
  • circle: split the feed widgets under the 200-line gate (1afa874)
  • components,hooks: break the layering inversion and split the over-cap folders (3b9d7b4)
  • dashboard: give the dial one owner and close the feature boundary (a2e4f73)
  • fix what the quality review found in this branch ([a0d0a92](https://github.com/VoMinhKhoii/...
Read more

v1.11.0

Choose a tag to compare

@github-actions github-actions released this 13 Aug 11:47
a7fce90

1.11.0 (2026-08-13)

Features

  • ai: define the edible/gross mass basis and derive it from refusePct (7abc5ee)
  • auth: mint Google ID tokens on our own origin for web sign-in (4a45180)
  • auth: show Kallo on the Google consent screen for web sign-in (5dc21df)
  • billing: add Paddle-backed web checkout (f912a51)
  • data: land NIN enrichment migration (c45cfc3)
  • db: NIN foods-table enrichment pipeline (additive-only, dev-gated) (dda1f5d)
  • db: NIN foods-table enrichment pipeline (additive-only) (0004ba2)
  • landing: open signup and point the waitlist at the mobile launch (3579013)
  • nutrition: 7d/30d/90d ranges, column selection, and a scope toggle that greys instead of moving (cc1c8a3)
  • nutrition: compare the calorie figure against the previous period (d6b2645)
  • nutrition: food icons for the macro legend, one line again (b722435)
  • nutrition: localized macro legend labels, evenly spaced (ce25ac0)
  • nutrition: name the scope switch, day-first dates, shared empty state (61ba15d)
  • nutrition: offer 7d/30d/90d, brighten the chart, fix scope drift (8187621)
  • nutrition: selection re-scopes the page, yellow fat, zeroed empty state (5f58ec5)
  • nutrition: yellow fat band, calendar week, tap a column for its micros (c0cda17)

Bug Fixes

  • ai: address CodeRabbit full-review findings on the refuse path (dbd432f)
  • ai: address timeout review feedback (85e82d8)
  • ai: bound cold matching before Call 2 (d8780ae)
  • ai: bound cold matching before Call 2 (384cc8a)
  • ai: harden refuse classification against fold collisions (883fa72)
  • ai: map flushed macros by meal identity (f57cf1a)
  • ai: map flushed macros by meal identity (f3f2663)
  • ai: stop saturated lexical scores deciding candidate order (da88be7)
  • auth: clear the Google button when the ID token exchange throws (020fb59)
  • auth: say why Google sign-in fell back to the redirect flow (cd475c3)
  • auth: treat a blank GOOGLE_WEB_CLIENT_ID as unconfigured (b33dc83)
  • billing: correct the Terms' deletion promise and stop offering web lifetime (133412d)
  • billing: keep the deferred-plan filter out of the error log (014ac81)
  • billing: stop a superseded poll caching a stale entitlement snapshot (4c82b32)
  • data: address CodeRabbit findings — row-identity clone dedupe, stricter schemas (0b995a6)
  • data: harden NIN enrichment landing (ca17fc8)
  • data: prepared NIN composites are cooked, not raw (7ee6254)
  • data: review NIN ingestion decisions (eed32e4)
  • db: repair alcohol rows missing ethanol energy (f245a5f)
  • landing: fill the comparison panels, and make a covering card read as depth (16af251)
  • landing: let the meal cards fill the panel they sit in (414833d)
  • landing: make a covering card read as depth, not as a crop (a25f717)
  • nutrition: a selected column keeps its colour even when the scope drops it (12430c7)
  • nutrition: address CodeRabbit review — selection, a11y, and contracts (3f3c5d4)
  • nutrition: clear the bucket selection when the range changes (259fced)
  • nutrition: grey the set-aside columns instead of dropping them (3c6689c)
  • nutrition: keep the trend bars weekly and steady across day scope (84d9d30)
  • nutrition: one day set per card, and an axis that fits the data (ce56d1b)
  • nutrition: pin the source line, box the empty state, keep data on switch (6e30a20)
  • nutrition: the scope toggle greys columns, it never moves them (682e71b)
  • portion: make every declared prior reachable, and add head piece priors (a43ead6)
  • portion: stop diacritic folding from routing bún to clarify (d1267f7)
  • repair alcohol row energy values (0ade5b7)
  • search: autocomplete route enforces its own similarity floor (8e5382b)
  • search: rank on the best-matching field, not name_primary (fbd6f56)
  • security: allow Google Identity Services through the CSP (a3e2d97)

Refactor

  • billing: split the paywall's purchase machine out of the dialog (6788aca)
  • data: simplify NIN enrichment modules (330ebc5)
  • nutrition: one zero-state builder, drop a wrapper, fix a layer (232ea03)
  • nutrition: plain kcal, figure back on top, "All" for logged days (da0d4ca)
  • nutrition: switch to the top-right corner, scope named in the title (0dc9472)
  • portion: one folded index for concepts and units (e8fc71f)
  • theme: adopt #FCFCFC as the app canvas on both platforms (208a1ef)

Documentation

Read more