Commit Graph

14 Commits

Author SHA1 Message Date
Jeff Emmett 2e855c8875 chore: add explicit GEMINI_PROXY_URL env variable
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 20:01:37 -05:00
Jeff Emmett 06dc335013 feat: add Cloudflare Worker proxy for Gemini image generation
- 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>
2025-12-18 19:45:31 -05:00
Jeff Emmett 779a0806a2 fix: correct image URL path to match API route
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>
2025-12-18 19:27:13 -05:00
Jeff Emmett 2099757b5d fix: update Gemini image generation to use correct API format
- 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>
2025-12-18 19:21:24 -05:00
Jeff Emmett b001e4eec8 fix: update Gemini model from 1.5-flash to 2.0-flash
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>
2025-12-18 19:11:34 -05:00
Jeff Emmett 584428d028 fix: use IPv4 address in healthcheck to fix Traefik detection
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>
2025-12-18 18:59:55 -05:00
Jeff Emmett 0c5f98b6fe fix: add public directory for Docker build 2025-12-18 18:16:17 -05:00
Jeff Emmett efc6b8158b feat: add prompt-to-print web app at zine.jeffemmett.com
Full-stack Next.js 15 web application for creating mycro-zines:

Features:
- Text or voice input for concept description
- Style/tone selection (punk-zine, minimal, collage, etc.)
- AI-powered outline generation via Gemini
- 8-page image generation with refinement loop
- Print-ready PNG download (300 DPI)
- Shareable zine URLs (/z/[id])

Tech stack:
- Next.js 15 with App Router
- Tailwind CSS v4 + Radix UI
- Gemini API for text and image generation
- Sharp for print layout assembly
- Docker + Traefik for deployment

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 17:55:39 -05:00
Jeff Emmett 2aa9dacfc4 feat: add timestamped filenames and --name flag for print layouts
- 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>
2025-12-15 19:16:46 -05:00
Jeff Emmett 10d9459990 feat: add QR code generator for zine CTAs
- 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>
2025-12-15 19:11:38 -05:00
Jeff Emmett 6b848ccd03 feat: regenerate all 8 zine pages with correct dimensions and fixed text
- 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>
2025-12-15 19:06:21 -05:00
Jeff Emmett 1ff7a68d4f fix: correct print layout for traditional mini-zine folding
- Paper orientation: landscape 11"x8.5" (US Letter rotated)
- Panel size: 7cm x 10.8cm (825x1275 pixels at 300 DPI)
- Layout: 4 columns x 2 rows
- Top row (upside down): pages 1, 8, 7, 6
- Bottom row (right side up): pages 2, 3, 4, 5
- Updated folding instructions in README

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 18:56:45 -05:00
Jeff Emmett 9987ea3722 chore: initialize backlog for task tracking
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 18:46:57 -05:00
Jeff Emmett d8b5c2cd88 feat: initial mycro-zine generator toolkit
- 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>
2025-12-15 18:37:45 -05:00