Member platforms age in their own way.

The client is a Portuguese national travel association. Their member platform — the website, the back-office, the member-restricted areas — had grown over years of incremental change. The brief: corrective and evolutionary maintenance, with the platform staying reliable as the tourism sector itself shifted around it.

This is a different shape of engagement to a startup MVP. The constraint isn't speed — it's continuity. The platform has to keep working through library upgrades, language version bumps, and the kind of regulatory changes that ripple through tourism.

What we shipped, in order.

A back-office connected to Mailchimp; PDF export for member documents; member management; billing administration; asynchronous queues for the long-running tasks; member-restricted areas; AWS S3 integration for member-uploaded assets; user and permission management.

The work was paced for a non-technical customer. No surprises in the release notes. Every change came with the documentation the in-house team would need if Runtime wasn't there.

A boring stack on a deliberate substrate.

Member platforms have small audiences and long lifecycles. The stack reflects that — proven, supported, the kind of choices that don't trip an in-house team three years later.

Ruby on Rails Backend
PostgreSQL Database
Heroku Hosting
Mailchimp Email
AWS S3 Storage
GitHub CI / CD

Four years, no drama.

The engagement ran from 2016 to 2020 — four years of steady evolution. The platform didn't fall over during peak booking seasons, the back-office grew with the membership, and the in-house team always had what they needed to step in.

Handed back, still serving members.

The codebase is theirs. The platform is still serving members. Long engagement, clean handover.