- Years
- 2025 - PresentActive
The system an influencer-marketing agency runs its billable work on. Staff manage clients, brands, creators and MCNs as records rather than logins, and take each campaign through brief, quotation, bookings, contracts, submissions, acceptance and finally P&L. A FastAPI backend on SQLModel and asyncpg with Inngest for background work, a Next.js 16 marketing site, and a Vite admin, sharing a UI package and TypeScript types generated straight from the API's OpenAPI schema.
What I built
- Built the contract module end to end: Contract and ContractLineItem models, fee maths, a contract-number generator, line items defaulted from the selected bookings, and Party A scoped to the campaign's organisation with the missing legal-entity fields surfaced before anything is generated.
- Designed the document engine behind it - docx templates with a full-screen template editor, presigned upload and download, client-side docx fill, and an in-app document viewer - so a contract is produced from campaign data instead of retyped in Word.
- Built the finance tail: liquidations with draft and detail panels wired into the contract view, a payments panel with installment plans and recorded payments, and a reports pipeline dashboard over the whole flow.
- Built campaign management - inline missions, campaign cloning as a draft, multi-status filters, evaluation templates and criteria managed from the campaign edit form, and a dashboard action queue.
- Built creator management with enrichment signals and snapshots feeding an internal creator score, plus the legal and financial identity fields each creator needs before they can be paid.
- Introduced organisation tenancy with its admin UI, and multiple company profiles so the agency can pick which legal entity signs a given contract.
- Localised the admin into Vietnamese and did an accessibility pass across the site - ARIA roles and keyboard navigation.
Stack
- Python
- FastAPI
- SQLModel
- asyncpg
- Alembic
- Inngest
- PostgreSQL
- Next.js 16
- React 19
- Vite
- React Router v7
- Tailwind CSS v4
- Base UI
- TanStack Query
- Zustand
- OpenAPI codegen
- Turborepo