An outliner is a tree with a text field per node: a competent agent builds the editor, zoom, tags, search, import and export in one sitting, and you can run it on your own machine with SQLite. The difficulty is in the feel: keyboard handling, undo, drag and drop and speed in a very large list. The real gap is the phone, where a PWA behind a tunnel works but isn't a native app with offline sync. Clones such as Vimflowy and flowy exist, so the pattern is well known.
Before you buildBasic is free and keeps every feature up to 100 new nodes a month. If you add fewer than that, you may not need Pro or this build.
Build me a personal outliner to replace WorkFlowy. Requirements: - Node.js 22 + TypeScript: a Fastify server and a React UI built with Vite. `npm start` serves http://localhost:4850. The whole file is one nested list, and zooming into any bullet shows it as the root with a breadcrumb. - Storage: better-sqlite3 in ./data/outline.db: nodes (id, parent, position as a fractional index, text, note, completed, collapsed, created, updated). Load only the visible level and fetch children on expand, so a 100,000-node file opens in under a second. - Keyboard editing: Enter adds a sibling, Tab and Shift-Tab indent and outdent, Alt-Up and Alt-Down move a bullet, Ctrl/Cmd-Enter completes it, Ctrl/Cmd-Z undoes the last 50 changes. Pasting an indented list or Markdown bullets creates nodes, and dragging reorders them (`@dnd-kit`). - Text: bold, italic and links in a small rich-text editor (`tiptap`). #tags and @people are parsed from the text and listed in a sidebar; clicking one filters the tree to matching bullets and their parents. - Search: SQLite FTS5 with operators for -word, has:note and is:done. Each result keeps its path, so a hit opens in context. - Export and import: OPML, Markdown and plain text for any subtree; import OPML and WorkFlowy's text and OPML exports. A nightly copy of the .db goes to ./backups/ and the last 14 are kept. - Single user, password in .env. No accounts, no telemetry, local-first. Outbound calls: none. - Out of scope: mirrors, sharing, real-time collaboration, native mobile apps. It must still work in a phone browser as an installable PWA. - README: reaching it through a tunnel from a phone, and how to restore from a backup.
Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own Workflowy.
Extend the outliner in this folder so it works offline. Requirements: - Cache the app shell with a service worker and keep the nodes you have opened in IndexedDB (`dexie`), with a queue of edits made while offline. - On reconnect, replay the queue against the server; each node carries an `updated` timestamp and the server keeps the newest write per field, never dropping a node. - When a node was changed in two places, keep both texts: store the older one as a child bullet named "conflict" so nothing is lost. - Show an offline badge and the count of queued edits. - Update the README with the merge rules.
Add mirrors to the outliner in this folder. Requirements: - A mirror is a node that points at an original node: it shows the original's text, note and children, and editing any of them edits the original. - Create one with Ctrl/Cmd-Shift-M on a cut bullet, show a small badge with the number of mirrors, and let the original be found from a mirror. - Deleting the original promotes the oldest mirror to be the original; deleting a mirror never deletes the original. - Block cycles: a node can't be mirrored inside its own subtree. - Tests for deleting, moving and completing a mirrored branch. Update the README.
Add dates to the outliner in this folder. Requirements:
- Recognise dates typed in a bullet ("tomorrow", "next fri", 2026-12-01, "!due 3/14") with
`chrono-node`, show them as chips, and store the parsed date on the node.
- An Agenda page grouping bullets into Overdue, Today, Next 7 days and Later; completing a
bullet there completes it in the tree.
- Recurring dates ("every monday") create the next bullet when you complete the current one.
- Use the local time zone, and test the days around the clock changes.
- Update the README.Add read-only sharing to the outliner in this folder. Requirements: - A "Share" action on any bullet that creates a random link /s/<token> for that subtree; list and revoke links from a settings page. - The shared page is server-rendered HTML with the bullets, notes and completed state, no editing, and `noindex`; it never reveals siblings or parents outside the branch. - Optional expiry date per link, and a view counter that stores counts only, no IP addresses. - Update the README with the privacy note.
People pay for how it feels and where it runs: keyboard-driven bullets that stay quick in a very large list, on web, desktop and phone, with sharing when needed. After years of notes in one list, the cost of leaving is the effort of moving, not a technical problem.
Estimate · Runs on your own computer; a $5 VPS or a tunnel only matters for phone access. The build is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Basic | $0 | $0 | All features, 100 nodes per month, 100 MB of file uploads. |
| Pro | $8.99 | $6.99 | Unlimited nodes and uploads, all features. |
Basic is free forever with all features, capped at 100 nodes a month and 100 MB of uploads.
Yes. An AI coding agent such as Claude Code, Codex or Cursor can build a usable personal version in one session with the prompt on this page, running on your own machine.
About $8.99 a month on the Pro plan, $107.88 a year (checked 2026-10-19).
Native iOS, Android and desktop apps with offline sync; Mirrors: one bullet shown in several places and edited from any of them; Sharing a branch with other people; Workflowy AI and the developer API; Years of tuning for speed and editing behaviour in very large lists. If any of those matter to you, keep paying.
Yes: Logseq (open source), SiYuan (open source), Trilium Notes (open source).