← All projects
ProductsClient work, private·Shipped

Multi-Tenant Sponsorship CRM

Gives a school's sponsorship team one shared place to work: a pipeline of prospective sponsors, an inventory of sellable placements, contracts that mark those placements sold, and renewal reminders that schedule themselves. In use with the school's real data since August 2026.

Period

Jul–Sep 2026

Role

Contract developer, sole engineer since taking over a prototype

Built for

BlueSteel AI Solutions

Type

Client work, private

Tools

Node.jsExpressSQLiteReactViteTailwind CSSPythonRender
Source: private

What it is

A private high school sells sponsorships to local businesses: signs at games, logos in programs, that kind of thing. When I started, their prospect list was a spreadsheet. The CRM gives the team a pipeline of prospects, an inventory of the placements they can sell, contracts that mark those placements sold, and tasks that create themselves when a renewal is coming up. It's white label, so each school is a tenant and the same deployment can serve more than one.

What I inherited and what I added

I took it over in July 2026 as a working prototype from another BlueSteel engineer. Tenancy, login, the contract automation and nine pages were already there, with 34 test assertions. I've been the only engineer on it since.

The biggest pieces I added: an import pipeline that takes the school's spreadsheet to JSON to the database, with a fingerprint check that proves a session changed nothing; a staff role that can switch between tenants; the production setup on Render with a persistent disk, a health check, a backup script and two rehearsed restores; account self service (remember me, password change, security question recovery); and a pipeline view that stays usable at a few hundred prospects, with the filters kept in the URL. The test suite is at 144 assertions now, most of them about tenant isolation and the contract automation.

How it's built

Express and SQLite in WAL mode on one Render instance, with React and Vite in front. Every table carries an org id that gets set in exactly one place in the auth middleware, and that's the whole tenancy story: no row level security, no second schema. Auth is a JWT in an httpOnly cookie. Email goes through Resend and is built and tested but not switched on in production yet.

Status

The school has run its sponsorship program on it with real data since August 2026. There's no billing in it, and email notifications are still off. The product belongs to BlueSteel, so there's no source link and no screenshots of real data.

Illustration of the sponsor pipeline board
Illustration of the sponsor pipeline board
← PreviousChessReflexNext →Linesight