Skip to content
Rúben Modernoruben.moderno
Energia Natural
2026/Architecture, development & infra

Energia Natural

Micael works the land — intuitive agriculture, deep ecology, regenerating a Mediterranean landscape. He couldn't depend on me to change a price; that would go against everything he practices. I built him a site he runs entirely on his own, from the first line of text to the last price.

AstroCloudflare D1TypeScriptSSRCustom CMS
Visit site
Energia Natural
Results
100/100
Lighthouse across every metric
8 modules
of back-office, run by him alone
< 1 min
to publish, no code
18
pages, 16 generated from the database
The challenge

Nothing could depend on me

  • His business is about autonomy — depending on a developer to change a price made no sense.
  • He had to manage messages, events, projects, services, settings, users and history — all himself, via admin.
  • 16 service pages had to come from the database, not from static files only I could edit.
  • Passwordless login — a small team has no time to manage lost credentials.
  • Analytics had to exist, but cookieless — GDPR by design, not by a consent banner.
The approach

A site he tends himself

Astro 5 in hybrid SSR over Cloudflare Pages and D1, with an admin built around his business — no generic CMS forced to fit. Magic links with single-use tokens and a D1 allowlist take passwords out of the way. Custom analytics, written by me in ~150 lines, writes straight to D1, no cookies, no third-party tools. The result: Micael logs in, changes what he needs, logs out — without waiting on me.

What I built

An 8-module back-office, all his

Full back-office

8 modules — messages, events, projects, services, settings, users, analytics, history — run by him, start to finish.

Dynamic pages

16 service pages come from the database: change the text and the page updates itself.

Passwordless auth

Magic links via Resend, single-use tokens, D1 allowlist — no password to forget.

Cookieless analytics

~150 lines written from scratch, GDPR by design, his own dashboard.

Domain email

@energianatural.pt via Cloudflare Email Routing.

Anti-spam

Turnstile + honeypot + per-email rate-limit, no manual intervention.

What I learned

Building for someone who wants no middleman

Cloudflare D1 is enough for almost everything

I started nervous about distributed SQLite — didn't need to be. For institutional sites with up to a few thousand users, D1 is more than enough, and Cloudflare Pages integration is trivial.

A custom CMS takes longer than it looks

I underestimated the effort of an 8-module back-office. Next time I either charge more for it, or use something like Payload CMS for the generic modules and only build from scratch what's client-specific.

Lighthouse 100/100/100/100 is overkill but it sells

Hitting 100 in every category cost ~2 extra days. For the end user, 90+ was enough. But a perfect Lighthouse screenshot is a direct sales argument for the next client.

Magic links beat passwords

He never once asked for a "forgot password" because there's no password to forget. For small teams (up to ~20 users), I always recommend it.

What's next

Enrollment payments and SMS

Next phase: integrate payments for training enrolments and extend notifications to SMS on top of email. Waiting for real-usage feedback before pushing forward.

Need a tailored platform?

I can design and build a complete stack for your business — back-office included.

Talk to me