The ultimate open-source tool to craft stunning project covers in seconds β designed for developers who care about first impressions on GitHub, YouTube, and beyond.
GitGlow is a browser-based cover image generator built with Next.js 16 and React 19. It provides a live, interactive editor where you pick a template, customize every visual property β colors, typography, icons, images β and export a pixel-perfect cover in PNG, JPEG, or SVG format with a single keystroke.
No design skills required. No Figma. Just open the app, tweak, and export.
- π¨ Multi-template library: Choose from categorized cover templates organized by style category.
- β‘ Real-time live preview: Every change is reflected instantly in the preview canvas, scaled to fit your viewport.
- πΌοΈ Multi-format export: Download your cover as PNG, JPEG, or SVG in high quality. Trigger the export with the
Ekeyboard shortcut. - π Google Fonts picker: Browse and apply any Google Font directly in the editor. Fonts are fetched via the Google Fonts API, cached for 24 hours, and embedded as data URLs in the exported file for full offline fidelity.
- π 3D animated preview: The preview card reacts to mouse movement with a spring-based 3D tilt effect (Framer Motion). Toggle the animation on or off at any time.
- π Dual theme preview: Switch the app between dark and light mode, and independently toggle the preview canvas between light and dark rendering.
- ποΈ Per-template field system: Each template exposes its own typed fields β text, textarea, color picker, icon selector, image upload, combobox, and select β all managed through a unified settings panel.
- ποΈ Custom color theming: Pick any accent color to drive the template's theme using the built-in color input.
- π£ Icon picker: Add Simple Icons directly into your cover design, with drag-and-drop reordering powered by
@dnd-kit. - π Image upload: Upload your own custom screenshots or visuals directly into supported templates.
- π Zoom control: Zoom the preview in and out with smooth spring animation to inspect details at any scale.
- β©οΈ Reset controls: Reset all fields to their template defaults or wipe them entirely with dedicated action buttons.
- π± Responsive layout: The editor adapts gracefully to mobile viewports, disabling 3D tilt interactions on touch devices.
gitglow/
βββ app/ # Next.js App Router (layout, page)
βββ components/
β βββ Header/ # App header: logo, theme toggle, GitHub stars
β βββ Input/ # Field input primitives (Color, Font, Icon, Image)
β βββ Preview/ # Preview canvas, export button, zoom, animation toggle
β βββ Settings/ # Settings panel: template list, form, reset actions
β βββ ui/ # Base UI components (shadcn + custom)
βββ data/
β βββ template-definitions.ts # Template schema and field type definitions
β βββ templates.tsx # Template components and category registry
βββ hooks/
β βββ useCover.ts # Global Zustand store for all editor state
β βββ useCurrentTemplate.ts # Resolves the active template component
β βββ ... # Utility hooks (media query, mobile, confirm)
βββ lib/
β βββ fonts.ts # Google Fonts API client with 24h cache + embed CSS
β βββ keyboard-shortcut.ts # Keyboard shortcut handler factory
β βββ utils.ts # cn() and general utilities
βββ provider/
β βββ theme-provider.tsx # next-themes provider
βββ public/
βββ templates/ # Pre-rendered SVG previews (dark + light variants)
- Bun >= 1.0 (install)
- A Google Fonts API key (get one here)
git clone https://github.com/LenySauzet/gitglow.git
cd gitglow
bun installCopy the example file and fill in your API key:
cp .env.example .env.local.env.local:
NEXT_PUBLIC_GOOGLE_FONTS_API_KEY="your-google-fonts-api-key"The Google Fonts API key is required to populate the font picker. Without it, font selection will not work, but the rest of the editor remains fully functional.
bun devThe app is available at http://localhost:3000.
bun run build
bun startContributions are welcome. If you find a bug, have a feature idea, or want to add a new template, feel free to:
- Open an issue to discuss the change before starting work.
- Fork the repository and create a feature branch.
- Submit a pull request with a clear description of what was changed and why.
Please keep PRs focused and scoped to a single concern. Code style follows the existing ESLint and TypeScript configuration.
This project is licensed under the MIT License.
