Ayaan Mustafa

๐Ÿ‘‹ Hi there, I'm

Ayaan Mustafa

I build things I'm passionate about and ship them. Here's what I've made.

See my projects

projects.

Loonie home page: Grocery prices have a story โ–ถ Promo ยท 0:20

Loonie

2026

Canadian grocery price tracker

Nightly store-level price history for Canadian groceries, so you can tell a real deal from a sale sticker.

  • Next.js
  • Python
  • Postgres
Day One: every line checked before you read it โ–ถ Demo ยท 1:25

Day One

2026

Open Agent Hackathon 2026

AI agents that turn hospital discharge papers into a plain-language summary, checked line by line for safety.

  • TypeScript
  • AI Agents
  • NVIDIA Nemotron

about.

I like turning ideas into things people can actually use.

I'm a Computer Engineering student at Toronto Metropolitan University (Fall 2026), with a long-term goal of building a career in tech, whether that's as an engineer, a founder, or both.

Going into university, I'm looking to get involved in projects, competitions, and opportunities that push my technical skills further and put me around people building ambitious things. Always open to connecting with other students, engineers, and founders.

Personal project ยท Sep 2026 to now

Loonie

Is today's grocery price actually a good deal? Loonie keeps the price history to tell you.

Daily store-level price history for Canadian groceries, from ten Ontario stores across five Loblaw-owned banners (No Frills, Real Canadian Superstore, Loblaws, Zehrs and Fortinos), checked every night since September 21, 2026. Flipp and reebee show what's on sale, not what's cheapest, and none of them keep price history. There's no CamelCamelCamel for Canadian groceries, and price history can't be filled in after the fact: that gap is the project.

  • 82,925products tracked
  • 2,056,517price observations
  • 46nights of history

Screenshots

What it does

  • Search every store's latest price, closest match first and typo-tolerant, sorted by price or unit price, with a 7-day sparkline and a deal badge
  • Product page: the full price history as a chart, a verdict on whether today's price is a good one, and the same item at every other store
  • Basket: what your whole list costs at each store, and what a mix of stores would save
  • Price changes: every shelf price that went up or down overnight, biggest change first
  • Stores near a postal code, using only its first three characters, with no accounts at all

How it works

  1. Nightly triggerSupabase starts the run at 07:10 UTC, since GitHub's own schedule ran 5 to 8 hours late.
  2. IngestA rate-limited Python client (httpx, pydantic) checks 167 search terms at every store.
  3. NormalizeExtracts unit prices, converts units and stores money as integer cents.
  4. StoreWrites only price changes to a Postgres time series. History is never rewritten.
  5. ServeNext.js 15 server components on Vercel. Search works even with JavaScript off.

Highlights

  • Has run on its own every night since September, on $0 of infrastructure
  • If the on-time start is ever missed, a fallback run catches it and emails me
  • CI runs linting, Python tests, web tests and a full build on every change; tests never touch the network
  • The site uses a read-only database key locked down with row-level security

Built with

  • Next.js 15
  • TypeScript
  • Python
  • Postgres
  • Supabase
  • GitHub Actions
  • Recharts
  • Vercel

Open Agent Hackathon 2026 ยท Oct 22โ€“27

Day One

Hospital discharge papers, made plain and checked line by line.

Discharge papers are full of jargon, abbreviations and dosing instructions that are easy to misread at exactly the moment a patient is tired, stressed and going home. Day One is a web app (it works on a phone too) where a patient uploads a photo or the text of their discharge summary and gets back a short, plain-language version they can read or listen to.

What it does

  • Rewrites the papers at a grade-6 reading level, with every bullet pointing back to the line it came from
  • Builds a daily medicine schedule and labels each medicine as new, changed or stopped
  • Gives a clear "call 911 if" list and questions to ask the doctor
  • Reads each section aloud, highlighting the words as they're spoken
  • Answers follow-up questions like "Can I shower?" using only that patient's own papers

How it works

  1. ScanTurns photos into text and splits it into sections. Asks for a rescan if a page is too blurry.
  2. ExtractTurns the text into structured fields, each tied to its exact source line.
  3. LookupLooks up every medicine and term in Zetaris and compares the list with the hospital record.
  4. SimplifyRewrites everything in plain language, at a grade-6 reading level.
  5. Safety checkA separate AI call checks every bullet against its source and sends failures back to Simplify, up to twice.
  6. Read aloudText-to-speech for each section, with word timings.

Highlights

  • Catches real mistakes: in the demo it flags a carvedilol dose of 12.5 mg on the papers against 25 mg in the hospital record
  • Never touches real patient data: the hospital records are synthetic
  • Runs from a clean clone with one command and no installs, or in Docker
  • Every run is logged with a full audit trail of each agent's input and output

Built with

  • TypeScript
  • Node.js
  • AI Agents
  • NVIDIA Nemotron
  • Zetaris
  • Python
  • Java
  • Docker