You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by xi...@apache.org on 2026/03/22 04:45:58 UTC

(pinot-site) branch fix/factual-consistency-ssot updated: Add CLAUDE.md with project conventions and architecture

This is an automated email from the ASF dual-hosted git repository.

xiangfu pushed a commit to branch fix/factual-consistency-ssot
in repository https://gitbox.apache.org/repos/asf/pinot-site.git


The following commit(s) were added to refs/heads/fix/factual-consistency-ssot by this push:
     new 789aa3ba Add CLAUDE.md with project conventions and architecture
789aa3ba is described below

commit 789aa3ba9e7ea2a90923db7bf5d84c6ef4e87267
Author: Xiang Fu <xi...@startree.ai>
AuthorDate: Sat Mar 21 21:45:28 2026 -0700

    Add CLAUDE.md with project conventions and architecture
    
    Covers SSOT pattern, git/PR rules, key commands, data flow,
    download URL patterns, consistency checks, and release process.
    
    Co-Authored-By: Claude Opus 4.6 <no...@anthropic.com>
---
 CLAUDE.md | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 102 insertions(+)

diff --git a/CLAUDE.md b/CLAUDE.md
new file mode 100644
index 00000000..7f4a1659
--- /dev/null
+++ b/CLAUDE.md
@@ -0,0 +1,102 @@
+# CLAUDE.md — Apache Pinot Website
+
+## Project Overview
+
+Apache Pinot marketing/docs website built with **Next.js 14** (App Router), **TypeScript**, **TailwindCSS**, and **ContentLayer** for MDX processing. Statically exported (`output: 'export'`).
+
+## Key Commands
+
+```bash
+yarn dev              # Start dev server
+yarn build            # Production build (includes postbuild script)
+yarn lint:check       # Lint without auto-fix (used in CI)
+yarn lint             # Lint with auto-fix
+yarn check            # Prettier check
+yarn format           # Prettier auto-format
+yarn check:consistency # Validate version/positioning consistency
+yarn test             # Run tests
+```
+
+## Git & PR Rules
+
+-   **Development branch:** `new-site-dev` — all PRs must target this branch
+-   **Published branch:** `asf-site` — Apache infrastructure output, never target PRs here
+-   Always branch from `origin/new-site-dev`
+
+## Architecture
+
+### Single Source of Truth (SSOT)
+
+`data/pinot-meta.json` is the SSOT for version numbers, tagline, hero text, capabilities, and terminology. Components import from this file — never hardcode version strings or positioning text in components.
+
+Files that read from `pinot-meta.json`:
+
+-   `data/siteMetadata.js` — site-wide config (uses `require()`, CommonJS)
+-   `components/HeroSection.tsx` — hero headline and description
+-   `app/download/page.tsx` — download page header and SEO meta
+-   `components/DownloadTable/DesktopDownloadTable.tsx` — "Latest" badge
+-   `components/DownloadTable/MobileDownloadTable.tsx` — "Latest" badge
+-   `components/Features.tsx` — "Last verified" marker
+-   `components/BenchmarkSection.tsx` — "Last verified" marker
+-   `components/UseCases.tsx` — "Last verified" marker
+
+### Content (ContentLayer MDX)
+
+-   `data/blog/*.mdx` — Blog posts
+-   `data/downloads/*.mdx` — Download entries (one per release version)
+-   `data/authors/*.mdx` — Author profiles
+
+The download page uses ContentLayer's `allDownloads` (from MDX files) as the data source, not the `downloadData` array in `data/downloadsData.ts`. The `.ts` file primarily exports the `DownloadData` type.
+
+### Key Data Files
+
+| File                          | Purpose                                        |
+| ----------------------------- | ---------------------------------------------- |
+| `data/pinot-meta.json`        | SSOT for version, tagline, positioning         |
+| `data/siteMetadata.js`        | Site config (CommonJS `module.exports`)        |
+| `data/downloadsData.ts`       | Download metadata & `DownloadData` type export |
+| `data/featuresData.ts`        | Feature cards with doc links                   |
+| `data/useCasesData.ts`        | Use case categories                            |
+| `data/benchmarkData.ts`       | Benchmark metrics                              |
+| `data/companiesUsingPinot.ts` | Company logos/names                            |
+
+### Components That Need Manual Version Updates Per Release
+
+These components have hardcoded version strings that `pinot-meta.json` does not control:
+
+-   `components/Terminal.tsx` — Docker image tags (`pinot:X.Y.Z`, `pinot:X.Y.Z-arm64`)
+-   `components/ReleaseBanner.tsx` — Release announcement text
+
+See `RELEASE_GUIDE.md` for the full release checklist.
+
+## Download URL Patterns
+
+```
+# Scarf gateway (0.8.0+)
+https://apachepinot.gateway.scarf.sh/pinot/{VERSION}/apache-pinot-{VERSION}-{src|bin}.tar.gz
+
+# Archive (pre-0.8.0, incubating)
+https://archive.apache.org/dist/incubator/pinot/apache-pinot-incubating-{VERSION}/apache-pinot-incubating-{VERSION}-{src|bin}.tar.gz
+
+# Docker
+apachepinot.docker.scarf.sh/apachepinot/pinot:{VERSION}
+apachepinot.docker.scarf.sh/apachepinot/pinot:{VERSION}-arm64
+```
+
+## Consistency Validation
+
+Run `node scripts/check-consistency.mjs` before committing. It checks:
+
+-   `pinot-meta.json` has all required fields
+-   `siteMetadata.js` imports from `pinot-meta.json`
+-   No duplicate versions in `downloadsData.ts`
+-   Download MDX file exists for the latest version
+-   HeroSection reads from SSOT
+-   No hardcoded version numbers in key components
+
+## Style & Formatting
+
+-   Prettier and ESLint are enforced via `husky` + `lint-staged` pre-commit hooks
+-   Run `yarn format` if prettier check fails
+-   `siteMetadata.js` uses CommonJS (`require`/`module.exports`), not ES modules
+-   MDX frontmatter dates: `MM/DD/YYYY` in downloads, `YYYY-MM-DD` in blog posts


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org