Vancouver, BC Full-stack developer

How I got here, and what’s next.

My path into development grew out of working in a business and seeing what better tools could make possible. What started as an interest became a deliberate career choice: I wanted to spend more of my time solving problems through code. Today, I’m a full-stack developer building production software, with an approach shaped by the people and processes behind it.

I enjoy the mix of technical problem-solving and creativity that comes with building a product from end to end. My work spans web applications, API development, database design, and deployment, and I care about making the result feel straightforward for the people using it. I’m especially interested in applied machine learning and AI that solves real business problems, and how they can fit into useful, thoughtfully built products.

This portfolio brings together the systems I’ve shipped, what I’ve learned, and the ideas I’m exploring next. I’m looking for opportunities to take on deeper technical challenges, learn alongside other developers, and contribute to products people depend on. I do my best work when I stay with a problem until it’s properly solved, and I want to keep working that way.

My path into development grew out of working in a business and seeing what better tools could make possible. Today, I’m a full-stack developer building production software, shaped by the people and processes behind it.

My work spans web applications, APIs, databases, and deployment, and I’m especially interested in applied machine learning and AI that solves real business problems. I’m looking for deeper technical challenges and products people depend on.

Aathavan Sri, Me
Aathavan Sri, Hobbies
Aathavan Sri, Places
Contact me

My Local Time

0 0 0 0 0 0 0 0 0 0 0 0 AM AM

Currently building

DriveTerminal: Zero to Sixty, From Scratch

DriveTerminal is a vehicle marketplace I’m building to make international car shopping feel fast, simple, and trustworthy. The idea is to help you discover vehicles across borders, connect to sellers, and find freight forwarders to bring your new car to you. Starting as a curated storefront, the vision is to grow into a full marketplace where anyone can create an account and list their own vehicle. I’m building it from the ground up as a complete, full-featured product.

DriveTerminal is a vehicle marketplace I’m building to make international car shopping feel fast, simple, and trustworthy: discover vehicles across borders, connect with sellers, and find freight forwarders to bring your new car to you.

A vehicle marketplace I’m building from the ground up to make international car shopping feel fast, simple, and trustworthy.

TypeScriptNext.jsPostgreSQLDockerAzure

10projects available

3 in production3 shipped4 coursework
  1. 01 01 Salon Management Platform Bookings and studio management
  2. 02 02 Logistics Operations Platform Freight jobs, inquiry to delivery
  3. 03 00 Logistics Documentation Portal Shipment intake and e-signatures
  4. 04 03 FinCast AI Chat to finance-ready forecasts
  5. 05 00 TownSquare A community events app
  6. 06 00 Self-Hosted LLM Platform A gateway for a self-hosted LLM
  7. 07 04 Insurance Claim Severity Predicting claim severity
+4 more View all
Read my résuméThree flavours, pick one

Appearance

Highlight

Grape Soda #AF52DE

Server

Up 34d
  • CPU 23%
  • Memory 61%
  • Disk 48%

Projects

What I've built and shipped

Salon services · Booking platform In production

Salon Management Platform

Overview

Online booking, automated client emails and a studio back office that replaced Instagram DMs and a paper calendar for a working Vancouver salon.

Tech stack17

Languages

  • TypeScript

Frameworks

  • Astro
  • React
  • Hono
  • Node

Databases

  • PostgreSQL
  • Drizzle ORM

Auth & security

  • JWT

Infrastructure

  • Docker Compose
  • Caddy

Libraries & tooling

  • Vite
  • Luxon
  • Recharts
  • Zod
  • Nodemailer
  • Tailwind
  • npm workspaces
Features5+
  • Booking and slot engine: Clients pick services, add-ons and retail products, then a time, with no account needed. Availability is calculated in the studio's time zone on a 30-minute grid. It accounts for weekly hours, holidays, recurring closures and "by appointment" days, and adds up the length of every service and add-on in the booking.
  • Guest-to-customer CRM: Public bookings stay guest requests until the stylist confirms them, then link to a client record found by normalized email. This keeps no-shows and typos out of the client list. Duplicate clients can be merged, which combines their extra emails, phone numbers and outstanding balances.
  • Automated email lifecycle: Booking requests, confirmations, pre-visit reminders, aftercare tips, and rebooking nudges at several intervals with a recommended next service. A background worker sends them on schedule. The stylist edits every template with a live preview. Calendar invites and the subscribable feed update the same event when an appointment changes.
  • Inventory and analytics: Retail and supply stock is tracked in purchase batches with their real cost, so every product sale shows its profit. Supplies are logged per appointment, and low stock is flagged. A Recharts dashboard shows revenue by day and by service, average booking value, new clients and cancellations.
  • Security and privacy: The stylist's dashboard sits behind bcrypt password login and JWT sessions, and every input is validated with Zod. Each booking records when the client consented, along with the exact privacy, terms and cancellation policy URLs they agreed to. Clients can cancel themselves through an unguessable link in their emails.
  • You can find these features and more in the live demo.
Architecture
Four apps, one API, one database.
Data model
Core schema, five of 8 tables. Guest contact fields live on the appointment until confirmation links it to a customer. Not shown: weekly_hours, app_settings and email_templates, and columns such as consent timestamps and the cancel token.
Booking lifecycle
Every transition triggers its emails and calendar updates automatically.
Preview coming soon

Logistics · Internal web platform In production

Logistics Operations Platform

Overview

A freight operations system where a website inquiry becomes a routed job and walks an eleven-stage shipment pipeline.

Tech stack11

Languages

  • TypeScript

Frameworks

  • Next.js
  • React
  • NestJS

Databases

  • Prisma
  • PostgreSQL

Auth & security

  • NextAuth

Libraries & tooling

  • Gmail API
  • Google Geocoding & Places
  • Turbo monorepo
  • Tailwind
Features8
  • Lead ingestion: Website contact forms webhook into the API and become job records, with a triage fallback so an unmatched lead reaches a human instead of being dropped.
  • Location standardization: Google Geocoding turns free-text origin and destination into structured city, province and country before anything else touches the job.
  • Routing engine: Origin-based assignment resolves the owning agent from priority and exclusion rules, with a sentinel for leads no rule claims.
  • Stage engine: Eleven stages driven by a code-defined step catalog, with promotion steps, per-service sequences, and blocked/cancelled as orthogonal flags.
  • Quoting: Branded quote builder with drafts, Gmail delivery, and a public token page where clients accept without creating an account or seeing internal cost.
  • Shared inbox: Gmail synchronizes on a five-minute cron, deduplicated on RFC Message-ID and mapped to per-user threads linked back to jobs and clients.
  • Document correlation: An opaque correlation token is handed to an external paperwork portal, which webhooks on completion and advances the job automatically.
  • Admin console: Users, invites, services, carriers, rates, routing rules, task templates and board scope, all behind role guards.
Architecture
Two apps and one API. Simplified: Redis (connected but not yet used) and NextAuth's own Google sign-in step are left out, and hosting isn't shown because the repo doesn't define it.
Data model
Six of 27 tables. Not shown: email messages, routing rules, service stages, rates, bookings, carriers, tasks and their templates, webhook logs, and the per-stage timestamps on jobs.
Shipment pipeline
The full stage order. Simplified: each stage's own checklist of steps, and the blocked and cancelled flags, are left out of the run.
Preview coming soon

Logistics · Client portal In production

Logistics Documentation Portal

Overview

A shipment intake and e-signature product that owns the whole document lifecycle: collect, encrypt, consent, sign, seal, notify.

Tech stack14

Languages

  • TypeScript

Frameworks

  • Next.js
  • React

Databases

  • PostgreSQL
  • Drizzle ORM

Auth & security

  • Auth.js
  • Node crypto (AES-256-GCM)

Infrastructure

  • GitHub Actions

Libraries & tooling

  • Zod
  • react-pdf
  • pdf-lib
  • @signpdf
  • Nodemailer
  • Jest
Features8
  • Ten-step intake wizard: Drafts persist as structured JSON with a file-reference map; shipping type decides which sections appear, and progress survives across sessions and form versions.
  • Encrypted uploads: Identity and cargo documents are written to disk under AES-256-GCM, never stored as plaintext at rest.
  • First-party e-signature: Electronic consent, a drawn signature, a SHA-256 content hash, an audit trail and an optional PAdES organizational seal, built rather than embedded from a vendor.
  • Master PDF pipeline: Manifest, insurance, terms, attachments and an audit page are flattened server-side into one signed document.
  • Amendments, not edits: Amending copies the form data and ciphertext into a new draft linked to the original, so a signed package is never edited in place. The one exception is an admin reverting a submission to draft.
  • Delivery surfaces: SMTP to the customer and assigned staff, an optional CRM webhook with retries, and a key-authenticated delivery API with time-limited signed links.
  • Domain rules: NHTSA VIN decoding with a 24-hour cache and a hand-written Canadian export HS code helper: the parts that make it freight software rather than a form.
  • Admin operations console: Paginated, searchable review of drafts and submissions, plus user management, admin assignment and account pausing.
Architecture
One app does it all. Simplified: the optional digital seal and the in-memory rate limiter are folded into the app, and where PostgreSQL runs isn't pinned down by the repo.
Data model
Six of 8 tables. Not shown: audit_log and standalone signable documents, the self-links for amendments and assigned admins, and that submissions.user_id has no foreign key to users.
Preview coming soon

Capital planning · Forecasting agent Delivered

FinCast AI

Overview

A chat-driven forecasting agent that turns a conversation into finance-ready Excel workbooks and charts.

Tech stack11

Languages

  • Python

Frameworks

  • Flask
  • aiohttp

ML & data

  • Microsoft Bot Framework
  • Azure OpenAI (GPT-4o)
  • pandas
  • NumPy
  • openpyxl
  • Matplotlib

Infrastructure

  • Azure App Service
  • ARM templates
Features8
  • Conversational intake: New forecasts and monthly updates are walked by a step-per-handler state machine: each handler collects one thing and returns the handler for the next turn.
  • Language understanding: Azure OpenAI handles intent classification and structured extraction from free text, and nothing else.
  • Deterministic forecast engine: Working days, labour hours and costs are computed in code, with an actuals-based correction factor capped at ±25%.
  • Excel generation: Cost-based and hours-based templates filled cell-by-cell from the forecast model, so the output matches the workbook shape stakeholders already read.
  • Forecast visualizations: Labour, fixed-cost, variance and top-cost charts rendered and returned as attachments inside the chat.
  • Reference data layer: Team rosters, project-number mappings, rates and BC statutory holidays sit behind a data-collection agent rather than being read ad hoc.
  • Project persistence & locking: Forecasts persist per project number with an in-process lock, so two simultaneous conversations cannot edit the same project.
  • Monthly updates: A second flow takes uploaded actuals (CSV or Excel) and monthly fixed costs for a saved project and regenerates the forecast and files from them.
Architecture
The Excel and chart generators are my part. Simplified: about fifty step handlers are folded into the agent API, file parsing in the bot is left out, and the workbooks and charts return to the chat as attachments (not drawn).
Data model
Not a database: each project is one saved object graph, and CPNPPM and FixedPriceCost are rows from the reference workbook. Simplified: six of 11 classes, and the forecast objects rebuilt on every run are left out.
Conversation flow
The new-forecast path, with the monthly-update path in the notes. Simplified: about fifty handlers grouped into twelve steps; retries and error fallbacks are left out.
Preview coming soon

Community events · Mobile app Shipped

TownSquare

Overview

A community events app where the mobile client behaves like a real participant in a distributed system, not a set of screens calling HTTP.

Tech stack13

Languages

  • Dart

Frameworks

  • Flutter
  • ASP.NET Core

Databases

  • Drift / SQLite
  • EF Core
  • PostgreSQL

Auth & security

  • flutter_secure_storage

Infrastructure

  • Docker
  • DigitalOcean
  • Nginx

Libraries & tooling

  • GetIt
  • Geolocator
  • Swagger / OpenAPI
Features8
  • Event discovery: Search and browse with optional geo distance sorting, backed by detail pages for events, memberships and vendors.
  • Layered data architecture: Every feature domain follows one shape: an abstract API, an HTTP implementation, a local store, and a repository that chooses between them.
  • Configurable fetch policies: A repository-level policy (cache-first, API-first, API-only) with a thirty-minute staleness window, so each screen picks its own freshness-versus-cost trade-off.
  • Startup prewarming: Events and memberships are warmed at launch so the Explore tabs have content the moment they open.
  • Dependency injection: A single composition root registers the whole object graph; screens resolve a repository instead of constructing an HTTP client.
  • Session management: Identity bearer tokens in secure storage, refreshed with an expiry buffer and injected into authenticated clients by the data layer.
  • Wallet and bookmarks: Saved events and bookmarks write through the user endpoint and read back from the local cache.
  • Offline-tolerant reads: A failed network call falls back to the local store rather than an error screen.
Architecture
The boxed rows are the part I owned. Simplified: five per-feature repositories are drawn as one, the get_it container is folded into the UI box, Nginx into the API link, and image storage is left out.
Data model
The phone's local store, six of 19 tables. Tables link by ID; Drift declares no foreign keys. Not shown: event images, links and categories, vendors, event requests and user settings.
Fetch policies
How a repository read resolves. Simplified: single-item reads use a looser rule (any cached row counts), and startup prewarming is left out.
Preview coming soon

AI infrastructure · Self-hosted gateway Live demo

Self-Hosted LLM Platform

Overview

A gateway that owns identity, API keys and metering in front of a self-hosted language model.

Tech stack12

Languages

  • TypeScript
  • Python

Frameworks

  • Node
  • Express
  • FastAPI

Databases

  • PostgreSQL

ML & data

  • Hugging Face Transformers
  • SmolLM2-1.7B-Instruct

Auth & security

  • JWT
  • Argon2

Infrastructure

  • Docker Compose

Libraries & tooling

  • Swagger / OpenAPI
Features8
  • Gateway pattern: Model requests go through the Node gateway, which checks the caller's key, counts the call and forwards it with the server's own inference key.
  • Two authentication models: httpOnly JWT access and refresh cookies protect the account, prompt and admin routes; a hashed bearer API key protects the model endpoint.
  • Self-hosted inference: A FastAPI service loads SmolLM2-1.7B-Instruct through Hugging Face Transformers, with GPU/CPU device fallback and an instruct chat template.
  • Usage metering: Successful model calls are counted per user, and every signed-in request per endpoint and user, with database-level upserts rather than read-modify-write.
  • Saved prompt library: Create, edit and delete saved prompts, with ownership checks on every mutation.
  • Admin observability: An auto-refreshing dashboard of users, per-endpoint call volume and per-user totals.
  • Documented API: OpenAPI and a hosted Swagger UI, so the contract is a document instead of a guess.
  • Containerized stack: Docker Compose brings up the gateway and PostgreSQL together; the inference service runs separately on its own host.
Architecture
Simplified: the web client also uses an API key for chat, the reverse proxy in front is implied by the setup rather than defined in the repo, and inference is protected by a shared key rather than a private network.
Data model
All four tables. prompts.userid isn't a foreign key (only part of the primary key), so no line is drawn to users. Unique indexes are left out.
Request path
POST /v1/api/ask from start to finish. Simplified: the cookie-session routes take a separate path, and there is no timeout on the inference call.
  • Insurance · ML pipeline Coursework

    Insurance Claim Severity

    Overview

    A multi-stage pipeline for predicting claim severity on a dataset that is ninety-five percent zeros.

    Tech stack8
    • Python
    • PyTorch
    • LightGBM
    • XGBoost
    • scikit-learn
    • Optuna
    • PCA
    • Stratified K-Fold CV

    Languages

    • Python

    ML & data

    • PyTorch
    • LightGBM
    • XGBoost
    • scikit-learn
    • Optuna

    Techniques

    • PCA
    • Stratified K-Fold CV

    Overview

    A multi-stage pipeline for predicting claim severity on a dataset that is ninety-five percent zeros.

    Tech stack8

    Languages

    • Python

    ML & data

    • PyTorch
    • LightGBM
    • XGBoost
    • scikit-learn
    • Optuna

    Techniques

    • PCA
    • Stratified K-Fold CV
  • Healthcare · ML pipeline Coursework

    Tumor Detection from Gene Expression

    Overview

    Separating tumor from normal tissue in high-dimensional gene expression data, with an interpretable model chosen on purpose.

    Tech stack6
    • Python
    • scikit-learn
    • pandas
    • NumPy
    • PCA
    • ANOVA F-test

    Languages

    • Python

    ML & data

    • scikit-learn
    • pandas
    • NumPy

    Techniques

    • PCA
    • ANOVA F-test

    Overview

    Separating tumor from normal tissue in high-dimensional gene expression data, with an interpretable model chosen on purpose.

    Tech stack6

    Languages

    • Python

    ML & data

    • scikit-learn
    • pandas
    • NumPy

    Techniques

    • PCA
    • ANOVA F-test
  • Automotive · Marketplace Coursework

    AutoBridge

    Overview

    A reverse marketplace for cars: buyers post what they want and sellers respond with concrete offers.

    Tech stack9
    • JavaScript
    • HTML
    • CSS
    • Bootstrap
    • jQuery
    • Firestore
    • Firebase Auth
    • Firebase Storage
    • Firebase Hosting

    Languages

    • JavaScript
    • HTML
    • CSS

    Frameworks

    • Bootstrap
    • jQuery

    Databases

    • Firestore

    Auth & security

    • Firebase Auth

    Infrastructure

    • Firebase Storage
    • Firebase Hosting

    Overview

    A reverse marketplace for cars: buyers post what they want and sellers respond with concrete offers.

    Tech stack9

    Languages

    • JavaScript
    • HTML
    • CSS

    Frameworks

    • Bootstrap
    • jQuery

    Databases

    • Firestore

    Auth & security

    • Firebase Auth

    Infrastructure

    • Firebase Storage
    • Firebase Hosting
  • Games · Game-playing agent Coursework

    Abalone Game AI

    Overview

    A C++ agent that plays Abalone well under a move clock.

    Tech stack4
    • C++
    • Minimax
    • Alpha-beta pruning
    • Iterative deepening

    Languages

    • C++

    Techniques

    • Minimax
    • Alpha-beta pruning
    • Iterative deepening

    Overview

    A C++ agent that plays Abalone well under a move clock.

    Tech stack4

    Languages

    • C++

    Techniques

    • Minimax
    • Alpha-beta pruning
    • Iterative deepening
  • Insurance · ML pipeline Coursework

    Insurance Claim Severity

    Overview

    A multi-stage pipeline for predicting claim severity on a dataset that is ninety-five percent zeros.

    Tech stack8
    • Python
    • PyTorch
    • LightGBM
    • XGBoost
    • scikit-learn
    • Optuna
    • PCA
    • Stratified K-Fold CV

    Languages

    • Python

    ML & data

    • PyTorch
    • LightGBM
    • XGBoost
    • scikit-learn
    • Optuna

    Techniques

    • PCA
    • Stratified K-Fold CV

    Overview

    A multi-stage pipeline for predicting claim severity on a dataset that is ninety-five percent zeros.

    Tech stack8

    Languages

    • Python

    ML & data

    • PyTorch
    • LightGBM
    • XGBoost
    • scikit-learn
    • Optuna

    Techniques

    • PCA
    • Stratified K-Fold CV
  • Healthcare · ML pipeline Coursework

    Tumor Detection from Gene Expression

    Overview

    Separating tumor from normal tissue in high-dimensional gene expression data, with an interpretable model chosen on purpose.

    Tech stack6
    • Python
    • scikit-learn
    • pandas
    • NumPy
    • PCA
    • ANOVA F-test

    Languages

    • Python

    ML & data

    • scikit-learn
    • pandas
    • NumPy

    Techniques

    • PCA
    • ANOVA F-test

    Overview

    Separating tumor from normal tissue in high-dimensional gene expression data, with an interpretable model chosen on purpose.

    Tech stack6

    Languages

    • Python

    ML & data

    • scikit-learn
    • pandas
    • NumPy

    Techniques

    • PCA
    • ANOVA F-test
  • Automotive · Marketplace Coursework

    AutoBridge

    Overview

    A reverse marketplace for cars: buyers post what they want and sellers respond with concrete offers.

    Tech stack9
    • JavaScript
    • HTML
    • CSS
    • Bootstrap
    • jQuery
    • Firestore
    • Firebase Auth
    • Firebase Storage
    • Firebase Hosting

    Languages

    • JavaScript
    • HTML
    • CSS

    Frameworks

    • Bootstrap
    • jQuery

    Databases

    • Firestore

    Auth & security

    • Firebase Auth

    Infrastructure

    • Firebase Storage
    • Firebase Hosting

    Overview

    A reverse marketplace for cars: buyers post what they want and sellers respond with concrete offers.

    Tech stack9

    Languages

    • JavaScript
    • HTML
    • CSS

    Frameworks

    • Bootstrap
    • jQuery

    Databases

    • Firestore

    Auth & security

    • Firebase Auth

    Infrastructure

    • Firebase Storage
    • Firebase Hosting
  • Games · Game-playing agent Coursework

    Abalone Game AI

    Overview

    A C++ agent that plays Abalone well under a move clock.

    Tech stack4
    • C++
    • Minimax
    • Alpha-beta pruning
    • Iterative deepening

    Languages

    • C++

    Techniques

    • Minimax
    • Alpha-beta pruning
    • Iterative deepening

    Overview

    A C++ agent that plays Abalone well under a move clock.

    Tech stack4

    Languages

    • C++

    Techniques

    • Minimax
    • Alpha-beta pruning
    • Iterative deepening

Tap the image to see it at full size · tap again to fit

Pinch or double-tap to zoom · drag to look around

Important notice

Skills & Technology

What I work with

Languages

Frontend

Backend

Data

Infrastructure

ML & AI

Workflow & Tools

Languages

Frontend

Backend

Data

ML & AI

Infrastructure

Workflow & Tools

    About Me

    How I got here

    Aathavan Sri, Software Developer
    Vancouver, BC
    Logistics BCIT Shipping code

    From shipping freight to shipping code.

    Born and raised in Canada, I built my career at World Cargo, starting as a logistics manager while I was still in school. Moving into marketing led me to web design, which reignited my passion for computer science.

    I started using what I knew to solve the business problems in front of me, which led me to build our document portal. Finding business solutions through software stuck with me, so I kept looking for ways to do more and grew my role into a developer position at the company.

    Born and raised in Canada, I built my career at World Cargo, starting in logistics while I was in school. Marketing led me to web design and back to computer science, and building our document portal grew my role into a developer one.

    Experience

    • Jul 2021 to Present Software Developer & Marketing Coordinator World Cargo Marketing
    • Sep 2025 to Dec 2025 Flutter Mobile Developer TownSquareInternship
    • Mar 2025 Software Architect & Backend Developer WorkSafeBCPracticum

    My work, interests, and what’s next

    • What roles am I after? Full-stack, backend, frontend, or AI/ML engineering roles. I’m most interested in building software a business relies on day to day. Full-stack, backend, frontend, or AI/ML engineering roles.
    • What interests me in a project? Problems where understanding the business is part of the engineering. I like figuring out how people work, what slows them down, and what’s worth building. Problems where understanding the business is part of the engineering.
    • What am I learning right now? I’m getting more comfortable with Azure and exploring more of what it offers, so I can make better use of it in my projects and at a professional level. Going deeper into Azure, for my own projects and at work.

    Outside work

    • Golf
    • Collecting
    • Concerts
    • Food
    • Gaming

    Education

    • 2025 · With Distinction Computer Systems Technology British Columbia Institute of Technology After UBC I wanted to go deeper, so I went back for a focused diploma. I picked the AI specialization to understand the math behind the models, not just how to use them.
    • 2022 Bachelor of Science University of British Columbia I showed up curious about science but unsure where to land. Computer science, physics, and earth and ocean sciences all stuck, so I built a degree around all three.

    Contact Me

    Let's get in touch

    Send me a message

    It lands straight in my inbox, and I'll reply to the email you leave.

    What's it about?

    Thanks for visiting. Feel free to reach out, whether it’s about a role, a project, or just to talk shop.

    Résumés / CV

    One per focus · PDF
    • View
      Full-stack Production web systems, end to end
    • View
      Backend APIs, data models and infrastructure
    • View
      AI / ML Applied ML, agents and self-hosted AI

    Availability

    Available for work

    Roles

    Setup
    In-officeHybridRemote
    Location
    VancouverTorontoSeattle

    PDF

    Résumé

    Opening…