Full-Stack Developer and open-source contributor based in the Philippines. I build web applications and developer tools, with a strong focus on clean architecture, practical utility, and solid user experiences.
Most of my time is split between building LibriQ (a digital library and reading log) and contributing to developer tooling across open-source projects on GitHub.
- Focus: Full-Stack Web Development, CLI & Developer Tooling, Offline-First PWAs.
- Projects: Creator of PoopPal, LibriQ, and Lokal.MD.
- Open Source: 119+ merged PRs across open-source ecosystems; ranked #1 on the Flisk Landscape leaderboard.
- Recognition: Selected by the XERJ Corpus Hub (4.2k+ stars) as an open-source reference solution.
- Commissions & Support: Open for web development commissions, custom scripts, and software builds on Ko-fi.
|
Creator & Android Architect Retro 16-bit pixel buddy habit counter for Android. Built with React 19, TypeScript, Capacitor native builds, and Firebase Firestore. Features real-time Duo Pal synchronization, native 2x2 home screen widgets, pull-down Quick Settings tile, and procedural Web Audio chiptune synthesizer. |
Creator & Lead Architect Personal 3D digital bookshelf and reading tracker. Features an interactive Three.js 3D shelf, RFC 4180 Goodreads and Kindle CSV import engine, multi-tier user profile synchronisation, and offline-first PWA caching. |
|
Global #1 Contributor (4 kyu) Local multi-service runtime engine. Engineered the AI Agent control plane ( |
AppBuildersPh Hackathon Entry Philippine clinical EHR vault and offline Taglish speech-to-text clinical transcription system for Rural Health Units (RHU). Built with deterministic PNF drug-interaction engines and AES-256-GCM encryption. |
| Domain | Technologies |
|---|---|
| Languages | TypeScript JavaScript Python Starlark SQL HTML5 CSS3 Bash |
| Frameworks & UI | React Next.js Node.js Express Three.js Tailwind CSS Vite Ink TUI |
| Systems & Cloud | Docker Tilt Traefik PostgreSQL Firebase AWS Git GitHub Actions |
| Tooling & Standards | Vitest Jest Biome Model Context Protocol (MCP) JSON Schema REST APIs |
› [TEST] · expand coverage for the generator template engine (#1553)
› [TEST] · cover service URL generation and runtime state edges (#1593)
› [TEST] · cover custom agent runtime handling (#1552)
› [TEST] · add unit tests for services metadata, stack metadata, and discovery problems (#1583)
› [TEST] · add unit tests for startup report dependency cycles and empty payloads (#1578)
› [TEST] · add unit tests for generator extension fetcher (#1571)
› [TEST] · add unit test for cache module (#1570)
› [TEST] · add unit tests for doctor command (#1569)
› [TEST] · add unit tests for config-cleaner (#1568)
› [TEST] · add unit test for clean-cli (#1567)
› [TEST] · add unit tests for manifest-cleaner (#1566)
› [TEST] · add unit test for file-utils (#1565)
› [TEST] · add unit test for env-loader (#1564)
› [TEST] · add unit test for base-cleaner (#1563)
› [TEST] · add unit test for alias-resolver (#1562)
› [DOCS] · write docs/comparison.md comparing TDK with alternative dev tools (#105)
› [DOCS] · add getting help, supported platforms, and TOC to CONTRIBUTING (#98)
› [DOCS] · add root AGENTS.md for AI coding agents (#92)
› [REFACTOR] · standardise error message style and document exit code rules (#708)
› [REFACTOR] · standardise -y/--yes and --force flags across commands (#706)
› [FEAT] · add --all flag with Machine/Project sections and summary (#86)
› [TEST] · verify --json check shapes and document flag in cli/README.md (#87)
› [FEAT] · enforce core version gate and upgrade recommendation (#634)
› [DOCS] · structure framework version table and tidy spacing (#813)
› [DOCS] · document resource features and featuresEnabled array (#127)
› [DOCS] · write docs/how-tdk-up-works.md explaining lifecycle, flags, and down (#101)
› [DOCS] · write docs/ARCHITECTURE.md explaining CLI, engine, and discovery (#99)
› [FEAT] · add node as a native backend language provider (#110)
› [FEAT] · press 'o' to open resource URL in browser and 'y' to copy it (#456)
› [FEAT] · add agent directives, skills, and agent-stack template (#1256 part D)
› [FEAT] · add agent control tools and CLI commands (#1256 part C)
› [FEAT] · add postgres durability session store (#1256)
› [REFACTOR] · standardise machine envelope construction in machine-output (#707)
› [DOCS] · position TDK for the AI-agent era (#1256 part A)
› [DOCS] · document tdk up --json readiness result contract (#1195)
› [FIX] · do not pass --force to tilt down (#1216)
› [REFACTOR] · use constant for project.json file name (#905)
› [REFACTOR] · use constant for TILT_TECH_STACK.star file name (#908)
› [REFACTOR] · use constant for TILT_RESOURCE_DEFAULTS.star file name (#909)
› [REFACTOR] · use constant for .autogenerated directory name (#907)
› [REFACTOR] · constant for the package.json file name (#906)
› [REFACTOR] · constant for the docker-compose.yml file name (#910)
› [DOCS] · document up, down and status flags
› [DOCS] · document tdk doctor --no-ping and --ping-timeout flags
› [TEST] · cover env-validator utility functions
› [DOCS] · list 26 supported agent harnesses with config file, key and tested status (#1991)
› [FEAT] · connect API, workflow, child-workflow and activity spans over OTLP (#61)
› [FIX] · stop generating DEFAULT_SELLER keys in gen-mainnet-secrets (#417)
› [FIX] · validate and normalize targetCurrency on cash-out quote route (#412)
› [DOCS] · refresh stale component counts in live code comments (#87)
› [FIX] · stop polling for spec indefinitely and use finite backoff (#49)
› [CONTRIB] · notion: a person's person member includes email_verified
› [CONTRIB] · s3: object GET and HEAD send default AES256 server-side encryption on...
› [CONTRIB] · jira: serverInfo lists its members in real's order
› [FIX] · add requirements.txt, fix uvicorn command, and update setup docs
› [FEAT] · add flip animation when task status changes (#545)
› [FEAT] · show previous assignees on task card and modal (#564)
› [FEAT] · add subtle status-based tints to task cards (#488)
› [FEAT] · export task details as Markdown file (#526)
› [FEAT] · add font size toggle on code snippets (#565)
› [FEAT] · make tags clickable in Other Projects section
› [FEAT] · make project tags clickable with search filter
› [FIX] · remove underline on link hover in submit page
› [FEAT] · add scroll to top button
› [CONTRIB] · Add search component to embeds page (#2)
› [FIX] · apply focus rings, aria-labels, text contrast, and semantic close button (#27)
› [FEAT] · implement live trail statistics panel inside sidebar dashboard
› [FEAT] · sync map layer tiles dynamically with application theme toggle
› [FEAT] · add timeline playback scrubber controls for tracking simulation
› [FEAT] · add date range filter listeners and real-time layout updates
› [FEAT] · support Google Takeout Records.json timeline format auto-detection
› [FEAT] · implement full keyboard navigation and accessibility enhancements
› [FEAT] · implement comprehensive Google Maps Timeline JSON parser
› [FEAT] · add client-side markdown and json report export (#1)
› [TEST] · cover IsEmpty and IsNotEmpty on 0, False and whitespace
› [TEST] · write comprehensive unit test suite for number range clamp helper (#431)
› [FIX] · detect unnamed ADD FOREIGN KEY and ADD CHECK in MG004
› [FEAT] · add image format demand analysis notebook
› [FEAT] · check derived CSVs for share sum and rank consistency
Expand all remaining repository contributions (40+ PRs)
› reticlehq/reticle · [FIX] · branch tune hud diagnostics on sdkVersion and session id
› flathub-infra/website · [FEAT] · Change "Downloads over time" chart to show monthly data instead of daily
› JohnMwendwa/vet-management-system · [FEAT] · add pagination in clients and employees routes
› OlaBakare/stellar-wallet-adapter · [FEAT] · add accessible fallback for unavailable wallet icons (#5)
› Prism-platform · [CI] · group dependabot minor and patch updates per ecosystem
› booth · [FEAT] · add py.typed marker and package data (PEP 561)
› vajra · [FIX] · import Any and pass --eve-path to alert reader
› understory · [FEAT] · add OpenAI-compatible provider for Scout
› avenx-js · [DOCS] · document server.headers configuration option (#1443)
› claudehop · [FEAT] · cache list --verify answers and add --no-cache bypass (#6)
› security-actions · [FEAT] · add --sorted flag and LLMS-015 rule (#5)
› bloodlink · [TEST] · add Vitest and unit tests for 8x8 blood compatibility matrix (#5)
› beemr · [FEAT] · add --copy option to copy ticket to clipboard
› beemr · [FEAT] · show estimated time remaining
› toolboundary · [TEST] · add fuzz and property tests for canonicalization and call binding
› kin-graph · [CONTRIB] · Split GEDCOM export lines over 255 characters with CONC/CONT (#22)
› public-data-sentinel · [CONTRIB] · Keep column names literal in Markdown reports (#4)
› Campus_lost_andFound · [CONTRIB] · Show dismissible success message after submitting a report (#8)
› Campus_lost_andFound · [CONTRIB] · Add image preview before submission (#7)
› firely-cql-sdk · [FIX] · fix TypeFoundIsNotExpected argument order and remove stray quote (#1750)
› woo-pay · [FIX] · validate wallet address before saving (#1)
› mcp-memory-service · [DOCS] · fix commands and options in chromadb-migration.md (#1421)
› fork-commit-merge · [FEAT] · style responsive card component in easy task
› yasbd-lib · [CONTRIB] · Address false splits by adding párrf and párr to the Spanish reference list (#353)
› shadcn-labs.com · [FEAT] · add search box and project filter to /issues (#13)
› genealogy · [FIX] · remove unused /api/user endpoint and api routing (#15)
› php-mkv-player-media-player- · [FEAT] · add keyboard shortcuts help panel and toggle button (#4)
› shadcn-labs.com · [FEAT] · add custom 404 page (#18)
› defense-mcp · [FIX] · document API key rotation restart requirement and clarify 401 message (#4)
› DOME · [FEAT] · add total used volume size badge on stacks and in detail pane (#89)
› shadcn-labs.com · [FEAT] · cap repo groups at 10 with a collapsible toggle (#15)
› graphify · [FIX] · warn once when file exceeds _FILE_CHAR_CAP in _read_files (#3773)
› loopwise-web · [FIX] · prevent mobile nav wrapping at 390px viewport
› Pulse-Layer · [FIX] · handle clipboard permissions, fallback, and timer cleanup in account modal (#101)
› repro200 · [FEAT] · reproduce Erdős-Rényi giant component fraction (~0.7968)
› repro200 · [FEAT] · reproduce Quicksort expected comparisons ratio (~1.0)
› repro200 · [FEAT] · reproduce Morris probabilistic counter ratio (~1.0)
› layerkit · [FEAT] · handle 0 maps gracefully in map list and doctor with guidance (#119)
› organic-os · [DOCS] · sync command reference table and update test count inventory
› Termstory · [FIX] · catch specific ValueError instead of broad Exception in shlex split
› Lingoo · [CONTRIB] · Add entry for 'waiter' in level-based words JSON
› photo-grid-docx · [FIX] · resolve memory leak on 40+ images and fix trailing page break bug
› Mr-share · [FEAT] · redesign landing page for modern visual hierarchy
› AthLead · [FEAT] · add range hints and helper text to score input fields




