The talks generator converts a tab-separated or comma-separated spreadsheet of your presentations into individualDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/academicpages/academicpages.github.io/llms.txt
Use this file to discover all available pages before exploring further.
.md files in the _talks/ directory. Each file contains Jekyll front matter that Academic Pages uses to render your Talks listing, individual talk pages, and the talks section of your CV. After generating talk files you can optionally run a second tool — talkmap.py — to produce an interactive Leaflet cluster map of every location where you have presented.
Input file format
The generator reads a.tsv or .csv file. The file must begin with a header row. The template ships with markdown_generator/talks.tsv as a starting point.
Column reference
| Column | Required | Notes |
|---|---|---|
title | Yes | Title of the talk or tutorial |
type | No | Presentation type, e.g. Talk, Tutorial, Conference proceedings talk. Defaults to Talk if the value is 3 characters or fewer |
url_slug | Yes | Slug used in the filename and permalink, e.g. talk-1 |
venue | No | Name of the venue, department, or conference |
date | Yes | Date in YYYY-MM-DD format |
location | No | Human-readable location string, e.g. San Francisco, California. Used by the talkmap geocoder |
talk_url | No | URL with more information about the talk; generates a “More information here” link in the page body |
description | No | Freeform description or abstract for the talk |
title, url_slug, and date are the only required fields. Rows missing any of these three are skipped with a warning printed to stderr.Example TSV content
The template’stalks.tsv contains four sample rows. Here is an excerpt showing two of them (columns separated by tabs):
Running the generator
Pass the TSV or CSV filename as the first argument. An optional second argument sets the output directory (defaults to
../_talks/):The script detects the delimiter automatically from the file extension (
.tsv/.txt → tab, anything else → comma).The generator creates one file per row in
../_talks/, named YYYY-MM-DD-[url_slug].md. Check the output:Generated output
For the first sample row intalks.tsv, the generator produces _talks/2012-03-01-talk-1.md:
talk_url, the body also gains a link:
collection: talksis always set.typedefaults to"Talk"when the column value is 3 characters or fewer.permalinkis constructed as/talks/YYYY-MM-DD-[url_slug].venueandlocationfields are only written when the column values are non-empty.- Ampersands, single quotes, and double quotes in
descriptionare HTML-escaped in the page body.
Jupyter notebook alternative
talks.ipynb provides the same generation logic in an interactive Jupyter notebook with additional inline documentation.
talks.tsv by default and writes to ../_talks/.
Generating the talkmap
After your_talks/ directory is populated, you can generate an interactive Leaflet cluster map of every location where you have given a talk. This step uses a separate script at the repository root.
talkmap.py depends on frontmatter, geopy, and getorg, which are not part of the Python standard library.The script reads every
.md file in _talks/, extracts the location front matter field, geocodes each location using the Nominatim service, and writes the results to talkmap/map.html and talkmap/org-locations.js.With this option enabled, the Talks page renders: “See a map of all the places I’ve given a talk!” linking to
/talkmap.html.Automated talkmap with GitHub Actions
The repository includes.github/workflows/scrape_talks.yml, which automatically regenerates the talkmap whenever files in talks/, _talks/, or talkmap.ipynb are pushed to the repository.
talkmap.ipynb (not talkmap.py) via jupyter nbconvert and commits the updated talkmap/ output back to the repository. The contents: write permission is required for the commit step.