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-truthLINK_PLANwith 240 hand-curatedLinkRowentries spanning every cross-link between the 49 in-scope pages. Each row carries a unique site-wide anchor text plus a contextual blurb. Validator helpervalidatePlan()asserts uniqueness and ≥3 in/out per page.src/components/RelatedLinks.tsx(NEW): renders the curated panel usingLINK_PLAN. Reads up to 6 outbound rows for the source page, maps each to aLinkCardwith 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 unusedlistDocs/relatedDocsimports.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, nofollowmeta 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, withTARIFF REFUND CREDITSserif wordmark and "Licensed customs broker refund partner" tagline. Generated viagemini-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 withaltfallback,{{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/*.htmlfor visual QA before ship.- Resend domain
tariffrefundcredits.com: confirmedverifiedwith DKIM ✓ SPF (MX + TXT) ✓ DMARC ✓ before touching templates. Sender stayshello@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 inlinegridTemplateColumns: "repeat(4, 1fr)"from the.hero-stats-gridwrapper — 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!importantso the hero stats grid is always 2 columns on phones, with tightened 10px gap.$30K-$150K+$166Bon the first row,330K+180don 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."HeroStatcomponent gained ahighlight?: booleanvariant — 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-discoverssrc/app/favicon.icoas the default favicon and emits its own<link rel="icon" href="/favicon.ico?favicon.<hash>.ico">ahead of anypublic/favicon.ico. Thepublic/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: collapsedopenGraph.imagesfrom 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:imageandtwitter:imagerepointed 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) andpublic/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 withpython3 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:imagelist 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 viatwitter:imagefor 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/leadwithsource: "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-outlinehardened with!importantacross 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). Addedfocus-visibleoutlines for accessibility.src/app/globals.css: added.book-who-grid,.book-two-col,.book-trust-gridresponsive 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.pngplaced 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 1200x1200og-square.pngin the OGimagesarray.scripts/gen-og-image-v2.py(NEW): PIL compositor using locally-downloaded Inter TTFs over the existingcargo-ship-bg.png. Zero AI-hallucinated text. Regenerate withpython3 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 fromp=nonetop=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: migratedSITE_LOGOandDEFAULT_OGfrom deprecated/logos/primary.png+/logos/og-default.pngto 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 usesFaqAccordioncomponent.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: richerMetadata— 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: #ffffffvia 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) andguides/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.comverified;/api/leadtested end-to-end (delivered). - GSC property
sc-domain:tariffrefundcredits.comverified via DNS TXT (Cloudflare API) + sitemap submitted via jarvis@tested.media OAuth. - Supabase Storage bucket
7501-uploadsprovisioned (private, 25MB cap, pdf+image mime). - Vercel env:
GEMINI_API_KEY,OPENAI_API_KEYpopulated.
- Resend domain
- AI pipeline: extract-7501 route pinned to
gemini-3-pro-preview(withgemini-2.5-flashfallback) +gpt-5.4per Victor's model-standards law. AnalyzerClient em-dash replaced with "n/a". - Ops:
CalcFootershared component,scripts/daily-lead-digest.sh+com.jarvis.tariff-lead-digest.plistLaunchAgent (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 repotestedmedia/tariffrefundcreditspublicly 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-goldtext classes neutralized to navy..theme-greenopt-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-0now#FFFFFF,--text-primarynear-black#0A0F1E,--navy#0B3B6Fprimary,--blue-bright#2563EBaccent, optional.theme-greenclass 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.pngpriority image.public/logos-v2/: 15 Nano Banana Pro logos generated viagemini-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/resendhandlers.- 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.