The website at simlab-vs.github.io showcases SIMLab's research projects and team. It is built from plain Markdown files — no web skills needed to keep it up to date.
- Add or update a project — edit a file in
data/projects/ - Add or update a team member — edit a file in
data/team/ - Change the site layout or style — edit
index.htmlandbuild.py
All content lives in the data/ directory as simple text files. If you can write an
email, you can edit this website.
data/projects/*.md ─┐
data/team/*.md ─┤──► build.py ──► index.html ──► GitHub Pages
index.html ─┘
build.py parses the Markdown files and injects the generated HTML into index.html.
GitHub Pages then serves index.html directly from the main branch.
Each file in data/projects/ describes one project. Create a new .md file or edit an
existing one. The format is a ## Title heading, optional key: value fields, and a
free-form description:
## Project Title
funding: Horizon # Horizon | SNSF | Innosuisse | HES-SO (or any string)
period: 2024–2027
partners: EPFL, WSL
website: https://example.com
github: https://github.com/simlab-vs/my-project
status: ongoing # ongoing | completed
One or more sentences describing the project. Wrap long lines freely —
the script joins them into a single paragraph.All fields are optional. Only the ## Title is required.
Funding badge colours
| Value | Badge colour |
|---|---|
| Horizon | Blue |
| SNSF | Green |
| Innosuisse | Amber |
| HES-SO | Purple |
| other | Grey |
Each file in data/team/ describes one person. Name files with a numeric prefix to
control the display order (e.g. 01-jane-doe.md):
## Full Name
role: Director
title: Prof. Dr.
affiliation: HES-SO
website: https://example.com
email: name@example.com # used for Gravatar avatar, not shown publicly
interests: Machine Learning, Control Systems
One or two sentences of bio.The email field drives the profile photo via Gravatar. If no
email is set, a placeholder avatar is shown.
Alumni — set role: Alumni to move someone out of the Team grid and into the
simple "Alumni" list at the bottom of the People section (just their name, linked to
website if set).
You don't need to build anything locally. Just edit the files, open a pull request, and
CI will rebuild index.html automatically.
Step-by-step:
- Edit or create files under
data/. - Commit and push your branch.
- Open a pull request — CI rebuilds
index.htmland commits it to your branch. - Merge once the preview looks good.
# Example: add yourself to the team
git checkout -b add-jane-doe
# … edit data/team/08-jane-doe.md …
git add data/team/08-jane-doe.md
git commit -m "feat(team): add Jane Doe"
git push origin add-jane-doe
# then open a pull request on GitHubRequires uv. No other dependencies.
# First time: create the virtual environment
uv sync
# Rebuild index.html in-place
uv run build.py
# Preview without touching index.html
uv run build.py --check- Create a
data/mysection/directory with.mdfiles using the same format. - Add
<!-- BEGIN:mysection -->/<!-- END:mysection -->markers inindex.html. - Add CSS for the new section directly in
index.html. - Add a
parse_mysection/render_mysection/build_mysection_htmlfunction trio inbuild.pyfollowing the existing pattern, and callinject(text, "mysection", …)inmain().