diff --git a/apps/site/e2e/auth-docs.spec.ts b/apps/site/e2e/auth-docs.spec.ts
index c28202d..f5d67cf 100644
--- a/apps/site/e2e/auth-docs.spec.ts
+++ b/apps/site/e2e/auth-docs.spec.ts
@@ -40,7 +40,7 @@ test.describe("Auth and docs", () => {
await page.goto("/docs");
await expect(
- page.getByRole("heading", { name: "Guidance for creator teams" }),
+ page.getByRole("heading", { name: "Getting started" }),
).toBeVisible();
await expect(
page.getByRole("heading", { name: "Authoring" }),
@@ -49,7 +49,7 @@ test.describe("Auth and docs", () => {
page.getByRole("heading", { name: "Operations" }),
).toBeVisible();
await expect(
- page.getByRole("link", { name: "Open product docs" }),
- ).toHaveAttribute("href", "/docs");
+ page.getByRole("heading", { name: "Reference", exact: true }),
+ ).toBeVisible();
});
});
diff --git a/apps/site/e2e/home.spec.ts b/apps/site/e2e/home.spec.ts
index e07c82f..9e99814 100644
--- a/apps/site/e2e/home.spec.ts
+++ b/apps/site/e2e/home.spec.ts
@@ -21,7 +21,7 @@ test.describe("Graspful site", () => {
await page.goto("/");
await expect(
- page.getByRole("link", { name: /start building free/i }).first(),
+ page.getByRole("link", { name: /create free account/i }).first(),
).toHaveAttribute("href", /sign-up/);
});
diff --git a/apps/site/src/app/(marketing)/docs/page.tsx b/apps/site/src/app/(marketing)/docs/page.tsx
index d6c0a31..b93fa2f 100644
--- a/apps/site/src/app/(marketing)/docs/page.tsx
+++ b/apps/site/src/app/(marketing)/docs/page.tsx
@@ -1,32 +1,91 @@
import Link from "next/link";
-import { PageShell } from "@/components/site/page-shell";
+
+const sections = [
+ {
+ title: "Authoring",
+ items: [
+ "Define course structure with concepts, sections, and dependencies.",
+ "Review generated content before it reaches learners.",
+ "Publish changes without rebuilding your own delivery platform.",
+ ],
+ },
+ {
+ title: "Operations",
+ items: [
+ "Manage brands, API keys, and learner billing from the creator app.",
+ "Use one platform runtime for learner delivery and revenue operations.",
+ "Keep the flagship site separate from the white-label learner surfaces.",
+ ],
+ },
+];
+
+const docLinks = [
+ { title: "CLI Reference", href: "https://graspful.ai/docs/cli", description: "Install, authenticate, and run course commands from your terminal." },
+ { title: "Course Schema", href: "https://graspful.ai/docs/course-schema", description: "YAML structure for courses, concepts, knowledge points, and problems." },
+ { title: "Brand Schema", href: "https://graspful.ai/docs/brand-schema", description: "Configure your academy theme, domain, and landing page." },
+ { title: "Glossary", href: "https://graspful.ai/docs/glossary", description: "Key terms: concepts, knowledge points, mastery, diagnostics, and more." },
+];
export default function DocsPage() {
return (
-
-
-
Authoring
-
-
Define course structure with concepts, sections, and dependencies.
-
Review generated content before it reaches learners.
-
Publish changes without rebuilding your own delivery platform.
-
-
-
-
Operations
-
-
Manage brands, API keys, and learner billing from the creator app.
-
Use one platform runtime for learner delivery and revenue operations.
-
Keep the flagship site separate from the white-label learner surfaces.
-
-
- Open product docs
-
-
-
+
+
+
+
+ Documentation
+
+
+ Getting started
+
+
+ Everything you need to build and publish adaptive courses with
+ Graspful.
+
+
+
+
+
+
+ {sections.map((section) => (
+
+
+ {section.title}
+
+
+ {section.items.map((item) => (
+
+ ✓
+ {item}
+
+ ))}
+
+
+ ))}
+
+
+ Reference
+
+
+ {docLinks.map((doc) => (
+
+
+ {doc.title} →
+
+
+ {doc.description}
+
+
+ ))}
+
+
+
+
);
}
diff --git a/apps/site/src/app/(marketing)/how-graspful-works/page.tsx b/apps/site/src/app/(marketing)/how-graspful-works/page.tsx
index 9b05d1f..4cb7218 100644
--- a/apps/site/src/app/(marketing)/how-graspful-works/page.tsx
+++ b/apps/site/src/app/(marketing)/how-graspful-works/page.tsx
@@ -1,39 +1,69 @@
-import { PageShell } from "@/components/site/page-shell";
+const steps = [
+ {
+ number: "1",
+ title: "Find out what they already know",
+ description:
+ "Every course starts with a diagnostic. The platform figures out what the learner can prove they understand and skips the rest. No one sits through material they've already mastered.",
+ },
+ {
+ number: "2",
+ title: "Teach what actually matters next",
+ description:
+ "The sequence changes based on gaps. If a learner is weak on prerequisites, the platform handles that first. If they're strong, it moves them forward. The path is different for everyone.",
+ },
+ {
+ number: "3",
+ title: "Prove mastery before moving on",
+ description:
+ "Progress is gated on evidence. Learners solve problems that test real understanding. Clicking through slides doesn't count.",
+ },
+ {
+ number: "4",
+ title: "Keep what you learned",
+ description:
+ "Spaced review brings knowledge back at the right time. It's built into the product, not a feature you have to turn on. Students retain what they learned instead of losing it.",
+ },
+];
export default function HowItWorksPage() {
return (
-
-
-
1. Find out what they already know
-
- Every course starts with a diagnostic. The platform figures out what
- the learner can prove they understand and skips the rest. No one sits
- through material they've already mastered.
-
-
2. Teach what actually matters next
-
- The sequence changes based on gaps. If a learner is weak on
- prerequisites, the platform handles that first. If they're strong, it
- moves them forward. The path is different for everyone.
-
-
-
-
3. Prove mastery before moving on
-
- Progress is gated on evidence. Learners solve problems that test real
- understanding. Clicking through slides doesn't count.
-
-
4. Keep what you learned
-
- Spaced review brings knowledge back at the right time. It's built into
- the product, not a feature you have to turn on. Students retain what
- they learned instead of losing it.
-
-
-
+
+
+
+
+ How it works
+
+
+ How Graspful works
+
+
+ Diagnosis, mastery, and spaced review. Not a video player with a
+ progress bar.
+
No platform subscription. No setup fee. Graspful takes 30% of learner
revenue and runs the infrastructure. You keep the rest.
@@ -29,19 +29,19 @@ export default function PricingPage() {
What learners pay
-
+
You set the price. Graspful handles checkout, access control, and
subscription management through Stripe.
-
+
{[
"Monthly and annual plans",
"Checkout and payouts handled by Stripe",
"Your own branded academy site",
"One platform for course, billing, and learner access",
].map((item) => (
-
- ✓ {item}
+
+ ✓ {item}
))}
diff --git a/apps/site/src/app/icon.svg b/apps/site/src/app/icon.svg
index 13b56fc..d2e48b0 100644
--- a/apps/site/src/app/icon.svg
+++ b/apps/site/src/app/icon.svg
@@ -1,5 +1,5 @@
diff --git a/apps/site/src/components/auth/auth-form.tsx b/apps/site/src/components/auth/auth-form.tsx
index c8370e4..e8c167d 100644
--- a/apps/site/src/components/auth/auth-form.tsx
+++ b/apps/site/src/components/auth/auth-form.tsx
@@ -95,7 +95,7 @@ export function AuthForm({ mode }: AuthFormProps) {
? `Sign in to ${brand.name}`
: isConfirmationPending
? "Check your email for a confirmation link."
- : `Start building courses on ${brand.name}`;
+ : "Next step: run graspful register from your editor to connect the CLI.";
const submitText = isSignIn ? "Sign In" : "Create Account";
const switchText = isSignIn ? "Don't have an account?" : "Already have an account?";
const switchHref = isSignIn ? "/sign-up" : "/sign-in";
diff --git a/apps/site/src/components/site/__tests__/home-page.test.tsx b/apps/site/src/components/site/__tests__/home-page.test.tsx
index c84679f..d1a8d6a 100644
--- a/apps/site/src/components/site/__tests__/home-page.test.tsx
+++ b/apps/site/src/components/site/__tests__/home-page.test.tsx
@@ -14,7 +14,7 @@ describe("HomePage", () => {
screen.getByRole("heading", { name: /what we do for you/i }),
).toBeVisible();
expect(
- screen.getByRole("heading", { name: /how it works/i }),
+ screen.getByRole("heading", { name: /three commands/i }),
).toBeVisible();
});
@@ -22,7 +22,7 @@ describe("HomePage", () => {
render();
expect(
- screen.getAllByRole("link", { name: /start building free/i }).length,
+ screen.getAllByRole("link", { name: /create free account/i }).length,
).toBeGreaterThanOrEqual(1);
});
});
diff --git a/apps/site/src/components/site/header.tsx b/apps/site/src/components/site/header.tsx
index c3e48fc..2354445 100644
--- a/apps/site/src/components/site/header.tsx
+++ b/apps/site/src/components/site/header.tsx
@@ -4,7 +4,7 @@ import Link from "next/link";
import { useTheme } from "@/lib/theme";
const navigationItems = [
- { href: "/how-graspful-works", label: "Agents" },
+ { href: "/how-graspful-works", label: "How It Works" },
{ href: "/pricing", label: "Pricing" },
{ href: "/docs", label: "Docs" },
];
@@ -78,9 +78,9 @@ export function SiteHeader() {
- Get Started
+ Create Free Account
diff --git a/apps/site/src/components/site/home-page.tsx b/apps/site/src/components/site/home-page.tsx
index dd2bc33..fefab18 100644
--- a/apps/site/src/components/site/home-page.tsx
+++ b/apps/site/src/components/site/home-page.tsx
@@ -1,6 +1,7 @@
"use client";
import Link from "next/link";
+import { useState } from "react";
import { faqItems } from "@/lib/site-config";
/* ─── Data ─── */
@@ -41,19 +42,22 @@ const features = [
const howSteps = [
{
- title: "Describe What You Want to Teach",
+ step: "npx @graspful/cli init",
+ title: "Install the CLI",
description:
- "Tell us your subject and scope. Our AI builds the knowledge graph, diagnostics, and adaptive logic.",
+ "One command wires up MCP in Claude Code, Cursor, or Windsurf. Your AI agent gets course-building tools.",
},
{
- title: "Review and Customize",
+ step: '"Build me a course on X"',
+ title: "Prompt your agent",
description:
- "Refine the content, adjust difficulty, add your branding. Publish when it meets your standard.",
+ "Your agent calls scaffold, fill, validate, and review. You guide the content. It handles the structure.",
},
{
- title: "Publish and Earn",
+ step: "graspful import",
+ title: "Go live",
description:
- "Set your price, launch your academy. Students get adaptive learning. You get 70% of revenue.",
+ "Your academy launches on your domain with adaptive diagnostics, mastery gates, and spaced review from day one.",
},
];
@@ -66,6 +70,30 @@ const learnerBenefits = [
{ title: "Built-In Reinforcement", desc: "Advanced topics naturally reinforce earlier material." },
];
+const agentLogos = [
+ { name: "Claude Code", icon: "claude" },
+ { name: "Cursor", icon: "cursor" },
+ { name: "Windsurf", icon: "windsurf" },
+ { name: "Codex", icon: "codex" },
+];
+
+function CopyButton({ text }: { text: string }) {
+ const [copied, setCopied] = useState(false);
+ return (
+
+ );
+}
+
/* ─── Component ─── */
export function HomePage() {
const headline = "Build courses where students actually";
@@ -105,17 +133,50 @@ export function HomePage() {
className="animate-fade-up mx-auto mt-8 max-w-xl text-xl leading-relaxed text-muted-foreground md:text-2xl"
style={{ animationDelay: "0.6s" }}
>
- Your expertise. AI's scaffolding. Every course gets adaptive
- diagnostics, mastery tracking, and spaced review. Launch a live
- product in minutes, not months.
+ Prompt AI to build your course. Adaptive diagnostics, mastery
+ gates, and spaced review - scaffolded for you. Go live in one
+ session.
-
+
+ {/* CLI snippet */}
+
+
+ $
+ npx @graspful/cli init
+
+
+
+
+
- Start Building Free
+ Create Free Account
+
+ See how it works →
+
+