A subscription magazine platform, from upload to page turn
A private platform for a magazine publisher. Readers subscribe or buy single issues and read each one as a real flipbook in the browser, and the publisher’s team publishes new issues from their content editor. We designed and built all of it, and we look after it.
Demo contentShown on a demo build of the platform. The magazines are free publications from The Metropolitan Museum of Art, used only to demonstrate it: The Met is not a client, and the issues aren’t sold.


- 0Developers needed to publish a new issue
- 5Ways to buy: monthly or yearly, or one issue in digital, print or both
- 2 yrsBuilt, launched and still improved by us
The challenge
The publisher sells a magazine in print and digital. Readers needed to subscribe or buy single issues, read them like the real magazine in the browser, and download PDFs only once they had paid, with the issue files never publicly reachable. And the publisher’s team needed to put out a new issue without calling a developer.
A real magazine, in the browser
Readers turn the pages of each issue the way they would the printed magazine, down to pulling a corner and bending the page. We integrated an HTML flipbook into the React app itself, so it shares the reader’s account, their library and the platform’s access checks.

Part of the app, not an embed. The viewer runs inside the app rather than in a separate frame, so a reader moves between their library and an issue without signing in twice.
Checked before every page. Every flipbook request is checked on the server against what the reader has paid for. Without access, they get an explanation, not the issue.
Back to the same spread. The page number lives in the link, so a reader can share a spread or come back to where they stopped.
Zoom, thumbnails, full screen. Readers can zoom into a page, jump through thumbnails of the whole issue, or read full screen.
From upload to page turn
The publisher uploads an issue once, and it stays in private storage. Readers who have paid get every page; everyone else is turned away at the door.
Seen in thermal: Paid, so the issue comes out to them Not paid, turned away at the access check
One upload, from the editor. The team adds the finished issue in Sanity. It goes straight to private storage through a link that lasts fifteen minutes, and the editor then deletes its own copy.
Unpacked in the cloud. A Google Cloud Run service unpacks the issue into the pages the flipbook reads, and the editor shows its progress until it’s ready.
Paid for exactly once. Stripe’s confirmation is signature-checked before anything unlocks, and if it arrives twice, the second changes nothing.
If an issue leaks, you know who shared it
A paid PDF can be forwarded to anyone, and every copy passed on is a sale the publisher doesn’t make. So each download carries the name of the reader who took it, hidden in the file. When a copy turns up where it shouldn’t, it leads straight back to them.
A subscriber downloads this month’s issue. Their name and a download ID are written onto the pages, then out of sight.
Hidden on the page. The reader’s email, account, a download ID and the time are written in invisible text on the first and last pages. Readers never see it, and it travels with every copy.
Written into the file. The same details sit in the file’s properties, so a copy stays traceable even if the hidden text is stripped out.
Every download logged. Each download is recorded: who, which issue, when, and from which device and internet address.
Stamped in a sealed-off process. Each file is stamped in a process of its own, with limits on size and pages, so a damaged or malicious PDF can’t slow the site down.
Planning something like this?
Digital products start at $40k, with a fixed quote after a $5,000 discovery sprint that comes off the build.
A library that knows what you own
Every reader sees each issue, what they own and what they can buy. Buying opens Stripe checkout, and when the payment lands the issue unlocks on its own.


Paying on Stripe’s checkout, in test mode 
Every purchase, with its receipt 
The reader’s account
Five ways to buy. Monthly or yearly subscriptions, or a single issue in digital, print or both.
Billing readers can manage. Readers see every purchase with its receipt, and manage their subscription through Stripe’s billing portal.
Who can read what
What a reader can open depends on how they pay and when each issue came out. Pick a reader.
- This month’s issue
Read + download - A back issue
Read + download
Paid for every month, so every issue is theirs.
Also inside
The parts a demo doesn’t show, and the ones that keep the platform running.
- A page builderThe team builds the rest of the site in Sanity from blocks: galleries, past issues, calls to action and submission guides.
- Drafts, previewedEditors see a draft page as it will look before it goes live.
- Changes live in secondsWhen content changes, Sanity tells the site, and only the pages it affects refresh.
- Account emailsWelcome, email verification, password reset and change, and account deletion, all sent by the platform.
- Deletion, done properlyReaders can delete their account. After an emailed confirmation, everything tied to it is erased in one go.
- Sign-in protectionRate-limited sign-in, a password policy and verified email addresses.
- Security headersA content security policy, framing and referrer rules on every response.
- Tested where it mattersAutomated tests cover payments, access rules, accounts and the flipbook.