
Bradley Hanson
I build products end-to-end, from React interfaces to the systems behind them.
I'm a software engineer at Microsoft specializing in React, TypeScript, and full-stack architecture for enterprise SaaS. I build customer-facing products and the platforms behind them, and I use AI-native workflows to move faster without giving up the architecture, the tests, or what ships to production.
- Title
- Software Engineer II, Microsoft
- Focus
- React, TypeScript, full-stack architecture
- Now
- Dynamics 365 Contact Center
- Since
- Microsoft products since 2017, full time since 2018
- Based
- Greater Seattle Area
Impact
Outcomes from production work
Architecture, production reach, cost, and test coverage. Each number is one project and one period.
- shared React chat renderer
- 2 → 1
- Two Dynamics 365 chat products render through one React package. CI fails if either product reimplements shared behavior.
- production regions
- 13
- The Live Chat Widget integration ships on its own release pipeline to 13 production regions. That is the pipeline's reach, not a company-wide footprint.
- a year in Azure costs removed
- $142.7K
- 36% of one Azure CXP platform's subscription spend, by removing redundant infrastructure.
- unit test coverage
- 0 → 77%+
- Frontend unit tests on the customer-facing Azure portal extension I owned, from none to 77%+. Local dev startup on that extension also dropped 65%.
Also on the record: Services Hub 2.0 support case creation, which I delivered in about three months, was piloted to about 4,000 users. The Copilot Studio chat integration went from an empty repository to CDN deployment in six weeks.
Each figure comes from one project and period. They aren't lifetime totals, and they aren't added together.
Selected work
Contact Center, then the rest of the work
The Dynamics 365 case study is the fullest picture of product ownership. Azure, a React forms library, and the products I run myself follow.
Microsoft · Dynamics 365 Contact Center
2026 to present
Bringing a production chat widget into Copilot Studio
I built the customer-facing Live Chat Widget into Copilot Studio's agent test chat, then moved two products onto one chat renderer and one configuration contract.
Read the case study
2 → 1products on one shared React chat rendererMicrosoft · Azure CXP Engineering
2017 to 2026
Rebuilding Azure support and engineering experiences
Nearly nine years on Azure customer experience tools, first as a vendor: a portal extension rewrite, Services Hub support case creation, and a forms engine other apps reused.
Read the case study
0 → 77%unit test coverage on the portal extension rewriteOpen source · React library
2026 to present
Formosaic: config-driven React forms
Define a form once as JSON, and a rules engine handles conditional logic, validation, wizards, and auto-save. It renders through 11 UI library adapters.
Project details

Independent · Music
2015 to present
The Sub Delta: a music discovery engine I've rebuilt for a decade
My main side project since 2015 and the place I experiment freely. It crawls SoundCloud's social graph from artists you already like and surfaces tracks that are catching early.
Read the case study

Independent · Civic technology
2026 to present
Modeling government and geography in Civic Maps
A map-first way to answer "who governs this place?" PostGIS boundaries for all 50 states, current federal and state officeholders, and a Next.js site over a 3D globe.
Read the case study

Open source · npm
2026 to present
TypeScript libraries for SoundCloud
Three TypeScript packages for SoundCloud's official API and embeddable player. They power my music-discovery app, The Sub Delta.
Project details
0runtime dependencies in the API client and the widget wrapper
Formosaic playground for config-driven React forms, conditional fields, and validation. Civic Maps is the live geographic product.
All seven projectsBy area
The same work, sorted by discipline
Pick an area to see the contributions behind it and the project each one came from.
Frontend Engineering
Most of my work starts here: React and TypeScript apps with a lot of state, used by customers and by the people supporting them.
Moved two products onto one shared React chat renderer, with CI checks that stop either from reimplementing shared behavior.
Dynamics 365 Contact CenterMigrated a new agent desktop to Fluent UI v9 in one 243-file PR and unified two state systems into one store.
Dynamics 365 Contact CenterLed the Knockout to React and TypeScript rewrite of a customer-facing Azure portal extension, taking unit test coverage from 0 to 77%+.
Azure engineering experiencesBuilt a config-driven forms engine with business rules that became a platform's main data-entry experience.
Azure engineering experiencesAs a vendor, rebuilt an internal Azure app's frontend in React to retire AngularJS. Parts of that UI are still in production, and the work got me hired full time.
Azure engineering experiencesWrote a JSON-driven React forms library with a rules engine and adapters for 11 UI libraries.
Formosaic
- Projects
- Dynamics 365 Contact CenterAzure engineering experiencesFormosaic
- Tools
- React · TypeScript · Fluent UI · Redux-Saga · Zustand · TanStack Query · React Hook Form · Accessibility (WCAG 2.1)
Full-Stack Applications
When a feature needs it, I follow it below the UI into the protocol or service underneath.
Wrote a TypeScript transport SDK for a WebSocket and SSE protocol, reverse-engineered with a local simulator.
Dynamics 365 Contact CenterShipped 10+ C#/.NET fixes to the live chat messaging and orchestration services.
Dynamics 365 Contact CenterBuilt a Next.js site and a PostGIS-backed HTTP API for officeholders and boundaries.
Civic MapsRun a Next.js app backed by an Azure Functions scan pipeline.
The Sub DeltaPublished React hooks that call Next.js route handlers, so API secrets stay on the server.
SoundCloud developer libraries
- Projects
- Dynamics 365 Contact CenterCivic MapsThe Sub DeltaSoundCloud developer libraries
- Tools
- Node.js · C# / .NET · Next.js · REST · WebSocket and SSE · OAuth 2.0 and PKCE · Cosmos DB
Cloud & Enterprise Platforms
Delivery at Microsoft scale, where a release reaches several clouds or regions and customers are already in production.
Built an independent release pipeline that routes to 13 production regions.
Dynamics 365 Contact CenterEmbedded an agent desktop inside Salesforce with a host-bridge protocol and a manual PKCE token exchange.
Dynamics 365 Contact CenterMoved a portal extension to resource-provider deployment across the Azure Public, US Government, and China clouds.
Azure engineering experiencesDelivered Services Hub 2.0 support case creation, piloted to about 4,000 users.
Azure engineering experiencesCut a platform's Azure subscription costs by $142.7K a year (36%).
Azure engineering experiences
- Projects
- Dynamics 365 Contact CenterAzure engineering experiences
- Tools
- Azure · Azure DevOps · Azure portal extensions · MSAL · Salesforce Lightning Web Components · Microsoft Dataverse · KQL
AI & Developer Tooling
I build with AI coding agents every day, and I build the guardrails that let a whole team use them without losing quality.
Built a team's AI-assisted development guardrails: 13 architecture rule files, 3 agent skills, repository instructions across 5 codebases, and a weekly architecture-drift audit.
Dynamics 365 Contact CenterWrote a read-only on-call workbench in Python that pulls an incident's history, past fixes, and telemetry into one command, then ran two agent sessions on it in parallel through an on-call week.
Dynamics 365 Contact CenterRan an agentic development workshop for about 11 engineers and fixed two bugs in unfamiliar code live, one in the UI and one in a backend service.
Dynamics 365 Contact CenterAdded hotfix release workflows and OIDC trusted publishing to 4 public npm SDK repositories.
Dynamics 365 Contact CenterTook over the unowned release pipelines for the iOS, Android, and React Native chat SDKs, so releases publish only from green builds and fail loudly.
Dynamics 365 Contact CenterRebuilt the publishing pipeline for my org's troubleshooting guides after a repository move left them stale, fixed 486 broken links, and added a PR check that blocks new ones.
Dynamics 365 Contact CenterPublished a zero-dependency API client with retries, request deduplication, and a CLI.
SoundCloud developer libraries
- Projects
- Dynamics 365 Contact CenterSoundCloud developer libraries
- Tools
- Claude Code · Cursor · Grok Build · GitHub Copilot CLI and coding agent · MCP · Agent skills and rule files · GitHub Actions · Playwright · npm publishing
Data & Geospatial Systems
Mostly from my own projects: modeling messy public data so an interface can answer a simple question.
Designed a PostGIS schema with versioned MultiPolygon boundaries and relation-based containment.
Civic MapsIngest Census TIGERweb geography for all 50 states, plus officeholders from Congress.gov, Open States, and the FJC, with provenance on every record.
Civic MapsModel SoundCloud's social graph as partitioned SQL queries in Cosmos DB, and score tracks with a time-decay half-life.
The Sub DeltaCut search indexing over millions of documents from weeks to hours with Azure Search indexers.
Azure engineering experiencesRetuned alerting monitors in KQL and backtested them against past incidents before shipping, which cut firing on the noisiest alert family sharply.
Dynamics 365 Contact Center
- Projects
- Civic MapsThe Sub DeltaAzure engineering experiencesDynamics 365 Contact Center
- Tools
- PostgreSQL · PostGIS · Docker · CesiumJS · Azure Search · Cosmos DB · KQL
Experience
Nine years on Microsoft products
I joined Azure CXP as a vendor engineer in 2017 and was hired full time in October 2018. Since January 2026 I've been on Dynamics 365 Contact Center.
Microsoft · 2026 to present
Dynamics 365 Contact Center
- Software Engineer IIJanuary 2026 to present
Customer chat and agent experiences across three product organizations: React UI, SDKs, C# services, and on-call. I use coding agents to implement faster, and I own the architecture, the review, and the production result.
- Moved two products onto one shared React chat renderer and replaced three configuration models with one versioned TypeScript contract.
- Designed the embed's security boundary on both sides of two repositories, so no credential enters the widget's iframe.
- Built the production Live Chat Widget into Copilot Studio's agent test chat, from an empty repository to CDN deployment in six weeks, with a release pipeline routing to 13 production regions. It reached public preview in October 2026.
- Took the live chat service's on-call rotation and removed the C# failure mode behind a high-severity outage.
- Took over the unowned release pipelines for the iOS, Android, and React Native chat SDKs.
- Earlier in 2026, led frontend architecture for a new agent desktop and embedded it inside Salesforce.
Microsoft · 2018 to 2026
Azure CXP Engineering
- Software Engineer IISeptember 2022 to January 2026
- Software EngineerOctober 2018 to September 2022
Customer-facing Azure experiences and the internal tools Microsoft uses to support Azure customers. The team is now called Azure Engineering Operations.
- Led the Knockout to React and TypeScript rewrite of a customer-facing Azure portal extension as its frontend owner.
- Delivered support case creation for Services Hub 2.0 in about three months, piloted to about 4,000 users.
- Built a config-driven forms engine with business rules that became a platform's main data-entry experience.
- Cut a platform's Azure subscription costs by $142.7K a year (36%) by removing redundant infrastructure.
- Added about 100 Playwright end-to-end tests as a release gate.
- Onboarded and mentored new teammates, and helped raise the team's frontend standards.
Mindtree · 2016 to 2018
Vendor engineer for Microsoft Azure CXP
- Software EngineerDecember 2016 to October 2018
I joined Azure CXP as a vendor engineer and took ownership of the frontend of an internal app that tells Microsoft's Azure field teams when an outage affects their customers. That work is what got me hired at Microsoft full time in October 2018.
- Took the app from a pilot to a preview release, working through feedback from its first users.
- Rebuilt it in React and retired the AngularJS version, then set it up on a new web platform with routing, telemetry, an error boundary, and token refresh.
- Started its move to TypeScript and Redux, and added alerts, impacted-customer views, and SMS phone verification.
- Parts of the UI I built are still in production today, years after I moved on to other projects.
AI-native engineering
Agents speed up the work. I own the outcome.
I use AI coding agents to accelerate implementation while I own the architecture, the technical decisions, the testing strategy, and the production outcomes. Agents shorten the time it takes to get productive in an unfamiliar codebase. They do not sign off on the design.
In 10 months on Dynamics 365 Contact Center I merged 500+ pull requests across three product organizations' codebases. That is throughput while working in unfamiliar code, not a measure of impact. The impact is the architecture, the reliability work, and the product outcomes above.
Code I hadn't worked in, shipped anyway
Agents shorten the time it takes to get productive in an unfamiliar codebase. The design and the review stay mine. These were all new to me this year.
Copilot Studio's monorepo
Another organization's toolchain, build system, and release gates. I shipped the host side of the widget's credential boundary there.
The admin center
An older React and Fluent UI stack, where I built the widget's appearance and dark-mode authoring.
C# services
New to me this year. My first fix was for chats that went silent after an AI failure. By the end of an on-call week I had merged 10+ more, including the one that removed an outage's failure mode.
Salesforce
A Lightning Web Component container and a host SDK for embedding the agent desktop inside Salesforce.
Python and KQL
An on-call workbench for agents, and alert monitors I backtested against past incidents before shipping.
What keeps it trustworthy
I decide the architecture and review the change. Agent output uses the same tests, review, and release gates as code I write myself.
Rules the agents read
Architecture rule files and agent skills, so agents follow each codebase's conventions.
Tests as the gate
Unit tests and a three-tier Playwright suite that a change has to pass before it ships.
Small, reviewable changes
Large refactors land as planned stacks of PRs that each change one thing.
A weekly drift audit
An automated check that the code still matches its architecture rules.
Checking it for real
I verify by hand where it matters, like testing a post-call survey on a live phone call.
Tools I use and keep testing
- Claude Code
- Cursor
- Grok Build
- GitHub Copilot CLI
- Copilot coding agent
- MCP servers
- Agent skills
No single tool stays best for long. I keep two or three in rotation and switch when one gets better at the job in front of me.
Skills
What I work in
Grouped by area, and split between what I use at work and what I've mainly used on my own projects.
Frontend and product engineering
- At work
- TypeScript, JavaScript, React, Component architecture, Complex UI state (Redux-Saga, Zustand, TanStack Query), React Hook Form, Fluent UI, Griffel, Accessibility (WCAG 2.1), Internationalization, Design systems
- Mainly on my own projects
- Next.js App Router, Tailwind CSS
Backend and platform
- At work
- Node.js, C# / .NET, REST APIs, WebSocket and SSE transports, OAuth 2.0, MSAL, and PKCE, SDK design and npm publishing, Microsoft Azure, Cosmos DB, Azure Search
- Mainly on my own projects
- Azure Functions, Redis
Data and infrastructure
- At work
- Telemetry and alerting, KQL
- Mainly on my own projects
- PostgreSQL, PostGIS, Docker, Geospatial data modeling, Data ingestion pipelines
Developer experience
- At work
- Git and GitHub, GitHub Actions, Azure DevOps pipelines, Feature flags and staged releases, Playwright, Vitest, Jest, Claude Code, Cursor, Grok Build, GitHub Copilot CLI and coding agent, MCP and agent skills
Education
University of Wisconsin–Eau Claire
Bachelor of Science, Software Engineering, Minor in Economics. December 2016.
About
Outside of work
I also build a lot outside of work. The Sub Delta is a music-discovery app for SoundCloud that I've been rebuilding since 2015, and the latest version produced three open-source TypeScript packages. Civic Maps is about a question that should be easy to answer: who governs a given place? When I got married in 2026, I built our wedding website and its RSVP system myself. This site was built the same way, with AI coding agents.
More about meContact
Get in touch
I'm interested in senior full-stack roles where the product UI and the systems behind it are one job. Email is the fastest way to reach me.