Hi, I'm a Full-Stack Developer with 5 years of experience building and optimizing enterprise systems with React, Next.js, Node.js and Firebase, on top of a Microsoft Power Platform background.
At Alberto Shoes Corporation, I'm the sole developer of an HRIS built for 100+ branches across the Philippines. I also maintain and optimize a retail and warehouse management platform and its mobile warehouse app, including a rebuild to an offline-first architecture.
Before that, I spent several years at Fujitsu building Power Apps, Power BI and OutSystems solutions, and earned the PL-900 and PL-400 certifications. I started at Accenture in data analyst roles (billing, implementation and network operations), which taught me how business processes work from the inside.
I'm open to full-stack roles where I can build reliable systems for real users.
Fig. 01 — Systems, end to end
01
Clients
Where the work happens
Footwear retailer with 100+ branches across the Philippines. HR, inventory, transfers and POS administration.
The HRIS and AGURS are Next.js apps. React, with TypeScript on the HRIS.
AGMS, a React Native warehouse app. Optimized v2, then built v3 with Expo Router.
02
Offline & sync
Keeps working without signal
Syncs a user's assigned tasks, not the full dataset on every login. Replaces a slow manual sync.
SQLite as the local source of truth. Idempotent offline queue.
03
Services
Business logic & access
Replaces paper-based HR processes. Recruitment, attendance, leave, payroll and performance. Currently in UAT with IT and HR.
Role-based access across 33 permission modules in the HRIS.
Versioned mobile API layer for AGURS. Cloud Function job processors.
AGURS, as its sole active developer. Inventory, transfers, POS administration and procurement. Versioned picking and packing engine.
04
Data & insight
Records become decisions
Behind both the HRIS and AGURS. Cut AGURS Firestore reads through query, listener and caching work.
Dashboards with DAX and Power Query at Fujitsu. Started in data analyst roles at Accenture.
Canvas and model-driven apps at Fujitsu. Power Automate workflows.
Live pathDormantCareer history
Fig. 02 — What the systems carry
01 Scale100+Branches in scope
One HRIS for a retailer’s branch network across the Philippines.
02 Ownership01HRIS developer
Sole developer across architecture, features and maintenance.
03 Breadth4 layersWeb · Mobile · API · Data
From the screen a branch uses down to the Firestore record.
04 Constraint0 SIGNALOffline-first workflow
Warehouse operations designed to continue without connectivity.
Not just projects — systems people depend on.
Portfolio
Selected Work
Software I've built for a real company, then the personal projects where I explore new stacks end to end.
01Alberto Shoes Corporation · 3 projects
Professional work
Company systems I've built, extended and maintained as a full stack developer. The code and live environments are company-owned, so each case study shows what I can share.
01 / 03Web App · 2026
Featured case study
13 screens
Enterprise HRIS Platform
Alberto Shoes Corporation
Sole developer of an HRIS built for Alberto Shoes Corporation, a footwear retailer with 100+ branches across the Philippines, to replace its paper-based HR processes. Covers recruitment, attendance, leave, payroll and performance across 53 pages, 153 API endpoints and 76 Firestore collections, with a role-based permission system of 33 modules, GPS-verified field filings, biometric time-clock import and offline-capable clock-in. Backed by 473 automated tests under strict TypeScript. Currently in UAT, with IT and HR using it for recruitment, leave, overtime, official business and attendance.
100+branches it’s built to serve
153API endpoints
473automated tests
In UATIT & HR already using it
Role
Full Stack DeveloperSole developer
Stack
Next.js · TypeScript · React JS · Firebase
Company-owned
Chris
02 / 03Mobile App · 2026
Client work
14 screens
AGMS Warehouse Mobile App(v2 to v3)
Alberto Shoes Corporation
Optimized a production React Native warehouse app that had become slow: it used Redux as its inventory store, downloaded all data on every login instead of the user's assigned tasks, and relied on a long manual sync. Then designed and built v3 from scratch with Expo Router, SQLite as the local source of truth, task-scoped sync and an idempotent offline queue. v3 now takes the Delivery Pickup module from loading the truck to finishing the delivery on the phone, offline-first: store drop-off with the receiver's name and a finger-drawn signature, hub binning, a server-confirmed Complete Fulfillment step, and scan-to-load for cross-dock trucks. Session lists use cursor paging instead of full downloads, and the app is covered by 654 automated tests under strict TypeScript.
Role
Full Stack Developerv2 optimization lead, v3 sole author
Stack
React Native · TypeScript · Firebase
Company-owned
Chris
03 / 03Web App · 2026
Client work
9 screens
AGURSRetail & Warehouse Management Platform
Alberto Shoes Corporation
Sole active developer of AGURS, a Next.js and Firebase platform for inventory, warehousing, transfers, POS administration and procurement across a multi-branch footwear retailer. Optimized Firestore read costs, virtualized the stock allocation matrix to stay fast with 1,300+ SKUs, and enhanced the warehouse floor-map editor. Built a versioned mobile API and picking and packing engine, and extended its Cloud Function job processors.
Role
Full Stack DeveloperSole active developer
Stack
Next.js · TypeScript · Firebase · React JS
Company-owned
Chris
028 projects · Independent
Personal projects
Products I've designed and built independently to go deeper on a stack — payments, real-time data, auth and AI. Live demos and code where available.
ProjectConfidential
ChrisWorthSpending-Pace Budget Tracker for Web & Android
ChrisWorth is a personal finance tracker for web and Android built around one question: am I spending on pace? Each budget is measured against even spending (what the month allows by today), and a single "today line" runs through the month picture and every budget bar, so you can see at a glance what's ahead, on pace or under. Built as a pnpm monorepo: a FastAPI and PostgreSQL API, a Next.js web app, and an offline-first Expo (React Native) Android app that records spending without a connection and syncs through an outbox with version-checked writes, so edits are never silently overwritten. The pace rules live in one shared TypeScript package used by both apps, and money is stored in integer minor units. Security includes Argon2id password hashing, server-side sessions, a one-time recovery key and strict security headers. Tested with pytest, Playwright with axe accessibility checks (WCAG 2.2 AA), and Maestro flows on Android.
Next.js
React
TypeScript
Tailwind CSS
Chris
Project
RazNavRecord Every Trip, and Relive It
RazNav records every trip you take and lets you relive it. Your route, your stats, and a little 3D vehicle of your choice driving it again on a 3D map. It is an Android GPS tracker built with React Native (Expo) and TypeScript, with two native Kotlin modules for background recording and video encoding. Start a trip and it keeps recording with the screen off or in other apps, through a foreground service, and picture-in-picture if you leave. Each trip is saved on the phone in SQLite and appears in a history list with a route thumbnail, distance, time, speed chart and a guessed activity (walk, run, bike or drive). Open one to replay it: your avatar drives the real road at up to 8x, and you can drag it along the route. Then export the replay as an MP4 (9:16, 1:1 or 16:9, up to 1080p) rendered frame by frame on the phone with MediaCodec and an OpenGL ES encoder, ready to share. Starts and ends can be hidden to protect places like home. A trip can also be shared as a GPX file. The map is MapLibre with OpenFreeMap vector tiles and 3D buildings, in Light, Dark or Sunset, which turns dark at local sunset and switches the vehicles' headlights on. You can download map areas for use without signal (with a 500 MB cap that follows OpenFreeMap's usage rules), save places such as Home, Work and favourites with pins on the map, and pick from 16 chibi-style vehicles I modelled and rendered in Blender, including a Filipino jeepney, tricycle, hot-air balloon and cruise ship. "Ride together" adds live location sharing for up to 4 people with a 6-letter code, built on Supabase (anonymous auth, Postgres row-level security, Realtime). The server keeps only each person's latest position, sharing ends by itself, and friends can send each other emoji reactions on the map. Quality: 531 unit tests across 51 suites (node:test), strict TypeScript, emulator performance benchmarks with before-and-after runs, and 44 reviewed pull requests.
React Native
Expo
TypeScript
Kotlin
Chris
Project
Chris Vault
Chris Vault keeps logins, payment cards, secure notes and Wi-Fi passwords in one encrypted vault on the phone. The master passphrase is stretched with Argon2id and every entry is sealed with XChaCha20-Poly1305 (Google Tink). After the first unlock the vault can be opened with a fingerprint or the phone's own PIN or pattern, backed by the Android Keystore. It fills logins in other apps through Android Autofill, shows live 2FA codes, checks passwords for weakness and reuse, and makes encrypted backups. It never connects to the internet. Quality: 216 unit tests and 49 on-device tests, lint and detekt, plus custom build checks that block logging, enforce crypto usage rules, verify the licence list and keep the manifest least-privilege.
Helmetrix is a full-stack e-commerce demo for premium motorcycle helmets. Products, sizes and stock live in Sanity CMS. Stripe Checkout takes payment, and a webhook turns each completed checkout into an order, lowers stock for the size bought, and emails a confirmation. Running the same webhook twice never creates a duplicate order. Around that sits a complete customer journey: Clerk sign-in, a basket that follows you when you sign in, an order archive with status tracking and PDF receipts, and an order confirmation page that checks the payment with Stripe before it celebrates. The interface uses one design language throughout, drawn from motorsport.
ChrisCase is a full-stack custom phone case store built with Next.js 15 (App Router) and TypeScript. Customers move through a three-step configurator: they upload a photo, then position it on a live case preview drawn for their chosen model (iPhone X to 17) and color, then review a print-style summary before paying with Stripe Checkout. Under the hood, the design is cropped on a canvas in the browser and uploaded with UploadThing. Prices are calculated on the server, and a Stripe webhook marks orders as paid, safely ignoring repeat deliveries. Auth is handled by Kinde, data by Prisma and Postgres, and an admin dashboard tracks and updates order status. The interface follows a "print room" design system: warm grainy paper, editorial serif type, and accessible, keyboard-friendly controls.
Zelra is a real-time team chat app for people who work across several workspaces. It has channels, direct messages, threaded replies, emoji reactions and image sharing, and every update reaches all members instantly. I built it with Next.js 15, React 19 and Convex, which handles the database, server functions and live subscriptions. Sign-in works with email and password, Google or GitHub.
Razello is a full-stack project management workroom for small teams. Projects and tasks move through five stages on a drag-and-drop board, a sortable and filterable table, or a calendar. The home dashboard gives each person a prioritized queue (overdue, due soon, upcoming), a 14-day activity pulse and month-over-month numbers. A Ctrl+K command palette jumps to any task, project or action. Teams join through invite links with admin and member roles, sign in with email or Google/GitHub OAuth, and can use light, dark or system themes on desktop and mobile. Built with Next.js 14, a Hono API on Appwrite, and TanStack Query, with server-side prefetching, optimistic updates and code-split views to keep it fast.
A real-time event ticketing platform where organizers sell tickets and attendees join a live queue for them. Ticket availability, queue positions and time-limited offers update instantly across every open browser through Convex, so tickets are never oversold. Payments go through Stripe Connect and pay organizers directly, and attendees receive a QR-code ticket the moment checkout completes. Organizers get a dashboard to create, edit and cancel events, track sales, and trigger automatic refunds for cancelled events.
Next.js
React
TypeScript
Convex
Chris
Capabilities
Skills & Experience
The tools I work with day to day, and where I've applied them.
Fig. 04 — Stack & career historycareer.git · rev 2026
Programming Languages
Frontend & Mobile
Backend & BaaS
Databases & ORMs
Low-code / Power Platform
Auth & Payment
Testing / Automation
CMS / Content Management
DevOps & Tools
2026
3 roles
2025
3 roles
Merge branch self-employed into main
Self-Employed / Independent Software Developer · 2025 · 1 role