AI reflection partner

An outside perspective on years of your journal.

Find recurring patterns across your Journal Archive, trace them to dated entries, and challenge the reading in conversation.

Fictional Journal Archive No account and no model call in the demo.
Life Report view showing a recurring pattern of delay with dated Entry References from a fictional journal.
Life Report on fictional data. Open this view

A single entry hides the pattern.

One difficult week reads like a mood. The same hesitation across three years reads like a decision that keeps moving away.

The safe option, again

I keep asking for one more quarter of savings before I commit.

One more spreadsheet

The planning creates a sense of motion without the risk of a decision.

A smaller first step

It is the first time in years I chose motion over modeling.

Fictional proof

Try the product before you host it.

Switch between five real product views using fictional data. The static demo performs no model call and stores nothing in your browser.

Sample data

No account and no model call in the demo.

  • Timeline view listing dated entries from the sample journal.
  • Entry Reflection view of one sample entry with its generated reading.
  • Life Report view with sections and dated evidence.
  • Conversation view where the reflection is challenged rather than accepted.
  • Prompt Workshop view showing the same sample entry read by the Companion, Coach, Challenger, Analyst, and Custom Perspectives.

The interactive demo needs JavaScript. The screenshots above show the five views, and you can view the source on GitHub.

Open the full demo

Trace the reading back to its source.

A Life Report names the dated entries behind an interpretation, so you can compare the reading with the original writing instead of treating it as a verdict.

An Entry Reference is a dated journal entry named as support. It is not an independently verified citation.

Explore the fictional Life Report

Recurring pattern: the reason changes while the delay stays constant.

2021-04-18
The safe option, again
2022-06-27
One more spreadsheet
2023-10-15
Certainty is not coming

Choose the stance you need.

One globally active Perspective shapes future Entry Reflections, Life Reports, and Conversations. Change it any time in Prompt Workshop.

Prompt Workshop showing the same fictional entry read through Companion, Coach, Challenger, Analyst, and Custom Perspectives.
The fictional demo places five readings together for illustration. See each Perspective
  1. Companion

    Warm first, then clear when the pattern is hard to miss.

  2. Coach

    Turns supported patterns into decisions and small next steps.

  3. Challenger

    Names contradiction and avoidance without attacking identity or worth.

  4. Analyst New-install default

    Separates observation from interpretation with minimal editorializing.

  5. Custom

    Keeps instructions you write yourself when they do not exactly match a preset.

Conversation view where the owner challenges a fictional Life Report and Unflincher answers from the journal context.

A conversation, not a verdict.

The reading is a starting point you can push back on. The reply engages with your objection using journal context instead of automatically agreeing.

YouThe report says I avoid decisions. That feels harsh.

UnflincherSaving was responsible. The entries also show the target moved every time you got close.

Continue the fictional Conversation

Bring the archive you already have.

Start with an existing Douban archive or write directly in Unflincher. Both become one Journal Archive.

Import

Douban diary Excel export

The supported archive import is an untouched Tofu Chrome extension export handled by the CLI importer. No spreadsheet reformatting is required.

Read the import guide

Write

Start inside the app

Skip import when you have no Douban archive. Entries added from the Write page join the same Journal Archive.

See the self-hosted app

Privacy and setup

Know what stays local and what each request sends.

Unflincher is single-user and self-hosted. Entries, prompts, generated reflections, reports, and Conversations stay in your local SQLite database.

Stored locally

Your Journal Archive

SQLite stores entries, prompt versions, generated output, and Conversation history on the host you control.

External processing

GitHub Copilot

GitHub Copilot is the only model integration. The selected model receives the content listed below for the feature you use.

What each feature sends

Entry Reflection
Entry Reflection sends the full Journal Archive, the active prompt, and the selected-entry focus.
Life Report
Life Report sends the full Journal Archive and the active prompt.
General Conversation
General Conversation sends the full Journal Archive, the active prompt, the complete current-session history, and the current message.
Entry Conversation
Entry Conversation sends the selected entry, its latest reflection when present, the complete thread history, the active prompt, and the current message.
Prompt Workshop preview
Prompt Workshop preview sends the full Journal Archive, the selected-entry focus, the draft instructions, and the selected model without persisting the output.

When its separate model passes preflight, the first message of a new general Conversation is also sent once to generate a short session title. Otherwise the date title remains.

The full archive has a real limit.

The complete request must fit the selected model's context window. Unflincher fails clearly instead of silently dropping older entries or Conversation history.

Reflection, not treatment.

Unflincher is not therapy, does not diagnose or treat, and does not impersonate a licensed professional. It does not replace professional care or relationships with other people.

What self-hosting requires

  • GitHub Copilot access
  • A host you control
  • Basic terminal setup

The public demo contains only fictional data and performs no model calls, tracking, cookies, storage, or writable operations.

The public site is hosted on GitHub Pages and is subject to GitHub's platform logging and privacy practices.

Source available for noncommercial use under PolyForm Noncommercial 1.0.0.

Questions before you self-host.

The short version of what the product does, what it sends, and where its boundaries are.

What is Unflincher?

Unflincher is an evidence-grounded AI reflection partner for people with years of journal entries. It reads across your Journal Archive, finds recurring patterns, points back to dated entries, and lets you challenge the interpretation in Conversation.

What is a Perspective?

A Perspective is the globally active stance used for future Entry Reflections, Life Reports, and Conversations. Choose Companion, Coach, Challenger, Analyst, or Custom in Prompt Workshop. Changing it does not rewrite existing generated content.

What is a Life Report?

A Life Report is a cross-year synthesis of recurring patterns, changes, contradictions, and goals. It names dated Entry References so you can compare the interpretation with the original writing.

What archive can I import?

The supported archive import is an untouched Douban diary Excel export from the Tofu Chrome extension, handled by the CLI importer. You can also write entries directly in Unflincher. There is no browser upload or generic spreadsheet importer.

What leaves my host during generation?

Entries, prompts, generated output, and Conversation history stay in local SQLite. GitHub Copilot is the only model integration. Depending on the feature, it receives the full Journal Archive or selected entry context, active or draft instructions, applicable Conversation history, and the current message. A separate model may receive the first general Conversation message once to generate a short title. The complete request must fit the selected model's context window, and Unflincher fails clearly instead of silently dropping older content.

How is Unflincher licensed?

Unflincher is source available for noncommercial use under PolyForm Noncommercial 1.0.0. Commercial use requires a separate license.

Is Unflincher a substitute for therapy?

Unflincher is not therapy, does not diagnose or treat, and does not impersonate a licensed professional. It does not replace professional care or relationships with other people.

See what your archive has been saying.

Explore the fictional product first, then decide whether to run Unflincher on a host you control.