diff --git a/.ai-sessions/lessons.md b/.ai-sessions/lessons.md index 97b920e..0479b23 100644 --- a/.ai-sessions/lessons.md +++ b/.ai-sessions/lessons.md @@ -2,6 +2,7 @@ ## Recent +- 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) @@ -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) diff --git a/.ai-sessions/session-20261005-2158-meetup-contract-sync.md b/.ai-sessions/session-20261005-2158-meetup-contract-sync.md new file mode 100644 index 0000000..05bce63 --- /dev/null +++ b/.ai-sessions/session-20261005-2158-meetup-contract-sync.md @@ -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. diff --git a/CLAUDE.md b/CLAUDE.md index 3c0e8c5..0bec817 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -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/` @@ -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 \ No newline at end of file +- **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. diff --git a/docs/sponsorship/meetup.md b/docs/sponsorship/meetup.md index 9294c6e..f9e0d71 100644 --- a/docs/sponsorship/meetup.md +++ b/docs/sponsorship/meetup.md @@ -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 @@ -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