← All workCase 01 / 07
Live on App Store, Play Store & webSubscription reading platform

One subscriber,every platform.

A bilingual reading platform for manga, novels, comics and BD — where a subscription bought on an iPhone, an Android phone or the web is the same subscription everywhere.

Product
Fiole fiole.app↗
Client
Digital publishing · France
Role
Full-stack engineer
Surfaces
iOS · Android · Web · Admin
The brief

A French publisher wanted a single home for four very different formats — Manga, Roman, Comic and BD — readable in French and English, with a free tier, an all-access tier and per-category fan plans.

The difficult part was never the reader. It was money: Apple, Google and Stripe each have their own idea of what a subscription is, and readers move between devices constantly. The system had to give one answer to one question — is this person a subscriber, right now?

01

Reader apps

iOS and Android readers for EPUB and PDF with bookmarks, highlights, notes and progress sync.

02

Web reader

The same catalogue and subscription on the web, billed through Stripe.

03

Admin panel

Catalogue, volumes, authors, plans, coupons, home-feed builder, notifications and blog.

04

Platform API

One backend behind every surface — entitlements, reading progress, discovery and push.

System map

How it fitstogether.

Every surface talks to one platform core. This is the shape of the system as it runs in production.
iOS appAndroid appWeb readerAdmin panelPlatform coreFeathers APIEntitlementsCatalogueReading progressHome feedVial rewardsApp Store Server APIStripeFirebase pushS3 storageApple & Google sign-in
The hard parts

What made ithard — and how.

The problems that don't show up in a screenshot, but decide whether a product survives real users.
01

One entitlement, three billing systems

The problem

App Store purchases, Stripe subscriptions and promotional codes all arrive differently, at different times, with different failure modes.

The approach

Every source funnels into one transaction pipeline. A subscription only ever exists after a verified successful transaction — so the reader apps and the web never disagree about access.

StripeStoreKitEntitlements
02

Apple server notifications, handled properly

The problem

Renewals, failed renewals, expirations and redeemed offers come from Apple as signed payloads, often hours after the user's action.

The approach

Payloads are cryptographically verified, stored raw for audit, then routed by type and subtype to extend, pause or expire access. Purchases are re-verified server-side rather than trusted from the device.

App Store Server Notifications V2Signature verification
03

A Stripe state machine with no gaps

The problem

Web billing has its own edge cases — past-due invoices, card updates, cancellations mid-cycle.

The approach

Signature-checked webhooks drive an explicit state machine over invoice and subscription events, including past-due and payment-method recovery paths.

WebhooksIdempotency
04

Reading progress the server can trust

The problem

Progress feeds rewards, so a client reporting page 900 of a 200-page book can't be allowed to count.

The approach

Page totals are corrected per language on the server, out-of-range pages are rejected, and the reward system only accepts completions that come from the progress tracker itself.

Anti-abuseEPUB CFI
05

Random rails that still paginate

The problem

Shuffled home-feed rows usually repeat or skip items when you scroll to the next page.

The approach

Rails are shuffled with a seeded hash so the order is random per session but stable across pages — no duplicates, no gaps.

MongoDB aggregationSeeded shuffle
Inside the system

Everythingit does.

01Bilingual catalogue with multi-volume series
02Free, all-access and per-category plans with trial
03Coupons and promotional codes
04Bookmarks, highlights and notes
05Vial rewards — finish books, earn a free month or gift it
06Manual, automatic and hybrid home-feed sections
07Trending authors and best-sellers
08Broadcast and personal push notifications
Built with
Built with
01

Backend

Node.js · TypeScript · FeathersJS · MongoDB · Socket.io

02

Web & admin

Next.js · React · MUI · EPUB & PDF readers

03

Payments

Stripe · App Store Server API · In-app purchases

04

Platform

Docker · CI/CD · AWS S3 · Firebase Cloud Messaging

Building something like this?

Let’s scope yours.