Roadmap
What's shipped, what's in flight, and what comes next. Updated as milestones land.
Status legend
- DONE
- IN PROG
- TO DO
- LATER
- DROPPED
v0.1–0.4 · Foundation, reading, highlights
DONEProject scaffold, PWA + offline storage, and the first complete read-and-highlight loop.
- DONE
Next.js + TypeScript + Tailwind scaffold
PWA capability (Serwist), service worker, IndexedDB schema (Dexie).
- DONE
Open an ePub from the device
File System Access API + classic-input fallback. File hashed + persisted to IndexedDB.
- DONE
Reflowable ePub rendering
foliate-js, paginated, with TOC navigation, font-size steps, and Light/Dark/Sepia themes.
- DONE
Recent books list + welcome-back resume
Per-session reading position; v2 will persist across browser restarts.
- DONE
Text highlights in five colours
Floating selection toolbar; last-used colour remembered.
- DONE
Highlight management
Click any highlight to recolour or delete; 6-second undo for accidental deletes.
v0.5 · Notes, replies, export
DONECore editorial workflow: notes per highlight, pin notes for non-text targets, full Notes panel.
- DONE
Inline note bodies on every highlight
Per-card textarea with autosave + explicit Save button.
- DONE
Pin notes
Drop a coloured marker on images, figures, blank regions — anywhere a text selection won't reach. CFI + selectorPath + relative coords captured for re-anchor on re-export.
- DONE
Notes panel: search + sort + filter
Free-text search across notes, replies, and the captured highlight; five sort modes (location, newest, oldest, colour, type).
- DONE
Author identity prompt
Per-annotation author stamp drives reply-thread ownership (own = editable, others = read-only).
v0.6 · Screenshots + export/import
DONEResilient annotations that survive ePub re-exports, plus a self-contained notes file for handoff.
- DONE
Anchor-block screenshot per annotation
JPEG capture of the paragraph or figure containing each annotation. Stored separately from the annotation row; cascaded on delete.
- DONE
Notes file export (.publ.json)
Single self-contained file with annotations + base64-embedded screenshots. Uses the native Save dialog where available.
- DONE
Notes file import + hash-mismatch confirm
Re-stamps bookId, dedupes by annotation id, preserves local copies, restores screenshots only for newly-inserted records.
- DONE
Export-confirm modal with size estimate
Note count + screenshot count + raw bytes shown before the file lands.
v0.7 · Multi-author replies + book-wide search
IN PROGEditorial round-trip across multiple reviewers, plus a custom search that reaches every page (browser Find can't).
- DONE
Reply threads on every annotation
Identity by display name; original-note edit gated to own-author; notes file (v3) carries replies through; import-merge appends unseen replies on existing annotations.
- DONE
Book-wide Search panel (Cmd / Ctrl + F)
Custom search powered by foliate's iterator — results stream in grouped by chapter; every match overlay-painted in the book; match-case + whole-words toggles.
- TO DO
Cross-page selection guard
Block the highlight colour palette when the user's text selection crosses a paginated page boundary — modern-screenshot's anchor-block capture re-flows multi-column content incorrectly, so cross-page highlights end up with truncated thumbnails. Silent suppression in FoliateView's selectionchange handler; pin notes + within-page highlights unaffected.
- TO DO
Cross-browser test pass
Chrome / Edge / Firefox / Safari sweep; pin fidelity + screenshot fidelity audit.
- TO DO
Test against ~10 real ePubs
Genre / size / publisher variety; track + fix blockers.
v0.8–0.9 · Reports, polish, launch prep
TO DOThings that round out the v1 release: reports, settings, error states, soft-launch readiness.
- DONE
Markdown report export
Handoff bundle (.zip) with report.md plus a screenshots/ folder of JPEGs. Companion to the JSON notes file — the notes file moves work between reviewers, the report ships work out to whoever edits the ePub source.
- DONE
Keyboard shortcuts + Help reference
Help panel grouped into Reading / Panels / Notes / View. Modifier glyph swaps to Ctrl on non-Mac. Enter saves notes (Shift+Enter = newline). Esc cancels — local-cancel only, no panel close. New p toggles pin mode.
- DONE
Notes / replies UX overhaul
Per-card Delete with confirm modal + 6-second undo. Single explicit row to expand a note (capture data + replies split into their own sub-panels). Footer row locked so live Saved / Unsaved hints don't reflow the card. Click anywhere on a card to focus it.
- TO DO
PDF report export (browser print-to-PDF)
- TO DO
Dedicated Settings screen
- TO DO
Scroll mode (optional alternative to paginated)
Top-bar toggle next to theme + font-size. Default stays paginated. Annotations, screenshots, pin overlays, and search work unchanged in either mode.
- IN PROG
Loading / error / empty states
First passes shipped; consistent semantic colour treatment still pending.
- TO DO
Capture-time highlight overlay in screenshots
Bake the selection mark into the JPEG so handoff PDFs show what was highlighted, not just the surrounding paragraph.
- TO DO
User guide (docs/user-guide.md)
- TO DO
Public Vercel deploy + v1.0 tag
- TO DO
Soft launch to small test group
v2 · Beyond the first release
LATERCommitted for the next major. Recorded so scope discussions don't relitigate them.
- LATER
Fixed-layout ePub support
Comparable to Thorium: rendering, zoom, pan/marquee annotations as a separate annotation model from text highlights.
- LATER
Persistent reading position across sessions
Today the position resets when the tab closes; v2 stores it per-book in IndexedDB.
- LATER
Single vs double-page-spread toggle
Paginator already supports it; v2 surfaces a user control.
- LATER
Pixel-perfect viewport screenshots
Likely a browser-extension companion (chrome.tabs.captureVisibleTab) — silent, perfect-fidelity, opt-in. Server-side render rejected (defeats local-first).
- LATER
BugHerd integration
Push annotations + baked-in screenshots straight into BugHerd tasks.
- LATER
Optional cloud sync + paid tier
Local-only stays default and free.
- LATER
Async team review
Multiple reviewers on a shared workspace without realtime cursors yet.
- LATER
Import annotations from Thorium and Calibre
Read-only import: Thorium .annotation files (W3C Web Annotation profile) map cleanly onto Publ's resilience model; Calibre highlight exports re-anchor by text snippet. Bookmarks become pins. Export back into either format is a v3 question.
v3+ · Long-horizon
LATER- LATER
Jira / Linear / Asana integrations
- LATER
Realtime collaboration (live cursors / presence)
- LATER
Browser extension companion
Open ePubs from Drive / Dropbox; perfect-fidelity captures.
Considered + dropped
DROPPEDDecisions made early to keep v1 focused. Documented so we don't keep relitigating.
- DROPPED
Tag system
Free-text search + sort + colour + type cover the editorial review flows. Revisit only if user research demands it.
- DROPPED
Native ePub editor
Editing belongs in Sigil / Vellum / Calibre. Publ reviews; it never edits.
- DROPPED
Mobile / iOS PWA priority
Editorial review is a desktop and tablet task.
- DROPPED
Popup-window note authoring
Popup blockers, PWA incompatibility, no shared React state. In-app floating panels do the same job better.
- DROPPED
Full code obfuscation / WebAssembly rewrite
PWA code is inherently inspectable; obfuscation is a losing battle with real UX cost. Protection comes from licence, server-side paid tier, and legal route for real infringement.
- DROPPED
Notes carousel + chunky-panel-free design
QA showed it didn't work at narrow viewports. Replaced with the unified resizable LeftPanel that hosts Contents, Review, Search, and Help.
Have a feature you'd like to see, or a use-case the roadmap is missing? Email luke@quaal.uk. Every report shapes the next release.