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
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@ Turn an issue or git diff into relevant files, test routes, risk notes, and clea
<!-- Reproducible recording: regenerate with `npm run build:cli && node scripts/render-demo.mjs` -->
![Animated terminal recording: a single fixmap plan command on the checked-in tiny-auth example produces ranked context files with confidence and reasons, a test route with related tests, a high authentication risk note, and honest empty diagnostics — in about ten seconds.](docs/assets/fixmap-cli-demo.svg)

### Watch FixMap in 24 seconds

[![FixMap launch film preview: a terminal report showing the ranked reset-password context file, its related test route, and a high authentication risk note.](apps/web/public/fixmap-launch-poster.jpg)](https://fixmap-flax.vercel.app/#launch-film)

[Play the launch film](https://fixmap-flax.vercel.app/fixmap-launch.mp4) · [Explore the live experience](https://fixmap-flax.vercel.app/#launch-film) · [View the GitHub repository](https://github.com/aryamthecodebreaker/FixMap)

## Why FixMap?

Coding agents are fast once they have the right context. The expensive mistakes happen earlier:
Expand Down
24 changes: 22 additions & 2 deletions apps/web/app/globals.css
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,8 @@ h1 em, h2 em {
.button.primary:hover { box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.5), 0 12px 34px rgba(116, 240, 186, 0.32); }
.button.secondary { background: rgba(255, 255, 255, 0.025); backdrop-filter: blur(6px); }
.button.secondary:hover { border-color: rgba(116, 240, 186, 0.4); background: var(--mint-soft); }
.button.github-button { color: var(--mint); background: transparent; border-color: rgba(116, 240, 186, 0.26); }
.button.github-button:hover { border-color: rgba(116, 240, 186, 0.55); background: var(--mint-soft); }
.proof-row { display: flex; gap: 26px; margin-top: 38px; flex-wrap: wrap; color: var(--muted); font-size: 12.5px; letter-spacing: 0.01em; }
.proof-row span::before { content: "✓"; color: var(--mint); margin-right: 8px; }

Expand Down Expand Up @@ -193,12 +195,29 @@ h1 em, h2 em {
.terminal-label { margin-top: 16px !important; color: var(--faint) !important; font-size: 10px; letter-spacing: 0.22em; }

/* Sections */
.demo-section, .workflow, .quickstart { max-width: 1200px; margin: auto; padding: 104px 24px; border-top: 1px solid var(--line); }
.film-section, .demo-section, .workflow, .quickstart { max-width: 1200px; margin: auto; padding: 104px 24px; border-top: 1px solid var(--line); }
.section-heading { max-width: 740px; margin-bottom: 46px; }
.section-heading.compact { max-width: 560px; }
h2 { margin-bottom: 18px; font-size: clamp(34px, 4.2vw, 52px); line-height: 1.06; }
.section-heading > p:last-child, .quickstart > div > p:last-child { color: var(--muted); font-size: 17px; line-height: 1.65; font-weight: 380; }

/* Launch film */
.film-section { display: grid; grid-template-columns: 0.68fr 1.32fr; gap: 58px; align-items: center; }
.film-copy > p:not(.kicker):not(.film-note) { color: var(--muted); font-size: 16px; line-height: 1.7; }
.film-links { display: flex; gap: 12px; margin-top: 28px; flex-wrap: wrap; }
.film-note { margin: 20px 0 0; color: var(--faint); font: 11px/1.6 var(--font-mono), ui-monospace, monospace; }
.film-frame {
margin: 0;
overflow: hidden;
border-radius: 20px;
background: linear-gradient(var(--panel-solid), var(--panel-solid)) padding-box,
linear-gradient(150deg, rgba(116, 240, 186, 0.5), rgba(148, 187, 168, 0.08) 54%, rgba(233, 220, 184, 0.2)) border-box;
border: 1px solid transparent;
box-shadow: var(--shadow-lg);
}
.film-frame video { display: block; width: 100%; aspect-ratio: 16 / 9; background: #020403; object-fit: cover; }
.film-frame figcaption { padding: 14px 18px 16px; color: var(--muted); font-size: 11.5px; line-height: 1.5; border-top: 1px solid var(--line); }

/* Demo */
.demo-shell {
display: grid;
Expand Down Expand Up @@ -312,6 +331,7 @@ footer > a:last-child:hover { color: var(--text); border-color: var(--mint); }
@media (max-width: 860px) {
.hero { grid-template-columns: 1fr; padding-top: 72px; gap: 56px; }
.hero-terminal { transform: none; animation: none; }
.film-section { grid-template-columns: 1fr; }
.demo-shell { grid-template-columns: 1fr; }
.demo-input { border-right: 0; border-bottom: 1px solid var(--line); }
.steps { grid-template-columns: 1fr; }
Expand All @@ -323,7 +343,7 @@ footer > a:last-child:hover { color: var(--text); border-color: var(--mint); }
.eyebrow::after, .kicker::after { display: none; }
h1 { font-size: 40px; }
.hero { padding-bottom: 72px; }
.demo-section, .workflow, .quickstart { padding-top: 76px; padding-bottom: 76px; }
.film-section, .demo-section, .workflow, .quickstart { padding-top: 76px; padding-bottom: 76px; }
.demo-input, .demo-results { padding-left: 18px; padding-right: 18px; }
.proof-row { gap: 12px; flex-direction: column; }
footer { align-items: flex-start; flex-direction: column; }
Expand Down
33 changes: 32 additions & 1 deletion apps/web/app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ export default function HomePage() {
<span>FixMap</span>
</a>
<div className="nav-links">
<a href="#launch-film">Film</a>
<a href="#demo">Demo</a>
<a href="#how-it-works">How it works</a>
<a className="nav-github" href="https://github.com/aryamthecodebreaker/FixMap">GitHub ↗</a>
Expand All @@ -27,7 +28,8 @@ export default function HomePage() {
</p>
<div className="hero-actions">
<a className="button primary" href="#quickstart">Try the CLI</a>
<a className="button secondary" href="#demo">Explore a live sample</a>
<a className="button secondary" href="#launch-film">Watch the launch film</a>
<a className="button github-button" href="https://github.com/aryamthecodebreaker/FixMap">View on GitHub ↗</a>
</div>
<div className="proof-row" aria-label="Product properties">
<span>Deterministic explanations</span>
Expand All @@ -51,6 +53,35 @@ export default function HomePage() {
</div>
</section>

<section className="film-section" id="launch-film">
<div className="film-copy">
<p className="kicker">23-second product film</p>
<h2>See the handoff before the first edit.</h2>
<p id="launch-film-description">
The film moves from the wrong-file problem to a ranked context file, a test route, and an explicit risk note—the core FixMap workflow in one short pass.
</p>
<div className="film-links">
<a className="button primary" href="https://github.com/aryamthecodebreaker/FixMap">Explore the GitHub repo ↗</a>
<a className="button secondary" href="/fixmap-launch.mp4">Open the video</a>
</div>
<p className="film-note">Original product film · 1280×720 · sound on · current release v0.6.2</p>
</div>
<figure className="film-frame">
<video
controls
playsInline
preload="metadata"
poster="/fixmap-launch-poster.jpg"
aria-label="FixMap launch film"
aria-describedby="launch-film-description"
>
<source src="/fixmap-launch.mp4" type="video/mp4" />
Your browser does not support embedded video. <a href="/fixmap-launch.mp4">Open the MP4 instead.</a>
</video>
<figcaption>FixMap turns a task into explainable context, verification routes, and reviewable risk.</figcaption>
</figure>
</section>

<section className="demo-section" id="demo">
<div className="section-heading">
<p className="kicker">Interactive sample</p>
Expand Down
Binary file added apps/web/public/fixmap-launch-poster.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/web/public/fixmap-launch.mp4
Binary file not shown.
42 changes: 40 additions & 2 deletions docs/LAUNCH_KIT.md
Original file line number Diff line number Diff line change
Expand Up @@ -172,13 +172,51 @@ claude mcp add fixmap -- npx -y @aryam/fixmap@latest mcp

Avoid generic feature lists and unsupported superlatives.

## Ready-to-post LinkedIn update

Coding agents are fast once they know where to work. The expensive mistakes happen before the first edit: opening the wrong module, missing the owning test, or overlooking a risky change.

I have been building FixMap to make that handoff explicit.

Give it a public GitHub issue URL and it returns ranked context files with reasons, suggested test routes, risk notes, and diagnostics—without an account or API key:

```text
npx -y @aryam/fixmap@latest plan --issue https://github.com/aryamthecodebreaker/FixMap/issues/59
```

The latest work includes:

- one-command analysis of public GitHub issue URLs
- safer isolated repository fetching with bounded inputs and no credentials, hooks, submodules, or executed repository scripts
- a shared CLI, MCP server, and GitHub Action workflow
- a GitHub Marketplace listing for the Action
- a production dependency audit gate with no high or critical findings
- 119 automated tests, production builds, smoke tests, and a frozen cross-repository evaluation gate
- a new 24-second product film on the README and live site

The evaluation is intentionally public and modest: across six pinned real bugs, FixMap currently ranks an expected file in the top 1 for 3/6 cases and in the top 3 for 5/6. The miss is published too.

Watch the film and try the live experience: https://fixmap-flax.vercel.app/#launch-film

GitHub: https://github.com/aryamthecodebreaker/FixMap

Marketplace: https://github.com/marketplace/actions/fixmap

npm: https://www.npmjs.com/package/@aryam/fixmap

Release: https://github.com/aryamthecodebreaker/FixMap/releases/tag/v0.6.2

I would especially value feedback on the ranking explanations and which repository signals would make FixMap more useful before an agent starts editing.

#opensource #devtools #githubactions #mcp #typescript #aicoding

## Distribution checklist

- [ ] Official MCP Registry metadata is current; downstream directories can ingest the canonical entry.
- [ ] GitHub Marketplace listing is enabled from a root `action.yml`.
- [x] GitHub Marketplace listing is enabled from a root `action.yml`.
- [ ] Relevant awesome-list submissions follow each list's current contribution rules and add a genuinely missing category entry.
- [ ] Release notes contain the one-command trial and benchmark delta.
- [ ] A short demo video is rendered from real output for platforms that do not animate the README SVG.
- [x] A short demo video is rendered from real output for platforms that do not animate the README SVG.
- [ ] Repository topics, description, homepage, and social preview use the current product language.
- [ ] GitHub Discussions has a clear “show how you use FixMap” prompt after there are real users to answer it.

Expand Down