Blog

Maintenance Notes

  • Post cadence: Posts distributed evenly from Jul 3, 2025 to present. When redistributing dates:
    1. Count total posts
    2. Calculate interval: (end_date - start_date) / (num_posts - 1)
    3. Dates cannot exceed today’s date
    4. First post stays Jul 3, 2025; last post = today
  • Dashboard embed: climate_policy_dashboard_static.html is a Panel/Bokeh export (8MB). Iframe height set to 2000px in ccspolicies.qmd to 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' or DD-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), not pixi run quarto render projects/puepy/. No .qmd files in puepy; it’s copied via resources: in _quarto.yml.
  • Deploy target: Part of insights project on Cloudflare Pages (not a separate project). Deploy with bunx 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.