A modern, comprehensive church resource management system built with React, Express.js, and PostgreSQL. Specifically designed for Watchman Catholic Charismatic Renewal Movement Lagos to strengthen connections through seamless digital experiences.
Watchman Catholic Charismatic Renewal Movement, Lagos: This is a comprehensive church resource management platform developed specifically for Watchman Catholic Charismatic Renewal Movement, Lagos.
- Video and audio sermon streaming
- Sermon series organization
- Speaker profiles and search
- Thumbnail management
- Download capabilities
- Community event calendar
- RSVP functionality
- Event categories and filtering
- Image galleries
- Location mapping integration
- Anonymous and authenticated submissions
- Prayer count tracking
- Community prayer support
- Privacy controls
- Request categorization
- Secure online giving platform
- Multiple payment methods
- Donation history tracking
- Recurring giving options
- Tax receipt generation
- Secure user registration/login
- Role-based access control
- Profile management
- Session management
- OAuth integration
- Church-specific color schemes
- Logo and image management
- Font customization
- Theme switching
- White-label solution
- React 18 - Modern UI framework
- TypeScript - Type-safe development
- Tailwind CSS - Utility-first styling
- Radix UI - Accessible component library
- Vite - Fast build tool
- React Query - Server state management
- Wouter - Lightweight routing
- Express.js - Web application framework
- Node.js - JavaScript runtime
- TypeScript - Type-safe server code
- Drizzle ORM - Type-safe database queries
- PostgreSQL - Robust database system
- Express Session - Session management
- ESBuild - Fast JavaScript bundler
- PostCSS - CSS processing
- Vercel - Deployment platform
- Node.js 18+
- PostgreSQL database
- Git
git clone git@github.com:Moses-main/WCCRM_Lagos.git
cd WCCRM_LagosNote: You're cloning the Watchman Catholic Charismatic Renewal Movement Lagos Church Resource Management platform.
npm installUse environment-specific files in the project root. The server automatically loads the file matching NODE_ENV:
- Development:
.env.development - Staging:
.env.staging - Production:
.env.production
You can copy from .env.example and update values per environment.
cp .env.example .env.development
cp .env.example .env.staging
cp .env.example .env.productionRoot environment template:
# Database Configuration
DATABASE_URL=postgresql://username:password@host:port/database?sslmode=require
# Authentication
SESSION_SECRET=your_secure_session_secret
JWT_SECRET=your_jwt_secret
APP_URL=http://localhost:5000
CLIENT_API_URL=http://localhost:5000/api
# Feature Flags
ENABLE_NOTIFICATIONS=true
ENABLE_WEBSOCKETS=true
ENABLE_ANALYTICS=false
# Optional: Object Storage
PUBLIC_OBJECT_SEARCH_PATHS=path1,path2
PRIVATE_OBJECT_DIR=your_private_directoryClient environment files live in client/.env.development, client/.env.staging, and client/.env.production and define:
VITE_API_URL/VITE_API_BASE_URLfor environment-specific API URLsVITE_WS_URLfor realtime socket URLVITE_FEATURE_NOTIFICATIONS,VITE_FEATURE_WEBSOCKETS,VITE_FEATURE_ANALYTICSfor frontend feature flags
# Create database tables
node setup-db.js
# Or use Drizzle migrations
npm run db:pushnpm run devVisit http://localhost:5000 to access the application.
- Setup Branding: Customize colors, fonts, and logos
- Add Content: Upload sermons, create events
- Manage Users: Configure roles and permissions
- Monitor Analytics: Track engagement and donations
- Browse Content: Watch sermons, view events
- Participate: RSVP to events, submit prayer requests
- Give: Make secure donations online
- Connect: Engage with community features
WCCRM_Lagos/
βββ client/ # React Frontend
β βββ src/
β β βββ components/ # Reusable UI components
β β βββ pages/ # Route components
β β βββ hooks/ # Custom React hooks
β β βββ lib/ # Utility libraries
β β βββ index.css # Global styles
β βββ index.html # HTML template
β
βββ server/ # Express Backend
β βββ index.ts # Server entry point
β βββ routes.ts # API route definitions
β βββ db.ts # Database configuration
β βββ storage.ts # Data access layer
β
βββ shared/ # Shared TypeScript types
β βββ schema.ts # Database schema
β βββ routes.ts # API route definitions
β
βββ setup-db.js # Database initialization
βββ package.json # Dependencies & scripts
npm run dev # Start development server
npm run build # Build for production
npm start # Start production server
npm run check # TypeScript type checking
npm run db:push # Push database schema changesGET /api/sermons- List all sermonsGET /api/sermons/:id- Get specific sermonPOST /api/sermons- Create new sermon (auth required)
GET /api/events- List all eventsGET /api/events/:id- Get specific eventPOST /api/events- Create new event (auth required)POST /api/events/:id/rsvp- RSVP to event (auth required)
GET /api/prayer-requests- List prayer requestsPOST /api/prayer-requests- Submit prayer request (auth required)POST /api/prayer-requests/:id/pray- Increment prayer count
POST /api/donations- Process donation
GET /api/branding- Get current brandingPOST /api/branding- Update branding (auth required)
The platform supports extensive theming through CSS custom properties:
:root {
--primary: 215 25% 27%; /* Deep Slate Blue */
--secondary: 210 40% 96%; /* Light Gray */
--accent: 262 83% 58%; /* Purple Accent */
/* ... more variables */
}Update church branding programmatically:
const branding = {
colors: {
primary: "#1e40af",
secondary: "#f8fafc",
accent: "#3b82f6"
},
fonts: {
heading: "Inter",
body: "Inter"
},
logoUrl: "https://example.com/logo.png"
};
await fetch('/api/branding', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(branding)
});- SQL Injection Protection - Parameterized queries with Drizzle ORM
- XSS Prevention - Input sanitization and CSP headers
- CSRF Protection - Token-based validation
- Secure Sessions - HTTP-only cookies with secure flags
- Environment Variables - Sensitive data protection
- Role-Based Access - Granular permission system
- Connect your GitHub repository to Vercel
- Configure environment variables in Vercel dashboard
- Vercel automatically builds and deploys
- Zero-configuration deployment
- Build the application:
npm run build - Serve
dist/folder with any web server - Configure database connection
- Set up SSL certificate
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
EXPOSE 5000
CMD ["npm", "start"]Run the app and Postgres with:
docker compose up --build -dThis uses:
Dockerfile(multi-stage production build)docker-compose.yml(app + postgres services)
For hot-reload development with mounted source and Postgres:
docker compose -f docker-compose.dev.yml up --buildThis starts:
- app dev server on
http://localhost:5000(API) and Vite onhttp://localhost:5173 - postgres on
localhost:5432
We welcome contributions to the WCCRM Lagos platform!
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes
- Commit changes:
git commit -m 'Add amazing feature' - Push to branch:
git push origin feature/amazing-feature - Open a Pull Request
This is Watchman Catholic Charismatic Renewal Movement Lagos' resource management system - all contributions are welcome!
- Follow TypeScript strict mode
- Use ESLint and Prettier
- Write meaningful commit messages
- Add tests for new features
- Update documentation
- Server-side rendering ready
- Image lazy loading
- Code splitting
- Database query optimization
- CDN-ready static assets
GET /health- Application health checkGET /api/stats- Usage statistics- Performance metrics via console logging
Use the scripted backup command:
DATABASE_URL=postgres://user:pass@host:5432/db npm run db:backupDefault behavior:
- writes compressed backups to
./backups - keeps last 30 days (
BACKUP_RETENTION_DAYS) - writes latest successful run marker to
./backups/latest-success.txt - optional failure alert webhook via
BACKUP_ALERT_WEBHOOK
Install the daily cron entry (2:00 AM):
bash ./scripts/install-backup-cron.shCron source file: scripts/backup.cron
Backups are stored locally by default. To upload to S3:
export S3_BACKUP_BUCKET=your-backup-bucket
export S3_BACKUP_PREFIX=community-hub
DATABASE_URL=postgres://user:pass@host:5432/db npm run db:backupRequires AWS CLI credentials with write access to the bucket.
Restore from a .sql or .sql.gz backup:
DATABASE_URL=postgres://user:pass@host:5432/db npm run db:restore -- ./backups/community_hub_backup_YYYYMMDD_HHMMSS.sql.gzVerify backup dump integrity before restore:
npm run db:test-restore -- ./backups/community_hub_backup_YYYYMMDD_HHMMSS.sql.gzDatabase Connection Failed
# Check DATABASE_URL format
export DATABASE_URL="postgresql://user:pass@host:port/db?sslmode=require"Port Already in Use
# Kill process on port 5000
lsof -ti:5000 | xargs kill -9Build Errors
# Clear cache and reinstall
rm -rf node_modules package-lock.json
npm installStyling Issues
# Rebuild Tailwind CSS
npm run buildThis project is licensed under the MIT License - see the LICENSE file for details.
- Built with love for church communities worldwide
- Inspired by the need for better digital community tools
- Special thanks to open-source contributors
For support and questions:
- Create an issue on GitHub
- Check the troubleshooting guide above
- Review the API documentation
Made with β€οΈ by Moses for WCCRM Lagos and church communities seeking to connect, grow, and serve together in the digital age.
π― WCCRM Lagos: This WCCRM platform is specifically designed for Watchman Catholic Charismatic Renewal Movement, Lagos, representing a complete, modern solution for church resource management and community engagement.
- Mobile application (React Native)
- Advanced analytics dashboard
- Multi-language support
- Live streaming integration
- Member directory
- Small groups management
- Volunteer scheduling
- Automated email campaigns
- Advanced reporting tools
- Third-party integrations (Zoom, Google Calendar)
- v1.0.0 - Initial release with core features
- v1.1.0 - Enhanced UI/UX and performance improvements
- v1.2.0 - Advanced authentication and role management
- v2.0.0 - Complete platform overhaul (current)