Why
I've kept a journal for about a year. Writing helps me. Going back through it to find what I keep doing is the part I never get to, because that takes even longer than the writing.
I don't think people are broken. We build patterns, some good and some bad, and the hard part is seeing them clearly enough to break the bad ones.
Input
One page a day, like a daily note. Old entries can be pasted in on their own dates. On day one there's nothing to read yet, so onboarding asks five short questions, and every one can be skipped.
Constraints
It's the most private thing a person writes.
- Each person sees only their own pages. The app checks ownership on every request, and the database refuses everyone else.
- Journal text is encrypted with a key for each person, and it's never logged or shown in an error.
- One switch turns the AI off, and it's checked before every model call.
- Adults only. If the age check says under 18, the account is deleted and nothing is kept.
- No real journal text in testing. Every test runs on made-up people.
How it works
Code counts, the model names, code verifies, then save.
| Step | What it does |
|---|---|
read | Turns each page into events, one per scene, with who was there and how it felt. |
count | Plain code counts what keeps coming back, and in which weeks. |
name | A model turns each count into one sentence. It answers in labels and never writes a date, a quote or a number. Code puts those back. |
verify | Code checks every quote is really on its page, repairs the evidence it can, and drops what it can't. |
LangGraph runs the steps as a workflow, and each model call goes through PydanticAI.
Output
Pattern cards with a count you can check, like "7 of the last 12 weeks". Every card links to the days behind it.
To test it there are 17 made-up people, each with a run of journal pages and habits hidden in them. The persona check runs their pages through the pipeline and checks that:
- every hidden habit comes out,
- one-off decoys never become a pattern,
- venting like "I'm going to throw my amp into the Clyde" never turns into real intent or a feeling,
- Ben, the control, gets no patterns at all. His days are boring on purpose, so anything found in him is a false alarm.
A second model grades each saved card against the pages it came from.
