Projects

Built to be used, not just submitted.

Each project below states one real decision I made and why. Live links where they exist, repos for everything else.

2026 — Present · v0.2.0

VerifyPulse — multilingual misinformation tracker

In development
Context
The same false claim circulates in many languages at once, phrased differently each time — keyword matching misses most of it.
Built
A FastAPI service that ingests and cross-references claims across languages. Designed the data model and SQLite storage layer; ingestion and matching phases shipped and tagged v0.2.0.
Decision
Matched claims with sentence embeddings instead of exact keyword overlap — semantic similarity survives translation and paraphrase, keywords don't.
PythonFastAPISQLite sentence-transformersClaude API
07/2026 · AMD Developer Hackathon, ACT II

Longhand — auditable tax assistant

Live demo
Context
US expats face two tax systems at once, and an LLM that just asserts an answer is useless when the answer has to be defensible.
Built
Two-person hackathon build: an assistant answering US-expat tax questions with source-traceable reasoning. Deployed demo with a passing engine test suite, shipped inside the hackathon window.
Decision
Split the roles: a deterministic rule engine does every computation, the LLM only explains the result. Numbers stay reproducible and testable; language stays natural.
PythonNext.jsVercel Automated testing
02/2026 — 08/2026 · Final-year project

SecureTransfer — privacy-preserving file transfer

Building
Context
Transfer platforms want operational insight — abuse detection, anomaly flags — but inspecting file contents breaks the privacy promise that makes the platform worth using.
Built
An encrypted file transfer platform: AES-GCM protection with serverless processing on Azure Functions, plus anomaly detection over transfer and usage patterns.
Decision
Committed to metadata-only analysis — the service can flag anomalous behaviour without ever being able to read a file. Privacy holds even if the analysis layer is compromised.
PythonAzure FunctionsAES-GCM Anomaly detection
01/2026 — 04/2026 · University coursework

SaaS usage monitoring API

Completed
Context
Multi-tenant SaaS products need usage metering and admin monitoring with real access control — not one shared dashboard login.
Built
A Flask and MongoDB REST API with JWT authentication, bcrypt password hashing, role-based access for admin and analyst roles, and CRUD plus analytics endpoints — tested and documented in Postman. An Angular dashboard consumes it.
Decision
Added logout blacklisting on top of 24-hour JWT expiry — pure stateless tokens can't be revoked, and a stolen token that lives a full day is a real risk in an admin tool.
PythonFlaskMongoDB Atlas PyJWTbcryptRBAC
2026 · Side build

Release-notes dashboard

Completed
Context
Cloud release notes are high-volume and unstructured — following one product's changes means scanning a firehose.
Built
A Flask dashboard that aggregates Google Cloud BigQuery release notes into filterable cards, with a tweet composer for sharing highlights.
Decision
Rendered everything server-side with Flask templates — for a read-mostly dashboard, shipping without a frontend framework kept the build small and fast.
PythonFlaskBigQuery
Ongoing

This site

You're on it
Context
A portfolio for a developer applying to junior roles has one job: load fast, read clearly, and prove its claims.
Built
Hand-written HTML, CSS, and JavaScript — no framework, no build step beyond a validator script and an image pipeline. Self-hosted fonts, deployed on Netlify.
Decision
Stayed static on purpose. Nothing here needs a framework, and every dependency removed is one less thing that can be slow or break.
HTMLCSSJavaScriptNetlify
Next

Want the story behind any of these?

Happy to walk through the code, the trade-offs, or what I'd do differently.