How it's built
How Wattlas was built, how its data refreshes, how the assistant answers, and where the numbers come from. For what the site shows, take the product tour.
Built with Claude Code, shipped through GitHub
Each view was built in small steps: a written brief, code with a test that runs offline, then a proposed change (a pull request). An expert approves every step before it goes live.
- 1Briefgoal and success criteria
- 2Claude Codewrites the code and its test
- 3Pull requestthe proposed change
- 4Reviewan expert approves
- 5Mergeinto the live site
Every change starts as a written task (a GitHub issue), and the change links back to it.
The data refreshes itself twice a month
Twice a month a scheduled job fetches fresh data, turns it into small files and republishes the site. No program builds a page when you visit, and the views read from no database.
- 1Open dataENTSO-E, NESO, MaStR and more
- 2PipelinePython code that computes each figure
- 3Data filessmall JSON, saved in the repository
- 4The websitestatic files on Firebase
When
On the 1st and 15th of each month at 05:17 UTC, after the previous day's market data is published. Only files that changed are saved.
The same job rebuilds the pages and rewrites any stored assistant answer whose data changed.
Can you ask a static site a question?
Yes. Every view has a question box. Here is where its answers come from, how they stay true to the chart, and what they cost.
Most answers are ready before you ask
A question you type is the only thing on the site worked out on demand. It goes, with what the view is showing, to one small cloud program in Belgium, which fetches the page's data and asks Google's Gemini model.
- 1The pageyour question and the view
- 2Cloud Functionone small program in Belgium
- 3The datafetched from wattlas.net
- 4GeminiFlash when signed in, Flash-Lite otherwise
- 5Answerwith its caveat
Suggested questions are answered in advance
The three questions under each chart were answered ahead of time. Their 132 answers load at once and need no model call.
If that program is down, every chart and every stored answer still loads.
One question can draw on several views
If you are signed in, the assistant can search all 62 data files on the site and use up to four, so one answer can combine two views.
Found two ways
It matches the words in your question, in English, German or French, and what the question means. The best 12 files go forward.
A small model chooses
The cheapest model reads only the 12 file descriptions and picks the ones the question needs.
Trimmed to size
At most 96 KB of data per answer, cut to the zone and years you asked about.
Every figure has a source
Each figure names the file it came from, and the site adds that file's source and caveat.
A set of test questions checks that the search still finds the right files.
Answers stick to the page's own numbers
Grounding means the model answers only from the site's own data: the files behind the view, or the ones picked for your question.
The site chooses the data
Your browser sends only the question and the view, so nobody can slip other data to the model.
Always the current file
Data is fetched when you ask, so the answer and the chart come from the same refresh.
Caveats are added for you
On 18 views, if the model leaves out the caveat, the site adds it.
Stored answers are tested
A stored answer that is missing, refuses to answer or has lost its caveat fails the tests.
If a stored answer's data has changed, it is dropped and the live model answers instead.
What a question costs, and what is kept
Every limit lives in one place and is checked by a test.
Nothing in your browser
No question history is stored on your device.
Personal details removed
Email addresses, phone numbers and bank account numbers (IBANs) are removed before a question is logged.
Signing out clears the session; deleting your account removes its record.
Fifteen sources, plus a few tables kept by hand
Every source publishes in its own format and on its own schedule. The pipeline converts them all to one shape and flags anything that is not openly licensed.
How the data is checked
Kept apart
Each source has its own code, so one failing can't break the others.
Gaps are shown
A missing source says "awaiting source", and a bad file is replaced by its last good version.
Known traps handled
Since October 2025 German day-ahead prices come every quarter-hour, and clock changes make 23- and 25-hour days. The code handles both.
Tested
Over 3 000 automatic tests that need no internet connection, plus several hundred for the site's cloud programs.
Every series is averaged to hourly values and grouped by local time.
See the result
Every number on the site comes with its window and its caveat.