Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 4 additions & 0 deletions MEDIA_CAPTURE.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# October 2026 distribution UI

`project-import-2026-10-20.png` and `project-deployments-2026-10-20.png` are unaltered captures of the merged distribution UI, built from the product release branch on 20 October 2026. They use a disposable local Docker instance and a synthetic Weekend planner source folder. The folder contained a package.json and no Compose file; folder browsing, import and opening Add deployment were exercised through the UI. No production workload was changed. These are interface demonstrations, not deployment-success evidence. The tour captions distinguish them from the dated production evidence below.

# Public evidence captures

The public site uses unaltered desktop captures from the operator's authenticated GroundControl interface, captured on 22 September 2026. No generated interface or chat image is presented as product evidence.
Expand Down
24 changes: 18 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@ GroundControl itself is a self-hosted, single-tenant control plane. Each operato

## Current product story

“Put your agents to work” leads with GroundControl’s promise: deploy and operate applications with the agents you use, on infrastructure you own. The homepage brings the article’s operational context, MCP tools, OAuth access and durable execution into the product story. It explains what the connection enables: inspect application state, request supported deployments, and return to their recorded results.

The homepage uses a dark theme with Serendepify’s lime and coral accents, with Schibsted Grotesk headings, Hanken Grotesk body text and JetBrains Mono details. Fonts are self-hosted through Next.js.

The product tour and dated deployment evidence describe available capabilities. The separate Autopilot section is explicitly marked **Product direction**; customer-journey testing and proactive recovery are not presented as available features. The installation guide remains the primary call to action.

GroundControl gives software agents bounded infrastructure capabilities through MCP + OAuth:

- inspect deployments, runtime and health;
Expand All @@ -15,7 +21,7 @@ GroundControl gives software agents bounded infrastructure capabilities through
- use connector capability health for GitHub, GHCR and Daytona;
- keep SSH keys, provider credentials and the human PTY outside the agent tool surface.

Fresh installs use the canonical on-host installer and a one-time human ownership claim.
Fresh installs start with the computer launcher: local Docker or a remote Linux server, followed by a one-time ownership claim. The canonical on-host installer remains available for server operators.

## Verified deployment proof

Expand All @@ -34,13 +40,14 @@ The full deployment and Daytona contract is maintained in the main repository at

## Install

Human-readable:
On your computer (macOS / Linux, or Windows through WSL):

```bash
curl -fsSL https://raw.githubusercontent.com/teckedd-code2save/groundcontrol/main/scripts/install | sudo bash
curl -fsSL https://raw.githubusercontent.com/teckedd-code2save/groundcontrol/main/scripts/start -o groundcontrol-start
bash groundcontrol-start
```

Agent-oriented JSON result:
Directly on a Linux server, with an agent-oriented JSON result:

```bash
curl -fsSL https://raw.githubusercontent.com/teckedd-code2save/groundcontrol/main/scripts/install \
Expand Down Expand Up @@ -78,8 +85,9 @@ MIT

## Native documentation and public evidence

The complete adoption path lives at `/docs`. Twelve guides cover the philosophy and workload model, install/claim, next steps after installation, HTTPS publishing, host discovery, existing application enrollment, new template deployments, ChatGPT OAuth/MCP, deployment automation, maintenance, troubleshooting and evidence. No GitHub visit is required to follow a guide.
The complete adoption path lives at `/docs`. Thirteen guides cover projects and deployment instances, the philosophy and workload model, install/claim, next steps after installation, HTTPS publishing, host discovery, existing application enrollment, new template deployments, ChatGPT OAuth/MCP, deployment automation, maintenance, troubleshooting and evidence. No GitHub visit is required to follow a guide.

- `content/setup-guides.tsx` contains local/remote setup and the project/source/deployment model.
- `content/guides.tsx` contains the guide sections, runnable examples and expected results.
- `content/journey-guides.tsx` contains the philosophy, post-install, discovery and new-deployment guides. `content/guide-parts.tsx` supplies shared guide elements.
- `content/guide-index.ts` defines sidebar order and search terms.
Expand All @@ -89,4 +97,8 @@ The complete adoption path lives at `/docs`. Twelve guides cover the philosophy
- Product screenshots open at full size and preserve their aspect ratio.
- See `MEDIA_CAPTURE.md` for capture provenance, dates and claim boundaries.

Validate guide links/anchors, assets, endpoint formatting, clipboard behavior, product-tour keyboard navigation and checklist state with `npm test`. Review the actual rendered pages and capture any limits in `SITE_REVIEW.md`. The current browser runtime does not expose viewport emulation, so real phone testing remains outstanding.
Validate guide links/anchors, assets, endpoint formatting, clipboard behavior, product-tour keyboard navigation and checklist state with `npm test`. Review the actual rendered pages and capture any limits in `SITE_REVIEW.md`. Browser viewport testing covers desktop and narrow layouts; physical phone testing remains outstanding.

## Sharing

Share https://trygroundcontrol.serendepify.com/ or link directly to `/docs/getting-started`. The root metadata provides a dark Open Graph image and a large social card, generated at build time by `app/opengraph-image.tsx`. The install guide is self-contained; the public site does not collect credentials or expose an operator login.
23 changes: 21 additions & 2 deletions SITE_REVIEW.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,25 @@
# Public site review, 22 September 2026
# Distribution release site review · 20 October 2026

The homepage, article and all thirteen handbook guides now share a dark theme with lime calls to action. The copy leads with agentic deployment on infrastructure the visitor owns, and explains the new local/remote computer launcher, folder/GitHub project import, and connect-existing/launch-new deployment paths. The project model separates application source from runtime instances. Desktop limits, WSL, AMD64 emulation and the server-only HTTPS/upgrade flows are explicit in the relevant guides.

The first two walkthrough stages use fresh captures of the distribution UI with a disposable example project. The September OAuth and production-operation evidence keeps its original dates and qualifications. No production deployment was used or changed for the new captures. A static dark Open Graph image and large social card make the public URL ready to share.

Validation: lint, TypeScript, all nine behavior/navigation tests and the production build passed. Browser review covered the homepage at 1280 and 390 pixels, walkthrough switching, the 390-pixel installation guide and expandable documentation navigation, image loading and the generated 1200×630 share card. No horizontal page overflow was observed. Actual physical-device testing remains unverified.

## Earlier reviews

# Public site review

## Serendepify brand alignment, 3 October 2026

The public marketing site adopts the company site's current visual language while leading with GroundControl’s own promise: “Put your agents to work.” The opening explains agentic deployment on infrastructure the reader owns. The capability section brings forward the article’s application context, scoped execution and durable results, and links directly to the full story. The navigation now calls that article “Why GroundControl.” The proof section explains signed GitHub deployment automation and the agent’s access to recorded outcomes. Warm paper, lime accents, an outlined headline and the company's font families connect the two sites without replacing GroundControl's identity or its real product screenshots.

Available capabilities stay separate from the clearly labeled Autopilot product direction. The existing September evidence dates and provenance qualifications are preserved. Installation, native guides, product-tour behavior and operator-owned authentication boundaries are unchanged. No operator instance or deployment is part of this revision.

Local lint, TypeScript, all nine tests and the static production build passed. Browser review covered the homepage at 1280 pixels, its tour selection, the installation link, and the installation guide's expandable documentation menu at 390 pixels. Font inspection confirmed Schibsted Grotesk headings and Hanken Grotesk body text. Neither the homepage nor the installation guide had horizontal document overflow at 390 pixels after constraining the installation panel's grid columns; long commands retain their own scroll area. Physical device testing remains outstanding.

## Product journey revision, 22 September 2026

## Product journey revision

The homepage now has a four-part product tour using actual desktop captures, a post-install sequence, an illustrated workload model, inspectable deployment proof and direct learning paths. Twelve native guides cover the GroundControl philosophy, installation, next steps, publishing, discovery, enrollment, new template deployments, agent access, automation, maintenance, troubleshooting and evidence.

Expand Down
8 changes: 4 additions & 4 deletions app/articles/agentic-deployment-with-oauth-and-mcp/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ export default function ArticlePage() {
<a href="#connection">Connect an agent</a>
<a href="#deployment">From merge to deployment</a>
<a href="#work">The agent’s view</a>
<a href="#try-it">Use it on your VPS</a>
<a href="#try-it">Use your own infrastructure</a>
</aside>
<div className="prose article-prose">
<section id="purpose">
Expand Down Expand Up @@ -183,9 +183,9 @@ export default function ArticlePage() {
<section id="try-it">
<h2>Put it to work on your infrastructure.</h2>
<p>
Install GroundControl, claim your instance and review the host
scan. Choose one application, confirm its identity and connect
your agent. A health check gives you a first result you can
Start GroundControl from your computer, locally or on a Linux
server. Add a project from a folder or GitHub, connect or launch
its deployment, and authorize your agent. A health check gives you a first result you can
compare with the product interface. From there, follow the
deployment guide for the operations your workload supports.
</p>
Expand Down
6 changes: 3 additions & 3 deletions app/components/NextSteps.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ const paths = [
{
id: "new",
title: "I want to deploy a new app",
intro: "Use a template to validate, create and enroll a new deployment.",
intro: "Add your project, then choose the launch path supported by its host.",
steps: [
["Choose a template for your application", "new-deployment#choose"],
["Connect and verify the source", "new-deployment#source"],
["Add your project from a folder or GitHub", "projects#sources"],
["Choose a host and deployment environment", "projects#deployments"],
["Configure and review the proposed deployment", "new-deployment#review"],
["Deploy and check the public result", "new-deployment#verify"],
["Grant your agent access to that workload", "agent-access#consent"],
Expand Down
38 changes: 21 additions & 17 deletions app/components/ProductTour.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,31 +6,34 @@ import Capture from "./Capture";

const stages = [
{
title: "Discover",
heading: "Start with what is already running.",
text: "GroundControl reads the active host, finds Compose folders and containers, and presents candidates you can inspect.",
fact: "Review the candidates and choose which to enroll.",
file: "discovery-desktop.jpg",
alt: "GroundControl discovered workloads with source paths and Enrol deployment buttons",
href: "/docs/discovery",
link: "How discovery works",
title: "Project",
heading: "Start with the application you’re building.",
text: "Pick a folder from your computer or import a GitHub repository. Your project brings the source, purpose and deployment instances together.",
fact: "Add source first. Choose its deployments separately.",
file: "project-import-2026-10-20.png",
alt: "GroundControl Add project chooser with folder and GitHub import options",
caption: "Current interface · isolated demo · 20 October 2026",
href: "/docs/projects#sources",
link: "Add your first project",
},
{
title: "Enrol",
heading: "Choose what belongs in GroundControl.",
text: "Enrol one candidate, keep its files where they are, and optionally group it into a project. Confirm its source, runtime and public address.",
fact: "Enrollment preserves the workload’s existing location.",
file: "enrollment-desktop.jpg",
alt: "GroundControl enrollment dialog showing optional project grouping",
href: "/docs/first-deployment",
link: "Follow the enrollment guide",
title: "Deploy",
heading: "Give each environment its own instance.",
text: "Connect an application already running on your host, or launch a new instance. Each deployment has its own environment, configuration and release history.",
fact: "Local Docker or your Linux server. Your infrastructure.",
file: "project-deployments-2026-10-20.png",
alt: "GroundControl Add deployment dialog offering connect existing or launch new",
caption: "Current interface · example project · 20 October 2026",
href: "/docs/projects#deployments",
link: "Choose a deployment path",
},
{
title: "Connect",
heading: "Give your agent a scoped connection.",
text: "Add your instance’s MCP endpoint to a compatible client, sign in through OAuth and select the deployments it may access.",
fact: "The grant names the capabilities and workloads.",
file: "agents-desktop.jpg",
caption: "Operator interface · captured 22 September 2026",
alt: "GroundControl Agents workspace showing a real active ChatGPT grant",
href: "/docs/agent-access",
link: "Connect your agent",
Expand All @@ -41,6 +44,7 @@ const stages = [
text: "Read runtime checks and the public endpoint result. A durable operation ID lets your agent return to the same work after a timeout.",
fact: "RentAWeekend recorded release · 21 September 2026.",
file: "verification-desktop.jpg",
caption: "Recorded release · captured 22 September 2026",
alt: "GroundControl runtime image verification and public endpoint evidence",
href: "/docs/evidence",
link: "Inspect the recorded evidence",
Expand Down Expand Up @@ -109,7 +113,7 @@ export default function ProductTour() {
<Capture
file={stage.file}
alt={stage.alt}
caption="Operator interface · captured 22 September 2026"
caption={stage.caption}
priority
/>
</div>
Expand Down
12 changes: 8 additions & 4 deletions app/components/SiteChrome.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ export function Header() {
<Link href="/docs/philosophy">Approach</Link>
<Link href="/docs">Docs</Link>
<Link href="/articles/agentic-deployment-with-oauth-and-mcp">
Field notes
Why GroundControl
</Link>
</nav>
<Link className="button compact" href="/docs/getting-started">
Expand All @@ -55,8 +55,12 @@ export function Footer() {
GroundControl
</Link>
<p>
Open-source operations for infrastructure you own.
<br />A Serendepify product.
Agentic deployment on infrastructure you own.
<br />Built by{" "}
<a className="company-link" href="https://www.serendepify.com/">
Serendepify
</a>{" "}
in Accra, Ghana.
</p>
</div>
<nav aria-label="Footer navigation">
Expand All @@ -68,7 +72,7 @@ export function Footer() {
View source ↗︎
</a>
</nav>
<span className="mono">Safe, smooth, observable, agentic.</span>
<span className="mono">Your infrastructure. Your final say.</span>
</footer>
);
}
11 changes: 8 additions & 3 deletions app/components/WorkloadModel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,21 @@ export default function WorkloadModel() {
aria-label="Example of GroundControl entities and their relationships"
>
<figcaption>
Example · one application, one deployment, several services
Example · one application, independent deployments
</figcaption>
<div className="model-row">
<span>Project</span>
<strong>Weekend planner</strong>
<small>Optional organization</small>
<small>Folder / GitHub repository</small>
</div>
<div className="model-row">
<span>Development</span>
<strong>weekend-local</strong>
<small>Docker on your computer</small>
</div>
<div className="model-deployment">
<div className="model-row">
<span>Deployment</span>
<span>Production</span>
<strong>weekend-production</strong>
<small>On your VPS</small>
</div>
Expand Down
4 changes: 2 additions & 2 deletions app/docs/[slug]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export default async function GuidePage({
if (!guide) notFound();
const index = guideIndex.findIndex((g) => g.slug === slug);
const nextFor: Record<string, string> = {
"after-install": "discovery",
"after-install": "projects",
publishing: "discovery",
"first-deployment": "agent-access",
"new-deployment": "agent-access",
Expand Down Expand Up @@ -99,7 +99,7 @@ export default async function GuidePage({
<p className="small">
Updated
<br />
22 September 2026
{guide.updated ?? "22 September 2026"}
</p>
</aside>
</div>
Expand Down
6 changes: 3 additions & 3 deletions app/docs/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export default function DocsPage() {
<header className="doc-header">
<p className="eyebrow">The operator’s handbook</p>
<h1>
From your first scan
From your first project
<br />
to a verified operation.
</h1>
Expand All @@ -30,13 +30,13 @@ export default function DocsPage() {
<Link href="/docs/getting-started">
<span>01 / Start</span>
<h2>I need to install it.</h2>
<p>Install, claim and connect the local host.</p>
<p>Choose your computer or a server and open the setup link.</p>
<b>Installation guide →</b>
</Link>
<Link href="/docs/after-install">
<span>02 / Continue</span>
<h2>It’s installed. Now what?</h2>
<p>Review discovery and choose your first application.</p>
<p>Add a project, then connect or launch a deployment.</p>
<b>Follow the next steps →</b>
</Link>
<Link href="/docs/agent-access">
Expand Down
Loading
Loading