JavaScript
Modern JavaScript across server, browser, and tooling.
JavaScript is the language I have shipped the most production code in. I work primarily in modern JS (ES2020+) across Node.js services, React/Next.js UIs, build tooling, and one-off scripts. I default to TypeScript when starting new projects, but I read, maintain, and refactor a lot of plain JS as well.
How I work with JavaScript
JavaScript is the language I have spent the most hours in. I started with it as a frontend skill and grew into a full-stack JS engineer once Node.js became my main backend runtime.
I am comfortable with the full modern toolbox — async/await, modules, iterators, generators, proxies, and the runtime quirks of both V8 and modern browsers — and I have maintained codebases that still need to support ES5-ish output for older clients.
Day-to-day I am almost always writing TypeScript, but I treat that as 'JavaScript with types' — the underlying language fluency comes from years of writing plain JS, debugging it in browsers, and operating it in Node in production.
JavaScript across business domains
Wrote orchestration code in Node.js and the operator-facing UI in React — both predominantly JavaScript with TypeScript adopted incrementally.
Shipped both server and client code in JavaScript — REST APIs in Node + Express, dashboards in React.
Built marketplace UIs and integration glue in JavaScript, including Salesforce webhooks and lead-routing scripts.
Implemented analytics capture, dashboard rendering, and the public profile UI in JavaScript.
Real issues I resolved using JavaScript
Fixed a memory leak in a long-running Node worker
A background worker was slowly growing its RSS over days and eventually OOM-killing. The leak was invisible in short test runs.
Took heap snapshots with the Node inspector, diffed them across hours, and isolated a closure capturing growing payloads. Refactored to release references after each job.
Worker memory stabilized at a flat baseline; the OOM kills stopped without needing to scale up memory.
Replaced callback hell with async/await on a critical path
A legacy webhook handler was deeply nested callbacks, with inconsistent error propagation — some errors were swallowed.
Refactored to async/await with explicit try/catch and a single error-handling middleware. Added unit tests for each branch as I refactored.
Errors started surfacing reliably in logs and Sentry, the handler became readable, and a class of silent failures disappeared.
Often used together
Have a JavaScript project in mind?
I am open to full-time and contract work where JavaScriptis core to the stack. Let's talk about what you are building.