Property developer·2023 to present
A custom internal request and approval platform
An ageing custom system held years of internal approval rules. We rebuilt it as a new production platform and connected it to the vendor portal.
- Sector
- Real Estate, Internal Operations
- My role
- Full-stack developer across workflows, integrations, and production support.
- Stack
- Laravel, Vue, Inertia, Tailwind, MySQL, REST APIs, queued workers, AWS
In 2023, our team started replacing a property developer's ageing internal request and approval system. The old application had years of business rules built into it, so replacing it meant understanding those rules properly, not simply rebuilding the screens with a newer stack.
We launched the new platform and retired the old one. I have worked across the build and its ongoing production support as a full-stack developer.
The old system knew how the company worked
Different operational and financial requests asked for different information and followed different approval paths. Underneath those differences, they shared the same organisation structure, access rules, notifications, attachments, and need for a reliable history.
That made an off-the-shelf replacement a poor fit, but it also meant we had to be careful not to rebuild every workflow as an isolated module. The common approval behaviour needed to be reusable without flattening the real differences between requests.
A shared approval system with room for exceptions
We built a shared request and approval layer. Configurable rules decide where a request goes based on its context, role-based access controls who can see or administer it, and notifications bring in the next person responsible for a decision.
Long-running business processes always have exceptions, so the platform also supports the cases that do not follow the happy path. Important changes and decisions are kept in the activity history, making it possible to understand how a request reached its current state.
New workflows can reuse the approval routing, access control, attachments, notifications, and history while keeping their own fields and validation. My work covers that shared layer as well as the request-specific features, from the Vue and Inertia interface through the Laravel backend, data model, queued jobs, and production fixes.
The rest of the operational work
Employees and approvers use one place to submit and follow requests, while processing teams get views shaped around their role. Administrators manage access, approval rules, and the reference data used by the forms.
Dashboards, reports, exports, and operational logs make the platform useful beyond a single request screen. They also give the support team enough information to investigate problems without going straight to the database.
Connecting the vendor portal
The platform is the internal counterpart to the vendor payment and contract portal. Vendor requests begin in that portal, then the records needed for review are sent into the internal system. Relevant status changes go back to the vendor side.
The integration runs in the background and records its results. If a handoff fails, the support team can see and recover it instead of leaving the vendor and the internal team with different versions of the request.
In production since 2023
The replacement has been in production since launch, and the previous application has been retired. We continue to add workflows and adjust existing ones as the client's operation changes.
My part of that work includes full-stack feature delivery, the shared platform services, the vendor integration, releases, and production support.