Campaign & Submission Management Platform
2024 - Today
A multi-site submission platform built and launched solo in two months. 1,000+ monthly users.
- React
- Vite
- NestJS
- Apollo GraphQL
- Prisma
- PostgreSQL
- Chakra UI
My role: Sole developer
As the sole developer, I designed, developed, and launched a Vite React application for a major client in the UK within two months. This application, utilizing Apollo GraphQL for efficient data fetching and management, serves over 1000 monthly active users. I was responsible for the entire development process, ensuring a robust, scalable, and user-friendly application, delivered on a tight deadline. This project highlights my ability to manage full-cycle development independently while meeting high-performance standards and user engagement metrics.
The data model is profile-driven. Each site carries its own configuration record, and a campaign is a dated window over a set of sites and products, so what any given site is asked to submit is derived from its profile rather than hard coded per campaign. That keeps the schema stable as the configuration grows.
The submission flow is where the real engineering problem was. Values are genuinely per site for some product ranges, with a banded value acting only as a fallback, so a naive bulk action could silently overwrite live data with a placeholder. I changed the standard flow to pre-load each site's last submitted values as its starting state, and extended the same behaviour to bulk selections, so nothing resets by default and an editor always works from current data rather than from a default. Around that sit scheduled jobs for opening and closing reminders, a change request workflow with review states, CSV import for bulk data loading, Excel and PDF export, a rich text content section and a fully localised interface.
The backend is NestJS with Apollo GraphQL over PostgreSQL through Prisma; the front end is Vite, React, Chakra UI and Apollo Client, with typed operations generated from the GraphQL schema so a change to a resolver surfaces as a type error rather than a runtime failure. I built and launched the web application on my own and have led it since, through more than two years of release cycles.