A subscription platform, rebuilt on infrastructure they own
Out of the no-code generator it was born on. Paid content is genuinely restricted, the archive moves without losses, and every staff action leaves a trace.


- Client
- Finanzamille Inc.
- Sector
- Subscription finance community · Rancho Palos Verdes, CA
- Services
- Web & App Development · GDPR & Privacy · Security Audit
- Online
- finanza1000.com ↗
News, courses, analysis documents, live chat and model portfolios, on a platform generated by a no-code service. Reviewing the code page by page, before writing a new line, turned up fifteen structural problems. The worst one: a decorative subscription that displayed a badge without protecting any content.
Non-paying users saw everything: the subscription showed a label, it didn't close a door.
Everything depended on the service that had generated the platform, authentication included.
Invitations and password resets came from a sender the client didn't control.
Subscription status was asked of Stripe from the browser, with no webhooks: a cancellation could go unnoticed.
No log of what publishers, moderators or role administrators did.
Every choice has a constraint behind it
The constraint
News, courses, documents and community were readable by any registered user, subscriber or not.
The choice
Two independent gates: the page stops before the database, and each server action answers «paywall» on its own.
Why
A visual overlay protects nothing: the text still ships inside the page and can be read from the source. And hiding a button doesn't close the endpoint that button writes to.
The constraint
Permissions lived in database rules, which the new data-access tool bypasses by design.
The choice
Permissions in the application, in a single service layer, with the database rules left on as a second net.
Why
The alternative was fighting the tool on every query and maintaining two security models that eventually diverge. The price is stated openly: no query outside the service layer. Two independent reviews then went looking for exactly those violations.
The constraint
Courses had to host directly uploaded video, «compressed». The existing file store keeps files but doesn't re-encode them.
The choice
Compression in the uploader's browser, before sending. No new video vendor, no new credentials.
Why
A specialised video service cost between $2 and $23 a month and included multi-quality re-encoding. The client ruled it out to avoid widening the set of vendors touching their data, and the trade-off was written down rather than discovered later: one quality for everyone.
The constraint
Live data stayed on the old platform for the whole build, and could not be written to even by accident.
The choice
A replayable migration: run once to develop against real data, identical to the final cutover run.
Why
A one-shot migration gets written under go-live pressure, in the single run you can't redo. The first pass already surfaced the surprises — columns authentication computes itself, rows pointing at users deleted years earlier — and the second starts from a tested procedure.
The constraint
A dashboard of usage statistics was needed: logins, courses watched, messages, subscriber trends.
The choice
Statistics built in-house on the activity log, with a daily rollup for the aggregate views.
Why
An external analytics tool installs in an afternoon and has better charts, but it would send every member's behaviour to one more vendor — on a platform whose own privacy notice says it doesn't profile. The price is that we write the aggregations ourselves.
Members-only area
Stripe subscriptions with checkout, billing portal and webhooks — absent in the previous version.
Editorial desk
Rich-text editor, Unsplash covers with photographer credit, comments at the foot of the article.
Realtime community
Chat, board, comments and replies that appear at once, with notifications on mentions.
Courses with video and files
Video compressed in the browser, PDF and Excel attachments, resume from where you left off.
One admin dashboard
Users, roles, subscriptions, documents, portfolios and statistics in one place, with every action logged.
0,2%
rows dropped when migrating the archive, all of them users deleted years earlier: none lost to a fault in the procedure
17
security problems found and fixed across two independent reviews, including an admin who could create an account with more power than their own
−84%
the weight of a course video after in-browser compression, measured on a real file: 29.3 MB down to 4.8 MB, in 5.6 seconds
Content no longer reachable without a subscription: blocked pages don't even read the data from the database
No dependency left on the no-code generator: authentication, email and AI services on vendors contracted by the client
Privacy notice, cookie policy and terms written from the code's actual behaviour, with sections for the EU, UK, California and Australia
Technologies
Other projects
Got a similar project?
Tell us where you're starting from. We'll reply with a clear proposal and realistic timelines, no commitment.
