voice sync, leaner tweets, live credits
works across all your devices
set it once, done
natural length variety
tweets that read like tweets
no stale numbers anywhere
real-time across all components
better deliverability
cleaner inbox experience
regenerate with feedback
more meme variety too
flash for utility calls
better output, same price
february had a clear theme once i looked back at it: things that should have been working properly, now working properly. that sounds anticlimactic but some of these were real paper cuts.
the biggest one is voice profiles. before this month, your voice profile lived in local storage. which meant it was tied to one browser on one machine. if you switched devices you were starting from scratch. i moved it all to supabase. it follows your account now. log in anywhere, your voice is already there.
sensible mode was producing slop. not bad ideas, just badly sized ones. everything was drifting toward 400-500 characters because the model was implicitly rewarded for being thorough. i reworked the prompts to enforce actual tweet-length output with natural variation. some tweets are short now. some are medium. none of them read like linkedin posts.
credits were updating on a delay. you'd generate a tweet, the number would sit there, you'd wonder if it registered. annoying. i fixed the state sync so it updates live across every component the moment a generation completes.
on the email side: i switched everything from html to plain text. html emails look nice in your design preview and then get clipped by gmail or caught by filters. plain text isn't glamorous but it lands. i also fixed the from address, added reply-to, and sorted out a bug where new users were getting 200 credits instead of 50.
model routing got a quiet upgrade. generation calls now go to the pro model. flash handles the lighter utility work. users shouldn't notice anything except slightly better tweet quality.
smaller but worth noting: bookmarks are in, feedback-based regeneration is in, reaction images and memes are more varied. the admin panel got a full overhaul including per-user transaction history and analytics. and i patched a payment flow bug that was silently breaking checkout for some users. not a flashy month, but a solid one.
what you get
- Your voice profile now follows you across devices. i'm persisting your voice profile to supabase now. set it up once on your laptop, open bangers only on your phone, it's already there.
- Sensible mode stopped writing essays. something was telling the AI that longer = better. it wasn't. i fixed the prompt so tweets are actually tweet-length, with natural variety instead of everything maxing out at 500 characters.
- Credits update live, no refresh needed. used to be you'd generate a tweet and the credit count would just sit there lying to you. now it updates in real-time across every part of the app.
- Emails are plain text now. html emails were getting clipped and filtered. switched everything to plain text. better deliverability, looks less like a newsletter, lands better.
- Smarter model routing under the hood. generation now uses the pro model. quick utility stuff uses flash. same cost for you, better output quality on the things that matter.
- Bookmarks, feedback regeneration, and reaction image variety. you can bookmark tweets now. if a tweet misses the mark you can give feedback and regenerate. meme and reaction image picks are more varied so you're not seeing the same ones loop.
by theme
everything that shipped (45) →
- · polish email copy: remove em dashes, first person only
- · georgia font + ascii box footer in all emails
- · fix email preview iframe background
- · fix preview with iframe, change hey, to hey!
- · tasteful minimal html emails · system font, white bg, bold headers, plain links
- · fix campaign preview to render plain text instead of html
- · switch all emails to plain text for better deliverability
- · fix campaign tracking: show all failed emails, add result panel
- · fix email from address and add reply_to
- · fix new users getting 200 credits via email/twitter auth paths
- · fix new users getting 200 credits instead of 50
- · fix admin login 404 in local dev
- · add product update email campaign + resources section on /how
- · fix sensible mode generating long-form slop
- · docs: add CLAUDE.md with detailed project context for AI sessions
- · docs: update README and CHANGELOG for Feb 28 release
- · update model routing: pro for generation, flash for utility calls
- · feat: varied tweet lengths for meaty ideas in sensible mode
- · fix: stop AI from bloating every tweet to 500+ characters
- · fix: credits update in real-time across all components
- · feat: persist voice profile to Supabase (follows user across devices)
- · feat: voice profiles, per-tweet credits, model updates, SEO pages
- · Hide footer for unauthenticated users (landing CTA already has link)
- · Polish landing page: fix auth flash, update copy, add drift animation and rotating placeholder
- · Add analytics dashboard and per-user transaction history to admin panel
- · Docs: Update changelog with payment fix, fix X handle in README
- · Move support links to how page and main footer
- · Add support contact links: email + X profile
- · Fix payment flow: add missing proxy routes for checkout and webhook
- · WIP: Landing page with dynamic stats, visual feature cards, and /how page copy refresh
- · Fix admin panel: remove 100-user limit, responsive header, add Vercel Analytics
- · Docs: Slim down README, replace SVGs with mermaid diagrams
- · Remove broken CI workflow · Vercel handles builds/deploys
- · Docs: Update README and CHANGELOG for Feb 7 features
- · Feature: Sensible mode variety, reaction images & meme diversity
- · Feature: Bookmarks, Feedback Regeneration & Reliability
- · Feature: Add welcome email for new signups + admin campaign support
- · Fix: Add missing /api/auth/clerk/sync proxy route
- · Fix: Credits proxy calling wrong backend endpoint
- · Refactor: Remove code duplication and fix production bugs
- · Fix: Use dynamic backend URL for admin-auth routes in production
- · Fix: Route admin-auth API to Next.js instead of Python backend
- · Fix: Rename admin auth routes to avoid backend conflict
- · Fix: Allow admin API routes through Clerk middleware
- · Security: Replace admin secret with httpOnly cookie sessions