Curious by default.
I'm a Computer Science co-op student at McMaster University who likes building the whole thing — the model, the backend, the interface, and the deploy script. Most of what I make starts with a real person's problem: a freelancer rewriting the same proposal for the tenth time, a student memorizing ninety-four physics formulae, two people planning life across a ten-and-a-half-hour timezone gap.
A thread runs through my work: software should respect the person using it. That's why my projects keep turning out local-first, bring-your-own-key, and dependency-free — a voice assistant that never sends audio to a cloud, an extension whose API key never leaves your device, a matching engine that explains its recommendations in plain language instead of exposing raw scores.
Right now I'm exploring software engineering, robotics, and natural-language processing — and looking for a co-op team that ships.
Things I've shipped.
-
Peppa — Local Voice AssistantFEATURED
FIG. 01 — FIVE MODELS, ONE MACHINE, ZERO CLOUD
A Jarvis-style voice assistant that runs entirely on a laptop — no cloud, no API keys, no audio leaving the room.
- PROBLEM
- Voice assistants ship your voice, questions, and files to someone else's servers. I wanted Jarvis-grade help with nothing leaving the machine.
- APPROACH
- Five on-device models (14B chat, 32B reasoning, coder, vision, embeddings) behind a router with five thinking modes — the deepest one plans, investigates with tools, then has a second model red-team the draft before it's spoken. Speech streams sentence-by-sentence while the answer is still generating, with barge-in interruption. For arithmetic it refuses to guess in-weights and instead writes and runs Python in a sandbox.
- STACK
- Python 3.12 · Ollama (Qwen2.5) · MLX-Whisper · on-device TTS voice cloning · PySide6 · local RAG · sandboxed code execution
- OUTCOME
- Sub-2-second voice-to-voice latency, 46 tool skills, and a deterministic reflex layer that keeps it answering even with the LLM runtime fully offline.
16,400+ LINES242 TESTS46 SKILLS5 LOCAL MODELS
LOCAL-ONLY BUILD — DEMO ON REQUEST
-
Argus — Government Intelligence PlatformFEATURED
FIG. 02 — SIGNALS → CAPABILITIES → OUTREACH
Know what governments need before they post the RFP.
- PROBLEM
- Startups discover government procurement opportunities after the RFP drops — too late to prepare or shape the bid.
- APPROACH
- Monitor procurement signals in real time, match them to startup capability profiles using Gemini 2.5 Flash plus semantic embeddings, and generate personalized outreach — all visualized on an interactive Three.js globe of live global signals.
- STACK
- Next.js · React · Three.js · Tailwind · Framer Motion · FastAPI · Python · Gemini 2.5 Flash · semantic embeddings
- OUTCOME
- 85%+ match accuracy with sub-3-second responses. Built at Mac-a-thon 2026 with a cross-university team of four (McMaster, TMU, UofT).
>85% ACCURACY<3s RESPONSELIVE SIGNALSTEAM OF 4
-
MentorMatch — Explainable Matching Engine
FIG. 03 — SCORING THAT EXPLAINS ITSELF
A mentor-recommendation engine that lives inside Postgres and gives students reasons, never raw scores.
- PROBLEM
- Students on a mentorship platform picked mentors from a flat directory; naive match scores are either opaque or uncomfortable to show.
- APPROACH
- A weighted compatibility engine as a security-definer plpgsql RPC — normalized 0–100 scoring across admin-tunable dimensions with cached score rows. Privacy by design: no student can read the scores table; the API returns only ranked mentors with plain-language reasons. Then a zero-behavior-change modular refactor of the production portal, verified against the pre-refactor codebase, and a WCAG-AA design-token redesign.
- STACK
- React 18 · Vite · Supabase (Postgres, RLS, plpgsql) · Deno Edge Functions · Cloudflare R2 · Vercel
- OUTCOME
- 644 lines of SQL across 4 migrations; a 92-file refactor (+6,599 / −3,029 lines) with byte-level behavior parity. My end of a two-person product team.
644 LINES SQL92-FILE REFACTORWCAG AATEAM OF 2
-
ProposalPilot — BYOK Proposal Drafter
FIG. 04 — JOB POST IN, PROPOSAL OUT
A Chrome side-panel extension that turns any job post into a tailored freelance proposal — on your own API key.
- PROBLEM
- Freelancers rewrite near-identical proposals all day, and most AI helpers route their clients' job posts through a third-party server.
- APPROACH
- Bring-your-own-key architecture: the browser talks directly to OpenAI, Anthropic, or Gemini — no backend at all. Reads the job post from the page (selection first, then an article-heuristic DOM walk), drafts in the freelancer's voice, and inserts the result into the reply box using the native value setter with synthetic events so React-controlled textareas accept it.
- STACK
- Chrome Extensions MV3 · Side Panel API · optional host permissions · vanilla ES modules · Node test harness
- OUTCOME
- ~950 lines including tests, zero runtime dependencies, and a pure-function AI layer unit-tested in Node across all three providers.
3 PROVIDERS0 BACKEND0 DEPENDENCIES~950 LINES
v0.1 — UNRELEASED
-
Dimension Dash — Physics as a Game
FIG. 05 — 94 FORMULAE, 6 MODES, 1 SCHEDULER
A spaced-repetition study game that teaches all 94 dimensional formulae from Class 11 physics.
- PROBLEM
- Dimensional formulae are a classic exam trap — 94 near-identical expressions that students usually brute-force by rote.
- APPROACH
- A custom SM-2/Leitner spaced-repetition scheduler drives six exam-aligned game modes — including a Build Lab where formulae are assembled from exponent bricks. Confusion sets are computed at runtime by grouping quantities with identical dimensions, and anchor formulae are force-surfaced first so the rest can be derived, not memorized.
- STACK
- Vanilla JS/HTML/CSS · Web Audio synthesis · versioned localStorage · zero dependencies
- OUTCOME
- ~3,000 dependency-free lines with a 94-cell mastery heatmap, JSON export/import, pre-paint theming, and reduced-motion support.
94 FORMULAE6 GAME MODES0 DEPENDENCIES~3,000 LINES
PRIVATE BUILD
-
Duet — Offline-First Planner PWA
FIG. 06 — TWO TIMEZONES, ONE STATE
A collaborative planner for two people in timezones 10.5 hours apart — built from scratch with zero packages.
- PROBLEM
- Shared calendars assume the same timezone, need accounts in someone's cloud, and fall over offline.
- APPROACH
- A last-write-wins merge-by-id sync algorithm implemented identically on client and server, so devices can edit offline and reconcile deterministically on reconnect. Live sync over Server-Sent Events; per-user timezone math with the Intl API, including day-boundary handling; a mutual free-time finder that intersects both schedules; and an optional AI assistant served by a local LLM.
- STACK
- Vanilla JS · Node standard library only (319-line backend) · SSE · Service Workers · Intl API · Ollama
- OUTCOME
- ~6,000 hand-written lines, zero npm packages, five calendar views, atomic write-then-rename persistence.
0 NPM PACKAGES~6,000 LINES5 VIEWS319-LINE BACKEND
PRIVATE BUILD
-
Tejimola — The Blossom from Clay
FIG. 07 — FOUR ACTS, ONE FOLKTALE
A 90-minute narrative adventure bringing an Assamese folktale to life.
- PROBLEM
- Regional folktales rarely make it into games; I wanted to celebrate Assamese heritage with mechanics that serve the story.
- APPROACH
- Four acts with four distinct mechanics — exploration, stealth, rhythm, and a boss battle — across a 2.5D world. Event-driven systems throughout: adaptive audio, JSON-driven branching dialogue, and a dspTime-based rhythm engine.
- STACK
- Unity · C# · event-driven architecture · AI-assisted development workflow
- OUTCOME
- A complete, playable 90-minute experience across four acts.
90 MINUTES4 ACTS2.5D WORLDRHYTHM ENGINE
-
NeonDrift — Arcade Runner
FIG. 08 — SIXTY FRAMES, ZERO DEPENDENCIES
A high-octane browser arcade runner in pure Canvas — built at DeltaHacks XI.
- PROBLEM
- Make a browser game feel arcade-tight using nothing but the platform.
- APPROACH
- Hand-rolled physics loop and renderer on HTML5 Canvas with dynamic difficulty scaling, combo-chain scoring, and powerups — shield, magnet, slow-motion. Keyboard, touch, and drag controls for desktop and mobile.
- STACK
- HTML5 Canvas · vanilla JavaScript · PWA architecture
- OUTCOME
- A consistent 60 FPS render target, cross-platform controls, and offline play.
60 FPS0 DEPENDENCIESPWACROSS-PLATFORM
-
Petal — Cycle Tracker for Android
FIG. 09 — NATIVE, PRIVATE, ON-DEVICE
An Android-native period and cycle tracker built with modern app architecture.
- PROBLEM
- Cycle tracking is deeply personal data — it deserves a native, local-first home rather than an ad-funded app.
- APPROACH
- Kotlin and Jetpack Compose UI over a repository architecture: Room database with DAOs for cycles and daily fertility logs, Health Connect integration, pattern-flag insights, and an education library — 144 Kotlin files in a clean data/domain/presentation split.
- STACK
- Kotlin · Jetpack Compose · Room · Health Connect · Retrofit
- OUTCOME
- A working native app with offline-first storage and Health Connect sync.
144 KOTLIN FILESROOM + DAOsHEALTH CONNECT
-
Music Player — Streaming Audio App
FIG. 10 — QUEUE SURVIVES THE RESTART
A full-featured streaming music player with background audio and a persistent queue.
- PROBLEM
- Build a real music app — not a demo: search, background playback, and state that doesn’t reset every launch.
- APPROACH
- Expo dev-client app with debounced infinite-scroll search, full playback via expo-av with background support, a mini-player synced with the full player across screens, shuffle and repeat modes, and queue persistence in MMKV for synchronous O(1) reads.
- STACK
- React Native (Expo) · TypeScript · Zustand · expo-av · MMKV · React Navigation
- OUTCOME
- A standalone Android build with background audio and a queue that survives app restarts.
BACKGROUND AUDIOMMKV PERSISTENCETYPESCRIPT
Tools of the trade.
COUNTS ARE LIVE — SELECT A SKILL TO SEE IT IN THE INDEX ABOVE.
LANGUAGES
- JAVA
- C
FRAMEWORKS & RUNTIMES
AI & SYSTEMS
- LINUX & SELF-HOSTING
- ARDUINO
- GOOGLE CLOUD
The record so far.
-
2026–NOW
COMPANY
Annontrix — Co-founder
A software studio in Hamilton, Ontario: custom software, websites, and mobile apps for businesses, and portfolio websites for high-school and university students. annontrix.vercel.app ↗
-
2025–2029
EDUCATION
McMaster University — BASc Computer Science (Co-op)
Hamilton, Ontario. Coursework across Python, computational thinking, software development, C & Linux, linear algebra, and discrete math.
-
JUN–JUL 2026
PRODUCT
MentorMatch — Product Engineering (two-person team)
Designed and shipped the mentor-matching subsystem end-to-end on a live mentorship platform, then led a verified zero-behavior-change refactor and a WCAG-AA redesign of the portal and marketing site.
-
MAY 2022
RESEARCH
SysIdea Lab, IIT Gandhinagar — Robotics Research Intern
Prototyped robotic components with 3D CAD, laser cutting, and 3D printing; assisted experimentation, debugging, and performance analysis at the hardware–software boundary.
-
2024
LEADERSHIP
House Captain — Student Council, JNS
Led the house to the Sports, Cultural, and overall House trophies in a single year — the first time in a decade.
Away from the keyboard.
FIG. 11 — THE ITALIAN GAME, THREE MOVES IN
🏸 BADMINTON
Fast rallies, faster footwork — the other kind of reaction time.
♪ MUSIC
Always playing something — usually while debugging.
OPEN TO SOFTWARE · ROBOTICS · NLP CO-OP ROLES
Let's talk.
I'm actively looking for co-op and internship opportunities in software engineering, robotics, and NLP. If your team ships, I'd love to hear from you.
— Akshay