Angular 21 Feature Parity Checklist

Purpose: Definitive audit confirming every feature, page, link, theme, and API endpoint from the legacy HTML/CSS frontend exists and functions correctly in the Angular 21 SPA.

Status: ✅ All items verified — zero untracked regressions.

Last reviewed: 2026-03-08


Table of Contents

  1. Pages & Routes
  2. Feature Parity by Page
  3. Theme Consistency
  4. Navigation Links & External References
  5. Mobile / Responsive Layout
  6. API Endpoints
  7. Regressions & Known Gaps

1. Pages & Routes

Maps every legacy static HTML page to its Angular 21 equivalent.

Legacy FileURLAngular RouteComponentStatus
index.html (Admin Dashboard)//HomeComponent
compiler.html/compiler.html/compilerCompilerComponent
admin-storage.html/admin-storage.html/adminAdminComponent
test.html/test.html/ + /api-docsApiTesterComponent + ApiDocsComponent
validation-demo.html/validation-demo.html/validationValidationComponent
websocket-test.html/websocket-test.html/api-docsApiDocsComponent (endpoint docs)⚠️ See §7
e2e-tests.html/e2e-tests.htmlN/A (Playwright in /e2e/)⚠️ See §7
/performancePerformanceComponent✅ (new in Angular)

Legacy → Angular route redirect coverage: All old URL paths that browsers may have bookmarked are handled by the SPA fallback in worker.ts — unknown paths redirect to /.


2. Feature Parity by Page

2.1 Dashboard — / (HomeComponent)

Maps to legacy index.html (Admin Dashboard).

FeatureLegacy index.htmlAngular HomeComponentStatus
System status bar (health check)
Total Requests metric card
Queue Depth metric card
Cache Hit Rate metric card
Avg Response Time metric card
Queue depth count card (5th card)✅ (new)
Queue depth chart (Chart.js)✅ (SVG via QueueChartComponent)
Quick-action buttons (compile, batch, async)
Navigation grid (tools & pages)
Endpoint comparison table
Inline API tester✅ (test.html)✅ (ApiTesterComponent)
Notification settings toggle✅ (NotificationService)
Auto-refresh toggle + configurable interval
Manual "Refresh" button✅ (MetricsStore.refresh())
Skeleton loading placeholders✅ (SkeletonCardComponent)✅ (improved)

2.2 Compiler — /compiler (CompilerComponent)

Maps to legacy compiler.html.

FeatureLegacy compiler.htmlAngular CompilerComponentStatus
JSON compilation mode
SSE streaming mode
Async / queued mode
Batch compilation mode
Batch + Async mode✅ (new)
Preset selector✅ (linkedSignal() URL defaults)
Add/remove source URL fields✅ (reactive FormArray)
Transformation checkboxes
Benchmark flag
Real-time queue stats panel✅ (shown for async modes)✅ (new)
Compilation result display✅ (CDK Virtual Scroll)
File drag-and-drop upload✅ (Web Worker parsing)✅ (new)
Turnstile bot protection✅ (TurnstileComponent)✅ (new)
Progress indication✅ (MatProgressBar)
Log / notification integration✅ (LogService, NotificationService)✅ (new)

2.3 Performance — /performance (PerformanceComponent)

No direct legacy equivalent; functionality was previously spread across the dashboard.

FeatureLegacyAngular PerformanceComponentStatus
System health statuspartial (/metrics call)✅ (/health/latest)
Uptime display✅ (new)
Per-endpoint request counts✅ (index.html metrics)✅ (MatTable)
Per-endpoint success/failure✅ (new)
Per-endpoint avg duration✅ (new)
Sparkline charts per endpoint✅ (SparklineComponent)✅ (new)
Auto-refresh via MetricsStorepartial

2.4 Validation — /validation (ValidationComponent)

Maps to legacy validation-demo.html.

FeatureLegacy validation-demo.htmlAngular ValidationComponentStatus
Multi-line rules textarea
Rule count hint
Strict mode toggle
Validate button with spinner
Color-coded error/warning/ok output
Pass/fail summary chips
Per-rule AGTree parse errors✅ (ValidationService)

2.5 API Reference — /api-docs (ApiDocsComponent)

Maps to legacy inline API docs (in index.html) and the standalone /api JSON endpoint.

FeatureLegacyAngular ApiDocsComponentStatus
Endpoint list with methods✅ (HTML list)✅ (grouped cards)
Compilation endpoints
Monitoring endpoints
Queue management endpoints
Workflow endpoints✅ (new)
Validation endpoint✅ (new)
Admin endpoints
Live version display (/api/version)✅ (httpResource())✅ (new)
Built-in API tester (send requests)partial (test.html)
cURL example generation

2.6 Admin — /admin (AdminComponent)

Maps to legacy admin-storage.html.

FeatureLegacy admin-storage.htmlAngular AdminComponentStatus
Auth gate (X-Admin-Key)✅ (AuthService, adminGuard)
Authenticated status bar
Storage stats (KV / R2 / D1 counts)✅ (StorageService)
D1 table list
Read-only SQL query console✅ (CDK Virtual Scroll results)
Clear expired entries
Clear cache
Vacuum D1 database
Skeleton loading state✅ (SkeletonCardComponent)✅ (improved)

3. Theme Consistency

RequirementImplementationStatus
Dark / light theme toggleThemeService — persists in localStorage, applies dark-theme class + data-theme attribute to <body>
Theme toggle in toolbarAppComponent toolbar button, accessible via keyboard
No flash of unstyled content (FOUC)loadPreferences() runs in constructor before first render
Consistent theme across all routesSingle ThemeService + Angular Material theming via CSS custom props
Compiler pageMaterial Design 3 color tokens, dark-theme class propagates
Dashboard / Home pageSame
Admin pageSame
Performance pageSame
Validation pageSame
API Docs pageSame

Internal Navigation

Link / ActionLegacyAngularStatus
Home / Dashboardindex.html/ via routerLink
Compilercompiler.html/compiler via routerLink
Performance/performance via routerLink
Validationvalidation-demo.html/validation via routerLink
API Docsindex.html#api/api-docs via routerLink
Adminadmin-storage.html/admin via routerLink
404 fallback** → redirect to /
Skip-to-main-content link✅ (<a href="#main-content">)✅ (a11y new)

Desktop / Mobile Navigation

Navigation PatternAngularStatus
Horizontal tab bar (desktop)routerLink + routerLinkActive tabs in toolbar
Slide-over sidenav (mobile)MatSidenav (mode="over") with hamburger button
Active route highlightrouterLinkActive="active-nav-item"

External References

LinkDestinationLocation in AngularStatus
GitHub repositoryhttps://github.com/jaypatrick/adblock-compilerAppComponent footer
JSR package@jk-com/adblock-compiler (via GitHub link)Footer
Live service URLhttps://adblock-compiler.jayson-knight.workers.dev/— (API calls use relative paths)

5. Mobile / Responsive Layout

RequirementImplementationStatus
Slide-over navigation drawer on mobileMatSidenav mode="over" in AppComponent
Hamburger menu buttonShown on small viewports (<= 768 px) via CSS display
Desktop horizontal tabs hidden on mobileCSS media query hides .app-nav-tabs
Stat cards responsive gridCSS grid with auto-fill / minmax
Compiler form adapts to narrow screensMatFormField full-width, stacked layout
Admin SQL console wraps correctlyCDK Virtual Scroll with overflow handling
Navigation grid auto-reflowCSS grid auto-fill
Table horizontal scrolloverflow-x: auto wrapper on all MatTable

6. API Endpoints

All worker API endpoints surfaced in the Angular frontend (called from services and documented in ApiDocsComponent).

6.1 Compilation

EndpointWorkerAngular ConsumerStatus
POST /compileCompilerService.compile()
POST /compile/streamSseService + CompilerService.stream()
POST /compile/batchCompilerService.batch()
POST /compile/asyncCompilerService.compileAsync()
POST /compile/batch/asyncCompilerService.batchAsync()
GET /ws/compileDocumented in /api-docs⚠️ See §7
POST /ast/parseApiDocsComponent tester

6.2 Monitoring & Health

EndpointWorkerAngular ConsumerStatus
GET /healthMetricsStore (health polling)
GET /health/latestPerformanceComponent (httpResource)
GET /metricsMetricsStore / MetricsService
GET /apiApiDocsComponent
GET /api/versionApiDocsComponent (httpResource)
GET /api/deploymentsDocumented in /api-docs
GET /api/deployments/statsDocumented in /api-docs

6.3 Queue Management

EndpointWorkerAngular ConsumerStatus
GET /queue/statsQueueService, MetricsStore
GET /queue/historyQueueService, QueueChartComponent
GET /queue/results/:requestIdCompilerService (async polling)
POST /queue/cancel/:requestIdCompilerService.cancelJob()

6.4 Workflow (Durable Execution)

EndpointWorkerAngular ConsumerStatus
POST /workflow/compileApiDocsComponent (documented)
POST /workflow/batchApiDocsComponent (documented)
GET /workflow/status/:instanceIdApiDocsComponent (documented)
GET /workflow/metricsApiDocsComponent (documented)
GET /workflow/events/:instanceIdApiDocsComponent (documented)
POST /workflow/cache-warmApiDocsComponent (documented)
POST /workflow/health-checkApiDocsComponent (documented)

6.5 Validation

EndpointWorkerAngular ConsumerStatus
POST /api/validateValidationService

6.6 Admin Storage (auth-gated)

EndpointWorkerAngular ConsumerStatus
GET /admin/storage/statsStorageService.getStats()
GET /admin/storage/tablesStorageService.getTables()
POST /admin/storage/queryStorageService.query()
POST /admin/storage/clear-expiredStorageService.clearExpired()
POST /admin/storage/clear-cacheStorageService.clearCache()
POST /admin/storage/vacuumStorageService.vacuum()
GET /admin/storage/exportApiDocsComponent (documented)

6.7 Configuration

EndpointWorkerAngular ConsumerStatus
GET /api/turnstile-configTurnstileService

7. Regressions & Known Gaps

7.1 websocket-test.html — No Dedicated Angular Route

Legacy: A standalone HTML page at /websocket-test.html provided an interactive WebSocket client to exercise the GET /ws/compile endpoint.

Angular status: There is no dedicated Angular route for WebSocket testing.

Mitigation:

  • The GET /ws/compile endpoint is fully documented in the /api-docs route with method, path, and description.
  • The endpoint remains operational in the Worker.
  • Manual testing can be performed using browser DevTools or wscat.

Recommendation: If interactive WebSocket testing is desired in the SPA, add a /ws-test route with a WsTestComponent that opens a WebSocket and displays send/receive frames. Log this as a child issue if needed.

Severity: Low — endpoint unchanged; only the interactive HTML tester is absent.


7.2 e2e-tests.html — Test Runner Removed from Production SPA

Legacy: An HTML page at /e2e-tests.html embedded a browser-based end-to-end test runner that could be opened in any browser to run API integration tests.

Angular status: Not ported to the Angular SPA. End-to-end tests now live in frontend/e2e/ and are executed with Playwright (npm run e2e).

Mitigation:

  • Playwright tests in frontend/e2e/ cover the same navigation and API scenarios.
  • The e2e-tests.html approach was a development/debug convenience, not a production feature used by end-users.

Recommendation: Keep Playwright as the canonical e2e mechanism. The HTML test runner is not required in the production SPA.

Severity: Low — test coverage maintained via Playwright; no user-facing regression.


Summary

CategoryTotal Items✅ Present⚠️ Gap / Notes
Pages / Routes862 (see §7)
Dashboard features14140
Compiler features14140
Performance features770
Validation features770
API Docs features10100
Admin features990
Theme items10100
Navigation / links14140
Responsive layout880
API endpoints30291 (/ws/compile not surfaced as interactive UI)
Total1311283

All three gaps are low-severity development/debug conveniences with documented mitigations. There are zero untracked regressions in user-facing functionality.