diff --git a/index.html b/index.html
index 7ae0d28..0a5c541 100644
--- a/index.html
+++ b/index.html
@@ -120,6 +120,7 @@
Share a live terminal in any browser.
Run shell login to link a machine to an account. Sessions from every linked machine then appear together in a web app, open as tabs you can type into, and can be created or killed from the browser. Agree once and a machine can also be given work from there: pick a machine, pick what to run, and it starts on that machine with a password the browser seals so the service cannot read it.
Signing up creates an organization. Invite links add people, everyone inside sees every member’s sessions, and each session has an owner who can hand it off. Comments, mentions, and notifications add context without copying terminal input into the accounts service.
shell.online is developed by Pilot Protocol .
+ Sign up free at app.shell.online , or install the command-line tool:
curl -fsSL https://shell.online/install | sh
Read the source and installation guide on GitHub .
diff --git a/scripts/test-landing-seo.mjs b/scripts/test-landing-seo.mjs
index 8f26427..9f593f4 100644
--- a/scripts/test-landing-seo.mjs
+++ b/scripts/test-landing-seo.mjs
@@ -51,6 +51,15 @@ check(indexHtml.includes(""), "Crawlable no-script product summary is
check((landingMarkup.match(/]/gu) ?? []).length === 1, "Landing page must have exactly one primary heading");
check(landingMarkup.includes('id="use-cases"'), "Visible use-case section is missing");
+/*
+ * app.shell.online is the other front door, and it is easy to lose in a
+ * refactor because the install one-liner reads like the only call to action.
+ * Pin both buttons and the no-script link so the account cannot go quiet.
+ */
+check(landingMarkup.includes('class="hero-signup" href="${SIGNUP_URL}"'), "Hero account button is missing");
+check(landingMarkup.includes('class="nav-signup" href="${SIGNUP_URL}"'), "Header account button is missing");
+check(indexHtml.includes("https://app.shell.online/signup"), "No-script account link is missing");
+
for (const metadata of [
' a:last-of-type {
- display: block;
+ /*
+ * The star count and the account button are what survive the squeeze. The
+ * header's copy-install pill does not: the hero repeats it one screen down,
+ * and a phone is rarely where that line gets pasted. Dropping it is what
+ * leaves room for the account button at 390px.
+ */
+ .marketing-links > a:last-of-type,
+ .marketing-links > .marketing-github-link {
+ display: inline-flex;
+ align-items: center;
font-size: 11px;
}
+ .nav-signup {
+ padding: 0 15px;
+ }
+
.nav-install {
- min-width: 96px;
- height: 44px;
- padding: 0 12px;
- font-size: 11px;
+ display: none;
}
.marketing-hero {
@@ -3159,7 +3203,7 @@
font-size: 20px;
}
- .marketing-links > a:last-of-type {
+ .marketing-links > .marketing-github-link {
display: none;
}
@@ -3167,6 +3211,11 @@
font-size: clamp(47px, 14.8vw, 62px);
}
+ .hero-signup {
+ padding: 0 18px;
+ font-size: 15px;
+ }
+
.install-command code {
font-size: 9.5px;
}
diff --git a/web/main.ts b/web/main.ts
index 02c82f3..9edf5f2 100644
--- a/web/main.ts
+++ b/web/main.ts
@@ -158,11 +158,11 @@ function renderLanding(): void {
Docs
Use cases
- Web app
★ GitHub —
Copy install
+ Sign up free
@@ -172,13 +172,16 @@ function renderLanding(): void {
Run it here.Open it anywhere.
Run shell <command> on your machine. It gives you a link and password to the same encrypted terminal—open it from any desktop or phone to watch or type.