Component system
One component, driven by design tokens, exportable as a framework-agnostic web component.
Senior Engineer / Software Architect / Texas, USA
I design and build software end to end: the interface, the services behind it, and the pipeline that ships it. This page is about what I can do for your team. Rotate the model, sweep it to see the structure underneath, and pick a data point.
Drag to rotate · move to x-ray · select a point
Data point
Working demonstrations
Four small, live pieces built for this page. Each one is a scaled-down version of a kind of problem I solve. The data in them is simulated.
One component, driven by design tokens, exportable as a framework-agnostic web component.
Every change passes the same gates. A failure stops the release before it reaches users.
# idle. Press Run pipeline.
The same order, modelled two ways. The right store depends on how the data is read and written.
A headless storefront fans one order out to the systems of record behind it.
Independent build
A product I designed and built from nothing, outside of client work.
Blackwood Learning is a bespoke platform for creating and delivering video courses to working professionals. I built it myself rather than adopt an off-the-shelf course tool, so the product, the interface and the delivery are all my own work.
It shows the full range in one place: product thinking, UI design, application build and getting it live for real users.
Visit learning.blackwoodops.comProduct build
HIPAA Notice Lead Finder, the data pipeline behind the product.
An internal tool I built for Blackwood's healthcare compliance work. It builds a list of healthcare practices in a Texas county, finds each practice's website, locates its HIPAA Notice of Privacy Practices (NPP), and scores the notice against the 45 CFR 164.520(b) checklist to prioritize outreach.
Each stage is a Cloud Function that reads from and writes to Firestore and is safe to re-run or resume. Select a stage to see how it works.
Angular 22 with standalone components, signals and lazy routes. State lives in a signal store and the UI runs against fixtures for previews and tests. Lists use cursor-based paging. A Leaflet map supports radius-based zone selection. PowerPoint and Word gap-analysis exports are generated in the browser, with the libraries lazy-loaded.
A single fetch layer enforces robots.txt, 1 request per second per host, retries with backoff and a 30-day cache in Firestore. A search-engine block stops the run rather than being worked around.
Cloud Tasks queues process up to 5,000 practices in checkpointed slices. Jobs can be paused and resumed, a Cloud Scheduler watchdog restarts stalled jobs, and progress streams live to the UI with onSnapshot.
Rules run first, and the LLM only sees what the rules could not settle. Spend guardrails cover single reviews and bulk jobs: estimate, confirm, reserve and cap.
Search providers (Tavily or self-hosted SearXNG) are chosen per run. A local CLI agent reuses the same matching code as the Cloud Functions when cloud IPs are blocked.
Access is limited to an email allowlist, enforced in both Firestore rules and the functions. Secrets sit in Functions secrets. Only extracted text is kept, not raw page copies, and no code path contacts a practice.
| Source | Used for | Access |
|---|---|---|
| HUD USPS ZIP-County crosswalk | County to ZIP mapping | Seed CSV bundled with the functions |
| NPPES NPI Registry API (v2.1) | Provider records | Public REST API, no key |
| Overture Maps Places | Candidate practice websites | Open data, matched by a local script |
| Web search (self-hosted SearXNG or Tavily) | Candidate websites | Provider registry, chosen per run |
| US Census batch geocoder | Map coordinates per address | Free, no key, at most 1,000 addresses a request |
| Practice websites | Notice pages and PDFs | Polite crawler |
Toolchain
Track record
Over 15 years across healthcare, finance, legal and e-commerce.
mark.nodson@gmail.com