All work

Case study 01

Affpilot

The generation and publishing flows behind 1M+ AI-written articles.

Frontend React DeveloperAffpilotOct 2023 - Sep 2025
React 18Redux ToolkitRTK QueryMaterial UITailwind CSSNext.js 14GraphQL
1M+
articles generated
2B+ words, sustained 2,000+/day
100k+
registered users
~$390K
processed
11,000+ transactions
290
reusable components
92 pages · 138 endpoints

Top contributor to the platform frontend: ~920 of 1,860 commits. Founding frontend engineer of Flippium: 79% of commits.

Context

Affpilot is an AI auto-blogging SaaS: users pick keywords, configure tone and language, and the platform researches, writes, and publishes SEO articles to their sites. When I joined it was an early-stage product; over the next two years it grew to 100k+ registered users and more than a million generated articles.

I built and maintained the React component architecture (290 reusable components across 92 routed pages, integrating 138 REST endpoints) as top contributor with roughly 920 of the codebase's 1,860 commits.

What I built

Generation workflows

The flows that produced the platform's core output.

  • Form-driven interfaces for 16 AI article generators with tone, point-of-view, and 20-language controls.
  • Bulk-generation tables with per-account batch validation caps, live success/failure status, and failed-keyword recovery.
  • These workflows produced 1M+ articles (2B+ words), sustaining 2,000+ articles a day at peak.

Write-to-publish pipeline

From editor to a live post on the user's own site.

  • Tiptap rich-text editor connected through a central dialog registry to WordPress, Blogger, Medium, and Shopify publishing.
  • API-key-secured webhook channel with site verification, category and author mapping, draft/publish states, and post scheduling.

Checkout & billing

The revenue path, end to end on the frontend.

  • Mobile-first pricing tables wired to Stripe, SSLCommerz, PayPal, and bKash/Nagad, with a word-credit ledger and coupon / lifetime-deal redemption.
  • Processed ~$390K across 11,000+ transactions from 4,200+ paying customers.
  • Built the redemption flow for an 8-tier AppSumo launch with 570+ redemptions.

SEO toolkit

  • Country-aware keyword explorer, keyword clustering from CSV or pasted lists, and sitemap title extraction, feeding research directly into bulk generation.

Flippium: founding frontend engineer

Affpilot's website-flipping marketplace, built as a second product (Next.js 14 App Router, GraphQL, shadcn/Radix).

  • Multi-step listing wizard, marketplace filtering, and offer negotiation.
  • Buyer, seller, and moderator messaging with optimistic updates, infinite scroll, and image/emoji support.
  • Facilitated 100+ site sales at up to $3K each; I authored 79% of commits.

Adjacent products, built solo

  • A React 19 + TypeScript billing back-office: CRUD modules, Zod-validated forms, URL-synced server-side tables, and a CLI feature scaffolder.
  • A 13-tool free AI-writing microsite rendering server-defined dynamic forms, used as a signup funnel.

Decisions & trade-offs

A central dialog registry instead of scattered modals

Publishing to four platforms from anywhere in the app meant dozens of modal flows. A single registry keyed by dialog ID kept them consistent and lazily loaded: one pattern to maintain instead of thirty ad-hoc ones.

Validation caps before bulk generation

A malformed keyword list could burn a user's entire word-credit balance in one bulk job. Per-account batch validation with failed-keyword recovery made bad rows retryable instead of billed-and-lost.

RTK Query as the single data layer

138 endpoints with tag-based cache invalidation instead of hand-rolled fetching, so generation status, credit balance, and publishing state stay consistent across 92 pages without manual refetch choreography.

Outcome

  • The generation and publishing flows I built carried the platform to 1M+ articles for 100k+ registered users.
  • Billing I implemented processed ~$390K across 11,000+ transactions.
  • Flippium shipped and closed 100+ site sales at up to $3K each.