Skip to content
Open
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
4 changes: 4 additions & 0 deletions .ai-sessions/lessons.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

## Recent
<!-- 10 most recent lessons, newest first -->
- Sponsor contract acknowledgments must stay within the IRS qualified sponsorship clause in Exhibit A: no call to action, endorsement, or price/value language; the website's sponsor benefits must match the contract (2026-10-05)
- meetup.com returns HTTP 200 and a generic page title for nonexistent group URLs; confirm group URLs with Mason or the Meetup Pro page data instead of curl status codes (2026-09-29)
- mkdocs-redirects generates redirect pages without a stub source file; deleting a page and adding it to `redirect_maps` is enough (2026-09-29)
- The Meetup Pro network page at meetup.com/pro/pytexas only shows active groups; inactive but still-supported groups like Katy Python Coders won't appear (2026-09-29)
Expand All @@ -14,3 +15,6 @@
## Documentation
- The Meetup Pro network page at meetup.com/pro/pytexas only shows active groups; inactive but still-supported groups like Katy Python Coders won't appear (2026-09-29)
- Board minutes and officer elections live in the PyTexas shared Drive as "YYYY-MM-DD Annual Meeting" docs; search there before asking Mason for officer terms (2026-09-29)

## Sponsorship
- Sponsor contract acknowledgments must stay within the IRS qualified sponsorship clause in Exhibit A: no call to action, endorsement, or price/value language; the website's sponsor benefits must match the contract (2026-10-05)
47 changes: 47 additions & 0 deletions .ai-sessions/session-20261005-2158-meetup-contract-sync.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# Session Summary: Meetup Sponsorship Contract and Site Sync

**Date**: 2026-10-05
**Duration**: ~1 hour across several days
**Conversation Turns**: 8
**Estimated Cost**: ~$4 (Opus, mostly cached context)
**Model**: Opus 5.5 (claude-opus-5-5)

## Key Actions

- Drafted a Meetup Sponsorship Agreement template from the 2026 conference sponsor agreements in the Foundation Drive (blank Networking Event template plus the Black Python Devs Foundation Level agreement).
- Moved the template to the private `pytexas/contract-assembler` repo after Mason chose not to keep contracts in this public repo.
- Synced `docs/sponsorship/meetup.md` with the contract: removed the 5% conference sponsorship discount, replaced "Call to Action" with "Link to Your Website", and noted the talk must be given during the sponsorship term.
- Updated CLAUDE.md with `just` commands, the redirect retirement pattern, a yearly stale-content checklist, and a pointer to `.ai-sessions/`.

## Prompt Inventory

| Prompt/Command | Action Taken | Outcome |
|---|---|---|
| Pull a 2026 contract and adapt it for meetup sponsorship | Read two 2026 agreements from Drive, drafted Markdown template | Draft with Jinja placeholders and CONFIRM notes |
| Remove the 5% conference discount | Edited Exhibit A | Discount removed from contract |
| Work through contract questions | Two AskUserQuestion rounds | All eight decisions applied |
| PyTexas/contract-assembler is the private repo | Moved template to that repo on a feature branch | Website repo no longer holds contracts |
| Do both | Commit site changes to PR #38, build renderer | This summary |

## Efficiency Insights

**What went well:**
- Reading a blank template alongside a signed non-conference agreement gave both the current boilerplate and a precedent for Foundation-level benefits.

**What could improve:**
- Asked where to store templates only after drafting into the public repo; ask about storage location before writing contract files.

**Course corrections:**
- Template moved from `contracts/` in this public repo to the private contract-assembler repo.

## Process Improvements

- Before adding a benefit to a sponsor contract, check it against the IRS qualified sponsorship acknowledgment clause in Exhibit A.

## Observations

- The website's sponsor benefits and the contract drifted apart (call to action, conference discount); the contract is now the source of truth and the site follows it.

## Suggested Skills for Next Session

- `python:python`: the contract-assembler renderer is a Python CLI.
46 changes: 29 additions & 17 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,30 +12,27 @@ The project uses `uv` as the Python package manager. The repository includes a `

### Commands

```bash
# Install dependencies using uv
uv sync

# Run the development server (port 8000, hot-reload enabled)
uv run mkdocs serve

# Build the site (outputs to site/ directory)
uv run mkdocs build
A `justfile` wraps the common commands:

# Deploy to GitHub Pages (typically done via CI)
uv run mkdocs gh-deploy --force

# Check for broken links (runs automatically in CI)
# Uses lychee tool configured in .github/workflows/link-check.yml
```bash
just install # uv sync
just serve # uv run mkdocs serve (port 8000, hot reload)
just build # uv run mkdocs build (outputs to site/)
just validate # uv run mkdocs build --strict; run this before committing
just link-check # build, then lychee --cache over site/**/*.html
just deploy # mkdocs gh-deploy --force (CI does this on push to main)
```

`just link-check` needs `lychee` installed locally. URLs that fail for reasons outside our control go in `.lycheeignore`.

## Architecture

### Content Structure

The site content is organized in the `docs/` directory:
- **Main pages**: Located directly in `docs/` (index.md, conference.md, meetup-info.md, privacy.md)
- **Foundation pages**: In `docs/foundation/` - governance documents, meeting minutes, sponsorship info
- **Stub pages**: `docs/20XX.md`, `discord.md`, `links.md`, `newsletter.md`, `friends.md` are placeholders or redirect targets; most are overridden by `redirect_maps` in `mkdocs.yml`
- **Foundation pages**: In `docs/foundation/` - about, officers (`who.md`), bylaws (`governance.md`), annual meeting minutes, code of conduct, contact
- **Blog**: In `docs/blog/` with posts in `docs/blog/posts/`
- **Sponsorship tiers**: In `docs/sponsorship/` - different sponsorship options (friends, meetup, conference, charitable)
- **Assets**: Images and static files in `docs/assets/`
Expand Down Expand Up @@ -64,8 +61,23 @@ A separate link-check workflow validates all links on push, pull request, or man
## Key Features

- **Blog plugin**: Posts are written in Markdown with YAML frontmatter. New posts should be added to `docs/blog/posts/`
- **Redirects**: Many short URLs redirect to external services or archived content (configured in mkdocs.yml)
- **Redirects**: Many short URLs redirect to external services or archived content (configured in mkdocs.yml). To retire a page, delete the Markdown file, remove it from `nav`, and add it to `redirect_maps`; mkdocs-redirects generates the redirect page without a stub source file
- **Responsive design**: Material theme provides mobile-friendly layouts
- **Social media integration**: Automatic social cards generation for sharing
- **Search functionality**: Built-in search across all content
- **Link validation**: Automated link checking in CI prevents broken links
- **Link validation**: Automated link checking in CI prevents broken links

## Content That Goes Stale

These pages hold dated facts and need a yearly check, usually after the April conference and annual meeting:

- `docs/index.md` and `docs/conference.md`: current conference year, dates, CFP, and the archive entry for the past year
- `docs/sponsorship/conference.md`: link to the current year's sponsor page
- `docs/sponsorship/meetup.md`: supported meetups, newsletter and Discord audience numbers, sponsor availability
- `docs/foundation/who.md`: officers and term end dates (two-year staggered terms, elected at the annual meeting)
- `docs/foundation/minutes.md`: new annual meeting entry, newest first; source notes live in the PyTexas shared Google Drive as `YYYY-MM-DD Annual Meeting` docs
- `mkdocs.yml`: footer copyright year

## Session Notes

`.ai-sessions/` holds session summaries and `lessons.md` from past Claude Code sessions. Read the latest summary and `lessons.md` before starting related work.
5 changes: 2 additions & 3 deletions docs/sponsorship/meetup.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ with more coming soon! View them in our [Meetup Pro Network](https://www.meetup.

_All benefits listed below are available with sponsorship. Benefits are active for the entire duration of your sponsorship_

- Display of Logo and Call to Action
- Display of Logo and Link to Your Website
- Logo on our [Meetup](https://pytexas.org/meetup) website
- Listed as a Sponsor on the Meetup page of the PyTexas Virtual Meetup
- Listed as a Sponsor on the Meetup page of all in-person meetups PyTexas supports
Expand All @@ -44,13 +44,12 @@ _All benefits listed below are available with sponsorship. Benefits are active f
- 25 minute talk time limit
- Limit to 1 talk per year
- Starts with first month of sponsorship
- Must be given during the sponsorship term
- Can be given by company or company can designate a third-party speaker (i.e., customer)
- PyTexas approval required
- [PyTexas Community Discord Server](https://discord.gg/jNPAbcNukj)
- A thank you and mention once per quarter
- ~**1,600** members
- [PyTexas Conference](https://pytexas.org/conference) Sponsorship Discounts
- 5% discount on any tier per quarter sponsored

## Pricing

Expand Down
Loading