Polymathic blog - TODO and status
Next session (2026-02-01)
URGENT - Publishing streak at risk:
- Publish 1-2 posts this weekend to maintain 5-week streak (3-day gap ahead)
- Add tags to all 4 scheduled posts (enable strategic planning)
- Schedule 2nd newsletter for mid-February (close 14-day gap)
High priority - Pipeline visibility:
- Build Slate editorial widgets (integrate with ../slate framework)
- Pipeline status widget (upcoming, backlog, issues)
- Analytics widget (conversion tracking: posts→signups, newsletters→book clicks)
- Content planning widget (which topics to write based on performance)
- Integrate Google Analytics API (which essays drive signups by tag/category)
- Integrate Brevo API (which newsletters drive book clicks)
High priority - Backlog cleanup:
- Review 59 backlog drafts (past dates) - publish valuable ones, archive rest
- Run
/pipeline --archive-oldon drafts >1 year (once implemented) - Process 14-day work log backlog per new policy (7-day review, 30-day archive)
Medium priority - Strategic execution:
- Create ROADMAP.md for Q1 2026 (audience building theme)
- Fix content_type inconsistency in scheduled posts (“essay” vs essay)
- Schedule 2-3 more essays for February (reach 4-6/month target)
Completed (2026-01-31)
Strategic planning and product alignment:
- Made PM decisions on all 8 open strategic questions from PRODUCT.md
- Added 7 decision entries to DECISIONS.md with full rationale
- Corrected PRODUCT.md audience prioritization (professionals navigating AI era as primary)
- Updated success metrics to track book sales, social engagement, inbound opportunities
Pipeline tool implementation:
- Built complete
/pipelineskill with 8 command modes - Created Python analysis script (parses 600+ files, <5 second performance)
- First pipeline analysis revealed: 123 drafts, 4 scheduled, 59 backlog, publishing streak at risk
- Identified critical gaps: 14-day newsletter gap, no tags on scheduled posts, 3-day publication gap ahead
Roadmap planning (incomplete):
- Started
/pm-roadmapworkflow, confronted gap between controllable inputs vs uncontrollable outcomes - Decided to integrate pipeline dashboard into existing Slate framework
- Complete ROADMAP.md creation (deferred - need pipeline visibility first)
Completed (2026-01-30)
Product and requirements documentation:
- Created PRODUCT.md (vision, principles, positioning, success metrics)
- Created DECISIONS.md (15 documented decisions with rationale)
- Created EDITORIAL_DASHBOARD_REQUIREMENTS.md (85KB comprehensive spec)
- Researched editorial pipeline best practices (content marketing, newsrooms, agile)
- Analyzed current implementation in utilities project
- Specified morning report format with 6 sections and implementation phases
Pre-commit hook enhancement:
- Extended hook to auto-generate social media tease posts for essays
- Integrated with queuero for LinkedIn, Mastodon, Bluesky distribution
- Idempotent design (checks for existing tease JSON)
- Documented in CLAUDE.md
Completed (2026-01-29)
AI and authorship essays:
- Wrote “The death of the author” essay (4,500 words) - comprehensive philosophical argument
- Wrote “Dismissing AI content is prejudice” (1,200 words) - direct, provocative comparison
- Wrote “We always panic about new tools” (1,100 words) - safe historical pattern piece
- Created newsletter 260203 referencing historical pattern essay
- All three staying draft - publication TBD based on risk/value assessment
Agent infrastructure:
- Added .claude/agents symlink to shared utilities agents
- Documented three custom agents in CLAUDE.md (blog-researcher, blog-writer, hugo-prep)
- Updated VOICE.md with 207 lines of agent usage guidelines
- Infrastructure ready for parallel research and content creation
Completed (2026-01-28)
Newsletter system and content:
- Created newsletter 260127 “Files are permanent. Databases are not.”
- Learned and documented that newsletter template requires feature_post (can’t inline content)
- Created essay: Files are permanent. Databases are not. (content/posts/files-are-permanent.md)
- Updated NEWSLETTER_WORKFLOW.md with Step 0 (content creation requirements)
- Documented VOICE.md requirement and humanizer availability
Design and visual updates:
- Updated newsletter template colors from old rust to medium brown (#7a3322)
- Added “What I’m building” section to homepage (The Work of Being, Authexis, Textorium)
- Fixed product cards to match site design (gray on white, work-card class)
- Removed prose wrapper causing width constraint
Featured articles system:
- Changed featured writing section from tag-based to metadata-based (featured: true)
- Updated three posts as featured: Why customer tools are organized wrong, Busy is not a state, Infrastructure shapes thought
- Makes featured status explicit rather than implicit via tags
Completed (2026-01-27)
Git hooks automation:
- Extended pre-commit hook to support essay social teasers (paulos blog tease)
- Added LinkedIn post generation automation (paulos blog linkedin)
- Implemented duplicate detection via queuero check-duplicates
- Commented out new automation pending command maturity
- Documented infrastructure for future activation
Content and workflow:
- Published Textorium App Store launch post
- Received and distributed 3 work logs (Textorium, Queuero, Authexis)
- Created polymathic-h work log documenting hook automation
- Updated editorial calendar (119 events)
Completed (2026-01-26)
Git hooks and infrastructure:
- Refined post-commit hook to only sync changed files to Notion
- Added output messages to post-commit hook for visibility
- Documented Notion sync in CLAUDE.md
- Tested hook with dozen+ commits until behavior felt right
Queuero specification:
- Created comprehensive technical spec (785 lines)
- Designed database schemas, CLI commands, platform integrations
- Renamed from ‘paulos social’ to standalone ‘queuero’ tool
- Copied spec to ../queuero project directory
Content and workflow:
- Regenerated audio for Jan 24 dev reflection (9:56 min, 9.11 MB)
- Added Phantasmagoria work log to blog as draft
- Created work log for Jan 26
- Updated editorial calendar (114 events)
Completed (2026-01-25)
Content and workflow:
- Resolved git conflict in Jan 23 reflection post (kept local rewrite, merged remote metadata updates)
- Rewrote Jan 23 podcast reflection with new angle on friction and automation
- Improved description field for SEO and podcast feed display
- Created work log documenting conflict resolution workflow and prose vs code version control
- Completed /close workflow successfully
Future enhancements
- Create Hugo archetype template for essays (pre-fill content_type, categories, etc.)
- Build
/reviewskill to list drafts and offer quick publish actions - Consider bidirectional content classifier (verify existing content_type assignments)
Completed (2026-01-24)
Content refinement:
- Updated Jan 23 dev reflection with edits
- Discovered
descriptionfield dual purpose (podcast RSS + SEO meta tags) - Attempted audio regeneration - hit ElevenLabs quota (1,022 credits remaining, 4,673 needed)
- Pre-commit hook failed gracefully without blocking commit (correct behavior)
Completed (2026-01-23)
Podcast infrastructure complete:
- Created Hugo template to auto-generate polymathic.xml from posts with audio_url
- Configured hugo.toml to output podcast RSS feed on every build
- Feed uses description field if present, otherwise Summary
- Removed static/polymathic.xml (now Hugo-generated)
- Created git pre-commit hook to auto-generate audio for posts with “podcast” tag
- Hook runs
paulos podcast generate-audioon staged podcast posts - Audio generation is idempotent (skips if audio_url exists)
- Updated podcast cover art with brand colors (warm brown #b54a32 on cream #FAF8F5)
- Changed cover typography to Libre Baskerville (site’s serif font)
- Removed “Daily” branding from cover art
- Updated Apple Podcasts categories to Technology, Business > Management, Society & Culture > Philosophy
- Fixed podcast owner email (ponch@ → paul@)
- Added explicit description fields to prevent audio player HTML in RSS feed
- Fixed XML entity escaping with transform.XMLEscape
- Generated audio for three existing essays (build-for-the-loop, infrastructure-shapes-thought, when-teaching-stops-being-bounded)
- Added “Podcast” to top navigation
- Updated Apple Podcasts link (https://podcasts.apple.com/us/podcast/polymathic/id1871538054)
- Documented complete podcast infrastructure in CLAUDE.md
Podcast RSS troubleshooting:
- Fixed RSS timezone format (EST → -0500 for RFC 822 compliance)
- Added per-episode author tags (itunes:author)
- Fixed truncated episode descriptions
- Added episode link tags pointing to blog posts
- Updated Apple Podcasts categories (Technology → News)
- Created Cloudflare _headers for proper RSS caching (5 min max-age)
- Created /podcast landing page
- Created blog post pages for both podcast episodes (Jan 21 and Jan 22)
- Updated RSS episode links to point to blog posts
- Verified all episode pages deployed and accessible (HTTP 200)
- All Apple Podcasts validation errors resolved
Work log distribution:
- Distributed Jan 22 work log as draft blog post
Completed (2026-01-22)
Pipeline skill planning:
- Designed
/pipelineskill implementation approach (pure Claude execution) - Explored existing infrastructure (PaulOS CLI, content classification, calendar generation)
- Created comprehensive implementation plan at ~/.claude/plans/peppy-prancing-phoenix.md
- Documented 8-step workflow, output formats, integration points, testing strategy
- Ready for implementation in next session
Podcast infrastructure:
- Created VOICE.md with Paul’s voice and brand guidelines
- Set up podcast RSS feed at static/polymathic.xml
- Designed and created podcast cover art (3000x3000px)
- Feed published at https://www.paulwelty.com/polymathic.xml
- Utilities Claude implemented
/podcastskill with ElevenLabs + Cloudinary integration - Published first two podcast episodes (Jan 21 and Jan 22)
- Audio hosted on Cloudinary CDN (no git storage of large mp3 files)
- Tested RSS feed with Zapier - content_type filtering works correctly
- Fixed Jan 21 episode metadata (date correction, removed duplicate fields)
Completed (2026-01-21)
Editorial calendar implementation:
- Editorial calendar auto-updates on every /close workflow
- Published at https://www.paulwelty.com/calendar.ics (79 draft posts)
- Utilities Claude implemented
paulos blog calendarcommand - Created EDITORIAL_CALENDAR_INFO.md with subscription instructions
- Integrated calendar regeneration into /close skill (step 6)
Pipeline skill specification:
- Created comprehensive spec for /pipeline skill
- Designed upcoming schedule view, problem detection, content mix analysis
- Specified quick actions (publish, archive, schedule)
- Ready for implementation at .claude/skills/pipeline/SPEC.md
Project documentation:
- Created CLAUDE.md for AI assistant guidance
- Documented PaulOS CLI integration, content types, editorial calendar
- Provided context for new Claude sessions
Completed (2026-01-21) - Content Type System
- Add content_type to all existing posts
- Manually tested categorization logic on 21 diverse posts (7 commits)
- Created comprehensive spec for utilities Claude (CONTENT_TYPE_CLASSIFICATION.md)
- Utilities Claude implemented
paulos blog classify-contentcommand - Automated classification of 518 remaining posts
- Final distribution: 432 bookmarks, 50 essays, 42 work logs, 12 toots, 11 linkedin, 7 reactions, 6 newsletters, 3 articles
- All 564 posts now have content_type for RSS-based Zapier automation
Completed (2026-01-20)
- Verify Tuesday newsletter sends correctly at 11am EST (Campaign ID 21)
- Check email formatting, links, unsubscribe functionality when campaign sends
- Add newsletter attribution to friction essay
Completed (2026-01-19)
- Draft newsletter essay: “Sometimes friction is your best friend” for Tuesday Jan 20
- Create newsletter entry for Jan 20 referencing the friction essay
- Complete Authexis → Hugo newsletter integration documentation
- Build prepare_newsletter.py utility for editorial workflow
- Schedule newsletter campaign in Brevo (Campaign ID 21, Tuesday 11am EST)
- Fix work log category format issues (string → array)
- Add newsletter preparation utility documentation to authexis-hugo-format.md
Current status (2025-12-30)
Site is running on poly5 theme - a pure Sass theme with zero npm dependencies.
- 1540+ published pages
- Hugo Pipes for CSS (Dart Sass, built-in)
- Google Analytics 4 enabled (G-FMZXZ2XER2)
- Cloudflare Pages deployment
- Canonical URL:
https://www.paulwelty.com/ - Custom RSS feed with summary + full content
- Newsletter v4 with streamlined single-article format
Recent updates (2026-01-12)
Newsletter system refactor (completed):
- Consolidated all newsletter metadata into content/newsletters/*.md frontmatter
- Created data/series.yaml for reusable series definitions (subtitle + closing text)
- Updated all templates to read from .Params instead of querying posts
- Removed newsletter tags from posts (newsletter_edition, newsletter_type, series)
- Added series support with subtitle and closing text rendering in web and email
- Removed JSON output format (Python script parses markdown frontmatter directly)
- Updated Python script to parse YAML frontmatter from markdown files
- Deleted v3 templates, JSON template files, and redundant data/newsletters/ directory
- Newsletters now explicit: content files point to posts via feature_post parameter
- Simplified system: one feature essay per newsletter, single source of truth
- Tested and verified: Hugo build, email HTML, and Python script all working
Recent updates (2026-01-01)
Image handling improvements:
- Fixed coverImage field to support external URLs (Cloudinary, etc.)
- Both coverImage and image fields now check for http prefix
- External URLs used directly, local paths get /images/ prefix
- Applied fix to all templates: single.html, post-teaser.html, post-feature.html, home-latest-writing.html
- Resolves 404 errors when using external image URLs in post frontmatter
Email template enhancements:
- Added book promo to newsletter and confirmation email footers
- Links to “The Work of Being” on Amazon in footer
- Split bio into focused paragraphs (book promo + professional background)
Previous updates (2025-12-30)
Newsletter v4 launch:
- Removed generic closing lines and “The work of being:” prefix from newsletter titles
- Added rust divider before bio footer section
- Updated footer with revised inline links (paulwelty.com · Work with me · Reply—I read everything)
- Removed description from email header, keeping only slogan
- Updated site slogan to “AI, work, and staying human”
- Removed site description from website header (showing only name and slogan)
- Newsletter list now sorts by edition descending with dates appended
- Created v3 template backups for reference
New content series:
- “The slop panic” (edition 260106, Jan 6 2026) - shorter version focusing on why only writers panicked
- “Writing was always work” (edition 260113, Jan 13 2026) - explores writing as system-interface work
- Both reference full essay “AI in writing: the end of a professional monopoly” via original_post field
- Fixed list formatting for email compatibility
- Added links to full argument at end of each shorter piece
- Set publication dates to 2026 so future newsletters hide from list until publication
Template improvements:
- Newsletter list displays with dates: “Title (January 6, 2025)”
- Custom subject line support via newsletter_subject frontmatter field
- Proper markdown bullet formatting for email rendering
- Hide future-dated newsletters from “Past newsletters” list
Previous updates (2025-12-14)
- Homepage redesign: combined hero + about into single section with expanded bio
- Integrated CTA boxes (Writing, Newsletter, Work with me) into hero section
- Header updated to “Paul Welty, PhD”
- Tagline updated to “WORK, BEING, AND STAYING HUMAN”
- Newsletter page with styled Brevo signup form and past editions list
- Newsletter JSON template constructs subject as “The work of being:
” - Writing page with proper H1/H2/H3 hierarchy
- Post pages redesigned: no sidebar, meta at bottom, “More writing” footer
- Added hover:underline support to SCSS
- Combined consulting/speaking into “Work with me” page
- Hidden Polymathic (latest writing) section from homepage (preserved in code)
- Navigation redesign: sticky, reordered (Writing | Newsletter | Work with me | About | Contact), removed Home link
Previous cleanup completed
- Migrated from poly4 (Tailwind/npm) to poly5 (pure Sass)
- Removed ChatGPT citation artifacts from 44 files
- Fixed/drafted ~50 problem posts (duplicates, AI failures, title conflicts)
- Created custom 404 page
- Gave unique titles to conflicting posts (toots, etc.)
- Removed npm artifacts from repo (
package.json,package-lock.json) - Added custom RSS template (summary + full content)
- Set canonical URL to www.paulwelty.com
- Configured Cloudflare redirect (paulwelty.com → www.paulwelty.com)
Still to do
- Consider deleting old themes (poly2, poly3, poly4) after confirming poly5 works in production
- Review drafted posts to either fix or delete:
- Posts with
draft: trueincontent/posts/(duplicates, broken content) - Drafts in
content/_drafts/
- Posts with
- Consider adding:
- Open Graph images
- Reading time estimates
- Related posts section
Newsletter system - future enhancements
- Series archive pages: Auto-generate landing pages for each series
- Newsletter preview page: Show draft/future newsletters with authentication
- Validation script: Pre-build check that all feature_posts exist
- Newsletter CLI: Script to create new newsletter YAML with defaults
- Analytics: Track which series/topics perform best
Build commands
# Local development
hugo server --disableFastRender
# Production build
hugo --gc --minify
Deployment (Cloudflare Pages)
- Build command:
hugo --gc --minify - Build output directory:
public - Environment variable:
HUGO_VERSION=0.152.2(or latest)
No npm install needed - Hugo extended handles Sass natively.
Theme structure
themes/poly5/
├── assets/sass/main.scss # Sass source (Hugo Pipes compiles)
├── layouts/
│ ├── _default/
│ │ ├── baseof.html # Base template with Hugo Pipes CSS
│ │ ├── single.html # Post template
│ │ ├── list.html # List template
│ │ ├── search.html # Search page
│ │ ├── about.html # About page
│ │ └── rss.xml # Custom RSS feed template
│ ├── partials/
│ └── 404.html # Custom 404 page
└── theme.toml
Featured writing
Why customer tools are organized wrong
This article reveals a fundamental flaw in how customer support tools are designed—organizing by interaction type instead of by customer—and explains why this fragmentation wastes time and obscures the full picture you need to help users effectively.
Busy is not a state
We've built work cultures that reward activity, even when nothing actually changes. In technical systems, activity doesn't count—only state change does. This essay explores why "busy" has become the most misleading signal we have, and how focusing on state instead of motion makes work more honest, less draining, and actually productive.
Infrastructure shapes thought
The tools you build determine what kinds of thinking become possible. On infrastructure, friction, and building deliberately for thought rather than just throughput.
Books
The Work of Being (in progress)
A book on AI, judgment, and staying human at work.
The Practice of Work (in progress)
Practical essays on how work actually gets done.
Recent writing
When execution becomes cheap, ideas become expensive
This article reveals a fundamental shift in how organizations operate: as AI makes execution nearly instantaneous, the bottleneck has moved from implementation to decision-making. Understanding this transition is critical for anyone leading teams or making strategic choices in an AI-enabled world.
Dev reflection - February 02, 2026
I've been thinking about what happens when your tools get good enough to tell you the truth. Not good enough to do the work—good enough to show you what you've been avoiding.
Dev reflection - January 31, 2026
I've been thinking about what happens when your tools start asking better questions than you do.