Skip to content

Software DeveloperatBNP Paribas CIB·Canada

Divyanatha Reddy Dantu.

I'm on the innovation team at BNP Paribas CIB, taking internal tools from first prototype to production: applied AI for documents, backend services built for concurrency, and the automation around them.

Years at BNP Paribas CIB
2.5
Years at BNP Paribas CIBDeveloper, since Mar 2024
Years building software
5+
Years building softwareSince 2019
Information Systems Security
MEng
Information Systems SecurityConcordia, 2023

01 / 06

At BNP Paribas CIB

Kept general on purpose. Bank projects stay confidential.

Mar 2024 — NowDeveloper, Innovation teamCanada

I'm a developer on the innovation team at BNP Paribas CIB. We build internal tools and take them from first prototype to production, which means I work across the stack: backend services, applied AI, internal apps and the delivery pipelines around them.

  1. 01

    Applied AI for documents

    Pipelines that turn unstructured documents into structured, reviewable data, with language models in the loop and people making the final call.

  2. 02

    Backend built for concurrency

    Python services with job queues, concurrent workers and streaming APIs, designed so each piece of work has exactly one owner, and tested hard before release.

  3. 03

    Internal tools & automation

    Web apps, data tools and workflow automation that take repetitive work off people's plates, from first prototype to production.

  4. 04

    Delivery & integration

    CI/CD pipelines with automated quality checks, and integrations that let internal applications plug into the bank's shared platform services.

Engineering note · a pattern I reach for

How a job gets claimed

  1. 01Two workers, one queue

    Jobs wait as rows in a database table. Any worker can pick up any row.

  2. 02Both reach for the next job

    Done naively, both select job #41 and process it twice: duplicated work, duplicated results.

  3. 03Row lock, skip locked

    W1's claim locks #41 inside its transaction. W2's query skips locked rows and claims #42 instead. No waiting, no collision.

  4. 04Ownership is written down

    The claim commits the owner, a lease and a heartbeat in the same transaction, so who holds what is never a guess.

  5. 05One job, one owner

    That's the property the pattern is built to guarantee, and the one worth testing hardest before anything ships.

Engineering note · continued

Now try to break it

The same queue with three workers, running live. Switch off the lock, crash a worker mid-job, or slow the database down, and watch what the guarantee is actually made of.

How workers claim

Each claim locks its row and skips rows other workers hold. Try to get a duplicate.

Processed
0
Duplicates
0
Reclaimed
0
Queue
0/8

A widely used pattern, illustrated. Not an employer system.

02 / 06

On the side

Evenings and weekends: tools for small professional practices, plus a few of my own. Client work is described without names.

Automation · client work2026

Browser workflow assistant

A Chrome extension that walks a tax practice's client list through a portal's report and download steps — and can be stopped, resumed and audited.

The problem

Staff repeated the same navigation for every client. The portal used nested shadow DOM, ignored synthetic input, and a click was never proof that a file had actually downloaded.

What I built

  • A Manifest V3 service worker that turns a CSV worklist into a persisted, resumable queue that survives navigation.
  • Deep shadow-root lookup and browser-level debugger input for controls that reject normal DOM events, with per-tab command serialisation.
  • Completion tied to Chrome's download state — interrupted or missing files stop for review instead of being marked done.
  • Per-client output folders and a spreadsheet status log with explicit done / partial / failed / skipped states. Sign-in stays with the user.

Shape of the system

  1. CSV worklist
  2. Persisted queue
  3. Content scripts
  4. Verified download
  5. XLSX status log

Live model · browser workflow assistant

Done 0 · Partial 0 · Resumed 0

Each client row is taken from the saved worklist, walked through the portal, and only logged once its file is on disk.

Stack

JavaScript · Chrome MV3 · DevTools Protocol · Shadow DOM · OOXML · Node test runner

Receipts

  • Iterated to v0.9.1
  • Zero runtime dependencies
  • Client data never packaged

Frontend · client work2025 – 26

Home-loan calculators

Six native calculators for an accounting practice's site — repayments, stamp duty, borrowing capacity, purchasing power, refinance and offset.

The problem

Prospective clients want understandable numbers before a consultation — with the assumptions visible, and on whatever screen they happen to be using.

What I built

  • Typed calculation modules shared across dynamic routes, each exposing its assumptions and warnings next to the result.
  • Purchasing power that combines borrowing capacity with purchase costs through a bounded search.
  • A source registry so every rate and rule points back to the reference it came from.
  • Responsive Recharts visualisations, tuned until nothing overflowed from 390px to 2048px.

Shape of the system

  1. Inputs
  2. Typed calc modules
  3. Assumptions + sources
  4. Charts
  5. Estimate, not advice

Stack

Next.js · TypeScript · Tailwind · shadcn/ui · Recharts · Vitest

Receipts

  • 6 calculators
  • Unit-tested maths
  • 4 breakpoints × 6 routes verified

Tooling · client work2026

Offline report extractor

A portable desktop utility that pulls an insurance-coverage table out of tax-report HTML and into an auditable Excel workbook — without uploading anything.

The problem

Practice staff needed structured rows from downloaded reports, but client documents had to stay on the machine and nobody should need Python installed to run it.

What I built

  • A standard-library HTML parser that finds the expected table, validates fields and dates, and keeps source provenance on every row.
  • Leading-zero identifiers preserved as text; malformed files routed to an exceptions sheet instead of silently dropped.
  • A hand-written OOXML writer producing Records, Exceptions and Run summary sheets.
  • PyInstaller builds for macOS and Windows, with the Windows package produced in GitHub Actions.

Shape of the system

  1. Report HTML
  2. Parse + validate
  3. Records / exceptions
  4. XLSX workbook
  5. macOS · Windows

Live model · offline report extractor

Records 0 · Exceptions 0

Pages are parsed on the machine. Valid tables become rows; anything malformed is kept, on its own sheet.

Stack

Python · HTMLParser · OOXML · unittest · PyInstaller · GitHub Actions

Receipts

  • 3-sheet audit workbook
  • Regression tests for edge cases
  • Runs fully offline

Product · side project2026

Session & expense manager

A full-stack app for a recreational sports group: sessions, capacity-limited invitations, shared expenses and settlements, and match results.

The problem

Organisers need one place for attendance, results and shared costs. Invitations have to respect court capacity, balances have to agree on every screen, and players need a clear next action.

What I built

  • Capacity-aware invitations that close themselves when a session fills, with the roster as the single source of truth.
  • A currency-aware ledger in integer cents — expense splits, payments and bounded settlement suggestions that match between personal and admin views.
  • Change-signature idempotency keys so every distinct booking update sends its own email, and repeats don't.
  • Adapters that normalise external court availability into one status model, plus calendar feeds and Elo-based doubles ratings.

Shape of the system

  1. Clerk identity
  2. Server actions
  3. Roster + ledger
  4. Prisma · Postgres
  5. Email · ICS feeds

Stack

Next.js · TypeScript · Prisma · PostgreSQL · Clerk · Resend · Vitest · Playwright

Receipts

  • 209 passing tests
  • TypeScript strict
  • Browser-checked down to 320px

More projects

7 more

03 / 06

Experience

Banking platforms, retail analytics and a security master's, across two countries since 2019.

  1. Mar 2024 — Now

    Developer

    BNP Paribas CIB · Canada

    Innovation team

    • Innovation team: applied AI for documents, concurrent backend services, internal tools, automation and delivery pipelines. More in the BNP section above.
  2. Sep 2021 — Mar 2024

    Associate

    Altitude Sports · Canada

    Part-time

    • In my final year: automated inventory data workflows in Snowflake and built pandas / Streamlit analyses for inventory and fulfilment teams.
  3. Sep 2021 — May 2023

    MEng, Information Systems Security

    Concordia University · Canada

    Education

    • Coursework included applied cryptography and AI search, alongside part-time work.
  4. Aug 2019 — Aug 2021

    Software Development Engineer

    Kony, Inc. (Temenos) · Hyderabad

    Associate SDE → SDE, Sep 2020

    • Built Java APIs that retrieve email attachments from URLs for a banking communications platform.
    • Coordinated the Python 2 → 3 and boto2 → boto3 migration for supporting services.
    • Moved Jenkins automation to new build infrastructure and expanded TestNG coverage.
    • Contributed to an Azure Synapse integration, a client demo app and a website rebrand.
  5. Jul 2016 — Aug 2020

    BTech, Computer Science

    KL University · India

    Education

04 / 06

How I work

Patterns that show up across my commit history, not a list of adjectives.

  1. 01

    Fix the rule, not the symptom

    When a job runs twice or a balance disagrees, I change the rule underneath, then add the test that would have caught it.

  2. 02

    Make automation inspectable

    Exception sheets, partial states, audit logs and cited sources. Anything a machine does, a person should be able to check.

  3. 03

    Debug across boundaries

    Most bugs I chase live between layers: a click versus a download, an ORM object versus a committed row, a server record versus a client prop.

  4. 04

    320px is a real screen

    Narrow-viewport checks are part of done, not a polish pass, for internal dashboards and side projects alike.

  5. 05

    AI as a pair, not a pilot

    I plan, build and review with Codex and Claude Code every day — and I keep the tests, the trade-offs and the judgement.

05 / 06

Toolkit

What I reach for. Filter down to the ones I use most weeks.

Languages

  • Python
  • TypeScript
  • Java
  • SQL
  • JavaScript

Backend & data

  • FastAPI · SQLAlchemy
  • Oracle
  • PostgreSQL · Prisma
  • Snowflake
  • Node.js
  • MongoDB · Firebase

AI & automation

  • LangChain
  • Selenium
  • Playwright
  • Chrome extensions (MV3)
  • Codex · Claude Code

Delivery

  • Jenkins
  • SonarQube
  • Ansible
  • Kubernetes · Helm
  • GitHub Actions
  • Docker · Vercel

Frontend

  • React · Next.js
  • Tailwind CSS
  • Dash
  • Recharts
  • Three.js

Testing

  • pytest · unittest
  • Vitest
  • TestNG
  • Playwright checks

06 / 06 — Contact

Let’s
talk.

Happy to talk about platform reliability, applied AI, or automating something tedious. LinkedIn is the quickest way to reach me.

Keep my workers busy

Processed 0 · Duplicates 0

Click the queue, or

esc

↑↓ move↵ open