Full Stack Developer based in the Philippines--:--:-- --

Full-stackdeveloperwho understands

Six years building and shipping production web applications. I learned the craft writing every line by hand, and I've since moved to AI-driven development — not to think less, but to put the thinking where it counts. The engineering judgement is still mine; the typing no longer has to be.

Scroll ↓

Tech stack

What I build with.

  • TypeScriptTypeScript
  • ReactReact
  • Next.jsNext.js
  • VueVue
  • NuxtNuxt
  • JavaScriptJavaScript
  • TailwindTailwind
  • GSAPGSAP
  • LaravelLaravel
  • LivewireLivewire
  • ZodZod
  • TanStack QueryTanStack Query
  • SCSSSCSS
  • BootstrapBootstrap
  • HTMLHTML
  • CSSCSS
  • DockerDocker
  • GitGit
  • GitHubGitHub
  • Digital OceanDigital Ocean
  • UbuntuUbuntu
  • CypressCypress
  • FigmaFigma
  • Adobe XDAdobe XD

Shipping soon

Built on my own time.

Personal products rather than client work — scoped, planned and tested the same way regardless. Small enough to actually finish, and the status here moves as each one does.

How I work

Understand it first. Build it once.

Most wasted engineering is a correct build of the wrong thing. Before I design a system, I want to know what the business actually loses today — and that only comes from talking to the people living with it.

  • 01

    Talk to the stakeholder

    Start with how the work happens today — the spreadsheet, the workaround, the thing everyone does manually on a Friday. What people ask for is a solution they've already guessed at; I want the problem underneath it.

  • 02

    Find the real problem

    The person paying for it and the person using it daily rarely describe the same pain. I look for that gap early, because building for only one of them is how a project gets delivered and then quietly abandoned.

  • 03

    Design the system

    Data model, the flows between screens, where the boundaries sit and what talks to what. Decided deliberately and written down, so the architecture is a choice rather than whatever the first sprint happened to produce.

  • 04

    Prototype and show it

    Low fidelity to high fidelity, put in front of them before it's built. A stakeholder can't review a paragraph, but they'll tell you exactly what's wrong with a screen.

  • 05

    Re-iterate

    Then change it, and show it again. Redrawing a screen costs an afternoon; rebuilding a shipped feature costs a sprint and the client's confidence. I'd rather be wrong early and cheaply.

  • 06

    Agree the scope

    What's in, what's explicitly out, what we're assuming. Signed off before implementation starts — so the thing that ships is the thing everyone agreed to, and scope creep is a conversation instead of a surprise.

Working with AI

AI makes me fast. The planning is what keeps it correct.

I lean on AI heavily to speed up development — scaffolding, refactors, test suites, migrations, the work that used to eat whole days. What I haven't handed over is the thinking. AI slop is what happens when you skip straight to generation; every artefact below exists before the first prompt, and that's the difference between output that ships and output that merely compiles.

  1. 01

    Problem statement

    Before a single prompt, the problem gets written down in plain language: who is stuck, what they're trying to do, and what it costs them today. Hand a model a vague problem and it will confidently solve a different one.

    • Who has the problem
    • What they do instead right now
    • What success looks like, measurably
  2. 02

    Aggressive planning

    Every unclear requirement gets resolved before it gets built. I push the model to surface edge cases and argue design decisions through rather than take the first one that compiles — because an assumption made silently at this stage becomes a rewrite later.

    • Ambiguities named and resolved, not assumed
    • Edge cases enumerated up front
    • Alternatives weighed with trade-offs stated
  3. 03

    User stories

    The most important artefact. Stories keep the work anchored to a person instead of a spec, and they're what acceptance criteria hang off. Without them AI optimises for something plausible; with them it optimises for something someone actually needs.

    • As a… I want… so that…
    • Acceptance criteria per story
    • Sized so one story is one deliverable
  4. 04

    UI flow

    Screens and the transitions between them, designed before implementation. AI writes markedly better code against a flow it can see than against a paragraph it has to imagine — and the states everyone forgets get caught here rather than in QA.

    • Screen inventory and entry points
    • Empty, loading, error and success states
    • The path a real user takes, start to finish
  5. 05

    Out of scope

    Written down explicitly. Naming what we are not building is the single cheapest way to stop a model generating three features nobody asked for — and it turns scope creep into a conversation instead of a surprise.

    • Deferred features, listed
    • Assumptions made explicit
    • The line between v1 and later
  6. 06

    Test-driven

    Tests written against the acceptance criteria before the implementation exists. The suite becomes the specification the model has to satisfy, which is what separates code that runs from code that is correct — and it catches the regression before a user does.

    • Red first, against the story's criteria
    • The model writes to a failing test, not a vibe
    • Regressions caught by the machine, not the user

Work history

The teams I've built with.

  1. 2026 — Present

    ● Current

    Full Stack Developer

    Caravea

    Building and maintaining a suite of internal systems — a custom CRM, project boards and inventory. I work both ends of every feature: the Laravel APIs and data model, and the TypeScript, React and Inertia interfaces built on top of them.

    • Maintaining and extending multiple systems in daily production use — a custom CRM, project boards and inventory — with ongoing module and schema work as each one grows.
    • Building both ends of every feature — designing the Laravel APIs and data model, then building the React and Inertia interfaces that consume them, fully typed in TypeScript end to end.
    • Integrating third-party services including Twilio — API design through to webhook handling, retries, and the failure paths that only surface in production.
    • Laravel
    • Inertia.js
    • React
    • TypeScript
    • Next.js
    • Docker
  2. June 2025 — January 2026

    Full Stack Developer

    Sundra

    Multilingual learning and translation SaaS. Laravel APIs and a Nuxt v4 + TypeScript frontend, plus the infrastructure work that made shipping it repeatable.

    • Replaced Stripe with Paddle across the platform — secure webhook handling and full subscription lifecycle management.
    • Upgraded Nuxt v3 → v4 and refactored the codebase for performance, modularity and maintainability.
    • Designed and built the Laravel backend APIs behind core platform functionality and its integrations.
    • Stood up GitHub Actions CI/CD, Sentry monitoring and Dockerised local development, so releases and debugging stopped being bespoke.
    • Built the editor module, the reusable component library and the Webflow-based pricing page.
    • Laravel
    • Nuxt
    • TypeScript
    • Paddle
    • Docker
    • GitHub Actions
    • Sentry
  3. January 2025 — June 2025

    Full Stack Developer

    Freelance

    Full ownership from development through deployment and maintenance, across React, Next.js, Inertia, Nuxt, Vue, Laravel, Ruby on Rails and Firebase.

    • Created and optimised RESTful APIs in Laravel and Ruby on Rails — secure, efficient and built to scale.
    • Translated complex designs into responsive, high-performance UIs in React, Next.js, Nuxt and Vue.
    • Managed Dockerised deployments and CI/CD pipelines across GitHub Actions and Bitbucket.
    • Standardised four different stacks on shared ESLint and Prettier config, and brought dependencies back up to date.
    • React
    • Next.js
    • Nuxt
    • Vue
    • TypeScript
    • Laravel
    • Ruby on Rails
    • MySQL
    • Firebase
    • Docker
  4. April 2024 — November 2024

    Frontend Engineer

    LotHunt

    Frontend for a land-investment platform in Vue.js and TypeScript, with backend contributions in Ruby on Rails.

    • Built a custom map overlay marker rendering 5,000+ markers without clustering — measurably faster to render and navigate than the clustered original.
    • Wrote and maintained unit and end-to-end Cypress coverage, keeping test coverage high as the surface grew.
    • Owned Bitbucket CI/CD pipelines and integrated Sentry for error logging.
    • First responder for critical incidents, including unplanned outages.
    • Worked with the designer to propose UI/UX changes rather than just implement handoffs.
    • Vue
    • TypeScript
    • Ruby on Rails
    • Docker
    • Cypress
    • Sentry
    • Bitbucket
  5. June 2023 — March 2024

    Frontend Lead / Full Stack Developer

    Spondise

    Led the frontend team: planning and assigning work, reviewing PRs, reporting to stakeholders, and building alongside them in Nuxt 3 and Laravel.

    • Built realtime chat and notifications with Nuxt 3, Laravel Echo and Pusher, designing the REST APIs alongside the backend developer.
    • Planned and assigned frontend work, and reported project status directly to stakeholders.
    • Reviewed every frontend PR for readability and quality.
    • Shipped an SSR blog in Nuxt for SEO, and a custom role and permission handler.
    • Helped manage the servers and deployments.
    • Nuxt
    • Laravel
    • Pusher
  6. September 2022 — May 2023

    Full Stack Web Developer

    Advanced Exteriors

    Two products on Vue 2, Vue 3 and Laravel — turning prototypes into shipped features, with unit coverage and component documentation.

    • Built PDF receipt and invoice generation for the subscription app in Laravel.
    • Took features from low-fidelity prototype through to production code in Vue.
    • Repaired Storybook so the component library was documented and usable again.
    • Added Jest unit coverage, and rebuilt the email templates in Blade alongside other UI fixes.
    • Vue
    • Laravel
    • Jest
    • Storybook
    • Figma
  7. June 2022 — August 2022

    Full Stack Web Developer

    LGU — NHA Office

    A National Housing Authority applicant-management system on the TALL stack. I led planning, development and deployment.

    • Led the whole process — planning, development and deployment.
    • Ran discovery with the office staff on how their setup actually worked, then proposed a better one rather than digitising the old one.
    • Presented a high-fidelity Figma prototype to the client before any code was written.
    • Implemented roles and permissions with Spatie, and optimised how applicant records were collected, stored and retrieved.
    • Laravel
    • Livewire
    • Alpine.js
    • Tailwind
    • MySQL
  8. November 2020 — June 2022

    Full Stack Web Developer

    Freelance

    Where it started. Small-to-medium projects across whatever stack the client already had — consultancy, deployment, UI repair and net-new features.

    • Integrated third-party APIs including Xero and Amazon, and built REST APIs in Laravel.
    • Replaced Laravel Spark with Laravel Cashier (Stripe) so subscriptions ran on a supported billing path.
    • Worked extensively with Firestore, Realtime Database and Firebase Authentication.
    • Deployed to Digital Ocean droplets, bare VPS and shared hosting, depending on what the client already had.
    • Rebuilt an existing Joomla site in Laravel + Blade, and built landing pages for businesses.
    • React
    • Vue
    • Nuxt
    • Next.js
    • Laravel
    • Firebase
    • Stripe
    • Xero

Write-Ups

Notes from the build.

All posts + search →