Skip to content
Carlos ApaoBook a 20-min fit call

Work

One product of my own and three builds for clients. Three of them connect to HighLevel through its API. Each shows the developer side of the job: the part that starts where HighLevel's own settings stop.

Suppliq

My own product: a SaaS for small retail businesses in the Philippines, live in production. I built the app and its HighLevel account.

Tools

  • Astro
  • React
  • TypeScript
  • Supabase
  • HighLevel API v2
  • Rust
  • Vercel

37,000+ sales through one system for the till, the stock room, payroll and the tax office

The problem

Small shops in the Philippines run sales, stock, staff pay and tax compliance on separate tools or on paper, and the internet drops in the middle of a sale.

What I built

  • A point-of-sale that keeps selling offline and syncs later without ever recording a sale twice. Barcode scanning, cash, GCash and split payments.
  • Tax-compliant receipts: invoice numbers that can never be reset, per-branch end-of-day readings and books-of-accounts exports.
  • Multi-branch stock transfers, a central dashboard and franchise reporting.
  • Staff clock-in, shift scheduling and payroll with the legal overtime rates.
  • Suppliq's own HighLevel account: the pipelines, workflows and automations that move each sign-up from trial to paying customer.
  • The app connected to that account through HighLevel API v2: lifecycle tags, a daily sync and a webhook trigger the onboarding and win-back sequences.
  • A small native Windows service so receipts print silently from the browser.

Result

Counted as of September 2026: real sales only, with refunds, voids and internal or demo accounts excluded.

NitroAxentra Flow

Client work for NitroAxentra, a HighLevel agency that runs its own clients on the platform.

Tools

  • React
  • TypeScript
  • Supabase
  • HighLevel API v2
  • Vercel

HighLevel pipelines as a shared task board, with a portal for every client

The problem

An agency running its clients on HighLevel had internal tasks, client onboarding and client messages spread across HighLevel, email and spreadsheets.

What I built

  • Connect the agency once, pick which HighLevel sub-accounts become clients. Logo, contact details and time zone come across.
  • A HighLevel pipeline opens as a board: stages are columns, opportunities are cards. Moving a card updates HighLevel through a queue that batches rapid moves and retries temporary failures.
  • Appointments from HighLevel calendars, client email through HighLevel conversations, and HighLevel logins created for a client without duplicates.
  • One portal link per client: progress, document uploads, requests, messages and meeting booking.
  • Role-based access enforced in the database. HighLevel tokens stay in an encrypted vault and never reach the browser.

Result

Live in production: the agency's team runs client work on it, and every client gets their own portal link to follow their project.

Social Media Agency Platform

Client work for the same HighLevel agency: its social media side, built as its own app.

Tools

  • React
  • TypeScript
  • Supabase
  • HighLevel API v2
  • OpenRouter
  • Replicate
  • Apify
  • Next.js
  • Vercel

From a Google Maps search to an approved, scheduled post, in one agency workspace

The problem

A social media agency needed one place to find new clients, produce posts in each client's brand voice, get them approved and publish them.

What I built

  • Prospecting: crawl Google Maps by niche and area, score each business's website and local search presence, write a tailored pitch and look for the owner's contact details on their website. CSV lists can be imported and run through the same scoring.
  • A hub per client with their brand kit: colours, logos and brand voice. The colours and voice shape each AI generation.
  • An AI studio that drafts a month of posts at a time, with images and short videos, for the team to edit and regenerate.
  • A content calendar and an approval queue, with publishing to the client's HighLevel account.
  • Funnels generated per client. Every lead is saved, pushed to the client's HighLevel as a contact, and flagged for the team if the push fails.
  • Workspace roles enforced in the database. API keys for the AI and data providers stay in an encrypted vault and never reach the browser.

Result

Live with clients: the agency runs its social media work for clients in it.

Calling CRM

Client work for an outbound call team.

Tools

  • React
  • TypeScript
  • Supabase
  • PostgreSQL

A calling CRM that hands each agent the next lead, and never the same lead to two agents at once

The problem

A team calling from their own phones needed to split large lead lists across agents, keep two agents off the same person, and see who reached whom.

What I built

  • Teams of owners, admins and agents, who join by invite code. Every table is scoped to its team in the database.
  • Lead lists imported from CSV, with each phone number matched to a country, and any number it had to guess flagged as a guess.
  • A shared queue: an agent taps "next lead" and the server hands out one lead at a time, so no lead is ever worked by two agents at once. Admins can release a lead an agent left stuck.
  • Call outcomes from admin-defined dispositions, which decide whether a lead comes back for another try.
  • Inbound callers looked up and logged against their lead.
  • An admin dashboard with the team's connect and conversion rates, activity per campaign and per agent, and an agent screen that installs on a phone.

Result

Live in production: the client's agents work their lead lists and log every call in it.

Have something like this in mind?

Tell me what you need on a 20-minute call, and I'll tell you honestly whether I'm the right person.

Book a 20-min fit call