Skip to content

Lander: keep the platform, drop the bill, for the #1225 launch - #1278

Merged
nick-potts merged 2 commits into
mainfrom
t3code/carol-icp-landing-page
Sep 30, 2026
Merged

nick-potts merged 2 commits into
mainfrom
t3code/carol-icp-landing-page

Conversation

@nick-potts

@nick-potts nick-potts commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

Summary

The public lander at / replaces the stub. It's a page for Carol, a solo developer who already pays a hosted platform, and it sells the #1225 flow. Draft until #1225 ships (see Merge Danger).

<PublicLayout> .light (dashboard/src/routes/_public/route.tsx)  always light, whatever the visitor's theme
  <PublicHeader>  Sign in · Deploy → <LoginDialog>  (-components/PublicChrome.tsx; hidden on /auth)
  <Outlet>
    / → <Lander> (index.tsx)
      <Hero>        "Keep the platform. Drop the bill." · pink Deploy → <LoginDialog>
        <HeroScene>                                    the canvas on a Server, requests flowing
      <OneCommand>  <GetStartedScene>                  root prompt → ployz up → https
      <AnyStack> .dark  <DeployTicker>                 Deploy [Next.js · Rails · … · anything]
      <Platform>    <PreviewScene> · <ReviewScene>     a preview environment per PR · changes wait in pink
      <Runs>        Start · Ship · Grow · Agents       Soon: database moves; snapshots, backups, rollbacks
      <Pricing>     <ReceiptScene>                     $0 on your servers · $9 custom domains
      <Founder> · <Compare> · <Questions> (17) · <Closer> <ExitPrompt>
    /auth → <LoginPanel>                               for direct links, and before the page is interactive
  <PublicFooter>
dashboard/src/components/marketing/
├── kit.tsx      # ServiceCard and StatusDot in product colours; Wires in the canvas's edge shapes; Terminal, BrowserWindow, ServerFace
├── scenes.tsx   # the pictures, built from the kit
└── landing.css  # scene CSS in Tailwind's components layer, loaded by this route only

One product-wide change keeps the page light when the visitor's theme is dark:

-@custom-variant dark (&:is(.dark *));
+@custom-variant dark (&:is(:is(.dark *):not(:where(.light *)), :where(.light .dark *)));
-:root {
+:root,
+.light {

Also:

  • Sign-in opens in a dialog over the page again, as it did before First stable tree cleanup and release contracts #1063.
  • /auth shares the lander's header and footer, and LoginPanel loses its placeholder "P" tile.
  • dashboard/CONTEXT.md lets the public site call a PR Environment a "preview environment".
  • The unused PloyzLogo wrapper is gone. PloyzMark stays.

Evidence

  • Before: / was a stub: the logo, "Deploy and run applications on servers you control." and Sign in.
    After: the page above, checked in Chrome at 1440px, at 390px, and under a dark system theme, where it stays light.
  • Sign-in: clicking Deploy or Sign in opens the dialog without navigating, and it stays light under a dark theme. /auth shows the shared header and footer at 1440px and 390px. From /auth, "How it works" lands on /#start client-side.
  • pnpm pr:check: actionlint, typecheck, lint, sdk, build and test all pass. The test stage needed one rerun: a test Postgres dropped a connection during teardown in admission.server.postgres.test.ts, which this change doesn't touch.
  • Four-axis review: Standards, Spec, Maintainability and Simplicity all pass, after three fix rounds and two follow-up rounds for the dialog and /auth.
  • pnpm pr:check isn't re-run after the dialog and /auth commit (8389f37). Typecheck, lint and the data-boundaries test pass on it, and CI covers the build and tests.

Merge Danger

Door: two-way

Reverting brings the stub back. Nothing here writes data.

Blast Radius: styles

  • Styles: the dark: variant now skips .light subtrees, and applies again inside a .dark block within one. The added parts sit in :where(), so dark: keeps its old specificity, (0,2,0). No product page has a .light class below <html>, so the product renders as before.
  • Redirect: signed-in users still go from / and /auth to /cloud.
  • /auth for everyone: anything that sends people to /auth now shows the lander's header and footer around the sign-in panel.
  • Hold until Everything the dashboard does, an agent can do: the Config Store and a ployz CLI with full parity #1225 ships. The page shows ployz login, ployz up --server root@…, ployz server add root@…, ployz set, ployz deploy and ployz setup agent, with printed output. The CLI at this head has no up, login or setup. Check every terminal line and its output against the shipped CLI before merge.

The public page at / replaces the stub with a page for a solo developer
who already pays a hosted platform. It follows the rhythm of Porter's
homepage: the dashboard on a server, the root prompt handed to
`ployz up`, the stack it deploys, preview environments and reviewed
changes, what Ployz runs, pricing, a founder quote, a comparison and
seventeen honest answers. Database moves and backups carry Soon tags.

The pictures are built from the product's own Card, status colours and
bottom bar, with wires in the canvas's edge shapes. The page is always
light: `.light` rescopes the tokens, and the dark variant skips a
`.light` subtree without changing its specificity. The glossary lets
the public site say "preview environment".

It launches with #1225: its CLI lines are checked against the shipped
CLI before merge.
@railway-app

railway-app Bot commented Sep 30, 2026

Copy link
Copy Markdown

🚅 Environment ployz2-pr-1278 in Ployz Dashboard has no services deployed.

@nick-potts
nick-potts marked this pull request as ready for review September 30, 2026 05:19
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-30T05:35:33.519965Z 8389f37 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1f51d862a2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +156 to +158
<Line order={1} prompt="$">
ployz up --server root@203.0.113.12
</Line>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Gate the lander until its advertised commands ship

At this commit, the CLI registry in core/crates/ployz/src/cli/mod.rs:13-30 contains neither login nor up, yet the public onboarding scene presents both as a working path and shows a successful deployment. Users following the primary flow therefore receive unknown-subcommand errors; as the commit message itself says to hold this page until #1225 ships, retain or gate the stub until those commands land.

Useful? React with 👍 / 👎.


export function PreviewScene() {
return (
<div role="img" aria-label="Pull request #142 gets its own preview environment at its own https address, showing the new pricing section" inert className="relative isolate flex flex-col items-center gap-10">

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep labeled scene roots outside inert subtrees

For screen-reader users, inert removes this element and all descendants from the accessibility tree, so the role="img" and aria-label on the same node never expose the scene description. ReviewScene repeats the pattern at line 298; place inert on an inner visual wrapper, as HeroScene does, or remove it from each labeled root.

Useful? React with 👍 / 👎.

Deploy and Sign in open sign-in in a dialog over the page again, as
they did before #1063; /auth stays for direct links and before the page
is interactive. /auth no longer stands alone: the _public layout gives
both signed-out pages the same header, footer and light scope, and the
header's links reach the lander's sections from either page. On /auth
the frame drops its own sign-in links, and the sign-in panel loses its
placeholder tile.
@nick-potts
nick-potts merged commit 1bd102e into main Sep 30, 2026
10 checks passed
@nick-potts
nick-potts deleted the t3code/carol-icp-landing-page branch September 30, 2026 15:14
nick-potts added a commit that referenced this pull request Sep 30, 2026
* Lander: keep the platform, drop the bill, for the #1225 launch

The public page at / replaces the stub with a page for a solo developer
who already pays a hosted platform. It follows the rhythm of Porter's
homepage: the dashboard on a server, the root prompt handed to
`ployz up`, the stack it deploys, preview environments and reviewed
changes, what Ployz runs, pricing, a founder quote, a comparison and
seventeen honest answers. Database moves and backups carry Soon tags.

The pictures are built from the product's own Card, status colours and
bottom bar, with wires in the canvas's edge shapes. The page is always
light: `.light` rescopes the tokens, and the dark variant skips a
`.light` subtree without changing its specificity. The glossary lets
the public site say "preview environment".

It launches with #1225: its CLI lines are checked against the shipped
CLI before merge.

* Lander: sign in over the page, and give /auth the lander's frame

Deploy and Sign in open sign-in in a dialog over the page again, as
they did before #1063; /auth stays for direct links and before the page
is interactive. /auth no longer stands alone: the _public layout gives
both signed-out pages the same header, footer and light scope, and the
header's links reach the lander's sections from either page. On /auth
the frame drops its own sign-in links, and the sign-in panel loses its
placeholder tile.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant