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)

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
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.

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.

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.

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.

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.

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 |
Where this project sits in our history
- 2019
Business Intelligence ERP (Thailand)Business Intelligence sales reporting - 2021
MyFriendPet Super App Startup Consulting
2021Scal-eMarketing agency website redesign- 2022
Plani TravelPlani Travel - 2026
Outsourcify (internal product)We replaced two SaaS products with one platform built for our agencyYou are here
2026CSOLUXENext-Generation Presentation Management & Video Automation
2026Outsourcify proprietary SaaSNext-Generation WordPress Operations for Digital Agencies
2026Thai media groupPrice Comparison & Affiliate Content Platform
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


