Work
ClientClient · Business growth consultancy
Brainstorming

Brainstorming

Website, blog and a site for US clients of a business growth consultancy, migrated from WordPress to Astro with a serverless backend.

View live site

Screenshot of Brainstorming (1/3)
Screenshot of Brainstorming (2/3)
Screenshot of Brainstorming (3/3)
SYSTEM.md

The problem

A consultancy with three sites needed a maintainable, bilingual foundation protected against spam, without depending on WordPress.

What I built

I migrated the sites to Astro with a custom design. The serverless backend uses PostgreSQL, Upstash Redis caching and transactional email with Resend and React Email. Content is managed by a custom CMS I also built.

Outcome

Three sites on one technical foundation, with content editable from the custom CMS.

Decisions that mattered

  1. 01

    Protected forms

    Cloudflare Turnstile protects every contact point; Resend sends the internal notification and the confirmation to the visitor.

  2. 02

    Errors with context

    Sentry records errors and logs with their context, while the messages users see stay generic.

  3. 03

    Visible to search engines and to the business

    Technical SEO with robots.txt and sitemap.xml, Google Analytics and Tag Manager, and Spanish and English internationalization.

Technologies

  • Astro
  • TypeScript
  • PostgreSQL
  • Upstash Redis
  • Resend
  • Turnstile
  • Sentry

C4 model. The pulsing line is the main path of a request.

Level 1 · who uses the system and what it connects to

HTTPS1siteverifyHTTPSRESTHTTPSVisitorReads and gets in touchBrainstorming sitesWebsite, blog and US siteTurnstile[Cloudflare Turnstile]Anti-bot protectionResend[Resend]Notification andconfirmationCustom CMS[CMS a medida]Editable contentSentry[Sentry]Errors and logs

Level 2 · the applications and data stores it is made of

HTTPS1REST · buildPOST ·JSON2siteverify3SQL4cacheReact EmailHTTPSCustom CMS[CMS a medida]Editable contentResend[Resend]Notification andconfirmationTurnstile[Cloudflare Turnstile]Anti-bot protectionVisitorReads and gets in touchSites[Astro · Vercel]Website, blog and US siteServerless backend[Funciones serverless · Vercel]Forms and dataPostgreSQL[PostgreSQL]Site dataSentry[Sentry]Errors and logsUpstash Redis[Upstash Redis]Cache and limits

Level 3 · the components inside the API

pipelinepipelinepersist1notify2SQL3HTTPS4rate limitsiteverifyAnti-bot check[siteverify]Validates the TurnstiletokenRate limit[Upstash ratelimit]Per visitor, with RedisValidation[validation]Form dataRepository[repository]Stores the contactTurnstile[Cloudflare Turnstile]Anti-bot protectionUpstash Redis[Upstash Redis]Cache and limitsMailer[React Email]React Email templatesPostgreSQL[PostgreSQL]Site dataResend[Resend]Notification andconfirmation
  • Person
  • System
  • Container
  • Database
  • External
  • Main path
  1. 01Visitor
  2. 02Astro
  3. 03Turnstile
  4. 04Serverless API
  5. 05PostgreSQL
  6. 06Resend

CV

Get my CV

Leave your email and I will send the CV there. First I check the address is yours with a code.