BOLD Tech Labscontact us
/ work / company-manager

COMPANY MANAGER - the back office for a services business

Running a small services company means invoices going out, invoices coming in, expenses on trips, employees on client engagements, vacation requests, withdrawals, and the paper trail behind all of it. Company Manager pulls that entire operation into one platform - a native iOS app backed by a fleet of focused cloud services - so the state of the business lives in one place, not scattered across spreadsheets, inboxes, and accounting exports.

sectorbusiness ops
typeproduct build
stackswift · typescript · firebase · react
statuslive
timeline2025–ongoing
/ problem

Small companies run on gluework

Small services companies run on gluework. Outgoing invoices are drafted in one tool, received invoices tracked in another, expenses photographed and forgotten, engagements and vacation days managed in whoever's head is nearest. The data exists, but it's fragmented - so questions like "what did this engagement actually cost us" or "which documents back this withdrawal" take an afternoon to answer.

The first version of this back office ran on Google Apps Script bolted to spreadsheets. It worked - until it didn't: no types, no tests, no isolation between concerns, and every new feature raised the odds of breaking an existing one.

The breaking point came when the business outgrew the scripts: adding employee engagements, vacations, and expense tracking meant wiring ever more logic into a single untyped codebase that nobody could safely change.

/ approach

Small services, one API, native in front

We rebuilt the platform as a set of small, independently deployable services behind a single API - and put a native app in front of it.

  • one service per concernInvoicing (outbound and inbound), expenses and trips, employees and engagements, vacations, withdrawals, documents, and company data each live in their own Firebase Functions service with their own Firestore data. A change to vacations can't break invoicing.
  • incremental migrationThe legacy Google Apps Script modules were ported service by service, each one verified against the behavior of the original before cutover, so the business kept running throughout.
  • money handled properlyAmounts are stored as minor units (cents) end to end - no floating-point accounting.
  • careful service compositionCross-cutting concerns compose instead of duplicating: a withdrawal automatically registers its paperwork with the documents service, so the audit trail builds itself.
  • native where it mattersThe primary client is a SwiftUI iOS app - the business runs from a phone - with a lean React web frontend for dashboard and settings work at a desk.
/ architecture

The shape of the system

The backend runs on Firebase Functions v2 (TypeScript, strict) with Firestore for persistence and Google Cloud Storage for receipts; the expense pipeline runs as a containerized Node.js service on Cloud Run where it needs to. Every request is authenticated with Firebase ID tokens, and data is isolated per company at the service layer. The web frontend ships as a static Vite build on Firebase Hosting; the iOS app is built and released through Fastlane.

/ outcome

What it delivered

  • 3 / 3 modules retiredThe legacy Apps Script modules - company, outbound invoicing, and inbound invoicing - fully retired and rebuilt as typed, tested Firebase Functions services.
  • 10 / 10 requirements liveEight backend services plus an API gateway in production, covering the full requirements roadmap.
  • 2 clients, one apiThe native SwiftUI iOS app the business runs on day to day, plus a React web dashboard for desk work.

Company Manager is developed and operated by BOLD Tech Labs in Bucharest.

stack · swiftui · typescript · firebase functions v2 · firestore · cloud storage · cloud run · firebase auth · firebase hosting · fastlane

Running your business on gluework?

Platforms, integrations, and the operations behind them - tell us where the spreadsheets hurt.

start a conversation →