Skip to main content
SASHA.C — Sasha Chernyavsky, home

Selected projects

My work

Three products I built end to end, each one click from its live version — then fifteen years of employment, described in words, because that work belongs to the companies I did it for.

Products I built end to end

Plane Spotter Board for Toronto Pearson at dusk: ten inbound flights, the nearest an Air Canada A220 from Los Angeles two minutes out, under the landing direction, airframe filter chips, a weather card and a list of airlines inbound.

Plane Spotter Board

plane-spotter-board.netlify.app

Plane Spotter Board answers one question: is anything worth driving to the airport fence for in the next half hour? It lists aircraft on approach to an airport, filterable by airframe — quads, double-deckers, widebodies, freighters — alongside the runway direction in use, the field’s weather and where each flight came from.

The first version had every open browser poll the ADS-B aggregators itself. That does not survive more than a handful of users: the community APIs are rate-limited, and upstream load grew with every tab. Now one server polls each airport every fifteen seconds and fans the result out to every browser over Server-Sent Events. Upstream cost is a function of how many airports are watched, not how many people are watching, and nothing on a request path ever calls upstream.

There is no database, because the data has a useful life of seconds — an aircraft on final is on the ground two minutes later. The server keeps the last good snapshot in memory; when every upstream host fails, it keeps serving that snapshot, marked stale with its age, while it backs off.

The tests run against captured real API responses rather than hand-written mocks. A mock only tests my assumption about a payload; a recording of what the aggregator actually returned over Pearson tests the payload. Looking at real traffic is also how the board learned that a flight number’s stored route is often not the route being flown — so it shows the route as scheduled instead of asserting it.

upstream sources
5
tests
360
server poll serving every browser
1
databases
0

Stack

  • TypeScript
  • Fastify
  • Server-Sent Events
  • Vue 3
  • Vite
  • Vitest

The API runs on my own hardware, so the live board is occasionally in its error state. The source and the screenshot above show what it does when it is up.

The PanMilli catalogue: category filters with product counts above a grid of halo crowns, knot pillows and hats, each with a price, review rating and Add to Cart button.

PanMilli

panmilli.com

PanMilli is the shop for my handcrafted hats, crowns and accessories. I designed and built it end to end: the storefront, checkout, order emails and the admin dashboard behind them.

Etsy stays the single source of truth for inventory. Firebase Cloud Functions sync listings — prices, images, variations and personalisation options — through the Etsy Open API, so a product is edited in one place and the storefront never waits on Etsy to render.

Payments go through Stripe’s Payment Element, and an order is only recorded and emailed once Stripe’s webhook confirms the payment. Pages are pre-rendered for search engines, and every pull request runs lint, unit tests and Playwright end-to-end tests before it can merge. I also built the brand’s companion Shopify store.

Stack

  • React 19
  • Vite
  • React Router
  • Zustand
  • Firebase Cloud Functions
  • Firestore
  • Stripe
  • Etsy Open API
  • Playwright
The E’shee Clinical Esthetic redesign in preview: a plum navigation bar with product categories over a large purple DNA-helix hero image and the tagline “Let your youth stay with you”.

eshee esthetic

esheeesthetic.com

The website for E’shee Clinical Esthetic, a skincare business. I designed it, built it, and have maintained it ever since — an ongoing engagement rather than a launch-and-leave project.

The live site carries the product catalogue, articles and a glossary, and separate sections for professionals and distributors. It is the other half of client work: keeping a site running and current for years after launch.

Its replacement is in preview: a React rebuild with a cleaner storefront — serums, creams, peels and complete systems — shown above. Checkout and accounts are switched off in the preview until it goes live.

Stack

  • AngularJS
  • jQuery
  • Bootstrap
  • PHP
  • React (redesign)

Experience

In employment

Most of my fifteen years have been spent on large, consumer-facing applications in regulated financial environments, where performance, accessibility and cross-browser reliability are requirements rather than nice-to-haves.

A recurring thread is shared components. I contribute to CIBC’s corporate component library today. Before that I delivered reusable UI components at RBC, extended the corporate component set at NielsenIQ, led LoyaltyOne’s migration from AngularJS to React, and built a library of reusable React components at Citco. At Morneau Shepell I designed UI concepts and then built them.

Accessibility has been part of the job since Morneau Shepell, where I brought markup into compliance with WCAG 2.0 and AODA; at CIBC every feature ships to strict accessibility requirements with analytics built in. These days I also work with AI-assisted, spec-driven development, using GitHub Copilot and GitHub Spec Kit.

  1. CIBC

    Senior Specialty Developer (Front End) · – present

    Client-facing digital banking in Vue 3 and TypeScript — a new login system, client information, data sharing between applications — and components for the corporate library.

  2. RBC

    Senior Front-end Developer · –

    Data-visualisation components and large-dataset export in React and TypeScript, integrated with .NET APIs.

  3. NielsenIQ

    Senior Front-end Developer · –

    Replaced native Qlik components with custom ones for faster page loads, and extended the corporate Bootstrap component set.

  4. Citi

    Senior Front-end Developer · –

    A React analytics widget turning tables into interactive 2D and 3D models with D3, over an ELK presentation layer.

  5. LoyaltyOne (AIR MILES Reward Program)

    Senior Front-end Developer · –

    Led the migration from AngularJS to React over Node.js microservices; D3 visualisation and in-app PDF export.

  6. Citco Group

    UI/UX Front End Developer · –

    A reusable React component library for a data-driven financial platform, and the team’s Jest and Selenium testing standards.

  7. Morneau Shepell

    UI/UX Developer · –

    UI concepts built in AngularJS, JSON-driven form generation, and WCAG 2.0 and AODA compliance work.

  8. Canadian Tire

    Front End Web Developer · –

    New features and a reusable refactor of the presentation layer.

  9. Torstar Digital

    Web Developer · –

    Components and widgets; migrated ASP Classic applications to .NET.