🏗️ Tech Stack & Architecture

DIAL — Delivery Intelligence Assessment Levels — authoritative technical reference

← Back to Documentation Hub
Last updated: 2026-03-10

Tech Stack

Angular 19.2 TypeScript Firebase 11 @angular/fire 19.2 Node.js 20 RxJS 7.8 Claude Sonnet (AI) Chart.js 4.5 jsPDF 2.5 GitHub Actions + WIF
LayerTechnology
FrameworkAngular 19.2 (standalone components, no NgModules)
LanguageTypeScript, SCSS
BackendFirebase 11 (Auth, Firestore, Hosting, Functions)
Angular/Firebase@angular/fire 19.2
AI@anthropic-ai/sdk via Cloud Functions (claude-sonnet-4-6)
ChartsChart.js 4.5 + ng2-charts 5 (radar charts)
PDF ExportjsPDF 2.5 + jspdf-autotable 3.8
Markdownmarked 12
StateRxJS 7.8 (no NgRx)
TestingKarma/Jasmine (unit)
CI/CDGitHub Actions + Workload Identity Federation
RuntimeNode.js 20

Architecture

Routing

Lazy-loaded routes. Guards: authGuard and role-based guards for admin vs. member access.

State Management

RxJS observables + Firestore as single source of truth. Services are providedIn: 'root' singletons.

Key Services

ServiceResponsibility
AuthServiceSign-in/up, user profiles, org join workflow
AssessmentServiceAssessment CRUD, scoring, capability responses
OrganizationServiceOrg/team CRUD, member management, invite codes
AiServiceWraps Cloud Functions for AI assessment and chat
PdfExportServicejsPDF-based assessment result export
InsightsServiceOrg-level insights and aggregation

Project Structure

/dora-tma/
├── src/app/
│   ├── components/        # UI components (auth, assessment, dashboard, org)
│   ├── services/          # Core services (auth, assessment, org, AI, PDF)
│   ├── models/            # Data models
│   ├── guards/            # authGuard, role-based guards
│   └── app.routes.ts      # Lazy-loaded routes
├── functions/src/index.ts  # 4 AI Cloud Functions
├── .github/
│   ├── workflows/          # CI/CD workflows
│   └── agents/             # AI agent instruction files
├── firestore.rules         # Security rules
└── firebase.json           # Hosting targets (dial-app + docs)

DORA Capabilities

20 capabilities across 4 categories, each assessed at 3 maturity levels: Emerging, Advancing, and Leading.

🔧 Technical

  • Code Maintainability
  • Continuous Delivery
  • Continuous Integration
  • Database Change Management
  • Deployment Automation
  • Test Automation
  • Trunk-Based Development
  • Version Control

⚙️ Process

  • Streamlining Change Approval
  • Test Data Management
  • Working in Small Batches
  • Documentation Quality
  • Monitoring and Observability

🌱 Cultural

  • Empowering Teams to Choose Tools
  • Generative Organizational Culture
  • Job Satisfaction
  • Loosely Coupled Teams
  • Well-Being

📊 Measurement

  • Flexible Infrastructure
  • Pervasive Security

Firestore Collections

CollectionPurpose
userProfilesExtended user data (name, role, isAdmin, orgId)
organizationsOrg metadata, settings, invite codes
teamsTeam groupings within organizations
capabilitiesCapability definitions and maturity level descriptors
assessmentsAssessment sessions (org-scoped, status, participants)
capabilityResponsesIndividual capability ratings per assessment
assessmentResultsAggregated scores and maturity profiles
invitesInvite tokens for org/team membership
orgInsightsAI-generated org-level insights

Core Features

Firebase Configuration

SettingValue
Project IDdora-tma
App sitehttps://dial-assessment.web.app
Docs sitehttps://dial-docs.web.app
Hosting targetsdial-app (Angular SPA), docs (this site)
AuthEmail/password
Functions runtimeNode.js 20
Service accountfirebase-adminsdk-fbsvc@dora-tma.iam.gserviceaccount.com

Cloud Functions

FunctionDescription
assessCapabilityTakes capability ID and team responses, generates AI maturity assessment
generateRecommendationsGenerates prioritized improvement recommendations for a capability
chatAboutRecommendations3-turn conversation per capability, turn-aware guidance
generateInsightsOrg-level synthesis across all capabilities

All functions use claude-sonnet-4-6. ANTHROPIC_API_KEY set via gcloud run services update --update-env-vars (not firebase.json secrets).

CI/CD Pipeline

5-job workflow on push to main (skipped if [skip ci] in commit message):

version
build
deploy
release-notes
create-release
JobWhat it does
versionSemantic versioning from conventional commits
buildNode 20, npm install, npm run build:prod
deployfirebase deploy --only hosting,firestore,functions via WIF auth
release-notesAI-generated via Claude API (grep fallback)
create-releaseGit tag + GitHub Release

CI/CD Tooling Matrix

Workflow source: .github/workflows/deploy-and-release.yml

LayerTool / ActionVersion / PinPurpose
CI OrchestrationGitHub ActionsHostedRuns pipeline jobs on push to main
Runner OSubuntu-latestHosted imageExecutes all workflow jobs
Git Checkoutactions/checkoutv4Checks out repository and tags
Node Runtime Setupactions/setup-nodev4 (NODE_VERSION=20)Provisions Node.js and npm cache
Package Managernpmnpm install strategyInstalls app and functions dependencies
Build Artifact Handlingactions/upload-artifact + actions/download-artifactv4Transfers Angular build output between jobs
Firebase CLIfirebase-tools13.15.2 (pinned)Deploys Hosting, Firestore, and Functions
Cloud Authgoogle-github-actions/authv2Exchanges GitHub OIDC for GCP access token (WIF)
Cloud SDKgoogle-github-actions/setup-gcloudv2Provides gcloud in deploy job
Deployment TargetFirebase (hosting,firestore,functions)Project dora-tmaShips app, security rules/indexes, and functions
Release Notes AIAnthropic Messages API via curlclaude-sonnet-4-6Generates categorized release notes
Release PublishingGitHub CLI (gh)runner-providedCreates Git tag and GitHub Release

AI-Powered Release Notes

The release-notes job calls the Anthropic API directly via curl to generate human-readable release notes from the commit log:

PropertyValue
Modelclaude-sonnet-4-6
InputConventional commit log for the release (feat:, fix:, perf:, docs:, refactor:)
OutputCategorized markdown: Features, Bug Fixes, Performance, Documentation, Refactoring
FallbackShell grep/sed pipeline renders the same section structure if API call fails
SecretANTHROPIC_API_KEY GitHub Actions secret — CI only, never deployed to runtime

The final release notes are written to release-notes.md and passed to gh release create in the create-release job.

Claude Code as Development Assistant

Beyond CI automation, Claude Code (Anthropic's AI coding assistant) is used interactively throughout development:

Claude Code is configured via CLAUDE.md (Claude Code-specific instructions) and AGENTS.md (universal AI assistant instructions shared with other tools like Copilot and Cursor).

Key settings: npm install (not npm ci), NODE_TLS_REJECT_UNAUTHORIZED=0, Firebase Tools pinned to v13.15.2, WIF authentication.

Local Development

npx ng serve --configuration production --port 4201
# App: http://localhost:4201

With Firebase Emulators

firebase emulators:start
# Emulator UI: http://localhost:4000

Key File Reference

FilePurpose
package.jsonDependencies + npm scripts
angular.jsonBuild config, lazy loading, budget limits
firebase.jsonHosting targets, Firestore config, emulator setup
firestore.rulesSecurity rules
src/main.tsBootstrap with Firebase providers
src/app/app.routes.tsRoute definitions with lazy loading
functions/src/index.ts4 AI Cloud Functions
.github/workflows/deploy-and-release.ymlMain CI/CD pipeline
docs/Static docs site (DIAL hub, architecture)