← All case studies

ClientPivotal Pathways

RoleSole engineer

StackAngular · AWS Lambda · Terraform

StatusLive

Pivotal Pathways

Outcome below is still a placeholder. Everything else reflects the real project.

The problem, as stated

Pivotal Pathways is a self-pay therapy private practice (Kathleen Brannen) that needed its Angular marketing site kept current and its infrastructure kept sane over time — not a one-off build, but an ongoing engagement: staying on a supported Angular version, getting found in local search, and closing off the rough edges a first pass at a solo project accumulates.

Why off-the-shelf would've fallen short

A critical review of the live site turned up exactly the kind of debt a template or site-builder can't see, let alone fix: the contact Lambda was 636 bytes on the already-EOL nodejs16.x runtime, built the outbound SES email as an HTML string assembled in the browser rather than behind a trust boundary, and Terraform for the infrastructure was being hand-applied against a shared, unrotated AWS access key dating to 2024 — the same static key backing every other project in the account. None of that is visible from the outside, and none of it gets fixed by picking a different page builder; it needed someone who could read the deployed Lambda and the Terraform state and decide what "supported" actually meant here.

What was built

An Angular 21 SPA (standalone components, Angular Material) kept current through four major version bumps (17 → 21). The contact form was hardened to post a structured JSON payload with a honeypot, with email rendering moved server-side into the Lambda instead of the browser, and the Lambda's runtime brought forward off the EOL Node version. Six components that gated their entire render on a BreakpointObserver layout observable were converted to CSS so the site could be safely prerendered per route — adding real SEO (schema, canonical URLs, sitemap, Google Business Profile alignment) and social-preview metadata without reintroducing the mobile layout flash that observable had been masking. The infrastructure itself moved from a hand-applied, undocumented state into version-controlled Terraform running through GitHub-OIDC-authenticated CI — plan on every pull request, apply on merge to master — retiring the shared static AWS key from this project's deploy path entirely. A separate, HTTP-Basic-Auth-gated dev environment keeps in-progress work out of search engines. Pivotal was the pilot for this OIDC pattern; hta-ui and stock-tracker later adopted the same template.

Outcome

Placeholder.

Full stack

Angular 21.2, Angular Material, TypeScript. Jest (via @angular-builders/jest, not Karma) for unit tests; Playwright for functional smoke and visual-regression end-to-end tests. AWS Lambda (Node.js 24.x) + SES for the contact form. S3 + CloudFront, provisioned with Terraform and deployed via GitHub Actions using GitHub OIDC — no static AWS keys. SHA-pinned GitHub Actions and a merge-queue check that fails any branch left behindmaster.

← Previous case study: HTA

Next case study: Stock Tracker →