AI-generated QSL cards for amateur radio operators. Enter your QSO details and get a photorealistic, print-ready QSL card generated by Google Gemini.
This is a monorepo with two independent implementations of the same idea:
| Directory | What it is | Stack |
|---|---|---|
web/ |
Interactive web app — step-by-step forms for station config, QSO details, and an AI background image, with a live card preview | Next.js, Gemini image generation |
api/ |
Headless HTTP API — one GET /generate endpoint that takes QSO data as query parameters and returns the finished card image |
Cloudflare Workers, Gemini image generation |
cd web
npm install
cp .env.example .env.local # add your Gemini API key
npm run devcd api
npm install
cp .dev.vars.example .dev.vars # add your Gemini API key
npm run devSee api/README.md for full endpoint documentation, parameters, and card styles (modern, minimal, vintage).
Both apps need a Google Gemini API key with image-generation access — get one at Google AI Studio. Keys live only in untracked local files (.env.local, .dev.vars) or Worker secrets (wrangler secret put GEMINI_API_KEY); never commit them.
MIT
73! 📡