Ridid Admin
Operator Back-Office Application
The operator-facing back office behind Ridid, the hospitality PMS. Not customer-facing: it is the control panel the team uses to run the subscription business, from onboarding and billing to support.
Development duration
2026
Role
Senior Frontend Engineer & UX designer
Tech stack
Vue 3, Vite, Pinia, Bootstrap; FastAPI, SQLAlchemy, MySQL; JWT, ReportLab; Docker, CI/CD.
84
Endpoints
248
Tests
2
Databases
~13.7k
Lines
Architecture: a separate app, coupled on purpose:
This is a separate standalone application, not a microservice of Ridid: a Vue 3 SPA front end and a FastAPI backend, each with its own repo, CI/CD pipeline, VM and domain, plus its own database (admins, audit log, invoices, pricing, referrals, OTAs). It integrates with the Ridid PMS mainly at the database level, which is precisely the coupling microservices are defined against, so I contained it deliberately: a second connection into Ridid's MySQL under a least-privilege user, SELECT on a handful of tables and UPDATE limited to two columns (the client's fee and subscription end date). Sharing the database over building a full event pipeline was a documented trade-off for a small team, and the least-privilege grant is what bounds the risk, an admin-side bug or compromise cannot corrupt live customer data. The one clean service boundary is impersonation: the panel issues a one-time code, but the redemption endpoint lives in Ridid's own backend, over a signed handoff.
Billing and invoicing:
PDF invoice and quote generation, Excel export, and a daily auto-invoicing scheduler, plus subscription tiers, per-client fees and a referral programme.
Impersonation and audit log:
One-click login into a client account for support: the panel issues a single-use code and Ridid's own backend redeems it over a signed handoff, so the trust boundary stays on the product side. Every admin action is written to an audit log.
More Work:
Since handoff the platform has grown with AI-assisted outreach, a support inbox and on-demand demo tenants, areas I will be working on going forward.