Changelog
Built in public.
Every shipped change, straight from the git log — newest first.
UpdateMay 15, 2026
3d9f4485 Reddit ad variants via /api/og/reddit?v=1-5
Single route that picks one of 5 different angles:
v=1 — cost stat: $0.30 vs $150/article
v=2 — speed: 10 min to first ranked article
v=3 — volume: 150 articles/month for $29
v=4 — savings: $1,771/mo savings vs FT writer
v=5 — founder: indie operator built for indie operators
Same 1200×628 layout (left copy + right stat card) keeps the test
NewMay 15, 2026
b758649add /api/og/vertical and /api/og/vertical-pricing 9:16 ad creatives
Two 1080×1920 ad images for Reels/TikTok/Shorts:
- /api/og/vertical
Hero variant: 'SCALE SEO ON AUTOPILOT' headline, 3 stat tiles
($0.30/article, 150 articles, 1,500+ words), 'Start Free' CTA,
reassurance chips, URL.
- /api/og/vertical-pricing
NewMay 15, 2026
84154c4add apple-icon + dynamic opengraph-image + twitter-image
- src/app/apple-icon.tsx — 180×180 PNG generated at build via next/og.
iOS 'Add to Home Screen' picks this up automatically.
- src/app/opengraph-image.tsx — 1200×630 social-share card. Dark bg,
lime brand mark, headline 'Scale SEO on autopilot.' + 4 chip features.
- src/app/twitter-image.tsx — re-exports the OG image for summary_large_image.
- root layout: metadata OG_IMAGE now points at /opengraph-image (the
Next-generated path) instead of nonexistent /og.png.
- middleware: whitelist /apple-icon, /opengraph-image, /twitter-image so
FixMay 15, 2026
c490648fix: whitelist sitemap.xml, robots.txt, /roadmap, /affiliate in middleware
Middleware was redirecting /sitemap.xml -> /login because the path wasn't
in PUBLIC_PATHS. Same class of bug as the Stripe webhook 307 from earlier.
Affected:
- /sitemap.xml — Google Search Console couldn't read it; crawling stalled
- /robots.txt — bots got redirected
- /roadmap, /affiliate — public marketing pages forcing login wall
UpdateMay 15, 2026
262d787/sites/new: tighten layout — cap width + sticky sidebar fills right side
Was: grid 1fr + 320px stretched to full viewport, ~1140px form column
with a short sidebar leaving a giant black void on the right.
Now: max-w-1100px centered, form column capped at 720px, sidebar 300px,
both balanced. Sidebar already xl:sticky so it stays in view while the
tall form scrolls.
UpdateMay 15, 2026
e425f6aAgency plan: instant buy instead of 'Talk to us'
Both /pricing and the embedded pricing card on / now show 'Start 14-day trial'
on the Agency tier. The form action is already wired to Stripe Checkout via
startCheckoutAction with plan=agency — high-intent buyers can self-serve
without waiting for a sales reply.
UpdateMay 15, 2026
a0f7254/sites/new: match polished mockup exactly
- FieldLabel: drop all-caps + tracking-wider styling. Title Case at text-sm,
font-semibold, accent dot for required, muted hint inline.
- WordPress/Native target cards: replace 'SELECTED' badge with a small lime
checkmark circle (clearer + matches the mockup chrome).
- Niche / Audience / Author bio HTML labels: use '(optional)' tag in hint
position instead of 'short phrase' / no hint.
Final form layout now matches the design 1:1.
NewMay 15, 2026
4c9221bship 4 features: pause SEOForge auto-publish + roadmap + welcome/low-credit emails + affiliate program
1. SEOForge native site: maxPerDay=0 → cron skips it. Queue preserved.
2. /roadmap public page — 28 items split into:
- Already shipped (13)
- Shipping now (3)
- Up next (6)
- Later (6)
Linked from MarketingHeader, MarketingFooter, sitemap, robots.
FixMay 15, 2026
c275056fix: add /api/stripe to middleware PUBLIC_PATHS
The Stripe webhook (and Vercel domain callbacks) were getting 307-redirected
to /login because they don't carry our session cookie. Now whitelist:
- /api/stripe — Stripe webhook signature is the auth
- /api/domains — Vercel domain verification callback
- /_clarity — first-party Clarity proxy (browser-initiated, no cookie)
- /privacy, /terms, /changelog, /signup — marketing pages
UpdateMay 15, 2026
24895e2plan-aware billing upgrade panel: shows next-step options for every tier
- Hobby user → side-by-side Operator + Agency cards (Operator marked
'Recommended')
- Operator user → single full-width Agency card (the only upgrade path)
- Agency user → trophy panel '🏆 You're on the top plan' with a get-in-touch
mailto for enterprise leads
- each card shows: plan name + price, article count, 4 key features,
individual 'Upgrade to X' CTA going to /pricing
- consistent 14-day money-back guarantee callout + current-usage breadcrumb
Want to suggest something? Open an issue on GitHub.