heracl.es

/collaborati

A local-first, single-file kanban board.

A local-first kanban board. No account, no server — your data stays in the browser.

Mental model

Stages (columns) are shared across all swimlanes. Swimlanes are horizontal rows. Each cell (swimlane × stage) holds sorted cards. The Inbox is a virtual swimlane for unsorted cards.

Data

Saved locally in the browser (OPFS/IndexedDB). Export to Obsidian-compatible Markdown, CSV, or JSON. Sync to a local .md file (Chrome/Edge) via the Export / Import panel — works with Syncthing, Obsidian Sync, and Dropbox. Long-press the theme button for print preview.

File sync

The .md file format is Obsidian Kanban–compatible: YAML frontmatter for board config (stages, swimlanes, colors), stages as ## Headings, swimlanes as ### Sub-headings, cards as - [x] list items with #tags @mentions due:YYYY-MM-DD, block IDs (^cardId) for stable identity across syncs, and card notes as indented continuation lines.

Auto-save interval: 1, 10, or 30 minutes. Polls for external changes and merges automatically.

Cell editor

Long-press the + button in any cell to open a markdown editor for the entire cell. Existing cards appear as Obsidian-format list items. Edit, reorder, or paste markdown todos. Cards are matched by ^blockId on save; new lines create new cards. Long-press the Inbox button to edit inbox cards the same way.

Templates

Stage templates remap columns semantically: Kanban, Scrum, GTD, Sales, CRM, Content, Support.

Keyboard shortcuts

KeyAction
Navigate cards within column
Move focus to adjacent column
Shift Select cards
TabCycle: input → buttons → cards
Page Down Page UpNext / previous swimlane
EnterOpen card detail panel
eInline edit focused card title
nNew card in focused column
DeleteDelete focused card
SpaceToggle done on focused card
EscClose panel or cancel
/ or Ctrl FFocus search
iToggle inbox panel
? or F1Toggle help panel
Alt Reorder card within column
Alt Move card to adjacent column
Ctrl Shift NFocus quick capture input
Ctrl OOpen Export / Import
Ctrl SExport as Markdown
Ctrl Shift SCopy board to clipboard
Ctrl Shift OPaste board from clipboard
Ctrl ZUndo
Ctrl Shift ZRedo

Interactions

ActionEffect
Double-click cardToggle done / not done
Double-click stageRename stage
Double-click swimlaneRename swimlane
Double-click cellNew card in that cell
Long-press + buttonEdit cell as Markdown
Long-press InboxEdit inbox as Markdown
Drag cardMove across columns or swimlanes
Drag to brandDelete card
Drag handleReorder swimlanes or stages
Shift + click cardMulti-select cards
Swipe right on panelClose card detail panel

Filter syntax

PrefixMatches
@nameAssignee
#labelLabel
$task $meeting $followupCard type
$overdue $doneStatus
(no prefix)Title text

Architecture

Single-file HTML app (~275 KB). Three-level keyed DOM reconciler with card signature memoization and RAF-coalesced renders. OPFS primary persistence, IndexedDB fallback, inline Web Worker for off-main-thread writes. File sync via File System Access API with SHA-256 change detection.

Browser support

Chrome 117+, Safari 17.5+, Firefox 129+. File sync: Chrome/Edge only.

License

Dialectic Acheiropoieton of Heracles Papatheodorou and Claude, MIT License