Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,11 +87,17 @@ docs/ # Main content directory
├── sponsors/ # Sponsorship information
│ ├── index.md # Sponsors page
│ └── sponsor-us.md # Sponsorship opportunities
├── schedule/ # Conference schedule
│ └── index.md # Generated from data/schedule.yaml
├── faq.md # Frequently asked questions
├── assets/ # Static assets
│ ├── images/ # Images and logos
│ └── docs/ # Downloadable documents
└── stylesheets/ # Custom CSS
hooks/ # MkDocs build hooks
└── schedule.py # Auto-generates schedule during build
data/ # Source data files
└── schedule.yaml # Conference schedule data
overrides/ # Theme customizations
mkdocs.yml # Site configuration
pyproject.toml # Python project configuration
Expand All @@ -100,6 +106,14 @@ justfile # Task automation with just command runner
.python-version # Python version specification
```

### Editing the Schedule

The conference schedule is automatically generated from `data/schedule.yaml` during the build process. To update the schedule:

1. Edit `data/schedule.yaml` with your changes
2. Run `just serve` or `just build` - the schedule regenerates automatically via the `on_pre_build` hook in `hooks/schedule.py`
3. The generated markdown appears in `docs/schedule/index.md` (do not edit directly)

## Development Notes

- Python version is set to 3.8 minimum for broad compatibility (actual version in `.python-version` may be higher)
Expand Down
72 changes: 72 additions & 0 deletions data/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# Schedule Data Management

## Overview

The PyTexas 2026 conference schedule is managed using a **data-driven approach** to make updates easier and reduce the pain of editing complex markdown tables.

## How It Works

- **`schedule.yaml`** - The source of truth for all schedule data (this directory)
- **`hooks/schedule.py`** - MkDocs hook that auto-generates the schedule during build
- **`docs/schedule/index.md`** - The generated schedule page (DO NOT EDIT DIRECTLY)

### Workflow

1. **Edit the schedule**: Modify `schedule.yaml` with your changes
2. **Build/serve the site**: Run `just serve` or `just build`
3. **Schedule auto-regenerates**: The MkDocs `on_pre_build` hook generates the markdown automatically

## Editing the Schedule

### Adding a Talk

```yaml
saturday:
- time: "10:20 AM"
title: "Your Talk Title"
link: "talks.md#your-talk-anchor"
speaker: "Speaker Name"
```

### Adding a Break or Event

```yaml
saturday:
- time: "10:05 AM"
title: "15 Minute Break"
speaker: null
```

### Moving Time Slots

Simply change the time in the YAML - no need to reformat tables!

```yaml
# Before
- time: "10:20 AM"
title: "Some Talk"

# After
- time: "10:30 AM"
title: "Some Talk"
```

### Reordering Sessions

Just move the YAML blocks around in the desired order.

## Benefits

✅ **Easy to edit** - Change times without reformatting tables
✅ **Less error-prone** - YAML structure prevents markdown table formatting issues
✅ **Version control friendly** - Cleaner diffs showing actual changes
✅ **Consistent formatting** - Generator ensures uniform output
✅ **Automatic regeneration** - No manual script running needed

## Tips

- Keep the YAML file well-organized with consistent spacing
- Use `null` for speaker field when there's no speaker (breaks, lunch, etc.)
- The `link` field is optional - omit it for items without talk pages
- Time formats should be consistent within each day
- Schedule constraints and notes are documented in comments at the top of `schedule.yaml`
161 changes: 161 additions & 0 deletions data/schedule.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
# PyTexas 2026 Conference Schedule Data
# This file contains all the schedule information in a structured format.
# Run `python build_schedule.py` to generate the schedule/index.md file.
#
# SCHEDULE CONSTRAINTS & NOTES:
# - Saturday: 9:00 AM start, 6:00 PM networking event (hard stop) = 9 hours
# - Sponsor slots (Microsoft): 90 minutes each (Friday + Saturday)
# - Lunch: 100 minutes minimum (off-campus lunch with organizer-led groups downtown)
# - Preserving break space is a priority
#
# LIGHTNING TALKS:
# - Sunday has 40-minute lightning talk slot (4:10-4:50 PM)
# - Saturday is fully packed and cannot accommodate lightning talks with current constraints
# - Moving a Saturday talk to Sunday is *possible*, but pushes Sunday pretty late as most people cut out to travel home.
# - CONTINGENCY: If a talk drops before the event, use that 30-minute slot for Saturday
# lightning talks (6 talks) rather than backfilling with a replacement speaker

friday:
- time: "09:00am - 12:00pm"
title: "Import is Important: The Secret Life of Python Modules and Packages"
link: "tutorials.md#import-is-important-the-secret-life-of-python-modules-and-packages"
speaker: "Heather Crawford"
- time: "12:00pm - 1:30pm"
title: "Lunch"
speaker: null
- time: "01:30pm - 04:30pm"
title: "Becoming a Better Python Developer with AI"
link: "tutorials.md#becoming-a-better-python-developer-with-ai"
speaker: "Bernát Gábor"
- time: "04:30pm - 06:00pm"
title: "SPONSOR TUTORIAL To Be Determined"
speaker: "Microsoft"

saturday:
- time: "08:00 AM"
title: "Registration Opens & Breakfast"
speaker: null
- time: "09:00 AM"
title: "Day 1 Opening Remarks"
speaker: null
- time: "09:20 AM"
title: "Keynote"
link: "keynotes.md#dawn-wages"
speaker: "Dawn Wages"
- time: "10:05 AM"
title: "15 Minute Break"
speaker: null
- time: "10:20 AM"
title: "Python as Your DSL"
link: "talks.md#python-as-your-dsl"
speaker: "Moshe Zadka"
- time: "10:50 AM"
title: "I Built an AI Running Coach (That Actually Remembers My Training)"
link: "talks.md#i-built-an-ai-running-coach-that-actually-remembers-my-training"
speaker: "Adam Gordon Bell"
- time: "11:20 AM"
title: "10 Minute Break"
speaker: null
- time: "11:30 AM"
title: "Using MCP to Build Safe, Auditable AI Systems in Python"
link: "talks.md#using-mcp-to-build-safe-auditable-ai-systems-in-python"
speaker: "Maria Silvia Mielniczuk"
- time: "12:00 PM"
title: "Mastered development but still stuck? The hidden power of soft skills in your codebase."
link: "talks.md#mastered-development-but-still-stuck-the-hidden-power-of-soft-skills-in-your-codebase"
speaker: "Sumaiya Nalukwago"
- time: "12:30 PM"
title: "Lunch"
speaker: null
- time: "02:15 PM"
title: "Why Installing Python Packages Is Still a Security Risk"
link: "talks.md#why-installing-python-packages-is-still-a-security-risk"
speaker: "Christopher Ariza"
- time: "02:45 PM"
title: "Behind the Magic: Unlocking Python's Descriptor Protocol"
link: "talks.md#behind-the-magic-unlocking-pythons-descriptor-protocol"
speaker: "Scott Irwin"
- time: "03:15 PM"
title: "Data Engineer's survival guide: writing pipelines that don't break at 3 AM"
link: "talks.md#data-engineers-survival-guide-writing-pipelines-that-dont-break-at-3-am"
speaker: "Indrasena Manga"
- time: "03:45 PM"
title: "15-Minute Break"
speaker: null
- time: "04:00 PM"
title: "Failed Experiments in Vibe Coding"
link: "talks.md#failed-experiments-in-vibe-coding"
speaker: "Al Sweigart"
- time: "04:30 PM"
title: "**SPONSOR TALK** To Be Determined"
speaker: "Microsoft"
- time: "06:00 PM"
title: "Lightning Talks"
speaker: null
- time: "06:30 PM"
title: "Networking Event Starts"
speaker: null
- time: "09:00 PM"
title: "Networking Event Ends"
speaker: null

sunday:
- time: "08:00 AM"
title: "Registration Opens & Breakfast"
speaker: null
- time: "09:00 AM"
title: "Day 2 Opening Remarks"
speaker: null
- time: "09:20 AM"
title: "Keynote"
link: "keynotes.md#hynek-schlawack"
speaker: "Hynek Schlawack"
- time: "10:05 AM"
title: "15 Minute Break"
speaker: null
- time: "10:20 AM"
title: "The Bakery: How PEP810 sped up my bread operations business"
link: "talks.md#the-bakery-how-pep810-sped-up-my-bread-operations-business"
speaker: "Jacob Coffee"
- time: "10:50 AM"
title: "Python in the Browser: Building Interactive Documentation with MkDocs & JupyterLite"
link: "talks.md#python-in-the-browser-building-interactive-documentation-with-mkdocs--jupyterlite"
speaker: "Kassandra Keeton, the Prosperous Heart"
- time: "11:20 AM"
title: "10 Minute Break"
speaker: null
- time: "11:30 AM"
title: "Are API Tests Overrated? Let's Mitigate Risks in Smarter Ways"
link: "talks.md#are-api-tests-overrated-lets-mitigate-risks-in-smarter-ways"
speaker: "Pandy Knight"
- time: "12:00 PM"
title: "**SPONSOR TALK** To Be Determined"
speaker: "Temporal"
- time: "12:20 PM"
title: "Lunch"
speaker: null
- time: "02:00 PM"
title: "Introducing Meow'py: Observability for the Internet of Living Things"
link: "talks.md#introducing-meowpy-observability-for-the-internet-of-living-things"
speaker: "Sophia Solomon"
- time: "02:30 PM"
title: "Tying Up Loose Threads: Making your Project No-GIL Ready"
link: "talks.md#tying-up-loose-threads-making-your-project-no-gil-ready"
speaker: "Charlie Lin"
- time: "03:00 PM"
title: "10 Minute Break"
spaker: null
- time: "03:10 PM"
title: "Upgrading Python CLIs: From Scripts to Interactive Tools"
link: "talks.md#upgrading-python-clis-from-scripts-to-interactive-tools"
speaker: "Avik Basu"
- time: "03:40 PM"
title: "Lint Fast, Type Hard: Elevate your code quality in Python with modern, ultra-fast tooling"
link: "talks.md#lint-fast-type-hard-elevate-your-code-quality-in-python-with-modern-ultra-fast-tooling"
speaker: "Miguel Vargas"
- time: "04:10 PM"
title: "Lightning Talks"
speaker: null
- time: "04:50 PM"
title: "Closing Remarks"
speaker: null
52 changes: 49 additions & 3 deletions docs/schedule/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,53 @@ description: A full schedule grid for the event

| Time | Tutorial | Instructor |
| :---------------- | :-------------------------------------------------------------------------------: | :----------: |
| 09:00am - 12:00pm | [Import is Important: The Secret Life of Python Modules and Packages](tutorials.md#import-is-important-the-secret-life-of-python-modules-and-packages) | Heather Crawford |
| 12:00pm - 1:30pm | Lunch |
| 09:00am - 12:00pm | [Import is Important: The Secret Life of Python Modules and Packages](tutorials.md#import-is-important-the-secret-life-of-python-modules-and-packages) | Heather Crawford |
| 12:00pm - 1:30pm | Lunch | |
| 01:30pm - 04:30pm | [Becoming a Better Python Developer with AI](tutorials.md#becoming-a-better-python-developer-with-ai) | Bernát Gábor |
| 04:30pm - 06:00pm | [**SPONSOR TUTORIAL** To Be Determined](tutorials.md#sponsor-tutorial-to-be-determined) | Microsoft |
| 04:30pm - 06:00pm | SPONSOR TUTORIAL To Be Determined | Microsoft |

## Saturday

| Time {: ^ .table } | Saturday |
| :----------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| 08:00 AM | Registration Opens & Breakfast |
| 09:00 AM | Day 1 Opening Remarks |
| 09:20&nbsp;AM | [Keynote](keynotes.md#dawn-wages)<br/>Dawn Wages |
| 10:05&nbsp;AM | 15 Minute Break |
| 10:20&nbsp;AM | [Python as Your DSL](talks.md#python-as-your-dsl)<br/>Moshe Zadka |
| 10:50&nbsp;AM | [I Built an AI Running Coach (That Actually Remembers My Training)](talks.md#i-built-an-ai-running-coach-that-actually-remembers-my-training)<br/>Adam Gordon Bell |
| 11:20&nbsp;AM | 10 Minute Break |
| 11:30&nbsp;AM | [Using MCP to Build Safe, Auditable AI Systems in Python](talks.md#using-mcp-to-build-safe-auditable-ai-systems-in-python)<br/>Maria Silvia Mielniczuk |
| 12:00&nbsp;PM | [Mastered development but still stuck? The hidden power of soft skills in your codebase.](talks.md#mastered-development-but-still-stuck-the-hidden-power-of-soft-skills-in-your-codebase)<br/>Sumaiya Nalukwago |
| 12:30&nbsp;PM | Lunch |
| 02:15&nbsp;PM | [Why Installing Python Packages Is Still a Security Risk](talks.md#why-installing-python-packages-is-still-a-security-risk)<br/>Christopher Ariza |
| 02:45&nbsp;PM | [Behind the Magic: Unlocking Python's Descriptor Protocol](talks.md#behind-the-magic-unlocking-pythons-descriptor-protocol)<br/>Scott Irwin |
| 03:15&nbsp;PM | [Data Engineer's survival guide: writing pipelines that don't break at 3 AM](talks.md#data-engineers-survival-guide-writing-pipelines-that-dont-break-at-3-am)<br/>Indrasena Manga |
| 03:45&nbsp;PM | 15-Minute Break |
| 04:00&nbsp;PM | [Failed Experiments in Vibe Coding](talks.md#failed-experiments-in-vibe-coding)<br/>Al Sweigart |
| 04:30&nbsp;PM | **SPONSOR TALK** To Be Determined<br/>Microsoft |
| 06:00&nbsp;PM | Lightning Talks |
| 06:30&nbsp;PM | Networking Event Starts |
| 09:00&nbsp;PM | Networking Event Ends |

## Sunday

| Time {: ^ .table } | Sunday |
| :----------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| 08:00&nbsp;AM | Registration Opens & Breakfast |
| 09:00&nbsp;AM | Day 2 Opening Remarks |
| 09:20&nbsp;AM | [Keynote](keynotes.md#hynek-schlawack)<br/>Hynek Schlawack |
| 10:05&nbsp;AM | 15 Minute Break |
| 10:20&nbsp;AM | [The Bakery: How PEP810 sped up my bread operations business](talks.md#the-bakery-how-pep810-sped-up-my-bread-operations-business)<br/>Jacob Coffee |
| 10:50&nbsp;AM | [Python in the Browser: Building Interactive Documentation with MkDocs & JupyterLite](talks.md#python-in-the-browser-building-interactive-documentation-with-mkdocs--jupyterlite)<br/>Kassandra Keeton, the Prosperous Heart |
| 11:20&nbsp;AM | 10 Minute Break |
| 11:30&nbsp;AM | [Are API Tests Overrated? Let's Mitigate Risks in Smarter Ways](talks.md#are-api-tests-overrated-lets-mitigate-risks-in-smarter-ways)<br/>Pandy Knight |
| 12:00&nbsp;PM | **SPONSOR TALK** To Be Determined<br/>Temporal |
| 12:20&nbsp;PM | Lunch |
| 02:00&nbsp;PM | [Introducing Meow'py: Observability for the Internet of Living Things](talks.md#introducing-meowpy-observability-for-the-internet-of-living-things)<br/>Sophia Solomon |
| 02:30&nbsp;PM | [Tying Up Loose Threads: Making your Project No-GIL Ready](talks.md#tying-up-loose-threads-making-your-project-no-gil-ready)<br/>Charlie Lin |
| 03:00&nbsp;PM | 10 Minute Break |
| 03:10&nbsp;PM | [Upgrading Python CLIs: From Scripts to Interactive Tools](talks.md#upgrading-python-clis-from-scripts-to-interactive-tools)<br/>Avik Basu |
| 03:40&nbsp;PM | [Lint Fast, Type Hard: Elevate your code quality in Python with modern, ultra-fast tooling](talks.md#lint-fast-type-hard-elevate-your-code-quality-in-python-with-modern-ultra-fast-tooling)<br/>Miguel Vargas |
| 04:10&nbsp;PM | Lightning Talks |
| 04:50&nbsp;PM | Closing Remarks |
Loading