Commitb0148e9unknown_key
feat(design): Phase 2 — marketing surface (/pricing, /features, /about)
feat(design): Phase 2 — marketing surface (/pricing, /features, /about) Adds three new public marketing pages that showcase the new design system at full strength. Routes mounted via marketingRoutes in app.tsx. /pricing - 4-tier grid (Free / Pro / Team / Enterprise) with Most-Popular pill on Pro - Self-host card with surface-glow + 4-stat grid (gradient numerals) - 6-item FAQ in <details>/<summary> with rotating + glyph - Closing CTA card /features - 36 features across 6 categories (Code intelligence / Quality gate / Real-time / Platform / Identity + governance / Integrations) - Hairline-grid 2-col layout with hover dot indicator + cell highlight - Section headers use the new .eyebrow + left-aligned section-header pattern /about - Mission prose block with bold-callout - 6-card principles grid with mono-numbered chips - Stack pill row (8 stack items: Bun, Hono, Drizzle, Neon, Sonnet 4, Haiku 4.5, Smart-HTTP, Fly.io) - 3-card contact grid (product, security, support) Layout shell - Footer link grid restructured: Product (Features/Pricing/Explore/Marketplace), Platform (Quickstart/Status/GraphQL/MCP), Company (About/Terms/Privacy/AUP) All pages share a sharedMktCss base + per-page CSS, namespaced under .mkt- to keep them out of the global stylesheet. Reuse the Phase 1 utilities: .eyebrow .display .section-header .stagger .surface-glow .gradient-text. Smoke: pricing 200/89KB, features 200/87KB, about 200/86KB. Tests: 1226 pass / 1 unrelated pre-existing fail.
3 files changed+1173−4b0148e937915724e40f3e7755d0be96e191a75ad
3 changed files+1173−4
Modifiedsrc/app.tsx+4−0View fileUnifiedSplit
@@ -31,6 +31,7 @@ import healthRoutes from "./routes/health-probe";
3131import healthDashboardRoutes from "./routes/health";
3232import statusRoutes from "./routes/status";
3333import helpRoutes from "./routes/help";
34import marketingRoutes from "./routes/marketing";
3435import seoRoutes from "./routes/seo";
3536import { platformStatus } from "./routes/platform-status";
3637import insightRoutes from "./routes/insights";
@@ -238,6 +239,9 @@ app.route("/", statusRoutes);
238239// /help — quickstart + API cheatsheet
239240app.route("/", helpRoutes);
240241
242// /pricing, /features, /about — marketing surface
243app.route("/", marketingRoutes);
244
241245// SEO: robots.txt + sitemap.xml
242246app.route("/", seoRoutes);
243247
Addedsrc/routes/marketing.tsx+1164−0View fileUnifiedSplit
Large file (1,164 lines). Load full file
Modifiedsrc/views/layout.tsx+5−4View fileUnifiedSplit
@@ -111,20 +111,21 @@ export const Layout: FC<
111111 <div class="footer-links">
112112 <div class="footer-col">
113113 <div class="footer-col-title">Product</div>
114 <a href="/features">Features</a>
115 <a href="/pricing">Pricing</a>
114116 <a href="/explore">Explore</a>
115117 <a href="/marketplace">Marketplace</a>
116 <a href="/help">Quickstart</a>
117 <a href="/shortcuts">Shortcuts</a>
118118 </div>
119119 <div class="footer-col">
120120 <div class="footer-col-title">Platform</div>
121 <a href="/help">Quickstart</a>
121122 <a href="/status">Status</a>
122123 <a href="/api/graphql">GraphQL</a>
123124 <a href="/mcp">MCP server</a>
124 <a href="/sitemap.xml">Sitemap</a>
125125 </div>
126126 <div class="footer-col">
127 <div class="footer-col-title">Legal</div>
127 <div class="footer-col-title">Company</div>
128 <a href="/about">About</a>
128129 <a href="/terms">Terms</a>
129130 <a href="/privacy">Privacy</a>
130131 <a href="/acceptable-use">Acceptable use</a>
131132