Summary
Bookshelf already has a strong prototype core: a single Go binary, embedded Vue frontend, simple SQLite-backed state, and a clean enough architecture to keep building on.
After a thorough review, I think we can make it much easier to maintain and extend if we align on a small set of foundation decisions before feature scope grows too much.
The main goal of this issue is to agree on the initial roadmap for v0.1.x, especially around documentation, CI/security, database support, packaging, and the backend changes needed to support future formats and clients cleanly.
Why now
This project is still early enough that we can fix the high-leverage foundations now without a painful rewrite later.
A few things already stand out:
- The overall architecture is promising and worth keeping.
- The current backend identity model is too path-centric for long-term sync/progress/client support.
- PDF assumptions are spread through the stack, which is fine for a draft but not for future EPUB/CBZ/etc.
- Frontend unit-test coverage is effectively absent.
- Backend tests exist, but are concentrated mostly around API handlers.
- There is currently no real CI/CD/release/security baseline in-repo.
- Human-facing documentation should move to
docs/, while spec/ can stay focused on spec-driven/planning artifacts.
- The repo is not yet agent-ready by the standards I want us to support.
Key findings from review
Backend / architecture
- The Go backend is structured reasonably well:
cmd/, internal/api, internal/store, internal/scanner, internal/pdfstream, internal/web.
- The main architectural pressure point is that books are currently identified by relative path, which will make file moves, deduplication, sync, and future client support harder.
- Content serving should eventually become catalog-aware instead of serving filesystem paths directly.
- Format support should become explicit in the data model instead of assuming PDF everywhere.
Frontend / testing
- Vue structure is decent for a first version, but quality gates are minimal.
- There are currently no frontend unit tests or frontend test scripts.
- A few route/reactivity issues likely deserve attention early.
Delivery / release engineering
- No GitHub Actions workflows are currently present.
- No releases or tags yet.
- Docker packaging foundation is good, but we should formalize CI, release automation, and deployment assets.
Proposed roadmap
1. First PR: agent-readiness and docs baseline
Keep the first PR intentionally small and docs-focused.
Scope:
- add root
AGENTS.md
- add root
ARCHITECTURE.md
- add root
CONTRIBUTING.md
- improve
README.md
- move durable human-facing docs into
docs/
- add
.github/CODEOWNERS
I think this is the best first PR because it is low-risk and immediately improves contributor/agent ergonomics.
2. CI / security / release baseline
Add GitHub Actions before larger refactors.
Baseline CI:
- Go tests
- race tests
go vet
- frontend install + typecheck + build
- container build smoke test
Security / compliance baseline:
govulncheck
- Trivy
- secret scanning
actionlint
hadolint
- Dependabot for:
- Go modules
- npm
- Docker
- GitHub Actions
Later, once chart/manifests exist:
yamllint
helm lint
kubeconform
- optional CodeQL
Release expectations:
- semantic versioning starting around
v0.1.0
- GHCR image publishing
- SBOM + provenance attestations
- release binaries for:
- Linux
amd64, arm64
- macOS
amd64, arm64
- Windows
amd64, arm64
3. Test coverage work
Backend:
- expand beyond API tests into store/scanner/content-serving packages
- aim for very high coverage in small critical packages
Frontend:
- add Vitest + Vue Test Utils + coverage
- start with composables and API utilities
- then targeted component/page tests
I would not enforce 100% coverage on the TS side initially.
4. Backend foundation refactor before scope growth
Before adding more formats or sync features, I think we should address:
- stable internal book identity instead of path-only identity
- catalog-aware content serving
- explicit format/content metadata
- transactional collection operations
- clearer upload/deployment contract
- storage/repository layer that supports both SQLite and PostgreSQL cleanly
This is not a rewrite, but I do think it is worth doing early.
5. Packaging / deployment assets
Add:
docker-compose
- Helm chart
- ArgoCD-oriented docs/examples
I want the chart to support both database modes clearly:
SQLite mode
- simplest self-hosted path
- single replica
- PVC-backed DB
PostgreSQL mode
- external PostgreSQL
- in-cluster PostgreSQL via CloudNativePG
The chart should make both easy to understand and easy to configure.
6. Near-term product scope
For the first releases, I’d keep scope intentionally small:
- excellent PDF experience
- remote reading that works well over Tailscale/private networks
- strong progress/bookmark/note correctness
- good docs and contributor ergonomics
- solid packaging and deployment
Then expand toward:
- EPUB/CBZ/CBR
- syncable reading progress
- mobile/desktop-friendly API evolution
- OPDS-compatible catalog/export for eInk/mobile interoperability
- richer caching/performance improvements
Decisions I’d like us to align on
- Should we treat
docs/ as the home for human-facing docs and keep spec/ for planning/spec artifacts?
- Do we want SQLite-only for now, or do we agree to make SQLite + PostgreSQL both first-class?
- Is a docs/agent-readiness first PR the right starting point?
- Should the Helm chart support both external Postgres and CloudNativePG from the start?
- Are we aligned on a stronger CI/security baseline early, including Dependabot and vulnerability scanning?
- Do we want to formally target remote/Tailscale-first private deployments in early docs?
Suggested initial PR sequence
docs: agent readiness baseline
ci: go/web verify + security scanning + dependabot + release scaffolding
test: frontend test harness + broader backend coverage
fix: harden content serving + clarify upload/deploy contract
refactor: stable identity + DB portability + format abstraction
deploy: compose + Helm + ArgoCD docs
feat: first non-PDF format support
Closing thought
I think Bookshelf has the right shape to become a genuinely excellent self-hosted reading platform, but the leverage right now is in getting the foundation and operational story right before feature scope expands.
If this roadmap looks reasonable, I can start with the first PR around docs + agent-readiness.
Summary
Bookshelf already has a strong prototype core: a single Go binary, embedded Vue frontend, simple SQLite-backed state, and a clean enough architecture to keep building on.
After a thorough review, I think we can make it much easier to maintain and extend if we align on a small set of foundation decisions before feature scope grows too much.
The main goal of this issue is to agree on the initial roadmap for
v0.1.x, especially around documentation, CI/security, database support, packaging, and the backend changes needed to support future formats and clients cleanly.Why now
This project is still early enough that we can fix the high-leverage foundations now without a painful rewrite later.
A few things already stand out:
docs/, whilespec/can stay focused on spec-driven/planning artifacts.Key findings from review
Backend / architecture
cmd/,internal/api,internal/store,internal/scanner,internal/pdfstream,internal/web.Frontend / testing
Delivery / release engineering
Proposed roadmap
1. First PR: agent-readiness and docs baseline
Keep the first PR intentionally small and docs-focused.
Scope:
AGENTS.mdARCHITECTURE.mdCONTRIBUTING.mdREADME.mddocs/.github/CODEOWNERSI think this is the best first PR because it is low-risk and immediately improves contributor/agent ergonomics.
2. CI / security / release baseline
Add GitHub Actions before larger refactors.
Baseline CI:
go vetSecurity / compliance baseline:
govulncheckactionlinthadolintLater, once chart/manifests exist:
yamllinthelm lintkubeconformRelease expectations:
v0.1.0amd64,arm64amd64,arm64amd64,arm643. Test coverage work
Backend:
Frontend:
I would not enforce 100% coverage on the TS side initially.
4. Backend foundation refactor before scope growth
Before adding more formats or sync features, I think we should address:
This is not a rewrite, but I do think it is worth doing early.
5. Packaging / deployment assets
Add:
docker-composeI want the chart to support both database modes clearly:
SQLite mode
PostgreSQL mode
The chart should make both easy to understand and easy to configure.
6. Near-term product scope
For the first releases, I’d keep scope intentionally small:
Then expand toward:
Decisions I’d like us to align on
docs/as the home for human-facing docs and keepspec/for planning/spec artifacts?Suggested initial PR sequence
docs: agent readiness baselineci: go/web verify + security scanning + dependabot + release scaffoldingtest: frontend test harness + broader backend coveragefix: harden content serving + clarify upload/deploy contractrefactor: stable identity + DB portability + format abstractiondeploy: compose + Helm + ArgoCD docsfeat: first non-PDF format supportClosing thought
I think Bookshelf has the right shape to become a genuinely excellent self-hosted reading platform, but the leverage right now is in getting the foundation and operational story right before feature scope expands.
If this roadmap looks reasonable, I can start with the first PR around docs + agent-readiness.