Plot Tracker

Status: Active (runs locally)

Writing tool that breaks a narrative into themes and topics so subplots can be tracked, arranged, and closed across one or more documents.

View on GitHub

Why I Built It

I wanted a writing tool that could keep track of subplots so there were no Chekhov's guns lying around, while also helping me remember and document subplots I had in mind while writing the story. It allows you to close subplots or extend them across a series (i.e., separate documents).

Technology

How to Use It

  1. Add an OpenRouter API key to your .env file.
  2. Upload your narrative as a .txt, .rtf, .docx, or .pdf file.
    1. It's unclear how well the encoding capture works with .pdf files.
  3. Click the Reanalyze button to load the plot viewer.
  4. Pick a theme for your main plot. One of the themes will have most of the topics and will be the de facto main plot, but you decide which one it is.
  5. Drag and drop topics between themes or into the arbitrary three-act structure.
  6. Use the checkbox at the right margin of a subplot to close it as complete. The + and − buttons were implemented before drag-and-drop and don't work as expected.
  7. Hover over a topic to display its preview; click it to navigate to the topic view.
  8. The tool has two predefined encodings. Multiline italic text at the beginning of a chapter represents a dream sequence, while a single line of italic text represents the protagonist's internal monologue. See Known Limitations.
  9. Use the Sidekick to create new encodings or perform other tasks that you would normally find in a menu bar.

Screenshots

Document loader annotated: choose files, refresh after ingest, and link stories in a series into one main plot.
Documents: upload files, refresh after ingest, and link a series into a single main plot.
Plot viewer and theme view annotated: one main plot, themes as subplots made of topics.
Theme view: a story has one main plot; ingesting a narrative breaks it into themes made up of topics.
Topic view annotated: topic position in the story, previous and next topic navigation, and the scissors button that splits a topic.
Topic view: see where a topic sits in the story, step through topics, and split a topic with the scissors.
Encoding rules and Sidekick panel annotated: global italic encoding rules and the Sidekick that replaces a menu bar.
Encoding rules and Sidekick: toggle global encodings; the Sidekick runs commands or asks the LLM, but can't alter the app.

Technical Details

Change the models by updating these properties:

ANALYSIS_MODEL=openrouter/anthropic/claude-sonnet-5
SIDEKICK_MODEL=openrouter/google/gemini-3.7-flash

Topics are found with an ID-based search over a vector store, which makes indexing faster.

Known Limitations