Pre-launch — Gluecron is in final validation. Public signups and git hosting for non-owner users open after launch review.
Commit8c7b6eaunknown_key

Merge pull request #96 from ccantynz-alt/claude/site-migration-vercel-XstpK

Merge pull request #96 from ccantynz-alt/claude/site-migration-vercel-XstpK

Claude/site migration vercel xstp k
CC LABS App committed on June 1, 2026Parents: a64d7ca 6499f34
2 files changed+14128c7b6eafc5827b79dfe13b805c090db99d122fd6
2 changed files+14−12
ModifiedDockerfile+7−2View fileUnifiedSplit
11FROM oven/bun:1.3 AS base
22WORKDIR /app
33
4# Install git (required for git operations)
5RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/*
4# Install git (required for ALL git operations — clone, push, branch/tree
5# listing, diffs). Verify it landed: a missing binary here must fail the
6# build loudly rather than ship an image that 500s on every repo page.
7RUN apt-get update \
8 && apt-get install -y --no-install-recommends git ca-certificates \
9 && rm -rf /var/lib/apt/lists/* \
10 && git --version
611
712# Install dependencies
813COPY package.json bun.lock ./
Modifiedsrc/views/landing-2030.tsx+7−10View fileUnifiedSplit
1111import type { FC } from "hono/jsx";
1212
1313export interface Landing2030Props {
14 // Reserved for future use. The stat band intentionally shows
15 // capability metrics rather than live counts so the page reads strong
16 // at any scale.
1417 stats?: { publicRepos?: number; users?: number };
1518}
1619
17const fmt = (n?: number) => {
18 if (n == null) return "—";
19 if (n >= 1000) return `${(n / 1000).toFixed(n >= 10000 ? 0 : 1)}k`;
20 return String(n);
21};
22
2320/* ---- small stroke icons (inherit currentColor) ---------------------- */
2421const IconReview: FC = () => (
2522 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6"
8380 { n: "04", title: "Merged, autonomously", body: "Green across the board? It merges itself and deploys. You wake up to shipped work." },
8481];
8582
86export const Landing2030Page: FC<Landing2030Props> = ({ stats }) => {
83export const Landing2030Page: FC<Landing2030Props> = () => {
8784 const title = "Gluecron — The git host built for 2030";
8885 const desc =
8986 "Gluecron is the AI-native git host. Claude reviews every pull request, gates run at push time, and clean PRs merge while you sleep. Label an issue, walk away, wake up to a merged PR.";
187184 {/* ---- stat band ---- */}
188185 <section class="stats">
189186 <div class="wrap stats-in">
190 <div class="stat"><div class="stat-n">{fmt(stats?.publicRepos)}</div><div class="stat-l">public repositories</div></div>
191 <div class="stat"><div class="stat-n">{fmt(stats?.users)}</div><div class="stat-l">builders onboard</div></div>
192 <div class="stat"><div class="stat-n">&lt; 30s</div><div class="stat-l">to first review</div></div>
187 <div class="stat"><div class="stat-n">&lt; 30s</div><div class="stat-l">to first AI review</div></div>
193188 <div class="stat"><div class="stat-n">24/7</div><div class="stat-l">autonomous merges</div></div>
189 <div class="stat"><div class="stat-n">100%</div><div class="stat-l">push-time gate coverage</div></div>
190 <div class="stat"><div class="stat-n">Self-owned</div><div class="stat-l">your code, your server</div></div>
194191 </div>
195192 </section>
196193
197194