Project · 05 · Rust · Tauri · SQLite · MMXXVIIn progress

Aentic Nourish.

Meal-planner module sharing Kronos' bones — Tauri + Rust + SQLite, port 7702 in the same stack. Nutrition is computed from ingredients on read, never stored. Bilingual, multi-currency throughout.

Derived state is the only state worth trusting.

In brief

Aentic Nourish is a meal planner for individuals and households, built as a browser PWA that stores its state locally. Calories, macros and micronutrients are not stored on recipes; they are derived from each recipe's ingredients against a bundled nutrition database when read. Costs can be shown in several currencies. The interface is English-only in this build. A Tauri/Rust desktop module is specified but not yet built.

Specification

Current build
Browser PWA — vanilla JS modules, service worker, localStorage; served on :7702 by a small Node static server
Specified
Tauri 2 shell · Rust + Axum on :7702 · SQLite (WAL, JSON1) · React 18 + TypeScript — the Kronos pattern (build spec v2)
Principle
All nutrition computed from the ingredient source of truth — never stored denormalized
Money & units
Smallest currency unit as integers (EUR default, GBP, USD, CHF…); grams and ml internally
Source
Private

From the build spec — architecture rules (Kronos pattern)

  1. Tauri commands mirror REST endpoints — frontend calls Tauri IPC, which calls Rust handlers
  2. Every entity has: id (ULID), created_at, updated_at, deleted_at (soft delete)
  3. All nutrition computed from Ingredient source of truth — never stored denormalized
  4. REST API on localhost:7702/api/v1/* for brain orchestration
  5. Module registers with brain at localhost:7700/modules/register on startup
  6. SQLite WAL mode, foreign keys ON, JSON1 extension enabled
  7. Error handling: Rust Result types, frontend toast notifications via Zustand UI store
  8. All monetary values in smallest currency unit (integer) — e.g. cents for EUR/USD, pence for GBP — displayed formatted per currency settings
  9. All weights in grams, volumes in ml — converted for display per settings
  10. Currency is user-configurable (default EUR). All display formatting reads from settings.currency.