From 4b2a581df27ba86e8a191f3253ae5d0dd28fee1a Mon Sep 17 00:00:00 2001 From: omsherikar Date: Mon, 18 May 2026 16:14:32 +0530 Subject: [PATCH 1/2] fix(testimonials): convert to a dark section with soft edges MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Testimonials section was light (#f3f3f2) sitting between black sections, with four from-black edge gradients darkening its edges — it looked off. - Convert to a charcoal dark section (#161618): recolor heading/subtext to light, flip the grid lines + vignettes to a light tint so they stay visible, update the marquee fade masks to the new bg. White cards kept. - Replace the four hard from-black edge gradients with two soft top/ bottom fades at z-[5] (under the content) that blend the section into the neighbouring black sections without darkening the heading or cards. --- src/components/TestimonialsSection.tsx | 31 +++++++++++--------------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/src/components/TestimonialsSection.tsx b/src/components/TestimonialsSection.tsx index 23b8eb9..27c33a5 100644 --- a/src/components/TestimonialsSection.tsx +++ b/src/components/TestimonialsSection.tsx @@ -216,11 +216,11 @@ function TestimonialMarqueeColumn({ return (
@@ -249,31 +249,26 @@ const TestimonialsSection: React.FC = () => { return (
{/* Minimal editorial backdrop — fine grid + a soft neutral vignette */}
-
-
-
+
+
+
+ {/* Soft edge fades — blend the section into the black sections above and + below. z-[5] keeps them under the content (z-10) so only the + background edge softens, never the heading or cards. */}
-
-
@@ -286,11 +281,11 @@ const TestimonialsSection: React.FC = () => { >

Builders love Refactron.

-

+

And they can't stop talking about safer refactors and boring, reviewable diffs.

From aad0de245ddf439e01125fcb633a14a7b3acf0d2 Mon Sep 17 00:00:00 2001 From: omsherikar Date: Mon, 18 May 2026 16:40:47 +0530 Subject: [PATCH 2/2] feat(changelog): refresh CLI + web changelogs, Mintlify-style timeline MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - CLI changelog: add the v2.0 releases (0.2.0 / 0.2.1 / 0.2.2). 0.2.0 is marked with a new `pivot` tag — it explains the reset from the legacy 1.x Python tool to the deterministic v2.0 rebuild. - Web changelog: add web-1.2.0 / 1.3.0 / 1.4.0 from the commit history since web-1.1.0 (status page + changelog tabs, blog launch, marketing redesign + research). - Redesign the changelog page as a vertical timeline (Mintlify-style): sticky version label on the left rail, a node on the connecting line, release content to the right. The pivot entry gets a rose-tinted node. --- src/components/Changelog.tsx | 221 ++++++++++++++++++++--------------- src/data/changelog.ts | 164 +++++++++++++++++++++++++- src/data/webChangelog.ts | 104 +++++++++++++++++ 3 files changed, 391 insertions(+), 98 deletions(-) diff --git a/src/components/Changelog.tsx b/src/components/Changelog.tsx index c66f9bf..73e1e36 100644 --- a/src/components/Changelog.tsx +++ b/src/components/Changelog.tsx @@ -10,6 +10,7 @@ const tagStyles: Record = { improvement: 'border-blue-500/30 bg-blue-500/[0.08] text-blue-400', fix: 'border-amber-500/30 bg-amber-500/[0.08] text-amber-400', beta: 'border-purple-500/30 bg-purple-500/[0.08] text-purple-400', + pivot: 'border-rose-500/40 bg-rose-500/[0.10] text-rose-300', }; const sectionDotColor: Record = { @@ -18,7 +19,18 @@ const sectionDotColor: Record = { fix: 'bg-amber-400', }; -function EntryCard({ entry, index }: { entry: ChangelogEntry; index: number }) { +/** + * One changelog release, laid out as a vertical timeline row — Mintlify-style: + * a sticky version label on the left rail, a node on the connecting line, and + * the release content to the right. + */ +function TimelineEntry({ + entry, + index, +}: { + entry: ChangelogEntry; + index: number; +}) { const [expandedSections, setExpandedSections] = useState< Record >({}); @@ -27,112 +39,127 @@ function EntryCard({ entry, index }: { entry: ChangelogEntry; index: number }) { setExpandedSections(prev => ({ ...prev, [i]: !prev[i] })); }; + const isPivot = entry.tag === 'pivot'; + return ( - {/* Card header */} -
-
- - {entry.version} - - · - - {entry.date} - - {entry.tag && ( - - {entry.tag} - - )} + {/* Left rail — version, date, tag (sticky on desktop) */} +
+
+ {entry.version}
-

- {entry.title} -

+
+ {entry.date} +
+ {entry.tag && ( + + {entry.tag} + + )}
- {/* Sections */} -
- {entry.sections.map((section, si) => { - const isCollapsible = section.collapsible; - const isExpanded = expandedSections[si] ?? false; + {/* Connecting line + node + release content */} +
+ + +

+ {entry.title} +

- return ( -
- {isCollapsible ? ( - /* Collapsible section */ -
- +
+ {entry.sections.map((section, si) => { + const isCollapsible = section.collapsible; + const isExpanded = expandedSections[si] ?? false; - {isExpanded && ( - + {isCollapsible ? ( + /* Collapsible section */ +
+ + + {isExpanded && ( + + {section.items.map((item, ii) => ( +

+ + {item.label}: + {' '} + {item.description} +

+ ))} +
+ )} +
+ ) : ( + /* Normal section */ +
+
+ +

+ {section.label} +

+
+
    {section.items.map((item, ii) => ( -

    - - {item.label}: - {' '} - {item.description} -

    +
  • + +

    + + {item.label}: + {' '} + {item.description} +

    +
  • ))} - - )} -
- ) : ( - /* Normal section */ -
-
- -

- {section.label} -

+
-
    - {section.items.map((item, ii) => ( -
  • - -

    - - {item.label}: - {' '} - {item.description} -

    -
  • - ))} -
-
- )} -
- ); - })} + )} +
+ ); + })} +
); @@ -222,7 +249,7 @@ const Changelog: React.FC = () => { initial={{ opacity: 0, y: 12 }} animate={{ opacity: 1, y: 0 }} transition={{ duration: 0.4, delay: 0.1 }} - className="flex gap-1 mb-10 p-1 rounded-xl bg-white/[0.04] border border-white/[0.08] w-fit" + className="flex gap-1 mb-12 p-1 rounded-xl bg-white/[0.04] border border-white/[0.08] w-fit" > {(['web', 'cli'] as Tab[]).map(t => (