Metadata-Version: 2.4
Name: byteb4rb1e.homeostat
Version: 0.1.4
Summary: Tiny ETL pipeline for my health data
Author-email: Tiara Rodney <tiara@byteb4rb1e.me>
Project-URL: Bitbucket, https://bitbucket.org/byteb4rb1e/homeostat
Classifier: Development Status :: 1 - Planning
Classifier: Environment :: Web Environment
Classifier: Framework :: Sphinx
Classifier: Framework :: Sphinx :: Theme
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Documentation
Classifier: Topic :: Software Development :: Documentation
Requires-Python: >=3.8
Description-Content-Type: text/markdown
Requires-Dist: byteb4rb1e.utils
Requires-Dist: beautifulsoup4

# byteb4rb1e.homeostat

Personal health data pipeline for [tiararodney.com](https://tiararodney.com).
Fetches vitals, sleep, nutrition, activity, and body measurements from external
providers, stores them in a structured warehouse, and projects them into JSON
files for the site's status dashboard.

## Sources

- **Fitbit** — heart rate, steps, calories, active minutes, sleep, activity,
  weight, body fat
- **fddb.info** — food diary (calories, macros, per-meal breakdown)
- **Manual input** — body measurements not tracked by wearables (muscle mass,
  circumferences)

## Architecture

The pipeline follows a four-phase ETL design:

```
source adapters → raw warehouse → canonical warehouse → projections
```

JSONL partitions are the durable storage. SQLite is the query layer,
rebuilt from flat files at any time. See [ARCHITECTURE.md](ARCHITECTURE.md) for
the full design.

## Quick start

See [DEVELOPMENT.md](DEVELOPMENT.md) for setup instructions and tooling.

See [CONTRIBUTING.md](CONTRIBUTING.md) for the development workflow, commit
conventions, and issue lifecycle.

## Output

### Canonical warehouse

```
data/
├──vitals/
│  └── <iso 8601: YYYY-MM-DD>.jsonl # infraday data
├──sleep/
│  └── <iso 8601: YYYY-MM-DD>.jsonl # infraday data
├──nutrition/
│  └── <iso 8601: YYYY-MM-DD>.jsonl # infraday data
├──measurements/
│  └── <iso 8601: YYYY-MM-DD>.jsonl # infraday data
└──activity/
   └── <iso 8601: YYYY-MM-DD>.jsonl # infraday data
```

### Projections

```
build/projection/<iso 8601: YYYY-MM-DD-HHMMSS>/
├── status.json              # live dashboard snapshot
└── history/
    ├── vitals.json           # rolling heart rate, steps, calories
    ├── sleep.json            # rolling sleep duration, score, stages
    ├── nutrition.json        # rolling calories, macros, meals
    ├── measurements.json     # rolling weight, body fat, measurements
    └── activity.json         # rolling exercises, distance, floors
```

symlink the latest projection directory to current.
