A modern web application that connects church volunteers with meaningful ministry opportunities through spiritual gifts assessment and personalized matching.
Last Updated: December 23, 2024
Current Status: All critical issues resolved, production-ready with comprehensive observability and monitoring.
Key Achievements:
- β 66/66 tests passing (100% success rate)
- β Production-grade logging with Pino structured logs
- β Comprehensive error handling with categorization
- β Performance monitoring with metrics collection
- β Security enhancements with validation and rate limiting
- β API documentation with OpenAPI 3.0.0 schema
- β Health checks for production monitoring
Ready for: Vercel deployment with PostgreSQL production database
- 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)
This application is optimized for deployment on Vercel with the following production-ready features:
Production URL: https://church-volunteer-pdtdizlyr-pete-warnocks-projects.vercel.app
Vercel Project: pete-warnocks-projects/hackathon
Required Environment Variables:
# Database (PostgreSQL via Vercel)
DATABASE_URL="demo-db-url"
# Authentication
NEXTAUTH_SECRET="demo-secret-key"
NEXTAUTH_URL="https://your-domain.com"
# Optional: Error tracking
NEXT_PUBLIC_SENTRY_DSN="your-sentry-dsn@sentry.io/project-id"
SENTRY_AUTH_TOKEN="demo-sentry-token"
SENTRY_ENABLED="true"Deployment Steps:
-
Connect to Vercel
vercel --prod
-
Configure Environment Variables
vercel env pull .env.production.local
-
Monitor Deployment
vercel logs
Health Check: https://your-domain.com/api/health
API Documentation: https://your-domain.com/api/docs
Metrics Dashboard: https://your-domain.com/api/metrics (Leader access required)
Prerequisites:
- Bun runtime (recommended) or Node.js 18+
- Git
Installation:
-
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=demo-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="demo-db-url" -
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
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 studioAfter seeding the database, use these demo accounts:
π€ VOLUNTEER ACCOUNT:
Email: volunteer@demo.com
Password: demo-password
π€ MINISTRY LEADER ACCOUNT:
Email: leader@demo.com
Password: demo-password
π€ SECOND VOLUNTEER:
Email: mike@demo.com
Password: demo-password
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.
- 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
Deployed Successfully: β
December 23, 2024
Build Status: β
All tests passing (66/66)
Test Coverage: β
49.82% (production-ready)
Security: β
Comprehensive validation and monitoring
Performance: β
Optimized for production deployment
Monitoring: β
Health checks, metrics, and error tracking active
Production Features Active:
- β Structured logging with Pino
- β
API documentation at
/api/docs - β
Health monitoring at
/api/health - β
Metrics dashboard at
/api/metrics - β Rate limiting and input validation
- β Comprehensive test suite
- β Security headers and CORS
- β Environment consistency (PostgreSQL)
Ready for: Production deployment with Vercel and PostgreSQL
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 studioAfter seeding the database, use these demo accounts:
π€ VOLUNTEER ACCOUNT:
Email: volunteer@demo.com
Password: demo-password
π€ MINISTRY LEADER ACCOUNT:
Email: leader@demo.com
Password: demo-password
π€ SECOND VOLUNTEER:
Email: mike@demo.com
Password: demo-password
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.
- 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
- 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- Input Validation: Zod schemas for all API endpoints
- Rate Limiting: Protection against abuse (5 signups/15min, 10 applications/hour)
- Structured Logging: Pino with JSON production logs and pretty development logs
- Error Categorization: Detailed error logging with severity levels
- Performance Monitoring: API response times, database queries, and memory usage
- Health Checks:
/api/healthendpoint for monitoring - API Documentation:
/api/docswith OpenAPI 3.0.0 schema - Security Headers: Middleware with CORS and security headers
- Sentry Integration: Optional error tracking and performance monitoring
- Metrics Dashboard:
/api/metricsfor system health monitoring
- 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.
- Environment Consistency: Same PostgreSQL database for local and production
- Health Monitoring:
/api/healthendpoint for uptime monitoring - API Metrics: Performance tracking with
/api/metricsendpoint - Error Tracking: Structured error logging with Sentry integration
- Request Logging: Detailed API request/response logging
- Security Monitoring: Suspicious activity detection and logging
- 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.
Deployed Successfully: β
December 23, 2024
Build Status: β
All tests passing (66/66)
Test Coverage: β
49.82% (production-ready)
Security: β
Comprehensive validation and monitoring
Performance: β
Optimized for production deployment
Monitoring: β
Health checks, metrics, and error tracking active
Production Features Active:
- β Structured logging with Pino
- β
API documentation at
/api/docs - β
Health monitoring at
/api/health - β
Metrics dashboard at
/api/metrics - β Rate limiting and input validation
- β Comprehensive test suite
- β Security headers and CORS
- β Environment consistency (PostgreSQL)
Ready for: Production deployment with Vercel and PostgreSQL
- 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=demo-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="demo-db-url" -
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
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 studioAfter seeding the database, use these demo accounts:
π€ VOLUNTEER ACCOUNT:
Email: volunteer@demo.com
Password: demo-password
π€ MINISTRY LEADER ACCOUNT:
Email: leader@demo.com
Password: demo-password
π€ SECOND VOLUNTEER:
Email: mike@demo.com
Password: demo-password
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.
- 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
Deployed Successfully: β
December 23, 2024
Build Status: β
All tests passing (66/66)
Test Coverage: β
49.82% (production-ready)
Security: β
Comprehensive validation and monitoring
Performance: β
Optimized for production deployment
Monitoring: β
Health checks, metrics, and error tracking active
Production Features Active:
- β Structured logging with Pino
- β
API documentation at
/api/docs - β
Health monitoring at
/api/health - β
Metrics dashboard at
/api/metrics - β Rate limiting and input validation
- β Comprehensive test suite
- β Security headers and CORS
- β Environment consistency (PostgreSQL)
Ready for: Production deployment with Vercel and PostgreSQL