RishavpreetSingh
Building practical software at the intersection of cloud, data, and AI.
Turning data and ideas into practical software.
I'm a Computer Science grad from UBC (Class of 2026) with a Data Science minor. I build full-stack software: backend pipelines, cloud infrastructure, and functional frontends.
At Aeroqube, I worked as a Frontend Developer Intern on AI healthcare products. I cut a healthcare admin console's activity-log load times by ~90% after tracing the bottleneck to client-side rendering, redesigned a veterinarian-facing AI chatbot in React and Next.js, and replaced a self-managed Express/Nodemailer email service with a serverless AWS Lambda and SendGrid workflow.
My projects tend to involve messy data or tight constraints. JobLens is a full-stack job-market intelligence platform that ingests Canadian tech postings across 22 employers, extracts skills with a Groq/Gemini fallback chain, and scores explainable resume-to-job matches. CaseFlow is a Spring Boot and Angular case-review workflow for a mock bank, with maker-checker approvals, idempotent APIs, and a transactional outbox. Adventure of the Ages is a C++ platformer with a custom OpenGL engine. Loopr is a local-first React Native multitrack recorder with an ASP.NET Core backend and presigned S3 uploads.
BASED IN
Vancouver, BC
EDUCATION
BSc Computer Science · Data Science Minor · UBC
GRADUATED
May 2026
EXPERIENCE
Frontend Developer Intern · Aeroqube
TARGETING
Backend · Full-Stack · Cloud & Data Engineering
CURRENTLY
Open to Full-Time Roles
How colleagues describe me
Tech I work with
The tools I reach for.
Organized by category. Hover any skill for context from real projects.
Programming languages I've used across coursework, projects, and production work.
Where I've worked.
Production experience building cloud and AI products.
Aeroqube
InternshipFrontend Developer Intern
Frontend, cloud & AI products
Cut healthcare AI admin-console activity-log load times from 5–10s to under 1s after tracing the bottleneck to full-dataset client-side rendering, then moving pagination and sorting server-side and debouncing search.~90% faster
Replaced a dedicated Express/Nodemailer backend for healthcare AI lead-capture emails by migrating form submissions and automated responses to AWS Lambda, API Gateway, and SendGrid with SSM-managed credentials.
Redesigned a veterinarian-facing AI chatbot in React and Next.js with recency-grouped chat history, cited response sources, and AI-generated conversation titles, moving model and prompt controls into an admin configuration panel.
Scaled Aeroqube's company website across dozens of content pages by designing the full experience in Figma and building reusable React and Tailwind components for integration into an editable WordPress site.
Things I've built.
From 48-hour hackathons to semester-long engineering projects.
Apr – Jun 2026
JobLens
A job-market intelligence platform that ingests Canadian tech postings, extracts skills with LLMs, and scores explainable resume-to-job matches.
The Problem
Tech job postings are scattered across employer sites and are hard to compare. As a candidate, it can be difficult to tell which roles match your current skills, which gaps matter most, and why one job may be a better fit than another.
My Approach
Built a full-stack job-market intelligence platform: a Python ingestion pipeline pulls postings from 22 employers across 4 ATS integrations, deduplicates and validates them, and runs them through a hardened LLM skill-extraction pipeline with a Groq → Gemini → deterministic-dictionary fallback chain. A match engine weights skills by role-specific market demand and returns per-skill evidence instead of a black-box score. The frontend is a server-rendered Next.js and TypeScript app over a FastAPI and PostgreSQL backend, with a role-restricted Django operations portal for pipeline visibility. Deployed on AWS Lightsail with Docker Compose and Caddy, gated by hundreds of automated tests in CI.
Key Results
- Unified live Canadian tech-job ingestion across 22 employers and 4 ATS integrations with provider-specific normalizers, 3-tier deduplication, Canada-aware location filtering, and 7 validation gates that block degraded snapshots from shipping
- Hardened LLM skill extraction with deterministic decoding, a validated output contract, versioned prompts, per-skill confidence scores, extraction reuse for unchanged postings, and a Groq → Gemini → deterministic-dictionary fallback chain, evaluated against a hand-labelled precision/recall test set
- Explainable match engine weighting skills by role-specific market demand, distinguishing required from preferred skills, parsing experience requirements, and returning per-skill evidence with matched and missing gaps
- Server-rendered Next.js and TypeScript frontend over FastAPI and PostgreSQL, with job browsing, market insights, and streamed Markdown/PDF reports, keeping backend traffic behind the Next.js server on a private Docker network
- Automated AWS Lightsail delivery with Docker Compose and Caddy, gated by 433 Python and 37 frontend tests, lint/type checks, ordered Alembic/Django migrations, security scans, automatic rollback, and 86% branch-aware core-backend coverage
- Diagnosable ingestion and LLM failures via persisted run telemetry and rejected-record counts, surfaced through a role-restricted Django operations portal, with correlation-ID request logs and tests asserting résumé text is never logged
Tech Stack
Where I learned to think.
Four years at UBC: CS theory, data science, and real systems.
University of British Columbia
Bachelor of Science · Computer Science
Minor in Data Science
Relevant Coursework
4+
Years at UBC
CS + Data Science double-track
