Skip to content

docs: consolidate application project development docs#545

Merged
zachyale merged 3 commits into
developfrom
docs/add-development-guidelines
Apr 16, 2026
Merged

docs: consolidate application project development docs#545
zachyale merged 3 commits into
developfrom
docs/add-development-guidelines

Conversation

@zachyale

@zachyale zachyale commented Apr 16, 2026

Copy link
Copy Markdown
Member

Description

This PR consolidates developer documentation so each surface has a single canonical DEVELOPMENT.md instead of split guidance across both README.md and CONTRIBUTING.md.

At the repo level, links were updated to point to the new canonical development guides. At the frontend and backend levels, the useful setup, command, and workflow details from the old READMEs were merged into each surface's DEVELOPMENT.md, and the duplicate surface README files were removed.

Changes

  • Rename old application CONTRIBUTING.md to DEVELOPMENT.md, per best practices
  • Point root docs to updated DEVELOPMENT.md files
  • Merge frontend README content into frontend/DEVELOPMENT.md
  • Merge backend README content into booklore-api/DEVELOPMENT.md
  • Clean up stale links

Summary by CodeRabbit

  • Documentation
    • Restructured developer docs for clearer organization and discoverability.
    • Added canonical development guides for the backend, frontend, and repository root covering setup, workflows, testing, and conventions.
    • Replaced component-contributor pointers to reference the new development guides and updated contributor guidance links throughout top-level docs.
    • Removed several legacy contributor/readme pages in favor of the consolidated documentation structure.

@coderabbitai

coderabbitai Bot commented Apr 16, 2026

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 73b4697a-0054-4428-9e82-903c9f133c58

📥 Commits

Reviewing files that changed from the base of the PR and between 167c90d and 59a7a61.

📒 Files selected for processing (1)
  • booklore-api/DEVELOPMENT.md

📝 Walkthrough

Walkthrough

Documentation restructuring: component CONTRIBUTING/README content moved into new DEVELOPMENT.md files (root, booklore-api, frontend); root README and CONTRIBUTING links updated to reference the new DEVELOPMENT files; old component CONTRIBUTING/README files removed where applicable.

Changes

Cohort / File(s) Summary
Root docs
CONTRIBUTING.md, DEVELOPMENT.md, README.md
Updated contributor links in CONTRIBUTING.md to point to component DEVELOPMENT.md; added a comprehensive root DEVELOPMENT.md describing project layout, Justfile recipes, Docker/dev setup, manual setup, testing, build, and commit/branch conventions; README "Developer Surfaces" updated to reference new docs.
Backend docs
booklore-api/DEVELOPMENT.md, booklore-api/README.md
Added canonical backend booklore-api/DEVELOPMENT.md with scope, stack, Justfile/api recipes, run/test/build/packaging, conventions, migrations, and pre-PR checklist; removed previous booklore-api/README.md content.
Frontend docs
frontend/DEVELOPMENT.md, frontend/CONTRIBUTING.md, frontend/README.md
Added frontend/DEVELOPMENT.md as canonical frontend guide (stack, just/ui commands, run/build/test, conventions, PR checks); removed frontend/CONTRIBUTING.md and migrated/removed frontend/README.md content.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Suggested reviewers

  • imajes
  • balazs-szucs

Poem

🐰 I hopped through folders, tidy and spry,

Moved READMEs and CONTRIBUTINGs, oh my!
DEVELOPMENT blooms where fragments were strewn,
One map for the code, beneath the same moon. 🥕

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The PR title follows conventional commit format with 'docs:' prefix and clearly describes the main change of consolidating development documentation.
Description check ✅ Passed The PR description is complete with all required sections (Description and Changes) and provides clear context about the consolidation effort.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/add-development-guidelines
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch docs/add-development-guidelines

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
DEVELOPMENT.md (1)

10-10: Optional: Consider adding markdown code block language specifiers.

Static analysis flagged missing language specifiers for some code blocks. While the current formatting is readable, you could optionally add specifiers for improved rendering:

  • Line 10: The project structure uses ASCII art, so leaving it unspecified is reasonable
  • Lines 212-214: Could add text or leave unspecified for template syntax
  • Lines 220-226: Could add text for commit message examples

These are purely stylistic suggestions and can be safely ignored if the current format is preferred.

📋 Optional markdown improvements

For the commit message format block (lines 212-214):

-```
+```text
 <type>(<scope>): <subject>

For the examples block (lines 220-226):
```diff
-```
+```text
 feat(reader): add keyboard navigation for page turning
 fix(api): resolve memory leak in book scanning service
 feat(auth)!: migrate to OAuth 2.1

Also applies to: 212-214, 220-226

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@DEVELOPMENT.md` at line 10, Some fenced code blocks in DEVELOPMENT.md are
missing language specifiers (notably the ASCII art/project structure around line
10 and the commit message/template blocks around lines 212-214 and 220-226);
optionally add appropriate language tags such as ```text for the commit message
and examples blocks (or leave the ASCII art unspecified if you prefer) so
markdown renderers apply correct formatting—update those fenced blocks in the
file (the blocks containing the project ASCII art and the commit message
examples) to include the chosen language specifier.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@README.md`:
- Line 181: Replace the compound adjective "General purpose development
guidelines" with the hyphenated form "General-purpose development guidelines" in
the README line that reads "General purpose development guidelines live in
[DEVELOPMENT.md](DEVELOPMENT.md)." to correct the grammar; ensure the hyperlink
and surrounding text remain unchanged.

---

Nitpick comments:
In `@DEVELOPMENT.md`:
- Line 10: Some fenced code blocks in DEVELOPMENT.md are missing language
specifiers (notably the ASCII art/project structure around line 10 and the
commit message/template blocks around lines 212-214 and 220-226); optionally add
appropriate language tags such as ```text for the commit message and examples
blocks (or leave the ASCII art unspecified if you prefer) so markdown renderers
apply correct formatting—update those fenced blocks in the file (the blocks
containing the project ASCII art and the commit message examples) to include the
chosen language specifier.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: d57fee0c-6843-4fe4-8c3a-86ed5cab8d54

📥 Commits

Reviewing files that changed from the base of the PR and between e087972 and 167c90d.

📒 Files selected for processing (8)
  • CONTRIBUTING.md
  • DEVELOPMENT.md
  • README.md
  • booklore-api/DEVELOPMENT.md
  • booklore-api/README.md
  • frontend/CONTRIBUTING.md
  • frontend/DEVELOPMENT.md
  • frontend/README.md
💤 Files with no reviewable changes (3)
  • booklore-api/README.md
  • frontend/CONTRIBUTING.md
  • frontend/README.md
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (5)
  • GitHub Check: Test Suite / Backend Tests
  • GitHub Check: Test Suite / Frontend Tests
  • GitHub Check: Analyze (javascript-typescript)
  • GitHub Check: Analyze (java-kotlin)
  • GitHub Check: Frontend Lint Threshold Check
🧰 Additional context used
🧠 Learnings (10)
📚 Learning: 2026-03-26T01:46:48.863Z
Learnt from: CR
Repo: grimmory-tools/grimmory PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-03-26T01:46:48.863Z
Learning: PRs in this repo are expected to link an approved issue and include local test output

Applied to files:

  • CONTRIBUTING.md
  • booklore-api/DEVELOPMENT.md
📚 Learning: 2026-04-07T09:28:12.814Z
Learnt from: balazs-szucs
Repo: grimmory-tools/grimmory PR: 393
File: frontend/src/app/features/readers/pdf-reader/pdf-reader.component.ts:255-263
Timestamp: 2026-04-07T09:28:12.814Z
Learning: In the Grimmory frontend (Angular), always flag manual resource management patterns when automatic alternatives are available via modern Angular mechanisms. This includes, but is not limited to:
- Manual `document.addEventListener` / `removeEventListener` with stored cleanup functions (e.g., `mouseMoveCleanup`, `documentClickCleanup`, `keydownCleanup`, `touchCleanup` as fields) — prefer registering teardown via `DestroyRef.onDestroy(cleanupFn)` instead.
- Manually tracked `Subscription` fields (e.g., `annotationSaveSubscription`, `annotationCacheSubscription`) that are explicitly unsubscribed in `ngOnDestroy()` — prefer `takeUntilDestroyed(destroyRef)` piped in the stream.
- Any lifecycle-coupled teardown that can be automated through `DestroyRef`, `takeUntilDestroyed`, Angular signals, or other Angular v16+ primitives. Always flag these patterns in code under `frontend/src/app/` (Angular project in grimmory-tools/grimmory).

Applied to files:

  • frontend/DEVELOPMENT.md
📚 Learning: 2026-04-11T03:56:00.030Z
Learnt from: zachyale
Repo: grimmory-tools/grimmory PR: 439
File: frontend/src/app/features/series-browser/components/series-browser/series-browser.component.ts:178-196
Timestamp: 2026-04-11T03:56:00.030Z
Learning: In the Grimmory Angular frontend (frontend/src/app/), the preferred holistic approach for reactive localization (auto-updating on language switch) is: (1) Use `translateSignal()` from `jsverse/transloco` for individual reactive translated strings. (2) For option/label arrays, create a single `activeLang` signal via `toSignal(t.langChanges$, { initialValue: t.getActiveLang() })` and derive option arrays as `computed()` signals that read `activeLang()` — this eliminates all manual `langChanges$` subscriptions and `ngOnDestroy` wiring. The team explicitly prefers this signal/computed pattern over manual subscribe-in-ngOnInit approaches when implementing reactive i18n.

Applied to files:

  • frontend/DEVELOPMENT.md
📚 Learning: 2026-04-05T21:16:04.342Z
Learnt from: balazs-szucs
Repo: grimmory-tools/grimmory PR: 385
File: frontend/src/app/app.component.ts:55-56
Timestamp: 2026-04-05T21:16:04.342Z
Learning: In the grimmory frontend (Angular), always suggest modern Angular patterns when reviewing code. For example:
- Prefer `DestroyRef` + `takeUntilDestroyed(destroyRef)` (Angular v16+) over manually managing `Subscription` arrays and calling `unsubscribe()` in `ngOnDestroy()`.
- Prefer `inject()` for dependency injection over constructor injection.
- Prefer Angular signals and computed values over BehaviorSubjects/Observables where appropriate.

Applied to files:

  • frontend/DEVELOPMENT.md
📚 Learning: 2026-04-14T12:46:59.296Z
Learnt from: balazs-szucs
Repo: grimmory-tools/grimmory PR: 502
File: booklore-api/src/main/java/org/booklore/service/reader/ChapterCacheService.java:0-0
Timestamp: 2026-04-14T12:46:59.296Z
Learning: In grimmory-tools/grimmory (booklore-api), the team targets Java 25 with `--enable-preview` and actively aims to use the most modern Java conventions available. When reviewing or suggesting code for this project, always prefer modern Java 25 idioms and features (e.g., unnamed variables `_`, records, pattern matching for switch/instanceof, sealed classes, sequenced collections, `Stream.toList()`, text blocks, etc.) over older or more conservative patterns. Do not suggest reverting modern constructs to legacy alternatives.

Applied to files:

  • booklore-api/DEVELOPMENT.md
  • DEVELOPMENT.md
📚 Learning: 2026-04-02T09:25:48.330Z
Learnt from: balazs-szucs
Repo: grimmory-tools/grimmory PR: 334
File: booklore-api/src/main/java/org/booklore/service/reader/EpubReaderService.java:402-407
Timestamp: 2026-04-02T09:25:48.330Z
Learning: In grimmory-tools/grimmory, before commenting on any file processing code (epub or pdf), always verify the current state of the relevant upstream grimmory libraries: `grimmory-tools/epub4j` (for epub) and `grimmory-tools/PDFium4j` (for pdf). These custom libraries may have different APIs, capabilities, and limitations compared to the third-party libraries they replace. Issues about streaming, buffering, or API surface may need to be filed/addressed in those upstream repos rather than in grimmory itself.

Applied to files:

  • booklore-api/DEVELOPMENT.md
  • DEVELOPMENT.md
📚 Learning: 2026-04-03T09:45:37.512Z
Learnt from: balazs-szucs
Repo: grimmory-tools/grimmory PR: 334
File: booklore-api/src/main/java/org/booklore/util/koreader/EpubCfiService.java:53-62
Timestamp: 2026-04-03T09:45:37.512Z
Learning: In grimmory-tools/grimmory, always prefer throwing errors using `ApiError` (e.g., `ApiError.INVALID_INPUT.createException("...")`) instead of generic Java exceptions like `IllegalArgumentException` or `RuntimeException`. When suggesting error handling in code reviews for this project, always recommend `ApiError`-based exceptions over raw Java exceptions.

Applied to files:

  • booklore-api/DEVELOPMENT.md
📚 Learning: 2026-04-02T09:25:48.330Z
Learnt from: balazs-szucs
Repo: grimmory-tools/grimmory PR: 334
File: booklore-api/src/main/java/org/booklore/service/reader/EpubReaderService.java:402-407
Timestamp: 2026-04-02T09:25:48.330Z
Learning: In grimmory-tools/grimmory, epub processing uses `org.grimmory.epub4j` from https://github.com/grimmory-tools/epub4j. This is a grimmory-maintained fork and is fundamentally different from `io.documentnode.epub4j`. Do NOT generalize API knowledge, behavior, or limitations of `io.documentnode.epub4j` to the grimmory fork. Before raising review comments on epub-related file processing code, verify the current API and capabilities in the grimmory-tools/epub4j repository.

Applied to files:

  • booklore-api/DEVELOPMENT.md
📚 Learning: 2026-03-26T01:46:48.863Z
Learnt from: CR
Repo: grimmory-tools/grimmory PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-03-26T01:46:48.863Z
Learning: Applies to booklore-api/src/test/**/*.java : Prefer focused unit tests; use `SpringBootTest` only when the Spring context is required

Applied to files:

  • booklore-api/DEVELOPMENT.md
📚 Learning: 2026-03-26T01:46:48.863Z
Learnt from: CR
Repo: grimmory-tools/grimmory PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-03-26T01:46:48.863Z
Learning: Start from the root `Justfile` unless you have a clear reason to drop into a subproject

Applied to files:

  • README.md
🪛 LanguageTool
README.md

[grammar] ~181-~181: Use a hyphen to join words.
Context: ...RIBUTING.md](CONTRIBUTING.md). General purpose development guidelines live in [...

(QB_NEW_EN_HYPHEN)

🪛 markdownlint-cli2 (0.22.0)
DEVELOPMENT.md

[warning] 10-10: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


[warning] 38-38: Blank line inside blockquote

(MD028, no-blanks-blockquote)


[warning] 212-212: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


[warning] 220-220: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🔇 Additional comments (5)
CONTRIBUTING.md (1)

124-125: LGTM! Documentation references correctly updated.

All references have been consistently updated to point to the new canonical DEVELOPMENT.md files for both backend and frontend components. This aligns perfectly with the PR's objective to consolidate development guidance.

Also applies to: 361-361, 395-396

frontend/DEVELOPMENT.md (1)

1-121: LGTM! Comprehensive and well-structured frontend guide.

This canonical development guide effectively consolidates frontend-specific setup, commands, conventions, and workflows. The conventions section appropriately emphasizes modern Angular patterns (standalone components, inject(), signals) that align with the team's established preferences. The clear separation between repo-level policy (CONTRIBUTING.md) and technical workflows (DEVELOPMENT.md) improves developer experience.

README.md (1)

179-184: Documentation restructuring looks good.

The Developer Surfaces section correctly redirects readers from the old component README.md structure to the new canonical DEVELOPMENT.md files. The clear separation of concerns (repo-wide policy in CONTRIBUTING.md, general development in DEVELOPMENT.md, component-specific in component DEVELOPMENT.md files) improves discoverability.

booklore-api/DEVELOPMENT.md (1)

1-134: LGTM! Comprehensive backend development guide.

This canonical guide effectively documents backend-specific setup, commands, conventions, and workflows. The conventions section correctly emphasizes established patterns (ApiError for exceptions, security annotations, modern Java features) and the testing guidance appropriately distinguishes between unit tests and SpringBootTest usage. The packaging notes clearly explain how frontend artifacts are consumed during the Docker build.

DEVELOPMENT.md (1)

1-238: LGTM! Comprehensive repo-root development guide.

This canonical guide effectively consolidates repo-level development workflows, including Docker and manual setup paths, testing commands, production image builds, and commit conventions. The content is well-organized, technically accurate (commands match the Justfile), and provides clear separation from component-specific guides. This successfully achieves the PR's objective of creating a single source of truth for development workflows.

Comment thread README.md
Comment thread booklore-api/DEVELOPMENT.md
Comment thread booklore-api/DEVELOPMENT.md
@zachyale zachyale merged commit 16b5747 into develop Apr 16, 2026
10 of 11 checks passed
@zachyale zachyale deleted the docs/add-development-guidelines branch April 16, 2026 18:12
zachyale added a commit to zachyale/grimmory that referenced this pull request Apr 17, 2026
…s#545)

* docs: add DEVELOPMENT.md

* docs: dedupe application project development guides

* docs: update junit version target
zachyale added a commit to zachyale/grimmory that referenced this pull request Apr 17, 2026
…s#545)

* docs: add DEVELOPMENT.md

* docs: dedupe application project development guides

* docs: update junit version target
zachyale added a commit that referenced this pull request Apr 17, 2026
* docs: add DEVELOPMENT.md

* docs: dedupe application project development guides

* docs: update junit version target
zachyale added a commit that referenced this pull request Apr 22, 2026
* docs: add DEVELOPMENT.md

* docs: dedupe application project development guides

* docs: update junit version target
dsmouse pushed a commit to dsmouse/grimmory that referenced this pull request May 11, 2026
…s#545)

* docs: add DEVELOPMENT.md

* docs: dedupe application project development guides

* docs: update junit version target
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants