A modern web application that connects church volunteers with meaningful ministry opportunities through spiritual gifts assessment and personalized matching.
- Role-based Authentication: Volunteers and Ministry Leaders
- Secure Sign Up/Sign In: NextAuth.js with JWT strategy
- Profile Management: Skills, interests, and availability tracking
- 5-Step Interactive Assessment: Scripture-based questions
- Biblical Context: Each gift includes scriptural foundation
- Personalized Results: Detailed analysis with practical applications
- 12 Spiritual Gifts: Teaching, Shepherding, Service, and more
- Browse Opportunities: Filter by ministry, location, and requirements
- Apply with Purpose: Personalized applications with message
- Leader Dashboard: Create and manage volunteer opportunities
- Application Review: View and respond to volunteer applications
- Opportunity Creation: Detailed forms with requirements and scheduling
- Application Management: Review volunteer applications
- Volunteer Recruitment: Target specific spiritual gifts and skills
- Runtime: Bun (primary) / Node.js 18+ (fallback)
- Frontend: Next.js 16, React 19, TypeScript
- Styling: Tailwind CSS
- Authentication: NextAuth.js with JWT
- Database: PostgreSQL with Prisma ORM (local & production)
- UI Components: Lucide React icons
- Password Hashing: bcryptjs
- Package Manager: Bun for optimal performance
- Deployment: Vercel (Next.js deployment platform)
- Bun runtime (recommended) or Node.js 18+
- Git
-
Clone the repository
git clone https://github.com/pwarnock/church-volunteer-app.git cd church-volunteer-app -
Install dependencies
bun install # or npm install if Bun not available -
Set up PostgreSQL database
Option A: Docker (recommended)
docker run --name church-volunteer-db \ -e POSTGRES_PASSWORD=password \ -p 5432:5432 \ postgres:15 -d # Create the database docker exec church-volunteer-db createdb -U postgres church_volunteer
Option B: Native PostgreSQL
createdb church_volunteer
-
Set up environment variables
cp .env.example .env.local # Edit .env.local with your PostgreSQL connectionFor local development, use:
DATABASE_URL="postgresql://postgres:password@localhost:5432/church_volunteer" -
Initialize database
bunx prisma db push
-
Seed demo data
bunx tsx prisma/seed.ts
-
Start development server
bun run dev
-
Open your browser Navigate to http://localhost:3000
After seeding the database, use these demo accounts:
π€ VOLUNTEER ACCOUNT:
Email: [email protected]
Password: password123
π€ MINISTRY LEADER ACCOUNT:
Email: [email protected]
Password: password123
π€ SECOND VOLUNTEER:
Email: [email protected]
Password: password123
src/
βββ app/ # Next.js App Router
β βββ api/ # API routes
β β βββ auth/ # Authentication endpoints
β β βββ opportunities/ # Opportunity management
β β βββ applications/ # Application handling
β βββ auth/ # Authentication pages
β βββ volunteer/ # Volunteer features
β βββ leader/ # Ministry leader features
β βββ dashboard/ # User dashboard
βββ components/ # Reusable React components
βββ lib/ # Utility libraries
βββ types/ # TypeScript type definitions
βββ data/ # Static data (spiritual gifts)
- Sign Up β Create account with role selection
- Spiritual Assessment β Complete 5-step gifts assessment
- View Results β Understand spiritual gifts with biblical context
- Browse Opportunities β Find matching ministry opportunities
- Apply β Submit personalized applications
- Manage Profile β Update skills, interests, availability
- Sign Up β Create ministry leader account
- Create Opportunities β Post volunteer positions with requirements
- Review Applications β View and manage volunteer applications
- Recruit β Connect with qualified volunteers
bun run dev # Start development server
bun run build # Build for production
bun run start # Start production server
bun run lint # Run ESLint
bun run lint:fix # Fix ESLint issues
bun run format # Format code with Prettierbunx prisma studio # Open database browser
bunx prisma db push # Sync schema to database
bunx prisma generate # Generate Prisma clientbun test # Run unit tests with Vitest
bun test:coverage # Generate coverage report
bun test:bdd # Run BDD tests with Cucumber
bun test:e2e # Run E2E tests with Playwright
bun test:e2e:ui # Run E2E tests with UI dashboard
bun test:e2e:debug # Run E2E tests in debug modeSee BDD_TESTING.md, E2E_TESTING.md, and ACCESSIBILITY.md for detailed testing documentation.
Local development uses the same PostgreSQL database as production (Vercel Postgres). This ensures:
- No environment-specific code paths
- Dev behavior matches production behavior
- Easier debugging and testing
- Schema is consistent across all environments
To manage your local PostgreSQL container:
# Start the container (if stopped)
docker start church-volunteer-db
# Stop the container
docker stop church-volunteer-db
# View database
bunx prisma studio- Biblically Grounded: Each assessment question based on Scripture
- Comprehensive Results: 12 spiritual gifts with detailed explanations
- Practical Application: How to apply gifts in ministry contexts
- 5-Step Interactive Flow: User-friendly assessment experience
- Gift-Based Matching: Opportunities aligned with spiritual gifts
- Skill Filtering: Match based on experience and availability
- Ministry Categories: Children, youth, outreach, worship, etc.
- Personalized Recommendations: AI-driven opportunity suggestions
- Volunteer View: Browse, apply, manage profile
- Leader View: Create opportunities, review applications
- Admin Features: User management and system oversight
- Secure Authentication: JWT-based session management
- Password Hashing: bcryptjs (12 salt rounds) for secure password storage
- JWT Authentication: NextAuth.js with secure session management
- Input Validation: Server-side validation for all forms and comprehensive security tests
- Role Protection: Route guards for different user types
- XSS Prevention: HTML escaping and input sanitization
- SQL Injection Prevention: Prisma ORM with parameterized queries
- Pre-commit Hooks: ESLint, Prettier, and TypeScript type checking before commits
Security practices are validated in src/__tests__/security.test.ts.
- Mobile app development (React Native)
- Advanced matching algorithms with ML
- Volunteer scheduling system
- Ministry analytics dashboard
- Email/SMS notifications
- Multi-church support
- Integration with church management systems
- Real-time chat for volunteers and leaders
- Background check integration
- Volunteer hour tracking system
- Fork the repository
- Create a feature branch
git checkout -b feature/amazing-feature
- Install dependencies and make changes
bun install # Make your changes... - Commit your changes
git commit -m 'Add amazing feature' - Push to the branch
git push origin feature/amazing-feature
- Open a Pull Request with detailed description
- Follow the code style in AGENTS.md
- Use Bun for package management
- Pre-commit hooks run ESLint, Prettier, and TypeScript type checking automatically
- Write tests for new features (unit, BDD, or E2E as appropriate)
- Test your changes thoroughly using
bun test,bun test:bdd, orbun test:e2e - Update documentation as needed
- Ensure accessibility compliance with WCAG 2.1 AA standards
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with β€οΈ for church communities
- Inspired by the need to connect volunteers with meaningful service
- Spiritual gifts based on biblical principles and modern ministry practices
π Connect volunteers with their calling. Equip ministries with passionate servants. Build stronger church communities.