Images were getting cut off because the web layout used fit: "cover"
(which crops) instead of fit: "contain" (which scales to fit). Also
changed margins from inner-edges-only to uniform 0.125" on all sides
so each slide is properly centered in its 1/8th panel.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Margins now only between panels (0.125" gutters), not on page edges
- Content fills to outer edges of 8.5x11" page
- Added --bw flag for high-contrast black & white output
- Added --threshold option for B&W conversion (0-255)
- Optimized for zero-ink thermal printing
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Old gemini-1.5-flash model is no longer available in v1beta API
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- New /api/generate-image endpoint that returns base64 directly
- Uses RunPod proxy to bypass geo-restrictions
- Enables canvas-website MycroZine tool to generate images
- Includes CORS headers for cross-origin requests
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fixed print-layout API to return correct URL format (?print=true instead of /print)
- Modified print endpoint to only force download when &download=true is added
- Updated create page and share page to use download parameter for download button
- Print preview now renders properly as an image
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Use RunPod serverless endpoint (US-based) to bypass EU geo-restrictions
- Add RUNPOD_API_KEY and RUNPOD_GEMINI_ENDPOINT_ID env vars
- Add fallback to direct Gemini API if RunPod not configured
- Endpoint ID: ntqjz8cdsth42i
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Automatically builds the runpod-proxy Docker image and pushes to
GitHub Container Registry when changes are made to runpod-proxy/
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Creates a US-based proxy to bypass geo-restrictions on Gemini
image generation. RunPod runs in the US, allowing access to
Gemini's image generation from EU servers.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add overall progress bar with percentage during page generation
- Add per-page progress indicators with checkmarks for completed pages
- Show current page title/type while generating
- Create styled placeholder images with actual page content when
AI image generation is geo-blocked
- Style placeholders match selected zine style (punk, minimal, etc.)
- Add cache-busting timestamps to force image reload
- Update worker to return helpful error for geo-blocking
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The SDK was being initialized at module load time with the build-time
env var (empty string), instead of the runtime env var. Changed to
lazy initialization pattern that creates the client on first use.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Created gemini-proxy worker to route requests through US edge
- Updated generate-page to use proxy for bypassing geo-restrictions
- Gemini image generation is blocked in Germany, proxy routes through US
Worker URL: https://gemini-proxy.jeffemmett.workers.dev🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Changed from /api/zine/[id]/image/p1.png to /api/zine/[id]?image=p1
to match the actual API route handler.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Use gemini-2.0-flash-exp with responseModalities: ["TEXT", "IMAGE"]
- Remove invalid responseMimeType and non-existent model names
- Simplify to single model with placeholder fallback
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The gemini-1.5-flash model is not available in the v1beta API.
Updated to gemini-2.0-flash for outline generation.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The healthcheck was using localhost which resolves to IPv6 [::1],
but Next.js only listens on IPv4. Changed to 127.0.0.1.
Also removed deprecated 'version' key from docker-compose.yml.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Print layouts now auto-generate unique filenames with timestamps
- Added --name/-n flag to customize zine name in filename
- Example files default to 'undernet' as zine name
- Added --help flag with usage examples
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- generateQRCode() - create QR codes with punk-zine colors
- generateQRCodeDataURL() - for embedding in HTML/canvas
- generateZineQRCodes() - batch generate multiple QR codes
- generateUndernetQRCodes() - preset for Undernet zine
- CLI support: node src/qrcode.mjs <url> [options]
- Default colors: black QR on green background
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- All pages now 3:4 aspect ratio (fits 7cm x 10.8cm panels)
- Fixed spelling errors:
- Page 2: Clear readable text for all concepts
- Page 3: Proper "METAcelium" formatting
- Page 7: Fixed garbled text, now reads correctly:
"TO GOVERN WITHOUT BEING GOVERNED"
"TO REVEAL WITHOUT BEING REVEALED"
"TO COORDINATE WITHOUT COERCION"
"TECHNOLOGY FOR COMMUNITIES, NOT CORPORATIONS"
- Improved visual consistency across all pages
- Generated using Gemini 2.0 Flash Exp
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Single-page print layout (2x4 grid) for 8-page zines
- Prompt templates for AI content/image generation
- Example Undernet zine pages
- Support for US Letter and A4 paper sizes
- CLI and programmatic API
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>