Home About Experience Projects Case studies Resources Articles Briefs Playbook Tools FAQ How we start Security Get in touch
Available for hire

Project portfolio

Everything I've built and shipped.

A deeper look at the products I'm building solo, the client work I've delivered, and the operations I've automated. Full technical detail included.


Built solo

My products

Four production apps I designed, built, and now operate on my own. All started in November 2025 and are live.

Kabuhayan Private
The operating system for community lenders in the Philippines.

Solo founder, engineer, and operator · building since April 2026

A multi-tenant business-to-business platform that SEC-registered Philippine lending companies run their whole operation on. Kabuhayan is a platform, not a lender; each partner is the lender of record under the Philippine lending and financing company laws (RA 9474 and RA 8556). It turns origination, servicing, collections, capital, and compliance into one auditable system.

What it does

  • Multi-tenant partner portal with 9 subscription tiers, from solo lenders to multi-branch operations
  • Full loan lifecycle with origination, servicing, repayment schedules, and an interest and fee engine
  • Collections operations with collector assignment and field workflows
  • Capital build-up (CBU) and contributor (CLIP) programs plus an investor trickle-back engine
  • An Agimat XP gamification layer
  • Built-in regulatory compliance for Truth in Lending EIR/APR disclosure (RA 3765), Data Privacy (RA 10173), and Anti-Money-Laundering (RA 9160)
  • Append-only audit logging across every data change

How it's built

  • Next.js (App Router) and React with TypeScript
  • Supabase (PostgreSQL) with row-level security across 80+ tables for hard tenant isolation
  • Business logic in Postgres RPCs
  • PayMongo payment rails
  • 565+ automated tests (Vitest) with ADR-driven architecture and disciplined migrations
  • Deployed on Vercel
  • Built solo with a spec-driven, agentic development workflow
Public site paused
Paluwagan Private
A modern, no-custody take on the Filipino paluwagan.

Solo founder, engineer, and operator · building since June 2026

A consumer app that digitizes the traditional Filipino rotating savings and credit association (ROSCA). Members form circles, contribute each period, and take turns receiving the pooled payout. Built around a no-custody design so the app never holds member funds; it coordinates and records while money moves between members.

What it does

  • A full rotation lifecycle engine (circle activation, period contribution, closing, and disbursement)
  • No-custody architecture
  • KYC onboarding pipeline
  • Dispute resolution system
  • Rate limiting and append-only audit logging
  • Multi-language support (i18n)
  • A notification system for contributions, payouts, and circle events
  • A marketing site with SEO and a BIR-compliant business QR

How it's built

  • Next.js and React with TypeScript
  • Supabase (PostgreSQL) with circle-scoped row-level security
  • RPC-driven rotation logic
  • Deployed on Vercel
Public site paused
Poster Live
AI-assisted, on-brand social content at team scale.

Kabuhayan Marketing Suite · Solo founder, engineer, and operator · building since April 2026

A multi-tenant SaaS that helps small teams go from idea to consistent, on-brand marketing content without a full design and copy pipeline, keeping voice and visual rules intact across output.

What it does

  • AI-assisted content generation with brand voice and visual rules enforced
  • Multi-tenant team accounts with role-based permissions
  • A full subscription lifecycle with trial-to-paid, downgrade scheduling, and usage metering
  • Self-serve partner onboarding
  • A transactional email system with canonical templates

How it's built

  • Next.js and React with TypeScript
  • Supabase (PostgreSQL) and Vercel
  • PayMongo billing integrated end to end including webhook handling
  • Security hardened with SSRF protection, CSP, rate limiting, and IDOR fixes
EA Copilot Live
The tool version of the executive-support work I offer.

Solo founder, engineer, and operator · building since May 2026

An executive-assistant decision-support app that productizes my own EA craft. It turns the judgment calls of high-level support into a system an assistant can lean on. It closes the loop on this portfolio: I built the tool version of the work I'm offering you.

What it does

  • Gmail OAuth with calendar read access for unified inbox and schedule context
  • Sandboxed inbox rendering for safe HTML email display
  • Advanced reporting
  • A Board Builder for organizing priorities and decisions
  • A responsive information architecture

How it's built

  • Next.js and React with TypeScript
  • Hardened Supabase auth on Vercel
  • Gmail and Google Calendar API integration

Delivered for clients

Agency and brand projects

As Producer and Project Manager at Foxhole QA (Jan 2020 to Dec 2023), I led delivery on 30+ digital projects for global agencies and brands, spanning websites, mobile apps, web AR/VR, e-commerce, and campaigns. I owned scoping through launch: planning, backlog, user stories and acceptance criteria, budgets, vendors, and cross-functional teams, applying Agile, Scrum, or Waterfall to fit each project.

Fitness and lifestyle digital products.

XPASSXPlusPure BarreStretchLabs

Web3 and interactive game experiences.

Jimmy the MonkeyDookey Dash Unclogged
Google

Creative and product experiences.

Creative LabsTranslateVoice

Communications app features.

Call featureText featureInternational & local

Premium brand and immersive/AR builds.

Coke StudioStarbucksCoachellaPizza Hut WebARHBO Max

Global brand campaigns and interactive.

FlexportYouTube FanFestGoogle SecurityFooty Skills LabPrimasun

Websites and platform migrations, including a Drupal 9 migration.

Stone BrewingAvidity BiosciencesAmWinsEmpire CatUnspokenSymphony

Enterprise B2B interactive.

BroadcomLumenIBM Partner EcosystemKyndryl

Healthcare and pharma marketing.

INGHizentraIDELVIONCardinal Health

Tools and methods

JiraConfluenceTempo Agile / Scrum / WaterfallTrelloAsana Monday.comSmartsheet

Systems I built

Operations and automation at Plan Left LLC

At Plan Left LLC (Jan 2024 to Apr 2026), a Nashville digital marketing and web development agency, I was the operational backbone for senior leadership across 15+ client accounts and an internal team of 10+. As Senior Executive Assistant, I did more than support the work. I designed the systems and automations the agency ran on.

1Project workflow system

A delivery system the whole agency ran on

Problem
Work moved across 15+ accounts with no shared structure, so status and priority were hard to read.
What I built
An end-to-end project workflow in Structure PPM via Tempo, with boards, swimlanes, and staged pipelines mapped to how each team actually delivers.
Result
One consistent system for planning and tracking every project, with clear ownership and stage at a glance.
2Automated reporting

Weekly utilization on autopilot

Problem
Weekly utilization and status reporting ate hours of manual work.
What I built
Google Apps Script automations that pulled and aggregated Jira and Tempo data into weekly utilization reports.
Result
Cut manual reporting time by several hours every week and gave leadership a reliable weekly view.
3Calendar-to-ticket automation

Time and meetings, tracked as work

Problem
Meetings and commitments lived in Google Calendar, disconnected from where the work was tracked.
What I built
Automation that turns Google Calendar events into actionable Jira tickets, so time and dates are captured against the right project.
Result
Meeting time became trackable work, with less manual ticket entry.
4PTO automation

Leave requests that route themselves

Problem
Time-off requests were manual to collect, approve, and track.
What I built
A Google Forms PTO flow that notifies the right people and converts each request into a Jira ticket for tracking and approval.
Result
A single, visible trail for every leave request, with no manual re-keying.
5Meeting intelligence

Transcripts turned into action

Problem
Decisions and action items from meetings were lost in long transcripts.
What I built
A flow that takes Fireflies meeting transcripts and turns them into connected, relevant Jira tickets tied to the right work.
Result
Meeting outcomes became tracked tickets instead of forgotten notes.
6Partner data automation

Data moving cleanly in and out

Problem
Data flowing to and from a partner's application needed manual handling and was error-prone.
What I built
Automations in Make (make.com) that route incoming and outgoing data on the partner's application reliably.
Result
Cleaner data movement with less manual work and fewer handoff errors.
7Financial automation

Income and expense, tracked and projected

Problem
Leadership needed one clear financial picture, with expenses categorized and a read on what was coming.
What I built
QuickBooks automation that tracks income and expense, categorizes each expense, and projects incoming income and expense from trend and period-over-period comparison. Monthly reporting also pulls from Stripe.
Result
Supported leadership review of $150,000 in monthly revenue with accurate, categorized, forward-looking figures.
8SOP and knowledge wiki

A department's worth of documented process

Problem
Recurring work was ad hoc, inconsistent, and lived in people's heads.
What I built
An entire internal wiki holding departments' worth of SOPs, runbooks, and process documentation.
Result
Reduced manual effort and gave the team one trusted source for how work gets done.
9CRM and operations backbone

One source of truth for client data

Problem
Client and project records were spread across systems.
What I built
Standardized records across HubSpot, GoHighLevel, and Jira, plus invoice, vendor payment, and expense tracking with accounting.
Result
Clean, current data leadership could act on.
10Inbox and calendar ownership

Leadership prepared for every engagement

Problem
Leadership was buried in email and scheduling across 15+ accounts.
What I built
Full inbox and calendar ownership with drafting, triaging, and gatekeeping.
Result
Inboxes held at zero and leadership prepared for every engagement.

The automation library behind those systems

Every system above runs on rules I designed, built, and maintained myself. The inventory below is grouped by what each set of automations actually does for the team, rather than listed as rule names.

Rule names, ticket keys, client codes, and instance URLs are withheld here. The descriptions are the work.

40+Jira automation rules, scheduled, triggered, and manual
9ScriptRunner Groovy jobs and event listeners
8Google Apps Script integrations across Forms, Sheets, and Calendar

Whole engagements scaffolded in one click

A manual trigger on a template ticket generates the entire structure for a new piece of work, then deletes its own trigger ticket so nothing is left behind.

  • A full advertising iteration builds one epic plus 28 child tickets, half-iterations run off their own variant
  • A website engagement builds a five-phase delivery checklist, from onboarding and audits through discovery, content, design, and technical architecture
  • A new contract builds a standardized onboarding epic covering operations, branding, marketing, and hours reporting, with documentation links and due dates already set

A new engagement is stood up in seconds, structured identically every time, instead of a manager hand-building dozens of tickets.

Recurring work that schedules itself

Anything that repeats was moved off human memory and onto a rule.

  • Monthly and quarterly ticket sets generate against the right account component, opening two weeks before they are due
  • Date-window queries roll quarterly check-ins forward automatically, so each quarter's tickets appear without anyone creating them
  • The monthly newsletter clones from a template with account fields filled in on the fly
  • Five recurring team syncs generate weekly, and eight company holidays generate four weeks ahead

Nothing recurring depends on someone remembering it.

Quality gates enforced by the system

Review standards stopped being a convention people had to follow and became something the tracker applied on its own.

  • Every new ticket receives a QA checklist on creation, with the ticket types that should not have one excluded by rule
  • Reopening a ticket resets its completed checklist items so re-review starts clean instead of inheriting old ticks
  • Moving a ticket to Ready for QA adds two days to the due date, so review has real room rather than eating the deadline
  • Epics still open at the twelve-month mark transition to Ready for QA automatically

Escalation that fires before work goes late

Notifications target the one person who can act, in the channel they already live in.

  • The assignee is alerted when a ticket sits in Ready for QA longer than 24 hours, and again when it goes overdue
  • Users are alerted when they are mentioned in a ticket comment
  • The reporter is warned when time is about to be logged past the remaining estimate, or when an original estimate is changed

Field-dependency enforcement with accountability

A scripted listener that catches incomplete ticket configuration and routes it to the person responsible, instead of into a queue nobody reads.

  • Detects tickets missing the required sprint, assignee, and due-date combinations
  • Reads the ticket changelog to work out who last edited those fields, then names them in a comment listing exactly what is missing
  • Posts to Slack behind a recency check, so a burst of edits cannot spam the channel

Bad data gets corrected by the person who created it, usually the same day.

Stand-ups generated and delivered

A scheduled script that replaces the daily status round-trip.

  • Direct-messages every team member each morning with their Blocked, In Progress, Overdue, and Due Today tickets
  • Arrives in a ready-to-post format with clickable ticket links and due dates
  • Skips anyone with no active work, so the message only lands when it is worth reading

Intake forms wired straight through to tickets

Requests that used to arrive as email now enter the system as tracked work.

  • A time-off request form logs to a response sheet and opens the corresponding ticket
  • A client support request form logs to a sheet, opens a ticket, and notifies the team in Slack
  • Both were built as custom scripts against the form responses rather than off-the-shelf connectors

Requests stop living in inboxes and start carrying an owner and a due date.

Reporting leadership can act on

Scripted pulls that turn tracker and time data into the numbers the business actually runs on.

  • A weekly client utilization report computing billable hours per client and burn rate against contracted hours
  • An overview of active tickets, statuses, and workload across the team
  • Ticket health monitoring that flags overdue, stale, and SLA-breaching items and reschedules where appropriate
  • Reopened tickets exported on a schedule so rework can be reviewed as a trend, plus a subscription tracker reconciling accounting data against the card each one bills to

Paid tooling replaced with code I own

Two workflows running on a third-party automation platform were rebuilt in-house.

  • A calendar integration that watches an eight-person meeting calendar set and creates tickets from the events on it
  • A meeting-transcript sync that lands summaries and action items onto the right tickets
  • Both rewritten as maintained scripts rather than vendor-hosted flows

The workflows became things the team could read, debug, and change without a subscription in the way.

Beyond the systems: the executive support I owned

The day-to-day work that runs alongside the automations, carried across 15+ accounts and a team of 10+.

Email managementDrafting, triage, and gatekeeping to inbox zero.
Calendar managementScheduling and conflict resolution across accounts.
Support managementHelpdesk and client support via Freshdesk and Freshchat.
Project managementScoping, backlog, and delivery across 15+ accounts.
Website buildsCoordinating and shipping client websites end to end.
Content writingCopy and documentation kept on brand and clear.
Design and creativesOn-brand visuals and assets in Figma and Canva.
Accounting and billingInvoicing, vendor payments, and expense tracking.
ReportingUtilization and financial reporting for leadership.

Tools

Structure PPMTempoJiraConfluence Google Apps ScriptMake (make.com)Google FormsFireflies Google CalendarQuickBooksStripeHubSpotGoHighLevel

Operations demos

The systems I build, rebuilt with invented data

Client work stays confidential, so these are faithful rebuilds of the patterns I run: the same structure, rules and checks, with a fictional company, fictional accounts and fictional numbers. Open them, download them, break them.

Demonstrations with invented data. Every company, person, and figure is fictional.

Preview of the queue diff demo, invented data
1Queue diff

Every morning starts from yesterday's copy

Problem
Shared daily queues were worked from memory, so nobody could say what was new, what changed, or what had quietly disappeared.
What I built
A snapshot workbook that stores each day's paste and marks every row New, Carried, Updated or Resolved against the prior copy using a stable match key, and lists what should still be open tomorrow.
Result
Each day opens with four counts and a short list of open rows, and every resolved row is recorded as fixed or cleared on its own.

Download the workbook

Preview of the backlog to decisions demo, invented data
2Backlog to decisions

Hundreds of stuck rows became a few dozen owned decisions

Problem
A backlog of several hundred held entries was too large to work row by row, and nobody owned most of it.
What I built
A worksheet that classifies each row by its actual message, groups rows where one decision fixes them all, and routes each group to one owner. Every lookup runs on a stable ID, so sorting never breaks the totals.
Result
Roughly a fifth as many decisions, each with one named owner and a cleared, routed or open status.

Download the workbook

Preview of the outreach templates demo, invented data
3Outreach templates

Eight emails cover the whole exception cycle

Problem
Exception replies were rewritten person by person, which was slow and let wrong dates into confirmations.
What I built
A library of eight templates (ask, repeat, remind, confirm, notes, escalate, self-service), each with a subject pattern, a body and plain use and do-not-use rules, plus five house rules pinned beside them.
Result
Daily replies become a pick and a copy, and the confirmation has nothing in it that can go wrong.

Open the demo

Preview of the automation proposal demo, invented data
4Automation proposal

Map the manual time before automating any of it

Problem
The team knew its daily workflows took too long but could not say which steps to change first, or what had to be true first.
What I built
A one-page flow map with one lane per workflow: each step labelled keep manual, assist or automate, with its precondition, estimated minutes and pain points, a proposed state, risks and open questions.
Result
A clear first change per lane, with every time figure labelled as an estimate to refresh after a timed week.

Open the demo

Preview of the automation audit demo, invented data
5Automation audit

Proving an automation actually did its job

Problem
An automation reported success, but nobody had counted whether meetings were filed, had notes attached and produced tasks.
What I built
A tracker that counts every meeting from the calendar rather than the automation's log, marks each stage, finds where each one first failed, and flags any meeting type above 1 in 10 as not trusted until a fix is confirmed.
Result
Gaps clustered in prospects and new clients at one stage each, which turned scattered complaints into one specific fix request.

Download the workbook

Preview of the weekly client health demo, invented data
6Weekly client health

Every client account on one page, every Friday

Problem
Leadership had no single view of which accounts needed attention this week, or why.
What I built
A weekly Red, Amber, Green page for every live account, built on fixed written rules, with the driver, next step, owner and the ask of leadership on each line.
Result
Leadership reviews one page instead of chasing updates, and every Red comes with a stated reason.

Open the demo

Preview of the task health dashboard demo, invented data
7Task health dashboard

A daily read of tracker hygiene

Problem
Task status meant different things to different people, and overdue work surfaced late.
What I built
A dashboard workbook over a daily pull of every task: overdue, open, performance by person, and flags for tasks with no owner, no due date or no status.
Result
Overdue work and missing fields show up the same day, by person.

Download the workbook

Preview of the weekly priorities email demo, invented data
8Weekly priorities email

One email per person, nothing to open

Problem
People had to open the tracker to learn what was theirs this week, so overdue work surfaced late.
What I built
A script that sorts each person's open tasks into overdue, due this week, waiting on others and recently completed, and sends one email per person with linked titles and see-all views.
Result
Each person gets their whole week in one message, with overdue items at the top.

Open the demo

Preview of the client hours ledger demo, invented data
9Client hours ledger

Retainer balances without reshaping exports

Problem
Client hours were reconciled by hand from monthly exports, so balances were always a month stale.
What I built
A ledger that pulls hours by client, keeps purchased hours, flat-fee lines and hours used apart, and carries a check row that must reconcile to zero.
Result
Current balances every week, with a check that proves the totals before anyone reads them.

Download the workbook

Preview of the sales system app demo, invented data
10Sales system app

One page that keeps every next action visible

Problem
Contacts, deal stages and follow-ups were spread across lists, so overdue follow-ups slipped quietly.
What I built
A single-page sales tool: filterable contacts, a pipeline with dated sub-statuses and overdue highlighting, won accounts, a client view without contacts or pricing, and an intake form with a business-card photo.
Result
Overdue follow-ups go from being found by chance to a ready-to-send weekly list.

Open the demo

Preview of the field order capture demo, invented data
11Field order capture

Orders taken in the field land clean in the tracker

Problem
Field orders reached the tracker late and under several spellings of the same account.
What I built
A phone-first order form that writes straight into an order tracker, checks account names against the master list, and warns on near matches before submit.
Result
Duplicate account names are caught at entry instead of turning up later in reports.

Open the demo

Preview of the contact list merge demo, invented data
12Contact list merge

One contact list from three messy ones

Problem
Sales contacts lived in overlapping event, inbox and business-card lists, so people were double counted.
What I built
A master list with a fixed merge rule (email first, then name plus company), where every duplicate and merge is logged by formula and every contact keeps its source rows.
Result
One row per person with a traceable source, and checks that prove the unique count.

Download the workbook

Preview of the shelf price snapshot demo, invented data
13Shelf price snapshot

Pricing a new product against its real shelf

Problem
A new product needed a defensible price position, but competitor prices mixed sales, member deals and bulk packs.
What I built
A dated price snapshot with formula rules that turn the price as shown into a clean regular price, plus size-band averages by store type and tier that label thin samples directional.
Result
Pricing talks start from one checked, frozen file, not a pile of screenshots.

Download the workbook

Preview of the weekly movement report demo, invented data
14Weekly movement report

A weekly sell-through report that proves itself

Problem
Weekly store reports arrived as raw lists, and store-level blocks went stale as stores were added or double counted.
What I built
A workbook where each week drops in as a raw tab and every total, store count and ranked block is a formula, with a checks tab that reconciles everything before it is shared.
Result
Each update becomes a paste and a read instead of a rebuild, and missing or duplicate stores surface on their own.

Download the workbook

Preview of the sop library demo, invented data
15SOP library

Every recurring duty, written so someone else can do it tomorrow

Problem
Recurring duties lived in one person's head or one old recording, so every handover started from zero.
What I built
One fixed SOP template (metadata grid, walkthrough link, literal steps with exact file locations, a what-goes-wrong box, a decision table, document control) inside a library with department folders and SOP-DEPT-NN IDs.
Result
A new owner can run an inherited duty on the first attempt.

Download the SOPs

Let's talk

Want this working for you?

I'm open to full-time and contract remote Executive Assistant, Project Manager, and Operations roles, and available to start now.