Techsource Replaces Spend Reports and Renewal Calendars with One Governed Portal Techsource manages vendor relationships and software contracts for multiple departments. Contracts were recorded and transactions were logged, so the data existed. What was missing was a single interface that connected that data to the people responsible for acting on it.
In contract management, timing is money. A missed renewal window is not a formatting problem. It is spend the business did not plan for, because nobody caught the date in time.
The Challenge Every basic question needed a person in the middle:
Spend: finance built spend reports by hand.Renewals: operations kept a separate renewal calendar.Ownership and cost: knowing what Techsource owned, what it cost, and what was expiring meant asking someone.Before: a person in the middle of every question. After: one governed portal.
Why It Mattered No self-serve spend. Department leads could not check their own spend without asking someone else.Renewals depended on memory. Deadlines lived on a calendar someone had to remember to check.Requests stalled. Requesting a new contract or flagging a cancellation meant an email that could sit for days.No real access control. Sensitive spend data was either locked away entirely or visible to everyone.
What We Built Orbit by Datum Labs built the portal as a fixed-scope engagement on top of Techsource's existing PostgreSQL infrastructure. No migration, and no rebuild of what already worked.
Multi-tenant data layer: built on PostgreSQL with Drizzle ORM, with multi-tenancy structural from the first line of the schema rather than a filter added later.Organization dashboard: active contracts, spend, and upcoming renewals in front of the people who need them, with no export required.Spend and department views: finance opens a spend view instead of requesting one, and department leads see their own vendor activity directly.Renewals workspace: tracks term dates against real contract data, with reminders that fire automatically when a deadline is close.In-portal workflows: requesting a contract, flagging a cancellation, or starting a renewal runs through a structured workflow inside the portal.Role-based access: multi-role access with Google and Microsoft sign-in, so sensitive spend data is visible to the right people only.
How It Works 1. One governed data layer PostgreSQL (Neon, serverless, with a branch per environment) holds 19 tables, including contracts, vendors, users, attachments, and an audit log. More than ten generated columns compute contract status, expiry windows, and renewal flags directly in the database, and every insert and update is tracked in the audit log. Drizzle ORM provides a typed schema, migrations, and type-safe queries used by both the web app and the API.
2. The portal The web app runs on React Router 7 with React 19, server-side rendered routes, and TypeScript. It includes around 30 routes, 45+ UI components, multi-step contract forms, and 16 mutation modules, with a typed loader and action data flow. Users sign in through OAuth with Google or Microsoft, and no local passwords are stored.
3. Automated renewal reminders A Hono API runs as a scheduled cron service on its own Cloud Run service. It queries expiring contracts, sends templated reminder emails to contract owners through AWS SES, and logs every send in PostgreSQL.
Reminders fire against real contract dates, automatically.
4. Integrations Google Cloud Storage: contract attachments, uploaded directly from the browser through signed URLs.AWS SES: reminder and invite emails from a shared, templated email package.Zapier and Integry: webhooks, vendor sync, and customer-configurable automation flows.5. Platform and operations The codebase is a Turborepo monorepo with web and API apps and shared packages for the database, email, environment config, and UI. GitHub Actions runs CI on every push, builds Docker images, and deploys to Google Cloud Run staging and production, with web and API as separate services. Environment variables are validated through a shared typed package, with secrets managed in Cloud Run.
Portal Insights view with spend, departments, and vendor changes (sample data).
Tech Stack Techsource platform architecture.
Layer Technology Role Database PostgreSQL (Neon) 19 tables, generated columns, audit log, branch per environment Data access Drizzle ORM Typed schema, migrations, type-safe queries Web app React Router 7, React 19, TypeScript Portal UI, contract forms, dashboards API Hono Scheduled reminders and renewal notifications Auth OAuth (Google, Microsoft) Sign-in with multi-role access Integrations Google Cloud Storage, AWS SES, Zapier, Integry Attachments, emails, webhooks, vendor sync Platform Turborepo, GitHub Actions, Google Cloud Run Monorepo, CI/CD, staging and production
Before and After Area Before After Spend reporting Built by hand by finance Spend view opened on demand Department visibility Ask someone else Leads see their own vendor activity Renewals Calendar someone had to check Automatic reminders against real dates Requests and cancellations Emails that sat for days Structured workflows in the portal Access to spend data All locked or all visible Role-based access Data consistency Scattered records 13 entity types answer the same question consistently
Results Self-serve spend: finance opens a spend view instead of requesting one.Direct department visibility: department leads see their own vendor activity without going through anyone else.Reliable renewals: reminders fire against real dates, automatically, every time.Faster requests: contract requests, cancellations, and renewals run through workflows inside the portal.One consistent answer: thirteen entity types, including contracts, vendors, departments, and transactions, now answer the same question consistently.One governed portal: instead of a shared spreadsheet and a renewal calendar nobody fully trusted.Your data has been ready for months. If your users are still waiting on exports and emails, the missing piece is the layer between the data and the people who need it.