Skip to content

Comments

feat: Added Docs & Blog Integration with Navigation#1583

Closed
JagjeevanAK wants to merge 20 commits intoMail-0:stagingfrom
JagjeevanAK:jagjeeva/docs
Closed

feat: Added Docs & Blog Integration with Navigation#1583
JagjeevanAK wants to merge 20 commits intoMail-0:stagingfrom
JagjeevanAK:jagjeeva/docs

Conversation

@JagjeevanAK
Copy link

@JagjeevanAK JagjeevanAK commented Jul 1, 2025

Signed-off-by: Jagjeevan Kashid jagjeevandev97@gmail.com

Issue : #1298

Description

Added comprehensive documentation and blog functionality to the Zero project. Integrated professional documentation site and blog into the main application with proper navigation structure.

Key Changes:

  • Implemented Fumadocs-powered documentation site at apps/docs/
  • Added professional blog functionality with MDX support
  • Integrated documentation and blog links into main navigation
  • Reorganized navigation structure to separate company info from resources
  • Updated project README with new documentation features

Type of Change

  • ✨ New feature (non-breaking change which adds functionality)
  • 📝 Documentation update
  • 🎨 UI/UX improvement

Areas Affected

  • User Interface/Experience
  • Documentation
  • Development Workflow

Testing Done

  • Manual testing performed
  • Cross-browser testing (if UI changes)
  • Mobile responsiveness verified (if UI changes)

Testing Details:

  • Verified documentation site runs on http://localhost:3001
  • Tested blog functionality with sample post
  • Confirmed navigation links work correctly on desktop and mobile
  • Validated MDX rendering and table of contents generation
  • Ensured proper external link handling in navigation menus

Security Considerations

  • No sensitive data is exposed
  • Input validation is implemented

Notes: All documentation and blog content uses static MDX files with no dynamic user input.

Checklist

  • I have read the CONTRIBUTING document
  • My code follows the project's style guidelines
  • I have performed a self-review of my code
  • I have commented my code, particularly in complex areas
  • I have updated the documentation
  • My changes generate no new warnings
  • All tests pass locally

Additional Notes

Navigation Structure Changes:

  • Moved Documentation and Blog links from "Company" menu to "Resources" menu
  • Resources menu now contains: Documentation, Blog, GitHub, Twitter, LinkedIn, Discord
  • Company menu now focuses on: About, Privacy, Terms of Service, Contributors

Technical Implementation:

  • Uses Fumadocs framework for optimal documentation experience
  • Implements proper MDX compilation and source generation
  • Includes responsive design for both desktop and mobile navigation
  • Handles external links with proper target and rel attributes

Documentation Features:

  • Comprehensive getting started guides
  • Professional blog (sample blog is added)
  • Table of contents generation
  • Search functionality (via Fumadocs)
  • Modern, production-ready design

Live Demo

Live link to docs: https://zero-docs-pi.vercel.app/


By submitting this pull request, I confirm that my contribution is made under the terms of the project's license.

Summary by CodeRabbit

  • New Features

    • Introduced a comprehensive documentation and blog site for Zero, featuring interactive guides, architecture details, deployment instructions, and a professional blog.
    • Added dynamic rendering of documentation and blog pages with MDX support, search functionality, Mermaid diagram integration, and responsive layouts.
    • Enhanced navigation in the main app with external links to the new documentation and blog.
  • Documentation

    • Added extensive guides covering getting started, installation, configuration, architecture, deployment, contributing, and MCP system usage.
    • Updated main and docs READMEs with detailed instructions, resources, and contribution guidelines.
  • Style

    • Introduced global and component-level styling for the documentation site, including Tailwind CSS and custom CSS for consistent appearance.
  • Chores

    • Added configuration files for Next.js, TypeScript, ESLint, PostCSS, and package management to support the new documentation site.
    • Updated monorepo scripts and workspace configuration to integrate documentation development and build workflows.

Signed-off-by: Jagjeevan Kashid <jagjeevandev97@gmail.com>
Signed-off-by: Jagjeevan Kashid <jagjeevandev97@gmail.com>
Signed-off-by: Jagjeevan Kashid <jagjeevandev97@gmail.com>
Signed-off-by: Jagjeevan Kashid <jagjeevandev97@gmail.com>
…ection

Signed-off-by: Jagjeevan Kashid <jagjeevandev97@gmail.com>
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jul 1, 2025

Warning

Rate limit exceeded

@JagjeevanAK has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 23 minutes and 4 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between e9a2079 and 46d97d2.

📒 Files selected for processing (1)
  • apps/mail/components/navigation.tsx (5 hunks)

Walkthrough

This change introduces a complete documentation and blog system for the Zero project. It adds a new documentation app using Next.js, MDX, and Fumadocs, with comprehensive guides, architecture, deployment, configuration, and contributing documentation. Navigation, theming, ESLint, TypeScript, and styling configurations are included. The main repository README and mail app navigation are updated to reference the new documentation resources.

Changes

File(s) / Area Summary of Changes
README.md, apps/mail/components/navigation.tsx,
apps/mail/components/ui/navigation-menu.tsx
Added "Documentation" and "Blog" links to navigation; updated README with a new documentation section.
apps/docs/**/* (multiple files) Introduced a new documentation app: Next.js setup, layouts, page components, global styles, config, ESLint, TS, PostCSS, and package files. Added content for guides, architecture, deployment, configuration, blog, and contributing.
apps/docs/components/Mermaid.tsx,
apps/docs/mdx-components.tsx
Added support for rendering Mermaid diagrams in MDX content via a custom React component and MDX component mapping.
apps/docs/lib/source.ts,
apps/docs/source.config.ts
Set up Fumadocs sources and configuration for docs and blog collections, including schema extensions and syntax highlighting.
package.json Added scripts for developing, building, and starting the docs app.
pnpm-workspace.yaml Updated zod version and minor formatting.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant DocsApp (Next.js)
    participant Fumadocs Source
    participant MDX Renderer
    participant Blog/Docs Content

    User->>DocsApp (Next.js): Request /docs or /blog page
    DocsApp->>Fumadocs Source: Fetch page/blog data by slug
    Fumadocs Source-->>DocsApp: Return content metadata and MDX
    DocsApp->>MDX Renderer: Render MDX with custom components
    MDX Renderer->>Blog/Docs Content: Render content (including Mermaid diagrams)
    Blog/Docs Content-->>MDX Renderer: Content HTML
    MDX Renderer-->>DocsApp: Rendered page
    DocsApp-->>User: Serve documentation or blog page
Loading

Suggested reviewers

  • nizzyabi
  • MrgSub

Poem

🐇
In burrows deep, I found a guide,
With docs and blogs now side by side.
Diagrams dance, the guides are new,
From setup steps to AI's view.
Hop along, explore with glee—
Zero's docs are here, for you and me!
📚✨

✨ Finishing Touches
  • 📝 Generate Docstrings

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
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

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

PR Summary

Comprehensive integration of a Fumadocs-powered documentation site and blog functionality into the Zero project, introducing professional documentation features and improved navigation structure.

  • Incorrect port reference in docs README (shows 3000) conflicts with PR description (states 3001), needs consistency
  • Multiple dependency version issues in apps/docs/package.json: invalid 'catalog:' specifiers and non-existent versions (e.g., tailwindcss v4.1.10)
  • Forward-dated blog post content (July 2025) in apps/docs/content/blog/sample.mdx could confuse users
  • Potential security concern in apps/docs/components/Mermaid.tsx using 'loose' security level for diagram rendering
  • PostCSS configuration in apps/docs/postcss.config.mjs contains incorrect Tailwind CSS plugin name

35 files reviewed, 15 comments
Edit PR Review Bot Settings | Greptile

// Optional: Configure languages (defaults include common ones)
langs: ['javascript', 'typescript', 'jsx', 'tsx', 'json', 'bash', 'shell', 'python', 'perl', 'ini', 'yaml', 'markdown'],
// Optional: Enable inline code highlighting
inline: 'tailing-curly-colon',
Copy link
Contributor

Choose a reason for hiding this comment

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

syntax: 'tailing-curly-colon' appears to be a typo of 'trailing-curly-colon'

Comment on lines +26 to +33
<Steps>
<Step>Fork the Repository</Step>
<Step>Clone the Repository</Step>
<Step>Install Dependencies</Step>
<Step>Environment Setup</Step>
<Step>Database Setup</Step>
<Step>Start Development Server</Step>
</Steps>
Copy link
Contributor

Choose a reason for hiding this comment

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

logic: Steps component shows 6 steps but section only details 5 steps (missing 'Fork the Repository' step despite being listed). Add fork instructions or remove from steps.

Suggested change
<Steps>
<Step>Fork the Repository</Step>
<Step>Clone the Repository</Step>
<Step>Install Dependencies</Step>
<Step>Environment Setup</Step>
<Step>Database Setup</Step>
<Step>Start Development Server</Step>
</Steps>
<Steps>
<Step>Clone the Repository</Step>
<Step>Install Dependencies</Step>
<Step>Environment Setup</Step>
<Step>Database Setup</Step>
<Step>Start Development Server</Step>
</Steps>

Copy link
Author

Choose a reason for hiding this comment

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

@MrgSub wrong suggestion according to me.

Comment on lines +20 to +22
- **Node.js** (v18 or higher)
- **pnpm** (v8 or higher)
- **Git**
Copy link
Contributor

Choose a reason for hiding this comment

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

style: Add Docker to prerequisites since it's required for database setup (mentioned later in line 91).

'radial-gradient(circle at 70% 10%, rgba(255,50,100,0.5), transparent)',
'radial-gradient(circle at 0% 80%, rgba(190,0,255,0.5), transparent)',
'radial-gradient(circle at 50% 50%, rgba(50,50,255,0.3), transparent)',
`url("data:image/svg+xml,${encodeURIComponent(svg)}")`,
Copy link
Contributor

Choose a reason for hiding this comment

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

style: SVG string being encoded inline on every render - consider moving to a static asset

Signed-off-by: Jagjeevan Kashid <jagjeevandev97@gmail.com>
Signed-off-by: Jagjeevan Kashid <jagjeevandev97@gmail.com>
@JagjeevanAK
Copy link
Author

Hello team this PR is ready to merge.

Copy link
Contributor

@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: 9

🧹 Nitpick comments (27)
apps/docs/app/global.css (1)

8-10: Hard-coded underline colour may fail WCAG contrast in dark mode

The hex value #89b5fa looks fine on a light background, but could be almost invisible against a dark theme. Consider using CSS custom properties (e.g. var(--link-underline)) and defining separate values in @media (prefers-color-scheme: dark) so the underline is always visible.

-    text-decoration-color: #89b5fa !important;
+    text-decoration-color: var(--link-underline, #89b5fa) !important;
apps/docs/eslint.config.mjs (1)

3-10: ESLint config layering can be simplified

An array wrapper is only needed when you actually add multiple configs. If the only goal is to tweak a few rules, extending the base object keeps things readable:

import base from '@zero/eslint-config';

export default {
  ...base,
  rules: {
    ...base.rules,
    /* docs-specific overrides */
  },
};
apps/docs/app/api/search/route.ts (1)

4-4: Consider exporting HEAD handler for better caching

Search endpoints often benefit from a quick HEAD check. createFromSource exposes { GET }; expose { HEAD } too if the helper supports it.

pnpm-workspace.yaml (1)

7-7: Prefer caret (^) to avoid pinning zod to an exact patch version

Pinning zod to 3.25.67 means you will miss future patch-level bug-fixes and security releases. Unless you have a strong reason to lock the version, keep the caret so new compatible releases are picked up automatically.

-  zod: 3.25.67
+  zod: ^3.25.67
apps/docs/next.config.mjs (1)

1-10: Missing output: 'standalone' / runtime flags may hurt deploy-time flexibility

The config is minimal and works locally, but when deploying (especially to Docker/Vercel) you often want:

output: 'standalone',           // smaller image / server bundle
experimental: { typedRoutes: true }

If the docs site must run entirely at runtime (no pre-built SSG), apply force-dynamic per the project’s Docker guideline (see long-term learning). Evaluate and extend the config before shipping.

apps/docs/app/(home)/page.tsx (1)

3-19: Placeholder copy — replace “Hello World” before production

The homepage still shows “Hello World”. That’s fine for now, but don’t forget to swap it for project-specific messaging before releasing.

apps/docs/app/layout.tsx (1)

14-15: Consider hosting favicon locally for better reliability.

Using external URLs for favicons introduces a dependency on the external service (https://0.email). If this service becomes unavailable, the favicon will fail to load. Consider hosting the favicon files locally in the public directory for better reliability and performance.

-        <link rel="icon" href="https://0.email/white-icon.svg" type="image/svg+xml" />
-        <link rel="shortcut icon" href="https://0.email/white-icon.svg" type="image/svg+xml" />
+        <link rel="icon" href="/favicon.svg" type="image/svg+xml" />
+        <link rel="shortcut icon" href="/favicon.svg" type="image/svg+xml" />
apps/docs/mdx-components.tsx (1)

6-17: LGTM! Clean MDX components implementation with Mermaid support.

The implementation correctly detects Mermaid code blocks and falls back to standard code rendering. The component merging pattern follows MDX best practices.

Consider adding type safety for the children conversion:

-        return <Mermaid chart={String(children)} />;
+        return <Mermaid chart={String(children ?? '')} />;
apps/docs/app/(home)/blog/page.tsx (2)

5-9: Improve date sorting robustness.

The current sorting logic falls back to filename when date is missing, which could lead to inconsistent ordering since filenames don't follow date format.

Consider using a more robust approach:

  const posts = [...blog.getPages()].sort(
    (a, b) => {
-     new Date(b.data.date ?? b.file.name).getTime() -
-     new Date(a.data.date ?? a.file.name).getTime(),
+     const dateA = a.data.date ? new Date(a.data.date) : new Date(0);
+     const dateB = b.data.date ? new Date(b.data.date) : new Date(0);
+     return dateB.getTime() - dateA.getTime();
    },
  );

11-21: Consider extracting the SVG for reusability.

The inline SVG noise filter could be extracted to a separate component or constant for better maintainability and reusability across the docs app.

Consider creating a components/NoisePattern.tsx component:

export const NoisePattern = () => (
  <svg viewBox='0 0 500 500' xmlns='http://www.w3.org/2000/svg'>
    <filter id='noiseFilter'>
      <feTurbulence 
        type='fractalNoise' 
        baseFrequency='0.65' 
        numOctaves='3' 
        stitchTiles='stitch'/>
    </filter>
    <rect width='100%' height='100%' filter='url(#noiseFilter)'/>
  </svg>
);
apps/docs/components/Mermaid.tsx (1)

14-14: Consider using deep comparison for chart changes.

The current string comparison may miss chart updates if the chart content is identical but other dependencies change. Consider using a more robust comparison method if needed in the future.

-        if (currentChartRef.current === chart || !containerRef.current) return;
+        if (currentChartRef.current === chart.trim() || !containerRef.current) return;
apps/docs/app/layout.config.tsx (1)

32-37: Consider hosting the logo locally for reliability.

The logo is currently loaded from an external domain (0.email). If this domain becomes unavailable, it could break the navigation. Consider hosting the logo assets locally in the public directory.

-        <img 
-          width="24"
-          height="24"
-          src="https://0.email/white-icon.svg" 
-          alt="Logo" 
-        />
+        <img 
+          width="24"
+          height="24"
+          src="/logo.svg" 
+          alt="Logo" 
+        />
apps/mail/components/navigation.tsx (1)

288-318: Consider simplifying the external resource handling logic.

The current implementation handles external and platform resources separately, which creates complexity. Consider refactoring for better maintainability.

-              {resources.map((resource) => {
-                if (resource.external && !resource.platform) {
-                  // Handle Documentation and Blog links
-                  return (
-                    <a
-                      key={resource.title}
-                      href={resource.href}
-                      target="_blank"
-                      rel="noopener noreferrer"
-                      className="flex items-center gap-2 font-medium"
-                    >
-                      {resource.title}
-                    </a>
-                  );
-                }
-                
-                if (resource.platform) {
-                  // Handle social platform links
-                  const Icon = IconComponent[resource.platform];
-                  return (
-                    <Link
-                      key={resource.title}
-                      to={resource.href}
-                      className="flex items-center gap-2 font-medium"
-                    >
-                      <Icon className="dark:fill-muted-foreground h-5 w-5" />
-                    </Link>
-                  );
-                }
-                
-                return null;
+              {resources.map((resource) => {
+                const isExternal = resource.external || resource.platform;
+                const linkProps = isExternal 
+                  ? { target: "_blank", rel: "noopener noreferrer" }
+                  : {};
+                
+                if (resource.platform) {
+                  const Icon = IconComponent[resource.platform];
+                  return (
+                    <a
+                      key={resource.title}
+                      href={resource.href}
+                      {...linkProps}
+                      className="flex items-center gap-2 font-medium"
+                    >
+                      <Icon className="dark:fill-muted-foreground h-5 w-5" />
+                    </a>
+                  );
+                }
+                
+                if (resource.external) {
+                  return (
+                    <a
+                      key={resource.title}
+                      href={resource.href}
+                      {...linkProps}
+                      className="flex items-center gap-2 font-medium"
+                    >
+                      {resource.title}
+                    </a>
+                  );
+                }
+                
+                return null;
apps/docs/content/docs/getting-started/index.mdx (1)

38-40: Update placeholder repository URL.

The clone command uses a placeholder URL that should be updated to reflect the actual repository structure.

-git clone https://github.com/your-username/zero.git
+git clone https://github.com/your-username/Zero.git

Note: Ensure the repository name case matches the actual GitHub repository.

apps/docs/README.md (1)

58-58: Update port reference to avoid conflicts.

The documentation mentions running on port 3000, which conflicts with the main mail app. Consider updating to reflect the actual docs port.

-The documentation will be available at [http://localhost:3000](http://localhost:3000).
+The documentation will be available at [http://localhost:3001](http://localhost:3001).
apps/docs/content/docs/contributing.mdx (1)

390-415: Testing framework placeholder needs attention.

The testing section indicates the framework is "being set up" with placeholder commands. Consider either implementing the testing framework or removing the placeholder commands until ready.

Would you like me to help design the testing strategy and implementation plan, or should this section be simplified until the testing framework is ready?

apps/docs/content/blog/sample.mdx (2)

31-35: Missing definite article (“the”)

enterprise levelthe enterprise level

-ensure performance and scalability at enterprise level:
+ensure performance and scalability at the enterprise level:

80-86: Compound adjective should be hyphenated

Open Source LeadershipOpen-Source Leadership
open source code (when used adjectivally) → open-source code

This improves readability and aligns with common style guides.

Also applies to: 93-95

apps/docs/content/docs/getting-started/installation.mdx (1)

44-53: Duplicated phrasing inside code block

The line comments repeat “Via” twice:

# Via npm
npm install -g pnpm

# Via Homebrew (macOS)
brew install pnpm

# Via curl
curl -fsSL https://get.pnpm.io/install.sh | sh

Consider dropping the second “Via” for brevity:

-# Via npm
+# npm
 ...
-# Via Homebrew (macOS)
+# Homebrew (macOS)
 ...
-# Via curl
+# curl
apps/docs/content/docs/getting-started/configuration.mdx (4)

40-79: Flag placeholder & quoting style in .env example

  1. Wrapping DATABASE_URL in double-quotes is harmless for most shells, but some orchestration tools (e.g. Docker env_file) treat the quotes as literal characters.
  2. Secrets (BETTER_AUTH_SECRET, SMTP credentials, etc.) are shown with weak or obviously fake values; readers often copy/paste these verbatim into real deployments.

Consider:

-DATABASE_URL="postgresql://postgres:postgres@localhost:5432/zerodotemail"
+DATABASE_URL=postgresql://postgres:postgres@localhost:5432/zerodotemail  # no quotes
+# 👉 Always replace example secrets; never use these values in production

68-71: Empty AI_SYSTEM_PROMPT can break runtime validation

If the application expects this var to be non-empty (Zod schema, runtime check), shipping an example with "" will surface confusing errors in first-time setups. Either omit the var or give a safe default.


454-462: Missing defineConfig import in the Vite example

The snippet references defineConfig without importing it, which will not compile if copied verbatim.

+import { defineConfig } from 'vite'

 export default defineConfig({

423-430: CORS origin list will block mail app on port 5173 in production builds

The logic switches to a single production origin array, discarding the 5173 dev port. That’s fine, but newcomers frequently test the prod build locally. Consider a callout clarifying this or add process.env.ALLOW_DEV_ORIGINS === 'true' escape hatch.

apps/docs/content/docs/architecture.mdx (4)

25-38: Mermaid diagram: SMTP/IMAP nodes aren’t wired to security layer

The diagram omits an auth-/token-management edge between MailAuth (or a dedicated token service). Given subsequent text stresses OAuth token refresh, the visual could mislead readers.


60-67: React Router blurb is misleading

React Router v7 is not a “full-stack web framework”; it’s a client-side/router library with primitives for data APIs. Suggest trimming the description to avoid confusion for engineers comparing it with Remix/Nx.

-<Card title="React Router v7" description="Full-stack web framework with Vite integration for routing and SSR" />
+<Card title="React Router v7" description="Modern routing library with data APIs and Vite integration" />

86-92: Duplicate Cloudflare Workers entry

Lines 88 and 90 list Cloudflare Workers and Cloudflare Durable Objects separately, yet Workers already covers edge runtime. Maybe re-label line 88 as “Workers Runtime” or drop it to avoid duplication.


190-220: useMailStore example lacks initial filter type definition

FilterState is referenced but not defined in the snippet; newcomers copying this will hit TS errors. Either inline the type or add a comment linking to its definition.

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between f3b21a8 and 93bc8c7.

⛔ Files ignored due to path filters (2)
  • apps/docs/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (35)
  • README.md (1 hunks)
  • apps/docs/.gitignore (1 hunks)
  • apps/docs/README.md (1 hunks)
  • apps/docs/app/(home)/blog/[slug]/page.tsx (1 hunks)
  • apps/docs/app/(home)/blog/page.tsx (1 hunks)
  • apps/docs/app/(home)/layout.tsx (1 hunks)
  • apps/docs/app/(home)/page.tsx (1 hunks)
  • apps/docs/app/api/search/route.ts (1 hunks)
  • apps/docs/app/docs/[[...slug]]/page.tsx (1 hunks)
  • apps/docs/app/docs/layout.tsx (1 hunks)
  • apps/docs/app/global.css (1 hunks)
  • apps/docs/app/layout.config.tsx (1 hunks)
  • apps/docs/app/layout.tsx (1 hunks)
  • apps/docs/components/Mermaid.tsx (1 hunks)
  • apps/docs/content/blog/sample.mdx (1 hunks)
  • apps/docs/content/docs/MCP.mdx (1 hunks)
  • apps/docs/content/docs/architecture.mdx (1 hunks)
  • apps/docs/content/docs/contributing.mdx (1 hunks)
  • apps/docs/content/docs/deployment.mdx (1 hunks)
  • apps/docs/content/docs/getting-started/configuration.mdx (1 hunks)
  • apps/docs/content/docs/getting-started/index.mdx (1 hunks)
  • apps/docs/content/docs/getting-started/installation.mdx (1 hunks)
  • apps/docs/content/docs/index.mdx (1 hunks)
  • apps/docs/eslint.config.mjs (1 hunks)
  • apps/docs/lib/source.ts (1 hunks)
  • apps/docs/mdx-components.tsx (1 hunks)
  • apps/docs/next.config.mjs (1 hunks)
  • apps/docs/package.json (1 hunks)
  • apps/docs/postcss.config.mjs (1 hunks)
  • apps/docs/source.config.ts (1 hunks)
  • apps/docs/tsconfig.json (1 hunks)
  • apps/mail/components/navigation.tsx (5 hunks)
  • apps/mail/components/ui/navigation-menu.tsx (2 hunks)
  • package.json (1 hunks)
  • pnpm-workspace.yaml (2 hunks)
🧰 Additional context used
🧠 Learnings (8)
📓 Common learnings
Learnt from: adiologydev
PR: Mail-0/Zero#871
File: docker-compose.yaml:2-21
Timestamp: 2025-05-04T23:21:21.388Z
Learning: To completely disable SSG (Static Site Generation) in Next.js projects for Docker deployments, use 'force-dynamic' for App Router or getServerSideProps for Pages Router in all pages, and set output: 'standalone' in next.config.ts. This allows all environment variables to be passed at runtime instead of build time, improving security for sensitive values.
apps/docs/next.config.mjs (2)
Learnt from: dakdevs
PR: Mail-0/Zero#764
File: apps/mail/lib/ai.ts:50-51
Timestamp: 2025-04-25T08:33:16.956Z
Learning: In Next.js 15, the `headers()` function from 'next/headers' is asynchronous and requires using `await` when called, which is a breaking change from previous versions where it was synchronous.
Learnt from: dakdevs
PR: Mail-0/Zero#764
File: apps/mail/lib/ai.ts:50-51
Timestamp: 2025-04-25T08:33:16.956Z
Learning: In Next.js 15, the `headers()` function from 'next/headers' is asynchronous and requires using `await` when called, which is a breaking change from previous versions where it was synchronous.
apps/docs/.gitignore (2)
Learnt from: adiologydev
PR: Mail-0/Zero#871
File: docker-compose.yaml:2-21
Timestamp: 2025-05-04T23:13:26.825Z
Learning: Next.js requires certain environment variables during static site generation at build time, particularly those with the NEXT_PUBLIC_ prefix. When using Docker, these should be passed as build args, while sensitive values like API keys and secrets should ideally only be passed at runtime as environment variables.
Learnt from: adiologydev
PR: Mail-0/Zero#871
File: docker-compose.yaml:2-21
Timestamp: 2025-05-04T23:21:21.388Z
Learning: To completely disable SSG (Static Site Generation) in Next.js projects for Docker deployments, use 'force-dynamic' for App Router or getServerSideProps for Pages Router in all pages, and set output: 'standalone' in next.config.ts. This allows all environment variables to be passed at runtime instead of build time, improving security for sensitive values.
apps/docs/package.json (1)
Learnt from: adiologydev
PR: Mail-0/Zero#871
File: docker-compose.yaml:2-21
Timestamp: 2025-05-04T23:13:26.825Z
Learning: Next.js requires certain environment variables during static site generation at build time, particularly those with the NEXT_PUBLIC_ prefix. When using Docker, these should be passed as build args, while sensitive values like API keys and secrets should ideally only be passed at runtime as environment variables.
apps/docs/tsconfig.json (1)
Learnt from: adiologydev
PR: Mail-0/Zero#871
File: docker-compose.yaml:2-21
Timestamp: 2025-05-04T23:21:21.388Z
Learning: To completely disable SSG (Static Site Generation) in Next.js projects for Docker deployments, use 'force-dynamic' for App Router or getServerSideProps for Pages Router in all pages, and set output: 'standalone' in next.config.ts. This allows all environment variables to be passed at runtime instead of build time, improving security for sensitive values.
apps/mail/components/navigation.tsx (1)
Learnt from: danteissaias
PR: Mail-0/Zero#902
File: apps/mail/components/connection/add.tsx:77-77
Timestamp: 2025-05-07T16:55:46.513Z
Learning: For the "Upgrade" link in AddConnectionDialog, using a proper <button> element instead of a <span> with onClick is recognized as an accessibility improvement but was deferred as out of scope in PR #902 (CSS variables PR).
apps/docs/app/docs/[[...slug]]/page.tsx (1)
Learnt from: adiologydev
PR: Mail-0/Zero#871
File: docker-compose.yaml:2-21
Timestamp: 2025-05-04T23:21:21.388Z
Learning: To completely disable SSG (Static Site Generation) in Next.js projects for Docker deployments, use 'force-dynamic' for App Router or getServerSideProps for Pages Router in all pages, and set output: 'standalone' in next.config.ts. This allows all environment variables to be passed at runtime instead of build time, improving security for sensitive values.
apps/docs/app/(home)/blog/[slug]/page.tsx (1)
Learnt from: adiologydev
PR: Mail-0/Zero#871
File: docker-compose.yaml:2-21
Timestamp: 2025-05-04T23:21:21.388Z
Learning: To completely disable SSG (Static Site Generation) in Next.js projects for Docker deployments, use 'force-dynamic' for App Router or getServerSideProps for Pages Router in all pages, and set output: 'standalone' in next.config.ts. This allows all environment variables to be passed at runtime instead of build time, improving security for sensitive values.
🧬 Code Graph Analysis (6)
apps/docs/mdx-components.tsx (1)
apps/docs/components/Mermaid.tsx (1)
  • Mermaid (6-47)
apps/docs/app/(home)/blog/page.tsx (2)
apps/docs/app/(home)/blog/[slug]/page.tsx (1)
  • Page (10-64)
apps/docs/source.config.ts (1)
  • blog (12-21)
apps/docs/lib/source.ts (1)
apps/docs/source.config.ts (2)
  • docs (25-32)
  • blog (12-21)
apps/docs/app/api/search/route.ts (1)
apps/docs/lib/source.ts (1)
  • source (5-9)
apps/docs/app/layout.tsx (2)
apps/docs/app/(home)/layout.tsx (1)
  • Layout (5-7)
apps/docs/app/docs/layout.tsx (1)
  • Layout (6-12)
apps/docs/app/(home)/blog/[slug]/page.tsx (4)
apps/docs/app/(home)/blog/page.tsx (1)
  • Page (4-63)
apps/docs/source.config.ts (1)
  • blog (12-21)
apps/mail/components/ui/button.tsx (1)
  • buttonVariants (71-71)
apps/docs/mdx-components.tsx (1)
  • getMDXComponents (6-17)
🪛 Biome (1.9.4)
apps/docs/components/Mermaid.tsx

[error] 46-46: Avoid passing content using the dangerouslySetInnerHTML prop.

Setting content using code can expose users to cross-site scripting (XSS) attacks

(lint/security/noDangerouslySetInnerHtml)

🪛 LanguageTool
apps/docs/content/blog/sample.mdx

[uncategorized] ~33-~33: You might be missing the article “the” here.
Context: ...t ensure performance and scalability at enterprise level: ```typescript title="AI-powered...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~80-~80: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...omponents for consistent design ## Why Open Source Leadership Matters In today's landscap...

(EN_COMPOUND_ADJECTIVE_INTERNAL)


[uncategorized] ~93-~93: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...enarios. ### Regulatory Compliance Open source code enables thorough security audits a...

(EN_COMPOUND_ADJECTIVE_INTERNAL)

apps/docs/content/docs/getting-started/installation.mdx

[duplication] ~45-~45: Possible typo: you repeated a word.
Context: ... ```bash title="Install pnpm" # Via npm npm install -g pnpm # Via Homebrew (macOS)...

(ENGLISH_WORD_REPEAT_RULE)


[duplication] ~51-~51: Possible typo: you repeated a word.
Context: ...mebrew (macOS) brew install pnpm # Via curl curl -fsSL https://get.pnpm.io/install.sh | ...

(ENGLISH_WORD_REPEAT_RULE)

apps/docs/content/docs/deployment.mdx

[uncategorized] ~518-~518: Loose punctuation mark.
Context: ... ECS RDS Cache end` }/> #### ECS Task Definition ```json ti...

(UNLIKELY_OPENING_PUNCTUATION)

🔇 Additional comments (26)
apps/docs/.gitignore (1)

1-28: Looks good – comprehensive ignore list

Covers dependencies, builds, cache and env files; nothing missing for the docs app.

apps/docs/app/api/search/route.ts (1)

1-4: Verify path alias “@/” is configured for the docs app

@/lib/source relies on a TS/Next alias. Ensure tsconfig.json in apps/docs contains:

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["./*"]
    }
  }
}

Without it, the build will fail in CI.

pnpm-workspace.yaml (1)

19-20: React 19 is still an alpha – confirm that every package is compatible

react/react-dom@19.1.0 are in alpha and contain breaking changes (e.g., off-main-thread architecture).
Make sure:

  1. All packages in apps/* and packages/* accept React 19.
  2. No library in your lockfile hard-pins react@18 and thereby causes hoisting conflicts.

If this upgrade is experimental, consider keeping it confined to apps/docs with overrides instead of elevating it to the workspace catalog.

apps/docs/app/(home)/layout.tsx (1)

1-7: Verify whether the layout needs an explicit 'use client' directive

If HomeLayout from fumadocs-ui is a client component (contains interactivity or use client internally) you’re fine.
If it is a server component but relies on browser APIs via props, the current server-component wrapper will break at runtime.

Check the exported code of fumadocs-ui/layouts/home; add 'use client' here if required.

apps/docs/app/docs/layout.tsx (1)

1-12: Same client/server concern as home layout

DocsLayout may be a client component.
Ensure the wrapper’s component boundary is correctly marked ('use client' if necessary) to prevent hydration errors.

Also, consider memoising source.pageTree if it’s heavy to compute on every request.

apps/mail/components/ui/navigation-menu.tsx (1)

115-117: LGTM! Secure external link implementation.

The addition of the optional external prop with proper target="_blank" and rel="noopener noreferrer" attributes follows security best practices for external links, preventing potential window.opener vulnerabilities.

Also applies to: 136-137

apps/docs/app/layout.tsx (1)

12-12: Verify suppressHydrationWarning usage.

The suppressHydrationWarning prop is typically needed for theme providers that cause hydration mismatches due to theme detection. Ensure this is actually necessary for the RootProvider from fumadocs-ui and consider documenting why it's needed.

package.json (1)

12-12: LGTM! Proper monorepo script integration.

The added docs scripts follow the established pnpm workspace filter pattern and integrate well with the existing script structure.

Also applies to: 14-14, 19-19

apps/docs/tsconfig.json (1)

1-31: LGTM! Well-structured TypeScript configuration.

The TypeScript configuration is properly set up for a Next.js documentation app with appropriate compiler options, path aliases, and plugin configuration.

apps/docs/lib/source.ts (1)

1-18: LGTM! Clean Fumadocs source configuration.

The source loaders are properly configured with appropriate base URLs. The dual export of blogSource provides good flexibility for different import patterns.

apps/docs/app/(home)/blog/page.tsx (1)

44-59: LGTM! Well-structured blog post grid.

The blog post grid layout is responsive and well-designed with appropriate hover states and semantic HTML structure.

apps/docs/source.config.ts (2)

12-21: LGTM! Well-designed blog collection schema.

The blog collection is properly configured with a logical frontmatter schema extension that includes essential blog metadata fields.


34-50: LGTM! Comprehensive MDX and code highlighting configuration.

The Fumadocs configuration includes:

  • Appropriate syntax highlighting themes for light/dark modes
  • Comprehensive language support for a technical documentation site
  • Inline code highlighting for better developer experience
apps/docs/components/Mermaid.tsx (1)

6-46: Well-implemented Mermaid integration with proper error handling.

The component correctly handles dynamic mermaid imports, theme integration, and chart rendering. The use of dangerouslySetInnerHTML is appropriate here since the SVG content comes from the trusted mermaid library's own rendering engine, making the static analysis warning a false positive.

apps/docs/app/layout.config.tsx (1)

3-19: Clean navigation configuration with proper link types.

The link configuration is well-structured with appropriate use of TypeScript types from fumadocs-ui. The inline GitHub SVG icon is a good choice for performance.

apps/docs/app/docs/[[...slug]]/page.tsx (2)

12-35: Excellent implementation of dynamic docs routing.

The page component properly handles async parameters, implements error handling with notFound(), and correctly integrates with the fumadocs UI components. The MDX rendering with custom components supports the enhanced documentation features.


37-52: Proper SSG implementation with metadata generation.

Both generateStaticParams and generateMetadata are correctly implemented following Next.js App Router best practices. The error handling in generateMetadata ensures graceful fallback for missing pages.

apps/docs/content/docs/index.mdx (1)

1-71: Comprehensive and well-structured documentation index.

The documentation index provides an excellent overview of the Zero project with clear sections for features, getting started, technology stack, and community resources. The use of fumadocs-ui components (Cards, Steps, CodeBlock) creates an engaging and professional documentation experience.

apps/docs/app/(home)/blog/[slug]/page.tsx (2)

10-64: Sophisticated blog post layout with excellent UX.

The blog post page implements a visually appealing design with gradient backgrounds and proper content structure. The layout includes a styled header section, prose-formatted content area, and informative sidebar with author and date details.


66-88: Proper SSG implementation for blog posts.

Both generateMetadata and generateStaticParams are correctly implemented, ensuring good SEO and static generation performance. The error handling in generateMetadata provides appropriate fallback metadata for missing posts.

apps/mail/components/navigation.tsx (1)

270-279: Excellent security implementation for external links.

The proper use of target="_blank" and rel="noopener noreferrer" for external links follows security best practices and prevents potential security vulnerabilities.

apps/docs/content/docs/getting-started/index.mdx (1)

1-266: Excellent comprehensive getting started guide.

This documentation provides a thorough, well-structured guide with:

  • Clear step-by-step instructions using proper UI components
  • Comprehensive environment setup with detailed examples
  • Good use of callouts, tabs, and accordions for organization
  • Helpful troubleshooting section

The MDX structure and component usage follow best practices for technical documentation.

apps/docs/content/docs/MCP.mdx (1)

1-94: Well-structured MCP documentation.

This documentation effectively covers:

  • Comprehensive capability overview with clear categorization
  • Detailed authentication methods with appropriate security warnings
  • Good use of MDX components (Tabs, Steps, Callouts) for organization
  • Clear distinction between development and production authentication approaches

The content is informative and follows documentation best practices.

apps/docs/README.md (1)

1-177: Comprehensive and well-structured documentation README.

This README effectively provides:

  • Clear project overview and value proposition
  • Detailed development setup instructions
  • Comprehensive project structure explanation
  • Good technology stack documentation
  • Clear contribution guidelines

The structure and content quality are excellent for a documentation site.

apps/docs/content/docs/contributing.mdx (1)

1-706: Outstanding comprehensive contributing guide.

This documentation provides exceptional coverage of:

  • Complete development setup and workflow
  • Detailed coding standards with examples
  • Comprehensive guidelines for all contribution types
  • Professional templates for PRs and issues
  • Clear community guidelines and recognition

The structure, depth, and use of MDX components create an excellent developer resource.

apps/docs/content/blog/sample.mdx (1)

155-159: Repository URL is inconsistent

The blog alternates between https://github.com/Zero-Email/Zero and https://github.com/Mail-0/zero.
Pick one canonical URL to avoid broken links and SEO penalties.

Also applies to: 168-190

@JagjeevanAK
Copy link
Author

Hello @nizzyabi @MrgSub,

I hope you can take a moment to review this PR. I completed it two weeks ago but did not receive any feedback. I would appreciate it if this time it could be looked at in a timely manner. Thank you!

Copy link
Contributor

@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 (3)
PR.md (3)

5-5: Add the missing article “the” before Fumadocs framework.
Small grammar tweak for clarity.

-Added comprehensive documentation and blog functionality to the Zero project using Fumadocs framework.
+Added comprehensive documentation and blog functionality to the Zero project using the Fumadocs framework.

35-35: Avoid bare URLs – wrap it as a Markdown link.

Markdown-lint (MD034) flags this line. Wrapping the URL keeps the doc tidy.

-Verified documentation site runs on http://localhost:3001
+Verified documentation site runs locally at [http://localhost:3001](http://localhost:3001)

61-63: Prefix menu names with “the” for grammatical consistency.

-Moved Documentation and Blog links from "Company" menu to "Resources" menu
-Resources menu now contains: Documentation, Blog, GitHub, Twitter, LinkedIn, Discord
-Company menu now focuses on: About, Privacy, Terms of Service, Contributors
+Moved Documentation and Blog links from the "Company" menu to the "Resources" menu
+The Resources menu now contains: Documentation, Blog, GitHub, Twitter, LinkedIn, Discord
+The Company menu now focuses on: About, Privacy, Terms of Service, Contributors
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 93bc8c7 and c2f5482.

📒 Files selected for processing (2)
  • PR.md (1 hunks)
  • apps/docs/README.md (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • apps/docs/README.md
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: adiologydev
PR: Mail-0/Zero#871
File: docker-compose.yaml:2-21
Timestamp: 2025-05-04T23:21:21.388Z
Learning: To completely disable SSG (Static Site Generation) in Next.js projects for Docker deployments, use 'force-dynamic' for App Router or getServerSideProps for Pages Router in all pages, and set output: 'standalone' in next.config.ts. This allows all environment variables to be passed at runtime instead of build time, improving security for sensitive values.
🪛 LanguageTool
PR.md

[uncategorized] ~5-~5: You might be missing the article “the” here.
Context: ...functionality to the Zero project using Fumadocs framework. Integrated professional docu...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~61-~61: You might be missing the article “the” here.
Context: ...Moved Documentation and Blog links from "Company" menu to "Resources" menu - Reso...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~61-~61: You might be missing the article “the” here.
Context: ...n and Blog links from "Company" menu to "Resources" menu - Resources menu now con...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

🪛 markdownlint-cli2 (0.17.2)
PR.md

35-35: Bare URL used

(MD034, no-bare-urls)

@JagjeevanAK
Copy link
Author

Also, feel free to update the docs as we have made the docs and blogs setup and just need to review the docs information.

@MrgSub
Copy link
Collaborator

MrgSub commented Jul 2, 2025

Hello @nizzyabi @MrgSub,

I hope you can take a moment to review this PR. I completed it two weeks ago but did not receive any feedback. I would appreciate it if this time it could be looked at in a timely manner. Thank you!

There's a lot of code review comments by coderabbit

@JagjeevanAK
Copy link
Author

JagjeevanAK commented Jul 3, 2025

Hello @nizzyabi @MrgSub,
I hope you can take a moment to review this PR. I completed it two weeks ago but did not receive any feedback. I would appreciate it if this time it could be looked at in a timely manner. Thank you!

There's a lot of code review comments by coderabbit

Sure but many are not that much important will comment on each one which are important and which are not. The reason being we have react codebase and fuma is based on next.js.

JagjeevanAK and others added 2 commits July 3, 2025 07:15
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Copy link
Contributor

@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: 3

♻️ Duplicate comments (1)
apps/docs/content/blog/sample.mdx (1)

178-178: Inconsistent GitHub URL

Earlier links use github.com/Mail-0/zero; here it switches to github.com/Zero-Email/Zero.
Choose one canonical URL to avoid confusing readers.

-[Get started with Zero today](https://github.com/Zero-Email/Zero)
+[Get started with Zero today](https://github.com/Mail-0/zero)
🧹 Nitpick comments (2)
apps/docs/content/blog/sample.mdx (2)

33-34: Grammar nit: missing definite article

“at enterprise level” → “at the enterprise level”.

- ensure performance and scalability at enterprise level:
+ensure performance and scalability at the enterprise level:

77-78: Unclear wording in bullet list

“Better Auth” is brand-style jargon and may confuse external readers.
Consider replacing with a concrete description:

- **Authentication**: Better Auth with enterprise OAuth and SAML integration
+**Authentication**: Robust OAuth 2.0 and SAML-based single-sign-on for enterprises
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between c2f5482 and d5c77e1.

📒 Files selected for processing (2)
  • apps/docs/content/blog/sample.mdx (1 hunks)
  • apps/docs/eslint.config.mjs (1 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: JagjeevanAK
PR: Mail-0/Zero#1583
File: apps/docs/package.json:1-0
Timestamp: 2025-07-01T12:53:32.467Z
Learning: The Zero project prefers to handle dependency updates through automated tools like Dependabot rather than immediate manual updates, allowing for proper testing and validation through their established workflow.
Learnt from: adiologydev
PR: Mail-0/Zero#871
File: docker-compose.yaml:2-21
Timestamp: 2025-05-04T23:21:21.388Z
Learning: To completely disable SSG (Static Site Generation) in Next.js projects for Docker deployments, use 'force-dynamic' for App Router or getServerSideProps for Pages Router in all pages, and set output: 'standalone' in next.config.ts. This allows all environment variables to be passed at runtime instead of build time, improving security for sensitive values.
apps/docs/content/blog/sample.mdx (1)
Learnt from: JagjeevanAK
PR: Mail-0/Zero#1583
File: apps/docs/package.json:1-0
Timestamp: 2025-07-01T12:53:32.467Z
Learning: The Zero project prefers to handle dependency updates through automated tools like Dependabot rather than immediate manual updates, allowing for proper testing and validation through their established workflow.
🪛 LanguageTool
apps/docs/content/blog/sample.mdx

[uncategorized] ~33-~33: You might be missing the article “the” here.
Context: ...t ensure performance and scalability at enterprise level: ```typescript title="AI-powered...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~80-~80: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...omponents for consistent design ## Why Open Source Leadership Matters In today's landscap...

(EN_COMPOUND_ADJECTIVE_INTERNAL)


[uncategorized] ~93-~93: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...enarios. ### Regulatory Compliance Open source code enables thorough security audits a...

(EN_COMPOUND_ADJECTIVE_INTERNAL)

🪛 Biome (1.9.4)
apps/docs/eslint.config.mjs

[error] 12-13: Expected a statement but instead found ','.

Expected a statement here.

(parse)


[error] 13-14: Expected a statement but instead found ',
]'.

Expected a statement here.

(parse)


[error] 10-10: Unexpected label.

Only loops should be labeled.
The use of labels for other statements is suspicious and unfamiliar.

(lint/suspicious/noConfusingLabels)


[error] 10-10: Unused label.

The label is not used by any break statement and continue statement.
Safe fix: Remove the unused label.

(lint/correctness/noUnusedLabels)


[error] 9-13: This block statement doesn't serve any purpose and can be safely removed.

Standalone block statements without any block-level declarations are redundant in JavaScript and can be removed to simplify the code.

(lint/complexity/noUselessLoneBlockStatements)

🔇 Additional comments (2)
apps/docs/content/blog/sample.mdx (2)

100-109: Verify referenced deployment artefacts & script paths

docker-compose.prod.yaml and scripts/configure-sso.sh are mentioned, but these files aren’t part of the repo snapshot.
Please confirm they exist (or update the names) to prevent 404s in the published docs.


186-189: Confirm internal link targets

The paths /docs and /docs/contributing assume the docs site is hosted at the domain root.
If the site is deployed under / (as in the Vercel preview), these links resolve; if hosted under /docs, they will self-link. Please verify the final base path and adjust to relative links if needed.

JagjeevanAK and others added 7 commits July 3, 2025 07:20
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
@JagjeevanAK
Copy link
Author

Hey @MrgSub I have gone throught many of the comments and few of them were correct like wrong import of eslint and tailwind while other suggesitions were on naming of .env variables and some .mdx files(doc files) and nothing serious.

@JagjeevanAK JagjeevanAK requested a review from ahmetskilinc July 3, 2025 02:03
@JagjeevanAK
Copy link
Author

Tailwind suggestion by code rabbit was wrong and I am reverting it back

CC: @MrgSub, @ahmetskilinc and @nizzyabi

Signed-off-by: Jagjeevan Kashid <jagjeevandev97@gmail.com>
@JagjeevanAK
Copy link
Author

I have tested this locally so there should not be problem now.

Copy link
Contributor

@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

♻️ Duplicate comments (6)
apps/docs/postcss.config.mjs (1)

3-3: Fix the incorrect Tailwind CSS plugin name.

Previous reviewers correctly identified that @tailwindcss/postcss is invalid. The plugin should be tailwindcss to prevent build failures.

-    '@tailwindcss/postcss': {},
+    tailwindcss: {},
apps/docs/content/blog/sample.mdx (2)

5-7: Front-matter key is still incorrect – must use authors, not author when providing an array

Fumadocs parses either author: "<single name>" or authors: ["name", "name"].
Keeping the key as author while supplying a sequence will be treated as a single YAML object and the build will fail silently (authors list won’t render).

-author:
-  - Nizzy
-  - Adam
+authors:
+  - Nizzy
+  - Adam

178-180: Broken repository link

https://github.com/Zero-Email/Zero does not exist. The canonical repo is Mail-0/zero.

-**Ready to join the revolution?** [Get started with Zero today](https://github.com/Zero-Email/Zero) ...
+**Ready to join the revolution?** [Get started with Zero today](https://github.com/Mail-0/zero) ...
apps/mail/components/navigation.tsx (1)

25-35: Consider the previous review comment about hardcoded URLs.

A previous review comment recommended replacing hardcoded localhost URLs with environment variables, which you've partially implemented but with syntax errors. The approach is correct, but ensure the environment variables are properly configured.

apps/docs/content/docs/contributing.mdx (1)

646-646: Update the architecture documentation link as previously suggested.

The link to the architecture documentation needs to be corrected to point to the actual file location.

apps/docs/content/docs/getting-started/configuration.mdx (1)

135-135: Fix environment variable inconsistency as previously noted.

The environment variable name used in the code snippet doesn't match the documented variable name, which will cause runtime issues.

🧹 Nitpick comments (1)
apps/docs/content/blog/sample.mdx (1)

35-35: Minor wording – missing determiner “the”

“performance and scalability at enterprise level” → “performance and scalability at the enterprise level”.

Pure copy-edit, but worth fixing for polish.

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between d5c77e1 and e9a2079.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (9)
  • .env.example (2 hunks)
  • apps/docs/content/blog/sample.mdx (1 hunks)
  • apps/docs/content/docs/contributing.mdx (1 hunks)
  • apps/docs/content/docs/getting-started/configuration.mdx (1 hunks)
  • apps/docs/eslint.config.mjs (1 hunks)
  • apps/docs/package.json (1 hunks)
  • apps/docs/postcss.config.mjs (1 hunks)
  • apps/docs/source.config.ts (1 hunks)
  • apps/mail/components/navigation.tsx (5 hunks)
✅ Files skipped from review due to trivial changes (1)
  • .env.example
🚧 Files skipped from review as they are similar to previous changes (3)
  • apps/docs/source.config.ts
  • apps/docs/eslint.config.mjs
  • apps/docs/package.json
🧰 Additional context used
🧠 Learnings (5)
📓 Common learnings
Learnt from: JagjeevanAK
PR: Mail-0/Zero#1583
File: apps/docs/package.json:1-0
Timestamp: 2025-07-01T12:53:32.467Z
Learning: The Zero project prefers to handle dependency updates through automated tools like Dependabot rather than immediate manual updates, allowing for proper testing and validation through their established workflow.
Learnt from: adiologydev
PR: Mail-0/Zero#871
File: docker-compose.yaml:2-21
Timestamp: 2025-05-04T23:21:21.388Z
Learning: To completely disable SSG (Static Site Generation) in Next.js projects for Docker deployments, use 'force-dynamic' for App Router or getServerSideProps for Pages Router in all pages, and set output: 'standalone' in next.config.ts. This allows all environment variables to be passed at runtime instead of build time, improving security for sensitive values.
apps/docs/content/docs/contributing.mdx (1)
Learnt from: JagjeevanAK
PR: Mail-0/Zero#1583
File: apps/docs/package.json:1-0
Timestamp: 2025-07-01T12:53:32.467Z
Learning: The Zero project prefers to handle dependency updates through automated tools like Dependabot rather than immediate manual updates, allowing for proper testing and validation through their established workflow.
apps/docs/content/docs/getting-started/configuration.mdx (2)
Learnt from: adiologydev
PR: Mail-0/Zero#871
File: docker-compose.yaml:2-21
Timestamp: 2025-05-04T23:13:26.825Z
Learning: Next.js requires certain environment variables during static site generation at build time, particularly those with the NEXT_PUBLIC_ prefix. When using Docker, these should be passed as build args, while sensitive values like API keys and secrets should ideally only be passed at runtime as environment variables.
Learnt from: txj-xyz
PR: Mail-0/Zero#131
File: Dockerfile:31-41
Timestamp: 2025-03-14T22:15:10.146Z
Learning: For Docker configurations in this project, environment variables should be managed using .env files rather than hardcoding them in the Dockerfile, especially for development environments.
apps/docs/content/blog/sample.mdx (1)
Learnt from: JagjeevanAK
PR: Mail-0/Zero#1583
File: apps/docs/package.json:1-0
Timestamp: 2025-07-01T12:53:32.467Z
Learning: The Zero project prefers to handle dependency updates through automated tools like Dependabot rather than immediate manual updates, allowing for proper testing and validation through their established workflow.
apps/mail/components/navigation.tsx (3)
Learnt from: adiologydev
PR: Mail-0/Zero#871
File: docker-compose.yaml:2-21
Timestamp: 2025-05-04T23:13:26.825Z
Learning: Next.js requires certain environment variables during static site generation at build time, particularly those with the NEXT_PUBLIC_ prefix. When using Docker, these should be passed as build args, while sensitive values like API keys and secrets should ideally only be passed at runtime as environment variables.
Learnt from: txj-xyz
PR: Mail-0/Zero#131
File: Dockerfile:31-41
Timestamp: 2025-03-14T22:15:10.146Z
Learning: For Docker configurations in this project, environment variables should be managed using .env files rather than hardcoding them in the Dockerfile, especially for development environments.
Learnt from: adiologydev
PR: Mail-0/Zero#871
File: docker-compose.yaml:2-21
Timestamp: 2025-05-04T23:21:21.388Z
Learning: To completely disable SSG (Static Site Generation) in Next.js projects for Docker deployments, use 'force-dynamic' for App Router or getServerSideProps for Pages Router in all pages, and set output: 'standalone' in next.config.ts. This allows all environment variables to be passed at runtime instead of build time, improving security for sensitive values.
🪛 LanguageTool
apps/docs/content/docs/contributing.mdx

[uncategorized] ~446-~446: You might be missing the article “the” here.
Context: ...Documentation 1. Create .mdx file in appropriate directory 2. Add frontmatter with title...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

apps/docs/content/blog/sample.mdx

[uncategorized] ~35-~35: You might be missing the article “the” here.
Context: ...t ensure performance and scalability at enterprise level: ```typescript title="AI-powered...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)


[uncategorized] ~82-~82: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...omponents for consistent design ## Why Open Source Leadership Matters In today's landscap...

(EN_COMPOUND_ADJECTIVE_INTERNAL)


[uncategorized] ~95-~95: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...enarios. ### Regulatory Compliance Open source code enables thorough security audits a...

(EN_COMPOUND_ADJECTIVE_INTERNAL)

🪛 Biome (1.9.4)
apps/mail/components/navigation.tsx

[error] 26-26: expected , but instead found :

Remove :

(parse)

🔇 Additional comments (4)
apps/mail/components/navigation.tsx (2)

147-156: Good implementation of external link handling.

The addition of the external prop to ListItem components properly supports the new documentation and blog links with appropriate target and rel attributes.


288-318: Well-structured conditional rendering for different link types.

The logic correctly differentiates between external documentation/blog links and social platform links, applying appropriate attributes and components for each type.

apps/docs/content/docs/contributing.mdx (1)

1-704: Excellent comprehensive contributing guide.

This is a well-structured and thorough contributing guide that covers all essential aspects:

  • Clear development setup instructions
  • Detailed workflow guidelines
  • Code style standards with examples
  • Testing framework preparation
  • Community guidelines and recognition

The guide provides excellent value for new contributors and maintains consistency with the project's documentation standards.

apps/docs/content/docs/getting-started/configuration.mdx (1)

1-527: Outstanding comprehensive configuration reference.

This configuration guide is exceptionally thorough and well-organized, covering:

  • Complete environment variable reference
  • Database configuration options (SQLite, PostgreSQL)
  • Authentication setup with Better Auth and OAuth
  • Email provider configurations
  • Storage options (local, R2, S3)
  • AI integration settings
  • Performance and security configurations
  • Production deployment considerations
  • Configuration validation with Zod

The use of tabs, callouts, and code blocks makes the information highly accessible and actionable for developers.

JagjeevanAK and others added 2 commits July 3, 2025 07:52
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
@MrgSub
Copy link
Collaborator

MrgSub commented Jul 4, 2025

Can we push the docs to our Docs repo? https://github.com/Mail-0/Docs

@MrgSub MrgSub closed this Jul 4, 2025
@JagjeevanAK
Copy link
Author

ye good Idea that is what I said at the start @MrgSub but @ahmetskilinc said that keep it in main repo

Copy link
Collaborator

MrgSub commented Jul 5, 2025

thank you, I realized it'll be a large addition to our repo which is already large

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.

3 participants