Software engineer · UofT Computer Science, class of 2027
I build full-stack software that ships. At C-Quence, the semantic search engine I built won Best Use of AI at the 2024 Insurance Times Tech & Innovation Awards, and the Batch Quoting frontend I built was highly commended in Technology Innovation of the Year. Right now I’m building .NET tools and Azure pipelines around Duck Creek for underwriters at Northbridge Insurance, and on the side, Companion0, an AI desktop companion for Windows.
Open to full-time software engineering roles from May 2027
Won Best Use of AI, Broker / Insurer / MGA — the semantic search engine I built with SBERT sentence transformers and FastAPI.
Highly commended in Technology Innovation of the Year — the Batch Quoting frontend module I built.
Work
2025–Now
Software Developer Intern Northbridge Insurance
Toronto, ON
Rebuilt the data layer and UI/UX of a legacy .NET batch testing tool. I replaced its row-by-row queries with SQL stored procedures written from scratch, which cut a full run’s time by 90% and let QA run their own tests without waiting on a developer.
Built a Manuscript Versioning app in .NET and C# for our Duck Creek Policy platform that helps underwriters quickly find and update the correct version of a policy document, reducing the risk of working from outdated information. I designed the architecture and built the version filtering and updating.
Built an automated Azure pipeline that uses Duck Creek’s MSCop to catch malformed manuscripts. It replaced a manual validation process that took about 5 hours with a 10-minute automated run, 30 times faster.
.NETC#SQL ServerAzure PipelinesDuck CreekMSCop
2023–2024
Junior Full Stack Software Engineer C-Quence Insurance
Remote · Summers 2023 and 2024
Independently built the Angular frontend for Batch Quoting, so brokers could upload a spreadsheet and get quotes for many risks at once instead of entering them one by one, and integrated it with the backend quoting APIs.
Built a Python semantic search engine that finds relevant clauses across policy documents by meaning rather than keywords, using SBERT and Nomic AI embeddings, MongoDB vector search and a FastAPI REST API.
Containerized and packaged the search service with Docker and Poetry into a deployable retrieval pipeline that returns ranked policy clauses from plain-language queries.
Led the build of feature access control in NestJS and MongoDB, and built Angular dashboard cards backed by a NestJS API.
Animated the company’s loading icon from its logo in After Effects.
AngularNestJSMongoDBPythonFastAPIDocker
2022–2024
Coding & Math Tutor Self-employed
Markham, ON
Planned interactive lessons, adapted to each student as we went, and kept them motivated as they grew.
2021–2022
Website Developer Assistant, Co-op U+ Education
Markham, ON
Built the company’s entire website from scratch in React.
AI
I’ve shipped AI to production, won with it at hackathons, and build with AI agents every day. The pattern I keep coming back to: let the model handle meaning, and keep everything around it deterministic, validated and testable.
How the award-winning search finds clauses by meaning. One encoder turns clauses and queries into unit vectors, so relevance is just the angle between them: the smaller θ, the higher cos θ, the better the match. Drawn in 2D; real embeddings have hundreds of dimensions.
2023–2024
Semantic search engine C-Quence Insurance
Won Best Use of AI · Insurance Times 2024
Retrieval for policy documents: SBERT and Nomic AI embeddings indexed in MongoDB vector search, served through a FastAPI REST API and packaged with Docker and Poetry as a deployable pipeline that returns ranked clauses from plain-language questions.
Gemini plans the music once per run as schema-validated JSON; Web Audio and Canvas render it every frame without calling the model. The LLM is the composer, never the hot loop.
Gemini APIStructured outputTone.js
2026–Now
Companion0
An always-on-top AI companion for Windows that watches on-screen activity and starts conversations on its own, instead of waiting for a prompt.
Claude Code, ChatGPT, GitHub Copilot, Cursor, Antigravity, Muse
Projects
Companion0
Aug 2026–Now
An always-on-top AI companion for Windows that watches what’s on screen and starts conversations on its own, without waiting to be prompted. It ships as a signed .msi with auto-updates.
Payments run through an event-driven Stripe webhook pipeline on Cloudflare Workers and Queues. Each customer gets a Durable Object so their updates apply in order, and failed events land in a dead-letter queue. Writes are idempotent and keyed by event ID, so retries and duplicates are safe, and chaos tests cover duplicate, out-of-order and failed events.
All infrastructure is defined in OpenTofu. GitHub Actions plans on every pull request and deploys on merge, and Grafana dashboards watch the pipeline with an alert on the dead-letter queue.
A personal cloud storage app, effectively a scaled-down Google Drive. A user signs in, uploads files to their own private storage, and browses, downloads or deletes them from the browser.
It’s fully serverless on AWS: Cognito handles sign-in, Lambda issues S3 presigned URLs so file bytes go straight between the browser and S3 without passing through a server, and DynamoDB keeps each user’s file metadata. I learned AWS from the ground up to design and deploy it.
Next.jsReactLambdaS3DynamoDBCognito
How a file moves. The browser signs in, Lambda presigns a URL, and the bytes go straight to S3.
2023–2025
PrioTask
A full-stack task app with a NestJS REST API behind an Angular frontend, and JWT registration and login built from scratch.
hackathons attended so far. The most recent one I won:
Sept 2026
Chromajam Winner · EmberHacks 2026
Type a text prompt and it generates the result as playable audio and a downloadable .mid or .mp3 file. Every instrument keeps its own colour and shape on a live canvas, so a deaf or hard-of-hearing user can follow the separate voices by sight instead of by ear.
I split the work between a slow semantic layer, where Gemini returns one schema-validated JSON plan per run, and a real-time layer, where Web Audio FFT and Canvas 2D drive the visuals every frame.
JavaScriptNode.jsExpressViteTone.jsGemini API
Two speeds. The model runs once to write the score; the browser redraws every frame from the live audio, so the visuals never wait on an API call.
Beyond code
Alongside the engineering, I make things with motion, games and sound.
Motion
Animated C-Quence’s loading icon from its logo in After Effects, and drew the Lottie animations for my own site’s page transitions.
Games & 3D
Games in Pygame and Greenfoot, including Bullet Cell in Java, a 2D character controller, and work in Unity, Unreal Engine 5 and Blender.
Sound & video
Composing in LMMS, editing audio in Audacity and cutting video in Filmora.
Teaching
Ran a coding and math tutoring business for almost two years.