Blog
Maintenance Notes
- Post cadence: Posts distributed evenly from Jul 3, 2025 to present. When redistributing dates:
- Count total posts
- Calculate interval:
(end_date - start_date) / (num_posts - 1) - Dates cannot exceed today’s date
- First post stays Jul 3, 2025; last post = today
- Dashboard embed:
climate_policy_dashboard_static.htmlis a Panel/Bokeh export (8MB). Iframe height set to 2000px inccspolicies.qmdto show all 6 charts + policy table. No source .py exists; regenerate from scratch if updates needed. - Date format: Always use
date: "YYYY-MM-DD"in frontmatter (not'YYYY-MM-DD'orDD-Mon-YY).
Image optimization for blog thumbnails
1. Resize to 1200x630 (crop from center)
magick mogrify -resize 1200x630^ -gravity center -extent 1200x630 -strip *.png
2. Compress with pngquant
pngquant –quality=60-80 –force –ext .png *.png
Target: <300KB per image, exactly 1200x630px.
Shah’s Prompts (puepy)
- Prompt limits: Exactly 3 prompts per category, 18 total. Max 4 tags per prompt.
- Render: Must run
pixi run quarto render(full site), notpixi run quarto render projects/puepy/. No .qmd files in puepy; it’s copied viaresources:in _quarto.yml. - Deploy target: Part of
insightsproject on Cloudflare Pages (not a separate project). Deploy withbunx wrangler pages deploy _site --project-name=insights --commit-dirty=true. - **_site is gitignored**: Only commit source files in
projects/puepy/. The_site/folder is build output.