Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
366fc2a
docs(site): landing redesign spec v3 + plan v2, capability screenshot…
omridevk Aug 15, 2026
7302926
feat(site): serif display + self-hosted mono, drop Bricolage
omridevk Aug 15, 2026
84f7b87
feat(site): reveal primitive, tri-state media query, landing containe…
omridevk Aug 15, 2026
f0367fc
feat(site): hero copy, install command with pm tabs, product frame
omridevk Aug 15, 2026
b2840a1
fix(site): checkpoint 1 review fixes
omridevk Aug 15, 2026
f279007
feat(site): principles strip and image-led capability section
omridevk Aug 15, 2026
be2e7ee
feat(site): how-it-works as numbered doc, open-source ledger, static …
omridevk Aug 15, 2026
7fc6b6e
chore(site): remove reactbits effects, lenis, unreferenced screenshots
omridevk Aug 15, 2026
39ef9c4
fix(site): static sections — drop Reveal (SSR opacity-0)
omridevk Aug 15, 2026
8e45438
feat(site): component-sourced tab indicator, terminal block, card fig…
omridevk Aug 15, 2026
eb26e4e
fix(site): move screenshots manifest import into src, Vite refuses pu…
omridevk Aug 15, 2026
e7b377a
docs(site): spec v4 — component registry mapping, adopted + rejected
omridevk Aug 15, 2026
7d1ae55
docs(site): landing critique — measured defects on feat/landing-redesign
omridevk Aug 15, 2026
f29ca22
docs(site): DESIGN.md — Zed-derived ruled grid, six-size type scale, …
omridevk Aug 15, 2026
02be96d
feat(site): red-accent capability screenshots
omridevk Aug 15, 2026
9026d80
wip(site): landing redesign — handoff
omridevk Aug 16, 2026
699542a
fix(site): hero shader — define GLSL rotate() so the julia program li…
omridevk Aug 16, 2026
82fd8a7
feat(site): star hover — bottom-up fill through the star mask, tilt, …
omridevk Aug 16, 2026
f59286c
feat(site): BrandMark — spark + conciv wordmark (Geist 16/700, -0.02e…
omridevk Aug 16, 2026
59a8d71
feat(site): copy diet — 2-item eyebrow, 17-word balanced hero sub, pl…
omridevk Aug 16, 2026
6b8f7dc
fix(site): motion + shader calibration — flat theme toggle, tab indic…
omridevk Aug 16, 2026
12a9327
fix(site): nav inset, off-grid spacing, accent AA tokens, root clip
omridevk Aug 16, 2026
a81e935
refactor(site): semantic figures, ledger principles, compact footer, …
omridevk Aug 16, 2026
79c0be8
fix(site): poster persists until the demo reports ready; step 3 2:1 grid
omridevk Aug 16, 2026
7cf56ec
refactor(site): tokenised hover markup, one star component, reserved …
omridevk Aug 16, 2026
cf95997
style(site): demo on the six-size scale
omridevk Aug 16, 2026
32f119b
fix(site): hover-card anchors open instantly on keyboard focus (Radix…
omridevk Aug 16, 2026
71c1f28
docs(site): landing spec v5 provenance, critique log, DESIGN.md excep…
omridevk Aug 16, 2026
b38e3e0
fix(site): pixel audit — column rules land on the 1120 grid and nodes…
omridevk Aug 16, 2026
0fac4b0
fix(site): pixel audit — ruled cells share one width, ledger sits on …
omridevk Aug 16, 2026
0a8719e
fix(site): pixel audit — step numerals in mono, as the design languag…
omridevk Aug 16, 2026
e1de432
test(site): landing ITs — overflow ladder, reduced-motion shader, pos…
omridevk Aug 16, 2026
715a293
fix(site): step numerals back to serif (spec + handoff design; DESIGN…
omridevk Aug 16, 2026
bf6eed4
fix(site): star count skeleton only while pending; a failed /api/star…
omridevk Aug 16, 2026
a1877e0
fix(site): tab strips rendered classic scrollbars — AnimatedTabs list…
omridevk Aug 16, 2026
0fa119a
fix(site): hero shader — remove global rotation, in-figure motion only
omridevk Aug 16, 2026
e7ad643
feat(site): star hover — spring fill, no count mutation
omridevk Aug 16, 2026
af76235
fix(site): pm tab switch jumped — the command box outgrew its ch-base…
omridevk Aug 16, 2026
210ff0f
fix(site): hero shader read as static — brightness wave and contour d…
omridevk Aug 16, 2026
6e718fe
fix(site): nav star count went blank — /api/stars called GitHub unaut…
omridevk Aug 16, 2026
f02bf4e
feat(site): star count resolved server-side, no skeleton, collapse wh…
omridevk Aug 16, 2026
a3fee40
fix(site): hero shader — visible traveling pulse and breathing, verif…
omridevk Aug 16, 2026
3554ce0
fix(site): a11y — installer tabs get a real tabpanel, AA code theme, …
omridevk Aug 16, 2026
fe324db
test(site): axe WCAG AA scan across themes/states
omridevk Aug 16, 2026
a2d824f
test(site): capture console text in landing IT
omridevk Aug 16, 2026
955142c
merge: origin/main into feat/landing-redesign
omridevk Aug 16, 2026
41b6a77
feat(site): capability section — two annotated stories + evidence strip
omridevk Aug 16, 2026
369d22e
fix(site): hero shader — DPR2 crisp isolines, adaptive budget, calm m…
omridevk Aug 16, 2026
a4b88bc
feat(site): hero backdrop — static Zed-style engraving, three variant…
omridevk Aug 17, 2026
07008b8
feat(site): denser hero engraving
omridevk Aug 17, 2026
6cf20c2
fix(site): centre rule node diamonds on their crossings
omridevk Aug 17, 2026
5185b8d
feat(site): thin ruled spacer bands between landing sections
omridevk Aug 17, 2026
8c30b52
feat(site): hero backdrop — owner-tuned grid + rule ticks, replaces e…
omridevk Aug 17, 2026
12136e5
feat(site): hero accent wash between column rules
omridevk Aug 17, 2026
70eb138
feat(site): spacer hatch texture with paper tone
omridevk Aug 17, 2026
7d8af11
feat(site): product frame backdrop + breathing room
omridevk Aug 17, 2026
8327d48
feat(site): frame effect variants — dithering-warp, default active
omridevk Aug 17, 2026
a4c619c
feat(site): frame effect — synth ribbon variant, default active
omridevk Aug 17, 2026
1c022ed
feat(site): frame effect — ferrofluid variant, default active
omridevk Aug 17, 2026
5d72f13
feat(site): hero grain texture under the grid
omridevk Aug 17, 2026
56f34d3
fix(site): paper grain overlays the full band and stops at the hatch …
omridevk Aug 17, 2026
880b329
fix(site): paper grain runs full height, contained to the content grid
omridevk Aug 17, 2026
6e8c11d
fix(site): paper grain sits behind the content
omridevk Aug 17, 2026
05cda6d
perf(site): rasterize the paper grain and drop the GL surface
omridevk Aug 18, 2026
e722eed
fix(site): grain scrolls with the page over the whole document
omridevk Aug 18, 2026
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
286 changes: 286 additions & 0 deletions apps/site/DESIGN.md

Large diffs are not rendered by default.

19 changes: 19 additions & 0 deletions apps/site/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,22 @@ yarn dev

Deploys to [conciv.dev](https://conciv.dev) via Cloudflare Workers Builds on push to `main`
(watch paths: `apps/site/**`, `packages/{mascot,it,protocol}/**`).

## GitHub star count

The nav button and the landing ledger show the repository's star count. The worker resolves it
server-side (`src/lib/star-count-resolver.server.ts`), caches it in the Workers Cache API for an
hour and keeps the last known value for a week, so the count is in the first paint and never shows a
placeholder. `/api/stars` exposes the same cached value; the browser calls it once after hydration
to swap in a fresher number silently.

Unauthenticated GitHub API calls share a 60 requests/hour budget per IP. Set `GITHUB_TOKEN`
(any token with public repo read access) and the worker sends it as a bearer token, lifting the
budget to 5000/hour:

```bash
pnpm exec wrangler secret put GITHUB_TOKEN
pnpm exec wrangler dev --var GITHUB_TOKEN:<token>
```

The value is never logged and never reaches the client bundle.
4 changes: 3 additions & 1 deletion apps/site/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@
"@conciv/mascot": "workspace:*",
"@conciv/protocol": "workspace:*",
"@fontsource-variable/geist": "^5.2.9",
"@fontsource-variable/jetbrains-mono": "^5.3.0",
"@fontsource-variable/newsreader": "^5.3.0",
"@gsap/react": "^2.1.2",
"@huggingface/transformers": "^4.2.0",
"@shikijs/magic-move": "^4.3.0",
Expand All @@ -43,7 +45,6 @@
"fumadocs-mdx": "^15.0.12",
"fumadocs-ui": "^16.10.2",
"gsap": "^3.15.0",
"lenis": "^1.3.25",
"lucide-react": "^1.18.0",
"mermaid": "^11.15.0",
"motion": "^12.42.2",
Expand All @@ -59,6 +60,7 @@
"zod": "^4.4.3"
},
"devDependencies": {
"@axe-core/playwright": "4.13.0",
"@cloudflare/vite-plugin": "^1.42.4",
"@conciv/browser-fixture": "workspace:*",
"@conciv/core": "workspace:*",
Expand Down
1 change: 1 addition & 0 deletions apps/site/public/icons/bun.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions apps/site/public/icons/npm.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions apps/site/public/icons/pnpm.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions apps/site/public/icons/yarn.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/site/public/screenshots/edit-live.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/site/public/screenshots/fab-closed.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/site/public/screenshots/grab-element.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/site/public/screenshots/hero-demo.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
66 changes: 66 additions & 0 deletions apps/site/public/screenshots/index.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
[
{
"file": "grab-element.webp",
"source": "r14-grab-crosshair-highlight.png",
"crop": [804, 360, 3036, 1900],
"width": 1160,
"height": 726,
"alt": "conciv widget panel with a red accent open beside the host page's form, a teal crosshair highlight ringing the Submit button and a locator tooltip below it reading LocalSubscribe$1.button"
},
{
"file": "edit-live.webp",
"source": "r23-edit-live-restyled.png",
"crop": [341, 180, 3499, 2190],
"width": 1160,
"height": 726,
"alt": "Host page heading restyled to bright purple next to the conciv panel showing the request, an Edited the page tool card with a setstyle action, and the reply: hero h1 now #a020f0, inline style only, reload wipes it"
},
{
"file": "test-run.webp",
"source": "r29-test-run-card.png",
"crop": [804, 360, 3036, 1900],
"width": 1160,
"height": 726,
"alt": "conciv panel showing a Ran the tests card with action run and 4 passed badges, per-test rows for lib/cn.test.ts and lib/nav.test.ts, and the summary 4 pass, 0 fail. All green."
},
{
"file": "permission.webp",
"source": "r32-permission-card.png",
"crop": [804, 360, 3036, 1900],
"width": 1160,
"height": 726,
"alt": "conciv panel mid-approval: a bash tool card named Remove scratch file above a Run this action? prompt with Deny and a red Allow button"
},
{
"file": "whiteboard.webp",
"source": "r41-whiteboard-diagram.png",
"crop": [200, 0, 3640, 2278],
"width": 1160,
"height": 726,
"alt": "Agent-drawn flowchart on the shared whiteboard canvas over the host page, four labeled boxes, Your App, conciv Widget, Agent (me), Your Source Files, connected by arrows in a loop, with the conciv chat panel listing the confirmed box coordinates"
},
{
"file": "any-running-app.webp",
"source": "e06r-hero-framing-1440.png",
"crop": [0, 578, 4320, 1852],
"width": 2360,
"height": 1012,
"alt": "conciv panel open on the vite.dev site next to the hero, The Build Tool for the Web with Get Started and View on GitHub, answering the question what is this page selling"
},
{
"file": "fab-closed.webp",
"source": "r01-fab-closed-form.png",
"crop": [3480, 2136, 360, 270],
"width": 800,
"height": 600,
"alt": "conciv's closed floating action button, a round robot-mascot avatar with pink eyes, docked in the bottom-right corner of the host page"
},
{
"file": "hero-demo.webp",
"source": "site demo capture (ProductFrame body at 1120×700, DPR 2)",
"crop": null,
"width": 2240,
"height": 1400,
"alt": "conciv live demo: a dark sample app with a Get started button on the left, the conciv chat panel on the right inviting you to grab an element and say what to change."
}
]
Binary file added apps/site/public/screenshots/permission.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/site/public/screenshots/test-run.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/site/public/screenshots/whiteboard.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
31 changes: 22 additions & 9 deletions apps/site/scripts/highlight-snippets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@ import {createHighlighter} from 'shiki'
import {createTwoslasher} from 'twoslash'
import {codeToKeyedTokens} from '@shikijs/magic-move/core'
import {cleanSnippet, FRAMEWORK_SNIPPETS} from '../src/components/landing/framework-snippets.ts'
import {INSTALL_COMMANDS} from '../src/lib/package-installer-store.ts'

const THEMES = {light: 'github-light', dark: 'github-dark'} as const
const THEMES = {light: 'github-light-high-contrast', dark: 'github-dark'} as const

const highlighter = await createHighlighter({themes: Object.values(THEMES), langs: ['ts', 'js', 'swift']})
const highlighter = await createHighlighter({themes: Object.values(THEMES), langs: ['ts', 'js', 'swift', 'sh']})

const withCode = FRAMEWORK_SNIPPETS.flatMap((snippet) =>
snippet.code === undefined ? [] : [{...snippet, code: snippet.code}],
Expand All @@ -21,11 +22,18 @@ const steps = withCode.map((snippet) =>
}),
)

const inlineHighlight = (code: string) =>
highlighter
.codeToHtml(code, {lang: 'ts', themes: THEMES, defaultColor: 'light'})
.replace(/^<pre[^>]*><code>/, '')
.replace(/<\/code><\/pre>$/, '')
const installSteps = INSTALL_COMMANDS.map((entry) =>
codeToKeyedTokens(highlighter, entry.command, {lang: 'sh', themes: THEMES, defaultColor: 'light'}),
)

const inlineTokens = (code: string) =>
highlighter.codeToTokens(code, {lang: 'ts', themes: THEMES, defaultColor: 'light'}).tokens.map((line) =>
line.map((token) => ({
content: token.content,
color: token.htmlStyle?.color,
darkColor: token.htmlStyle?.['--shiki-dark'],
})),
)

const twoslasher = createTwoslasher()

Expand All @@ -41,7 +49,7 @@ const hoverData = withCode.flatMap((snippet) => {
{
target: node.target,
occurrence,
html: inlineHighlight(node.text),
tokens: inlineTokens(node.text),
docs: node.docs ?? null,
},
]
Expand All @@ -62,7 +70,8 @@ const hoverData = withCode.flatMap((snippet) => {
const body = [
"import type {KeyedTokensInfo} from '@shikijs/magic-move/types'",
'',
'export type SnippetHover = {target: string; occurrence: number; html: string; docs: string | null}',
'export type SnippetToken = {content: string; color?: string; darkColor?: string}',
'export type SnippetHover = {target: string; occurrence: number; tokens: SnippetToken[][]; docs: string | null}',
'export type SnippetCompletion = {target: string; items: string[]}',
'export type SnippetTwoslash = {id: string; hovers: SnippetHover[]; completion: SnippetCompletion | null}',
'',
Expand All @@ -72,6 +81,10 @@ const body = [
'',
`export const SNIPPET_TWOSLASH: SnippetTwoslash[] = ${JSON.stringify(hoverData)}`,
'',
`export const INSTALL_COMMAND_STEP_IDS: string[] = ${JSON.stringify(INSTALL_COMMANDS.map((entry) => entry.id))}`,
'',
`export const INSTALL_COMMAND_STEPS: KeyedTokensInfo[] = ${JSON.stringify(installSteps)}`,
'',
].join('\n')

const out = fileURLToPath(new URL('../src/components/landing/framework-snippets.gen.ts', import.meta.url))
Expand Down
1 change: 1 addition & 0 deletions apps/site/source.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,6 @@ export const docs = defineDocs({
export default defineConfig({
mdxOptions: {
remarkPlugins: [remarkMdxMermaid],
rehypeCodeOptions: {themes: {light: 'github-light-high-contrast', dark: 'github-dark'}},
},
})
158 changes: 0 additions & 158 deletions apps/site/src/components/AnimatedContent.tsx

This file was deleted.

Loading