Projects

What Datooine builds outside client work: a released open-source tool, a product in progress, talks and articles.

Open source · MIT license

recto

Learn things by heart with flashcards, in the terminal, in the spirit of Anki.

A deck holds only question and answer pairs. When it’s imported, a model writes variants of every card: the question asked the other way round when that makes sense, and a few rephrasings. Each review asks one at random, so you learn the knowledge, not one wording.

You type the answer, the model grades it and says what was missing, and FSRS decides when the card comes back.

# Python 3.12+ and an OpenAI key$ uv tool install recto$ export OPENAI_API_KEY=...$ recto # The model is configurable$ export RECTO_MODEL=gpt-5.4-mini

How it works

The LLM does what it’s good at, the algorithm does the rest.

  • 1

    Import a deck

    A TOML file of questions and answers, or one of the five example decks.

  • 2

    Generate variants

    For every card, the model writes the reversed question and a few rephrasings.

  • 3

    Review

    Each review asks one variant picked at random. You type your answer.

  • 4

    Grade

    The model scores the answer and explains what was missing, following the deck’s instructions.

  • 5

    Schedule

    FSRS, a spaced-repetition algorithm, decides when the card comes back.

What this project shows

A small project, built like a client project.

The LLM where it belongs

Rephrasing and grading are language tasks: a model does them well. Scheduling reviews is a solved problem: FSRS does it better, deterministically and testably.

The model behind an interface

The variant generator and the answer judge are ports. PydanticAI is just one adapter: switching model or provider doesn’t touch the domain.

Tested without mocks

Use cases run on an in-memory repository, a fake generator, a fake judge and a fixed clock. The UI is tested headless through Textual’s Pilot, SQLite against a real file.

Shipped like a real product

CI builds the package on every push. Each version tag publishes to PyPI through trusted publishing and creates a GitHub release.

Under the hood

A deck is a plain TOML file. The optional instructions are passed to the model when it writes variants and grades answers.

[deck]name = "Wines"description = "French grape varieties, appellations and wine regions"instructions = "Be strict on appellations, lenient on grape spelling." [[cards]]id = "chablis-grape"question = "Which grape dominates the white wines of Chablis?"answer = "Chardonnay"
src/recto/  domain/      cards, variants, grades, FSRS memory  ports/       deck repository, variant generator, answer judge, clock  use_cases/   one class per action  adapters/    SQLite, PydanticAI, TOML deck files, system clock  tui/         Textual screens, calling use cases only  container.py the one place where adapters are plugged into ports
Stack Python uv Textual PydanticAI OpenAI SQLite FSRS Ruff ty GitHub Actions PyPI

In progress · Invite only

FactUp Live

Live fact-checking: claims are checked while they’re being spoken.

FactUp Live listens to a conversation and transcribes it live, in French or English. Checkable claims (figures, dates, statements) are picked out automatically and checked against the web: each one gets a verdict, an explanation and its sources.

The starting point is Brandolini’s law: refuting a false claim takes far more energy than making it. The idea is to bring fact-checking up to the speed of speech.

The product is still being built, and access is invite-only for now.

Verdict scale

  • True
  • Mostly true
  • Mostly false
  • False
  • Unverifiable

Brandolini’s law

“The amount of energy needed to refute bullshit is an order of magnitude bigger than to produce it.”
Alberto Brandolini, 2013
  1. 01

    Record

    A debate, an interview, a council meeting: the transcript appears live.

  2. 02

    Detect

    Only checkable claims are kept. Opinions stay out of scope.

  3. 03

    Verify

    Each claim is checked against the web: verdict, explanation and cited sources.

  4. 04

    Publish

    The checked transcript becomes a public page, shareable with one link.

The principles

The same standards as a client AI project, on a problem where every mistake shows immediately.

No verdict without evidence

Every verdict relies on retrieved, cited sources. Never “just trust me”.

Only what can be checked

Figures, dates, statements: only claims worth checking are kept, opinions are left aside.

At the speed of speech

Transcription and checking happen live, while the conversation goes on. A verdict that lands three hours later is no use to anyone.

An AI project to build with the same rigor?

Let’s talk about your context, your data and what needs to reach production.