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
4 changes: 3 additions & 1 deletion .ai-sessions/lessons.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

## Recent
<!-- 10 most recent lessons, newest first -->
- `mkdocs build --strict` (and `just validate`) fail on this repo even on clean main because `site_url` is unset; CI deploys via `gh-deploy` without strict, so validate changes with a plain `mkdocs build` (2026-09-06)
- On a rerun of the monthly update, audit artifact existence first (Mailchimp campaign list, Drive title search, Canva deck page-1 thumbnail, Discord scheduled-events API) instead of walking the skill's from-scratch order (2026-09-06)
- A speaker headshot that arrives as a Google Drive link: download it via the Drive MCP and commit it to `docs/assets/images/` so `mkdocs build --strict` and CI are not blocked; the pushed branch's `raw.githubusercontent.com` URL then doubles as the public source for the Canva `upload-asset-from-url` (a private Drive file is not fetchable by Canva) (2026-08-14)
- The Drive MCP `download_file_content` returns base64 that overruns the tool-result token cap for a ~700KB image; it gets saved to a file instead, so decode the `content` field from that saved JSON with Python rather than expecting it inline (2026-08-14)
- The CFP sheet's `Acked` column lags reality; a speaker can be booked (per the Gmail "Speak at PyTexas Meetup" thread) while their row still says FALSE. Treat the email thread as the booking source of truth, not the sheet (2026-08-14)
Expand All @@ -10,7 +12,6 @@
- When resolving an add/add conflict in a sops-encrypted file, take the side that is the plaintext superset (its MAC already covers the full key set) and verify by actually running `sops --decrypt`; a hand-stitched ciphertext would fail MAC validation (2026-08-14)
- Canva share/export links 403 to link checkers (bot-blocked, not broken); add `canva.com` to `.lycheeignore` rather than editing the reference doc (2026-08-14)
- Canva export URLs are signed and expire within hours; for Discord announcements attach the PNG to the webhook message (`files[0]` multipart) so the image outlives the link, and state the link's expiry next to it (2026-07-31)
- meetup.com shows "0 upcoming events" to WebFetch because listings render client-side; the raw HTML's `__NEXT_DATA__` Apollo cache has full event data. Use `scripts/scrape_local_meetups.py` in the meetup-update skill, and check for embedded JSON before declaring any Next.js site unscrapeable (2026-07-31)

## Secrets
- `sops set file '["KEY"]' '"value"'` adds a key to a sops dotenv without a decrypt/edit/re-encrypt round trip (2026-07-31)
Expand All @@ -24,4 +25,5 @@
- Mailchimp Marketing keys end in `-usNN`; Transactional (Mandrill) keys are a separate product and format. The Transactional MCP rejects Marketing keys with "Invalid API key" (2026-07-31)

## Workflow
- meetup.com shows "0 upcoming events" to WebFetch because listings render client-side; the raw HTML's `__NEXT_DATA__` Apollo cache has full event data. Use `scripts/scrape_local_meetups.py` in the meetup-update skill, and check for embedded JSON before declaring any Next.js site unscrapeable (2026-07-31)
- The meetup-update skill's `references/newsletter.md` is the canonical newsletter playbook; follow it over memory or improvisation (2026-07-31)
45 changes: 45 additions & 0 deletions .ai-sessions/session-20260906-1427-october-wrapup.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Session Summary: October 2026 Meetup Wrap-Up

**Date**: 2026-09-06
**Duration**: ~30 minutes (in progress; summary written at the website-commit checkpoint)
**Conversation Turns**: ~10 at time of writing
**Estimated Cost**: moderate (MCP-heavy status checks plus site edits)
**Model**: Claude Fable 5

## Key Actions

- Audited the whole October cycle before doing anything: homepage already carried October (Shayan Ali) and November (Pavan Kota) with headshots and author entries merged to main
- Confirmed what was still missing: September archive post, October Mailchimp draft, Drive month folder, October Canva card, Discord scheduled event, meetup.com draft event, webhook announcements
- Archived the September 1 meetup (Nishanth Sirikonda) to `docs/past_meetups/posts/2026-09-01.md` and removed the September section from `docs/index.md`
- Verified `mkdocs build` passes; `--strict` fails on clean main too (missing `site_url`), so plain build is the honest check
- Created the October Mailchimp draft (4ec4ba2653), Drive month folder with run of show and both forms, the October Canva card (2027 deck page 1), the Discord scheduled event, and the meetup.com DRAFT network event (316447876); the meetup runs rotated `MEETUP_REFRESH_TOKEN` in sops (committed on this branch)
- Drafted date-offer emails in Gmail for the two un-acked CFP candidates (Sridhar Irujolla, Kriti Faujdar)

## Prompt Inventory

| Prompt/Command | Action Taken | Outcome |
|---|---|---|
| `/meetup-update` (wrap up quickly, much already done) | Status audit across site, Todoist, Mailchimp, Drive, Canva, Discord; then website archive work | September archived, remaining artifact list established |

## Efficiency Insights

**What went well:**
- Checking artifact existence (Mailchimp campaign list, Drive search, Canva page 1 thumbnail, Discord events API) before creating anything avoided duplicate work

**What could improve:**
- The 2027 Canva deck id and share link in `announcements.md` saved a search; keep constants like that in references

**Course corrections:**
- Skipped the CFP/Gmail pull since the speakers were already booked and on the live site

## Process Improvements

- A "status audit first" pass fits reruns of the monthly update well; the skill assumes a from-scratch run

## Observations

- `mkdocs build --strict` (and `just validate`) fail on main because `site_url` is unset; CI deploys with `gh-deploy` and never runs strict

## Suggested Skills for Next Session

- `meetup-update`: the October cycle still needs the newsletter draft, Drive artifacts, Canva card, events, and webhooks if this session is interrupted
12 changes: 0 additions & 12 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,6 @@ of Texas and beyond.

## Upcoming PyTexas Meetups

### September Meetup - September 1, 2026

**Architecture Beyond the Diagram: Governing Python Systems People Can Actually Change** - Nishanth Sirikonda

Architecture diagrams can explain what a system looks like, but they rarely explain how teams should evolve it safely. Python systems often grow through rapid iteration, integration needs, and team-specific decisions, and over time the challenge becomes less about drawing the right diagram and more about creating governance that helps people make better changes. This talk reframes software architecture as a living decision system, built around decision records, ownership boundaries, integration contracts, stakeholder alignment, and change readiness.

[RSVP Here :fontawesome-solid-ticket:](https://pytexas.org/meetup/join){ .md-button .md-button--primary }

![Nishanth Sirikonda Headshot](assets/images/nishanthsirikonda.jpg){: style="height:150px;width:150px" align=left}

_Nishanth Sirikonda is a Cloud Solutions Architect with over 10 years of experience designing and implementing scalable, secure, and user-focused HCM solutions. He brings deep expertise in the core areas of Artificial Intelligence/Machine Learning, Cybersecurity, and Cloud Computing. He collaborates closely with stakeholders to deliver impactful, future-ready solutions that streamline operations and elevate workforce experiences. He is an active IEEE member and technology community contributor, he is passionate about bridging human potential with machine intelligence to create future-ready, resilient organizations._

### October Meetup - October 6, 2026

**How to Read the AI Brain** - Shayan Ali
Expand Down
21 changes: 21 additions & 0 deletions docs/past_meetups/posts/2026-09-01.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
title: "Architecture Beyond the Diagram: Governing Python Systems People Can Actually Change"
description: "Nishanth Sirikonda reframes software architecture as a living decision system teams can safely evolve."
date: 2026-09-01
categories:
- Python
- Code Quality
- DevOps
authors:
- nishanthsirikonda
---

# September 2026 Meetup

Architecture diagrams can explain what a system looks like, but they rarely explain how teams should evolve it safely. Python systems often grow through rapid iteration, integration needs, and team-specific decisions, and over time the challenge becomes less about drawing the right diagram and more about creating governance that helps people make better changes. This talk reframes software architecture as a living decision system, built around decision records, ownership boundaries, integration contracts, stakeholder alignment, and change readiness.

<!-- more -->

![Nishanth Sirikonda Headshot](../../assets/images/nishanthsirikonda.jpg){: style="height:150px;width:150px" align=left}

*Nishanth Sirikonda is a Cloud Solutions Architect with over 10 years of experience designing and implementing scalable, secure, and user-focused HCM solutions. He brings deep expertise in the core areas of Artificial Intelligence/Machine Learning, Cybersecurity, and Cloud Computing. He collaborates closely with stakeholders to deliver impactful, future-ready solutions that streamline operations and elevate workforce experiences. He is an active IEEE member and technology community contributor, he is passionate about bridging human potential with machine intelligence to create future-ready, resilient organizations.*
6 changes: 3 additions & 3 deletions secrets/meetup.sops.env
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ PYTEXAS_MEETUP_WEBHOOK=ENC[AES256_GCM,data:o0eUcyJ8464OqJwnwJwfkBshaliya/9s62tRi
MAILCHIMP_API_KEY=ENC[AES256_GCM,data:iZo1IvkKpsrv7vAhtu3E3DqFuTGe+nR4eTcwKEpZ1byqWbGsAQ==,iv:tai6OvFB2i26xMpx5vRqdL5Z0Tv5fngcDzw6B1QkLlI=,tag:qmh1lqlndVPbWp/bnsDH6g==,type:str]
MEETUP_API_KEY=ENC[AES256_GCM,data:+2sPa/R+VSOtOHioho9c2cKq/3BDA5NSVXA=,iv:SnJCta7ujkSqFDZqkaSsr11pEK253ESqY/U6ePqIs34=,tag:oIUmg68ZjbucVKh6OTYnpg==,type:str]
MEETUP_API_SECRET=ENC[AES256_GCM,data:idZPq0DEvxAlCg38YQ4vHUSGIFI40zZNgDk=,iv:OtAFPf6bZVJt/hOP0JyIeG1TDLnA09HZRdXWuu321ro=,tag:BkAHzj5jr1zQP/5puOntxg==,type:str]
MEETUP_REFRESH_TOKEN=ENC[AES256_GCM,data:xPPRXeCfSPqNkaUdRbvGrvxWyQDju0V5pdPryu3QQ7jUg/5NGz84W8rtd/qfovQMr6GBwbHejonUexH6vQ7FsRTr+6ZRYykGySuBCCNRWiNVELQs4OndoSvjOUhdy/8eHqD8GV/lbWz8K5HsMh5RqaltnsgAEJVTjX71Ek9dXM0FKEySlXATz9MCCFqSXDqgZWmBhG9dRfKM6ryS77sA/aQAZZ3930EttIZvwP3GehsKY8hfRaV/+7L6bpstrcwoo7Gh0dLxpAs+y3QB2ncxmTKFjptNPBSUKkoSpqGiLpK/sQmNO9I5smcBqqwNlKUN+bXEQ5Yh6PILb37gEMxSjGhxXOguUFJnDpGrcUYLwom9dwBgfXETmqUaYLQMW1e/yCJIdqn6FsD0uqjO9N+E3bGR/5OWyEc8wyBiN3Rdw7I5dylAf376/NcSRmFGcPMfVRLPgWjIPjSLx1hlxOhbM/0gKBUAdYNu6sgoTPgIkTv1YNJwgQCs55bXLuyNdYOXwV/G7WZtnd6HLs0sV2EFpUN4G7b1+yW6GZuIlLXSg2j7o1YNGkN3JENIFDK89WMSe0rZBkQxlvOJnKhzEgQF9VCpYtt/S8AdCwUmKjYyV79KJR3zefgST+T3+j0ANYLP6771daAtrxDTJNlalr/NLvwEFxycVDA4+QVwY+G9qT9afje+Dwqj08szqYxyLRMoAB37gE+1xtQcsDCOCf1jVln9a2ympaxzxzyYEFxBV7waCTyv+uY4+2iZ0xFUj/q78Rx4wqb8Kk0fWLl+DqFjbr/8G7Q12M5cjKW4NsyQTofAacjcRI6QSVw9oHCSnBHcnUnZ4g==,iv:8nhMjokwC/jy5c3brH9HsTNyRjRyCNlY0IDv8yTqPKg=,tag:PnED/sijILswaz2RoJo9qw==,type:str]
MEETUP_REFRESH_TOKEN=ENC[AES256_GCM,data:JqHX5fKxW3rSBYIH8s+wvpqMoAGZ93lSHxa3RpwnfbJ1fPgNnWOdoMNmmUm9p5Ox20nrJakmHJrZmFaR8TwvnzzLcKzbZXp7rMPDOZiVkwKVCXn9nQcHYuXFXQCAd1qiEdgy7RCOLkU7bUogyTUuJ9xjxjhTxUqipux7QaKXw9dT8MpCLgF+GszbWdVFJNvX41CS13U7+jwuWc28HlTc2UXyW+Hu9/v5LZrYYIxpYjdup6dS0Q+UAgzHimRl+ZO+ONJ+bqA+z6e1ePHz2xvO4B1Rjgnr+71Ldymbh2Iq5gvWi2vBiuFMqIsJ+Kzv75gzKZn5wmRmLSk8QZ78GSpANd7Ye1C33JZY/zWioWGcpkYO26X44ZyKNDoOTB5EquGyki7s8S2Sb/k33HuqXV/hvAKHtDv3z2I0P9GyPgVR32uMPWwSTM4Mv8ZQmWTz+HyDU+hXGGXa0aFo+FYxBrjAM8wftRARzFDrHBBk17RSwCjMQQ69JMpKd309ZJa546BKkZdH48+nOGV+1LgwnClJKIPk20J8b/e6yquEfIMrxXglN7lHQXe65vLaHx2K0+qVmJOtZ0MexIShPifDMqILMt23FWkhUm0ztjvPIs0sB+KML3TMMM2BZ6SOs/tYpTg08HRnoQ5UkPNTYKbgSmdLull/oaZL72nkGG6I8twWISOzqS8zrkRIJte01DclbcTECePrJwnCTZKJ4Iu+L97mKZbqN1+IjuO2egRWi3Yv4NftAMAoH3Sh684m/pjSNVHJ8No6iVTkx5Iay4MC4EvupTDZ57PQNbchYBHqxpxoeMq492z2j73+h0kO3IoSRgEUydwdVw==,iv:sinQpTmcUq61pqpcAOAz+qKfPq3YPqYGER2yjd4czKQ=,tag:6R0+dd6EJE+Wb8VoNTDkyg==,type:str]
PYTEXAS_DISCORD_BOT_TOKEN=ENC[AES256_GCM,data:F0JvIvALzRUF6jrnkhtUPEKYb7HXdpKTEcg3sKY3Xkxf2L9H3i5OSKfgyfE6upWjNdPQKZu4jqJaxKw709Wvdg+pMNFfR69B,iv:tN2srDHO9bCJEW+tc7nl4zDbKkcf7a0DE01nw6Jmq6g=,tag:JERscJ5CEEbdyBC3A2WNBw==,type:str]
sops_age__list_0__map_enc=-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvTlczR3puNFJOa2dJN0hS\ncVp5Tzk1K1ZHMDNIZFJIZG5WM0ordW00MWg4CjFCdWJvWmlDcmlkQ05zZFFqQlVR\nN3RHQzkrbnRteHZYbFM0NzJ3Si9qQlEKLS0tIHIxLzluZ3JCa0dSWG13N2dlYTVn\nMFpycUNHZ3p6SXpzdFRvL3VxeDlOUmsKvgfZuOwDCq+z/q+4m+TVNF2sMKpKZ4zs\nTQS17ua+xa6rgRAk2eG3PBp7GRKAhnGUV5WfA9++TU2O3CKmb6RGww==\n-----END AGE ENCRYPTED FILE-----\n
sops_age__list_0__map_recipient=age17u5zkzgr4ca49sl9n42zk6aruq8d5xntnuxkhyjwvku80tx93afqm7a0fz
sops_lastmodified=2026-08-25T03:36:53Z
sops_mac=ENC[AES256_GCM,data:lyXTuMlmfb9eLWO88CRU5Stoxxfix+n+6DHsb+/C4pNx3xtr98U1nNFGLiHASHaA4yqshKjcMg31paxEOviJMaVJoZ3yjCC8oSNB1emQTgbLrMPzvi9iFHAE9qSAgCQYSjagdEFljJxagx5O+SkYYurGdJxQ9Qt4ULEAViqYM64=,iv:yK80WUlMIMV93JGJm98+tXaQEkQCi7YHZ1FnRGZyLyk=,tag:9Lgleb/yfnL99rPbfHdjTA==,type:str]
sops_lastmodified=2026-09-06T19:37:06Z
sops_mac=ENC[AES256_GCM,data:E1RSpTv75GzlAPj5mawz7qNNhwJu79M/ovrN3niV3qipgOIHsesvsXe1jpWod9JEOPNrXlbIk2C1V0jlL0Cn0WOBjFjMtqF7ES/lLeQ7BCAvtX7gEmf9NW9H8kSdROOKdZcsRJWP0Gb984mLEwxPirQ6oFP75hcga9/FQGPfNuo=,iv:i8O49khFw8Yd3kGj/88zS1YD3/D1JanBMMUHPC3WEfo=,tag:1bnoPDdVh39zXS6WiU98pA==,type:str]
sops_unencrypted_suffix=_unencrypted
sops_version=3.13.1
Loading