Commit Graph

45 Commits

Author SHA1 Message Date
Jeff Emmett 23ace0a7f3 fix: use RunPod US proxy for Nano Banana Pro to bypass geo-blocking
Routes Gemini API calls through RunPod serverless endpoint in the US
to avoid geo-blocking issues when server is in Germany.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 21:01:31 +01:00
Jeff Emmett fd1fc4e0df fix: use Nano Banana Pro directly without RunPod proxy
- Remove RunPod proxy dependency for image generation
- Call Gemini API directly with gemini-2.0-flash-exp-image-generation
- Keep enhanced prompt with text rendering instructions
- Use IMAGE-only response modality for better results

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 20:12:22 +01:00
Jeff Emmett b699b23082 feat: save zine prompts to localStorage for draft recovery
- Auto-save topic, style, and tone as user types
- Show "Saved Draft Found" banner on page load with restore option
- Clear draft automatically when zine creation completes
- Allows users to resume if they back out of the creation process

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 19:09:31 +01:00
Jeff Emmett 9eff93d275 fix: resize mask to match image dimensions for FLUX inpainting
The mask was generated at a fixed 768x1024 size but the actual page
image could be different dimensions, causing Fal.ai to return a 400
error. Now using sharp to resize the mask to match the image before
sending to the API.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-26 23:58:01 -05:00
Jeff Emmett ad530c6c40 feat: add keyboard shortcuts to text selection tool
- Enter key confirms selection when valid area is drawn
- Escape key cancels and closes the selector
- Updated button text to "Edit This Area ↵" for clarity
- Added help text showing keyboard shortcuts

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 23:12:34 -05:00
Jeff Emmett f09b1cc0b9 feat: add text inpainting for zine page refinement
- Add TextSelectionCanvas component for drawing rectangle selections
- Add inpaint-text API endpoint using Fal.ai FLUX Pro Fill
- Integrate "Edit Text Region" UI in the refine step
- Users can now select text areas and replace them without regenerating the full page

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 19:11:20 -05:00
Jeff Emmett c6eb3e5363 fix: use synchronous Fal.ai endpoint for FLUX img2img
The queue polling was timing out. Switch to fal.run synchronous
endpoint which waits for the result directly.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 19:59:51 -05:00
Jeff Emmett 7862a6bc22 chore: add FAL_KEY env var to docker-compose
Required for Fal.ai FLUX img2img in zine regeneration

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 16:48:21 -05:00
Jeff Emmett f78cf1d0cd feat: add FLUX img2img for zine page refinement
- Add Refine/Revise/Regenerate mode selection in zine creator
- Refine (0.25 strength): keeps most of image, minor tweaks
- Revise (0.5 strength): keeps composition, changes elements
- Regenerate: creates completely new image (existing behavior)
- Use Fal.ai FLUX dev model for img2img processing
- Better UX for iterative refinement without losing good work

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 16:44:26 -05:00
Jeff Emmett 19764d7df4 fix: subdomain-aware routing for zine pages
On zine.mycofi.earth, URLs should be /create not /zine/create.
Added useZinePath hook to adjust paths based on hostname.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 16:30:52 -05:00
Jeff Emmett 3309f7e5de fix: restore RunPod proxy for Nano Banana image generation
Direct Gemini API calls are geo-blocked in Germany. Must use
RunPod US proxy endpoint to bypass the restriction.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 16:26:22 -05:00
Jeff Emmett e011fb0c46 fix: use correct Gemini image generation model and API
Replace deprecated Imagen 3 and RunPod proxy with direct Gemini
2.0 Flash Image Generation API call. Removes unused model functions
and simplifies the image generation flow.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 15:05:26 -05:00
Jeff Emmett fd6f16f299 feat: add Imagen 3 as primary image generator
- Try Imagen 3 first (best quality, $0.03/image)
- Fall back to Gemini via RunPod if Imagen fails
- Uses 3:4 aspect ratio for portrait zine pages

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 13:08:46 -05:00
Jeff Emmett a5f067e5a6 feat: upgrade to gemini-2.0-flash-exp-image-generation model
- Use dedicated image generation model for better quality
- Add enhanced prompt instructions for better text rendering
- Use IMAGE-only responseModality for cleaner output

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 12:29:33 -05:00
Jeff Emmett 956ebb6dc7 fix: use RunPod Gemini proxy in generate-page route
The route was calling Gemini directly instead of using the US proxy.
Now uses the same RunPod endpoint as mycro-zine to bypass geo-blocks.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 02:01:24 -05:00
Jeff Emmett d2ea2c975e feat: use RunPod Gemini proxy for image generation (Nano Banana)
Route Gemini image generation through RunPod US-based serverless
endpoint to bypass geo-restrictions in Germany. Uses same approach
as zine.jeffemmett.com (mycro-zine).

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 01:38:39 -05:00
Jeff Emmett 6db1a2f016 feat: switch to RunPod Stable Diffusion for image generation
Gemini image generation is geo-blocked in Germany (server location).
Use RunPod's Automatic1111 endpoint instead for zine page images.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 01:24:55 -05:00
Jeff Emmett 7d0cf3b63f fix: improve JSON parsing robustness for outline generation
Handle trailing commas, control characters, and malformed responses.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 01:15:21 -05:00
Jeff Emmett d4437d421f Use newsletter-api for immediate welcome emails
Switches from direct Listmonk API to newsletter-api endpoint
which handles subscription + sends welcome email immediately.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 01:07:42 -05:00
Jeff Emmett b4c234d051 feat: use Gemini native image generation (Nano Banana Pro)
Switch from text fallback to actual image generation using
gemini-2.0-flash-exp-image-generation model with responseModalities.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 00:24:13 -05:00
Jeff Emmett e4d6172398 fix: add GEMINI_API_KEY environment variable for zine generation
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 00:05:56 -05:00
Jeff Emmett a284cca14b fix: add zine.mycofi.earth subdomain to Traefik routing
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 23:55:13 -05:00
Jeff Emmett c2480ee3c9 feat: add newsletter signup component and improve mirror workflow
- Add NewsletterSignup component with Listmonk integration
- Update Footer to accept className prop
- Fix GitHub→Gitea mirror workflow with better error handling
- Update Next.js to 15.5.9

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 23:05:03 -05:00
Jeff Emmett 832d464c7d fix: add data directory with permissions for zine storage
Create /app/data/zines directory in Dockerfile with nextjs user ownership
to fix EACCES permission denied error. Add persistent volume mount in
docker-compose.yml to preserve zine data across container restarts.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 22:17:59 -05:00
Jeff Emmett 81dfe33135 Add Open Graph and Twitter Card metadata for social sharing
- Add og-image.jpg (1200x630) for link previews
- Add metadataBase, openGraph, and twitter metadata to layout.tsx
- Improves SEO and social media link appearance

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 22:08:08 +01:00
Jeff Emmett 12a147fd61 fix: rename MycoZine to MycroZine across zine pages
Updated all branding references from MycoZine to MycroZine for
consistency with the mycro-zine project naming convention.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 01:30:26 -05:00
Jeff Emmett fa7cd1b9a2 feat: add middleware for zine.mycofi.earth subdomain routing
Routes zine.mycofi.earth root to /zine content so it works
like zine.jeffemmett.com - showing the zine generator directly.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 01:25:00 -05:00
Jeff Emmett da6aeb0581 chore: update pnpm lockfile with new dependencies
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 01:20:46 -05:00
Jeff Emmett 0743f6080d feat: add MycoZine - AI-powered mini-zine generator
- Add /zine landing page with topic input, style & tone selectors
- Add /zine/create page with full generation flow
- Add /zine/z/[id] shareable zine viewer
- Add API routes for outline generation, page creation, print layout
- Add Gemini AI integration for content generation
- Add Sharp for image processing and print layout creation
- Add punk zine styles (borders, text effects, xerox texture)
- Custom MycoFi styles: Mycelial style, Regenerative tone

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 01:16:53 -05:00
root 0844ae2ead Add Traefik labels for reverse proxy routing
- Configure service with Traefik labels for mycofi.earth
- Join traefik-public network for service discovery
- Remove direct port exposure (routing through Traefik now)
- Remove deprecated docker-compose version field

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 02:45:54 +01:00
Jeff Emmett ee51ac8baa feat: configure Docker deployment with Cloudflare Tunnel for Netcup hosting
Migrated from Cloudflare Pages to self-hosted Docker deployment on Netcup RS 8000 server.

- Add optimized multi-stage Dockerfile with Next.js standalone output
- Add docker-compose.yml for container orchestration (port 3003)
- Add Cloudflare Tunnel configuration for mycofi.earth routing
- Add .dockerignore for optimized build context
- Add comprehensive DEPLOYMENT.md with setup and troubleshooting guide
- Update next.config.mjs: change output from 'export' to 'standalone'

Architecture: Internet → Cloudflare Tunnel → Netcup RS 8000 → Docker Container

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 22:21:17 -08:00
Jeff Emmett 7da4937556 Add GitHub to Gitea mirror workflow
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 18:01:58 -08:00
v0 3bf1d7aa9f feat: remove Contact link from header navigation
Update main nav to LinkTree, Shop, and Read the Book.

#VERCEL_SKIP

Co-authored-by: Jeff Emmett <46964190+Jeff-Emmett@users.noreply.github.com>
2025-11-07 19:29:10 +00:00
v0 1a82b00da5 feat: add Mycopunk link & image, fix alignment
Center footer and content with proper centering and padding.

#VERCEL_SKIP

Co-authored-by: Jeff Emmett <46964190+Jeff-Emmett@users.noreply.github.com>
2025-11-05 21:45:34 +00:00
v0 4bde5160e4 fix: resolve footer text fading issue
Set footer z-index to 20 to prevent overlaying canvas.

#VERCEL_SKIP

Co-authored-by: Jeff Emmett <46964190+Jeff-Emmett@users.noreply.github.com>
2025-11-02 03:36:26 +00:00
v0 e28c6b1e8a fix: resolve footer text fading issue
Set footer z-index to 20 to prevent canvas overlap.

#VERCEL_SKIP

Co-authored-by: Jeff Emmett <46964190+Jeff-Emmett@users.noreply.github.com>
2025-11-02 03:21:33 +00:00
v0 c27bbe16c6 feat: enable smooth scroll for "Learn More" button
Add smooth scroll to "Learn More" button linking to MycoFi section.

#VERCEL_SKIP

Co-authored-by: Jeff Emmett <46964190+Jeff-Emmett@users.noreply.github.com>
2025-11-02 03:06:07 +00:00
v0 867004af6b feat: configure Next.js for static export on Cloudflare Pages
Add output: 'export' to next.config.mjs and set build command to npm run build with output directory out.

#VERCEL_SKIP

Co-authored-by: Jeff Emmett <46964190+Jeff-Emmett@users.noreply.github.com>
2025-10-13 01:48:05 +00:00
v0 3d738d5eb7 fix: ensure footer has maximum contrast and visibility
Replace transparent footer with solid white and change badge background for better opacity.

Co-authored-by: Jeff Emmett <46964190+Jeff-Emmett@users.noreply.github.com>
2025-10-08 20:24:13 +00:00
v0 d412dc2d05 feat: add "coming soon" shop page with email signup
Create stylish placeholder page for MycoFi shop with branding and email form.

Co-authored-by: Jeff Emmett <46964190+Jeff-Emmett@users.noreply.github.com>
2025-10-07 00:02:35 +00:00
v0 4600517d80 feat: relocate tagline to footer
Remove "Regenerative Economics" badge from hero and add to footer

Co-authored-by: Jeff Emmett <46964190+Jeff-Emmett@users.noreply.github.com>
2025-10-06 23:59:51 +00:00
v0 6f37b3662a feat: relocate tagline to footer
Remove hero badge and add to footer as tagline

#VERCEL_SKIP

Co-authored-by: Jeff Emmett <46964190+Jeff-Emmett@users.noreply.github.com>
2025-10-06 23:59:37 +00:00
v0 554ced5d09 feat: relocate tagline to footer
Remove hero badge and add to footer as tagline.

#VERCEL_SKIP

Co-authored-by: Jeff Emmett <46964190+Jeff-Emmett@users.noreply.github.com>
2025-10-06 23:59:22 +00:00
v0 bb5cf45156 feat: update color palette to vibrant greens
Switch from browns to emerald, forest, and lime greens for better style.

Co-authored-by: Jeff Emmett <46964190+Jeff-Emmett@users.noreply.github.com>
2025-10-06 23:26:36 +00:00
v0 00d8ccb4fc Initialized repository for project MycoFi website
Co-authored-by: Jeff Emmett <46964190+Jeff-Emmett@users.noreply.github.com>
2025-10-06 23:24:47 +00:00