Aryan Tuwar — Backend & Full-Stack Engineer. I build backends that don't lose money.

aryan@portfolio — zsh
aryan@portfolio ~ %
260+
PRs merged at Mogo
11 mo
shipping production fintech
3
teams: Lending, Wealth, Web

Type a command above, or press ⌘ K anywhere.

$ cat about.md

About

I'm a software engineer at Mogo, where I ship production fintech on the Lending and Wealth teams — NestJS lending APIs, a Next.js customer app, and a React Native investing app used by real customers moving real money.

I like the unglamorous parts: idempotency, race conditions, graceful degradation, and the timezone bug that only fires between 8pm and midnight. On the side I build AI products end to end. Currently pursuing an Honours Bachelor's in Software Engineering at Seneca Polytechnic.

education

Seneca PolytechniccurrentHonours Bachelor's, Computer Software Engineering (BSD)Sep 2025 — 2028
Seneca PolytechnicAdvanced Diploma, Computer Programming & AnalysisJan 2023 — Apr 2025

$ git log --author=aryan

Experience

Mogo

Toronto · Remote

Jan 2026 — Present
  1. Engineering Intern · Lending

    Sep 2026 — Present

    Internship · current

    Carried on with the Lending team after the co-op term.

  2. Engineering Intern · Lending

    Apr 2026 — Sep 2026

    Co-op

    Backend and web on Mogo's Line of Credit product — from application and agreement signing through draws, repayments, and statements.

    • Merged 120+ PRs in ~20 weeks across the NestJS/TypeScript lending API and the Next.js customer web app.
    • Built the draw-request feature end to end — 9 backend endpoints plus customer UI, protected against duplicate submits and races with idempotency keys and DB advisory locks.
    • Shipped self-serve cancel/edit for additional payments across backend + frontend, integrated with the LoanPro autopay API behind a feature flag.
    • Set up autopay to be created automatically when each credit line opens — unblocking the entire repayment feature set.
    • Built province-specific loan-agreement templates with versioning, so each province's legal terms are kept and versioned separately.
  3. Engineering Intern · Intelligent Investing (Wealth)

    Jan 2026 — Apr 2026

    Co-op

    The mobile app that unifies Mogo's managed investing and self-directed trading in one experience.

    • Shipped 140+ merged PRs over 19 weeks across the React Native app and three backend services.
    • Delivered full English/French localization across the mobile app.
    • Built a feedback pipeline in Node/TypeScript posting to Slack, with sentiment analysis (AWS Comprehend) and FR→EN translation (AWS Translate).
    • Audited pre-launch analytics coverage, then led adding event tracking across the app and backend services.
    • Wrote a technical proposal comparing four over-the-air update options so JS-only fixes could ship without app-store review.

$ ls deep-dives/

Selected engineering work

A draw engine that never double-spendsLending

problem

Customers draw money from a credit line. A double-submit, a retry, or two concurrent requests could send the same money to the loan system twice — a real financial bug, not a cosmetic one.

approach

Built the feature end to end: 9 backend endpoints plus the customer UI. Guarded writes with idempotency keys and Postgres advisory locks, and split the money move into a two-phase finalize so the system always knows exactly what has already been sent downstream.

impact

Duplicate submits and race conditions can't move money twice. The finalize step is crash-safe — it never loses track of funds already sent to the loan system.

  • NestJS
  • PostgreSQL
  • idempotency
  • advisory locks
  • Next.js
The bug that only happened after 8pmLending

problem

Every credit-line activation submitted between 8pm and midnight Eastern was silently failing. Earlier in the day, everything worked.

approach

Traced it to a timezone mismatch: our servers ran on UTC, the vendor ran on Eastern. After 8pm ET, UTC rolls to the next calendar day — so the dates we sent no longer matched what the vendor expected.

impact

Fixed the date handling at the boundary. Late-evening activations — a meaningful slice of daily volume — stopped failing.

  • debugging
  • timezones
  • vendor integration
Autopay, from zeroLending

problem

No customer had autopay, which blocked the entire repayment feature set. Enabling it failed against the vendor with a vague 'malformed request' error that gave nothing to go on.

approach

Made autopay get created automatically when each credit line opens. Reproduced the failure directly against the vendor sandbox to pin down the real cause of the malformed-request error, then shipped the fix behind a feature flag.

impact

Repayments became possible for every customer — the foundation the self-serve cancel/edit payment features were then built on.

  • NestJS
  • LoanPro API
  • feature flags
A balance screen that stays up when the vendor goes downLending

problem

When LoanPro was unavailable, the balance screen showed customers an error — exactly when they're most anxious about their money.

approach

Added graceful degradation: when live data isn't reachable, the screen falls back to the most recent archived snapshot instead of failing.

impact

Customers keep seeing their balance through vendor outages, with no hard error state.

  • resilience
  • graceful degradation
  • UX

$ ls ~/work

Projects

Personal products I'm actively building — both private while in development. Happy to give a live walkthrough.
Noise icon

Noise

Building · App-Store prep

AI research assistant that shows where sources agree and disagree.

Ask a question in plain language; Noise plans searches, scrapes the top pages, extracts discrete claims from each source, then synthesizes one cited answer that explicitly surfaces consensus, contradictions, and remaining uncertainty — not just a summary box.

why it's interesting

A real agentic LangGraph pipeline — claim extraction, evidence ranking, a consensus builder that flags contradictions, and conditional edges that loop for more evidence or short-circuit when there's nothing relevant. Hardened with per-user quotas, auth throttling, and cost caps.

  • React Native / Expo
  • FastAPI
  • LangGraph
  • Groq / OpenAI / Gemini
  • FAISS
  • PostgreSQL
private · walkthrough on request
Noise screenshot
NutriVoice icon

NutriVoice

Currently building

Voice-first nutrition tracking — say your meal, it's logged.

Speak one sentence about a meal and it's logged with real nutrition data. The product thesis is friction reduction. Built as a strict TypeScript monorepo with a deliberate boundary: AI interprets what you ate, structured data decides what it contains — the model is never allowed to invent nutrition values.

why it's interesting

One-way-dependency monorepo, every AI response Zod-validated before use, idempotent meal writes, and local-date logic tested against 11:59pm, DST, and cross-timezone travel. Includes a Siri App Intent spike for logging from a locked device (716 tests passing).

  • Expo / React Native
  • Fastify
  • Drizzle ORM
  • PostgreSQL
  • Zod
  • Swift App Intents
private · walkthrough on request

$ cat skills.json

Toolbox

languages:
  • TypeScript
  • JavaScript
  • Python
  • SQL
  • Swift
backend:
  • NestJS
  • Fastify
  • FastAPI
  • Node.js
  • Express
  • REST APIs
frontend:
  • React
  • Next.js
  • React Native
  • Expo
  • Tailwind CSS
data:
  • PostgreSQL
  • Drizzle
  • SQLAlchemy
  • MongoDB
  • FAISS
ai:
  • LangGraph
  • LangChain
  • AWS Comprehend
  • AWS Translate
  • RAG
practices:
  • idempotency
  • feature flags
  • CI/CD
  • testing
  • graceful degradation

$ ./contact.sh

Get in touch

$ echo "let's build something"

Have a role, a project, or a good bug story? I'd love to hear it. Fastest way to reach me: