Changelog

Built in public.

Every shipped change, straight from the git log — newest first.

UpdateMay 15, 20263d9f448

5 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, 2026b758649

add /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, 202684154c4

add 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, 2026c490648

fix: 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, 2026262d787

/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, 2026e425f6a

Agency 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, 2026a0f7254

/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, 20264c9221b

ship 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, 2026c275056

fix: 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, 202624895e2

plan-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.