-
Likely impact · inspect, not assumed edits
+
Other files this change may affect
{report.impact.files.slice(0, 5).map((file) => (
{file.confidence}
@@ -260,7 +265,7 @@ function PlanPanel({ report }: { report: ReturnType
{report.risks.length > 0 ? (
-
Risk
+
Risks worth reviewing
{report.risks.map((risk) => (
{risk.severity}
@@ -331,10 +336,8 @@ function ExplainPanel({
) : null}
- A ranked list explains what it chose. This answers the question it cannot: why the file
- you expected is missing. The four answers are genuinely different — it ranked lower than
- you thought, it scored below the cutoff, it was excluded on purpose, or the scan never
- saw it.
+ This tells you whether the file ranked lower, fell below the cutoff, was excluded on
+ purpose, or was never scanned.
>
);
@@ -351,7 +354,7 @@ function ComparePanel({ comparison }: { comparison: ReturnType
- Earlier plan vs. current task {changes.length} changed
+ What changed after you clarified the task {changes.length} changes
{comparison.summary}
{changes.map((delta) => (
@@ -359,7 +362,7 @@ function ComparePanel({ comparison }: { comparison: ReturnType{delta.path}rank {delta.previousRank ?? "—"} → {delta.currentRank ?? "—"}; score {delta.previousScore ?? "—"} → {delta.currentScore ?? "—"}
))}
- Compare makes task refinement measurable: save a JSON plan, add the missing symbol or path, and confirm the real fix site rises.
+ A clearer task should move the real fix site closer to the top. Compare shows whether it actually did.
>
);
}
@@ -378,9 +381,9 @@ function VerifyPanel({
return (
<>
- Plan vs. diff
+ Planned work vs. changed files
- exit {hasError ? 1 : 0}
+ {hasError ? "Needs review" : "No blocking errors"}
diff --git a/apps/web/app/demo/page.tsx b/apps/web/app/demo/page.tsx
index 1bf7913..b764ca1 100644
--- a/apps/web/app/demo/page.tsx
+++ b/apps/web/app/demo/page.tsx
@@ -7,11 +7,11 @@ import { sampleRepo, sampleRepoWithChanges } from "../sample-repo";
export const metadata: Metadata = {
title: "Live demo",
- description: "Try FixMap Plan, Explain, Compare, focus controls, and Verify on a sample repository in your browser.",
+ description: "Give FixMap a sample task and see the files, tests, impact, and risks it surfaces before a change begins.",
alternates: { canonical: "/demo" },
openGraph: {
title: "Live FixMap demo",
- description: "Run the real FixMap ranking and verification engine in your browser.",
+ description: "See the real FixMap engine choose files, tests, impact, and risks in your browser.",
url: "/demo"
}
};
@@ -30,15 +30,15 @@ export default function DemoPage() {
Live demo
- See the map form in real time.
+ See FixMap choose where to start.
- Try Plan, Explain, Compare, exclusions, limits, and Verify against a small sample repository. This is the same core
- logic used by the CLI, running locally in your browser—not a recording or staged result.
+ Pick a sample software problem. FixMap will show the files to inspect first, the checks that can prove the change,
+ nearby impact, and risks worth reviewing. The real engine runs below—not a recording or staged result.
- Runs in this tab
+ Real FixMap engine
Nothing is uploaded
- Start with the first preset
+ Choose an example below
@@ -48,12 +48,14 @@ export default function DemoPage() {
-
Example agent conversation
-
Plan → edit carefully → verify.
-
The FixMap turns below are generated from this page’s sample repository at build time, using the same renderer as the CLI.
+
Optional technical detail
+
See the complete agent conversation.
+
Open the transcript to follow the exact Plan → edit → Verify workflow generated from this sample repository.
-
+
+ Open the complete Plan → edit → Verify example
+
User
{agentTask}. Can you fix it?
@@ -106,12 +108,13 @@ const transport = createTransport({
Run tests: FixMap routes checks; it does not pretend to execute them.
-
+
+
- Ready for your repository?
Take the same workflow to the terminal.
- Run one command for a public GitHub issue, or use FixMap locally for private source and working-tree diffs.
Choose a setup
+ Ready for your repository?
Give the next task a better starting point.
+ Try FixMap once, add /fixmap to a coding agent, or run it automatically on pull requests.
Choose how to use FixMap
);
diff --git a/apps/web/app/get-started/page.tsx b/apps/web/app/get-started/page.tsx
index 344e80f..5e8a405 100644
--- a/apps/web/app/get-started/page.tsx
+++ b/apps/web/app/get-started/page.tsx
@@ -6,11 +6,11 @@ import { commands, marketplaceUrl, repoUrl, siteStats } from "../_lib/site-data"
export const metadata: Metadata = {
title: "Get started",
- description: "Install the /fixmap command, run the CLI, connect MCP, or add FixMap to pull requests with the GitHub Action.",
+ description: "Try FixMap once, add /fixmap to a coding agent, run it in a terminal, or add it to pull requests.",
alternates: { canonical: "/get-started" },
openGraph: {
title: "Get started with FixMap",
- description: "Install /fixmap, use the CLI, connect MCP, or add the GitHub Action.",
+ description: "Try FixMap once, add it to a coding agent, or run it automatically on pull requests.",
url: "/get-started"
}
};
@@ -19,57 +19,66 @@ export default function GetStartedPage() {
return (
- Get started
- Choose where the map should appear.
- Install the CLI once, add a discoverable slash command to a coding agent, connect the MCP tools, or publish a map automatically on pull requests.
-
+ Fastest way to try FixMap
+ Run it once. Install it only if it helps.
+ Paste this command into a terminal. FixMap will inspect a public GitHub issue, scan a temporary checkout, show where to start, and remove the checkout when it finishes.
+
+
+
Requires Node.js 20.11 or newer. No account, API key, model call, or global installation.
+
+
-
- 01 Slash command
Type /fixmap. See every workflow.
+
+ 01 Recommended for coding agents
Add /fixmap to your agent.
-
Install project-level discovery for Claude Code, Cursor, GitHub Copilot, and Agent Skills. Invoking /fixmap without a task opens the complete Plan, Context, Graph, Explain, Compare, Watch, Verify, Benchmark, Validate, Doctor, MCP, focus, working-tree, and fresh-scan menu.
-
-
The installer is idempotent and refuses to overwrite an existing customized command. Target one integration with --agent claude, cursor, copilot, or agents. Use --force only after reviewing the file.
-
See the same menu in a terminal
-
+
Choose this path if you use Claude Code, Cursor, GitHub Copilot, or Agent Skills. Two commands install FixMap and make /fixmap discoverable in the current project.
+
+ Install FixMap
+ Add the agent command
+ Use it Type /fixmap in your coding agent, then choose Plan before editing or Verify after the change.
+
+
+ Choose one specific agent or inspect every workflow
+ Target one integration with --agent claude, cursor, copilot, or agents. The installer will not overwrite a customized command unless you explicitly use --force.
+
+
-
- 02 CLI
Install once. Keep the command short.
+
+ 02 Terminal
Install once. Describe the task.
-
Install FixMap globally, then paste a public GitHub issue URL. FixMap fetches the task, infers the repository, scans a temporary checkout, and removes it when the report is done.
+
Install FixMap globally, then give it a public issue URL or describe a problem inside a local repository.
-
Or work inside a local repository
-
-
-
Compact agent handoff
-
-
Budgeted source context
-
-
Portable Impact Graph
-
-
Watch an agent's edits
-
Save the JSON plan, then stream drift and recalculated-impact updates whenever the local working tree changes:
-
-
Benchmark this repository
-
Backtest BM25, FixMap, and Impact Graph on historical parent snapshots without running repository code:
-
+
What you get: a short list of files to inspect first, tests and checks to run, nearby impact, and risks worth reviewing.
+
+ Show local repository and advanced commands
+ Work inside a local repository
+
+
+ Prepare a compact handoff for an agent
+
+ Package source context within a budget
+
+ Export the impact relationships
+
+ Watch an agent's edits
+
+ Benchmark this repository
+
+ Pin FixMap to a project
+
+ Use npx fixmap inside that repository or call it from an npm script.
+
-
Pin it to a project instead
-
Use a project dependency when everyone working on that repository should get the same version:
-
-
A project install is reached with npx fixmap inside the repository, or from an npm script.
-
-
One-off trial without installing
-
-
If the current directory or one of its parents already contains FixMap, npm may deliberately choose that project-local binary. Check --version, or use the isolated-prefix test below when the exact package version matters.
-
-
Safe PowerShell test project
-
Create the directory before changing into it. If cd fails, PowerShell stays in the previous directory and a project-scoped npm install will go there instead.
-
+ Troubleshoot versions and make an isolated PowerShell test
+ Run fixmap doctor when an older project or global install may be shadowing the version you expected.
+
+ For an exact clean test on Windows, create the directory before changing into it:
+
- Use Get-Location before installing whenever a directory command reports an error.
-
- Check what you are actually running
- An older global install can shadow the version npx was asked for, which makes a feature that shipped look like it never existed. doctor reports the version in use, where it resolved from, and any conflicting global — and exits non-zero when it finds one:
-
- Doctor 0.8.4 and newer compares an exact npm-requested version when that newer Doctor is the process npm starts. An older project-local binary can win before the newer code starts, so treat the printed running version as authoritative. For an exact clean test, use the isolated-prefix/direct-shim procedure in the repository README.
-
- Requires Node.js 20.11 or newer. No account, API key, or model call at any point.
+ Use Get-Location before installing whenever a directory command reports an error. Treat the version printed by Doctor as the version actually running.
+
+ Requires Node.js 20.11 or newer. FixMap runs locally with no account, API key, or model call.
-
+ 03 Advanced agent setup
Connect FixMap as tools your agent can call.
-
FixMap exposes seven local stdio tools: fixmap_plan, fixmap_context, fixmap_graph, fixmap_explain, fixmap_compare, fixmap_verify, and fixmap_doctor.
+
Use MCP when you want a compatible agent to request a plan, ask why a file was included or missed, package source context, inspect impact relationships, or verify a completed change.
Claude Code
Cursor, Windsurf, and other MCP clients
@@ -112,10 +116,10 @@ npx fixmap plan --issue "password reset emails fail"`} />
-
- 04 GitHub Action
Map every pull request.
+
+ 04 Pull requests
Post a FixMap report automatically.
-
The Action posts one report as a pull-request comment and writes the complete result to the job summary. Set no-cache: true when a workflow needs an explicit fresh scan.
+
The GitHub Action comments with the map on each pull request and writes the complete result to the job summary.
{`name: FixMap
on:
pull_request:
diff --git a/apps/web/app/globals.css b/apps/web/app/globals.css
index 3a0328c..3189fc4 100644
--- a/apps/web/app/globals.css
+++ b/apps/web/app/globals.css
@@ -192,16 +192,20 @@ h3 { margin-bottom: 10px; font-size: 21px; line-height: 1.25; letter-spacing: -.
.stage-tab small { color: var(--ink); opacity: 1; }
.stage-tab.active small { color: inherit; }
.demo-shell { display: grid; grid-template-columns: .9fr 1.1fr; min-height: 650px; }
-.demo-input, .demo-results { padding: 38px; }
+.demo-input, .demo-results { min-width: 0; padding: 38px; }
.demo-input { border-right: 1px solid var(--line); background: var(--paper); }
.demo-input label, .picker-label { display: block; margin-bottom: 9px; color: var(--ink-soft); font-weight: 650; font-size: 13px; }
.demo-input textarea, .picker { width: 100%; border: 1px solid var(--line-strong); border-radius: 8px; background: var(--paper-light); color: var(--ink); }
.demo-input textarea { padding: 14px; resize: vertical; }
.picker { height: 46px; padding: 0 12px; }
.preset-list { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 14px; }
-.preset-list button { padding: 8px 10px; border: 1px solid var(--line); border-radius: 6px; background: transparent; color: var(--ink-soft); font-size: 12px; cursor: pointer; }
+.preset-list button { max-width: 100%; padding: 8px 10px; border: 1px solid var(--line); border-radius: 6px; background: transparent; color: var(--ink-soft); font-size: 12px; overflow-wrap: anywhere; cursor: pointer; }
.preset-list button[aria-pressed="true"] { border-color: var(--green); background: var(--mint-soft); color: var(--green-dark); }
.preset-note { margin-top: 16px; color: var(--ink-soft); font-size: 13px; }
+.demo-advanced { margin-top: 20px; padding-block: 16px; border-block: 1px solid var(--line); }
+.demo-advanced summary, .result-reasons summary, .demo-transcript > summary, .setup-advanced > summary { color: var(--green-dark); font-weight: 650; cursor: pointer; }
+.demo-advanced[open] summary, .setup-advanced[open] > summary { margin-bottom: 18px; }
+.demo-advanced .picker-label { margin-top: 16px; }
.demo-command { margin-top: 26px; display: grid; gap: 8px; }
.demo-command span { color: var(--ink-faint); font-size: 12px; }
.demo-command code, .changed-list code { padding: 8px 10px; border-radius: 6px; background: var(--navy); color: var(--mint); font: 12px/1.5 var(--font-mono), monospace; overflow-wrap: anywhere; }
@@ -215,6 +219,9 @@ h3 { margin-bottom: 10px; font-size: 21px; line-height: 1.25; letter-spacing: -.
.result-number { color: var(--green); font: 12px var(--font-mono), monospace; }
.result code { color: var(--ink); font: 13px var(--font-mono), monospace; overflow-wrap: anywhere; }
.result p { margin: 5px 0 0; color: var(--ink-faint); font-size: 12px; }
+.result-reasons { margin-top: 7px; }
+.result-reasons summary { color: var(--ink-soft); font-size: 12px; }
+.result-reasons small { display: block; margin-top: 7px; color: var(--ink-faint); font-size: 11px; }
.confidence, .severity { align-self: start; padding: 4px 7px; border-radius: 4px; background: var(--mint-soft); color: var(--green-dark); font: 600 10px var(--font-mono), monospace; text-transform: uppercase; }
.confidence.low, .severity.warning { background: #f6e8d9; color: var(--warning); }
.severity.error { background: #f6dfe4; color: var(--danger); }
@@ -237,6 +244,9 @@ h3 { margin-bottom: 10px; font-size: 21px; line-height: 1.25; letter-spacing: -.
.empty-result p { margin: 0; color: var(--ink-soft); }
.demo-next { display: grid; grid-template-columns: 1fr 1fr; gap: 90px; border-top: 1px solid var(--line); }
.demo-next > div:last-child p { color: var(--ink-soft); font-size: 18px; }
+.demo-transcript { margin-top: 38px; border-top: 1px solid var(--line-strong); }
+.demo-transcript > summary { padding: 22px 0; font-size: 17px; }
+.demo-transcript .doc-layout { margin-top: 10px; }
/* Evidence */
.score-grid { display: grid; grid-template-columns: repeat(2, 1fr); border: 1px solid var(--line-strong); border-radius: 16px; overflow: hidden; }
@@ -279,6 +289,8 @@ h3 { margin-bottom: 10px; font-size: 21px; line-height: 1.25; letter-spacing: -.
/* Setup and docs */
.jump-links { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 34px; }
.jump-links a { padding: 9px 14px; border: 1px solid var(--line-strong); border-radius: 6px; color: var(--green-dark); text-decoration: none; font-weight: 620; }
+.setup-quick-try { max-width: 900px; margin-top: 34px; }
+.setup-quick-try > p { margin: 10px 0 0; color: var(--ink-faint); font-size: 13px; }
.setup-section { padding-block: 90px; display: grid; grid-template-columns: minmax(0, .65fr) minmax(0, 1.35fr); gap: 100px; border-top: 1px solid var(--line); }
.setup-heading { min-width: 0; display: grid; grid-template-columns: 50px 40px minmax(0, 1fr); align-items: start; gap: 10px; }
.setup-heading > div { min-width: 0; }
@@ -288,6 +300,15 @@ h3 { margin-bottom: 10px; font-size: 21px; line-height: 1.25; letter-spacing: -.
.setup-content { min-width: 0; max-width: 820px; }
.setup-lede { color: var(--ink-soft); font-size: 19px; }
.setup-content h3 { margin: 34px 0 12px; }
+.setup-steps { margin: 28px 0 0; padding: 0; list-style: none; counter-reset: setup-step; border-top: 1px solid var(--line); }
+.setup-steps > li { position: relative; padding: 24px 0 24px 46px; counter-increment: setup-step; border-bottom: 1px solid var(--line); }
+.setup-steps > li::before { content: counter(setup-step); position: absolute; top: 26px; left: 0; width: 27px; height: 27px; display: grid; place-items: center; border: 1px solid var(--green); border-radius: 50%; color: var(--green-dark); font: 600 11px var(--font-mono), monospace; }
+.setup-steps strong { display: block; margin-bottom: 12px; font-size: 17px; }
+.setup-steps p { margin: 0; color: var(--ink-soft); }
+.setup-advanced { margin-top: 24px; padding-block: 18px; border-block: 1px solid var(--line); }
+.setup-advanced + .setup-advanced { margin-top: 12px; }
+.setup-advanced > p { color: var(--ink-soft); }
+.setup-result { margin: 24px 0 0; padding-block: 18px; border-block: 1px solid var(--line); color: var(--ink-soft); }
.small-note { margin-top: 18px; color: var(--ink-faint); font-size: 13px; }
.copy-command { min-height: 64px; padding: 10px 10px 10px 18px; display: flex; align-items: center; gap: 20px; border: 1px solid var(--line-strong); border-radius: 9px; background: var(--paper-light); }
.copy-command + .copy-command { margin-top: 12px; }
@@ -727,17 +748,18 @@ h3 { margin-bottom: 10px; font-size: 21px; line-height: 1.25; letter-spacing: -.
.pro-home { overflow: hidden; }
.pro-hero { padding-block: 88px 96px; display: grid; grid-template-columns: minmax(0, .9fr) minmax(560px, 1.1fr); align-items: center; gap: clamp(56px, 6vw, 96px); }
.pro-hero-copy { min-width: 0; }
-.pro-hero-copy h1 { max-width: 680px; margin-bottom: 24px; font-size: clamp(54px, 5.4vw, 76px); line-height: .98; letter-spacing: -.06em; }
-.pro-hero-lede { max-width: 650px; margin-bottom: 30px; color: var(--ink-soft); font-size: 19px; line-height: 1.55; }
+.pro-hero-copy h1 { max-width: 720px; margin-bottom: 24px; font-size: clamp(54px, 5.4vw, 76px); line-height: .98; letter-spacing: -.04em; }
+.pro-hero-lede { max-width: 650px; margin-bottom: 0; color: var(--ink-soft); font-size: 19px; line-height: 1.55; }
.pro-hero-copy .copy-command { max-width: 610px; border-radius: 7px; box-shadow: none; }
-.pro-hero-copy .button-row { margin-top: 20px; }
+.pro-hero-copy .button-row { margin-top: 30px; }
.pro-trust-line { margin-top: 28px; display: flex; flex-wrap: wrap; gap: 10px 22px; color: var(--ink-faint); font-size: 12px; }
.pro-trust-line span { display: inline-flex; align-items: center; gap: 6px; }
.pro-trust-line svg { color: var(--green); }
.pro-hero .interactive-map-stage { width: 100%; border-radius: 10px; box-shadow: 0 18px 50px rgba(10, 33, 59, .08); }
-.pro-film { padding-block: 24px 104px; display: grid; grid-template-columns: minmax(250px, .5fr) minmax(0, 1.5fr); align-items: end; gap: clamp(48px, 7vw, 104px); }
+.pro-film { padding-block: 24px 104px; display: grid; grid-template-columns: minmax(250px, .5fr) minmax(0, 1.5fr); align-items: end; gap: clamp(48px, 7vw, 104px); scroll-margin-top: 90px; }
.pro-film .pro-section-heading { align-self: center; }
+.pro-film .text-link { margin-top: 14px; }
.pro-film video { display: block; width: 100%; aspect-ratio: 16 / 9; border: 1px solid var(--line-strong); border-radius: 10px; background: var(--navy); box-shadow: 0 18px 50px rgba(10, 33, 59, .1); }
.pro-workflow, .pro-surfaces { padding-block: 96px; }
@@ -765,9 +787,10 @@ h3 { margin-bottom: 10px; font-size: 21px; line-height: 1.25; letter-spacing: -.
.pro-proof-metrics dd { margin: 0; color: var(--mint); font: 620 34px/1 var(--font-mono), monospace; letter-spacing: -.05em; }
.pro-surfaces { display: grid; grid-template-columns: .58fr 1.42fr; gap: clamp(60px, 8vw, 120px); }
-.pro-surface-grid { display: grid; grid-template-columns: repeat(2, 1fr); border-top: 1px solid var(--line-strong); }
+.pro-surface-grid { display: grid; grid-template-columns: repeat(3, 1fr); border-top: 1px solid var(--line-strong); }
.pro-surface-grid > a { min-height: 255px; padding: 28px 28px 24px 0; display: flex; flex-direction: column; align-items: flex-start; border-bottom: 1px solid var(--line); border-right: 1px solid var(--line); text-decoration: none; }
-.pro-surface-grid > a:nth-child(even) { padding-left: 28px; border-right: 0; }
+.pro-surface-grid > a:not(:first-child) { padding-left: 28px; }
+.pro-surface-grid > a:last-child { border-right: 0; }
.pro-surface-grid svg { color: var(--green); }
.pro-surface-grid h3 { margin-top: 58px; font-size: 21px; }
.pro-surface-grid p { min-height: 66px; color: var(--ink-soft); font-size: 14px; }
@@ -805,7 +828,7 @@ h3 { margin-bottom: 10px; font-size: 21px; line-height: 1.25; letter-spacing: -.
.pro-proof-metrics div { min-height: 82px; }
.pro-proof-metrics dd { font-size: 28px; }
.pro-surface-grid { grid-template-columns: 1fr; }
- .pro-surface-grid > a, .pro-surface-grid > a:nth-child(even) { min-height: 215px; padding: 26px 0; border-right: 0; }
+ .pro-surface-grid > a, .pro-surface-grid > a:not(:first-child) { min-height: 215px; padding: 26px 0; border-right: 0; }
.pro-surface-grid h3 { margin-top: 34px; }
.pro-surface-grid p { min-height: 0; }
.pro-final { margin-bottom: 60px; padding: 26px 22px; align-items: stretch; flex-direction: column; }
diff --git a/apps/web/app/page.tsx b/apps/web/app/page.tsx
index 6418c65..a51bc23 100644
--- a/apps/web/app/page.tsx
+++ b/apps/web/app/page.tsx
@@ -2,32 +2,25 @@ import Link from "next/link";
import {
ArrowRight,
CheckCircle,
- Command,
GithubLogo,
Laptop,
LockKey,
Path,
- ShieldCheck
+ Robot
} from "@phosphor-icons/react/ssr";
-import { CopyCommand } from "./_components/copy-command";
import { InteractiveMapStage } from "./_components/interactive-map-stage";
-import { commands, repoUrl, siteStats } from "./_lib/site-data";
+import { repoUrl, siteStats } from "./_lib/site-data";
-const workflow = [
- { number: "01", name: "Plan", detail: "Rank primary context, then map likely impact without pretending every related file must change.", href: "/product#plan" },
- { number: "02", name: "Context", detail: "Package relevant source ranges inside a visible estimated-token budget.", href: "/product#context" },
- { number: "03", name: "Graph", detail: "Export the impact relationships as Mermaid or structured JSON.", href: "/product#graph" },
- { number: "04", name: "Explain", detail: "Ask why a file ranked, missed the cutoff, was excluded, or was never scanned.", href: "/product#explain" },
- { number: "05", name: "Compare", detail: "Measure whether a clearer task produced a better context map.", href: "/product#compare" },
- { number: "06", name: "Watch", detail: "See drift and recalculated impact while the working tree changes.", href: "/product#watch" },
- { number: "07", name: "Verify", detail: "Check the completed diff against the plan that guided the work.", href: "/product#verify" }
+const outcomes = [
+ { number: "01", name: "Files to inspect first", detail: "See the source files most connected to the task, with a plain reason for every suggestion.", href: "/product#plan" },
+ { number: "02", name: "Tests and checks to run", detail: "Find the nearest tests and package commands that can prove the change works.", href: "/product#tests" },
+ { number: "03", name: "Risks worth reviewing", detail: "Spot sensitive areas and nearby files before a focused edit becomes an unexpected regression.", href: "/product#risks" }
];
const surfaces = [
- { icon: Command, name: "Slash command", detail: "Install /fixmap in supported coding agents and open the complete workflow menu.", href: "/get-started#slash-command" },
- { icon: Laptop, name: "CLI", detail: "Run locally in a terminal with no account or API key.", href: "/get-started#cli" },
- { icon: ShieldCheck, name: "MCP", detail: "Expose all seven Plan, Context, Graph, Explain, Compare, Verify, and Doctor tools.", href: "/get-started#mcp" },
- { icon: GithubLogo, name: "GitHub Action", detail: "Post the map or verify a saved plan on every pull request.", href: "/get-started#action" }
+ { icon: Robot, name: "Coding agent", detail: "Add /fixmap to Claude Code, Cursor, GitHub Copilot, or another supported agent.", href: "/get-started#agent" },
+ { icon: Laptop, name: "Terminal", detail: "Run FixMap locally with one command and no account or API key.", href: "/get-started#terminal" },
+ { icon: GithubLogo, name: "Pull requests", detail: "Post a FixMap report automatically whenever a pull request changes.", href: "/get-started#pull-requests" }
];
export default function HomePage() {
@@ -35,16 +28,15 @@ export default function HomePage() {
-
FixMap v{siteStats.version} · open source repo intelligence
-
Start the change with evidence.
+
For developers and coding agents · FixMap v{siteStats.version}
+
Stop searching the repository blindly.
- Give FixMap a task, issue, or diff. It returns primary context, likely impact, reachable
- checks, and risks—with every recommendation tied to repository evidence.
+ Give FixMap a task. It shows you and your coding agent the files to inspect, the tests
+ to run, and the risks to review before anything is edited.
-
Local-first
@@ -55,11 +47,12 @@ export default function HomePage() {
-
+
FixMap in 32 seconds
Same issue. Better first move.
-
Watch two coding agents approach the same task as ranked context, impact evidence, Watch, and Verify change the feedback loop.
+
Watch one coding agent start with the right files and checks while the other searches the repository from scratch.
+
Install after the film
@@ -69,12 +62,12 @@ export default function HomePage() {
-
One workflow
-
From task to verified diff.
-
Seven focused steps, each inspectable on its own.
+
One task. Three useful answers.
+
Know what to open, run, and review.
+
FixMap narrows the first investigation without pretending it already knows the fix.
- {workflow.map((item) => (
+ {outcomes.map((item) => (
{item.number}
{item.name}
@@ -89,22 +82,22 @@ export default function HomePage() {
Measured in public
-
Useful without pretending to be certain.
-
FixMap publishes the misses, cohort boundaries, and baseline comparisons. You can also backtest BM25, FixMap, and Impact Graph against your own repository history.
-
Read the benchmark methodology
+
See the wins, the misses, and the limits.
+
FixMap publishes every benchmark case, explains what each number means, and makes uncertainty visible instead of hiding it behind a confidence label.
+
See every benchmark case
-
Held-out Top 3 {siteStats.heldout.top3}/{siteStats.heldout.cases}
-
Adversarial gate {siteStats.adversarial.passed}/{siteStats.adversarial.cases}
-
Median scan {siteStats.medianSeconds}s
+
Relevant fix surfaced in the first three suggestions {siteStats.heldout.top3}/{siteStats.heldout.cases}
+
Misleading or vague tasks handled without false confidence {siteStats.adversarial.passed}/{siteStats.adversarial.cases}
+
Median time to scan and rank the sample repositories {siteStats.medianSeconds}s
-
Use it where work starts
-
One engine. Four entry points.
+
Choose your setup
+
Use FixMap where your work already starts.
{surfaces.map(({ icon: Icon, ...surface }) => (
@@ -119,7 +112,7 @@ export default function HomePage() {
- Ready to map a real task? No signup, cloud upload, or API key.
+ Ready to give the next change a better start? Try it once or install it for your coding agent.
Get started
View source
diff --git a/docs/assets/fixmap-cli-demo.svg b/docs/assets/fixmap-cli-demo.svg
index d30fd1b..140863b 100644
--- a/docs/assets/fixmap-cli-demo.svg
+++ b/docs/assets/fixmap-cli-demo.svg
@@ -26,7 +26,7 @@
- test/auth/reset-password.test.ts (high confidence, impact 13): this file imports
src/auth/reset-password.ts; routed test for src/auth/reset-password.ts via npm run test
Inspection order: src/auth/reset-password.ts → test/auth/reset-password.test.ts .
-
History evidence: 28 eligible commits.
+
History evidence: 29 eligible commits.
## Test Routes
- npm run test : repository root script named test. Related:
test/auth/reset-password.test.ts .
diff --git a/examples/reports/declines-fabricated-identifier.md b/examples/reports/declines-fabricated-identifier.md
index 3281e4f..05f4cda 100644
--- a/examples/reports/declines-fabricated-identifier.md
+++ b/examples/reports/declines-fabricated-identifier.md
@@ -19,7 +19,7 @@ FixMap found 0 context files, 0 impact files, and generated 0 test routes.
- None found
Inspection order: None.
-History evidence: 28 eligible commits.
+History evidence: 29 eligible commits.
## Test Routes
diff --git a/examples/reports/declines-unmatched-terms.md b/examples/reports/declines-unmatched-terms.md
index e3b68d6..6062385 100644
--- a/examples/reports/declines-unmatched-terms.md
+++ b/examples/reports/declines-unmatched-terms.md
@@ -19,7 +19,7 @@ FixMap found 0 context files, 0 impact files, and generated 0 test routes.
- None found
Inspection order: None.
-History evidence: 28 eligible commits.
+History evidence: 29 eligible commits.
## Test Routes
diff --git a/examples/reports/declines-vague-task.md b/examples/reports/declines-vague-task.md
index 82247d0..d98ca20 100644
--- a/examples/reports/declines-vague-task.md
+++ b/examples/reports/declines-vague-task.md
@@ -19,7 +19,7 @@ FixMap found 0 context files, 0 impact files, and generated 0 test routes.
- None found
Inspection order: None.
-History evidence: 28 eligible commits.
+History evidence: 29 eligible commits.
## Test Routes
diff --git a/examples/reports/workspace-api-discount.md b/examples/reports/workspace-api-discount.md
index 6183389..b9d97a6 100644
--- a/examples/reports/workspace-api-discount.md
+++ b/examples/reports/workspace-api-discount.md
@@ -13,7 +13,7 @@ FixMap found 2 context files, 2 impact files, and generated 3 test routes.
- `packages/utils/test/currency.test.ts` (high confidence, impact 13): this file imports packages/utils/src/currency.ts; routed test for packages/utils/src/currency.ts via pnpm --dir packages/utils run test
Inspection order: `apps/api/src/orders.ts` → `packages/utils/src/currency.ts` → `apps/api/test/orders.test.ts` → `packages/utils/test/currency.test.ts`.
-History evidence: 63 eligible commits.
+History evidence: 64 eligible commits.
## Test Routes
diff --git a/examples/reports/workspace-utils-rounding.md b/examples/reports/workspace-utils-rounding.md
index dc33470..b0d44b9 100644
--- a/examples/reports/workspace-utils-rounding.md
+++ b/examples/reports/workspace-utils-rounding.md
@@ -11,7 +11,7 @@ FixMap found 1 context file, 1 impact file, and generated 2 test routes.
- `packages/utils/test/currency.test.ts` (high confidence, impact 13): this file imports packages/utils/src/currency.ts; routed test for packages/utils/src/currency.ts via pnpm --dir packages/utils run test
Inspection order: `packages/utils/src/currency.ts` → `packages/utils/test/currency.test.ts`.
-History evidence: 63 eligible commits.
+History evidence: 64 eligible commits.
## Test Routes
diff --git a/package-lock.json b/package-lock.json
index e81f7e1..2a282c8 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6207,9 +6207,9 @@
"license": "MIT"
},
"node_modules/nanoid": {
- "version": "3.3.17",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.17.tgz",
- "integrity": "sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==",
+ "version": "3.3.18",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz",
+ "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==",
"funding": [
{
"type": "github",
diff --git a/package.json b/package.json
index 55b91ee..0f02336 100644
--- a/package.json
+++ b/package.json
@@ -79,7 +79,7 @@
},
"fast-uri": "3.1.4",
"js-yaml": "4.3.1",
- "nanoid": "3.3.17",
+ "nanoid": "3.3.18",
"sharp": "0.35.3",
"vite": "6.4.3"
},