Coming
Markets
Go beyond the current chart: more securities, commentary, tracking over time.
Projects · This website
A static site written with Astro, versioned on GitHub, published automatically to my server on every change. All set up in one day, on 1 November 2026. Here is how the pieces fit together.
git push to liveDiagram 1
One server answers three addresses. Pick a request to follow its path, from the browser to the right container.
Diagram 2
I never copy files by hand. Every change pushed to the main branch triggers an automatic chain, always the same.
My MacGitHubMy server
Durations measured on the day’s deploys (18 to 23 seconds in total). If a step fails, the live site stays on the previous version.
Diagram 3
The market dashboard (stocks, indices and 10-year rates) is fed by a small home-made service. It queries Yahoo Finance and CNBC at a fixed pace and keeps the result in memory. Visitors read that copy, so the number of calls to the sources does not depend on traffic.
938 calls per hour to the sources (15 quotes a minute, plus 19 history calls every 30 minutes), whether there is one visitor or a thousand. The visits shown here are example traffic. Data is delayed and for information only.
The building blocks
| Role | Tool | Why this choice |
|---|---|---|
| Domain name and DNS | Hostinger | The domain was already there. Three names point to the server: the bare domain, www and the sensitive projects’ subdomain. |
| Server | VPS Hostinger, Ubuntu 24.04 | A server of my own, which also hosts the sensitive projects and my AI lab. |
| Containers | Docker | Each service lives in its own box and restarts without touching the others. |
| Routing and HTTPS | Traefik v3 + Let's Encrypt | It reads the domain name and path of every request, and renews the certificates on its own. |
| Site | Astro 7 | Produces static HTML, fast and with no database. The content fits in one file. |
| Web server | nginx | Serves the files built by Astro, read-only. |
| Charts | uPlot | A very light charting library (about 50 KB). |
| Market service | Node.js 22 | About a hundred lines, with no dependency to install. |
| Private access | WordPress + MySQL | The former WordPress site, moved to its own subdomain: an area for sensitive projects, not visible to the public. |
| Code and history | Git + GitHub | Every change is tracked and can be undone. |
| Publishing | GitHub Actions + rsync over SSH | Builds the site and sends only the changed files. |
| Portrait | Node.js script + sharp | The portrait is computed from my photo, then recoloured. |
| Partner | Claude Code | Writing code, configuring the server and deploys, in dialogue. |
Log of 1 November
The bertrand-didier.tech domain showed a WordPress site, already installed in a container on my Hostinger VPS.
First idea: publish the site from Git on Hostinger web hosting. My plan being an “AI Builder” one, it does not accept custom code, which support confirmed.
WordPress moves to its own subdomain and hosts the sensitive projects, not visible to the public; the main domain hosts the new site. Traefik routes both.
Creation of the repository, the Astro site and the GitHub Actions workflow. A dedicated account on the server receives the files, with an SSH key used for nothing else.
The Node.js service caches prices and the uPlot chart shows one year rebased to 100, with the 10-year OAT on the right axis.
A banner with the Philharmonie at night, several portrait attempts, then a clean editorial redesign: large type, brick accent, and a recoloured portrait that stays true to the photo.
With Claude
The whole site was built in dialogue with Claude Code, Anthropic’s coding assistant. It writes, configures and checks; I set the course, review and approve.
Figures taken from the Git repository and the GitHub Actions history when version 1.1 was released.
Security
No password travels through the publishing chain, and no secret is written in the code.
Traefik obtains and renews Let’s Encrypt certificates automatically for all three addresses.
The deploy account has no password. Its key is restricted and only gives access to the site folder.
GitHub checks the server’s fingerprint before every upload: a machine impersonating it would be refused.
The deploy key is stored in GitHub’s encrypted secrets, never in the repository.
nginx can only read the site files. The market service is only reachable on the /api/ path.
The site publishes no e-mail address or phone number: contact goes through LinkedIn.
What’s next
Coming
Go beyond the current chart: more securities, commentary, tracking over time.
Exploring
What a golfer would like to have, with a discreet AI coach.
Technical work
Updated by hand on the server today. It could follow the same automatic chain as the site.