Learning to budget, shop and cook while living on my own led to Provision: a nutrition app exploring how to make meal choices easier to understand, around personal preferences and goals.
Public web demo, shown in local workspace mode. Choose Use local workspace & demo on the sign-in screen. This is separate from the native SwiftUI demo described below.
My contribution
A functional Swift/SwiftUI demo that calculates nutrients and ranks meal-based priorities around personal preferences and goals.
How the experience works
Meal datadeterministic nutrient calculationpreference-based rankingrecommendation with sources
Constraint & tradeoff
The same meal should produce the same nutrient totals. Calculations stay deterministic, while source and confidence information make recommendations easier to assess.
Design decisions
The interface needs to explain a recommendation as well as present it. Deterministic totals and visible sources give someone a way to assess the suggestion.
Nutrient calculations are deterministic, so the same meal always gives the same numbers.
Each suggestion records its data sources and a confidence level, making the reasoning visible.
Evidence & status
Functional Swift/SwiftUI demo. Public release and measured user outcomes are not claimed.
AI-assisted media monitoring. Analysts at Artemis spent hours finding coverage for clients; SignalDesk collects the relevant news and makes it quick to review.
Actual dashboard in a local sample workspace. All records and metrics shown are fictional; no client information.
My contribution
An end-to-end TypeScript/React application that separates news ingestion, deduplication, AI classification and analyst review, backed by Supabase/PostgreSQL.
A run reaches its processing deadline before every article is finished. Unfinished articles are deferred to subsequent runs, rather than allowing one batch to run indefinitely. Date-range searches let analysts revisit the relevant coverage window.
Design decisions
The central design choice is to support an analyst’s judgment: automation collects and suggests; a person reviews and decides. Traceable sources help the reviewer assess relevance.
Every article keeps a link to its original source, so reports stay traceable.
Bounded processing deadlines defer unfinished articles to subsequent runs; date-range searches let analysts review a day or weekend of coverage.
Server-side authorization and PostgreSQL row-level security isolate workspace data. Regression tests cover duplicates, polling cadence, historical windows and review permissions.
Analysts make the final call on relevance; AI only suggests.
Evidence & status
Regression tests cover duplicates, provider polling cadence, historical windows and workspace review permissions. Savings of 1–2 hours per day are analyst estimates, not instrumented benchmarks.
Actual dashboard, captured locally from the project source. All customers, payments and metrics are synthetic; no Stripe account connected.
My contribution
A Next.js and TypeScript dashboard and detection engine for Stripe revenue risks, with webhook signature verification, event normalization, idempotency checks and recovery-window calculations for payment and subscription events.
How the experience works
Stripe eventssignature verificationnormalizationidempotency checksrisk and recovery windows
Engineering decisions
Verify Stripe webhook signatures before handling payment and subscription events.
Normalize incoming events so the detection engine can work with a consistent event format.
Check idempotency to avoid processing the same event more than once.
Calculate recovery windows for payment and subscription events to make timing visible.
Status
Development is ongoing. Source is available on GitHub.
A browser-based personal computer exploring familiar desktop interactions, a vintage keyboard, and a cinematic entry sequence. The design challenge: make exploration enjoyable while keeping the work easy to reach.
Actual current desktop, captured from the live portfolio. Work window, cobalt wallpaper and interactive app dock.
My contribution
A static HTML, CSS and JavaScript portfolio with simulated desktop apps, an interactive SVG keyboard, a password intro and a 3D camera orbit and fullscreen screen entry.
Submitting repeatedly during an animation could start overlapping transitions. The entry gate moves from idle to transitioning once and ignores further submissions until completion.
Design decisions
A playful introduction adds personality, but it also adds steps before someone can evaluate the work. Selected work is now the default landing page; the full desktop remains available as an optional experience.
Key highlights and click targets use the same SVG key elements so typing and clicking match the physical layout.
A projected 3D computer lets the camera orbit the hardware, settle into a level front view, and enter the screen.
The intro honors reduced-motion preferences.
A one-shot gate prevents duplicate transitions. Four automated tests cover password retries, matching, zoom centering and deletion-key mapping.
Evidence & status
Four automated tests cover retry behavior, exact password matching, centered zoom geometry and both deletion keys. This update makes selected work accessible without completing the intro. The desktop remains a separate, optional experience.
JavaScript · CSS · SVG · Web Animations API · Vercel
Owned end-to-end development and deployment of SignalDesk for five internal team members; analysts estimated saving 1–2 hours per day on media monitoring. Translated manual search and reporting into a full-stack TypeScript/React application with separate ingestion, deduplication, AI classification and review stages.
Prima Design Co
Nov 2024 – Present · Toronto
Founder
Founded a freelance web-development business for real estate, retail and personal-branding clients. Delivered five websites in five months and generated CAD $6,000 in revenue.
Wouessi Mobile & Software Development Program
Mar – Jun 2025 · Toronto
Software Developer (team training program)
Developed React/TypeScript interfaces and MongoDB-backed features for employee-management and tender-discovery applications. Worked on a six-person Agile team.