online · open to full-time · remote
~ charl-roux · —— EDT · Michigan, USA
// 00 — index

Software Engineer building reactive, browser-native interfaces

I'm Charl Roux — 7 years shipping enterprise frontend systems, deepest in Angular and TypeScript: v2 through v19, across an enterprise cybersecurity SaaS platform and multi-team agency delivery. I design reactive state, lead complex migrations, and ship accessible production UIs that hold up at scale.

LOC
Michigan, USA
TZ
EDT · UTC−4
EXP
7 years
STATUS
open to full-time · remote

now

available remote · full-time · US-authorized · no sponsorship · Michigan hiring
currently building apps that run entirely in the browser — no server, no API cost, no data leaving the device. focus
shipped a 10,000-row real-time data grid with an adjustable RxJS bufferTime window over live WebSocket streams — 500+ events/sec, one render per interval. Live now. live
architecture Angular Signals + OnPush change detection — fine-grained reactivity, no unnecessary re-renders. pattern
background 7 years shipping production frontend — four on an enterprise cybersecurity SaaS platform, two and a half in agency delivery, the last nine months self-directed on client-side architecture. exp

01Selected work

Four projects across reactive streams, finite-state UIs, off-main-thread work, and large-scale virtualization — every one runs entirely in the browser: no server, no backend, no API key.

InvoiceFlow — invoice state machine
// 02 live

InvoiceFlow

Angular· CDK· TypeScript

Invoice lifecycle app where draft → pending → paid is a finite state machine at the service layer — invalid transitions are structurally impossible.

VaultKey — password generator with memorable word mapping
// 03 live

VaultKey

Angular· Web Worker· TypeScript

Generates a strong password, then maps each character to a memorable word. Generation runs off the main thread in a Web Worker, so the UI never blocks — no server, nothing leaves the device.

TalentBoard — virtualized job board with hybrid search
// 04 live

TalentBoard

Angular· Orama· TypeScript

1,000+ listings virtualized on a single page, with hybrid full-text and vector search via Orama; filter state synced to the URL so any result set is shareable.

// regression
−50%
Regression defects, after introducing a Cypress/Jest test layer on a legacy Angular monolith.
// migrated
v2→v19
Angular versions shipped, across green-field builds and incremental migrations of multi-team apps.

02Skills & stack

A pragmatic, opinionated stack — picked because it scales for teams, not because it's fashionable.

$tree ./stack --years frontend/
├── angular·······v2 → v19, signals, standalone  7y
├── typescript·····strict, generics, type utils  7y
├── rxjs···········streams, custom operators  7y
├── ngrx···········store, effects, entity  5y
├── html···········semantic, WCAG 2.1  7y
├── css············grid, animations, arch  7y
└── web workers····off-main-thread compute  3y
$tree ./stack --platform platform/
├── node.js········express, async/await, REST  4y
├── ci-cd··········github actions, docker  4y
├── nx·············monorepos, affected graph  3y
└── module-fed·····runtime micro-frontends  3y
quality/
├── cypress········e2e, visual regression  5y
├── jest···········unit, TestBed  5y
└── accessibility··aria, keyboard, axe  6y
approach/
├── reactive·······streams over imperative
├── strict-types···types as documentation
└── a11y-first·····a baseline, not a polish
// 03 — contact

Let's talk.

I'd love to hear about your project and how I could help. Drop a note via the form, or reach me directly — I read everything and reply within a day or two.

contact.sh — new message
⏎ shift+enter for newline · enter to send