We replaced two SaaS products with one platform built for our agency

CRM, project delivery, QA and AI-ready documents in one operational system

Client

Outsourcify (internal product)

Date

2026

Client

Outsourcify (internal product)

Outsourcify PM — Custom Project Management & CRM Platform

Outsourcify PM is the custom operational backbone running our agency. It replaces disconnected HubSpot and Teamwork workflows with one application designed around the agency's actual sales, project coordination, development, QA and management processes. Around forty team members use the shared workspace to move work from an initial opportunity through planning, delivery, acceptance and long-term maintenance.

Rather than reproduce every function of a generic SaaS suite, the product enforces Outsourcify's operating model. Nuxt 4 provides the application layer, Node.js and Prisma encode structural rules over MariaDB, and Google Workspace remains responsible for identity, document storage and project communication. A Drive-to-Markdown pipeline makes the document archive searchable and ready for AI classification, lead capture and pre-sales synthesis, while Marker.io feeds annotated bug reports directly into the QA workflow. The result is one focused system shaped around how the agency actually works.

Results

~40agency users supported across sales, delivery, QA and management
53Klines of TypeScript and Vue application code
149API route handlers across the Nuxt monolith
87Vitest files covering domain rules and integrations

Challenge

Running sales and production across generic platforms created several connected problems:

  • Split operational records: prospects lived in HubSpot while projects, tasks and time logs lived in Teamwork, creating duplicate entry and incomplete context.
  • Commercial exposure: delivery teams need hours and scope, but not internal rates, margins, invoice calculations or unrestricted proposal access.
  • Loose task structures: generic nesting can allow estimates or time logs at contradictory levels, making project progress unreliable.
  • Inconsistent delivery states: flexible labels created status sprawl and made it harder to understand whether work was in development, QA, UAT or ready for production.
  • Disconnected files and feedback: project knowledge stayed trapped in documents, while external QA reports still had to be re-entered as tasks.
  • Historical continuity: years of project and task history needed to survive the move away from Teamwork.

Solution

The platform combines CRM, project planning and delivery control in one role-aware data model. Leads become projects without re-entering client and contact data. Projects contain phases and recursively nested tasks, while Prisma rules ensure that only leaf tasks accept manual estimates and time logs; parent values are calculated from their descendants. A fixed ten-stage board carries work from estimation through development, QA, client UAT and production. Open QA or UAT feedback returns a task to Feedback to Fix and blocks premature progression until it is resolved. Google SSO removes local application passwords, while a nine-type background job system provisions separated Drive folders, synchronizes Chat spaces and runs document analysis without blocking a user action. OpenAI outputs are schema-validated and always reviewed by a person before CRM data is created. Signed Marker.io webhooks turn annotated feedback into correctly routed tasks, and scripted imports preserved historical HubSpot and Teamwork data.

Tools

Nuxt 4, Vue 3, Prisma, MariaDB, Google APIs, OpenAI and Marker.io

Team

Internal product team — Benoit, Kwan, Ont and Jay

Methodology

Human-in-the-loop AI, asynchronous integrations and audited workflow gates

Tools

Nuxt 4, Vue 3, Prisma, MariaDB, Google APIs, OpenAI and Marker.io

A project control center built around delivery context

Each project brings together ownership, roster, progress, comments, Drive and Chat readiness, recent activity, environments and repository access. Operational and commercial folders remain visibly separate, while role-aware controls determine who can open each resource. The activity stream provides a readable record of task creation and status changes without forcing managers to reconstruct events across tools.

OSC PM Tool overview with project facts, team, storage, comments and activity

CRM with deliberate commercial separation

Leads move from initial qualification through analysis, proposal and a final Won, Lost or On Hold outcome. Access is restricted to the sales, project-management and administrative roles that need it. Multiple contacts can belong to one client, with primary-contact and former-staff flags. The operational database follows an hours, not money rule: rates, margins, invoice calculations, proposals and contracts remain in restricted Drive folders. A single static deal value supports pipeline reporting without exposing commercial mechanics to delivery teams.

Recursive planning with rules that protect the totals

Projects are organized into phases, task lists, tasks and subtasks. Only terminal leaf tasks accept manual estimates and direct time logs. Container tasks roll up estimate and logged-hour totals from all their descendants, and the backend rejects time against a parent or the addition of children to a leaf that already contains logged work. This turns hierarchy from a visual convention into an enforced data rule.

OSC PM Tool hierarchical task lists grouped by project team

Detailed work records without losing project context

Opening a task keeps the surrounding hierarchy visible while presenting status, due date, priority, estimate, assignees, comments and supporting material in a focused panel. Team members manage their own manual time entries; authorized PMs can back-fill for another person, with both the worker and the person who created the record retained for auditability. Soft deletion preserves logged hours, discussions and historical links.

OSC PM Tool task hierarchy and detailed task side panel

QA and UAT expressed as visible workflow gates

The fixed board uses To Estimate → Backlog → To Do → In Progress → In Discussion → In QA → Feedback to Fix → UAT → To Deploy → Done. Feedback raised by internal QA or client acceptance immediately returns the work to Feedback to Fix and alerts the assignee. While an item stays open, the API prevents the task from advancing into testing, deployment or Done. The board therefore communicates both progress and the quality conditions required for release.

OSC PM Tool Kanban board showing development and feedback stages

Google Workspace as an integrated infrastructure layer

Identity

  • Google OAuth single sign-on
  • No application passwords stored locally
  • Access aligned with agency accounts and roles

Drive

  • Separate operational and commercial folder trees
  • Background provisioning with visible readiness states
  • Restricted links surfaced only to authorized roles

Chat

  • Project space created when operational work begins
  • Membership synchronized with the project roster
  • Targeted mentions and deep links instead of broad notification noise

An AI-ready document layer, not an AI gimmick

The platform recursively indexes project Drive folders and converts Google files, Office documents, PDFs, emails, Markdown, text and CSV into clean Markdown. Fingerprints prevent unnecessary reprocessing and Drive remains the source of truth. OpenAI then classifies and summarizes each document, extracts dates and entities, and records confidence signals. The same foundation powers reviewed lead capture from forwarded emails, editable pre-proposal intelligence reports and smart Drive filing suggestions. The AI drafts; people decide.

Marker.io feedback enters the QA loop as ready-made work

A signed Marker.io webhook routes each issue to the correct project phase, preserves reporter and priority data, re-hosts the annotated screenshot and adds browser, operating-system, console and network context to the task. Idempotency prevents duplicate deliveries, and new issues land directly in Feedback to Fix. External bug reports therefore enter the same visible quality gate as internal QA, without copy-and-paste administration.

Operational awareness beyond task assignments

Team Vibe adds a lightweight agency-presence layer to the same workspace. People can communicate their current mode — focusing, coding, designing, reviewing, testing or asking for help — alongside role, language and technology context. It complements formal task ownership with the human availability signals that project coordinators use throughout the day.

OSC PM Tool Team Vibe directory with operational focus indicators

Custom workflow sovereignty instead of generic flexibility

Operational area HubSpot and Teamwork split OSC PM Tool
Client lifecycle Records divided between sales and delivery tools One client and project history from lead to maintenance
Commercial access Platform-specific filters and duplicated documents Hours in the app; sensitive commercial documents isolated in Drive
Task structure Flexible nesting with inconsistent logging conventions Leaf-only estimates and logs with computed parent totals
Quality process Status labels and checks configured per project One gated ten-stage QA/UAT workflow
Communication Broad notifications requiring manual filtering Role-targeted mentions with direct task links
Auditability Events reconstructed across separate platforms Project activity, comments and status history in one context

Contact us

Let’s find the right solution for your business.

We partner with product teams and founders to design, build, and ship software that lasts.

Talk to our team