Skip to content
AIM Development and Automation

How this site is built

This site is a demo too: a static site on Cloudflare, an API on the edge and demos that really run. Every piece has a reason I wrote down. Here's the map, why it's built this way and how I know it works.

The architecture

Tap or focus a piece to see what it does and where it was decided.

Your browser

Pages from Cloudflare's network, and /api/* on the same domain

Cloudflare

SQL over HTTPS and Resend's API

Data and email

The browser calls them directly, with CORS

Render, free plan

Design only, outside production

The exported workflow is built into the site

Static site

Cloudflare Pages

Astro renders every page to HTML at build time, in Spanish and English. The interactive parts are Preact islands that load only their own JavaScript. Cloudflare Pages serves it from its network, for free, with a strict Content Security Policy (CSP): no unsafe-inline, no unsafe-eval.

Key decisions

Every decision is written down with its context and the alternatives I ruled out. These are the ones you notice most.

Quality in numbers

These numbers come from the repository itself every time the site builds, so they don't go stale. The ones that depend on a measurement say when they were measured.

Automated tests

2,312test casesin 213 files; CI runs them on every push and pull request

  • WebsiteVitest, 113 files1,280
  • E2E and accessibilityPlaywright and axe, 38 files325
  • Edge APIVitest with PGlite, 37 files447
  • ContractsVitest, 10 files105
  • API PlaygroundVitest, 7 files62
  • Workflow engineVitest, parity with n8n, 2 files27
  • Python migratorpytest, 6 files66

Counted in the code at build time. A case that repeats for each page, language or data row counts once, so more of them run: the E2E tests go through every page of the build on mobile and desktop.

Lighthouse

Performance on mobile
98–99
Performance on desktop
100
Accessibility, best practices and SEO
100
Layout shift while loading (CLS)
0.011

Measured on November 8, 2026 against aimweb-9hc.pages.dev: 13 pages in both languages, median of 3 runs, Lighthouse 13.5.0. Not counting /admin/, which is private and not indexed.

Latency

0.13 s
Median of the API in production, with Neon over HTTP. Before, 1.6 to 2.5 s per request.Measured on November 8, 2026, DEC-027: The API talks to Neon over HTTP (opens in a new tab)
< 2 s
From click to result in the Live automation: the API answers in about 40 ms, Turnstile included, and the workflow runs in under 1 ms.Measured on November 7, 2026, DEC-023: The automation workflow runs on Cloudflare; n8n is for designing it (opens in a new tab)

Security review

0 critical or high findings

  • 4 medium, 3 fixed
  • 8 low or informational, 2 fixed

A review against the OWASP Top 10:2025 of the edge, the website, both Render APIs and the supply chain, on November 8, 2026. Every fixed finding has a test that failed before the change.

Read the full report (in Spanish) (opens in a new tab)

Stack

The versions come from the repository's manifests at build time: always exact (DEC-002).

Website
  • Astro 7.3.8
  • Preact 10.29.8
  • Tailwind CSS 4.3.3
  • TypeScript 5.9.3
  • Satori 0.63.2
  • sharp 0.35.5
Edge API
  • Cloudflare Pages Functions
  • Hono 4.13.13
  • Drizzle ORM 0.45.4
  • @neondatabase/serverless 1.2.0
  • Zod 4.6.7
  • jose 6.2.13
AI
  • Cloudflare Workers AI
  • Gemma 4
Demos on Render
  • NestJS 12.2.0
  • FastAPI 0.161.1
  • Python 3.12
  • uv
  • Docker
Automation
  • n8n 2.45.2
Testing and quality
  • Vitest 5.0.3
  • Playwright 1.63.0
  • axe-core 4.14.0
  • PGlite 0.5.11
  • pytest
  • Lighthouse 13.5.0
  • Biome 2.5.15
Monorepo
  • pnpm 10.26.1
  • Turborepo 2.11.7

Open source

This site is open source.

The code, the tests, the CI and every decision with its alternatives are in the repository. The numbers on this page are worked out from it.

See the repository on GitHub (opens in a new tab)

Got an idea? Tell me about it.

Write to me with no strings attached, wherever you are. I'll reply with specific questions and, if it's a fit, a written proposal.