AI work / Zines

Shipping a web and native iOS product with a team of AI agents

Zines is my own product: a pocket press for making, sharing and printing mini-magazines. It needed a web app, a native iOS app, print-ready PDFs, subscriptions and production infrastructure. That is normally a team's work. I built it alone, directing AI coding agents.

Product
Zines, a pocket press for mini-magazines
Platforms
Web and native iOS
Team
One engineer and AI coding agents

The situation

Zines is a quieter alternative to social feeds: every post is a small magazine of six pages and two covers that you can read like a booklet or print on one sheet of A4 and fold.

Doing that properly meant a page editor, a reader, comments and follows, notifications, an imposed print PDF, subscriptions and tips on two platforms, and infrastructure that could run unattended. I wanted to see how far one experienced engineer could take a product like that with AI agents doing most of the typing, without letting quality slip.

What I did

  • Wrote a design spec and an implementation plan for each major feature, from the editor and media manager to push notifications and monetisation.
  • Had AI agents carry out each plan task by task under strict test-driven development: a failing test before any implementation, with a per-task report showing the test going from red to green.
  • Ran Cursor cloud agents in parallel on separate branches, reviewing every pull request and its evidence before merging.
  • Kept one shared zine document model, so the web reader, the iOS app and the printable PDF all render exactly the same thing.
  • Set up continuous deployment: every merge to main is tagged, tested, typechecked, run through end-to-end checks and deployed to AWS automatically.
  • Changed the business model mid-flight, retiring paid print fulfilment for a Creator Press Pass subscription and reader tips, with Stripe on the web and StoreKit on iOS.

How it was built

An Astro and React web app and a Hono API, with about 96 routes, run on AWS Lambda behind CloudFront, with Postgres on RDS through Drizzle ORM. Uploads go straight to S3 and are processed by SQS-driven workers using sharp, and a second queue sends iOS push notifications through APNs.

The native app is SwiftUI, with offline caching and universal links. All the infrastructure is defined in SST, with dead-letter queues and CloudWatch alarms in production, deploys authenticated through GitHub OIDC, and a NAT instance in place of a managed NAT gateway to keep running costs down.

  • Astro
  • React
  • TypeScript
  • Hono
  • SwiftUI
  • PostgreSQL
  • Drizzle ORM
  • AWS Lambda
  • Amazon S3
  • Amazon SQS
  • CloudFront
  • SST
  • Stripe
  • StoreKit 2
  • APNs
  • Playwright
  • Cursor agents

The result

One engineer, a team of agents, 85 production releases in four days.

Zines shipped as a complete product on web and iOS: about 70,000 lines of code, around 590 automated tests and 85 production releases in its busiest four days, from one engineer.

It is also a working example of the approach I bring to teams adopting AI. People own the specs, plans and reviews. Agents do the implementation under strict test-driven development, and nothing reaches production without passing the tests.

Facing something similar?

Tell me about your team and what you need. A few lines is plenty to start.

Email dan@djpg.co.uk