Built for the Church, by a follower of Christ
A comprehensive, self-hosted application for managing Vacation Bible School events, students, attendance, and schedules.
"Whatever you do, work at it with all your heart, as working for the Lord." — Colossians 3:23
I am a follower of Jesus Christ — my Lord and Savior who died on the cross for my sins and rose again three days later. I believe He is the only way to salvation and eternal life.
I built VBS App because I saw a need in the Church.
When I looked for software to help churches manage their Vacation Bible School programs, I found very few options — and most were either expensive, outdated, or didn't meet the real needs of church volunteers and staff. Churches shouldn't have to struggle with spreadsheets or pay high fees just to organize an event that shares the Gospel with children.
This is my offering to the Body of Christ.
VBS App is:
- 🆓 Free and open source — No licensing fees, ever
- ⛪ Built for churches — By someone who understands ministry
- 🔒 Self-hosted — Your data stays with your church
- 🛠️ Modern & maintainable — Built with current technology
- 🤝 Community-driven — Contributions welcome from fellow believers
My prayer is that this tool helps churches focus on what matters most: sharing the love of Jesus with the next generation.
"Let the little children come to me, and do not hinder them, for the kingdom of heaven belongs to such as these." — Matthew 19:14
- Student Management: Register and manage students with categories, sizes, and payment tracking
- Quick Check-In: Fast and efficient daily attendance tracking
- Schedule Management: Create and manage event schedules with sessions, locations, and groups
- Attendance Records: View and export attendance data
- Admin Panel: Configure events, users, categories, and application settings
- Role-Based Access Control: Admin, Staff, and Viewer roles
- Branding Customization: Customize church name, logo, colors, and contact info
- Modern Landing Page: Beautiful, responsive landing page with admin-configurable branding
- Google Forms Integration: Self-service student registration via Google Forms
- Reports Module: Export student lists, attendance, schedules, and enrollment reports
- Dashboard Analytics: Visual charts for categories, teachers, age distribution, and payments
- First-Launch Setup: Guided setup wizard for first-time installation
- Framework: Next.js 15 (App Router)
- Language: TypeScript
- Database: PostgreSQL with Prisma ORM
- Authentication: NextAuth.js v5 (Auth.js) with email magic links
- Styling: Tailwind CSS
- Validation: Zod
- Deployment: Docker & Docker Compose
- Node.js 20+ and npm
- Docker and Docker Compose (for database or full deployment)
- PostgreSQL 16+ (if not using Docker)
git clone <repository-url>
cd vbs-appnpm installCreate a .env file in the root directory:
# Database
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/vbsdb?schema=public"
# NextAuth
NEXTAUTH_URL="http://localhost:3000"
NEXTAUTH_SECRET="your-secret-here" # Generate with: openssl rand -base64 32
# Email (optional for development - magic links will be logged to console)
EMAIL_FROM="noreply@example.com"
EMAIL_SERVER_HOST="smtp.example.com"
EMAIL_SERVER_PORT="587"
EMAIL_SERVER_USER="your-email@example.com"
EMAIL_SERVER_PASSWORD="your-password"
EMAIL_SERVER_SECURE="false"Generate NEXTAUTH_SECRET:
- Windows (PowerShell):
[Convert]::ToBase64String((1..32 | ForEach-Object { Get-Random -Minimum 0 -Maximum 256 })) - Windows (Git Bash):
openssl rand -base64 32 - Mac/Linux:
openssl rand -base64 32
docker compose up -dThis starts only the PostgreSQL database in Docker.
npx prisma migrate devnpx tsx prisma/seed.tsnpm run devThe app will be available at http://localhost:3000 with hot reloading - changes will appear instantly without rebuilding!
-
Set up environment variables
Create a
.envfile with all required variables (see Quick Start section). -
Start the services
docker compose -f docker-compose.prod.yml up -d --build
-
Run database migrations
docker compose -f docker-compose.prod.yml exec app npx prisma migrate deploy -
Seed the database (optional)
docker compose -f docker-compose.prod.yml exec app npx tsx prisma/seed.ts
The app will be available at http://localhost:3000 (or your configured port).
-
Install dependencies
npm ci
-
Set up the database
- Create a PostgreSQL database
- Update
DATABASE_URLin.env - Run migrations:
npx prisma migrate deploy
-
Build the application
npm run build
-
Start the production server
npm start
- ADMIN: Full access to all features, including admin panel
- STAFF: Can manage students, attendance, and schedules
- VIEWER: Read-only access to view data
VBS App includes a setup wizard that automatically appears on first launch:
- Visit the app: Go to
http://localhost:3000 - Create admin account: You'll be redirected to
/setupto create the first admin - Sign in: Use your new credentials at
/auth/signin - Configure branding: Go to
/admin/settingsto customize:- Church name, address, contact info
- Logo upload
- Primary/secondary colors
- Social media links
- Welcome message
- Create an event: Go to
/admin/events/newto create your first VBS event - Set active event: Mark the event as active in
/admin/events - (Optional) Enable Google Forms: Go to
/admin/integrations/google-formsfor self-service registration
vbs-app/
├── prisma/
│ ├── schema.prisma # Database schema
│ ├── migrations/ # Database migrations
│ └── seed.ts # Seed script
├── src/
│ ├── app/
│ │ ├── admin/ # Admin panel pages
│ │ │ ├── integrations/ # Google Forms, etc.
│ │ │ ├── settings/ # Branding & settings
│ │ │ └── ...
│ │ ├── auth/ # Authentication pages
│ │ ├── setup/ # First-launch setup wizard
│ │ ├── students/ # Student management
│ │ ├── reports/ # Reports module
│ │ ├── dashboard/ # Dashboard with analytics
│ │ └── api/ # API routes
│ │ └── webhooks/ # Google Forms webhook
│ ├── components/ # React components
│ └── lib/ # Utilities & configurations
├── Docs/
│ ├── GOOGLE_FORMS_INTEGRATION.md
│ ├── PRODUCTION_ENV_EXAMPLE.md
│ ├── PRODUCTION_ROADMAP.md
│ └── ...
├── docker-compose.yml # Development (database only)
├── docker-compose.prod.yml # Production deployment
├── docker-compose.traefik.yml # Production with auto-SSL
├── Dockerfile # Production Docker image
└── README.md
npx prisma migrate devnpx prisma studionpx prisma migrate resetFor production, configure SMTP settings in your .env file. The app supports any SMTP provider (Gmail, SendGrid, AWS SES, etc.).
In development mode, if email is not configured, magic links will be logged to the console instead of being sent via email.
- All user inputs are validated using Zod schemas
- SQL injection protection via Prisma ORM
- XSS protection with HTML escaping
- CSRF protection via NextAuth and Next.js Server Actions
- Rate limiting on authentication endpoints
- Security headers configured
- Account lockout after failed login attempts
- Role-based access control (RBAC)
- IDOR protection on all resources
- Webhook secret validation for Google Forms integration
- Image upload validation and size limits
See Docs/SECURITY_COMPLETE.md for detailed security documentation.
For production deployments, we recommend:
- Cloudflare Tunnel - No open ports on your router
- HTTPS only - Auto-SSL via Traefik or Cloudflare
- Strong passwords - Enforce via the built-in password policy
- Regular backups - Database backups before updates
Contributions are welcome! Please see our Contributing Guide for details on how to contribute to this project.
Please note that this project adheres to a Code of Conduct. By participating, you are expected to uphold this code.
This project is licensed under the MIT License - see the LICENSE file for details.
For issues, questions, or contributions, please open an issue on the GitHub repository.
Parents can register students via a Google Form that automatically syncs to VBS App.
- Enable in Admin → Google Forms
- Create a Google Form with student fields
- Add the provided Apps Script
- Students appear automatically in VBS App!
See Docs/GOOGLE_FORMS_INTEGRATION.md for detailed setup instructions.
- Cloudflare Tunnel (Recommended) - Zero open ports, free SSL
- Traefik Reverse Proxy - Auto SSL with Let's Encrypt
- Docker Compose - Standard container deployment
See Docs/PRODUCTION_ENV_EXAMPLE.md for configuration details.
- Google Forms integration
- Advanced reporting and analytics
- Dashboard with charts and stats
- Email notifications
- Mobile app / PWA
- Multi-language support
- Planning Center integration
- Online payment processing