An example app on earl.ee

Next.js, extended, running on earl.ee.

This app was built from its Dockerfile and deployed with git push, the same way as every other app on the platform.

Framework
Next.js
Built as
custom HTTPS server, on Node
Answering at
nextjs-extended-ef22.earlee.app
Listens on
port 3000, HTTPS
A request travels from the browser over HTTPS to the earl.ee router, which passes it to this app's container on port 3000. Browser you HTTPS earl.ee router certificate, TLS :3000 This container Node
Your request reached this page over HTTPS. The platform holds the certificate and passes the request to the container on port 3000; the app reads its address from the request.

What Next.js does here

This page was rendered on the server for this request.

What end-to-end TLS does here

Between the earl.ee router and this container, the request travels over TLS as well. The router checks this container’s certificate before it passes anything on.

Two paths compared. By default a request goes from the browser over HTTPS to Caddy, over mutual TLS to the earl.ee router, and over plain HTTP to the container. For this app the last step is TLS as well. BY DEFAULT Browser HTTPS Caddy mTLS earl.ee router HTTP Container THIS APP Browser HTTPS Caddy mTLS earl.ee router TLS This container Two paths compared. By default a request goes from the browser over HTTPS to Caddy, over mutual TLS to the earl.ee router, and over plain HTTP to the container. For this app the last step is TLS as well. BY DEFAULT Browser HTTPS Caddy mTLS earl.ee router HTTP Container THIS APP Browser HTTPS Caddy mTLS earl.ee router TLS This container

Measured by this app, for this request

Scheme
https
Certificate from
EU-Native Platform Root CA
Issued for
549d16e5-7b74-412f-8435-b13a02566bc4
Valid until
2027-10-21 19:55 UTC

Stated by the platform

What PostgreSQL does here

This app has a PostgreSQL database of its own in each environment. The database runs in a container on the app’s own network, and only this app’s container can reach it.

This container connects to its PostgreSQL database on port 5432 without TLS. Both containers are on the app’s own network, which nothing outside the app can reach. THIS APP’S NETWORK This container :5432, no TLS PostgreSQL This container connects to its PostgreSQL database on port 5432 without TLS. Both containers are on the app’s own network, which nothing outside the app can reach. THIS APP’S NETWORK This container :5432, no TLS PostgreSQL

Measured by this app, for this request

Server
PostgreSQL 18.4 (Debian 18.4-1.pgdg13+1)
Host
db-549d16e5-7b74-412f-8435-b13a02566bc4-live
First row written
2026-10-21 14:38 UTC
Container started
2026-10-21 19:56 UTC
Page views counted
22
Database size
7.5 MB

The first row is older than this container, so the data outlived at least one container.

Stated by the platform

What Valkey does here

This app has a Valkey instance of its own in each environment. Valkey keeps everything in memory. It runs in a container on the app’s own network, and only this app’s container can reach it.

This container connects to its Valkey instance without TLS. Both containers are on the app’s own network, which nothing outside the app can reach. THIS APP’S NETWORK This container no TLS Valkey This container connects to its Valkey instance without TLS. Both containers are on the app’s own network, which nothing outside the app can reach. THIS APP’S NETWORK This container no TLS Valkey

Measured by this app, for this request

Server
Valkey 9.1.1
Host
valkey-549d16e5-7b74-412f-8435-b13a02566bc4-live
Valkey started
2026-10-27 20:05 UTC
Container started
2026-10-21 19:56 UTC
Page views counted
4
Memory used
1.0 MB
Memory limit
64.0 MB
When full
allkeys-lru

The counter starts again at 1 whenever Valkey loses its contents.

Stated by the platform