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 devFile: 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-detectionFile: 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
vercelOr 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 \
gitformsWith 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-stoppeddocker-compose up -dCost: 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 β