varmara.github.io

Personal website for Marina Varfolomeeva, built with Quarto. Deployed to GitHub Pages from the docs/ output directory.

Build & preview

quarto preview          # live preview with hot reload
quarto render           # full build to docs/

Python posts use the local .venv/. Activate it before rendering if needed:

source .venv/bin/activate
quarto render

execute: freeze: auto is set globally — code chunks only re-execute when source changes. Frozen outputs live in _freeze/.

Project structure

_quarto.yml             # site config: output-dir, navbar, theme, freeze
_brand.yml              # color palette (teal) and typography (Inter)
assets/styles.css       # custom CSS overrides
index.qmd               # About me / homepage (solana template)
publications.qmd        # publications listing from data/
teaching.qmd            # teaching listing from data/
blog/
  index.qmd             # blog listing page (sorted by date desc, with categories)
  <date>-<slug>/
    index.qmd           # one directory per post
data/
  publications.yml      # publication entries (id, title, author, year, journal, doi, pdf)
  courses_grad.yml      # graduate courses
  courses_undergrad.yml # undergraduate courses
_templates/
  publications.ejs      # EJS template for publications listing
  courses.ejs           # EJS template for courses listing
_drafts/                # drafts not yet in blog/ (excluded from render via .quartoignore)
_meta/                  # project documentation: DEPLOY.md, STANDALONE_POSTS.md (gitignored)
docs/                   # rendered output (gitignored, served by GitHub Pages)
_freeze/                # frozen code execution outputs (committed to git)

Adding a blog post

Use the scaffold script to create a new post:

# draft inside the site (no publish date needed yet)
bash _meta/new-post.sh python my-analysis --draft
bash _meta/new-post.sh r     my-analysis --draft

# standalone repo in ~/projects/<slug>/ (default) or a custom directory
bash _meta/new-post.sh python my-analysis
bash _meta/new-post.sh r     my-analysis --dir ~/research

For standalone posts, see _meta/STANDALONE_POSTS.md for the migration workflow.

To add manually, create blog/<YYYY-MM-DD>-<slug>/index.qmd. Required frontmatter:

---
title: "Post Title"
date: "YYYY-MM-DD"
author: "Marina Varfolomeeva"
categories: [Category1, Category2]
description: "One-sentence description shown in the listing."
---

Add draft: true to hide from the listing while writing (draft-mode: unlinked means it still renders).

R posts

Use {r} code chunks. No special setup needed beyond a working R installation.

Python posts

Use {python} code chunks. Python packages are in .venv/ and listed in requirements.txt. Add new dependencies there and install with pip install -r requirements.txt inside the venv.

Adding a publication

Append an entry to data/publications.yml:

- id: lastname2025keyword
  title: "Full title"
  author: "Last, F., Coauthor, G. & Varfolomeeva, M."
  year: 2025
  journal: "Journal Name"
  volume: "10"
  number: "2"
  pages: "100-110"
  doi: "doi.org/10.xxxx/xxxxx"   # omit https://
  pdf: ""                         # relative path or leave empty

The EJS template renders entries in reverse chronological order and shows DOI/PDF links only when non-empty.

Styling

  • Theme: lightly (Bootstrap) with _brand.yml overrides
  • Primary color: teal #458d8f
  • Font: Inter (Google Fonts)
  • Profile image: assets/profile.jpg (oval crop via CSS, 200×250px)
  • Author name hidden in blog listing via .list .listing-author { display: none }