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

DONE

Project 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

DONE

Core 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

DONE

Resilient 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 PROG

Editorial 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 DO

Things 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

LATER

Committed 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

DROPPED

Decisions 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.