Project archive
Research tools, personal apps, smaller projects and every merged upstream contribution.
Selected workProject register
Projects outside the featured selection. An archive entry does not mean a project is discontinued.
Research tools
| Item | Kind | Stack | Link |
|---|---|---|---|
| brightway-benchmarks This suite caught Brightway's LCA calculator, bw2calc 3.0.0, running its iterative solver about five times slower when the optional PyPardiso solver is missing. I reported it, and the maintainer's fix shipped in 3.1.0. It tracks speed across Brightway releases and checks each score against an independent calculation, on made-up databases shaped like ecoinvent. Cite this software (brightway-benchmarks)van Lierde, S. (n.d.). brightway-benchmarks [Computer software]. https://github.com/simonvanlierde/brightway-benchmarks | benchmark suite | Python, Brightway, LCA, asv, Docker | SourceZenodo record |
| sourceledger Publishers sometimes revise a data file without saying so, and results built on it change. sourceledger, a Python library, stamps each row of a dataset with the download it came from (URL, time and SHA-256) and flags a source that has changed since. It writes Frictionless Data Packages and is on PyPI with a Zenodo DOI. Cite this software (sourceledger)van Lierde, S. (2026). sourceledger (Version 0.5.1) [Computer software]. https://doi.org/10.5281/zenodo.23460694 sourceledger CodeMetaRetrieved Source record Used byproject-templates | provenance library | Python, PyPI, Frictionless, reproducible builds | Source |
| monitoring A backup container once crash-looped 668 times over 19 hours while every monitor read green. So I redesigned CML's shared monitoring: now a scheduled job that stops checking in raises an alarm. Logs, traces and metrics come in through OpenTelemetry and link up in Grafana, and R9lab sends to it today. Used by R9lab | observability stack | OpenTelemetry, Grafana stack, Docker Compose, OpenTofu | Source |
| project-templates I start new projects from these Copier templates for Python, TypeScript, Rust, Go and Docker. Each gets tests, CI and releases that need no stored keys, and copier update pulls in later template fixes. Cite this software (project-templates)van Lierde, S. (n.d.). project-templates [Computer software]. https://doi.org/10.5281/zenodo.23701980 project-templates CodeMetaRetrieved Source record | project template | Copier, GitHub Actions, CodeMeta, just | SourceDocumentation |
| codemeta-drift CodeMeta, a standard for describing research software, disagrees with itself. This tool compares its list of fields, its examples and its 46 mappings to other formats. In the development version, every one of the 46 mappings still listed a field the standard had dropped, which I raised with the maintainers. Cite this software (codemeta-drift)van Lierde, S. (n.d.). codemeta-drift [Computer software]. https://doi.org/10.5281/zenodo.23774728 codemeta-drift CodeMetaRetrieved Source record Used bycitesync | consistency checker | Python, CodeMeta, FAIR | Source |
| citesync Generate CITATION.cff, codemeta.json and .zenodo.json from a citation file or package metadata in the browser playground. The CLI and pre-commit hook keep them in sync using CodeMeta's crosswalks, as exported by codemeta-drift. Cite this software (citesync)van Lierde, S. (2026). citesync (Version 0.5.0) [Computer software]. https://doi.org/10.5281/zenodo.23779706 citesync CodeMetaRetrieved Source record | citation metadata | Python, PyPI, CodeMeta, CITATION.cff | Source |
| msc-thesis-ie In The Hague, offices have 11% of the floor area but cause 79% of the greenhouse-gas emissions from cooling. I rebuilt the model from my MSc Industrial Ecology thesis (Leiden / TU Delft) as a Snakemake pipeline: an hourly heat balance for 59,381 buildings from the Dutch building register (BAG), followed by LCA. Cite this software (msc-thesis-ie)van Lierde, S. (n.d.). Cooling for Comfort, Warming the World: cooling demand and environmental impact model for The Hague [Computer software]. https://github.com/simonvanlierde/msc-thesis-ie msc-thesis-ie CodeMetaRetrieved Source record Usescitesync | thesis + dashboard | Python, Snakemake, LCA, Geospatial | SourceThesis manuscriptZenodo dataset |
Personal apps
| Item | Kind | Stack | Link |
|---|---|---|---|
| 6-second-scribbles A drawing and guessing game you play live with friends in the browser, built with Vue 3 and FastAPI. In a load test, one server container with one CPU kept about 200 rooms of 6 players going, with 95% of messages arriving within 250 ms. Usesjsonvet | multiplayer game | Vue 3, FastAPI, WebSockets | SourceLoad test |
| roadmap-sh-file-integrity-checker My answer to the roadmap.sh file integrity checker exercise, written three times: in bash, Python and Rust. All three share one signed fingerprint format, and a test checks that they agree on random files. It has a written threat model and refuses an older signed record put back in place. | CLI tool | Rust, Python, bash | SourceThreat model |
| tide A period tracker that keeps every entry on your device and sends nothing anywhere. On the past records of 581 people in an open dataset, its next-period prediction is off by 2.0 days on average after six cycles, against 2.6 days for a fixed 28-day cycle. | web app | React, TypeScript, PWA | SourceBacktest |
| bikespot Remembers where you parked your bike, the way a station bike park labels it (lane, rack level, rack number), with an optional photo and GPS position. It installs from the browser, works offline, keeps everything on your device, and speaks seven languages. | web app | Preact, TypeScript, PWA | Source |
| scattergories An unofficial table companion for the Scattergories party game. It draws each letter from the language's own alphabet, weighted by how often that language uses it, in nine languages. It also picks the categories and runs the timer. | web app | React, i18next, PWA | Source |
| duinlab-today A daily page for The Hague: the day's picture, a few sourced facts, the weather, a quiz and a list of daily web games, under a sky that follows the sun's position. Checkmarks and streaks stay in your browser, and the server keeps nothing beyond Cloudflare's request logs. | web app | Astro, Svelte, Cloudflare Workers | Source |
| vuurtoren A FIRE and net-worth planner for Dutch households. Its tax engine covers Box 3, mortgage interest, transfer tax and fiscal partners, and every tax figure is dated and cites its source. The plan stays in a file on your machine, and a browser build runs the same Python engine client-side. | web app | Python, TypeScript, WebAssembly | Source |
Smaller projects
| Item | Kind | Stack | Link |
|---|---|---|---|
| AI4IE hub a proposed resource hub for the AI for industrial ecology working group, with 75 literature entries and in-browser demos. | resource hub | Source | |
| cml-gallery a demo gallery of CML's research projects, one Markdown file per project, filtered in the browser. | project gallery | Source | |
| io-notebook a marimo course on environmentally extended input-output analysis that runs in the browser, with self-checks that rerun as you move the sliders. | teaching notebook | Source |
Merged upstream
Brightway
Brightway (bw2calc): fixed normalized and weighted scores that went stale after a new impact assessment, and a cutoff that broke on negative scores
Brightway (bw2data): upgraded deepdiff past two security advisories without breaking saved project revisions
Brightway (stats_arrays): stopped loading scipy.stats at import, which makes importing bw2calc and bw2data about 0.3 s faster
bw_timex: made building the time-explicit matrices 3 to 4× faster, with identical matrices and scores
Brightway (bw2calc): #167, #168
Brightway (bw2data): #295
Brightway (stats_arrays): #43
bw_timex: #244
Activity Browser
kept parameter amounts editable, loaded scenario files with empty keys, and kept a Monte Carlo seed of 0
premise
fixed two bugs in how external scenarios apply efficiency changes, one of which scaled flows they were meant to leave alone
pymrio
made extension calculations about 4× faster on EXIOBASE-sized tables with the same results, fixed three small bugs, and got the development test job passing again
lca_algebraic
fixed truncated-normal and lognormal sampling, method lookup and a cache that went stale across time zones; sped up parameter expansion, and cut the Sobol analysis step from 3.13 s to 0.16 s in a 20-parameter benchmark when second-order indices are not needed
lca_algebraic: #106, #107, #108, #109, #110 merged into the dev branch
flodym
made lifetime extension about 9× faster, and stopped it overwriting the model's parameters
flodym: #198
Also merged
SALib (3 PRs); Boavizta API (1 PR); CodeMeta (1 PR); SchemaStore (2 PRs); pyOpenSci Python package guide (3 PRs); NLeSC Python template (3 PRs); latex-credits (2 PRs); reauth (1 PR); openLCA Python client (2 PRs); fastapi-mail (2 PRs); cspell-dicts (2 PRs); sentier_data_tools (1 PR)