Software Engineering (Honours) @ Macquarie University, graduating June 2027.
Research Software Engineer Intern @ ACU Institute for Positive Psychology & Education.
Sydney-based.
Right now I write the Python that generates ~5,000 wellbeing reports a year for
Australian school principals. Nobody proofreads them before they send, so the
code has to be right the first time. That's the kind of problem I like.
Also: production Next.js, and embedded controllers that have to fail safely.
|
My day job. Around 2,500 Australian school principals take a wellbeing survey each year. This pipeline turns every submission into a personal PDF report, and flags anyone whose answers suggest they need support. I work on the code that generates them. How it works What I've shipped
The hard part: those ~5,000 PDFs render unattended and nobody proofreads them before they send. A quiet scoring bug reaches a real person. Runs under HREC ethics approval, so: data minimisation, no participant data into third-party tools, every change peer reviewed. Private repo, no links. |
Built and run it on my own. The public site for UTS Bangladeshi Society, serving a community of ~500. MIT-licensed. The committee changes every year and none of them write code, so the site is built to be edited by people who aren't developers: content comes out of a CMS, and every change gets a preview deploy before it goes live. |
|
Any AI tool will write you a research report. This one won't publish a sentence it can't trace back to a real source. Give it a topic. It searches, saves an exact copy of every page it reads, then writes the report only from what those pages actually said. Each claim gets checked back against the archive. Claims that don't hold up are withheld and listed with the reason, not quietly left in. Any run replays offline from its own archive, so you can re-check a report months later. Also runs a separate numeric check, because a model that gets a number wrong usually still sounds confident. Built on crawl4ai. Published to PyPI; source private while the archive layer settles. |
An assistant that knows who you are, so your tools stop asking. I had six automation scripts job-hunting for me. They applied to zero jobs for six days. Nothing crashed: they filled in 13 of 20 form fields, hit "do you need visa sponsorship?", and binned the application. The answer was already in a config file. Nothing thought to look, and the alert about it sat unread in a text file for 143 hours. Every fact it stores records where it learned it. It answers on your behalf only when it can point at where you already said that. Everything else becomes a question for you. |
|
ENGG2000/3000 group capstone. A working model drawbridge that raises and lowers itself, built to fail safely. Two microcontrollers, split so neither can strand the bridge. They ping each other constantly; if either stops answering, the bridge stops moving. |
Cold outreach, automated. Type a company name. It finds the right people, drafts a personalised email to each, and queues them for you to approve before anything sends. Frozen as a portfolio piece (April 2026). Clone and run |
Motion Control (2024). A motor-driven carriage that runs a set sequence and stops itself before it hits anything. Most of the work was in the sensors: raw readings are noisy, so the code has to tell a real obstacle from a bad reading. RFID Inventory Tracker. Team project, I was Scrum Master. Scanned tags update stock in real time and sync automatically. I ran the sprints and the sessions with users to work out what they needed. |
| Project | What it does | State |
|---|---|---|
| wasif-skills | My Claude Code toolkit: verifies documents against their own sources, and runs a spaced-repetition study loop that tracks what I keep getting wrong | Public, I use it daily |
| decision.log | Records why a team chose an architecture, so the reasoning survives the people who made the call. Versioned, searchable | Public, demo mode |
| AutoDocs | Reads a TypeScript codebase's syntax tree and writes the docs in CI. The LLM output is schema-checked, so malformed docs fail the build | Public, demo mode |
| orchi | Court queue for pickup basketball. Winner stays on, loser rotates out, streaks tracked, plus a wall-screen mode for the display at the court | Private, live |
| banjo | Voice assistant that runs entirely on my own machine. Speech in, and a router that decides what to do with fixed rules rather than asking a model | Private |
| agent-harness | Long-term build. Coding agents have gaps that everyone patches with the same handful of add-ons; this ships those natively | Research + design |
| conduit | Connected authenticated APIs to Claude via MCP | Archived Jul 2026 |
Feb 2022 to Jun 2027 · North Ryde, Sydney



