Back to Equalify Dashboard

Architecture Overview

Edit on GitHub

Architecture Overview

Equalify is a web accessibility scanning and monitoring platform built on a serverless AWS architecture. This document provides a high-level overview of the system's components and how they interact.

System Architecture

Equalify follows a modern serverless architecture with clear separation between the frontend, backend API, and scanning microservices.

Core Components

ComponentTechnologyPurpose
FrontendReact + ViteUser interface for managing audits and viewing results
Backend APINode.js (AWS Lambda)Authentication, audit management, and data access
Scan RouterTypeScript LambdaRoutes scan requests to appropriate scanners
HTML ScannerTypeScript Lambda + ChromiumScans web pages using axe-core
PDF ScannerTypeScript + Java LambdasScans PDF documents using veraPDF
DatabasePostgreSQL (via Hasura)Stores audits, URLs, blockers, and scan results
Message QueueAWS SQS (FIFO)Manages scan job distribution

Data Flow

  • User creates an audit → Frontend sends request to Backend API
  • Audit is saved → Backend stores audit and URLs in PostgreSQL
  • Scan is triggered → Backend invokes the SQS Router Lambda
  • Jobs are queued → Router distributes URLs to HTML or PDF SQS queues
  • Scanners process jobs → Lambdas consume from SQS and perform scans
  • Results are returned → Scanners POST results to the webhook endpoint
  • Data is stored → Backend processes and stores blockers in the database
  • User views results → Frontend queries and displays scan results

Repository Structure

equalify/
├── apps/
│   ├── backend/          # API Lambda (Express-like router)
│   │   ├── routes/       # API endpoints organized by auth level
│   │   └── utils/        # Shared utilities (DB, auth, etc.)
│   └── frontend/         # React SPA
│       ├── src/
│       │   ├── components/   # Reusable UI components
│       │   ├── routes/       # Page components
│       │   ├── queries/      # API/GraphQL queries
│       │   └── hooks/        # Custom React hooks
│       └── public/
├── services/
│   ├── aws-lambda-scan-sqs-router/   # Job distribution
│   ├── aws-lambda-scan-html/         # HTML/web scanning
│   ├── aws-lambda-scan-pdf/          # PDF scanning orchestrator
│   └── aws-lambda-verapdf-interface/ # Java PDF scanner
└── shared/
    ├── types/            # TypeScript types and Zod schemas
    └── convertors/       # Result format converters

Authentication

Equalify supports two authentication mechanisms:

  • AWS Cognito: Traditional username/password authentication with JWT tokens
  • SSO (Single Sign-On): Enterprise authentication via Azure AD/MSAL
Both methods issue JWT tokens that are validated by the backend API before processing authenticated requests.

Technology Stack

Frontend

  • React 19 with TypeScript
  • Vite for build tooling
  • TanStack Query for data fetching
  • AWS Amplify for authentication
  • Radix UI for accessible components
  • Recharts for data visualization

Backend

  • Node.js running on AWS Lambda
  • PostgreSQL database with Hasura GraphQL
  • AWS SDK for Lambda invocation, SES, and S3
  • Zod for runtime validation

Infrastructure

  • AWS Lambda for serverless compute
  • AWS SQS (FIFO queues) for job management
  • AWS S3 for static hosting
  • AWS CloudFront for CDN
  • AWS Cognito for authentication

For detailed information about specific components, see the other guides in this folder.