From-Scratch Build · Research Web
A public home for a research group — its research lines, projects, people and publications, all kept current through an admin instead of frozen in static pages. Rebuilt from scratch to learn how a multi-section institutional site is modelled and served.
What it is
A research group has a lot to show: the themes it works on, the projects running under each, the people who do the work, the papers they publish, and the positions they're hiring for. This site gathers all of it into one structured, editable website.
I built it to learn how to model relationships, not just lists. A project belongs to a research line; a publication links to its authors; a job posting opens and closes. Capturing those connections in the data model is what makes the site feel like a coherent whole rather than a pile of pages.
The core idea I wanted to learn: an institutional site is a small relational world. Once the relationships between research lines, projects, people and publications are right, every page is just a different lens on the same connected data.
The stack
The point of this rebuild was the toolchain. Here is what each piece actually does in the system.
The Python framework underneath everything — routing, the ORM, server-side templating and a ready-made admin for the group to manage content.
ResearchLine, ResearchProject, Publication, TeamMember and JobPosition — linked so a project knows its theme and a paper knows its authors.
Section write-ups and project descriptions are authored in Markdown and rendered with a custom template filter into clean HTML.
Banners, team photos and publication thumbnails are uploaded through the admin and served from a managed media folder.
Shared data — site settings, navigation — is injected into every template so the layout stays consistent across pages.
The application and its database file are containerised, so the same site runs identically in development and on a server.
Architecture
The site is built from a handful of content areas, each backed by its own model and views.
An editable landing area with a headline, intro and animated banners that introduce the group.
The themes the group works on, each with its own write-up and the projects that sit under it.
Individual research projects, linked back to their theme, with descriptions, media and optional video.
Team members with roles and positions, presented as the group's public roster.
Papers with links to code and project pages, kept as a living, ordered list.
Job postings the group can open and close from the admin as hiring needs change.
How it runs
The site is meant to be run by the group, not by a developer. The workflow is:
docker compose up starts Django, applies migrations and serves every section.In my rebuild I spent most of the effort on the relationships between models — that's where a group site lives or dies.
Reflection