Skip to content

update readme's#692

Merged
philiplehmann merged 3 commits intomainfrom
feature/update-readmes
Feb 25, 2026
Merged

update readme's#692
philiplehmann merged 3 commits intomainfrom
feature/update-readmes

Conversation

@philiplehmann
Copy link
Owner

@philiplehmann philiplehmann commented Jun 9, 2025

Summary by CodeRabbit

  • Documentation
    • Rewrote and expanded user guides for MailCatcher, MailDev, and Puppeteer.
    • Added product overviews, Features, Web UI notes (MailDev), and API usage (Puppeteer).
    • Introduced Quick Start (Docker, Docker Compose, Nx), configuration details (ports, env vars), and multi-language usage examples.
    • Added development & testing workflows, troubleshooting, comparison, contribution, and license guidance.

@coderabbitai
Copy link

coderabbitai bot commented Jun 9, 2025

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Expanded README documentation for MailCatcher, MailDev, and Puppeteer—replacing minimal placeholders with full guides covering features, Quick Start (Docker/Compose/Nx), configuration, usage examples, development, troubleshooting, contributing, and license. No code or exported entities changed.

Changes

Cohort / File(s) Summary
MailCatcher README
apps/mailcatcher/README.md
Replaced a short placeholder with a full README: product overview, features, Quick Start (Docker & Compose), ports and environment variables, usage examples (Node/Python/PHP), development (Nx & Docker), troubleshooting, contributing, and license.
MailDev README
apps/maildev/README.md
Completely rewrote README: title/overview, features, Quick Start (Docker/Compose/Nx), configuration (ports/env), language-specific usage examples and web UI notes, development/testing commands, troubleshooting, comparison with MailCatcher, contributing, and license.
Puppeteer README
apps/puppeteer/README.md
Expanded into comprehensive documentation: containerized REST API (PDF/Image generation), Quick Start (Docker/Compose/Nx), API endpoints and multi-language request examples, detailed options/defaults, ports/env, architecture notes, development & testing, troubleshooting, performance/security, contributing, and license.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

🐇
I hopped through README stacks today,
Expanded paths to show the way.
Docker, code, and tips galore,
New docs to read and explore.
A tiny hop — then back for more!

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Title check ❓ Inconclusive The title 'update readme's' is vague and does not clearly convey which READMEs were updated or the scope of changes across multiple applications. Provide a more descriptive title that specifies the primary focus, such as 'Expand documentation for MailCatcher, MailDev, and Puppeteer apps' or focus on the main change if one is primary.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
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
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/update-readmes

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.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (8)
apps/mailcatcher/README.md (2)

63-65: Specify language for fenced code block
Add a language identifier (e.g., bash) to the fenced code block for syntax highlighting.

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

63-63: Fenced code blocks should have a language specified
null

(MD040, fenced-code-language)


150-152: Add missing article 'the'
Change "Can't access web interface:" to "Can't access the web interface:" for grammatical correctness.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~150-~150: You might be missing the article “the” here.
Context: ... mailcatcher-server ``` Can't access web interface: - Ensure port 1080 is not ...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

apps/maildev/README.md (3)

3-3: Hyphenate 'easy-to-use'
Use hyphens in "easy-to-use" when used as a compound modifier.

🧰 Tools
🪛 LanguageTool

[grammar] ~3-~3: It appears that two hyphens are missing.
Context: ...rated emails during development with an easy to use web interface that runs on your machine...

(SIMPLE_TO_USE_HYPHEN)


88-90: Specify language for fenced code block
Add a language identifier (e.g., bash) to the fenced code block to enable proper syntax highlighting.

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

88-88: Fenced code blocks should have a language specified
null

(MD040, fenced-code-language)


252-254: Add missing article 'the'
Change "Can't access web interface:" to "Can't access the web interface:" for grammatical consistency.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~252-~252: You might be missing the article “the” here.
Context: ...r rm maildev-server ``` Can't access web interface: - Ensure port 1080 is not ...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

apps/puppeteer/README.md (3)

131-133: Remove duplicate heading
The "## Configuration Options" heading appears twice; remove the redundant one to avoid confusion.

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

132-132: Multiple headings with the same content
null

(MD024, no-duplicate-heading)


157-157: Hyphenate 'capture-specific'
Use a hyphen in "capture-specific area" when used as a compound term.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~157-~157: When ‘Capture-specific’ is used as a modifier, it is usually spelled with a hyphen.
Context: ...800, height: 600} | | clip | object | Capture specific area | | ### Request Examples #### Ja...

(SPECIFIC_HYPHEN)


221-224: Specify language for fenced code block
Add a language identifier (e.g., text or console) to the fenced code block for clarity.

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

221-221: Fenced code blocks should have a language specified
null

(MD040, fenced-code-language)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 604ee72 and a9b2cf2.

📒 Files selected for processing (3)
  • apps/mailcatcher/README.md (1 hunks)
  • apps/maildev/README.md (1 hunks)
  • apps/puppeteer/README.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
apps/mailcatcher/README.md

[uncategorized] ~150-~150: You might be missing the article “the” here.
Context: ... mailcatcher-server ``` Can't access web interface: - Ensure port 1080 is not ...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

apps/maildev/README.md

[grammar] ~3-~3: It appears that two hyphens are missing.
Context: ...rated emails during development with an easy to use web interface that runs on your machine...

(SIMPLE_TO_USE_HYPHEN)


[duplication] ~174-~174: Possible typo: you repeated a word.
Context: ... Web Interface Features ### Email List View - View all caught emails in chronological orde...

(ENGLISH_WORD_REPEAT_RULE)


[uncategorized] ~252-~252: You might be missing the article “the” here.
Context: ...r rm maildev-server ``` Can't access web interface: - Ensure port 1080 is not ...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

apps/puppeteer/README.md

[uncategorized] ~157-~157: When ‘Capture-specific’ is used as a modifier, it is usually spelled with a hyphen.
Context: ...800, height: 600} | | clip | object | Capture specific area | | ### Request Examples #### Ja...

(SPECIFIC_HYPHEN)

🪛 markdownlint-cli2 (0.17.2)
apps/mailcatcher/README.md

63-63: Fenced code blocks should have a language specified
null

(MD040, fenced-code-language)

apps/maildev/README.md

88-88: Fenced code blocks should have a language specified
null

(MD040, fenced-code-language)

apps/puppeteer/README.md

132-132: Multiple headings with the same content
null

(MD024, no-duplicate-heading)


221-221: Fenced code blocks should have a language specified
null

(MD040, fenced-code-language)

⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: lint

@philiplehmann philiplehmann force-pushed the feature/update-readmes branch from a9b2cf2 to 69ee96d Compare June 11, 2025 18:22
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (8)
apps/mailcatcher/README.md (2)

63-65: Add language to the fenced code block.

The block showing the URL lacks a language specifier. Please update the fence to something like bash or shell for consistency.

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

63-63: Fenced code blocks should have a language specified
null

(MD040, fenced-code-language)


151-151: Typo: missing article “the” in troubleshooting.

The bullet reads:

- Ensure port 1080 is not blocked by firewall

Consider:

- Ensure port 1080 is not blocked by firewall
+ Ensure the port 1080 is not blocked by the firewall
apps/maildev/README.md (3)

3-3: Use hyphens for the compound adjective “easy-to-use.”

Change:

with an easy to use web interface

to:

- with an easy to use web interface
+ with an easy-to-use web interface
🧰 Tools
🪛 LanguageTool

[grammar] ~3-~3: It appears that two hyphens are missing.
Context: ...rated emails during development with an easy to use web interface that runs on your machine...

(SIMPLE_TO_USE_HYPHEN)


88-90: Add language to the fenced code block.

The snippet for navigating to the web UI is untagged. Update to, for example, ```bash.

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

88-88: Fenced code blocks should have a language specified
null

(MD040, fenced-code-language)


253-253: Typo: missing article “the” in troubleshooting.

Similar to MailCatcher, this line should read:

- Ensure port 1080 is not blocked by firewall
+ Ensure the port 1080 is not blocked by the firewall
apps/puppeteer/README.md (3)

130-132: Remove duplicate heading “Configuration Options.”

The heading appears twice in succession. Please remove one instance to avoid redundancy.

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

132-132: Multiple headings with the same content
null

(MD024, no-duplicate-heading)


156-156: Hyphenate the modifier “Capture-specific.”

In the table, change:

| `clip` | object | Capture specific area |

to:

- | `clip` | object | Capture specific area |
+ | `clip` | object | Capture-specific area |

221-223: Add language to the fenced error block.

The block showing the Chrome error is untagged. Specify a language (e.g., text or bash) for consistency:

- ```
+ ```bash
  Failed to launch the browser process!
  The hardware on this system lacks support for the sse3 instruction set.
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

221-221: Fenced code blocks should have a language specified
null

(MD040, fenced-code-language)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a9b2cf2 and 69ee96d.

📒 Files selected for processing (3)
  • apps/mailcatcher/README.md (1 hunks)
  • apps/maildev/README.md (1 hunks)
  • apps/puppeteer/README.md (1 hunks)
🧰 Additional context used
🪛 LanguageTool
apps/maildev/README.md

[grammar] ~3-~3: It appears that two hyphens are missing.
Context: ...rated emails during development with an easy to use web interface that runs on your machine...

(SIMPLE_TO_USE_HYPHEN)


[duplication] ~174-~174: Possible typo: you repeated a word.
Context: ... Web Interface Features ### Email List View - View all caught emails in chronological orde...

(ENGLISH_WORD_REPEAT_RULE)


[uncategorized] ~252-~252: You might be missing the article “the” here.
Context: ...r rm maildev-server ``` Can't access web interface: - Ensure port 1080 is not ...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

apps/mailcatcher/README.md

[uncategorized] ~150-~150: You might be missing the article “the” here.
Context: ... mailcatcher-server ``` Can't access web interface: - Ensure port 1080 is not ...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

apps/puppeteer/README.md

[uncategorized] ~157-~157: When ‘Capture-specific’ is used as a modifier, it is usually spelled with a hyphen.
Context: ...800, height: 600} | | clip | object | Capture specific area | | ### Request Examples #### Ja...

(SPECIFIC_HYPHEN)

🪛 markdownlint-cli2 (0.17.2)
apps/maildev/README.md

88-88: Fenced code blocks should have a language specified
null

(MD040, fenced-code-language)

apps/mailcatcher/README.md

63-63: Fenced code blocks should have a language specified
null

(MD040, fenced-code-language)

apps/puppeteer/README.md

132-132: Multiple headings with the same content
null

(MD024, no-duplicate-heading)


221-221: Fenced code blocks should have a language specified
null

(MD040, fenced-code-language)

⏰ Context from checks skipped due to timeout of 90000ms (2)
  • GitHub Check: test (ubuntu-24.04, amd64)
  • GitHub Check: test (ubuntu-24.04, arm64)

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 6

🧹 Nitpick comments (7)
apps/mailcatcher/README.md (3)

63-66: Add a language to the fenced code block (markdownlint MD040).

Use a neutral language like text for the URL snippet.

Apply:

-```
+```text
 http://localhost:1080

---

`73-79`: **Simplify Nodemailer example to match defaults used in tests.**

No auth/TLS needed; keep it minimal like your test setup.

Apply:

```diff
-const transporter = nodemailer.createTransport({
-  host: 'localhost',
-  port: 1025,
-  secure: false, // No SSL/TLS
-  auth: null     // No authentication
-});
+const transporter = nodemailer.createTransport({
+  host: 'localhost',
+  port: 1025,
+});

101-108: Clarify docker-push target usage in README.md (apps/mailcatcher/README.md lines 101–108)
apps/mailcatcher only defines a docker-push target (no docker-build), so either rename the Nx target to docker-build or update the README to note that docker-push handles both image build and push.

apps/maildev/README.md (2)

88-91: Add a language to the fenced code block (markdownlint MD040).

Use text for the URL snippet.

Apply:

-```
+```text
 http://localhost:1080

---

`98-106`: **Trim Nodemailer options to essentials.**

Auth/TLS tweaks aren’t needed for local MailDev on 1025; keep it simple.

Apply:

```diff
-const transporter = nodemailer.createTransport({
-  host: 'localhost',
-  port: 1025,
-  secure: false, // No SSL/TLS
-  auth: null,    // No authentication
-  tls: {
-    rejectUnauthorized: false
-  }
-});
+const transporter = nodemailer.createTransport({
+  host: 'localhost',
+  port: 1025,
+});
apps/puppeteer/README.md (2)

221-225: Add a language to the error snippet (markdownlint MD040).

Apply:

-```
+```text
 Failed to launch the browser process!
 The hardware on this system lacks support for the sse3 instruction set.

---

`328-331`: **Rephrase “--no-sandbox” guidance with a safety caveat.**

Running without sandbox is dangerous unless the container/VM provides isolation (seccomp, user namespaces, rootless). Add a warning.

Apply:

```diff
-**Chrome fails to launch:**
-- Ensure sufficient memory is allocated to Docker
-- Try running with `--no-sandbox` flag in production
-- Check Chrome executable permissions
+**Chrome fails to launch:**
+- Ensure sufficient memory is allocated to Docker
+- If absolutely necessary, run with `--no-sandbox` only in a locked-down container/VM (seccomp/apparmor, rootless). Prefer keeping sandbox enabled.
+- Check Chrome executable permissions
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 69ee96d and f872277.

📒 Files selected for processing (3)
  • apps/mailcatcher/README.md (1 hunks)
  • apps/maildev/README.md (1 hunks)
  • apps/puppeteer/README.md (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (3)
apps/maildev/README.md (1)
apps/maildev/src/test/maildev.spec.ts (2)
  • container (9-59)
  • container (15-24)
apps/puppeteer/README.md (1)
apps/puppeteer/src/test/puppeteer.spec.ts (1)
  • setup (11-97)
apps/mailcatcher/README.md (1)
apps/mailcatcher/src/test/mailcatcher.spec.ts (4)
  • container (9-65)
  • container (15-24)
  • arch (8-66)
  • currentArch (7-67)
🪛 LanguageTool
apps/maildev/README.md

[grammar] ~7-~7: There might be a mistake here.
Context: ...tches all outbound emails in development - 🌐 Clean, intuitive web interface - 📱 R...

(QB_NEW_EN)


[grammar] ~8-~8: There might be a mistake here.
Context: ...ment - 🌐 Clean, intuitive web interface - 📱 Responsive design for mobile viewing ...

(QB_NEW_EN)


[grammar] ~9-~9: There might be a mistake here.
Context: ... 📱 Responsive design for mobile viewing - 🔍 Search and filter emails by sender, s...

(QB_NEW_EN)


[grammar] ~10-~10: There might be a mistake here.
Context: ...er emails by sender, subject, or content - 📎 View HTML and plain text versions of ...

(QB_NEW_EN)


[grammar] ~11-~11: There might be a mistake here.
Context: ...w HTML and plain text versions of emails - 📋 Download email attachments - 🔄 Auto-...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...f emails - 📋 Download email attachments - 🔄 Auto-refresh and real-time updates - ...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ... - 🔄 Auto-refresh and real-time updates - 🗑️ Delete individual emails or clear al...

(QB_NEW_EN)


[grammar] ~14-~14: There might be a mistake here.
Context: ...?️ Delete individual emails or clear all - 🚀 Lightweight and fast - 🐳 Ready-to-us...

(QB_NEW_EN)


[grammar] ~15-~15: There might be a mistake here.
Context: ...s or clear all - 🚀 Lightweight and fast - 🐳 Ready-to-use Docker container ## Qui...

(QB_NEW_EN)


[grammar] ~16-~16: There might be a mistake here.
Context: ... fast - 🐳 Ready-to-use Docker container ## Quick Start ### Run with Docker ```bas...

(QB_NEW_EN)


[grammar] ~59-~59: There might be a mistake here.
Context: ... Ports | Port | Service | Description | |------|---------|-------------| | 1025 ...

(QB_NEW_EN)


[grammar] ~60-~60: There might be a mistake here.
Context: ...ption | |------|---------|-------------| | 1025 | SMTP | Mail server for receivin...

(QB_NEW_EN)


[grammar] ~61-~61: There might be a mistake here.
Context: ...MTP | Mail server for receiving emails | | 1080 | HTTP | Web interface for viewin...

(QB_NEW_EN)


[grammar] ~66-~66: There might be a mistake here.
Context: ...es | Variable | Default | Description | |----------|---------|-------------| | `...

(QB_NEW_EN)


[grammar] ~67-~67: There might be a mistake here.
Context: ...n | |----------|---------|-------------| | MAILDEV_WEB_PORT | 1080 | Web interf...

(QB_NEW_EN)


[grammar] ~68-~68: There might be a mistake here.
Context: ..._WEB_PORT| 1080 | Web interface port | |MAILDEV_SMTP_PORT` | 1025 | SMTP serv...

(QB_NEW_EN)


[grammar] ~69-~69: There might be a mistake here.
Context: ...V_SMTP_PORT| 1025 | SMTP server port | |MAILDEV_WEB_IP` | 0.0.0.0 | IP addres...

(QB_NEW_EN)


[grammar] ~70-~70: There might be a mistake here.
Context: ...0.0 | IP address to bind web interface | | MAILDEV_SMTP_IP | 0.0.0.0 | IP addre...

(QB_NEW_EN)


[grammar] ~71-~71: There might be a mistake here.
Context: ...0.0.0 | IP address to bind SMTP server | | MAILDEV_BASE_PATHNAME | / | Base pat...

(QB_NEW_EN)


[grammar] ~72-~72: There might be a mistake here.
Context: ...AME| / | Base path for web interface | |MAILDEV_DISABLE_DNS` | false | Disabl...

(QB_NEW_EN)


[grammar] ~79-~79: There might be a mistake here.
Context: ...int your application's SMTP settings to: - Host: localhost (or your Docker cont...

(QB_NEW_EN)


[grammar] ~80-~80: There might be a mistake here.
Context: ...localhost(or your Docker container IP) - **Port:**1025` - Authentication: Non...

(QB_NEW_EN)


[grammar] ~81-~81: There might be a mistake here.
Context: ...r your Docker container IP) - Port: 1025 - Authentication: None required - **Encr...

(QB_NEW_EN)


[grammar] ~82-~82: There might be a mistake here.
Context: ...025` - Authentication: None required - Encryption: None (plain text) ### Vie...

(QB_NEW_EN)


[grammar] ~174-~174: There might be a mistake here.
Context: ... Interface Features ### Email List View - View all caught emails in chronological ...

(QB_NEW_EN)


[grammar] ~180-~180: There might be a mistake here.
Context: ...chment indicators ### Email Detail View - Toggle between HTML and plain text views...

(QB_NEW_EN)


[grammar] ~186-~186: There might be a mistake here.
Context: ... Copy email content ### Toolbar Actions - 🔄 Refresh email list - 🗑️ Delete indiv...

(QB_NEW_EN)


[grammar] ~187-~187: There might be a mistake here.
Context: ... Toolbar Actions - 🔄 Refresh email list - 🗑️ Delete individual emails - 🗑️ Clear...

(QB_NEW_EN)


[grammar] ~188-~188: There might be a mistake here.
Context: ...mail list - 🗑️ Delete individual emails - 🗑️ Clear all emails - 🔍 Search functio...

(QB_NEW_EN)


[grammar] ~189-~189: There might be a mistake here.
Context: ...individual emails - 🗑️ Clear all emails - 🔍 Search functionality ## Development ...

(QB_NEW_EN)


[grammar] ~190-~190: There might be a mistake here.
Context: ...ear all emails - 🔍 Search functionality ## Development ### Building the Image ###...

(QB_NEW_EN)


[grammar] ~252-~252: There might be a mistake here.
Context: ...erver ``` Can't access web interface: - Ensure port 1080 is not blocked by firew...

(QB_NEW_EN)


[grammar] ~253-~253: There might be a mistake here.
Context: ...ce:** - Ensure port 1080 is not blocked by firewall - Check if Docker container is...

(QB_NEW_EN)


[grammar] ~254-~254: There might be a mistake here.
Context: ...1080 is not blocked by firewall - Check if Docker container is running: `docker ps...

(QB_NEW_EN)


[grammar] ~258-~258: There might be a mistake here.
Context: ...ldev-server` Emails not being caught: - Verify your application is configured to...

(QB_NEW_EN)


[grammar] ~264-~264: There might be a mistake here.
Context: ...cation Web interface shows no emails: - Check that emails are actually being sen...

(QB_NEW_EN)


[grammar] ~282-~282: There might be a mistake here.
Context: ...her | Feature | MailDev | MailCatcher | |---------|---------|-------------| | Te...

(QB_NEW_EN)


[grammar] ~283-~283: There might be a mistake here.
Context: ...er | |---------|---------|-------------| | Technology | Node.js | Ruby | | Web In...

(QB_NEW_EN)


[grammar] ~284-~284: There might be a mistake here.
Context: ...-------| | Technology | Node.js | Ruby | | Web Interface | Modern, responsive | S...

(QB_NEW_EN)


[grammar] ~285-~285: There might be a mistake here.
Context: ...odern, responsive | Simple, functional | | Real-time Updates | ✅ | ❌ | | Attachme...

(QB_NEW_EN)


[grammar] ~286-~286: There might be a mistake here.
Context: ...nctional | | Real-time Updates | ✅ | ❌ | | Attachment Support | ✅ | ✅ | | Search ...

(QB_NEW_EN)


[grammar] ~287-~287: There might be a mistake here.
Context: ...| ✅ | ❌ | | Attachment Support | ✅ | ✅ | | Search Functionality | ✅ | ❌ | | Mobil...

(QB_NEW_EN)


[grammar] ~288-~288: There might be a mistake here.
Context: ...✅ | ✅ | | Search Functionality | ✅ | ❌ | | Mobile Responsive | ✅ | ❌ | | Memory U...

(QB_NEW_EN)


[grammar] ~289-~289: There might be a mistake here.
Context: ... | ✅ | ❌ | | Mobile Responsive | ✅ | ❌ | | Memory Usage | Higher | Lower | ## Co...

(QB_NEW_EN)


[grammar] ~297-~297: There might be a mistake here.
Context: ...ke your changes 4. Test thoroughly with nx test maildev 5. Submit a pull request ## License This ...

(QB_NEW_EN)

apps/puppeteer/README.md

[grammar] ~7-~7: There might be a mistake here.
Context: ...L to PDF** - Convert any web page to PDF - 📄 HTML to PDF - Convert raw HTML co...

(QB_NEW_EN)


[grammar] ~8-~8: There might be a mistake here.
Context: ... PDF** - Convert raw HTML content to PDF - 🖼️ URL to Image - Generate screensh...

(QB_NEW_EN)


[grammar] ~9-~9: There might be a mistake here.
Context: ...ge** - Generate screenshots of web pages - 🎨 HTML to Image - Convert HTML cont...

(QB_NEW_EN)


[grammar] ~10-~10: There might be a mistake here.
Context: ...Image** - Convert HTML content to images - ⚙️ Configurable - Supports all Puppe...

(QB_NEW_EN)


[grammar] ~11-~11: There might be a mistake here.
Context: ...e** - Supports all Puppeteer PDF options - 🚀 Fast & Lightweight - Optimized fo...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ...ightweight** - Optimized for performance - 🐳 Docker Ready - Easy deployment wi...

(QB_NEW_EN)


[grammar] ~13-~13: There might be a mistake here.
Context: ...er Ready** - Easy deployment with Docker - 🔧 REST API - Simple HTTP interface ...

(QB_NEW_EN)


[grammar] ~14-~14: There might be a mistake here.
Context: ... 🔧 REST API - Simple HTTP interface ## Quick Start ### Run with Docker ```bas...

(QB_NEW_EN)


[grammar] ~140-~140: There might be a mistake here.
Context: ... format (A4, Letter, Legal, etc.) | A4 | | landscape | boolean | Paper orientat...

(QB_NEW_EN)


[grammar] ~141-~141: There might be a mistake here.
Context: ... | boolean | Paper orientation | false | | printBackground | boolean | Print ba...

(QB_NEW_EN)


[grammar] ~142-~142: There might be a mistake here.
Context: ...an | Print background graphics | false | | margin | object | Page margins | {} ...

(QB_NEW_EN)


[grammar] ~143-~143: There might be a mistake here.
Context: ... margin | object | Page margins | {} | | scale | number | Scale of the webpag...

(QB_NEW_EN)


[grammar] ~144-~144: There might be a mistake here.
Context: ...r | Scale of the webpage rendering | 1 | | displayHeaderFooter | boolean | Disp...

(QB_NEW_EN)


[grammar] ~145-~145: There might be a mistake here.
Context: ...an | Display header and footer | false | | headerTemplate | string | HTML templ...

(QB_NEW_EN)


[grammar] ~146-~146: There might be a mistake here.
Context: ... | string | HTML template for header | | | footerTemplate | string | HTML templ...

(QB_NEW_EN)


[grammar] ~151-~151: There might be a mistake here.
Context: ... Option | Type | Description | Default | |--------|------|-------------|---------...

(QB_NEW_EN)


[grammar] ~152-~152: There might be a mistake here.
Context: ...--------|------|-------------|---------| | type | string | Image format (png, j...

(QB_NEW_EN)


[grammar] ~153-~153: There might be a mistake here.
Context: ...| Image format (png, jpeg, webp) | png | | quality | number | Image quality (0-...

(QB_NEW_EN)


[grammar] ~154-~154: There might be a mistake here.
Context: ... Image quality (0-100, jpeg only) | 80 | | fullPage | boolean | Capture full sc...

(QB_NEW_EN)


[grammar] ~155-~155: There might be a mistake here.
Context: ...| Capture full scrollable page | false | | viewport | object | Page viewport si...

(QB_NEW_EN)


[grammar] ~156-~156: There might be a mistake here.
Context: ...wport size | {width: 800, height: 600} | | clip | object | Capture specific are...

(QB_NEW_EN)


[grammar] ~243-~243: There might be a mistake here.
Context: ...al Development Setup #### Prerequisites - Node.js 18+ - Chrome/Chromium browser - ...

(QB_NEW_EN)


[grammar] ~244-~244: There might be a mistake here.
Context: ... Setup #### Prerequisites - Node.js 18+ - Chrome/Chromium browser - Nx CLI #### S...

(QB_NEW_EN)


[grammar] ~245-~245: There might be a mistake here.
Context: ... - Node.js 18+ - Chrome/Chromium browser - Nx CLI #### Start Development Server `...

(QB_NEW_EN)


[grammar] ~310-~310: There might be a mistake here.
Context: ... Ports | Port | Service | Description | |------|---------|-------------| | 3000 ...

(QB_NEW_EN)


[grammar] ~311-~311: There might be a mistake here.
Context: ...ption | |------|---------|-------------| | 3000 | HTTP | REST API server | ## En...

(QB_NEW_EN)


[grammar] ~316-~316: There might be a mistake here.
Context: ...es | Variable | Default | Description | |----------|---------|-------------| | `...

(QB_NEW_EN)


[grammar] ~317-~317: There might be a mistake here.
Context: ...n | |----------|---------|-------------| | PORT | 3000 | Server port | | `NODE_...

(QB_NEW_EN)


[grammar] ~318-~318: There might be a mistake here.
Context: ...-------| | PORT | 3000 | Server port | | NODE_ENV | development | Node.js env...

(QB_NEW_EN)


[grammar] ~319-~319: There might be a mistake here.
Context: ...V| development | Node.js environment | |PUPPETEER_EXECUTABLE_PATH` | | Custom...

(QB_NEW_EN)


[grammar] ~320-~320: There might be a mistake here.
Context: ...ATH| | Custom Chrome executable path | |PUPPETEER_SKIP_CHROMIUM_DOWNLOAD` | |...

(QB_NEW_EN)


[grammar] ~327-~327: There might be a mistake here.
Context: ...Common Issues Chrome fails to launch: - Ensure sufficient memory is allocated to...

(QB_NEW_EN)


[grammar] ~332-~332: There might be a mistake here.
Context: ...executable permissions Memory issues: - Increase Docker memory limits - Use `--m...

(QB_NEW_EN)


[grammar] ~337-~337: There might be a mistake here.
Context: ...der adding swap space Timeout errors: - Increase timeout values in requests - Ch...

(QB_NEW_EN)


[grammar] ~342-~342: There might be a mistake here.
Context: ...are accessible Font rendering issues: - Install additional fonts in the containe...

(QB_NEW_EN)


[grammar] ~375-~375: There might be a mistake here.
Context: ...ke your changes 4. Test thoroughly with nx test puppeteer 5. Submit a pull request ## License This ...

(QB_NEW_EN)

apps/mailcatcher/README.md

[grammar] ~7-~7: There might be a mistake here.
Context: ...tches all outbound emails in development - 🌐 Web interface to view caught emails -...

(QB_NEW_EN)


[grammar] ~8-~8: There might be a mistake here.
Context: ...- 🌐 Web interface to view caught emails - 🔍 Search and filter emails - 📱 Respons...

(QB_NEW_EN)


[grammar] ~9-~9: There might be a mistake here.
Context: ...ght emails - 🔍 Search and filter emails - 📱 Responsive design for mobile viewing ...

(QB_NEW_EN)


[grammar] ~10-~10: There might be a mistake here.
Context: ... 📱 Responsive design for mobile viewing - 🚀 Lightweight and fast - 🐳 Ready-to-us...

(QB_NEW_EN)


[grammar] ~11-~11: There might be a mistake here.
Context: ...mobile viewing - 🚀 Lightweight and fast - 🐳 Ready-to-use Docker container ## Qui...

(QB_NEW_EN)


[grammar] ~12-~12: There might be a mistake here.
Context: ... fast - 🐳 Ready-to-use Docker container ## Quick Start ### Run with Docker ```bas...

(QB_NEW_EN)


[grammar] ~39-~39: There might be a mistake here.
Context: ... Ports | Port | Service | Description | |------|---------|-------------| | 1025 ...

(QB_NEW_EN)


[grammar] ~40-~40: There might be a mistake here.
Context: ...ption | |------|---------|-------------| | 1025 | SMTP | Mail server for receivin...

(QB_NEW_EN)


[grammar] ~41-~41: There might be a mistake here.
Context: ...MTP | Mail server for receiving emails | | 1080 | HTTP | Web interface for viewin...

(QB_NEW_EN)


[grammar] ~46-~46: There might be a mistake here.
Context: ...es | Variable | Default | Description | |----------|---------|-------------| | `...

(QB_NEW_EN)


[grammar] ~47-~47: There might be a mistake here.
Context: ...n | |----------|---------|-------------| | SMTP_PORT | 1025 | SMTP server port ...

(QB_NEW_EN)


[grammar] ~48-~48: There might be a mistake here.
Context: ... SMTP_PORT | 1025 | SMTP server port | | HTTP_PORT | 1080 | Web interface por...

(QB_NEW_EN)


[grammar] ~55-~55: There might be a mistake here.
Context: ...int your application's SMTP settings to: - Host: localhost (or your Docker cont...

(QB_NEW_EN)


[grammar] ~56-~56: There might be a mistake here.
Context: ...localhost(or your Docker container IP) - **Port:**1025` - Authentication: Non...

(QB_NEW_EN)


[grammar] ~57-~57: There might be a mistake here.
Context: ...r your Docker container IP) - Port: 1025 - Authentication: None required ### Vie...

(QB_NEW_EN)


[grammar] ~150-~150: There might be a mistake here.
Context: ...erver ``` Can't access web interface: - Ensure port 1080 is not blocked by firew...

(QB_NEW_EN)


[grammar] ~151-~151: There might be a mistake here.
Context: ...ce:** - Ensure port 1080 is not blocked by firewall - Check if Docker container is...

(QB_NEW_EN)


[grammar] ~152-~152: There might be a mistake here.
Context: ...1080 is not blocked by firewall - Check if Docker container is running: `docker ps...

(QB_NEW_EN)


[grammar] ~155-~155: There might be a mistake here.
Context: ...cher-server` Emails not being caught: - Verify your application is configured to...

(QB_NEW_EN)

🪛 markdownlint-cli2 (0.17.2)
apps/maildev/README.md

88-88: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

apps/puppeteer/README.md

132-132: Multiple headings with the same content

(MD024, no-duplicate-heading)


221-221: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

apps/mailcatcher/README.md

63-63: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

⏰ 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). (2)
  • GitHub Check: test (ubuntu-24.04, arm64)
  • GitHub Check: test (ubuntu-24.04, amd64)
🔇 Additional comments (4)
apps/mailcatcher/README.md (2)

7-12: Verify MailCatcher feature claims (search/responsive).

Please confirm MailCatcher actually supports “Search and filter emails” and a mobile‑responsive UI. If not, remove or adjust these bullets to avoid misleading users.


46-50: Confirm env var names are actually supported by the container.

Verify SMTP_PORT and HTTP_PORT are read by the image; otherwise document the correct names or remove this table.

apps/puppeteer/README.md (2)

51-111: Confirm /image response content type aligns with implementation.

Current server code returns application/pdf for /image (see apps/puppeteer/src/main.ts), while docs imply an image response. Align docs or implementation.


41-49: Verified Nx targets in README match puppeteer’s project.json; no updates needed.

@philiplehmann philiplehmann force-pushed the main branch 2 times, most recently from 9f2a03d to 61a5e96 Compare January 22, 2026 06:31
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 5

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/puppeteer/README.md (1)

314-336: ⚠️ Potential issue | 🔴 Critical

Unresolved merge conflict — blocks rendering of entire lower half of the file.

The conflict markers (<<<<<<< HEAD, =======, >>>>>>> f872277) are still present in the file. The Environment Variables table, Troubleshooting, Security Considerations, Contributing, and License sections are all hidden inside the conflict. Resolve by keeping the new side (=======>>>>>>>) and discarding the old bun-based content.

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

In `@apps/puppeteer/README.md` around lines 314 - 336, The README contains
unresolved git conflict markers (<<<<<<< HEAD, =======, >>>>>>>) surrounding an
old bun-based block; remove the entire conflict block and keep the new side (the
content after ======= and before >>>>>>>) so the Environment Variables,
Troubleshooting, Security Considerations, Contributing, and License sections are
restored; specifically delete the lines starting with <<<<<<< HEAD and the bun
commands block (the start puppeteer server / run *-local tests / update
snapshots snippets) and the ======= marker, then ensure only the new downstream
content remains and the file renders as valid markdown (no leftover conflict
markers).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/mailcatcher/README.md`:
- Around line 63-65: The fenced code block containing the URL
"http://localhost:1080" lacks a language specifier and triggers MD040; update
that fenced block to include the language tag text (i.e., change the opening ```
to ```text) so the block becomes a text-marked code fence containing the URL.
- Around line 132-133: The docker run example includes a misleading volume mount
(-v $(pwd):/app) that suggests live-reload but MailCatcher is a prebuilt gem
with no app source to mount; remove the volume flag from the example command and
update the example docker run line (the one using "docker run -p 1080:1080 -p
1025:1025 -v $(pwd):/app mailcatcher") to omit "-v $(pwd):/app", leaving only
the necessary port mappings and image name.

In `@apps/maildev/README.md`:
- Around line 88-90: The fenced code block containing the URL
"http://localhost:1080" should include a language specifier to improve syntax
highlighting and linting; update the block in README.md that currently shows ```
on its own to use ```text (i.e., change the opening fence for the block with the
"http://localhost:1080" content to "```text").
- Line 3: Update the compound modifier "easy to use" in the README sentence to
the hyphenated form "easy-to-use" when used before the noun; locate the sentence
containing "MailDev is a simple way to test your project's generated emails
during development with an easy to use web interface" and change "easy to use
web interface" to "easy-to-use web interface".

In `@apps/puppeteer/README.md`:
- Around line 219-222: Update the fenced code block containing the browser
launch error in the README so it includes a language specifier; locate the block
that shows "Failed to launch the browser process!" / "The hardware on this
system lacks support for the sse3 instruction set." and change its opening fence
to use a language tag (use "text") so Markdown lint MD040 is satisfied.

---

Outside diff comments:
In `@apps/puppeteer/README.md`:
- Around line 314-336: The README contains unresolved git conflict markers
(<<<<<<< HEAD, =======, >>>>>>>) surrounding an old bun-based block; remove the
entire conflict block and keep the new side (the content after ======= and
before >>>>>>>) so the Environment Variables, Troubleshooting, Security
Considerations, Contributing, and License sections are restored; specifically
delete the lines starting with <<<<<<< HEAD and the bun commands block (the
start puppeteer server / run *-local tests / update snapshots snippets) and the
======= marker, then ensure only the new downstream content remains and the file
renders as valid markdown (no leftover conflict markers).

---

Duplicate comments:
In `@apps/maildev/README.md`:
- Around line 197-203: Replace the incorrect Nx target usage "nx build maildev"
/ "npx nx build maildev" in the Development section with the correct "nx
docker-push maildev" / "npx nx docker-push maildev" so the commands match the
Quick Start and use the defined docker-push target; update the surrounding
comment text to indicate it builds and pushes the Docker image to avoid
confusion (search for the literal strings "nx build maildev" and "npx nx build
maildev" in the README and replace them).

In `@apps/puppeteer/README.md`:
- Around line 250-253: The shell export statements are using invalid syntax;
update each export to assign the value with '=' so the variables actually get
set: change export PUPPETEER_EXECUTABLE_PATH "/Applications/..." to use export
PUPPETEER_EXECUTABLE_PATH="/Applications/Google Chrome.app/Contents/MacOS/Google
Chrome", change export TEST_SERVER_RUNNER local to export
TEST_SERVER_RUNNER=local, and change export DEBUG puppeteer:* to export
DEBUG="puppeteer:*" so the environment variables are correctly assigned and
quoted where needed.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 5

🧹 Nitpick comments (1)
apps/mailcatcher/README.md (1)

24-33: version field is obsolete in Docker Compose V2.

The top-level version key is ignored by Compose V2+ and can be safely removed. The same pattern appears in apps/puppeteer/README.md and apps/maildev/README.md.

♻️ Proposed fix
-version: '3.8'
 services:
   mailcatcher:
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/mailcatcher/README.md` around lines 24 - 33, Remove the obsolete
top-level "version" key from the compose snippet (the block that defines the
mailcatcher service) and update the YAML to start directly with "services:" so
it conforms to Docker Compose V2+, then apply the same change to the similar
snippets in apps/puppeteer/README.md and apps/maildev/README.md to remove their
"version" fields and keep the "mailcatcher" / corresponding service definitions
intact and valid YAML.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/mailcatcher/README.md`:
- Around line 46-49: The README's Environment Variables table listing SMTP_PORT
and HTTP_PORT is misleading because the Dockerfile's hardcoded CMD in the
Dockerfile does not read these env vars (so setting SMTP_PORT/HTTP_PORT has no
effect); either remove the SMTP_PORT/HTTP_PORT rows from the table or update the
text to explicitly state that MailCatcher port changes require rebuilding the
image (or modifying the Dockerfile/CMD to use those env vars), and reference the
Dockerfile, CMD, and SMTP_PORT/HTTP_PORT identifiers so reviewers can locate the
relevant code to correct.

In `@apps/maildev/README.md`:
- Around line 282-290: The "Mobile Responsive" entry is inconsistent: the
comparison table marks MailCatcher as ❌ while the MailCatcher README added in
this PR explicitly states "📱 Responsive design for mobile viewing"; pick the
correct truth and make both sources match. Either change the table's "Mobile
Responsive" row for MailCatcher to ✅ to reflect the README claim, or edit the
MailCatcher README's "📱 Responsive design for mobile viewing" line to indicate
it is not mobile responsive; update the "Mobile Responsive" table row (the table
header and MailCatcher cell) and/or the README sentence so both use the same
wording and emoji.
- Line 3: Reword the opening sentence so the modifier "built on top of Node.js"
clearly attaches to MailDev rather than "your machine": edit the first sentence
("MailDev is a simple way to test your project's generated emails during
development with an easy-to-use web interface that runs on your machine built on
top of Node.js.") to move or rephrase "built on top of Node.js" adjacent to
"MailDev" (e.g., "MailDev, built on top of Node.js, is a simple way..." or
"...web interface that runs on your machine. MailDev is built on top of Node.js
and is a simple way..."), updating README.md accordingly.

In `@apps/puppeteer/README.md`:
- Line 134: Update the README line that links to the old devdocs.io mirror:
replace the URL "https://devdocs.io/puppeteer/index#pagepdfoptions" with the
official Puppeteer docs URL "https://pptr.dev/api/puppeteer.pdfoptions" in the
sentence referencing "Puppeteer PDF options" (the Page.pdf() options
documentation), ensuring the link text remains accurate and points to the
canonical Page.pdf() options page.
- Around line 326-329: Update the README's Chrome troubleshooting section to add
a security caveat to the "--no-sandbox" recommendation: explicitly state that
"--no-sandbox" disables Chrome's renderer process isolation and increases attack
surface, and recommend using it only when Docker-level isolation (user
namespaces, seccomp, caps) is enforced and all input HTML/URLs are validated or
sanitized; also suggest safer alternatives (increase Docker memory, run with
proper sandboxing, or run Chrome in a dedicated, minimal-privilege container)
and warn against using "--no-sandbox" in untrusted-input or public-facing
contexts.

---

Nitpick comments:
In `@apps/mailcatcher/README.md`:
- Around line 24-33: Remove the obsolete top-level "version" key from the
compose snippet (the block that defines the mailcatcher service) and update the
YAML to start directly with "services:" so it conforms to Docker Compose V2+,
then apply the same change to the similar snippets in apps/puppeteer/README.md
and apps/maildev/README.md to remove their "version" fields and keep the
"mailcatcher" / corresponding service definitions intact and valid YAML.

enhanced features, usage instructions, and configuration options
Clarify Docker Compose usage, environment variable handling, and
sandboxing guidance. Fix documentation links and feature table.
- Rewrite and expand README.md files for nx-cache-server, pdftk,
  poppler,
  puppeteer, tesseract, and unoserver apps
- Add feature lists, Docker/Docker Compose quick start guides, and
  detailed
  API usage examples
- Standardize documentation structure and improve clarity
- Add online test status badges for service health monitoring
@philiplehmann philiplehmann merged commit 814b3dc into main Feb 25, 2026
20 checks passed
@philiplehmann philiplehmann deleted the feature/update-readmes branch February 25, 2026 00:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant