Repository navigation
Build a real onctl.sh landing page - #1096
Merged
Merged
Conversation
Following LANDING_PAGE_RESEARCH.md's comparison of comparable CLI-tool homepages (bun.sh, rustup.rs, starship.rs, zellij.dev, brew.sh, etc.) and its recommendation to build this inside the existing Docusaurus site rather than a separate stack: - Hero leads with the install command (`curl -fsSL https://onctl.sh/get.sh | bash`) in a copy-button code block, plus Get Started/GitHub CTAs and a real GitHub-stars/Discussions/Issues trust bar -- no fake logo walls or testimonials at this project's actual size. - New ProviderGrid component replaces the generic "Easy to Use / Powered by React" scaffold copy with the actual differentiator: one CLI, six backends (AWS/Azure/GCP/Hetzner/Firecracker/Cloud Hypervisor), each card showing its real -p flag. - New CommandExamples component shows real working commands as static styled code blocks instead of a recorded terminal demo -- none of the comparable sites embed a live terminal in the hero either, and it's not worth the production cost at this scale. - Dark-by-default color mode (still toggleable, respects OS preference), matching the technical/indie-tool cluster the research identified onctl as closest to. - Drops the unused Docusaurus scaffold (HomepageFeatures + its undraw_* placeholder SVGs) and fixes the navbar logo's stale "onkube Logo" alt text. Verified with `npm run build`, `npm run typecheck`, and a local Playwright screenshot pass in both light and dark mode. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XUUwyWgX4uLP4grY6kxZWj
Built onctl from source (this branch's base, origin/main) and diffed every docs page's claims against real --help output rather than trusting what was already written: - deployments.md described a defunct PaaS-style `onctl deploy` (--public/--cnames/onkube.app subdomains, `onctl reg add`) that no longer exists. Rewritten to match the real command: pulls a Docker image locally, uploads it over SSH, and runs it on a VM onctl already manages. - index.md's supported-provider list and embedded `onctl --help` block were both stale -- missing gcp/fc/ch/static and 8+ commands (action, deploy, env, images, import, pause, resume, templates, vm) added since. Both regenerated from the real output. - getting-started.md's ONCTL_CLOUD provider list had the same gap (missing gcp/fc/ch); also clarified onctl init's actual global-vs -project-local behavior (it always ensures a global ~/.onctl, and only asks about a project-local one interactively -- the previous wording implied project-local was the only outcome). - templates.md's examples normalized from the `up` alias to `create`, matching every other doc page. - Dropped markdown-page.md, the unmodified Docusaurus scaffold example page that was still live in the sidebar. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XUUwyWgX4uLP4grY6kxZWj
Six identically-styled cards each showing little more than a `-p <flag>` chip read as repetitive and flat. Replaced with: - Cloud providers as a compact pill row (AWS/Azure/GCP/Hetzner) -- quick to scan, not six competing cards. - Firecracker as a single, larger feature card (icon, description, and its real create command side by side) -- this is onctl's actual differentiator, so it gets the visual weight instead of being one box among six. Cloud Hypervisor (-p ch) is left off the landing page for now at the user's request -- newer and less battle-tested than Firecracker; it's still documented in getting-started.md/ deployments.md, just not spotlighted here yet. Also swapped CommandExamples' second slot (a `-p hetzner -a docker/docker.sh` command that overflowed its card on-screen, even though overflow-x:auto meant it was technically scrollable) for `onctl destroy`, so the section reads as a complete create -> ssh -> ls -> destroy lifecycle instead of a second provider-switching example that duplicated ProviderGrid's point. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XUUwyWgX4uLP4grY6kxZWj
Everything shipped so far was, honestly, unmodified Docusaurus/Infima
defaults with content bolted on: the out-of-the-box teal accent, no
deliberate typeface choice, ALL-CAPS eyebrow labels above headings,
and repeated bordered/rounded cards -- the exact cluster of generic-
AI-page tells (near-black + single default accent, template chrome,
card-kit repetition). Ran this through a proper plan-critique-build
pass instead:
Color: ember (#ff7a45 dark / #d9531e light) as the one accent --
grounded in the product ("onctl" = turning compute *on*, and
Firecracker's own ignition/speed framing), not Infima's default teal
or a generic terracotta/acid-green swap. Cool near-black (#14161a)
and cool grey-white (#eef0f1) grounds instead of a warm charcoal/cream
pair.
Type: JetBrains Mono for headlines and all commands (the terminal is
this product's actual environment, used as an active design element
at real size/weight, not a neutral font swap) + IBM Plex Sans for
body copy, loaded via Google Fonts in docusaurus.config.ts.
Layout: replaced the centered hero + card-grid structure with an
asymmetric left-aligned hero (headline/CTAs left, a real terminal-
window transcript right) and two full-width sections built around
actual product content instead of decoration:
- ConfigPanel: a real (abbreviated, verified-live) excerpt of the
onctl.yaml `onctl init` generates, replacing the provider-pill-row
+ Firecracker-card from the previous pass -- the "one config, every
backend" point is demonstrated, not illustrated with icons.
- Lifecycle: one continuous terminal transcript (create -> ssh -> ls
-> destroy) via a new shared TerminalWindow component, replacing
four separately-bordered command cards.
Removed the ALL-CAPS "CLOUD PROVIDERS"/"LOCAL MICROVM" eyebrow labels
entirely, and the generic "Deploy with Ease / made easy" headline
(which didn't even name the product) for specific, plain copy: "Six
ways to boot a VM. One command."
Also fixed two real bugs found while building this: the homepage
Layout's title prop produced a duplicated "onctl | onctl" browser tab
title (Docusaurus's title formatter has no special case for title ===
siteConfig.title), and Infima's own theme-dependent `pre` background
was painting over TerminalWindow's always-dark chrome in light mode,
making its text nearly unreadable.
Verified with npm run build/typecheck and Playwright screenshots in
light mode, dark mode, and a 390px mobile viewport, checking for
horizontal overflow at each.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XUUwyWgX4uLP4grY6kxZWj
@docusaurus/core and preset-classic had already been bumped to ^3.10.2 locally (uncommitted), but @docusaurus/tsconfig and @docusaurus/types were left pinned at 3.7.0 -- a version-drift state Docusaurus doesn't support. Bumped both to ^3.10.2 to match. That surfaced a new v4 deprecation warning on build: onBrokenMarkdownLinks moved under markdown.hooks. Migrated it. Verified: npm run typecheck and npm run build both clean (no warnings), homepage screenshot after the upgrade is pixel-identical to before. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lx5i19SzjoDPrn1eccMzCe
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
Docusaurus 3.10.2 requires Node >=20 (was >=18); the docs CI workflows were still pinned to node-version: 18, so Test deployment failed on PR #1096 with "Minimum Node.js version not met". Bumped both docu-test-deploy.yml and docu-deploy.yml to Node 20, and updated docs/package.json's engines field to match. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lx5i19SzjoDPrn1eccMzCe
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Replaces the untouched Docusaurus scaffold homepage with a real landing page, following the recommendations in #1095 (LANDING_PAGE_RESEARCH.md).
Went through two passes -- the second replaced most of the first's output:
onctl.yamlthatonctl initgenerates -- makes the "one config, every backend" point concrete instead of illustrating it with a provider-icon gridTerminalWindowcomponent, replacing four separately-bordered command cardsHomepageFeaturesscaffold + itsundraw_*placeholder SVGsIndependent of #1095 (doesn't depend on it merging first) -- this is the implementation, that PR is just the research notes.
Test plan
npm run buildsucceedsnpm run typecheckpasses🤖 Generated with Claude Code
https://claude.ai/code/session_01Lx5i19SzjoDPrn1eccMzCe