diff --git a/README.md b/README.md index da69476..153f839 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,9 @@ # FixMap -Know where to edit before the first edit. +Tell AI coding tools which files to check first. -Paste a GitHub issue URL, describe a task, or point at a diff. FixMap returns ranked context, an evidence-backed Impact Graph, reachable test commands, risks, and explicit uncertainty—without an account, API key, or model call. +Describe what is broken. FixMap checks the project and gives tools like Codex, Claude Code, and Cursor a short list of files to open, tests to run, and other code to review. It includes reasons and says when it is unsure—without an account, API key, or model call. [](https://github.com/aryamthecodebreaker/FixMap/actions/workflows/ci.yml) [](https://www.npmjs.com/package/@aryam/fixmap) @@ -12,13 +12,15 @@ Paste a GitHub issue URL, describe a task, or point at a diff. FixMap returns ra [](https://github.com/marketplace/actions/fixmap) [](LICENSE) -[Website](https://usefixmap.vercel.app) · [Live demo](https://usefixmap.vercel.app/demo) · [Documentation](https://usefixmap.vercel.app/docs) · [Evidence](https://usefixmap.vercel.app/evidence) · [Changelog](CHANGELOG.md) +[Website](https://usefixmap.vercel.app) · [Use cases](https://usefixmap.vercel.app/use-cases) · [Live demo](https://usefixmap.vercel.app/demo) · [Documentation](https://usefixmap.vercel.app/docs) · [Evidence](https://usefixmap.vercel.app/evidence) · [Changelog](CHANGELOG.md) -[](https://usefixmap.vercel.app/fixmap-launch.mp4) +[](https://usefixmap.vercel.app/fixmap-launch.mp4) -
Watch the 32-second launch film with sound
+Watch the 31-second FixMap workflow video with sound
+ +Try a task in the [homepage sample](https://usefixmap.vercel.app). It runs the real FixMap Plan engine in the tab against the bundled `sample-api` project. It does not inspect your repository or upload the task text. Use [Get started](https://usefixmap.vercel.app/get-started) for your own repository, or open the [full browser demo](https://usefixmap.vercel.app/demo) for advanced workflows.  @@ -172,7 +174,8 @@ Use `--working-tree` for staged and unstaged tracked edits, `--include-untracked - The MCP server exposes `fixmap_plan`, `fixmap_context`, `fixmap_graph`, `fixmap_explain`, `fixmap_compare`, `fixmap_verify`, and `fixmap_doctor` over local stdio and is published in the official MCP Registry. - The GitHub Action runs Plan or Verify on pull requests, appends within the job summary's remaining 1 MiB budget, bounds its report output and comment, and creates or updates one FixMap comment instead of posting duplicates. - The Action accepts explicit task input or pull-request context, uses the same report validator as the CLI and MCP server, and fails clearly when a requested diff cannot be resolved. -- The browser demo runs the real core Plan, Explain, Compare, and Verify logic against a sample repository without uploading the task. +- The homepage task mapper runs real Plan logic against the bundled `sample-api` repository and preserves the engine's uncertainty state instead of inventing fallback results. +- The full browser demo runs the real core Plan, Explain, Compare, and Verify logic against the same sample repository without uploading the task. ### TypeScript library diff --git a/apps/web/.impeccable/design.json b/apps/web/.impeccable/design.json new file mode 100644 index 0000000..47d535f --- /dev/null +++ b/apps/web/.impeccable/design.json @@ -0,0 +1,243 @@ +{ + "schemaVersion": 2, + "generatedAt": "2026-08-20T20:23:55.4435764+05:30", + "title": "Design System: FixMap", + "extensions": { + "colorMeta": { + "paper": { + "role": "neutral", + "displayName": "Warm Paper", + "canonical": "#f7f4ec", + "tonalRamp": ["#0d1117", "#111821", "#161d26", "#405064", "#736e66", "#d9d3c6", "#eee9dc", "#fffdf8"] + }, + "ink": { + "role": "neutral", + "displayName": "Navy Ink", + "canonical": "#0a213b", + "tonalRamp": ["#071523", "#071d35", "#0a213b", "#405064", "#656e79", "#aab5bf", "#c4ced6", "#edf3f7"] + }, + "navy": { + "role": "secondary", + "displayName": "Evidence Navy", + "canonical": "#071d35", + "tonalRamp": ["#071523", "#071d35", "#0a213b", "#23394d", "#405064", "#74818c", "#aab5bf", "#edf3f7"] + }, + "green": { + "role": "primary", + "displayName": "Repository Green", + "canonical": "#0a5a43", + "tonalRamp": ["#04261d", "#074433", "#0a5a43", "#2f805d", "#589774", "#75c99a", "#9bddb7", "#dff2e7"] + }, + "mint": { + "role": "tertiary", + "displayName": "Signal Mint", + "canonical": "#75c99a", + "tonalRamp": ["#074433", "#0a5a43", "#2f805d", "#589774", "#75c99a", "#9bddb7", "#dff2e7", "#f0f3e8"] + }, + "line": { + "role": "neutral", + "displayName": "Rule", + "canonical": "#d9d3c6", + "tonalRamp": ["#161d26", "#394651", "#656e79", "#736e66", "#aab5bf", "#d9d3c6", "#eee9dc", "#fffdf8"] + }, + "warning": { + "role": "tertiary", + "displayName": "Review Amber", + "canonical": "#9b521b", + "tonalRamp": ["#2f1708", "#5b2d0d", "#794014", "#9b521b", "#bd7138", "#db9562", "#ffc184", "#ffe8d1"] + }, + "dark-paper": { + "role": "neutral", + "displayName": "Night Paper", + "canonical": "#0d1117", + "tonalRamp": ["#071523", "#0d1117", "#111821", "#161d26", "#394651", "#74818c", "#c4ced6", "#edf3f7"] + } + }, + "typographyMeta": { + "display": { + "displayName": "Display", + "purpose": "Plain-language homepage and subpage statements." + }, + "headline": { + "displayName": "Headline", + "purpose": "Section claims and featured use-case headings." + }, + "body": { + "displayName": "Body", + "purpose": "Explanations and supporting prose." + }, + "label": { + "displayName": "Evidence Label", + "purpose": "Compact capability, step, and proof labels." + }, + "technical": { + "displayName": "Technical Evidence", + "purpose": "Paths, commands, ranks, and report metadata." + } + }, + "shadows": [ + { + "name": "ambient-panel", + "value": "0 14px 38px rgba(10, 33, 59, 0.08)", + "purpose": "Dropdowns and established raised containers." + }, + { + "name": "live-report", + "value": "0 18px 50px rgba(10, 33, 59, 0.08)", + "purpose": "The homepage interactive sample report only." + }, + { + "name": "dark-ambient-panel", + "value": "0 20px 55px rgba(0, 0, 0, 0.36)", + "purpose": "Theme-equivalent lift on dark surfaces." + } + ], + "motion": [ + { + "name": "state-standard", + "value": "180ms ease", + "purpose": "Color and border changes on buttons, links, and compact controls." + }, + { + "name": "progress-reveal", + "value": "450ms cubic-bezier(0.2, 0.75, 0.25, 1)", + "purpose": "A short directional reveal for report progress only." + }, + { + "name": "reduced-motion", + "value": "0.01ms", + "purpose": "Near-instant fallback for animations and transitions when reduced motion is requested." + } + ], + "breakpoints": [ + { + "name": "phone", + "value": "620px" + }, + { + "name": "compact-editorial", + "value": "820px" + }, + { + "name": "mobile-navigation", + "value": "900px" + }, + { + "name": "stacked-feature", + "value": "1120px" + } + ] + }, + "components": [ + { + "name": "Primary Button", + "kind": "button", + "refersTo": "button-primary", + "description": "The single strongest action in a section.", + "html": "", + "css": ".ds-btn-primary { min-height: 44px; padding: 0 18px; border: 1px solid transparent; border-radius: 6px; background: var(--green); color: var(--paper-light); font: 620 14px/1 var(--font-body), Arial, sans-serif; cursor: pointer; transition: background 180ms ease, border-color 180ms ease; } .ds-btn-primary:hover { background: var(--green-dark); } .ds-btn-primary:active { background: var(--ink); } .ds-btn-primary:focus-visible { outline: 3px solid var(--focus-ring); outline-offset: 3px; }" + }, + { + "name": "Secondary Button", + "kind": "button", + "refersTo": "button-secondary", + "description": "A bounded alternative action that remains visually subordinate.", + "html": "", + "css": ".ds-btn-secondary { min-height: 44px; padding: 0 18px; border: 1px solid var(--ink); border-radius: 6px; background: transparent; color: var(--ink); font: 620 14px/1 var(--font-body), Arial, sans-serif; cursor: pointer; transition: background 180ms ease, color 180ms ease; } .ds-btn-secondary:hover, .ds-btn-secondary:active { background: var(--ink); color: var(--paper-light); } .ds-btn-secondary:focus-visible { outline: 3px solid var(--focus-ring); outline-offset: 3px; }" + }, + { + "name": "Task Input", + "kind": "input", + "refersTo": "task-input", + "description": "A readable task-description field for the interactive report.", + "html": "", + "css": ".ds-task-field { display: grid; gap: 6px; color: var(--ink-soft); font: 680 11px/1.4 var(--font-body), Arial, sans-serif; } .ds-task-field textarea { min-height: 82px; padding: 11px 12px; resize: vertical; border: 1px solid var(--line-strong); border-radius: 6px; background: var(--paper); color: var(--ink); font: 600 16px/1.38 var(--font-body), Arial, sans-serif; } .ds-task-field small { color: var(--ink-faint); font-size: 10.5px; font-weight: 400; } .ds-task-field textarea:focus-visible { outline: 3px solid var(--focus-ring); outline-offset: 3px; border-color: var(--green); }" + }, + { + "name": "Preset Chip", + "kind": "chip", + "refersTo": "preset-chip", + "description": "A compact example-task selector with an explicit pressed state.", + "html": "", + "css": ".ds-preset-chip { min-height: 31px; padding: 5px 9px; border: 1px solid var(--line); border-radius: 5px; background: transparent; color: var(--ink-soft); font: 620 10.5px/1.3 var(--font-body), Arial, sans-serif; cursor: pointer; } .ds-preset-chip:hover, .ds-preset-chip[aria-pressed=\"true\"] { border-color: var(--green); background: var(--mint-soft); color: var(--green-dark); } .ds-preset-chip:focus-visible { outline: 3px solid var(--focus-ring); outline-offset: 3px; }" + }, + { + "name": "Primary Navigation", + "kind": "nav", + "description": "Compact text navigation with green interaction states.", + "html": "", + "css": ".ds-nav { display: flex; align-items: center; gap: 26px; color: var(--ink); font: 560 13px/1.4 var(--font-body), Arial, sans-serif; } .ds-nav a { color: inherit; text-decoration: none; transition: color 180ms ease; } .ds-nav a:hover, .ds-nav a[aria-current=\"page\"] { color: var(--green); } .ds-nav a:focus-visible { outline: 3px solid var(--focus-ring); outline-offset: 3px; }" + }, + { + "name": "Live Report", + "kind": "custom", + "description": "The signature task-to-evidence product preview.", + "html": "src/auth/reset.tsDefines the task identifier.npm test -- resetReal output from the sample project
src/auth/reset.tsnpm test -- reset{task}-
{command}
+ 1. Tell FixMap
+ What is broken?
+
+
+
+ {command}
{editCandidate.path}{candidateReason}{testRoute.command}{testRoute.relatedFiles[0]}{impactFile.path}
- {impactReason}
- {status}
+ + {editCandidate ? ( + <> +{editCandidate.path}
+ {editCandidateReason ? {editCandidateReason} : null}
+ {testRoute?.command ?? "No test route surfaced"}
+ {testRoute ? (
+
+ {testRoute.reason}
+ {testRoute.relatedFiles[0] ? ` · Nearest test: ${testRoute.relatedFiles[0]}` : ""}
+
+ ) : null}
+ {impactFile?.path ?? "No nearby impact file surfaced"}
+ {impactReason ? {impactReason} : null}
+ {risk ? (
+
+
+
FixMap says: {diagnostic.message}
: null} + {report.analysis?.nextAction ? {report.analysis.nextAction} : null} +- Generated by the real browser-safe FixMap engine against the sample repository used in the live demo. -
+A practical map before the first edit. Free, local-first, and open source.
+Tells AI coding tools which files and tests to check first. Free, local-first, and open source.