Website Maintenance Guide
Personal academic website built with Quarto.
Live URL: https://lasaibarrenada.github.io/
Source repo: https://github.com/LasaiBarrenada/LasaiBarrenada.github.io/
Quick Reference
| What do you want to update? | File to edit |
|---|---|
| Bio text / photo | index.qmd |
| Add a new project | projects/projects.xlsx |
| Add a conference talk | speaking/conferences.xlsx |
| Add a CV entry (job, education, award…) | cv/cv.qmd |
| Add a publication to the CV PDF | cv/peer_bib.bib |
| Replace the CV PDF | cv/cv.pdf |
| Refresh publications network (new paper) | Delete _freeze/Publications/ then render |
| Replace navbar logo | img/lb_logo_opt1.svg |
| Replace browser tab icon (favicon) | img/favicon.svg |
| Change navbar links or social icons | _quarto.yml |
| Change global font / colours | html/styles.scss |
| Change landing-page styles | html/landing_page_styles.css |
| Change page footer text | _quarto.yml → page-footer |
| Update “last updated” date | _variables.yml |
| Edit the license page | license/index.qmd |
1. How to Rebuild and Deploy
Render the site locally (generates _site/):
quarto renderPreview locally (hot-reload):
quarto previewPublish to GitHub Pages:
quarto publish gh-pagesThis pushes the rendered _site/ to the gh-pages branch automatically.
2. The Freeze Mechanism
execute: freeze: true is set globally in _quarto.yml. This means:
- R code chunks are only executed once. Results are cached in
_freeze/. - On subsequent renders Quarto uses the cached output — it does not re-run R.
- This keeps the build fast and reproducible without needing R dependencies installed on the server.
Exceptions: The Projects and Speaking pages have freeze: false set in their YAML header, so they always re-execute when rendered. This means you can just edit the Excel files and render — no need to delete _freeze/ folders for those pages.
When you MUST delete the freeze cache (to force re-execution on other pages):
| Situation | Cache folder to delete |
|---|---|
| New paper on Google Scholar | _freeze/Publications/ |
| Any other R-code change | The folder matching the changed .qmd |
After deleting, run quarto render and the R code will re-execute and create a new cache.
3. Landing Page — index.qmd
Update bio text
The bio lives inside the {=html} block. Edit the three <p> paragraphs directly:
<p>I'm a final-year PhD student at KU Leuven ...</p>Replace profile photo
- Save the new photo as
img/lasai_headshot.png(overwrite the existing file). - Recommended: square crop, at least 600×600 px.
- No code changes needed — the page references this filename directly.
4. Projects Page — projects/projects-page.qmd
The page is a vertical HTML timeline generated by an R chunk (tl-projects) that reads projects/projects.xlsx. This works the same way as the speaking page — the R code builds the HTML cards from the spreadsheet data.
Because the R output is inserted into Markdown before Pandoc processes it, no line of generated HTML may start with 4+ spaces (same constraint as the speaking page). Keep all sprintf() / paste0() templates at ≤ 3-space indentation.
Add a new project
Open projects/projects.xlsx and add a new row. The columns are:
| Column | Description | Example |
|---|---|---|
Title |
Paper/project title | Clustered Flexible Calibration… |
Year |
Four-digit year | 2026 |
Month |
Numeric month (used for sorting) | 3 |
Venue |
Journal name or “arXiv preprint” | BMJ Open |
Link_1_name |
Label for the first link | Paper |
Link_1 |
URL for the first link | https://… |
Link_2_name |
Label for the second link | Code |
Link_2 |
URL for the second link | https://… |
Link_3_name |
Label for an optional third link (leave blank if none) | Package |
Link_3 |
URL for the optional third link | https://… |
Summary |
2–3 sentence plain-language summary | Two or three sentences… |
If Link_1 is left blank, the project is displayed as Upcoming — grey hollow dot, grey card, and an “Upcoming” badge. Once published, fill in the links and the project switches to the normal blue style.
Freeze is disabled on this page, so just edit the Excel and re-render — no need to delete cache folders.
5. Speaking Page — speaking/speaking-page.qmd
The page has two sections, both driven by R code that reads conferences.xlsx:
- Timeline — an R chunk (
tl-speaking) reads the Excel, builds HTML cards, and outputs them viacat()withresults='asis'. - Map — an R chunk (
map-data) geocodes conference cities and injects the coordinates as JSON for the D3 map.
Both the projects and speaking timelines are generated by R. Because the R output is inserted into Markdown before Pandoc processes it, no line of generated HTML may start with 4+ spaces — Pandoc would treat it as a code block and escape the tags. Keep all sprintf() / paste0() templates at ≤ 3-space indentation.
Add a new talk or poster
Open speaking/conferences.xlsx and add a new row. The columns are:
| Column | Description | Example |
|---|---|---|
Conference |
Full conference name | International Society for Clinical Biostatistics |
Code_Name |
Short acronym shown on the timeline | ISCB |
Year |
Four-digit year | 2026 |
Month |
Numeric month (used for sorting) | 7 |
Location |
City name (used for geocoding the map) | Geneva |
Title |
Full talk/poster title | Multicenter calibration… |
Type |
Oral or Poster (leave blank for upcoming) |
Oral |
Link_1_name |
Label for the first link button | Slides |
Link_1 |
URL for the first link | https://… |
Link_2_name |
Label for an optional second link (leave blank if none) | Paper |
Link_2 |
URL for the optional second link | https://… |
Freeze is disabled on this page, so just edit the Excel and re-render — no need to delete cache folders. Note that the map geocoding will re-run each time, which requires an internet connection.
6. Publications Page — Publications/publications-page.qmd
The page pulls data live from Google Scholar (user ID uPOL3NkAAAAJ) using the scholar R package. The co-authorship network is built automatically from your publication list.
When a new paper appears on Google Scholar
- Delete
_freeze/Publications/. - Run
quarto render. - The R code will re-fetch publications, re-run the deduplication pipeline, and rebuild the network.
Publication deduplication (preprint + journal)
The pipeline also detects preprint/working-paper duplicates by comparing titles with Jaccard similarity. If a preprint you have on Google Scholar gets published and the two entries persist simultaneously, the preprint will be automatically dropped when Jaccard similarity ≥ 0.28 with the published version. No manual action needed.
7. CV
The CV exists in two forms:
| File | Purpose |
|---|---|
cv/cv-page.qmd |
HTML page shown on the website — renders the CV content directly with styled sections, a table of contents, and a “Download PDF” button at the top |
cv/cv.qmd |
PDF source using quarto-cv-pdf format — generates cv.pdf for download |
Both files should be kept in sync when you add new entries.
Add a new entry (job, talk, award, etc.)
Update both files:
cv-page.qmd— Add an entry using the Quarto div pattern:
:::: {.cv-entry}
::: {.cv-entry-title}
Institution Name
:::
::: {.cv-entry-date}
MM/YYYY – MM/YYYY
:::
::::
::: {.cv-entry-detail}
Role description, City
:::cv/cv.qmd— Add the corresponding entry using LaTeX\hfillfor dates:
**Institution Name**
Role description (City) \hfill MM/YYYY–MM/YYYYThen re-render cv/cv.qmd to regenerate the PDF.
Add a publication to the CV
Publications on the HTML page are rendered automatically from cv/peer_bib.bib using Quarto’s bibliography support (nocite: '@*'). Add the BibTeX entry to the bib file and it will appear on both the HTML page and in the PDF.
BibTeX entry format example:
@article{barrenada2025example,
author = {Barreñada, Lasai and Van Calster, Ben},
title = {Title of the paper},
journal = {Journal Name},
year = {2025},
volume = {10},
pages = {123--130},
doi = {10.xxxx/xxxxx}
}Replace the CV PDF only
Overwrite cv/cv.pdf with the new file. The HTML page links to this file via the download button.
Technical notes
cv-page.qmdusesengine: knitr(needed for the inline R expressionSys.Date()). Without it, Quarto falls back to Jupyter/Python and fails.cv-page.qmdhasfreeze: truesince publications from the bib file don’t change often. Delete_freeze/cv/cv-page/when you add a new publication to force re-rendering.
8. Site-wide Settings — _quarto.yml
Change your name or description (appears in browser tab / SEO)
title-meta: "Your Name"
description-meta: "Your description"9. Global Styles
| File | Controls |
|---|---|
html/styles.scss |
Global font (Inter for body and headings), link colours, spacing — applied to all pages |
html/landing_page_styles.css |
Hero section layout on the landing page |
html/seo.html |
Meta tags injected into every page <head> |
10. Images and Branding
| File | Purpose |
|---|---|
img/lasai_headshot.png |
Profile photo on the landing page |
img/lb_logo_opt1.svg |
Navbar logo — “LB” initials with R prompt > and sigmoid curve. Referenced in _quarto.yml → navbar: logo |
img/favicon.svg |
Browser tab icon — blue rounded square with “LB”. Referenced in _quarto.yml → favicon |
img/website_thumbnail.png |
Social preview image (Twitter/Open Graph) |
projects/*.png |
Project thumbnail images referenced in the projects page |
Replace the favicon
Overwrite img/favicon.svg (or create a new file and update the favicon: path in _quarto.yml). Keep it simple — favicons display at 16–32px.
11. License Page — license/index.qmd
The license page (linked in the footer) contains:
- An MIT License covering the website source code.
- A copyright notice for written content, publications, talks, and images.
- An acknowledgement of the original template by Marvin Schmitt.
Edit license/index.qmd directly. No R code, no freeze cache.
12. Variables File — _variables.yml
Small global variables used across the site (e.g. the “last updated” date in the footer). Edit directly:
last_updated: "February 2026"