Should I vibe code
Outliner-based notes with block references and bidirectional links
Block references are the fun part. Block references at 50,000 blocks are the part that ends projects.
?
Their verdict, the Pro price and the build-time estimate come from their entry, MIT-licensed. Checked 2026-08-03.
?
Our verdict, the regret score and everything below it. Editorial and unsponsored — nobody can pay to be moved.
The honest answer
why the verdict is what it is
An outliner with bidirectional links is a great weekend and a rough year. The data model gets expensive fast, and your notes are the thing paying for the experiment.
What actually breaks
not "if". the specific failures.
- Deleting a block that is transcluded elsewhere, which has no obviously correct behaviour and several wrong ones
- Block identity, because every block needs a stable id that survives editing, moving, indenting and merging with its neighbour
- Backlink computation at size, which is cheap for a thousand blocks and a query problem at fifty thousand
- Outliner editing itself — indent, outdent, merge on backspace, split on enter — each a fiddly interaction people notice immediately
- Export, since a graph of transclusions does not flatten into Markdown without losing the thing that made it a graph
You clean up an old daily note and delete a block that reads like a stray thought. It was referenced in nine other places, and now those pages show an empty embed, or the raw id, or nothing at all — you never decided which, so you get all three depending on the code path. The text is gone. The nine pages that were built around it are still there, quoting a hole. There is no version history, because history was going to come after search.
Is that you?
the verdict is a default, not a law
- It is a personal outliner with links between pages and no block-level references
- Blocks are never transcluded, so deletion is local and unambiguous
- You accept that it is a toy for thinking rather than a store of record
- Blocks can be embedded in other pages and there is no defined delete behaviour
- Block ids are positional rather than stable
- There is no version history on a tool holding years of notes
- You have not tested it at the size your notes will actually reach
If you build it anyway
the checklist, then the prompt that enforces it
- Give every block a stable uuid at creation that survives every edit, move and indent. Positional identity breaks the moment anything is reorganised.
- Decide deletion semantics for referenced blocks before building references: refuse, orphan with a tombstone, or inline the content at each reference. Pick one and write it down.
- Keep an append-only history of block edits. This is a category where the data accumulates for years and there is no second copy.
- Index backlinks incrementally rather than recomputing. Test with fifty thousand blocks, not five hundred.
- Design the export before the graph features, because transclusion is the part that does not survive a flatten — decide whether exports inline or link.
- Build the outliner interactions early. Indent, merge and split are what people judge in the first ten minutes.
Before you build a block-based outliner with references, apply these and push back if I ask you to break them. 1. Assign every block a stable uuid at creation. It must survive editing, indenting, moving and merging. Tell me that positional or path-based ids break as soon as anything is reorganised, and that every reference in the system depends on this. 2. Before implementing block references, make me choose what happens when a referenced block is deleted: refuse the delete, leave a tombstone, or inline the content into each referencing location. Implement exactly one and document it. 3. Keep an append-only edit history from the first commit. This tool will hold years of notes and there is usually no other copy. 4. Maintain backlinks with an incremental index updated on write, not a scan on read. Generate fifty thousand blocks and show me the query timings before building UI on top. 5. Design and implement export before the graph features. Decide whether a transclusion exports as inlined text or as a link, and tell me what is lost either way. 6. Implement the core outliner interactions early — enter splits, backspace at start merges, tab indents with children, shift-tab outdents. These are what make it feel real or broken. 7. Store content as structured blocks rather than a Markdown blob, and write the Markdown converter separately. 8. Out of scope unless I ask: multiplayer, queries, spaced repetition, mobile, plugins. 9. Tell me how many blocks I will have in two years and test at that size now.
That one keeps you out of trouble. For the prompt that actually builds it, canivibecodeit.com has one.
their build prompt ↗Or don’t build it
the boring option, and the way back out
If block references and backlinks are the appeal, that is the expensive part and $15 a month buys it working. A personal outliner with page-level links is a good weekend and skips almost every problem in this entry — the graph features are what turn it into a long project.
$15/mo is cheaper than your weekend.
Write the exporter first and run it weekly to a folder of Markdown files you can read without the app. Decide explicitly whether transclusions inline or link on export — a graph that only exists inside your tool is a graph that dies with it, and this is a category where people keep a decade of notes.
Local-first open-source workspace with documents and databases.
Open-source local knowledge graph and outliner.
Questions
What should happen when you delete a referenced block?
There is no universally right answer, which is precisely why it must be decided rather than discovered. Refusing the delete is safest but frustrating; tombstoning preserves context at the cost of clutter; inlining the content everywhere preserves meaning but duplicates it. Any of the three is fine — having three different behaviours in different code paths is not.
Why does block identity matter more than page identity?
Because blocks move constantly — you indent them, drag them between pages, merge them with a backspace. A page has a name and mostly keeps it. If block ids are derived from position or content, every reorganisation silently repoints or breaks references, and the damage is spread across pages you were not editing.
Every week, someone ships something they shouldn’t have.
New verdicts, the worst thing that landed in the trap, and the occasional incident report. No other email, ever.
Typed objects and backlinks is a schema decision, and you have opinions about schemas.
Sync is the hardest problem you will ever underestimate, and the loser is your notes.
Beautiful documents are a typography problem, and typography does not respond to prompting.
last reviewed 2026-08-03 · verdict is editorial and unsponsored · shared entry data from canivibecodeit under MIT · not legal advice