product-roadmap.md
Rama main · réplica de lectura del repositorio original.
# Nostos — Product Roadmap
**Status:** Living document
**Last Updated:** November 2026
**Last reviewed:** 2026-11-10
**Version:** 2.0
---
## How to Read This Document
Each open item is tagged with:
- **Impact** — High / Medium / Low
- **Effort** — Low (< 1 sprint) / Medium (1 sprint) / High (> 1 sprint)
- **Area** — Reading / Library / Brain / Studio / Mobile / Onboarding / Export / Portability / Ask Nostos
- **Priority** — where an open issue carries a `priority:` label and no impact/effort score exists yet
Items are grouped by area. New epics carry their issue priorities instead of a speculative impact/effort score.
---
## Shipped
- **Work and editions** — one book page across editions, an edition switcher, format chips and the matcher (#1301, #1304).
- **Multi-collection membership** — a book can belong to any number of collections; `BookCollections` is the only record (#105).
- **Library multi-select** — select several books and delete them, add them to or remove them from a collection, or mark them finished (#1375).
- **Drag books into collections** — from the grid and the list, through the same write path as the picker (#1375).
- **Library state** — the grid/list choice and filters persist across reloads (#48); collection counts sit in the sidebar (#12); reading-state filters cover Not started, Reading, Finished and Favourites (#46).
- **Reader typography** — EPUB typeface, size, line height and margins (#203); PDF typography and zoom controls (#208).
- **PDF reading** — in-book search shared with EPUB (#762), table of contents and continuous reading (#226).
- **Highlights** — highlight mode with four colour pens, stored on the highlight and editable later (#15, #863).
- **Audio** — sleep timer including end of chapter, chapter list and speed presets (#47, #209, #227).
- **App-wide themes** — Light, Sepia, Mist, Writer's Study and Dark, with Follow system (#1074).
- **Highlight import** — Kobo, KOReader, Kindle, Apple Books and Readwise CSV, with content detection, preview, matching, skip reasons, dedupe and per-batch undo (#656, #1225, #1453).
- **Topics** — the concept list became Topics (#686), with a Sigma map (#97), the rebuilt Brain (#1077), descriptions in the reader's own words (#1082), inline rename, merge and delete (#1216, #1237), and Most used / A–Z order (#1077).
- **Writing Studio** — zen/focus mode (#49), typewriter mode (#201), the `@` source palette and Studio themes (#1059), citation styles with footnotes and a bibliography (#1109), and the word, character and reading-time stat (#1059).
- **PWA** — installable with a web manifest, an Angular service worker and maskable icons; the launch icon follow-up is #1160.
- **Reader gestures** — edge taps and deliberate horizontal swipes turn pages (#764).
- **Notes and highlights export** — a Markdown zip, one file per book and one per topic, with `[[Topic]]` links kept (#1221).
- **Several books at once** — add several EPUB or PDF files from Add a book (#1439).
- **Library transfer** — whole-library export and import from Settings and onboarding (#736).
---
## 1. Reading Experience
### 1.1 Bookmarking
**Impact:** Medium | **Effort:** Medium | **Area:** Reading
No bookmark model or UI exists. Imported Kindle bookmarks are skipped because they mark a place and hold no text, and a Kobo bookmark matters only when it carries a highlight.
- Add a bookmark icon in the reader toolbar; saving the current position is silent
- Bookmarks panel in the sidebar, with labels; tap to jump, long-press to rename or delete
- Visual bookmark marks in the table of contents
**Data model:** `Bookmark { id, bookId, location (CFI/pageNumber/timestamp), label?, createdAt }`
**Files to touch:** `reader-shell.component.*`, `books.service.ts`, the book endpoints and repository in `Nostos.Product`
---
### 1.2 Highlights View
**Impact:** Low | **Effort:** Low | **Area:** Reading
A highlight no longer needs a note: it can be saved on the page with one of four colour pens (#863), and notes and highlights export as Markdown (#1221). There is still no per-book view that lists only the highlights.
- "Highlights" view per book, separate from notes
- Optional colour coding (the pen is already stored per highlight)
No open issue.
---
## 2. Library Management
### 2.1 Filter by Reading Progress
**Impact:** Medium | **Effort:** Low | **Area:** Library
Reading-state filters exist — Not started, Reading, Finished and Favourites — and compose with search and collections (#46). A filter on how far through a book you are does not.
- Add "Near finished" (>80%)
- Add a range filter: "Books between X% and Y%"
No open issue.
---
### 2.2 Moving into Nostos, and trusting the import (epic #1532)
**Area:** Library / Export
The highlight import is solid: Kobo, KOReader, Kindle, Apple Books and a Readwise CSV, with content detection, a preview before writing, matching, skip reasons, dedupe and undo per batch (#656, #1225, #1453). Several EPUB or PDF files can be added at once (#1439), and a whole library moves from Settings → Import (#736).
Still missing, from epic #1532:
- **#1521** Reading history from Goodreads and StoryGraph — priority: high
- **#1527** A Calibre library — priority: low
- **#1526** One drop zone for every import file — priority: medium
- **#1522** A stored report per import: found, imported, already here, skipped by reason — priority: medium
- **#1523** Log the shape (never the content) of files that fail to parse — priority: medium
- **#1524** Real, versioned Kobo and Apple Books fixtures — priority: medium
- **#1525** Readwise export API, with a weekly format canary — priority: medium
OPDS feed subscription is §7.1, not an import.
---
### 2.3 Author Filter and Series Navigation
**Impact:** Medium | **Effort:** Low | **Area:** Library
Search by author works; there is no author page, and a series is plain text on the book page, not a way to move.
- Author page: every book by that author, grouped by series
- Series page: every book in the series with its reading state
- Author and series names are links
**Files to touch:** `library.component.*`, `book-detail.component.*`, an author listing endpoint
No open issue.
---
## 3. Brain
### 3.1 The Brain note list uses the page (epic #1533)
**Area:** Brain
On a wide screen the note list is a left-aligned column of about 52rem: roughly 40% of the page is empty, and the sidebar cannot close because closing it would only add empty space. The list also gives no sense of time in date order. Epic #1533 covers:
- **Now:** **#1528** centre the list and let the sidebar close, as in the Library (quick win); **#1529** date group headers in Newest first and Oldest first (quick win)
- **Next, after a mockup of both at 1440 and 1920:** **#1531** list and detail panes (preferred); **#1530** a context rail for the current place
- **Not planned:** a card or masonry grid — long notes read badly in narrow cards
---
## 4. Writing Studio
### 4.1 Writing Goals and Stats
**Impact:** Low | **Effort:** Medium | **Area:** Studio
The open document shows words, characters and reading time (#1059), but nothing is kept over time.
- Writing streak
- Daily and weekly word-count goals
- Session writing time per document
- Shown in the Studio sidebar or a separate dashboard
No open issue.
---
## 5. Mobile & PWA
### 5.1 Touch Gesture Navigation
**Impact:** Medium | **Effort:** Medium | **Area:** Mobile
Edge taps and deliberate horizontal swipes turn pages in paged EPUB and PDF readings (#764). Missing:
- Pinch-to-zoom inside the PDF page (the browser zooms the whole page; the reader has zoom presets)
- Double-tap to bookmark in the EPUB reader (bookmarking is §1.1)
---
### 5.2 BreakpointObserver Refactor
**Impact:** Low | **Effort:** Low | **Area:** Mobile
The Studio still decides its compact layout from `window.innerWidth`; the settings popover already uses CDK `BreakpointObserver`.
- Replace `isStudioCompactViewport()` with `BreakpointObserver`
- React to orientation and window changes without re-reading `window.innerWidth`
- Use one definition of "compact" across the Studio
No open issue.
---
## 6. Onboarding
### 6.1 Guided First-Run Experience
**Impact:** High | **Effort:** High | **Area:** Onboarding
Nostos Cloud has first-run signup, provisioning and recovery (#409), and the first run offers a library import (#736). There is no in-app guided tour.
- Welcome on first visit
- Guided steps: add a book, create a note, link a topic, connect an OPDS app
- Skip and "Don't show again"
- Progress indicator
No open issue.
---
### 6.2 Sample Library / Demo Content
**Impact:** Medium | **Effort:** Medium | **Area:** Onboarding
The empty library is bare. There is no sample content.
- "Load sample library" in the empty state
- A bundled sample book with notes and topics
- Shows the full surface without setup
No open issue.
---
## 7. Export & Interoperability
### 7.1 OPDS Subscription Updates
**Impact:** Medium | **Effort:** Medium | **Area:** Export
OPDS is a read-only 1.2 acquisition catalog (#186): other apps can browse and download, but Nostos cannot subscribe to a feed, and progress cannot come back.
- OPDS 2.0 or updated 1.2 with pagination
- Incremental feed updates
- Reading progress from third-party apps
No open issue.
---
## 8. Ask Nostos
### 8.1 Assess and polish Ask Nostos (spike #1464)
**Priority:** High | **Area:** Ask Nostos
Ask Nostos was built piece by piece and does not yet feel like one product: the UI is dated, results vary, and there is no clear statement of what it can do. #1464 is an assessment and a plan — it produces a short plan document and sub-issues, not the fixes themselves. It is the open product-direction item for the assistant.
---
## Prioritization Matrix
| # | Item | Impact | Effort | Quick Win? |
|---|------|--------|--------|-----------|
| 1 | Bookmarking | Medium | Medium | |
| 2 | Highlights View | Low | Low | Yes |
| 3 | Moving into Nostos (#1532) | — | — | Priority: high (#1521) |
| 4 | Author Filter / Series Navigation | Medium | Low | Yes |
| 5 | Brain note list (#1533) | — | — | Quick wins: #1528, #1529 |
| 6 | Reading-Progress Filter (percentage range) | Medium | Low | Yes |
| 7 | Writing Goals and Stats | Low | Medium | |
| 8 | Touch Gestures | Medium | Medium | |
| 9 | BreakpointObserver | Low | Low | Yes |
| 10 | Guided Onboarding | High | High | |
| 11 | Sample Library | Medium | Medium | |
| 12 | OPDS Subscription | Medium | Medium | |
| 13 | Ask Nostos polish (#1464) | — | — | Priority: high |
The epics and #1464 have no impact/effort score; use their issue priorities.
---
## Out of Scope
- Collaboration / multi-user
- Web clipper / browser extension
- Social features or sharing
- Mobile native apps (#305, closed as not planned)
- Offline downloads (#1104, closed as not planned and parked on the private board)
- A card or masonry grid for the Brain (#1533 records it as not planned)
---
## Appendix: Key Files Reference
| Area | Key Files |
|------|-----------|
| Reading | `reader-shell.component.*`, `epub-reader.component.*`, `pdf-reader.component.*`, `audio-reader.component.*` |
| Library | `library.component.*`, `sidebar-collections.component.*`, `add-book-modal.component.*`, `book-detail.component.*` |
| Brain | `brain-shell.component.*`, `brain-list.page.*`, `topic-map.component.*`, `note-item.component.*` |
| Studio | `writing-studio.component.*`, `flat-tree.component.*`, `markdown-editor.component.*` |
| Import | `Nostos.Product/Services/Notes/Imports/*`, `settings.component.*` |
| Global | `styles.css`, `app.config.ts` |