Skip to content
Ship log

What shipped

Last 90 days, by Edward Ilin. One founder, shipping every week.

  1. NewBilling

    Billing page rebuilt: Higgsfield-style pricing cards, hero sale banner, scaling credits slider, brand-workspace gates

    Total /chat/billing rebuild. New hero sale banner above the grid: 31% OFF chip + bold pink ALL AI MODELS & 1,000+ CHANNELS headline + sub + one-line description (Higgsfield-length, no em-dashes). Plan cards stretched to 600px min-height, rounded-2xl, subtle inner gradient. Per-tier branding: pink for Pro (MOST POPULAR), blue for Business (BEST VALUE), purple ring on Plus, neutral on Starter. Every card now leads with a prominent brand-workspace highlight row (Starter 1 / Plus 3 / Pro 10 / Business unlimited) with the tier accent color. Credits headline simplified to a single big number + image-gens + HD-videos equivalence (no more granular articles/posts breakdown). Sale framing live everywhere: pink strike-through MSRP next to the 44px live price, percentage-off chip beside the plan name (Starter 26% / Plus 25% / Pro 28% / Business 31%). Pro + Business get a Higgsfield-style 1Γ—/2Γ—/3Γ— credits slider β€” credits, image gens, HD videos, AND price all scale together with smooth count-up animations and a tier-colored '+ $X for 2Γ— credits' delta tag. Savings line now reads 'Save $X compared to monthly' (bright $X, dim rest) on annual, 'Save $X with annual' on monthly; only the truly-flat Starter shows 'No difference'. Killed the bottom Article-packs / Social-packs cards.

  2. NewBilling

    Per-plan autopilot quotas + scheduled-autopilot feature surfaced as a paid-tier value prop

    Scheduled autopilots (article + social) are now metered per plan: Starter 0 (manual only), Plus 1, Pro 5, Business unlimited. /api/social-autopilot and /api/blog-autopilot both check the quota before creating a new schedule and return a 402 with an upgrade message when at cap. Counts span ALL autopilot types per user (no gaming by mixing). Plan cards surface the autopilot count as a feature bullet, and features starting with 'No ...' now render an X icon with dimmed text instead of a checkmark so you can see at a glance what's NOT in your tier.

  3. BetterDashboard

    Sidebar upgrade banner redesigned + bogus '55% OFF' purged

    New beautiful Higgsfield-inspired upgrade card in the bottom sidebar: dark maroon radial gradient, diamond emblem, pink 31% OFF chip + Launch sale tag, big bold pink 'All AI Models / 1,000+ Channels' headline, 'Locked for 12 months' microcopy, and a palette-matched pink gradient 'Upgrade now' CTA with a soft shadow. The old hardcoded '55% OFF' badge that appeared across all 14 locales was a stale fiction β€” replaced with the real 31% (matches the highest live tier discount).

  4. NewDashboard

    Dashboard chat redesign preview β€” new sidebar, Skills marketplace, Memory page, real-status Connectors

    Big internal redesign live at /chat?canvas=new (feature-flagged, not in production yet). New slim left sidebar replaces the topbar: workspace switcher, 5 in-chat view tabs (Files / Calendar / Brand / Ads / Affiliates), 3 destination tabs (Skills / Connectors / Memory), 5 quick-action tasks (PDF/YouTube/Blog/Keyword β†’ content), real credit balance, Pricing CTA, and account dropdown with theme toggle. Top-right cluster: History Β· ⌘ Shortcuts Β· Upgrade Β· 12-locale switcher. New Skills page lets you browse + install Claude Skills (paste markdown to import your own from .claude/skills directories). Memory page is now a Business-ID profile editor with 9 sections (Business / ICP / Audience / Brand voice / Writing style / Common topics / Visual style / Competitors / Preferences) β€” click any cluster to open a card grid of inline-editable fields, add priority + applies-to chips to each, and create UNLIMITED custom containers with custom name/icon/color. Connectors page now pulls real connection state from social_media_accounts + api_credentials + crm_connections, uses the actual brand SVG icons for all 13 social platforms, and gives every connected account a single-click disconnect. Global keyboard shortcuts (Ctrl+B / Ctrl+K / Ctrl+E / Ctrl+I / Ctrl+Shift+T) all wired. Try it at /chat?canvas=new.

  5. NewCreative

    Higgsfield integration plan β€” 8 new creative packs unlocking UGC, talking-head video, DTC ads, virtual try-on

    Mapped Higgsfield's full surface (Soul 2.0 images, DoP video with 60+ camera presets, Speak lipsync, Cinema Studio multi-shot, Marketing Studio 9-mode ads engine, DTC Ads with 40 formats + direct Meta/Google publishing, Virality Predictor, 4K upscale, Soul ID branded spokesperson). Plan committed at docs/plans/HIGGSFIELD-INTEGRATION-2026-05-17.md with 6-week build order and 8 new packs from $39 (Speak-the-Article upsell) to $1,499 (Enterprise Brand Cinema). Week 1 scaffolding shipped: HiggsfieldClient with auth + 30s timeout + exponential retry, model registry covering 14 image/video/lipsync/multishot/upscale models, 30-preset camera catalog, per-project useSoulForLifestyle flag. All quiet until HIGGSFIELD_TOKEN lands β€” zero credits burned today.

  6. NewVideo

    Video generation overhaul: Kling 2.6 Pro, 10s default, cinematic prompts, per-channel auto-preview

    Swapped Seedance for Kling 2.6 Pro (1080p+ native, AI audio, cinematic camera moves). Default length bumped from 5s to 10s. Prompt enricher rewritten around real cinematography (Apple keynote / Michael Mann / A24 / Nat Geo references) instead of generic camera moves, with anti-drift rules so 10s clips stay coherent throughout. Hebrew/Arabic/Russian post context now translates to English internally so the model latches on. Generate Video on every channel (Instagram, LinkedIn, Facebook, Twitter, TikTok, Threads, Pinterest, Bluesky, YouTube, Telegram, Discord, WhatsApp, Snapchat) auto-flips the preview pane to the finished video β€” no more stale image. Per-platform output dimensions enforced (1080Γ—1920 for Reels, 1080Γ—1350 for Feed, 1080Γ—1080 for square).

  7. FixedOutreach

    Cold outreach hardening: 3-day cadence, cron de-duplication, threaded replies, BCC, compliance gate

    Follow-up cadence pushed from 48h to 72h minimum. Cron now has an idempotency gate so an Inngest replay can't send the same follow-up three times to the same prospect in a minute (real bug caught + fixed). Every outbound now: BCCs edward@brainpercent.com, threads via Re: subject + In-Reply-To + References headers so the prospect sees one continuous Gmail conversation, runs the compliance gate before sending, and feeds the prior message bodies to Claude so the follow-up doesn't paraphrase the initial. Alistar gained a follow_ups_due tool β€” ask 'do we have followups due tomorrow?' in chat to see the queue.

  8. FixedSEO

    Public /blog cleanup: 46 leaked customer articles removed, RPC allowlist installed, 13-locale support

    The three public blog/article RPCs (get_public_published_posts, _paginated, _by_slug) were ownership-blind β€” every customer article that reached status='cms' was rendering on brainpercent.app/blog under our canonical and hreflang. 46 articles unpublished (CozyComfort pillows, Stripe Atlas demos, coffee brewing, dog food brands, semiconductor packaging β€” all soft-deleted, recoverable). New brainpercent_blog_project_ids() helper restricts the RPCs to the 13 Brainpercent language projects only. /ru/blog, /es/blog, /de/blog etc. now serve their own language instead of falling back to English. Trending RSS picker contamination also fixed at the source β€” refresh-trending-picks no longer leaks across projects.

  9. FixedReddit

    Reddit drafts pass as human + paste as plain text

    Real Redditors started calling out Brainpercent-drafted comments as AI. Voice rules tightened: banned parallel comma-lists (the dead giveaway), 'actually [noun]' cadence, abstract closing lines, and the all-lowercase-first trick (itself becoming an AI signature). Required human markers added: contractions, hedges (tbh, imo, ngl), occasional run-on sentences, allowed caps for emphasis. Markdown stripping added so a Sonnet leak of underscores or asterisks can't render the whole comment in italic when pasted into Reddit's reply box. Three drafting sites consolidated to one source of truth.

  10. NewAffiliates

    Affiliate program: earn 20% on every referral, paid monthly to Stripe

    Apply in seconds from /chat (an AI classifier auto-approves anyone with a credible audience). Get a tracked link, a one-pager Marketing Kit, and a live dashboard showing clicks, signups, and commissions. Payouts settle on the 1st of each month via Stripe Connect. Once you cross $50 we wire it straight to your bank. Includes self-referral detection (Stripe card fingerprint), 7-day cooling-off on new accounts, and a 3-day refund hold so clawbacks are clean.

  11. NewLegal

    Legal + GDPR compliance: Privacy v2, Terms v2, DPA, data export

    Full rewrite of Privacy + Terms to cover the EU AI Act, Β§230/DSA, OFAC sanctions, AI hallucination disclosure, 14-day cooling-off, force majeure, and survival. New DPA pre-signed at /legal/dpa with Annex 1 + Annex 2. Cookie banner now gates GA + Microsoft Clarity through Consent Mode v2 (Clarity only loads on grant). GDPR Article 15 data export via /chat/settings. Inngest packages everything, emails you a signed Supabase link, auto-purges after 90 days.

  12. NewAnalytics

    Analytics command center: 7-stage funnel, stuck users, AI weekly digest

    Admin analytics rebuilt from scratch. KPI row (signups, DAU, MAU, activation, paying users, MRR, time-to-publish, 7d retention), a 7-stage funnel chart with drop-off table, DAU line, stuck-users panel with email + days-stuck, Microsoft Clarity dead/rage-click integration, and an AI Weekly Analyst that emails me a priority-ordered TASK.md every Sunday night. PDF export + email-the-report buttons included.

  13. NewAnalytics

    Growth engine instrumentation: every click, scroll, and dwell tracked

    Phase A foundation shipped: analytics_events table with anon_id + GIN-indexed properties, client-side auto-instrumentation for clicks + scroll-depth + dwell, signup attribution via the existing ref cookie, and a post-signup reconciliation that retroactively links pre-signup anonymous events to the new user. Stripe webhook events fire purchase / subscription / credit events into the same stream.

  14. NewSEO

    GEO foundation: per-bot robots.txt + AI bot traffic tracking

    robots.txt now serves per-user-agent rules so we can grant or deny GPTBot, ClaudeBot, Perplexity-User, Google-Extended, and friends independently. A new /api/analytics/ai-bot-visit endpoint logs every AI crawler visit with timing + path so I can see which agents are actually citing the blog.

  15. BetterAdmin

    Autopilot health panel: silent cron failures now visible

    /chat/admin/analytics has a new Autopilot Health card. Per blog + social schedule it surfaces last-run timestamp, status (ok / overdue / failing / disabled / fresh), and per-language stagger. If a multi-locale autopilot stops firing for any of the 13 locales, I see it the same day instead of after a week.

  16. FixedArticles

    133 stuck articles unstuck + daily cron sweep to catch future orphans

    A trigger relaxation backfilled 133 articles that were stranded at status='completed'. They should have flipped to 'cms' and shipped to /blog automatically. One-shot dedupe + republish cleared the queue. New daily 05:15 UTC cron sweeps for future orphans so this never silently piles up again.

  17. FixedLanding

    Landing page hydration errors + CLS 0.57 β†’ 0.10

    React #422 and #425 hydration mismatches on the home page are gone. Cumulative Layout Shift dropped from 0.57 (poor) to ~0.10 (good). Sample-post image now wraps in a link to /chat instead of swallowing 33% of hero clicks into a dead zone.

  18. NewOutreach

    Outreach chat: prospect, research, draft, all from one conversation

    Cold outreach moved into the chat surface end-to-end. Prospect/research/draft cards inline, edit mode in-place, auto-unlock emails when research finishes, batch-sequence prospects with one command. The old admin form is retired.

  19. FixedOutreach

    Outreach quality + Hebrew RTL + ScrapIn β†’ ReverseContact swap

    Kill all fabrications: grounded the research step to verified sources only, added a Claude Haiku fact-check gate, and hardened the system prompt against hallucinated names + companies. Hebrew outreach now renders right-to-left correctly across cards + email previews. ScrapIn API was unstable; swapped to ReverseContact /v2/fetch/persons (same key, far better uptime).

  20. NewBilling

    Unified credit model: 1 generation = 1 credit everywhere

    30+ generation routes consolidated. Articles, social posts, image regens, videos, and ASO all charge exactly 1 credit each; only carousels charge per-slide, because that's the only op that genuinely makes N pieces. Stopped 13 blog autopilots that were retry-bleeding credits. Per-channel deduction on social. Pre-create credit checks (HTTP 402) + a friendly Top-up toast.

  21. NewSocial

    Pinterest board picker + 13-channel Zernio publishing

    Boost any post to Pinterest with a real board picker (no more guessing the destination). Zernio publishing now aligned to all 13 supported channels (Telegram + Snapchat added). Caption length safety net for every platform so a Twitter clip never silently truncates a LinkedIn post.

  22. BetterImages

    Per-platform image aesthetic + per-platform headlines

    Image prompts now carry a per-channel aesthetic suffix. Instagram gets editorial-magazine, LinkedIn gets corporate-clean, TikTok gets vertical-energy, X gets newsroom-sharp. Headlines also persist per-platform now, so editing the Instagram title doesn't accidentally overwrite Twitter.

  23. FixedBilling

    Navbar credit counter now actually decrements when you generate

    23 of 30 generation routes only updated the master credit pool β€” the per-type counters the navbar reads (social_balance / article_balance / video_balance) never moved. You could generate 50 images and the navbar wouldn't budge. Fixed at the SQL layer with an AFTER INSERT trigger on credit_transactions_new that auto-decrements the matching balance, plus a Supabase Realtime subscription on user_credits in ChatTopBar so the counter updates within a second of the charge regardless of which route triggered it.

  24. BetterCarousels

    Carousels now tell a story slide-to-slide

    First pass made every carousel slide a centered hero magazine cover β€” visually impressive but it killed the storytelling rhythm. Slides now share a cohesive DSLR / photoreal / Wealth-quality DNA but compositions vary by role: hook = movie-poster hero, insight = close-up detail, story = wide establishing, breathing = atmospheric still life, outro = reflective close. WIDE β†’ CLOSE β†’ CLOSE β†’ WIDE β†’ CLOSE rhythm enforced across every plan.

  25. BetterImages

    Generated images jumped from cyberpunk neon to magazine-cover editorial

    The image-gen prompts told the model brand colors MUST be the dominant tones throughout, with no realism anchor β€” outputs came back as glowing purple matrix particles. Hardened the wrapper across 5 generation paths (manual, autopilot, regenerate, blog hero, IG carousel) with HERO COMPOSITION, hard warm rim light, crushed blacks, Wealth / Time POY / Hodinkee / Bloomberg reference, and a hard ban on cyberpunk neon. Brand colors now appear as a single subtle accent, never the entire mood.

  26. NewLaunch

    /vote-for-us launch hub

    Single URL to share on launch day. 24 SaaS directories listed with one-click upvote/review buttons, status badges (LIVE / MAY 4 / PENDING), and a direct link to /pitch/demo. Editorial design matching the pitch page.

  27. NewPitch

    Pitch deck XIV + XV β€” Roadmap + GTM

    /pitch/demo grew from 14 to 16 sections. New Roadmap section (Building the Future) lists the next 90 days of shipping work. New GTM section (Built for Launch Week) maps the May 4 distribution: Product Hunt, BetaList, 25+ directories, lifetime deals, founder-led community.

  28. NewPitch

    Pitch deck full editorial redesign

    All 14 sections of /pitch/demo migrated from generic SaaS gradients to a Bloomberg/FT/Hermès editorial language. Paper + copper accents, italic-serif headlines, hairline rules, page-number marginalia. Two new editorial clones (Engine + Competitors) keep the investor /pitch/share intact.

  29. FixedSEO

    Yandex favicon β€” robot can now load it

    Yandex Webmaster reported the favicon as unreadable. Trace showed /favicon.ico was 307'ing into the [username] catch-all and serving HTML. Added a real favicon.ico + Next.js App Router icon convention files (icon.png, apple-icon.png) using the canonical black-on-white diamond mark.

  30. FixedEditor

    Instagram carousel preview no longer flashes the old image

    When you clicked Generate Carousel, the preview briefly flashed the previous single-mode image before the plan responded. Two surgical changes in InstagramCarouselProduction now suppress the fallback during planning and preserve slide-zero's seeded image across poll transitions.

  31. FixedVideo

    Seedance carousel videos now ship branded

    Generate Video on a branded slide was returning the raw Seedance MP4 with no overlay. The chain was missing a step: seedance complete -> [missing] -> brand re-overlay. Added Step 5 to generate-seedance-video that emits social/video.re-overlay when overlay_urls[platform] is present.

  32. NewQA

    Social editor audit suite β€” 15 tests, full coverage

    tests/e2e/social/editor-audit.spec.ts exercises every editor button across all 15 platforms. Brand stitch, slide nav, carousel generate, image prompt save, publish flow β€” all covered. Catches the kind of regression that shipped raw videos and unbranded carousels.

  33. FixedEditor

    First-comment dropup auto-flushes on close

    If you typed in the Facebook first-comment dropup then clicked outside or pressed Escape without explicitly saving, the draft was lost. closeEditDropup now auto-flushes the draft regardless of trigger, so nothing typed gets dropped on the floor.

  34. FixedEditor

    Facebook carousel honors slide count + IG textarea no longer reverts

    Facebook carousels were ignoring the user's slide count override. The shell's footer +/- never reached the production component's local state. Wired registerFooterCarouselCountChange across all 12 mount sites. Plus: Instagram textarea was reverting to default while typing because silentFetchContent stomped state β€” now merges per-platform.