Back to portfolio Everything

All projects

A selection of client work, and the things I build on my own time. Client names and system details are kept private.

GIS Web Portal Public Sector

GIS Web Portal

Public-sector client Full-Stack Engineer

Map-based web portal for viewing and managing regulated areas, built on isolated network layers with scoped access to meet public-sector data standards.

FastAPIVue.jsNuxt.jsVuetifyTerraformDocker
AWSVPCEC2S3RDSCloudWatchIAM
Asset Management Platform Enterprise

Asset Management Platform

Enterprise client Frontend Developer

Equipment tracking and asset lifecycle system, consolidating scattered inventory workflows into one dashboard.

JavaScriptVue.jsPiniaTailwind
Spatial Data Platform Enterprise

Spatial Data Platform

Enterprise client Full-Stack Engineer

Management system for spatial data, with its processing pipelines moved onto containerised services for faster turnaround.

Vue.jsTypeScriptFastAPITailwindTerraformDocker
AWSCognitoS3DynamoDB
Community and Volunteer Portal Public Sector

Community & Volunteer Portal

Public-sector client Full-Stack Engineer

Portal connecting local organisations with volunteers, with SEO-focused public pages and streamlined coordination workflows.

Vue.jsFastAPITerraformDockerSEO
AWSCognitoIAMS3DynamoDB
Citizen Information App Mobile · Public Sector

Citizen Information App

Public-sector client iOS Developer

iOS app with local caching, so calendars and event listings stay readable offline and load fast when traffic spikes.

Objective-CXcodeiOS SDK
Intercom Web App Web App

Intercom Web App

Enterprise client Frontend Developer

Intercom web application built in Svelte, with the reactive UI layer handled in plain JavaScript.

SvelteJavaScript
Multi-tenant Transaction Platform Public Sector

Multi-tenant Transaction Platform

Public-sector client Full-Stack Engineer

Multi-tenant web platform handling high-volume transactions, with each tenant's data kept separate and sensitive records protected by managed encryption keys.

TypeScriptVue.jsNuxt.jsPiniaTailwind
AWSVPCRDSELBCloudWatchKMSACM
Equipment Tracking Tool Enterprise

Equipment Tracking Tool

Enterprise client Full-Stack Developer

Internal tool logging office supplies and IT equipment across several workspaces, so every item's current location and holder stay traceable.

TypeScriptJavaScriptVue.jsTerraformDocker
AWSRoute 53ACMCloudFrontS3API GatewayLambdaDynamoDBSSM Parameter StoreCloudWatchIAM

Earlier work · Prabidhi Labs, Nepal · 2022–2024

  • watchmate-django-REST-APIDjango REST Framework
  • REST-API-STORAGEPython · Django
  • RNLEARNReact Native
  • Help AppReact Native
  • Live LocationJavaScript
  • InvoiceHTML · CSS
  • BlogHTML · CSS
See these on GitHub
Personal

Built on my own time

Side projects and the builds I learned on.

Nihongo Mock — JLPT Practice

Free JLPT practice in the real exam format — 118 timed papers from N5 to N1, every one written for the site, marked automatically, with listening read aloud by your own device. Every question can open its own vocabulary with furigana, and all twelve languages get their own URL and hreflang.

HTMLCSSJavaScriptPython Live site Case study

Nepal–Oita Community

A live community site for Nepalis living in Oita and Beppu — events, stories, photographs and a member area, with every privacy rule enforced by PostgreSQL policies rather than by the app.

Next.jsTypeScriptSupabasePostgreSQL Live site Case study Source

Personal Blog

Travel writing about Kyushu on a Django site I built and run — Markdown posts, photo galleries, tags, search and moderated comments. Publishing a post is a single command, wrapped in a Makefile.

PythonDjangoMakefile Live site Source

This Portfolio

The site you're reading. No framework and no build step — hand-written HTML, CSS and vanilla JavaScript, with every animation done in the browser rather than pulled from a library.

HTMLCSSJavaScript

Learning builds · while picking up Vue, Nuxt, TypeScript and Python

  • nuxtcurrencyappNuxt.js · Vue
  • cinemateVue
  • ShopiverseVue
  • randomsJavaScript
  • ollama-local-mcpPython · local Ollama agent calling 4 MCP servers
See these on GitHub