Skip to content

Feat/marketing redesign and llm seo#137

Merged
omsherikar merged 12 commits into
mainfrom
feat/marketing-redesign-and-llm-seo
May 11, 2026
Merged

Feat/marketing redesign and llm seo#137
omsherikar merged 12 commits into
mainfrom
feat/marketing-redesign-and-llm-seo

Conversation

@omsherikar
Copy link
Copy Markdown
Collaborator

No description provided.

Copilot AI review requested due to automatic review settings May 11, 2026 19:34
@vercel
Copy link
Copy Markdown

vercel Bot commented May 11, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
refactron Ready Ready Preview, Comment May 11, 2026 7:50pm

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 11, 2026

Warning

Rate limit exceeded

@omsherikar has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 45 minutes and 20 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: edb8abf1-0635-4b91-b44f-f2ac1ce38660

📥 Commits

Reviewing files that changed from the base of the PR and between a70113f and 0983448.

⛔ Files ignored due to path filters (1)
  • public/Profile/Om_Sherikar.png is excluded by !**/*.png
📒 Files selected for processing (27)
  • package.json
  • public/index.html
  • public/llms-full.txt
  • public/llms.txt
  • public/robots.txt
  • public/sitemap.xml
  • scripts/generate-llms-full.js
  • scripts/generate-sitemap.js
  • scripts/prerender.js
  • src/App.tsx
  • src/components/AboutPage.tsx
  • src/components/BlogPostPage.tsx
  • src/components/ComparisonSection.tsx
  • src/components/CookieManager.tsx
  • src/components/FAQSection.tsx
  • src/components/Footer.tsx
  • src/components/NumericAsciiBackdrop.tsx
  • src/components/PricingSection.tsx
  • src/components/QuickstartSection.tsx
  • src/components/RefactoringWorkflowSection.tsx
  • src/components/ResearchPage.tsx
  • src/components/TestimonialsSection.tsx
  • src/components/WhatWeDoSection.tsx
  • src/components/ui/card-swap.tsx
  • src/components/ui/safari-mockup.tsx
  • tailwind.config.js
  • vercel.json
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/marketing-redesign-and-llm-seo

Tip

💬 Introducing Slack Agent: The best way for teams to turn conversations into code.

Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.

  • Generate code and open pull requests
  • Plan features and break down work
  • Investigate incidents and troubleshoot customer tickets together
  • Automate recurring tasks and respond to alerts with triggers
  • Summarize progress and report instantly

Built for teams:

  • Shared memory across your entire org—no repeating context
  • Per-thread sandboxes to safely plan and execute work
  • Governance built-in—scoped access, auditability, and budget controls

One agent for your entire SDLC. Right inside Slack.

👉 Get started


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 11, 2026

⚠️ Deprecation Warning: The deny-licenses option is deprecated for possible removal in the next major release. For more information, see issue 997.

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the Refactron marketing site to reflect the new positioning (deterministic refactoring + verification, now with npm distribution) and adds SEO/LLM discovery assets to improve indexing and AI retrieval.

Changes:

  • Adds new landing sections (Comparison, Quickstart, Testimonials) and redesigns existing sections (WhatWeDo, About) for the new narrative.
  • Improves SEO by adding per-post SEO + BlogPosting JSON-LD, homepage FAQ JSON-LD, and new /research route plus sitemap/prerender updates.
  • Introduces llms.txt and llms-full.txt plus Vercel header rules and robots updates to support LLM indexing.

Reviewed changes

Copilot reviewed 26 out of 28 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
vercel.json Adds cache + content-type headers for llms.txt and llms-full.txt; minor redirect formatting.
tailwind.config.js Adds new marquee/pulse animations and keyframes used by the redesigned sections.
src/data/posts.ts Adds a new release blog post describing npm distribution and new capabilities.
src/components/WhatWeDoSection.tsx Replaces modal/card UI with new bento layout + richer visuals and reduced-motion handling.
src/components/ui/safari-mockup.tsx Removes unused Safari mockup component (file deleted).
src/components/ui/card-swap.tsx Removes unused GSAP card swap component (file deleted).
src/components/TestimonialsSection.tsx Adds a new testimonials marquee section with reduced-motion fallback.
src/components/ResearchPage.tsx Adds a new /research page (currently “private/coming soon” messaging) with SEO metadata.
src/components/QuickstartSection.tsx Adds a new quickstart section with accessible tabs and code-like command listing.
src/components/PricingSection.tsx Updates plan copy to match deterministic/verification-focused messaging (removes LLM language).
src/components/PageLayout.tsx Adds announcement banner integration and adjusts layout padding when banner is visible.
src/components/NumericAsciiBackdrop.tsx Adds a canvas-based numeric ASCII background used by Quickstart.
src/components/NavigationBar.tsx Adds bannerVisible prop to offset navbar when the announcement banner is shown.
src/components/HeroSection.tsx Adds auto-cycling pip/npm install CTA with copy support and animation transitions.
src/components/Footer.tsx Updates footer links (adds Research/Status/Quickstart/etc.) and removes cookie-settings entry point.
src/components/FAQSection.tsx Keeps answers in the DOM for SEO while animating height/opacity; adds ARIA ids and defaults first open.
src/components/CookieManager.tsx Removes outdated footer-link comment after cookie-settings entry point was removed.
src/components/ComparisonSection.tsx Adds a new comparison matrix section and link to /research.
src/components/BlogPostPage.tsx Adds per-post SEO + BlogPosting JSON-LD injection; adds “Release/package” icon mapping.
src/components/BlogPage.tsx Adds “Release/package” icon mapping for blog listings.
src/components/AnnouncementBanner.tsx Adds dismissible announcement banner with sessionStorage persistence and internal/external navigation.
src/components/AboutPage.tsx Major redesign with new founder story, visuals, and multiple generated ASCII backdrops.
src/App.tsx Adds new landing sections, adds /research route, and composes the new homepage order.
scripts/prerender.js Adds /research to the prerendered routes set.
scripts/generate-sitemap.js Adds /research to the generated sitemap route list.
scripts/generate-llms-full.js Adds a new prebuild script to generate public/llms-full.txt from posts + FAQ content.
public/sitemap.xml Updates sitemap output to include /research and the new blog post.
public/robots.txt Expands crawler directives; adds LLM/training bot allowlist and adds Sitemap: .../llms.txt.
public/llms.txt Adds a curated LLM index document describing site URLs and key product facts.
public/llms-full.txt Adds a generated long-form LLM document containing curated overview + FAQs + full blog content.
public/index.html Updates meta descriptions/keywords and adds FAQPage JSON-LD + expands SoftwareApplication JSON-LD.
package.json Extends prebuild to also run scripts/generate-llms-full.js.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +90 to +99
const slugRx = /slug:\s*['"]([^'"]+)['"]/g;
const titleRx = /title:\s*["'](.+?)["'],/g;
const summaryRx = /summary:\s*\n?\s*['"]([\s\S]*?)['"],\n/g;
const bodyRx = /body:\s*`([\s\S]*?)`,?\n\s*(?:featured|}|\])/g;
const publishedRx = /publishedAt:\s*['"]([^'"]+)['"]/g;

const slugs = [...region.matchAll(slugRx)].map(m => m[1]);
const titles = [...region.matchAll(titleRx)].map(m => m[1]);
const summaries = [...region.matchAll(summaryRx)].map(m => m[1]);
const bodies = [...region.matchAll(bodyRx)].map(m => m[1]);
Comment on lines +25 to +30
const ld = {
'@context': 'https://schema.org',
'@type': 'BlogPosting',
headline: post.title,
description: post.summary,
datePublished: new Date(post.publishedAt).toISOString(),
Comment thread src/components/Footer.tsx
Comment on lines 211 to 246
{/* Company */}
<div>
<h4 className="text-sm font-semibold text-white mb-4">Company</h4>
<ul className="space-y-3">
<li>
<a
href="/about"
className="text-neutral-400 hover:text-white text-sm transition-colors"
>
About
</a>
</li>
<li>
<a
href="/security"
className="text-neutral-400 hover:text-white text-sm transition-colors"
>
Security
</a>
</li>
<li>
<a
href="/status"
className="text-neutral-400 hover:text-white text-sm transition-colors"
>
Status
</a>
</li>
<li>
<a
href="https://cal.com/omsherikar/queries-refactron"
target="_blank"
rel="noopener noreferrer"
href="/privacy-policy"
className="text-neutral-400 hover:text-white text-sm transition-colors"
>
Contact
Privacy
</a>
</li>
<li>
<a
href="/privacy-policy"
href="/terms-of-service"
className="text-neutral-400 hover:text-white text-sm transition-colors"
>
Privacy
Terms
</a>
</li>
Comment thread public/robots.txt

# ─── Sitemaps + LLM index ────────────────────────────────────────
Sitemap: https://refactron.dev/sitemap.xml
Sitemap: https://refactron.dev/llms.txt
Comment thread public/sitemap.xml Outdated
@@ -1 +1 @@
<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://refactron.dev/</loc><changefreq>weekly</changefreq><priority>1.0</priority></url><url><loc>https://refactron.dev/blog</loc><changefreq>weekly</changefreq><priority>0.9</priority></url><url><loc>https://refactron.dev/about</loc><changefreq>monthly</changefreq><priority>0.6</priority></url><url><loc>https://refactron.dev/changelog</loc><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://refactron.dev/security</loc><changefreq>monthly</changefreq><priority>0.5</priority></url><url><loc>https://refactron.dev/privacy-policy</loc><changefreq>yearly</changefreq><priority>0.3</priority></url><url><loc>https://refactron.dev/terms-of-service</loc><changefreq>yearly</changefreq><priority>0.3</priority></url><url><loc>https://refactron.dev/blog/i-ran-refactron-on-djangos-codebase</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/refactron-vs-cursor-vs-codeant</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/why-we-built-verification-engine-first</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/legacy-code-ai-refactoring</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/refactron-on-requests-library</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/real-cost-of-not-refactoring</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/refactron-on-fastapi</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/how-to-safely-refactor-python-code-you-didnt-write</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/why-refactron-runs-locally</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/refactron-is-now-a-nodejs-package</loc><changefreq>monthly</changefreq><priority>0.8</priority></url></urlset> No newline at end of file
<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://refactron.dev/</loc><changefreq>weekly</changefreq><priority>1.0</priority></url><url><loc>https://refactron.dev/blog</loc><changefreq>weekly</changefreq><priority>0.9</priority></url><url><loc>https://refactron.dev/about</loc><changefreq>monthly</changefreq><priority>0.6</priority></url><url><loc>https://refactron.dev/changelog</loc><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://refactron.dev/security</loc><changefreq>monthly</changefreq><priority>0.5</priority></url><url><loc>https://refactron.dev/research</loc><changefreq>monthly</changefreq><priority>0.5</priority></url><url><loc>https://refactron.dev/privacy-policy</loc><changefreq>yearly</changefreq><priority>0.3</priority></url><url><loc>https://refactron.dev/terms-of-service</loc><changefreq>yearly</changefreq><priority>0.3</priority></url><url><loc>https://refactron.dev/blog/i-ran-refactron-on-djangos-codebase</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/refactron-vs-cursor-vs-codeant</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/why-we-built-verification-engine-first</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/legacy-code-ai-refactoring</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/refactron-on-requests-library</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/real-cost-of-not-refactoring</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/refactron-on-fastapi</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/how-to-safely-refactor-python-code-you-didnt-write</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/why-refactron-runs-locally</loc><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>https://refactron.dev/blog/refactron-is-now-a-nodejs-package</loc><changefreq>monthly</changefreq><priority>0.8</priority></url></urlset>
to="/research"
className="text-[11px] font-mono text-neutral-500 hover:text-neutral-400 tracking-wide underline underline-offset-[5px] decoration-neutral-700/80 hover:decoration-neutral-500 transition-colors"
>
Read the full research paper →
Comment thread public/llms.txt
- [Refactron — landing](https://refactron.dev/): Hero, pipeline, comparison with Cursor / SonarQube / CodeAnt, quickstart, FAQ.
- [About Refactron](https://refactron.dev/about): The origin story (the hackathon moment), the founder, and the five safety constraints (read-only first, human-in-the-loop, verification, incremental steps, rollback).
- [Security](https://refactron.dev/security): Privacy practices, encryption, local-first architecture, responsible-disclosure policy.
- [Research](https://refactron.dev/research): The technical paper on deterministic refactoring + behavior-preservation.
omsherikar and others added 12 commits May 12, 2026 01:17
Rebuild the marketing-site visual language around a single
monochrome + CSS-3D isometric system shared across sections.

RefactoringWorkflowSection: merge the pipeline and dependency-graph
panels into one card driven by a shared 4-stage cycle (analyze →
refactor → verify → document). Force-directed canvas graph with
sequential scan, edge probes, sonar sweep, targeting reticle, trail
polyline, and stage-specific overlays (diff text, verify wave +
checkmarks, drifting doc glyphs). Pure white accent only.

WhatWeDoSection: monochrome bento (12 / 7 + 5). Isometric gate
slabs replace the colored verification bars. Mono diff snippet
replaces rose/emerald colored diff. Control flow rebuilt with
isometric step nodes and a dashed rollback hook. New CSS primitives:
RingGauge (conic-gradient dial), RiskMeter (segmented bar),
ChevronArrow + ShieldGlyph (clip-path), FileTab (editor tab).

New sections: ComparisonSection, QuickstartSection,
TestimonialsSection, ResearchPage, NumericAsciiBackdrop.
Refresh AboutPage, Footer, FAQSection, PricingSection.
Remove unused ui/card-swap and ui/safari-mockup.
Tailwind theme tweaks, sitemap + prerender script updates.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…p teal in Testimonials

- ComparisonSection: match the standard card chrome
  (border-white/[0.06] bg-white/[0.012], no shadow, no teal glow),
  add the static dot-grid backdrop, replace Lucide check/X with
  monochrome dot-vs-dash marks, give the Refactron column a
  continuous vertical accent via border-l-white/[0.22].
- QuickstartSection: same chrome alignment, dot-grid backdrop,
  emerald command text -> white, '$' prompt -> faint chevron.
- TestimonialsSection: keep the cream paper inversion as the
  intentional editorial beat; strip the lone teal radial in the
  backdrop and teal chart bars to neutral grays (only color we've
  removed everywhere else on the site).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Hero leads with "Every codebase has code nobody wants to touch"
  (no eyebrow above the headline); a two-line subhead carries the
  promise, signed off with a mono founder signature.

- Founder card restructured so "the moment" (the hackathon scene
  that started Refactron) is the lede, not a buried paragraph.
  Identity block is now two mono fields (role / building); receipts
  row and X + LinkedIn affordances kept.

- Portrait chrome simplified: single ring + soft shadow, no more
  dual outer glow + ring stack.

- Card chrome unified with Workflow / WhatWeDo / Comparison /
  Quickstart: border-white/[0.06] + bg-white/[0.012] + static
  dot-grid backdrop. Dropped panelSurface + panelInnerGlow.

- Severity badges in the health digest stripped of rose/amber/sky
  colors. SeverityTag is a single monochrome chip where dot alpha
  and label brightness encode severity (ERR / WARN / INFO).

- Approach step badges flattened to small rounded squares with
  two-digit padded numbers; ListMarker hairline dash replaces the
  colored check-in-circle bullets.

- "Why I'm Building" rebuilt as a letter close — A LETTER eyebrow,
  short pull-quote with white emphasis on the key phrases, hairline
  rule + mono signature. Dropped the giant decorative quote mark.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The three middle sections were the weakest beat on the page —
each one was a generic card with a text list inside. Replacing
each with a visual register a developer actually recognizes:

- The Problem -> a real terminal-output card. macOS-style dot
  strip, prompt, command, ✓ scanned line, then five log lines
  with bracketed [ERR ] / [WARN] / [INFO] tokens whose
  brightness encodes severity. Footer shows a count breakdown.
  SeverityToken inline component replaces the boxed SeverityTag.

- My Approach -> CI/pipeline visual. Top: a 5-dot horizontal
  overview where dot brightness fades through the pipeline.
  Below: vertical pipeline with a gradient connector line
  threading the step circles, each step as a numbered black
  circle (01..05) with title + detail.

- What Safe Means -> each card now leads with a per-constraint
  SVG diagram (SafetyVisual): READ|WRITE state for 01, the
  PROPOSED -> APPROVED flow with a check for 02, a stacked
  syntax/tests/invariants pass list for 03, five progress nodes
  decreasing in brightness for 04, an UNDO loop arrow from "now"
  back to "prev" for 05. Outcome label is now a chip; outcome
  body bottom-anchored so card heights look planned.

All monochrome. All static after mount. The static dot-grid
backdrop on each card stays.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Hero illustration is now a tactile, dark-glass "REFACTRON ·
ENGINE" tile — built in CSS, not SVG hairlines, so it actually
reads as a piece of hardware rather than a blueprint drawing.

Surface treatment:
  - Aspect-square rounded-[28px] tile, soft top-down satin
    gradient + radial highlight at the top, inset upper rim
    bright + lower rim shadow, large drop shadow underneath
    for elevation. Subtle outer halo (white at very low alpha).
  - A 1px top-edge highlight hairline across the top inside the
    tile sells the "milled edge" look.

Composition inside the tile:
  - Top-right: a small monochrome "R" sigil glyph.
  - Centre: a 9x9 chip-die dot matrix. Dot alpha falls off
    radially from the centre; the centre dot pulses gently
    via a single CSS keyframe (rfn-die-pulse, ~2.6s loop) —
    "powered on" feel. A faint radial halo sits behind the
    matrix.
  - Bottom-left: REFACTRON / ENGINE in mono.
  - Bottom-right: a row of 5 status LEDs; the leftmost shares
    the same pulse animation as the core ("active" state).

Periphery (outside the tile):
  - FIG · 01 at the top-left.
  - DETERMINISTIC · V0.5 at the bottom-right.
  - At xl+, a vertical rail label running down the right edge:
    ANALYZE · REFACTOR · VERIFY · DOCUMENT.

Removed: HeroEngineSchematic + Gear + GearProps (SVG line-art
version). Replaced with HeroChipModule + ChipCoreDie. No iso
primitives. Pure white at varied alpha on near-black surfaces.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replaced the flat-SVG SafetyVisual line drawings with five CSS
glassmorphic widgets — same satin / inset-shadow / soft-glow
language as the hero chip module, scaled down. Each one is a
small "control surface" element with one iconic affordance.

Shared base recipes (defined once, reused per card):
  - glassBase  — neutral satin tile with inset rim shadow.
  - glassActive — brighter top-down gradient, raised rim,
                  outer ambient glow.
  - glassDim   — dim background with dashed border (proposed /
                 inactive state).

01 SafetyReadOnly — two pills: an active READ glass pill (raised,
   glowing dot) and a dim WRITE pill with a horizontal strike
   across it; dashed hairline between them.

02 SafetyApprove — stacked PROPOSED → APPROVED mini-cards.
   PROPOSED uses the dim/dashed glass style. APPROVED uses the
   active/raised glass style and carries a check glyph.

03 SafetyVerify — a tile with three glowing LED rows (syntax /
   tests / invariants), each with a soft white shadow and a
   right-aligned "PASS" tag.

04 SafetyIncremental — five small "key cap" tiles in a row.
   Each has its own subtle satin gradient + rim shadow.
   Active key is brighter with an ambient glow; the rest fade.
   Two-digit padded numbers inside (01..05).

05 SafetyRollback — three round glass buttons in a row over a
   dashed arc trail: a dim "prev" indicator on the left, a large
   central rollback button with a radial-gradient surface and an
   embossed undo arrow, and a glowing "now" indicator on the
   right.

Same monochrome palette. No iso primitives. Pure CSS — no extra
SVG hairline diagrams.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The inline SVG I hand-rolled for the central rollback button was
mis-pathed (the arrow-hook and the arc didn't visually join up,
so it read as a backwards "C" with a stray tick rather than the
universal counter-clockwise undo glyph).

Swapped it for Lucide's `RotateCcw` — the canonical rollback /
undo affordance. Stroke width tuned slightly heavier (1.75) so
it reads cleanly against the dark glass disc.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Built a deliberately beautiful ASCII pattern backdrop and applied
it to the two sections that benefit most from atmospheric mood:
the hero (the first impression) and the "A letter" close (the
emotional payoff).

Implementation:

  - buildAsciiPattern() — deterministic generator. Walks an
    NxM grid of cells; for each, picks SPACE or a character from
    a passed-in charset using a seeded LCG. Per-cell placement
    probability scales with distance from the centre (centerSparsity
    and edgeDensity), so density rises toward the edges and the
    middle stays open.

  - Two patterns are built once at module load:
      ASCII_MIST  — 180x80 grid of punctuation glyphs
                    (· . : , ; - _ = / < > ( ) [ ] { } |)
                    at very low alpha (rgba 0.05).
      ASCII_STARS — same grid dimensions, very sparse,
                    drawn from a brighter charset
                    (0 1 + * ✦ ░ ▒) at higher alpha (0.13).

  - <AsciiBackdrop /> stacks both layers as <pre> blocks with the
    correct font-family, line-height, and letter-spacing. A
    radial-gradient mask fades both layers toward a configurable
    centre point (maskAt prop) so foreground text stays crisp.
    A single CSS keyframe (rfn-ascii-breath, 9s ease-in-out) lifts
    the opacity slightly; the two layers run with offset delays so
    they never breathe in lockstep.

Placement:
  - Hero  — maskAt="32% 50%" so the soft centre falls under the
            headline column on the left, ASCII fills the right.
  - "Why I'm building" letter card — maskAt="35% 55%", same idea,
            ASCII surrounds the letter text without smothering it.

DotGridBackdrop is still the default everywhere else. Pure CSS,
no SVG, no canvas, no runtime regeneration after mount.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…section

Built a second ASCII backdrop that's figurative rather than
ambient scatter — two tapering "arm" silhouettes that sweep in
from opposite corners and almost touch in the centre (the
Creation-of-Adam composition, the spark gap left intact).

Generator (deterministic, module-level):

  HandBlade type — origin (ax,ay), tip (bx,by), thickStart,
                   thickEnd. Coordinates are in screen units;
                   y is multiplied by 2 at sample time to
                   compensate for monospace char aspect.

  HAND_BLADES — two blades:
    1) ax=-8, ay=78  → bx=78, by=46  (left arm, lower-left ⇒
       fingertip just left of centre)
    2) ax=168, ay=22 → bx=84, by=50  (right arm, upper-right ⇒
       fingertip just right of centre)
    Both taper from thickStart=9.5 at the wrist to thickEnd=0.6
    at the fingertip.

  bladeSD(c, r, b) — signed distance from (c, r*2) to the blade's
                     spine minus its lerped thickness. Negative
                     inside the blade, positive outside.

  For each cell I take the min SD over the two blades and bin it
  into a density palette:
      sd < -4   → ▓ (deep inside)
      sd < -2   → ▓/▒ random (transition band)
      sd < -0.5 → ▒
      sd < 0.4  → ░ (edge)
      sd < 1.5  → · or space (stray fringe)
      else      → space

  Final pattern is 160 cols × 48 rows, baked once into
  HANDS_PATTERN. The seeded LCG keeps it stable across renders.

<HandsAsciiBackdrop /> renders the pattern as a single <pre>
(font-size 13px, line-height 1.05, letter-spacing 0.06em, alpha
0.075). Radial mask peaks at the middle and fades to transparent
at the corners so it never fights with sectionFades.

Placed on the Founder + Origin Story section — the "hands
reaching, almost touching" metaphor lands well alongside the
hackathon-moment narrative without needing explanation.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ll.txt

LLM/GenAI discoverability infrastructure. Three concrete changes:

- public/robots.txt: add an explicit AI-crawler block at the top
  of the file, ahead of the existing search-engine rules. Two
  groups, both with Allow: /
    • Retrieval bots (live AI search): OAI-SearchBot, ChatGPT-User,
      Claude-SearchBot, Claude-Web, PerplexityBot, Perplexity-User,
      Applebot-Extended, YouBot.
    • Training bots (long-term LLM memory): GPTBot, ClaudeBot,
      anthropic-ai, Google-Extended, Meta-ExternalAgent, CCBot,
      Bytespider, cohere-ai, cohere-training-data-crawler, Diffbot,
      FacebookBot.
  Refactron's goal is to be both indexed for live AI answers AND
  remembered in foundation models, so both groups are explicitly
  allowed (no more commented-out / allowed-by-default ambiguity).
  Also added Sitemap: line for /llms.txt alongside /sitemap.xml.

- public/llms.txt: new, hand-curated markdown site map per the
  llmstxt.org spec — H1 + blockquote positioning + Docs/Examples/
  Optional sections. Read by AI IDEs (Cursor, Claude Code, Windsurf)
  when a user points them at refactron.dev, and increasingly by AI
  search retrievers.

- public/llms-full.txt: new, auto-generated full LLM-ingestion doc.
  Concatenates (a) curated product overview + safety constraints +
  comparison table, (b) the origin story, (c) all FAQs from
  FAQSection.tsx, (d) every blog post (title + summary + full body)
  from posts.ts. ~56 KB, 872 lines, regenerates on every build.

- scripts/generate-llms-full.js: the generator. Mirrors the
  pattern of scripts/generate-sitemap.js — regex parsing of
  posts.ts and FAQSection.tsx, no ts-node required.

- package.json: prebuild now runs sitemap + llms-full back-to-back
  so the two stay in sync on every build.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…Application schema

LLM-targeted copy and structured data updates on the landing page.

Meta:
  - <meta name="description"> rewritten to lead with the phrases
    LLM users actually search for: "deterministic", "behavior-
    preserving", "no LLM in the loop", "verified before every
    write", "runs locally". ≤160 chars.
  - <meta name="keywords"> expanded to cover the high-intent LLM
    query phrases: "deterministic refactoring",
    "no-LLM code refactoring tool", "behavior-preserving",
    "legacy code modernization", "local-first developer tools".
  - og:description and twitter:description mirror the new meta
    description (same primary positioning across SERP previews).

Structured data (script type=application/ld+json):
  - SoftwareApplication: programmingLanguage promoted to an array
    (Python, TypeScript, JavaScript), softwareVersion added,
    free-tier Offer added, and a featureList of the seven core
    capabilities — each phrased as a fact AI assistants can quote.
  - NEW FAQPage block sourced from the six entries in
    src/components/FAQSection.tsx (does Refactron change code
    automatically / how is it safe / production-ready / where
    does code go / supported languages / open-source). FAQPage
    is the single highest-impact JSON-LD type for AI-assistant
    quoting in 2026.

application/ld+json blocks now = 4 (Organization, WebSite,
SoftwareApplication, FAQPage). Pre-render integrity preserved.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ders

BlogPostPage:
  - Wired the existing useSEO hook so each post page sets its own
    <title>, meta description, keywords, canonical, og:title/desc,
    and twitter:title/desc from the matched post data. Falls back
    to a neutral "Post not found" set when slug doesn't resolve.
  - New useBlogPostingSchema hook: on mount it injects a
    <script type="application/ld+json"> BlogPosting block into
    <head> with headline, description, datePublished (ISO),
    author (Person with profile link), publisher (Organization
    with logo), mainEntityOfPage, url, keywords, inLanguage.
    Removes the script on unmount so navigation between posts
    keeps exactly one BlogPosting block live.

vercel.json:
  - New header rules for /llms.txt and /llms-full.txt mirroring
    the /sitemap.xml config:
      Content-Type: text/markdown; charset=utf-8
      Cache-Control: public, max-age=86400, stale-while-revalidate=43200
      X-Robots-Tag: all
    The X-Robots-Tag is the explicit signal to retrieval bots that
    these files are fair game.

End-to-end result: every blog post now ships with rich Article-
level structured data; both LLM index files are served with the
correct content type and a 24h cache.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@omsherikar omsherikar force-pushed the feat/marketing-redesign-and-llm-seo branch from 59a9566 to 0983448 Compare May 11, 2026 19:49
@omsherikar omsherikar merged commit 619d241 into main May 11, 2026
12 of 13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file style type:feature New feature type:refactor Code refactoring

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants