Jake Zhang
Toronto

Jake Zhang

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

Jake Zhang

Recognition

Work

  1. 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

  2. 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

  3. 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.

  4. 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 semantic search works Policy clauses are embedded once and a query is embedded per request, both by the same encoder. The normalised vectors sit on a unit sphere, drawn here as a quarter circle. Clauses are ranked by the cosine of the angle between each clause vector and the query vector; the three smallest angles are the top three results. Policy clausesembedded once Queryper request EncoderSBERT · Nomic embed θ query top-k by cos θ 1 2 3 How semantic search works Clausesembedded once Queryper request EncoderSBERT · Nomic θ query top-k by cos θ 1 2 3
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.

    Sentence-TransformersNomicMongoDB Vector SearchFastAPI

  • Sept 2026

    Chromajam EmberHacks winner

    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.

    TauriRustCloudflare

AI & ML
PyTorch, Sentence-Transformers, LangChain, RAG, MCP, Agent Skills, hyperparameter optimization
Build with
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.

TauriRustCloudflareFirebaseStripeOpenTofuGitHub ActionsGrafana

Fileverse

Dec 2025–Jan 2026

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

Fileverse request flow The Next.js client signs in with Cognito and asks Lambda for a presigned URL. Lambda records the file in DynamoDB. The browser then uploads or downloads the file directly with S3. BrowserNext.js · React Cognitosign-in Lambdapresigns URLs DynamoDBfile records S3file storage signs direct upload / download Fileverse request flow BrowserNext.js · React Cognitosign-in Lambdapresigns URLs S3file storage DynamoDBfile records signs direct upload / download via presigned URL
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.

    AngularNestJSMongoDB

  • 2026

    Daily Record Overlay

    A transparent tray app that reads today’s activity from ActivityWatch’s local API, without writing anything back, to keep my day on track.

    ElectronJavaScript

  • 2023

    Animated profile site

    A personal site whose page transitions use Lottie animations I drew myself.

    AngularLottie

  • 2024

    Realtime socket test

    A realtime channel between an Angular client and a NestJS gateway over Socket.io.

    AngularNestJSSocket.io

  • 2022

    EduTracker

    Tracks marks and predicts outcomes.

    AngularTypeScript

  • 2020–2022

    Tower Defense

    The core mechanics of a tower defense game.

    PythonPygame

Hackathons

12

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

    How Chromajam works Once per run, a text prompt goes to Gemini, which returns one JSON plan that is checked against a schema, and Tone.js plays that plan. Every frame, a Web Audio analyser takes an FFT of the playing audio and Canvas 2D draws each instrument as its own shape, then the loop repeats on the next animation frame. once per run every frame audio requestAnimationFrame Prompttext in Geminione call per run JSON planschema-validated Tone.jsplays the plan AnalyserWeb Audio FFT Canvas 2Da shape per voice How Chromajam works once per run every frame audio Prompttext in Geminione call per run JSON planschema-validated Tone.jsplays the plan AnalyserWeb Audio FFT Canvas 2Da shape per voice
    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.

Skills

Languages
Java, Python, C, C++, C#, TypeScript, JavaScript, SQL, Rust, HTML, CSS
Frameworks
React, Next.js, Angular, Node.js, Express, NestJS, .NET, FastAPI, Tauri
Cloud & infra
AWS (Lambda, S3, DynamoDB, Cognito), Azure Pipelines, Cloudflare, Firebase, Docker, OpenTofu, GitHub Actions
Data & tools
SQL Server, Duck Creek, MongoDB vector search, Firestore, Git, Grafana, Poetry, Vite

Contact

I’m looking for full-time software engineering roles starting in 2027. Email is the fastest way to reach me.