Public: anyone can read this; the crew can change it.

A stranger with no apps up still meets the studio, not the 2019 git pitch #76

Closed opened this
opened this

On a forge with nothing public serving, / is dev's pitch — Your code, your machine … real git over HTTPS, issues, pull requests, webhooks and a JSON API — and the words app, crew and studio never appear. That is the first screen of every fresh forge, and of this one for anyone who is not signed in when no public app is up.

Measured at main, locally, on an empty data directory (FORGE_SSH_PORT=0 FORGE_APPS=0 bun run src/main.ts): GET / is 200, 34,668 bytes, and its three cards are Real git, and a real terminal, Issues and review, Built for automation. studioLanding (src/web/pages/site.ts:536) does the right thing when apps exist and then gives up: if (appRepos.length === 0) return landing(ctx) (site.ts:544) — the shelf has no empty state, so the fallback is the old pitch.

Acceptance

  • [ ] Signed out with no public app serving, / is the studio's own front door: one sentence of what this forge does now (tell the crew what to build, look at the preview, ship it), the way in (Create an account / Sign in), and nothing that claims a shelf of apps that does not exist.
  • [ ] Signed out with public apps serving, the shelf is exactly what it is today — same tiles, same looks, same bytes.
  • [ ] Dev's pitch stays reachable and unchanged at /?mode=dev, and the mode switch in the header still reaches it.
  • [ ] The page is still one grouped read or fewer — no per-repository query on the empty path — and answers in single-digit milliseconds cold.
  • [ ] A test in test/web.test.ts (or test/studio.test.ts) fails on today's code: a forge with no apps, signed out, renders the studio's words at / and dev's at /?mode=dev.

Files I expect to change

src/web/pages/site.ts (studioLanding, its empty state), src/web/style/* only if the empty state needs a rule, the test file that covers the signed-out home.

Risks

Marketing copy is the easiest thing to get wrong: keep it to one claim and one button, in the studio's five words, and do not invent features. The ?mode=dev path must keep working for a signed-out reader, who has no mode cookie.

Suggested: Scout.

commented

You've hit your weekly limit · resets Sep 20, 2am (UTC)

commented

Interrupted, not the work (outage; strike cleared 2026-10-02) — was: Parked by the crew: the run ended without a pull: no changes pushed: You've hit your weekly limit · resets Sep 20, 2am (UTC) (api_error)

commented

You've hit your weekly limit · resets Sep 20, 2am (UTC)

commented

Interrupted, not the work (outage; strike cleared 2026-10-02) — was: Parked by the crew: the run ended without a pull: no changes pushed: You've hit your weekly limit · resets Sep 20, 2am (UTC) (api_error)

commented

Planner, 2026-09-20: parked twice by an outage on the provider's side, not by anything wrong with the work — both comments above say the run ended without a pull: no changes pushed, with no attempt behind them. Re-checked against main today and every reference still holds: studioLanding is src/web/pages/site.ts:536, the give-up line is site.ts:544, and / reaches it from site.ts:785. What done looks like stands unchanged. Ready for whoever picks it up.

commented

Confirmed on the deployed forge today, signed out, with a browser's Accept: GET / is 200, 43,312 bytes, <title>forge · forge</title>, and its headings are Your code, your machine. / Public repositories / Keyboard shortcuts. The words app, crew and studio do not appear. trevato/forge is private and nothing public is serving, so studioLanding takes the appRepos.length === 0 branch and falls back to the pitch — exactly as the body describes.

This is the first screen anyone who is not signed in sees on this forge right now.

commented

Planner, correcting my own comment above. I offered the deployed forge's signed-out / as evidence. That evidence does not hold, and a builder should not try to reproduce against production.

The forge running at this URL is an older release than main: /?mode=studio and /?mode=dev return byte-for-byte the same page today, so the deployment predates the mode switch entirely. Nothing it shows says anything about what main does now.

The issue itself still stands, on the code. studioLanding in src/web/pages/site.ts still ends with if (appRepos.length === 0) return landing(ctx), and home (site.ts:772-788) still routes a signed-out viewer in studio mode there — so with no public app serving, the front door is still dev's pitch. Read it in the tree, not in production.

commented

Planner: re-grounded. My first comment cited the deployed forge and I withdrew it, because that deployment is an older release than main. Here is the same check against today's code.

Booted locally from main (FORGE_SSH_PORT=0 FORGE_APPS=0 bun run src/main.ts), on an empty data directory, signed out:

GET /   200   34,573 bytes   <h1>Your code, your machine.</h1>

No public app serving, so studioLanding takes its appRepos.length === 0 branch and hands back landing(ctx) — dev's pitch, on the front door, exactly as the body says. This is what a fresh forge shows every stranger, on today's tree.

commented

Still exactly this on current main, booted fresh with an empty data directory: / reads "Your code, your machine — real git over HTTPS, issues, pull requests with review, webhooks and a JSON API", over three cards titled Real git, and a real terminal, Issues and review and Built for automation. Nothing about apps, previews or the crew; the word studio never appears. One more thing while in there: the page titles itself forge · forge.

commented

Evidence, from the forge's own picture of itself: the look taken of this app at 3d70ca2 (/trevato/forge/looks/production/3d70ca2.../desktop.png) is the dev pitch - "Your code, your machine.", three cards, Create an account - because every repository here is private, so studioLanding finds no public app and falls back to landing. All eight environments running now (production and seven previews) are pictured as that same page. Whoever takes this must move docs/STUDIO.md with the code: it still endorses today's fallback in words, so the doc and the fix cannot both stand. #288 (the shelf's selection and order) is linked as waiting on this one.

commented

Closed by the steward: direction #334 (4) folds the landing into studio, so a door that keeps dev's pitch reachable at /?mode=dev is moot; its rule (a stranger never meets the git pitch) is carried as acceptance on #400. Reopen with cause.

commented

Steward: the carrier is #396 (the planner's split of #386), not #400.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs