Building a Personal Website with Quarto
For many years I maintained neglected a Hugo-based personal page using Academic framework (which is now became HugoBlox). It looked pretty-ish, but it was too complex to maintain and the framework was updated too often. It took some discipline to keep publication list up to date, and the only reason I kept the site alive was the list of courses I taught. But I never got around to writing blog posts, and the site felt more like a static CV than a dynamic hub for my work. Then I changed jobs and moved to a new country and stopped maintaining the site at all.
This time I wanted something simpler, so I rebuilt the site from scratch using Quarto. The main reason for this choice is that Quarto handles both R and Python natively — no plugins, no workarounds.
Initial setup
Creating a new Quarto website project:
This generates a minimal _quarto.yml and index.qmd. I configured the output directory, navigation, theme, and execution settings:
_quarto.yml
Live preview while editing:
Project structure
Top-level pages (index.qmd, publications.qmd, teaching.qmd) live at the root; blog posts each get their own directory under blog/:
The publications and teaching pages are driven by YAML data files rendered through EJS templates, which keeps the content separate from the layout.
Blog with R and Python
Blog posts are plain .qmd files with a short YAML header:
Quarto runs R chunks via knitr and Python chunks via Jupyter. The key setting that makes this practical is freeze: auto in _quarto.yml — code is only re-executed when the source file changes, so a Python post doesn’t re-run every time I touch a page written in R.
Maybe I will have to rethink this approach if I actually start writing more, but for now it works.
Deployment
The site is deployed to GitHub Pages using quarto publish gh-pages, which renders the project and force-pushes the output to a gh-pages branch. Source code lives in a separate private repository, so the public varmara/varmara.github.io repo contains only rendered HTML.
Setting up the remotes:
Backing up source and publishing:
In the public repository settings: Pages → branch gh-pages, folder /.