IABTMinternship · 2025 to now
The core of a US self-improvement platform: live voice rooms, Stripe subscriptions, a daily AI pipeline and the AWS it runs on.
- Role
- Software Engineer, internship, remote
- When
- Sep 2025 to now
- Stack
- Next.js, React, Express, MongoDB, Redis, Socket.IO, mediasoup, Stripe, Shopify, Gemini, PostHog, AWS
- Numbers
- 6 publishers, curated daily · 7 jobs that run themselves · 25 admin tools for the team
- What I’ve shipped
- Live Stripe billing. Three tiers and four plans, rebuilt after I found four holes in the old one. Prices are set on the server, and a payment event that arrives twice only counts once.
- Voice rooms on an SFU. Live audio rooms where five members hold the stage and the rest raise a hand, rebuilt from a peer-to-peer mesh onto mediasoup.
- A daily AI pipeline. Every morning, new articles from six major publishers land in the right members’ growth paths. Gemini picks the fit from the platform’s own list, never its own words.
- Seven jobs that run themselves. Email campaigns, daily nudges in each member’s own time zone, store syncs and health digests, each run once on schedule however many servers are up.
- Premium, enforced once. Free members can browse the whole catalogue and get a taste of every premium section. One check on the server decides what plays.
- Failures that make noise. If a new member’s growth path fails to build, the account is marked and the team hears about it, instead of signup quietly saying yes.
- Two Shopify stores. Two stores behind one headless backend. Orders arrive verified, a repeat can’t duplicate one, and new products publish themselves overnight.
- Email end to end. Sign-in codes, billing, lifecycle and campaign email moved onto Resend. Every send is logged, bounces are kept off the list, and failures reach the team within the hour.
- The tools the team works in. 25 admin screens: a support desk, a campaign CRM, analytics and A/B panels, and controls for subscriptions and the shops.
- SEO as a system. Every page gets its own title, share image and structured data from one builder, across about 30 layouts.
- Monitoring and alerts. Uptime checks, server errors and model telemetry that never records what members wrote, plus a daily health digest.
- The server it runs on. EC2 with nginx and PM2, media on S3 behind CloudFront, and a release tag to roll back to for every launch.
- Uploads straight to S3. Posts and banners of up to 2 GB go from the browser to S3 in parallel parts that retry on their own, so a dropped connection costs one part, not the whole upload.
- A feed that stays fast. One aggregation, cursor pagination checked against the query plan, and a short Redis cache, so page fifty costs the database what page one does.
- Ready for more servers. Sockets and caches shared through Redis, jobs that claim their turn, and duplicates stopped in the database, so the web side can run on several servers.
- Accessible by default. I built most of the app's accessibility: keyboard paths, focus handling, screen-reader labels and reduced motion.