diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 81c14327..08903ba5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,7 +2,7 @@ name: CI on: pull_request: - branches: [develop] + branches: [develop, main] push: branches: [main] @@ -18,6 +18,7 @@ permissions: id-token: write jobs: + # ── Rust ── check: name: Check runs-on: ubuntu-latest @@ -49,7 +50,7 @@ jobs: - run: cargo clippy --all-targets -- -D warnings audit: - name: Security Audit + name: Security Audit (CVE) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -75,4 +76,64 @@ jobs: - uses: Swatinem/rust-cache@v2 - run: cargo build --release + # ── Website ── + website-lint: + name: Website Lint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 24 + cache: npm + cache-dependency-path: website/package-lock.json + - run: npm ci + working-directory: website + - run: npx svelte-check --tsconfig ./tsconfig.json --output human + working-directory: website + + website-build: + name: Website Build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 24 + cache: npm + cache-dependency-path: website/package-lock.json + - run: npm ci + working-directory: website + - run: npm run build + working-directory: website + - name: Verify build output + run: | + if [ ! -d "website/build" ] || [ -z "$(ls -A website/build)" ]; then + echo "::error::Build output is empty or missing." + exit 1 + fi + # ── Dependency freshness ── + npm-audit: + name: NPM Audit + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 24 + cache: npm + cache-dependency-path: website/package-lock.json + - run: npm audit --audit-level=moderate || true + working-directory: website + + cargo-outdated: + name: Cargo Outdated + runs-on: ubuntu-latest + continue-on-error: true + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + - name: Install cargo-outdated + run: cargo install cargo-outdated --locked 2>/dev/null || true + - run: cargo outdated || true diff --git a/website/src/app.css b/website/src/app.css index eb16a7aa..d0b315da 100644 --- a/website/src/app.css +++ b/website/src/app.css @@ -587,3 +587,113 @@ code, .font-mono { padding: var(--space-6) var(--space-4) var(--space-12); } } + +/* ---- Separator Gradient ---- */ +.separator-gradient { + max-width: 1152px; + margin-left: auto; + margin-right: auto; + padding-left: var(--space-6); + padding-right: var(--space-6); + height: 1px; + background: linear-gradient( + 90deg, + transparent, + oklch(0.65 0.22 270 / 0.3), + transparent + ); +} + +@media (min-width: 768px) { + .separator-gradient { + padding-left: var(--space-8); + padding-right: var(--space-8); + } +} + +@media (min-width: 1280px) { + .separator-gradient { + padding-left: var(--space-10); + padding-right: var(--space-10); + } +} + +/* ---- Grid Background ---- */ +.grid-bg { + background-image: + linear-gradient(oklch(0.27 0.01 270 / 0.3) 1px, transparent 1px), + linear-gradient(90deg, oklch(0.27 0.01 270 / 0.3) 1px, transparent 1px); + background-size: 64px 64px; +} + +/* ---- Architecture Flow ---- */ +.arch-step { + width: 100%; + max-width: 320px; + padding: var(--space-5) var(--space-6); + border-radius: var(--space-4); + background: var(--card); + border: 1px solid oklch(0.27 0.01 270 / 0.5); + text-align: center; +} + +.arch-step-highlight { + width: 100%; + max-width: 320px; + padding: var(--space-5) var(--space-6); + border-radius: var(--space-4); + text-align: center; + border: 2px solid var(--accent); + background: oklch(0.65 0.22 270 / 0.08); +} + +.arch-connector { + display: flex; + flex-direction: column; + align-items: center; + padding: var(--space-1) 0; +} + +.arch-connector-line { + width: 1px; + height: var(--space-4); + background: oklch(0.65 0.22 270 / 0.3); +} + +.arch-connector-label { + padding: var(--space-1) var(--space-3); + border-radius: var(--space-1); + font-family: var(--font-mono); + font-size: 12px; + color: var(--accent); + background: var(--card); + border: 1px solid oklch(0.65 0.22 270 / 0.2); +} + +/* ---- Audience Table ---- */ +.audience-table { + width: 100%; + border-collapse: collapse; +} + +.audience-table th, +.audience-table td { + padding: var(--space-3) var(--space-5); + border-bottom: 1px solid oklch(0.27 0.01 270 / 0.5); + text-align: left; + font-size: 14px; + color: var(--foreground); +} + +.audience-table thead th { + color: var(--muted-foreground); + font-weight: 500; + font-size: 12px; + text-transform: uppercase; + letter-spacing: 0.05em; + padding-bottom: var(--space-3); +} + +.audience-table tbody tr:last-child td { + border-bottom: none; +} diff --git a/website/src/routes/+layout.svelte b/website/src/routes/+layout.svelte index 43d67712..6445718e 100644 --- a/website/src/routes/+layout.svelte +++ b/website/src/routes/+layout.svelte @@ -7,35 +7,34 @@ const isDocs = $derived($page.url.pathname.startsWith('/docs')); -
- + -
+
{@render children()}
- -
diff --git a/website/src/routes/+page.svelte b/website/src/routes/+page.svelte index 14c351f6..d543f9a1 100644 --- a/website/src/routes/+page.svelte +++ b/website/src/routes/+page.svelte @@ -1,475 +1,558 @@ - cora — AI Code Review CLI · Open Source · MIT - - - - - - - - - + cora — AI Code Review CLI + - -
-
- -
- -
- - v0.4 released - — - release notes → -
+
- -

- Ship with
- Confidence. -

+ +
+ +
- -

- AI code review, before you commit. - CLI-first, BYOK any LLM, deterministic rules, fully open source. -

- - -
-
- $ - curl -fsSL https://cora.dev/install.sh | sh - +
+ +
+ + + AI Code Review for Developers +
-
- MIT License - · - No account - · - No telemetry + +

+ Review code.
+ Ship faster. +

+ + +

+ cora catches bugs, security issues, and style violations before they merge. CLI-first. BYOK. Runs in your terminal. +

+ + +
+
+
+ + + + Terminal +
+
+ $ + curl -fsSL https://cora.dev/install | sh + + +
+
-
- - - GitHub + + + + +

+ MIT License · No account · OpenAI · Anthropic · Groq · Ollama +

-
-
- - -
-
- -
-
-
-
-
+
+ + +
+

+ Trusted by developers who ship fast +

+
+
+
5
+
AI Providers
+
+
+
< 3s
+
Review Time
+
+
+
Zero
+
Config Required
- cora — AI code review engine
+
- -
- {#each commands as c, i} -
- {#if i === visibleCmd} -
- ❯ -
- {c.cmd.split(' ')[0]} - {c.cmd.split(' ').slice(1).join(' ')} -
-
-

# {c.desc}

-
{c.output}
- {:else} -
- ❯ - {c.cmd} -
+ +
+

+ See it in action +

+

+ Run cora against staged changes. Results in seconds, not minutes. +

+ +
+
+
+ + + + cora \u2014 review +
+
+ {#each terminalLines as line, i} +
{line}
+ {/each} + {#if terminalComplete} + {/if}
- {/each} -
-
-
- - -
-
-
- 🦀 - Built with Rust -
-
- 🔒 - Zero Telemetry -
-
- ⚡ - Pre-commit Hooks -
-
- 🛡️ - Rules Engine -
-
- 🔑 - BYOK Any LLM -
-
- 📦 - Single Binary +
-
-
- -
- - -
-
-

The Problem

-

- Code review shouldn't be
- slow or expensive +

+ + +
+

+ How it works

-

- Stop waiting hours for feedback. cora catches issues in seconds — before you commit. +

+ Three steps from code to confidence.

- - -
-
- -
-

❌ Without cora

-
-

> Waiting for PR review...

-

Still waiting (4 hours)

-

> Reviewer missed the SQL injection

-

Merged to production with bug

-

> Now paying $12/mo per reviewer seat

+ +
+ +
+
01
+
+
+

Write code

+

Push your changes as normal. cora only sees your diff.

+
+ + + - -
-

✅ With cora

-
-

> git commit -m "feat: auth"

-

cora review: 2 issues found (0.8s)

-

> Fixed both issues, committed

-

Zero cost. Zero waiting. Zero bugs shipped.

+ +
+
02
+
+
+

Review with AI

+

cora analyzes your diff with the LLM of your choice.

+
+ + + + + +
+
03
+
+ +
+

Ship with confidence

+

Merge clean, production-ready code. Every time.

-
-
- -
- - -
-
-

Features

-

Everything you need.
Nothing you don't.

-
- -
- {#each features as feat} -
- {feat.icon} -

{feat.title}

-

{feat.desc}

-

{feat.detail}

+
+ + +
+

+ Built for developers who value control +

+

+ Everything you need, nothing you don't. +

+ +
+ +
+
+ +
+

AI Code Review

+

Diff, branch, or full scan

+

Three review modes: staged diff, branch comparison, or full project scan. LLM-powered analysis catches bugs, security issues, and style violations.

+
+ + +
+
+ +
+

Bring Your Own Key

+

No subscriptions, no lock-in

+

Uses YOUR OpenAI, Anthropic, Groq, Ollama, or Z.AI API key. No data stored on our servers. You control the model, you control the cost.

- {/each} -
-
- -
- - -
-
-

Get Started

-

Three steps to
confident commits

-
- -
-
-
1
-
-

Install

- - curl -fsSL https://cora.dev/install.sh | sh - + + +
+
+ +
+

Pre-commit Hooks

+

Review before you push

+

Install once. Every commit gets reviewed automatically. Block bad code from entering your branch before it ships.

+
+ + +
+
+ +
+

Incremental Scan

+

Only scan what changed

+

SHA256 content hash cache. First scan indexes your codebase. Subsequent scans only review new or modified files.

+
+ + +
+
+ +
+

SARIF Output

+

GitHub Code Scanning

+

Upload review findings directly to GitHub's Security tab. Track issues across PRs. Works with any CI/CD pipeline.

+
+ + +
+
+ +
+

Fully Private

+

Your code stays yours

+

Runs entirely on your machine. No cloud, no telemetry, no data leaving your network. Perfect for Gitea and air-gapped environments.

+
+ + +
+
+ +
+

Deterministic Reviews

+

Same diff, same issues

+

Temperature defaults to 0. Identical diffs always produce identical findings — perfect for CI reproducibility.

+
+ + +
+
+ +
+

Smart Caching

+

Never review the same diff twice

+

Reviews are cached by diff hash in ~/.cache/cora/reviews/. Re-reviewing an unchanged diff returns cached results instantly. Use --no-cache to bypass.

+
+ + +
+
+ +
+

Custom Prompts & Anti-Hallucination

+

Control the review, trust the output

+

Override system prompts for review and scan. File path injection and post-parse filtering ensure the LLM only reports issues that exist in your actual diff.

-
-
2
-
-

Configure your LLM

- - cora init - +
+ + +
+

+ Why developers choose cora +

+

+ Side-by-side with popular code review tools. +

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeaturecoraCodeRabbitCopilotSonarQube
BYOK✓✗✗—
Self-hosted✓✗✗✓
Gitea✓✗✗✓
CLI✓✗✗✗
Pre-commit✓✗✗✗
SARIF✓✓✓✓
CostFree + API$12-39/mo$10-39/moFree / $150+
LicenseMITApache 2.0ProprietaryLGPL
-
-
3
-
-

Review your code

- - cora review --staged - +
+ + +
+

+ Start in 30 seconds +

+

+ No account required. No subscription. No cloud. +

+ +
+ +
+
1
+
+

Install

+

Single binary, no dependencies.

+
+
+ + + +
+
+ $ curl -fsSL https://cora.dev/install | sh +
+
+
+
+ + +
+
2
+
+

Set API key

+

Use your existing OpenAI or Anthropic key.

+
+
+ + + +
+
+ $ export OPENAI_API_KEY="sk-..." +
+
+
+
+ + +
+
3
+
+

Review

+

Review your staged changes.

+
+
+ + + +
+
+ $ CORA_API_KEY=key cora review --staged +
+
+
+
+ + +
+
4
+
+

Done

+

That's it. No account. No subscription.

+
-
-
✓
-
-

That's it. No account. No server. No lock-in.

-

Works out of the box with sensible defaults. Customize with .cora.yaml when you need more control.

+ + +
+

+ Ready to ship better code? +

+

+ No account. No subscription. No cloud. +

+
-
-
- -
- - -
-
-

Compare

-

Why developers choose cora

-
- -
- - - - - - - - - - - - {#each comparisons as row} - - - - - - - - {/each} - -
Featurecora
{row.feature}{row.cora}
-
-
- -
- - -
-
-

FAQ

-

Frequently asked questions

-
- -
- {#each faqs as faq, i} -
openFaq = openFaq === i ? null : i} - onkeydown={(e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); openFaq = openFaq === i ? null : i; } }} - > -
- {faq.q} - + + + +
-
- -
- - -
-

- Ready to ship
- better code? -

-

Free forever · No account required · Start in 30 seconds

-
- - - Star on GitHub - - - Read the Docs - -
-
+ + + diff --git a/website/src/routes/docs/+layout.svelte b/website/src/routes/docs/+layout.svelte index 6448fd74..892856c5 100644 --- a/website/src/routes/docs/+layout.svelte +++ b/website/src/routes/docs/+layout.svelte @@ -10,6 +10,7 @@ { href: '/docs/configuration', label: 'Configuration' }, { href: '/docs/providers', label: 'Providers' }, { href: '/docs/examples', label: 'Examples' }, + { href: '/docs/roadmap', label: 'Roadmap' }, { href: '/docs/cli-reference', label: 'CLI Reference' }, { href: '/docs/changelog', label: 'Changelog' }, ]; diff --git a/website/src/routes/docs/+page.svelte b/website/src/routes/docs/+page.svelte index dde29ff7..03587b18 100644 --- a/website/src/routes/docs/+page.svelte +++ b/website/src/routes/docs/+page.svelte @@ -1,5 +1,5 @@ diff --git a/website/src/routes/docs/roadmap/+page.svelte b/website/src/routes/docs/roadmap/+page.svelte new file mode 100644 index 00000000..609e188a --- /dev/null +++ b/website/src/routes/docs/roadmap/+page.svelte @@ -0,0 +1,141 @@ + + Roadmap — cora Docs + + +

Roadmap

+ +

Demand-gated — we build what people actually need. Track progress on GitHub Issues.

+ +
+ + +
+

+ v0.1.5 + Initial Release +

+
+ {#each [ + 'Basic diff review with OpenAI', + 'CLI interface with review command', + 'Staged/unstaged file detection', + 'JSON output format', + ] as item} +
+ {item} + ✓ Done +
+ {/each} +
+
+ + +
+

+ v0.2.0 + Multi-Provider & Deterministic Rules +

+
+ {#each [ + 'BYOK — Anthropic, Groq, Ollama support', + 'Deterministic rule engine (12 built-in)', + 'SARIF output format', + 'Branch review mode', + ] as item} +
+ {item} + ✓ Done +
+ {/each} +
+
+ + +
+

+ v0.3.0 + Scan Engine & Caching +

+
+ {#each [ + 'Full project scan (cora scan)', + 'SHA256 diff-hash caching', + 'Incremental scan mode', + 'Cross-file context chain (5 languages)', + 'Pre-commit hooks (cora hook install)', + ] as item} +
+ {item} + ✓ Done +
+ {/each} +
+
+ + +
+

+ v0.4.0 + SARIF Upload & Polish +

+
+ {#each [ + 'SARIF upload to GitHub Code Scanning', + 'Custom review/scan prompts', + 'Anti-hallucination filtering', + 'Shell completions (bash/zsh/fish)', + 'Z.AI provider support', + ] as item} +
+ {item} + ✓ Done +
+ {/each} +
+
+ + +
+

+ Phase A + Ecosystem & Performance +

+

Shipped on demand — prioritized by community requests.

+
+ {#each [ + { title: 'Homebrew tap (brew install cora)', status: 'Planned' }, + { title: 'Parallel file review (multi-threaded)', status: 'Planned' }, + { title: 'Review summary (compact / detailed mode)', status: 'Planned' }, + { title: 'GitLab CI/CD integration guide', status: 'Planned' }, + ] as item} +
+ {item.title} + {item.status} +
+ {/each} +
+
+ + +
+

+ Phase B + Editor & Team Features +

+

Requires sufficient community adoption.

+
+ {#each [ + 'VS Code extension (LSP-based)', + 'JetBrains plugin', + 'Team config (.cora.yaml inheritance)', + 'Custom rule authoring API', + ] as item} +
+ {item} + Future +
+ {/each} +
+
+ +