Projects
PEX — Invoicing & Time-Tracking SaaS
2025 – today
A complete SaaS product, built solo: Laravel 11 API with Stripe billing, Nuxt 3 app with an iOS version, customer portal, and a marketing site.
- Laravel 11
- Nuxt 3
- Stripe
- WebSockets
- Capacitor iOS
- Pest
- Playwright
The product
PEX is invoicing and time-tracking software for freelancers and agencies: invoices, credit notes, recurring invoices, offers, projects, time tracking, expenses — plus a separate customer portal where clients view their invoices and pay them directly.
I built PEX as a solo developer: product concept, data model, API, web app, iOS app, marketing site, and operations.
Architecture
Visitor ──▶ Marketing site (Astro 5, static)
│ sign-up
Team ──▶ Web app (Nuxt 3) ──┐
Client ──▶ Customer portal ───┤──▶ API (Laravel 11) ──▶ MySQL
iOS ──▶ Capacitor app ─────┘ │ ▲
Stripe ┘ (webhooks)
Two separate auth domains: team users via Laravel Sanctum, portal customers via a dedicated guard with bearer tokens — keeping internal data and client access cleanly isolated.
Technical highlights
- Subscription billing with Stripe Cashier — subscriptions, portal payments, and webhook processing, including fault-tolerant retry logic.
- CSV bulk import with live progress — background jobs via Laravel Horizon, progress streamed to the frontend in real time over WebSockets (Pusher).
- Rich text everywhere — offer and invoice copy edited with TipTap, consistent across web and iOS.
- Quality as a default — 53 Pest tests in the backend, Playwright end-to-end tests in the frontend, four GitHub Actions workflows for CI.
- One codebase, two platforms — the Nuxt app ships unchanged as an iOS app via Capacitor.
Outcome
A working SaaS product with marketing site, app, and customer portal — all from one pair of hands. Exactly the project scope I deliver for clients: from an empty repository to a paying user.