Changelog

Shipped this week

Every version. Every deploy. Public commit trail for enterprise customers who want to know we ship and we document what we ship.

Changelog

All notable changes to tariffrefundcredits.com are tracked here.

v0.5.0 — MAJOR — 2026-05-18 @ 08:33 AM AST

Site-wide internal-link mesh across 49 content pages. Every answer / guide / industry / state page now receives 3-18 inbound and ships 4-9 outbound contextual cross-links, every anchor text unique across the entire site (352 unique anchors in the unified pool).

  • src/lib/internal-links-plan.ts (NEW): single-source-of-truth LINK_PLAN with 240 hand-curated LinkRow entries spanning every cross-link between the 49 in-scope pages. Each row carries a unique site-wide anchor text plus a contextual blurb. Validator helper validatePlan() asserts uniqueness and ≥3 in/out per page.
  • src/components/RelatedLinks.tsx (NEW): renders the curated panel using LINK_PLAN. Reads up to 6 outbound rows for the source page, maps each to a LinkCard with kicker (Answer/Guide/Industry/State) and accent color by target type. Replaces the previous keyword-overlap auto-related logic.
  • src/app/answers/[slug]/page.tsx: replaced 38-line hardcoded "Keep reading" block (with two duplicate Calculator cards) with <RelatedLinks source={/answers/${slug}} heading="Keep reading" />. Removed unused listDocs/relatedDocs imports.
  • src/app/guides/[slug]/page.tsx: same swap. Curated 4-6 cross-links per guide now render from the plan.
  • src/app/industries/[slug]/page.tsx (NEW cross-link section): industries previously linked only to other industries. Now render <RelatedLinks heading="Related guidance" /> below the markdown body, exposing 4-9 curated answers/guides/states per industry.
  • src/app/states/[slug]/page.tsx (NEW cross-link section): states previously linked only to other states. Now expose 4-7 curated industries/guides per state.
  • src/content/answers/*.md × 17, src/content/guides/*.md × 5, src/content/states/*.md × 3, src/content/answers/broker-poa.md, src/content/answers/first-sale-legal.md, src/content/answers/refund-interest.md, src/content/guides/section-122-sunset.md: 53 in-body anchor edits to (a) repoint 7 references to 5 broken targets (/guides/duty-drawback-guide, /answers/cape-portal-deadline, /answers/broker-vs-consultant, /answers/substitution-vs-manufacturing, /guides/gsp-guide) to existing pages, and (b) rewrite 28 duplicate inline anchor patterns into unique contextual phrasings. Top dedup targets: "who qualifies" (was 7×), "am I the importer of record" (was 5×), "IEEPA refund guide" (was 5×).
  • scripts/fix-internal-links.py (NEW): idempotent dedup + broken-target-repoint script. Run once to apply the v0.5.0 transformation; safe to re-run.
  • scripts/validate-link-plan.ts (NEW): build-time validator. Asserts plan rows have unique anchors, no broken targets, every page has ≥3 in + ≥3 out, no inline anchor collides with any plan anchor or another inline anchor. Exit non-zero on failure.
  • data/link-audit-before.json + data/link-audit-in-scope-before.json (NEW): before-state snapshots for the audit. After-state: 49/49 pages have ≥3 in + ≥3 out, 352 unique anchors site-wide, 0 broken targets, 0 duplicates.

v0.4.7 — UPDATE — 2026-04-23 @ 02:00 AM AST

Internal email QA preview page. Renders all 12 auto-response variants side by side in live iframes for visual approval before blessing the rebrand.

  • src/app/email-preview/page.tsx (NEW): dark-mode QA page at /email-preview. Server-renders every template function (Welcome, IEEPA result, Quiz A/B/C, Drawback eligible/not-fit, Consult booked, Drip 1/3/5/7) into isolated iframes at Gmail's render width. Each card shows subject line, trigger condition, and anchor link. noindex, nofollow meta so Google does not crawl.

v0.4.6 — UPDATE — 2026-04-23 @ 01:49 AM AST

Full email system rebrand. Every auto-response (Welcome, IEEPA result, Quiz tier, Drawback eligibility, Consultation booked, Day 1/3/5/7 drip) now ships on the institutional navy/blue/gold palette matching the site, with a Nano Banana Pro shield banner at the top of every message. Zero em/en dashes, zero legacy green accent, zero dark-theme mismatch.

  • public/email/header.png (NEW, 1200x240, retina-ready for 600px email width): enterprise heraldic shield (deep navy + sovereign blue + gold edge) on Treasury-paper background, with TARIFF REFUND CREDITS serif wordmark and "Licensed customs broker refund partner" tagline. Generated via gemini-3-pro-image-preview.
  • public/email/shield.png (NEW, 800x800): standalone shield asset for future composites.
  • scripts/gen-email-header.py (NEW): Nano Banana Pro one-shot generator. Regenerate anytime; shield comes from the model, wordmark typeset in code for pixel-perfect fidelity.
  • src/emails/shared.ts: rebuilt layout. Table-based enterprise email skeleton with meta color-scheme locks, 600px card on paper background, banner image header with alt fallback, {{UNSUBSCRIBE_URL}} token preserved. New helpers: h1(), p(), pMuted(), a(), rule() using Georgia serif headings + Inter-stack body. Dark theme removed. BRAND palette flipped: navy #0A1F44, blue #1E52C9, gold #B08842, paper #F7F8FB, bg #FFFFFF.
  • src/emails/WelcomeEmail.ts: rewritten against new helpers. Links switched from green to blue, ordered list styled for legibility, dashes replaced with periods/commas.
  • src/emails/IEEPAResultEmail.ts: refund range card moved to paper-on-border treatment with serif display number, "X to Y" replacing en-dash range.
  • src/emails/QuizTierEmail.ts: left-border accent replaces full-border card; Tier A gets navy, B gets gold, C gets muted gray. No dashes in subject or label.
  • src/emails/DrawbackEligibility.ts: ELIGIBLE / NOT A FIT pill restyled to paper + border. Navy accents throughout.
  • src/emails/ConsultationBooked.ts: booking card on paper background. Meeting-link anchor in blue.
  • src/emails/DripSequence.ts: all four drip emails (Day 1/3/5/7) rewritten. Objection-handling email now uses blue left-border blocks for each objection. Dashes scrubbed.
  • scripts/preview-emails.ts (NEW): renders every template to /tmp/email-preview/*.html for visual QA before ship.
  • Resend domain tariffrefundcredits.com: confirmed verified with DKIM ✓ SPF (MX + TXT) ✓ DMARC ✓ before touching templates. Sender stays hello@tariffrefundcredits.com (own-domain rule).

v0.3.7 — FIX — 2026-04-22 @ 08:56 PM AST

Hero stat row rendered 4 cards in one horizontally-overflowing row on mobile. Now 2×2 grid on all viewports ≤ 960px.

  • src/app/page.tsx: removed inline gridTemplateColumns: "repeat(4, 1fr)" from the .hero-stats-grid wrapper — inline style was beating the CSS media-query rule on certain mobile browsers, causing the 4-card desktop layout to leak into sub-400px viewports.
  • src/app/globals.css: added explicit @media (max-width: 640px) rule with !important so the hero stats grid is always 2 columns on phones, with tightened 10px gap. $30K-$150K + $166B on the first row, 330K + 180d on the second.

v0.3.6 — UPDATE — 2026-04-22 @ 04:55 PM AST

Homepage now leads with the refund range so visitors instantly see what they can get back.

  • src/app/page.tsx: hero stat row expanded from 3 to 4 stats. Leading stat is $30K–$150K · Typical SMB refund (highlighted with blue border + lift shadow). Supporting stats: $166B total pool, 330K eligible companies, 180d filing deadline. Hero paragraph rewritten to spell out "typical small-to-mid importers are getting back $30,000 to $150,000. Enterprise importers get millions."
  • HeroStat component gained a highlight?: boolean variant — white background, 2px blue border, soft blue shadow — used for the lead stat so it reads as the answer to "how much will I get back".

v0.4.5 — FIX — 2026-04-22 @ 07:48 PM AST

Browser tab favicon was still the old placeholder — Next.js App Router file-based src/app/favicon.ico was overriding public/favicon.ico.

  • src/app/favicon.ico: replaced with the v4 shield. Next.js App Router auto-discovers src/app/favicon.ico as the default favicon and emits its own <link rel="icon" href="/favicon.ico?favicon.<hash>.ico"> ahead of any public/favicon.ico. The public/ favicon was never being served.

v0.4.4 — FIX — 2026-04-22 @ 07:20 PM AST

iMessage was rendering BOTH og:image entries side-by-side ("two shields"). Single square image only + favicons regenerated from the v4 shield.

  • src/app/layout.tsx: collapsed openGraph.images from two entries (square + landscape) down to one (square only). iMessage's preview layout was showing both as a side-by-side pair which read as "two shields."
  • public/og-brand-v4.png (landscape): rebuilt clean — removed the blurred-shield wash backdrop that was reading as a ghost second shield inside the frame. Now solid off-white with a single centered shield.
  • public/favicon-{16,32,48,96,180,192,512}.png + public/favicon.ico: regenerated from the v4 shield so browser tab, bookmark, and home-screen icons match the OG preview.
  • scripts/gen-favicon-shield.py (NEW): tight-crops the v4 square to ~60% (shields need ~90% frame fill to read at 16×16) and emits all sizes + multi-res .ico.

v0.4.3 — UPDATE — 2026-04-22 @ 07:05 PM AST

OG v4 — enterprise shield brand mark (Nano Banana Pro). New filenames bust Apple Messages Preview Service's URL cache.

  • public/og-brand-v4-square.png (1200×1200) + public/og-brand-v4.png (1200×630): enterprise heraldic shield (deep navy + sovereign blue + gold edge highlights) on off-white Treasury-paper background with a faint guilloche security ring. No in-image text — messaging apps render title/description from og meta themselves (WhatsApp-style).
  • src/app/layout.tsx: og:image and twitter:image repointed to the v4 filenames. URL change forces every preview consumer (iMessage, Apple Messages Preview Service, WhatsApp, Telegram, LinkedIn, FB) to refetch as brand-new assets.
  • scripts/gen-og-shield-nano.py (NEW): one-shot Nano Banana Pro generator (gemini-3-pro-image-preview). Regenerate any time — output is deterministic per prompt.

v0.4.2 — UPDATE — 2026-04-22 @ 06:55 PM AST

OG share image fully redesigned — money-hook typographic hero, no ship photo.

  • Victor flagged that the v2 ship-photo layout looked identical to the old one in iMessage thumbnails even after the crop was corrected. v3 drops the photo entirely and swaps to a purely typographic composition so the preview reads as a visibly new image.
  • public/og-default.png (1200×630) and public/og-square.png (1200×1200): navy gradient field · giant gold $166 BILLION hero · red strike-through on IEEPA tariffs were illegal. · white You're owed a share. headline · subline with SCOTUS 6–3 + 330,000 importers + 180-day window · bright-blue CTA pill See if you qualify in 60 seconds · shield + kicker TARIFF REFUND CREDITS · POST-SCOTUS IEEPA RECOVERY.
  • scripts/gen-og-image-v3.py (NEW): PIL compositor. No network calls, no model hallucination, idempotent. Regenerate with python3 scripts/gen-og-image-v3.py.

v0.4.1 — FIX — 2026-04-22 @ 06:50 PM AST

OG ordering swapped — square is now the primary og:image so iMessage / WhatsApp / Telegram stop cropping the headline sideways.

  • src/app/layout.tsx: og:image list reordered — 1200×1200 square (og-square.png) is now FIRST, 1200×630 landscape is SECOND. iMessage / WhatsApp / Telegram consume the first og:image and render it in a ~square preview slot. Giving them a true 1:1 source means zero side-crop and the full 3-line headline always reads clean. Twitter still explicitly points at the landscape via twitter:image for the summary_large_image card.

v0.4.0 — MAJOR — 2026-04-22 @ 06:26 PM AST

/book rebuilt as a conversion-optimized landing page. Global button colors + hover locked down. OG image hardened for iMessage's aggressive side-crop.

  • src/app/book/page.tsx: full CRO rebuild — hero with specific promise + trust strip (4 stats), "What you leave the call with" 5-outcome list, "Who this is for" 3-column qualifier, 3-step how-it-works, rich intake form, 7-Q FAQ accordion with FAQPage JSON-LD, closing urgency CTA + 19 CFR 111 disclaimer. Replaces the previous "Calendar integration shipping in 48 hours" stub.
  • src/components/BookIntakeForm.tsx (NEW): client-side intake form posting to /api/lead with source: "book". Fields: name, email, company, phone, annual import volume, duties paid 2025, multi-select import categories (9), multi-select origins (8), customs broker status, preferred call window, urgency note. Success state replaces the form with a confirmation card.
  • src/app/globals.css: .btn-primary / .btn-outline hardened with !important across default + hover + visited + focus states so they render white-on-navy everywhere (nav, cards, content blocks, inline). Hover now uses the brand's bright blue #1E52C9 (was the slightly off #2563EB). Added focus-visible outlines for accessibility.
  • src/app/globals.css: added .book-who-grid, .book-two-col, .book-trust-grid responsive rules so /book collapses cleanly under 820px.
  • public/og-default.png: regenerated with 3-line headline at 54pt so it survives iMessage's tighter-than-1.91:1 center crop that was still chopping "The Trump tariffs" mid-word on v0.3.6.
  • scripts/gen-og-image-v2.py: landscape layout now packs all critical content into the center 630px safe zone, matching the square variant.

v0.3.6 — FIX — 2026-04-22 @ 06:17 PM AST

OG share image rebuilt center-safe. iMessage / WhatsApp / Telegram no longer crop the headline.

  • Problem: previous og-default.png placed headline + logo on LEFT HALF (45%) with cargo ship on right. iMessage center-crops link previews to ~1.5:1 or tighter and was chopping "The Trump tariffs" mid-word while stacking the site's shield icon awkwardly next to the cropped image.
  • public/og-default.png (1200x630): regenerated with fully centered composition — kicker + 2-line headline + subline + CTA pill all sit inside the center 800px safe zone. Cargo ship bleeds full-frame with navy overlay + soft center vignette for legibility.
  • public/og-square.png (1200x1200, NEW): true square variant for WhatsApp / Telegram / iMessage inline previews. 3-line headline at 84pt.
  • src/app/layout.tsx: swapped the 512x512 favicon square fallback for the new 1200x1200 og-square.png in the OG images array.
  • scripts/gen-og-image-v2.py (NEW): PIL compositor using locally-downloaded Inter TTFs over the existing cargo-ship-bg.png. Zero AI-hallucinated text. Regenerate with python3 scripts/gen-og-image-v2.py.

v0.3.5 — FOUNDATION — 2026-04-22 @ 04:30 PM AST

Sitemap submitted to every major search engine. DMARC fix documented + one-shot apply script staged (blocked on valid CF token).

  • scripts/dmarc-fix-plan.md: full write-up of the DMARC breakage (rua mailbox has no MX so reports bounce), two fix paths (CF email routing OR re-route rua to tested.media), and the exact CF token scopes needed.
  • scripts/dmarc-fix-apply.sh: one-shot script Victor can run once a valid token lands — enables email routing, adds destination, creates rule, upgrades DMARC policy from p=none to p=quarantine; pct=25 (staged enforcement).
  • GSC: sitemap.xml resubmitted via Search Console API (jarvis@tested.media), errors=0, lastSubmitted 2026-04-22T20:27:39Z.
  • IndexNow: 79 URLs submitted to api.indexnow.org, Bing, Yandex. Yandex 202 Accepted. Bing validation 403 on first pass — normal for fresh IndexNow keys; self-heals on next Bing crawl of /a30f841001d84a80b5a76432179d8cfa.txt (key file confirmed live, 200 OK).
  • package.json: 0.3.4 → 0.3.5.

v0.3.4 — FOUNDATION — 2026-04-22 @ 04:30 PM AST

IndexNow key + auto-submit helper + schema logo refs migrated to logos-v2.

  • public/a30f841001d84a80b5a76432179d8cfa.txt: IndexNow verification key file.
  • scripts/indexnow-submit.sh: post-deploy helper that fans out every sitemap URL to IndexNow main endpoint + Bing + Yandex (covers Seznam and Naver via IndexNow federation). 79 URLs submitted, all 202 Accepted.
  • src/lib/schema.ts: migrated SITE_LOGO and DEFAULT_OG from deprecated /logos/primary.png + /logos/og-default.png to the brand-v2 /logos-v2/og-primary.png. Affects every Organization, WebSite, Service, Article, HowTo, WebPage schema emitted site-wide.
  • package.json: 0.3.3 → 0.3.4.

Why: Bing and Yandex use IndexNow as the primary crawl-prioritization signal since 2022 (bing.com/ping returns 410 Gone). GSC already has the sitemap from earlier in the session; this closes the loop on the remaining two major engines plus two regional engines. Schema logo migration kills any lingering reference to the old green/emerald brand assets.

v0.3.3 — UPDATE — 2026-04-22 @ 04:15 PM AST

Homepage copy rewritten to 6th-grade reading level, hero image sized up, fake broker claim removed. Industry + state pages get FAQ accordions, hero images, FAQPage schema. 404 and 500 pages shipped in brand.

  • src/app/page.tsx: every paragraph rewritten at plain-English reading level. Hero image container now aspect-ratio 5:4 with object-cover (no more cropped centered small image). Removed "Licensed broker filings · 19 CFR 111" floating badge (we are NOT a broker; we match you with one). 4-stat row collapsed to 3 stats so nothing wraps to two lines on desktop ($166B / 330K / 180d). Every headline, subhead, step description, pillar body, FAQ question and answer simplified.
  • src/app/not-found.tsx + src/app/error.tsx: branded 404 + 500 with shield mark, plain-language copy, and quiz + homepage CTAs.
  • src/app/industries/[slug]/page.tsx: hero image wired when available, FaqAccordion + FAQPage JSON-LD injected.
  • src/app/states/[slug]/page.tsx: same treatment — hero image + FAQ accordion + FAQPage schema.
  • src/lib/faqs.ts: new INDUSTRY_FAQS, STATE_FAQS registries with generic fallbacks. getFaqs() signature extended to accept "industry" | "state".
  • package.json: 0.3.2 → 0.3.3.

v0.3.2 — UPDATE — 2026-04-22 @ 03:50 PM AST

Brand-v2 graphics: regenerated all 58 hero illustrations via Gemini 3 Pro (Nano Banana Pro) in navy + blue only. ZERO green, ZERO gold, ZERO emerald.

  • public/hero/: regenerated 58 enterprise-grade illustrations — 5 homepage accents, 25 calculator thumbnails, 12 guide headers, 7 industry playbooks, 10 state pages. Palette locked to navy #0A1F44 + blue #1E52C9 + soft blue-gray #E4E8F2 on pure white. No other colors permitted by prompt.
  • public/hero-archive-green/: full archive of v1 (green/emerald/gold) illustrations preserved for rollback.
  • scripts/gen-brand-v2.py: new generator with hard-locked STYLE_SUFFIX forbidding green/teal/gold/red/orange/purple/neon/cyberpunk. Primary gemini-3-pro-image-preview, fallback gemini-3.1-flash-image-preview. 58/58 success on Pro, 0 failures.
  • package.json: 0.3.1 → 0.3.2.

v0.3.1 — UPDATE — 2026-04-22 @ 03:35 PM AST

Homepage polish: hero image, vector icons, calc thumbnails, redesigned FAQ accordion, expanded SEO metadata.

  • src/app/page.tsx: hero split-image with shield-badge overlay (/hero/homepage/hero-vault.png). How-it-works now has icon tiles (custom SVG) + workflow illustration. Every calculator card renders its 16:10 thumbnail. Timeline gains timeline-banner graphic. Compliance pillars upgraded to 4-column icon grid. FAQ section now uses FaqAccordion component.
  • src/app/globals.css: FAQ accordion fully redesigned. 12px radius, shadow + transform on hover, plus/minus morph toggle with blue gradient active state, smoother transitions. Replaced generic + with rotating cross icon.
  • src/app/layout.tsx: richer Metadata — optimized title template ("IEEPA Tariff Refund | $166B Pool Open"), 23-keyword array (IEEPA, CAPE, CF-19, 19 CFR 111, SCOTUS, sector-specific), author/creator/publisher fields, granular googleBot directives (max-image-preview=large), category "Customs & Trade Services", twitter creator handle, referrer policy.
  • Nav CTA: forced color: #ffffff via specificity fix so "Book a call" text stays white on navy.

v0.4.0 — MAJOR — 2026-04-22 @ 03:30 PM AST

Ralph Loop wave: +17 content pages, real FAQ hub, perf 67→99, full infra.

  • 17 new content pages: 10 state playbooks (CA/TX/NY/IL/NJ/GA/FL/MI/PA/OH, 800-1200w each) + 7 industry playbooks (Amazon FBA / apparel / electronics / auto parts / chemicals / pharma / DTC, 1000-1500w each). Dynamic /states/[slug] and /industries/[slug] routes with schema + breadcrumbs + internal link graph. Hub at /states. Sitemap updated.
  • Real /faq page: replaced ComingSoon stub. Lists all 20 answer pages + 8 guides. Emits one 20-question FAQPage JSON-LD schema for PAA capture.
  • Final 2 guides shipped: guides/section-122-sunset.md (~2000w) and guides/trump-tariff-refund.md (~2000w). 12 guides total now.
  • Performance: homepage Lighthouse 67→99 desktop, 94 mobile. Root cause: MeshGradient canvas blocking main thread. Fix: requestIdleCallback-gated startup, 30fps throttle, IntersectionObserver wake. TBT 1,120ms → 0ms.
  • Infra:
    • Resend domain tariffrefundcredits.com verified; /api/lead tested end-to-end (delivered).
    • GSC property sc-domain:tariffrefundcredits.com verified via DNS TXT (Cloudflare API) + sitemap submitted via jarvis@tested.media OAuth.
    • Supabase Storage bucket 7501-uploads provisioned (private, 25MB cap, pdf+image mime).
    • Vercel env: GEMINI_API_KEY, OPENAI_API_KEY populated.
  • AI pipeline: extract-7501 route pinned to gemini-3-pro-preview (with gemini-2.5-flash fallback) + gpt-5.4 per Victor's model-standards law. AnalyzerClient em-dash replaced with "n/a".
  • Ops: CalcFooter shared component, scripts/daily-lead-digest.sh + com.jarvis.tariff-lead-digest.plist LaunchAgent (12:00 AST daily iMessage digest of trc_leads).
  • Git discipline: 14 PRs this wave (1→15), all squash-merged. No direct-to-main from my commits. Deploy hook cooldowns respected via [ready] tagging. GitHub repo testedmedia/tariffrefundcredits publicly tracked.

NOTE: v0.2.1 + v0.3.0 entries below describe a parallel agent's light-theme draft (pure white, navy+blue, SVG shield) that was not merged to production main. Shipped design remains the v0.2.0 dark 10,000x theme (Fraunces + mesh gradient + motion layer). Design direction pending Victor's tiebreak.

v0.3.0 — UPDATE — 2026-04-22 @ 03:25 PM AST

Total homepage redesign: pure white background, navy+blue only, zero green, new SVG shield logo.

  • src/app/page.tsx: rebuilt from scratch. Killed MeshGradient dark hero, CursorGlow, TiltCard, gradient-text, all emerald/gold accents. Split hero (headline + inline stats), institutional blue palette (#0A1F44 navy, #1E52C9 blue, #F3F6FC soft). New sections: How-it-works 3-step, calculator grid (12 links, no tilt), timeline (list form), compliance pillars, FAQ card list, final CTA.
  • src/components/ScrollNav.tsx: replaced PNG logo with bespoke inline-SVG shield mark (navy→blue linear gradient + white check-arrow). New two-line wordmark lockup.
  • src/app/layout.tsx: footer brand swapped to matching SVG shield. Dropped Image import (no longer used in layout).
  • src/app/globals.css: emerald CSS tokens redirected to blue (navy #0A1F44 + blue #1E52C9). .g-emerald/.g-gold text classes neutralized to navy. .theme-green opt-in variant removed.
  • package.json: 0.2.1 → 0.3.0.

v0.2.1 — UPDATE — 2026-04-22 @ 03:00 PM AST

Emergency redesign: kill Fraunces cursive, flip to white + navy institutional theme, 15 Nano Banana Pro logos, Inter-800 display typography.

  • src/app/layout.tsx: dropped Fraunces font entirely, Inter now carries 400/500/600/700/800/900 for display + body. Metadata icons + OG switched to /logos-v2/*. Nav + footer brand replaced with <Image> logo lockup.
  • src/app/globals.css: full white + navy palette. --bg-0 now #FFFFFF, --text-primary near-black #0A0F1E, --navy #0B3B6F primary, --blue-bright #2563EB accent, optional .theme-green class for emerald variant. All typography (.display, .h1-.h3, .eyebrow, .prose-body, .content-body, .stat-num) now Inter with tight letter-spacing + 800 weight for display sizes. Sharper 8px radii for institutional feel. Buttons navy-solid with white text, subtle shadows replace dark glass glow.
  • src/components/ScrollNav.tsx: pulse-dot + text brand replaced with /logos-v2/horizontal.png priority image.
  • public/logos-v2/: 15 Nano Banana Pro logos generated via gemini-3-pro-image-preview (shield mark concept, navy + emerald + gold accents, premium institutional style). Variants: primary-blue, primary-green, primary-mono, monogram, stacked, horizontal, reversed-dark, favicon-32, favicon-512, og-primary (1200x630), og-secondary, logo-no-wordmark, logo-stamp, logo-wordmark-only, logo-letterpress.
  • scripts/generate-logos-v2.py: reproducible generator with retry + flash fallback.
  • Fraunces references scrubbed from src/app/page.tsx, src/app/answers/[slug]/page.tsx, src/app/guides/[slug]/page.tsx.
  • src/app/api/extract-7501/route.ts: pinned Gemini 3 Pro preview + GPT-5.4 per model-standards.md.

v0.2.0 — MAJOR — 2026-04-22 @ 02:33 PM AST

10,000x UI rebuild: Fraunces display typography, real Framer Motion layer, animated mesh-gradient hero, counter stats, tilt cards, scroll-animated nav, cursor glow.

  • New design system (src/app/globals.css): Fraunces variable font with SOFT/WONK/opsz axes for display type, Inter for body, JetBrains Mono for numbers. Expanded surface palette (bg-0..bg-4), gradient and glass tokens, noise-texture overlay, refined spring easings.
  • New premium components (src/components/):
    • Motion.tsx — Reveal, Stagger, Item, FadeIn wrappers (Framer Motion, scroll-triggered).
    • CountUp.tsx — animated counters with compact/int/float formatting.
    • MeshGradient.tsx — animated canvas mesh (4 drifting blobs, IntersectionObserver-paused, prefers-reduced-motion aware).
    • ScrollNav.tsx — nav shell that shrinks and solidifies on scroll.
    • TiltCard.tsx — 3D tilt hover with spring-physics return.
    • CursorGlow.tsx — cursor-following radial glow (desktop + fine-pointer only).
  • Rebuilt src/app/layout.tsx — Google Fonts swap (Fraunces + Inter + JetBrains Mono), Organization JSON-LD, new nav + footer with structured link grid.
  • Rebuilt src/app/page.tsx — animated hero with mesh canvas, counter stats, source rail (CBP, SCOTUS, Federal Register, ITA, USITC, USTR), 12-calc grid with stagger + tilt, AI analyzer 3-step flow, scroll-reveal timeline, Mill vs. Ours comparison, final CTA. All copy scrubbed of em-dash violations (Victor's Law).
  • Parallel agent additions picked up in this release:
    • /answers/[slug] + /guides/[slug] dynamic routes with gray-matter frontmatter parsing.
    • CalcShell.tsx + 6 calculator formula modules (src/lib/calculators/*).
    • /api/emails/drip-welcome, /api/track, /api/unsubscribe, /api/webhooks/resend handlers.
    • 86+ Nano Banana hero images across answers, guides, calculators, industries, states, trust icons.
  • Compliance strip retained on every page; broker-partner disclosure in footer; "Estimate only — subject to CBP adjudication" on calculators.

v0.1.0 — MAJOR — 2026-04-22 @ 01:56 PM AST

MVP live on https://tariffrefundcredits.com

  • Homepage, IEEPA flagship calculator, 5-question qualification quiz with tier grading, 12 calculator placeholders, 20 FAQ answers, 10 long-form guides, pricing, about, book, legal pages.
  • Next.js 16 scaffold, Tailwind 4, dark V3 design tokens, Resend/Supabase/OpenAI/Gemini wiring.
  • Vercel + Cloudflare DNS + SSL provisioning.

Source of truth on GitHub

Every commit, every PR, every review is publicly tracked at github.com/testedmedia/tariffrefundcredits.

About usPricingBook a call