Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 63 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: CI

on:
pull_request:
branches: [develop]
branches: [develop, main]
push:
branches: [main]

Expand All @@ -18,6 +18,7 @@ permissions:
id-token: write

jobs:
# ── Rust ──
check:
name: Check
runs-on: ubuntu-latest
Expand Down Expand Up @@ -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
Expand All @@ -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
110 changes: 110 additions & 0 deletions website/src/app.css
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
43 changes: 21 additions & 22 deletions website/src/routes/+layout.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -7,35 +7,34 @@
const isDocs = $derived($page.url.pathname.startsWith('/docs'));
</script>

<div class="min-h-screen flex flex-col">
<nav class="border-b border-[var(--border)] bg-[var(--background)]/80 backdrop-blur-md sticky top-0 z-50">
<div class="max-w-4xl mx-auto px-6 h-14 flex items-center justify-between">
<a href="/" class="flex items-center gap-2.5 text-base font-bold hover:text-[var(--accent)] transition-colors">
<span class="text-lg">🛡️</span>
<div class="bg-background min-h-screen">
<!-- Header -->
<header class="site-header">
<div class="max-w-6xl mx-auto px-4 sm:px-6 flex items-center justify-between h-14">
<a href="/" class="site-header-link font-semibold text-foreground">
cora
</a>
<div class="flex items-center gap-5 text-sm text-[var(--muted-foreground)]">
<a href="/docs" class="hover:text-[var(--foreground)] transition-colors hidden sm:inline" class:active={isDocs}>Docs</a>
<a href="https://github.com/codecoradev/cora-cli" target="_blank" rel="noopener" class="hover:text-[var(--foreground)] transition-colors inline-flex items-center gap-1">

<nav class="hidden sm:flex items-center gap-6">
<a href="/docs" class="site-header-link" class:active={isDocs}>Docs</a>
<a href="https://github.com/codecoradev/cora-cli" target="_blank" rel="noopener" class="site-header-link">
GitHub
<svg class="w-3.5 h-3.5" viewBox="0 0 16 16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z" /></svg>
</a>
</nav>

<!-- Desktop CTA -->
<div class="hidden sm:block">
<a href="/docs/getting-started" class="btn-primary text-[13px] px-3.5 py-1.5">Get Started</a>
</div>

<!-- Mobile-only CTA -->
<div class="sm:hidden">
<a href="/docs/getting-started" class="btn-primary text-xs px-3 py-1.5">Get Started</a>
</div>
</div>
</nav>
</header>

<main class="flex-1">
<main>
{@render children()}
</main>

<footer class="border-t border-[var(--border)] mt-20">
<div class="max-w-4xl mx-auto px-6 py-8 flex flex-col sm:flex-row items-center justify-between gap-4 text-sm text-[var(--muted-foreground)]">
<span>© 2026 cora — AI code review CLI · MIT License</span>
<div class="flex items-center gap-4">
<a href="https://github.com/codecoradev/cora-cli" target="_blank" rel="noopener" class="hover:text-[var(--foreground)] transition-colors">GitHub</a>
<a href="/docs" class="hover:text-[var(--foreground)] transition-colors">Docs</a>
<a href="https://github.com/codecoradev/cora-cli/blob/develop/LICENSE" class="hover:text-[var(--foreground)] transition-colors">MIT</a>
</div>
</div>
</footer>
</div>
Loading
Loading