Four production apps I designed, built, and now operate on my own. All started in November 2025 and are live.
K
KabuhayanPrivate
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
P
PaluwaganPrivate
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
Po
PosterLive
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
EA CopilotLive
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.