Datler is a personal data platform: capture anything about yourself with almost no friction, build new signals out of what you capture, and analyse it (correlations, regressions, trends) to learn about yourself over time. It is a dashboard for your own life, local-first, on the desktop and the phone (Architecture Overview).

Configurable primitives

Datler does not build diet, exercise and mood as features. It builds a small set of generic primitives, and diet and exercise are configurations of them. There are two axes.

Logging, over time:

  • Trackable: a definition of something observed over time (Weight, Emotion, one exercise), with a typed value (Value Types). It is logged directly, computed from others (derived), or holds no value of its own (a tag).
  • Entry: one observation of a trackable at a moment. It stores values and stable option codes, never labels, so renaming an option never rewrites history.

Reference, reusable definitions:

  • Catalog: a collection (Food, Exercise) that owns the attributes its items fill and the basis they are stated per (Catalog Entities).
  • Catalog entity: an item of a catalog, a named definition with structured attributes (the food Egg with its calories and protein). It is not a time series. The bridge between the axes: a trackable’s entries can carry a catalog item and an amount of it in one of their fields (120 g of Oats), and the item’s attributes flow into what the entry contributes, which analysis then reads.

A template is a third shape, and not a catalog item: a named batch of pre-filled entry lines bound to a trackable, whose lines carry that trackable’s own fields. A recipe (Egg & Cheese) and a circuit (Arm Circuit) are templates of things made of parts: logged, each is an entry holding an entry for each part, so every part counts as itself. A workout plan (Push) is a template of an Event, a stretch of time holding what was done during it.

What is built on them

  • Tags: a trackable has any number of tags, a tag sits under any number of tags, and a child counts as every tag above it: a graph of membership edges, not a tree of folders.
  • Derived Trackables: values computed when read, from other trackables and tags, through formulas that can build on other derived trackables; nothing computed is stored.
  • Editor for Several Trackables: pick series, transform them, draw them (lines, a scatter with its line of best fit, a correlation matrix, distributions), and run honest statistics (Pearson’s r with its n and interval, regression, partial correlation, a one-way ANOVA across groups, and a correction for testing many pairs at once), saved as a visualization.
  • Frictionless Capture: logging is near-instant everywhere, from one entry panel and a command palette.
  • Theming System: six axes of theme, because a tool you live in every day has to look like yours.
  • Units & Dimensions: every measured value is stored in its dimension’s base unit; the unit shown or typed is presentation and capture only.
  • Profiles: one profile is one self-contained SQLite file, so a throwaway profile and a real one never mix.
  • Diet and Nutrition: the worked example of the primitives: a bundled set of foods, your own foods, recipes as templates, meals as Events, daily totals as derived trackables.

Specificity lives in data

  • Exercise is a catalog of movements, a record trackable that logs sets, tags, derived trackables for daily and per-tag totals, and templates for supersets (Exercise & Strength).
  • Diet is catalogs, templates, entries that carry a food and an amount, and visualizations.

No area of life is special-cased in code. What is specific to food or exercise is data a person (or a module) writes, read by generic code; the test for any file is whether someone who has never heard of exercise or food could read it. Code written for one area would need a twin for every new one, and a feature built once for all of them (a total by an item’s Category: calories by food type, spending by shop) could not be shared.

Stance

Desktop-first and responsive, so the same flows work at phone width; local-first, so every device keeps the whole of a profile and reads only its own copy, with sync between devices on top (Synced Databases).

The notes

Foundations: Glossary · Primitives: Trackable Entry Value Types Tags Derived Trackables Capture Model Presentation Layer · Catalog: Catalog Entities Templates Diet and Nutrition Exercise & Strength · Analysis: Editor for Several Trackables Visualization Persistence · Capture: Frictionless Capture · Design: Theming System Design Tokens Page Specs · Data: Data Model Database Schema