Everyday Runtime v0.1.0 — Explainable Smart Shopping
First public release of Everyday Runtime — a self-hosted shopping assistant, built as a Twenty app, that estimates what a household probably needs from partial information. It does not try to track exact stock; it gives a probability, a confidence and a reason.
Milk — Probably low · 89%
Last purchased 6 days ago · usual interval ~5 days
What's in 0.1.0
Explainable inference — a deterministic engine in plain TypeScript (src/domain), no AI service or API key needed. Per product it returns a state (confirmed / likely / possible / unknown), a confidence, a need score and a one-line reason. It handles direct reports (empty, needed, bought, still there), purchase rhythms (median of recent intervals), consumption, conflicting reports and stale evidence. Every suggestion has a “Why?” with the full explanation. Direct reports are labelled Confirmed, inferences Estimate.
Now — what is probably needed, with percentage, a plain headline and the reason.
Shopping list — quick add (2 milk, coffee x3), items added by a person vs. suggested ones (with the confidence at the time), mark bought with quantity and optional price and store, “Not now” for suggestions.
Products — per-product details (last bought, usual interval, confidence, recent evidence) with It’s empty, Still have it, Bought, Add to list, Archive.
Activity — every observation grouped by day: exactly the evidence the engine uses.
Demo household — five products that show each rule within a minute.
GET /s/needs — authenticated JSON endpoint with the same results, as groundwork for integrations.
Self-hosted and private
All data stays in your own Twenty workspace. The app has no backend of its own, no telemetry and makes no third-party calls. See docs/PRIVACY.md.
Twenty integration
Four custom objects, one full-page front component, one logic function route. Tested against Twenty 2.42 (twenty-sdk 2.42.0). Installation: see the Quick start.
Tests
- 75 unit tests (28 for the inference engine), lint and typecheck in CI
- 3 integration tests running the main workflow against a disposable Twenty instance in CI
- manual browser run-through on desktop, 390 px phone width and dark mode
Known limitations
- The whole history (up to 2,000 observations / 1,000 list items) is loaded into the browser.
- Purchase quantities are stored but not yet used for estimates.
- One household per workspace; no per-person attribution in the UI.
- English UI only.
- Twenty renders the app inside a container marked
aria-disabled="true"; some screen readers may announce it as disabled. GET /s/needswithout a token returns HTTP 500 from the Twenty server instead of 401.
Next
ROADMAP.md · Contributions and real-world feedback welcome: CONTRIBUTING.md. If a suggestion felt wrong, please use the “Suggestion felt wrong” issue template.
Full changelog: CHANGELOG.md