Skip to main content

Architecture

ProjectAchilles follows a three-tier architecture: a React SPA frontend, an Express API backend, and Go agents deployed to target endpoints. Elasticsearch stores test results for analytics, while SQLite manages agent state.

System Overview

Data Flow

Test Execution Flow

Agent Enrollment Flow

Tech Stack

LayerTechnologyVersionPurpose
FrontendReact19.2UI framework
Vite7.2Build tool and dev server
Tailwind CSS4.1Utility-first styling
Redux Toolkit2.10State management
React Router7.13Client-side routing
Clerk5.xAuthentication
BackendExpress4.18HTTP framework
TypeScript5.9Type-safe development
better-sqlite3Agent database
@elastic/elasticsearch8.xAnalytics queries
AgentGo1.24Cross-platform binary
AnalyticsElasticsearch8.17Result storage and aggregation
SigningosslsigncodeWindows Authenticode
rcodesignmacOS ad-hoc signing
CIGitHub ActionsTest + security review

Project Structure

ProjectAchilles/
├── frontend/ # React 19 + TypeScript + Vite
│ └── src/
│ ├── components/ # Shared UI primitives (Button, Card, etc.)
│ ├── pages/ # Module pages (browser, analytics, agents, settings)
│ ├── services/api/ # API client modules
│ ├── hooks/ # Custom hooks (useAuthenticatedApi, etc.)
│ └── store/ # Redux slices
├── backend/ # Express + TypeScript (ES modules)
│ └── src/
│ ├── api/ # Route handlers (*.routes.ts)
│ ├── services/ # Business logic by module
│ │ ├── agent/ # Enrollment, heartbeat, tasks, schedules
│ │ ├── analytics/ # Elasticsearch queries, client factory
│ │ ├── browser/ # Git sync, test indexing
│ │ ├── tests/ # Go cross-compilation, cert management
│ │ ├── defender/ # Microsoft Graph API client
│ │ └── alerting/ # Slack + email dispatch
│ ├── middleware/ # Auth, error handling, rate limiting
│ └── types/ # TypeScript definitions
├── backend-serverless/ # Vercel serverless fork (Turso + Blob)
├── agent/ # Go agent source
│ ├── main.go # CLI entry point (--enroll, --run, --install)
│ └── internal/ # Agent modules
│ ├── config/ # Configuration management
│ ├── enrollment/ # Token-based registration
│ ├── executor/ # Test binary execution
│ ├── httpclient/ # HTTP client with auth
│ ├── poller/ # Task polling loop
│ ├── reporter/ # Result reporting
│ ├── service/ # OS service management
│ ├── store/ # Encrypted credential storage
│ ├── sysinfo/ # Platform-specific system info
│ └── updater/ # Self-update mechanism
├── scripts/ # Shell scripts and PowerShell bootstrap
├── docs/ # Documentation source files
├── wiki/ # This documentation site (Docusaurus)
└── docker-compose.yml # Multi-service deployment

Deployment Architecture

ProjectAchilles supports five deployment targets, each with different trade-offs:

TargetBackendDatabaseFile StorageAgent BuildsCost
Docker Composebackend/SQLite (volume)Filesystem (volume)YesFree
Railwaybackend/SQLite (volume)Filesystem (volume)Partial~$10-13/mo
Renderbackend/SQLite (persistent disk)Filesystem (disk)Partial~$14/mo
Fly.iobackend/SQLite (volume)Filesystem (volume)Yes~$8/mo
Vercelbackend-serverless/Turso (libSQL)Vercel BlobNo~$20/mo

The Vercel target uses a purpose-built serverless fork (backend-serverless/) that replaces SQLite with Turso, filesystem with Vercel Blob, and process-based scheduling with Vercel Cron jobs. See Deployment Overview for detailed comparisons.