A complete web-based system for managing scout organizations - members, attendance, activities, and WhatsApp communications.
🚀 New Backend Version Will be Available!
We're continuously improving the codebase. A newer version of the backend is currently under development with enhanced features, improved performance, and better code organization. Stay tuned for updates!
- Features
- Technology Stack
- Project Structure
- Quick Start
- Configuration
- API Documentation
- Screenshots
- Contributing
- Support
- ✅ Add, edit, delete, and search scout members
- ✅ Auto-generated member codes (YYMMDD format)
- ✅ Categorization by age groups
- ✅ Phone and address validation
- ✅ Export member lists to PDF
- ✅ Scan QR codes to mark attendance
- ✅ Automatic late detection with configurable time windows
- ✅ Real-time attendance tracking
- ✅ Daily attendance reports
- ✅ Category-based attendance filtering
- ✅ Automatic late fee calculation
- ✅ Daily and monthly revenue reports
- ✅ Tax amount customization
- ✅ Financial export to PDF
- ✅ Revenue analytics
- ✅ Create and manage scout activities and events
- ✅ Activity status tracking (upcoming/completed)
- ✅ Location and description details
- ✅ Activity statistics dashboard
- ✅ Automated message sending to members
- ✅ Bulk messaging capabilities
- ✅ Message tracking and status
- ✅ Selenium-based WhatsApp Web automation
- ✅ PDF generation for all reports
- ✅ Member lists with filters
- ✅ Attendance summaries
- ✅ Financial statements
- ✅ Admin authentication system
- ✅ Database backup functionality
- ✅ Offline operation support
- ✅ Mobile hotspot compatibility
- ✅ RESTful API architecture
| Category | Technology |
|---|---|
| Backend | Java 17, Spring Boot 3.x |
| Database | SQLite |
| Frontend | Bootstrap 5.3, HTML5, CSS3, JavaScript |
| Automation | Selenium WebDriver |
| PDF Generation | jsPDF |
| Build Tool | Maven |
📦 scout-system
│
├── 📂 src/main/java/com/scout_system/
│ ├── 📂 controller/ # REST API Controllers (6 files)
│ │ ├── MemberController.java
│ │ ├── AttendanceController.java
│ │ ├── TaxController.java
│ │ ├── ActivityController.java
│ │ ├── WhatsAppController.java
│ │ └── AdminController.java
│ │
│ ├── 📂 service/ # Business Logic (7 services
│ │ ├── MemberService.java
│ │ ├── AttendanceService.java
│ │ ├── TaxService.java
│ │ ├── ActivityService.java
│ │ ├── WhatsAppSchedulerService.java
│ │ └── AdminService.java
| | └── DataCleanupScheduler.java
│ │ └── 📂 impl/
│ │ ├── MemberServiceImpl.java
│ │ ├── AttendanceServiceImpl.java
│ │ ├── TaxServiceImpl.java
│ │ ├── ActivityServiceImpl.java
| | └── AdminServiceImpl.java
│ ├── 📂 repository/ # JPA Repositories (5 files)
│ │ ├── MemberRepository.java
│ │ ├── AttendanceRepository.java
│ │ ├── TaxRepository.java
│ │ ├── ActivityRepository.java
│ │ └── AdminRepository.java
│ │
│ ├── 📂 model/ # Entity Models (5 entities)
│ │ ├── Member.java
│ │ ├── Attendance.java
│ │ ├── Tax.java
│ │ ├── Activity.java
│ │ └── Admin.java
│ │
│ ├── 📂 util/ # Configuration
│ │ ├── SecurityConfig.java
│ │ ├── DatabaseBackup.java
│ │ ├── LocalDateAttributeConverter.java
│ │ └── SQLiteConfig.java
│ │
│ └── 📄 ScoutSystemApplication.java
│
├── 📂 src/main/resources/
│ ├── 📄 application.properties
│ ├── 📄 logback-spring.xml
│ └── 📂 static/
│ ├── 📂 assets/
│ │ ├── 📂 css/ # Stylesheets
│ │ ├── 📂 img/ # Images & logos
│ │ ├── 📂 js/ # JavaScript modules (9 files)
│ │ ├── 📂 fonts/ # Fonts
│ │ ├── 📂 icons/ # Icons
│ └── ├── signIn.html # HTML pages (8 pages)
│ ├── register.html
│ ├── dashboard.html
│ ├── members.html
│ ├── attendance.html
│ ├── attendance-qr.html
│ ├── qr-checkin.html
│ ├── activities.html
│ ├── whatsapp.html
│ └── taxes.html
│
└── 📄 scout_system.db # SQLite database
├── 📄 pom.xml # Maven dependencies
├── 📄 .gitignore
└── 📄 README.md
- Java 17 or higher
- Maven 3.6+
- Google Chrome (for WhatsApp integration)
- ChromeDriver (compatible with your Chrome version)
- Clone the repository
git clone https://github.com/abanoubwagim/scout-management-system.git
cd scout-management-system- Build the project
mvn clean package- Run the application
java -jar target/scout-management-system-1.0.0.jar- Access the application
Open your browser and navigate to:
http://localhost:9090/signIn.html
- Login with default credentials
Username: admin
Password: admin123
- Register a new admin account at
http://localhost:9090/register.html - Login with your new credentials
- Start adding scout members
- Configure WhatsApp session (first-time QR scan required)
Edit src/main/resources/application.properties:
# Server Configuration
server.port=9090
# Database Configuration
spring.datasource.url=jdbc:sqlite:database/scout_system.db
spring.datasource.driver-class-name=org.sqlite.JDBC
spring.jpa.database-platform=org.hibernate.community.dialect.SQLiteDialect
# JPA Configuration
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=false
# WhatsApp Configuration
whatsapp.session.path=C:/whatsapp-session
whatsapp.chrome.driver.path=chromedriver.exeConfigure in AttendanceService.java:
// Scouts and Guides: 12:10 PM
// Cubs and Blossoms: 12:10 PM
// Buds: 11:40 AMBase URL: http://localhost:9090
POST /members/addMember
Content-Type: application/json
{
"code": "251201",
"fullName": "Abanoub Wagim",
"title": "Scout Member",
"dateOfBirth": "01/12/2025",
"phone": "01111111111",
"address": "Cairo, Egypt",
"category": "Scouts and Guides"
}Field Validations:
code: Exactly 6 digits (YYMMDD format)phone: 11 digits starting with "01"category: "Scouts and Guides" | "Cubs and Blossoms" | "Buds"title: "Scout Leader" | "Scout Assistant" | "Scout Member"
GET /members/allMembersGET /members/member/{code}PUT /members/update/{code}
Content-Type: application/json
{
"fullName": "Abanoub Wagim",
"title": "Scout Leader",
"dateOfBirth": "01/12/2025",
"phone": "01111111111",
"address": "New Address",
"category": "Scouts and Guides"
}DELETE /members/delete/{code}GET /members/getCountAllMemberGET /members/backupPOST /attendance/attend
Content-Type: application/json
{
"code": "251201",
"category": "Scouts and Guides"
}Response:
{
"id": 123,
"memberCode": "251201",
"category": "Scouts and Guides",
"checkInTime": "12:15:30 PM",
"dateOfDay": "2025-11-01",
"status": "Present",
"amount": -1
}GET /attendance/allAttendancePerTodayGET /attendance/presentTodayGET /attendance/absentTodayGET /attendance/lateTodayGET /attendance/scouts-and-guides
GET /attendance/cubs-and-blossoms
GET /attendance/budsGET /taxes/dailyTotalResponse:
[
{
"date": "01-11-2025",
"totalAmount": 150.0,
"day": "Friday"
}
]GET /taxes/monthlyTotalGET /taxes/totalRevenuePOST /taxes/updateAmount
Content-Type: application/json
{
"taxId": 15,
"amount": 10
}GET /taxes/today/scoutsAndGuides
GET /taxes/today/cubsAndBlossoms
GET /taxes/today/budsPOST /activities/addActivity
Content-Type: application/json
{
"name": "Annual Camp 2025",
"date": "25-12-2025",
"location": "Sinai Desert",
"description": "Week-long camping trip",
"status": "upcoming"
}GET /activities/allActivitiesDELETE /activities/delete/{id}POST /activities/completed/{id}GET /activities/totalActivity
GET /activities/upComingActivity
GET /activities/completedActivityPOST /whatsapp/send/{code}POST /whatsapp/send-allGET /whatsapp/pendingGET /whatsapp/pending/countPUT /whatsapp/reset/{code}GET /whatsapp/totalMessageSent| Code | Meaning | Usage |
|---|---|---|
| 200 | OK | Successful request |
| 204 | No Content | Successful but no data |
| 400 | Bad Request | Invalid input |
| 401 | Unauthorized | Authentication failed |
| 404 | Not Found | Resource doesn't exist |
| 500 | Internal Server Error | Server error |
Member Not Found
{
"error": "The Member doesn't exist."
}Duplicate Attendance
{
"error": "Member has already attended today for category: Scouts and Guides"
}Duplicate Member Code
{
"error": "The code already exists"
}This README documents the stable release version currently available in the repository.
We're actively working on an improved backend with:
- 🔧 Enhanced code architecture and organization
- ⚡ Performance optimizations
- 🛡️ Improved security features
- 🐛 Bug fixes and stability improvements
- 📊 Additional reporting capabilities
- 📝 Improved JavaScript codebase
Note: The new version maintains backward compatibility with existing data and configurations. Migration guides will be provided upon release.
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
For issues, questions, or feature requests:
- 📧 Email: abanoubwagim@gmail.com
- 🐛 Issues: GitHub Issues
- 💬 Discussions: GitHub Discussions
- Built with ❤️ for Mar-Mina Scouts in Egypt
If this project helped you, please consider giving it a ⭐!
Made with ❤️ for Scout Organizations Worldwide












