A shared visual space for projects by the médialab design team.
All projects live inside src/lib/projects/.
Each project gets its own folder, named after it:
src/lib/projects/PROJECT_NAME/
Collect all media you want to display in your project. Glean currently supports:
Images: PNG, JPG, JPEG, WEBP, GIF, AVIF, SVG
Videos: MP4, MOV
Documents: PDF
At least one image should be named thumb to display a thumbnail in the project's card.
The folder should follow a likely structure:
PROJECT_NAME/
├── thumb.jpg
├── image_1.jpg
├── image_2.jpg
├── demo_video.mp4
├── report.pdf
├── SUBFOLDER
└── ...pdf
Note
If in the folder there's a subfolder with images, it will create in the project page a mosaic. If there's a PDF in the folder, it will be displayed automatically with a PDF reader in the project page to navigate it.
You have two ways to do this.
- Go to
src/lib/projects/. - Click Add file and then Upload files
- Upload your folder
- Add a short commit message describing the project you added
- Commit the changes to
main
Note
You do not need to create/upload project.yaml or other files but your folder.
Tip
When Glean detects a new project folder, the automation creates it for you using scripts/bootstrap-project.ts.
- Clone the repository:
git clone https://github.com/medialab/glean.git
cd glean- Install Bun if you haven't got it:
curl -fsSL https://bun.sh/install | bash- Install the project deps and create a new project:
bun i && bun scripts/create-project.ts MYPROJECT "My Project"-
Add your media files inside the new project folder.
-
Preview the website locally:
bun run dev- Commit and push your changes:
git add .
git commit -m "add MYPROJECT project"
git push origin mainNote
Every push to main triggers Glean's automatic workflows.
For a new project, the system:
- Detects the new project folder.
- Creates
project.yamlif it does not exist. - Moves videos into
_videos/. - Moves PDFs into
_documents/. - Detects all project media.
- Adds the media to
media_captionsinsideproject.yaml. - Generates the dithered thumbnail used by the interface.
- Builds the website.
- Publishes the updated portfolio to GitHub Pages.
Project bootstrapping and media synchronisation are handled by sync-media.yml.
The website build and deployment are handled by deploy.yml.
You can follow running and completed workflows from the GitHub Actions page.
After the first automation has completed, open the generated project.yaml inside your project folder.
The project.yaml is the source of all the visible textual data of your project.
For example: EL2MP/project.yaml.
You can edit it by rewriting values, don't change parameters names or you'll encounter build errors:
title: 'My Project'
description: 'A short description of the project.'
link: 'https://example.com'
tag: MYPROJECT
year_begin: '2026'
year_end: '2027'
project_type: Research
team_people: Person One, Person TwoNote
Not all parameters are mandatory.
The tag parameter must be identical to the project folder name.
Glean stores media captions directly inside each project's project.yaml. Everything's automatically created based on the uploaded media files.
You can then fill them in, or leave them blank:
media_captions:
thumb.jpg: 'Project overview'
interface.jpg: 'First prototype of the interface'
workshop.jpg: 'Participatory workshop at the médialab'
_videos/demo.mp4: 'Demonstration of the final prototype'
_documents/report.pdf: 'Final research report'Note
When a media file is added or removed, the automation synchronizes this list.
To update an existing project, open it inside src/lib/projects/.
You can:
- Edit
project.yaml. - Upload new images.
- Upload videos.
- Upload PDFs.
- Replace the thumbnail.
- Edit media captions.
- Remove obsolete files.
Commit the changes to main.
Note
Glean will rebuild and redeploy automatically.
Glean is built with SvelteKit, Svelte 5, TypeScript, Tailwind CSS and Bun.
The available commands are defined in package.json.
| Command | What it does |
|---|---|
bun run dev |
Start the local development server |
bun run validate |
Validate every project and its metadata |
bun run bootstrap |
Create missing project.yaml files and organise project media |
bun run imgYmlCreator |
Synchronise media_captions with project media |
bun run dither |
Generate dithered thumbnails |
bun run dither:check |
Validate generated dithered thumbnails |
bun run dither:all |
Generate and validate all dithered thumbnails |
bun run build |
Run the complete production build |
bun run check |
Run Svelte type checking |
Project validation is implemented in scripts/validate-projects.ts.