← all builds

From-Scratch Build · Research Web

Research Group Website

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.

DjangoSQLiteMarkdown Media uploadsDocker

What it is

A group, in one site

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

Tools under the hood

The point of this rebuild was the toolchain. Here is what each piece actually does in the system.

framework

Django

The Python framework underneath everything — routing, the ORM, server-side templating and a ready-made admin for the group to manage content.

data model

Related models

ResearchLine, ResearchProject, Publication, TeamMember and JobPosition — linked so a project knows its theme and a paper knows its authors.

content

Markdown

Section write-ups and project descriptions are authored in Markdown and rendered with a custom template filter into clean HTML.

media

Image & banner uploads

Banners, team photos and publication thumbnails are uploaded through the admin and served from a managed media folder.

context

Context processors

Shared data — site settings, navigation — is injected into every template so the layout stays consistent across pages.

packaging

Docker Compose

The application and its database file are containerised, so the same site runs identically in development and on a server.

Architecture

The sections of the site

The site is built from a handful of content areas, each backed by its own model and views.

  1. Home live

    An editable landing area with a headline, intro and animated banners that introduce the group.

  2. Research lines live

    The themes the group works on, each with its own write-up and the projects that sit under it.

  3. Projects live

    Individual research projects, linked back to their theme, with descriptions, media and optional video.

  4. People live

    Team members with roles and positions, presented as the group's public roster.

  5. Publications live

    Papers with links to code and project pages, kept as a living, ordered list.

  6. Open positions live

    Job postings the group can open and close from the admin as hiring needs change.

How it runs

One container, many editors

The site is meant to be run by the group, not by a developer. The workflow is:

In my rebuild I spent most of the effort on the relationships between models — that's where a group site lives or dies.

Reflection

What rebuilding it taught me