Zero-cost contact forms for your landing page - powered by GitHub Issues.
Every time someone submits your contact form, you receive an automatic email notification. No monthly fees, no external database.
GitForms = Free alternative to Typeform, Tally, and FormSpree
- β 100% Configurable without code (JSON files)
- β Automatic email notifications for every submission
- β Multilingual (IT/EN) with auto browser language detection
- β Customizable styling (colors, borders, shadows)
- β Customizable text (labels, messages, buttons)
- β Next.js 14 with App Router
- β TypeScript
- β Tailwind CSS
- β Deploy anywhere (Vercel, Netlify, Railway, Docker, AWS...)
- β Completely free
User fills form β Data saved to GitHub Issue β Email notification sent
# 1. Clone git clone https://github.com/Luigigreco/gitforms.git cd gitforms # 2. Install npm install # 3. Configure cp .env.example .env.local # Edit .env.local with your GITHUB_TOKEN and GITHUB_REPO # 4. Start npm run dev
File: config/theme.json
{
"colors": {
"primary": {
"DEFAULT": "#10b981", // Green instead of blue
"hover": "#059669",
"ring": "#34d399"
}
}
}Popular colors:
- Purple:
#8b5cf6,#7c3aed,#a78bfa - Orange:
#f97316,#ea580c,#fb923c - Pink:
#ec4899,#db2777,#f472b6
File: config/translations.json
{
"it": {
"title": "Richiedi Informazioni", // Change "Contattaci"
"fields": {
"company": "SocietΓ " // Change "Azienda" to "SocietΓ "
},
"buttons": {
"submit": "Richiedi Contatto" // Change button
}
}
}File: .env.local
NEXT_PUBLIC_DEFAULT_LOCALE=it # Force Italian # or NEXT_PUBLIC_DEFAULT_LOCALE=en # Force English # or remove for auto-detection
File: config/translations.json
{
"it": { ... },
"en": { ... },
"fr": {
"title": "Contactez-nous",
"subtitle": "Remplissez le formulaire...",
"fields": {
"firstName": "PrΓ©nom",
"lastName": "Nom",
"email": "Email",
"company": "Entreprise",
"message": "Message"
}
}
}Then update src/app/translations.ts:
export type Locale = 'it' | 'en' | 'fr'
| File | What You Configure |
|---|---|
config/theme.json |
Colors, borders, shadows, styling |
config/translations.json |
ALL text (title, fields, messages, buttons) |
.env.local |
GitHub token, repo, default language |
Edit only these 3 files = complete customization!
All fields are required:
- First Name
- Last Name
- Company
- Message
curl -X POST http://localhost:3000/api/contact \ -H "Content-Type: application/json" \ -d '{ "firstName": "Mario", "lastName": "Rossi", "email": "mario@example.com", "company": "ACME", "message": "Ciao" }'
Easiest for Next.js - 2 clicks, zero configuration.
# Install Vercel CLI (optional) npm i -g vercel # Deploy vercel
Or via Dashboard:
- Push to GitHub
- Import on vercel.com
- Add environment variables:
GITHUB_TOKENGITHUB_REPONEXT_PUBLIC_DEFAULT_LOCALE(optional)
- Auto deploy!
Free Tier: Unlimited for personal projects
Great Vercel alternative - 2 clicks, great free tier.
- Push to GitHub
- Import on netlify.com
- Build settings:
- Build command:
npm run build - Publish directory:
.next
- Build command:
- Environment variables:
GITHUB_TOKENGITHUB_REPONEXT_PUBLIC_DEFAULT_LOCALE(optional)
- Deploy!
Free Tier: 100GB bandwidth/month
Fast deploy with included databases - 3 clicks, good free tier.
- Push to GitHub
- Go to railway.app
- New Project β Deploy from GitHub
- Add environment variables (Dashboard β Variables)
- Railway auto-detects Next.js and deploys
Free Tier: 5γγ« credit/month (~500h runtime)
Alternative with free tier - Auto-sleep after inactivity.
- Push to GitHub
- New Web Service on render.com
- Connect repository
- Settings:
- Build Command:
npm install && npm run build - Start Command:
npm start
- Build Command:
- Environment variables:
GITHUB_TOKENGITHUB_REPO
Free Tier: Unlimited (with auto-sleep)
Full control - Deploy on any VPS/cloud.
# Build docker build -t gitforms . # Run docker run -p 3000:3000 \ -e GITHUB_TOKEN=your_token \ -e GITHUB_REPO=your_repo \ gitforms
With Docker Compose:
# docker-compose.yml version: '3.8' services: app: build: . ports: - "3000:3000" environment: - GITHUB_TOKEN=${GITHUB_TOKEN} - GITHUB_REPO=${GITHUB_REPO} - NEXT_PUBLIC_DEFAULT_LOCALE=it restart: unless-stopped
docker-compose up -d
Cost: VPS from 5γγ«/month (DigitalOcean, Hetzner, Linode)
Enterprise deployment - Auto-scaling, global CDN.
- Push to GitHub
- AWS Console β Amplify β New App
- Connect repository
- Build settings (auto-detected):
version: 1 frontend: phases: preBuild: commands: - npm install build: commands: - npm run build artifacts: baseDirectory: .next files: - '**/*' cache: paths: - node_modules/**/*
- Environment variables:
GITHUB_TOKENGITHUB_REPO
Free Tier: 1000 build minutes/month, 15GB storage
| Platform | Free Tier | Paid Cost |
|---|---|---|
| GitHub (storage) | β Unlimited | 0γγ« |
| GitHub (email) | β Unlimited | 0γγ« |
| Vercel | β Unlimited (personal) | 20γγ«/month (team) |
| Netlify | β 100GB bandwidth | 19γγ«/month (pro) |
| Railway | β 5γγ« credit/month | 5γγ«/month per 5γγ« usage |
| Render.com | β With auto-sleep | 7γγ«/month (always on) |
| Docker VPS | β | 5γγ«-20/month |
| AWS Amplify | β 1000 build min | Pay-as-you-go |
Recommendation: Vercel or Netlify for guaranteed 0γγ«/month.
| Feature | Vercel | Netlify | Railway | Render | Docker |
|---|---|---|---|---|---|
| Setup Time | 2 min | 2 min | 3 min | 5 min | 10 min |
| Free Tier | β Best | β Good | β Limited | β Auto-sleep | β |
| Auto Deploy | β | β | β | β | β Manual |
| Custom Domain | β | β | β | β | β |
| SSL/HTTPS | β Auto | β Auto | β Auto | β Auto | βοΈ Manual |
| Logs | β | β | β | β | βοΈ Manual |
| Scaling | β Auto | β Auto | β Auto | βοΈ Manual | βοΈ Manual |
// config/translations.json { "it": { "title": "Richiedi una Demo", "subtitle": "Compila il form per una demo personalizzata", "buttons": { "submit": "Richiedi Demo" } } } // config/theme.json { "colors": { "primary": { "DEFAULT": "#1e3a8a" } } } // Corporate blue
// config/translations.json { "it": { "title": "Hai Domande?", "fields": { "company": "Settore" }, "buttons": { "submit": "Invia Richiesta" } } } // config/theme.json { "colors": { "primary": { "DEFAULT": "#dc2626" } } } // Sales red
- Deployment Guide: See DEPLOYMENT.md for detailed platform guides
- Testing Guide: See TESTING.md for API testing
- Monetization Ideas: See MONETIZATION.md for revenue strategies
- SEO Setup: See SETUP_DISCOVERABILITY.md for marketing
CC-BY-NC-SA-4.0 (Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International)
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Key Terms:
- β Attribution - Credit must be given to Luigi Greco
- β NonCommercial - No commercial use without permission
- β ShareAlike - Derivatives must use the same license
See LICENSE file for full legal text.
https://github.com/Luigigreco/gitforms
Made with β€οΈ by Luigi Greco | Star us on GitHub β