AI Transparency Notice: This software was developed with AI assistance as a productivity augmentation tool. AI was used for code suggestions, documentation improvements, and architectural planning assistance. All AI-generated content was reviewed, tested, and approved by human developers before inclusion.
A secure, flexible check-in/check-out system for youth organizations including Trail Life, scouting groups, churches, schools, and community programs. Features family management, event tracking, QR code checkout, label printing, and comprehensive security controls.
- Quick Check-in: Fast family lookup by phone number (last 4 digits)
- Event Selection: Auto-populated from iCal feeds or manual entry
- Kid Selection: Multi-kid check-in with one tap
- Status Tracking: Real-time check-in/check-out status with timestamps
- History View: Complete check-in history with filtering
- Multiple Authentication Levels: App password, admin override, developer password
- Checkout Codes: QR codes or printed labels for secure pickup
- Authorized Adults: Track who can pick up each child
- Developer Password: Backup access via environment variable
- Session Security: Encrypted session management
- Password Hashing: PBKDF2-SHA256 hashing with strong password requirements
- Rate Limiting: Max 5 login attempts per minute per IP address
- Account Lockout: 15-minute lockout after 5 failed attempts
- Encrypted Database: SQLCipher AES-256 encryption at rest
- Field-Level Encryption: Sensitive data encrypted with Fernet
- Searchable Name Hashes: Partial name search without decryption (tokenized SHA-256)
- Family Records: Store families with adults and children
- Improved Data Entry: Clear, intuitive Add/Edit Family pages with helpful examples and context
- Group Assignment: Organize by troop/den/class/group
- CSV Import/Export: Bulk import families, export for backup
- Flexible Import: Supports multiple CSV column name variations
- Notes Field: Track allergies, special needs, emergency info
- Organization Details: Name, type, group terminology
- Color Schemes: Primary, secondary, and accent colors
- Logo Upload: PNG, JPG, or SVG logos (auto-sized)
- Favicon Support: Custom browser tab icons
- Setup Wizard: First-run configuration guide
- Dark Mode: Toggle between light and dark themes (persisted in browser)
Two Strict Modes (choose one per event):
- Random 5-Digit Codes: System generates unique codes during check-in
- Delivered via QR code (scan with phone) or printed labels
- Dual Mode: Support both QR and labels simultaneously
- Custom Labels: Three-line configurable text with family/event info
- Phone-Based Codes: Uses last 4 digits of phone number as code
- No generation needed, fast checkout
- Simple and efficient for smaller groups
- iCal Import: Auto-import from Google Calendar, Outlook, etc.
- Manual Entry: Create, edit, and delete events directly in the system
- Bulk Operations: Clear all events with one click
- Date Range Control: Configurable event dropdown (Β±1 to Β±12 months)
- Event History: Track attendance across events
- AES-256 Encrypted Backups: Protect sensitive child data with built-in encryption
- Scheduled Backups: Automatic hourly, daily, weekly, or monthly backups
- Email Delivery: Automatically email backups to configured recipients
- Configuration Export: JSON backup of all settings
- Configuration Import: Restore settings from backup
- Family Export: CSV export of all family data
- History Export: CSV export of all check-in/check-out records
- Disaster Recovery: Complete backup/restore workflow
All instances now require encryption keys. New deployments include them automatically. Existing users upgrading from v1.0.0 or v1.0.1: Migration is automatic on startup - just add encryption keys to .env! See DOCKER_ENCRYPTION_MIGRATION.md for details.
Deploy in 30 seconds with Docker:
# Create a directory and required folders
mkdir youth-checkin && cd youth-checkin
mkdir -p data uploads
# Download docker-compose.yml
curl -O https://raw.githubusercontent.com/mrcrunchybeans/youth-secure-checkin/master/docker-compose.yml
# Create .env file with your secrets AND encryption keys
cat > .env << EOF
SECRET_KEY=$(openssl rand -hex 32)
DEVELOPER_PASSWORD=your-secure-password
DB_ENCRYPTION_KEY=$(openssl rand -hex 32)
FIELD_ENCRYPTION_KEY=$(python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())")
EOF
# Start the application
docker compose up -d
# Verify it's running
docker compose logs
# Access at http://localhost:5000Note: Use docker compose (with space), not docker-compose (with hyphen).
Quick Reference: See DOCKER_ENCRYPTION_QUICK_REF.md for common commands.
Try the Demo:
docker compose --profile demo up -d
# Demo login: demo123 / demo2025
# Test families: Phone numbers 555-0101 through 555-0108See DOCKER.md for complete deployment guide.
For development or custom deployments:
-
Prerequisites: Python 3.10+, pip, Git
-
Clone and setup
git clone https://github.com/mrcrunchybeans/youth-secure-checkin.git cd youth-secure-checkin python -m venv venv venv\Scripts\activate # Windows # source venv/bin/activate # Linux/Mac pip install -r requirements.txt
-
Configure
cp .env.example .env # Edit .env and set SECRET_KEY and DEVELOPER_PASSWORD -
Initialize and run
python -c "from app import init_db; init_db()" python app.py # Open http://localhost:5000
Complete first-time setup wizard, then start checking in families!
- Docker Guide - Docker deployment (recommended)
- Encryption Migration Guide - Automatic encryption setup (v1.0.2+)
- Encryption Quick Reference - Common encryption commands
- Security Guide - Security best practices and encryption architecture
- Deployment Checklist - Production hosting guide
- FAQ - Frequently asked questions
- Contributing Guide - How to contribute
This system is perfect for:
- Trail Life USA troops and outposts
- Scouting organizations (BSA, Girl Scouts, etc.)
- Churches (children's ministry, youth groups)
- Schools (after-school programs, clubs)
- Community centers (sports teams, activities)
- Childcare facilities (daycare, preschool)
- Any organization tracking youth attendance
On first run, you'll complete a 4-step setup wizard:
- Organization Details: Name, type, group terminology
- Color Scheme: Primary, secondary, accent colors
- Access Code: Set the main login password
- Event Settings: Configure event date range
Access comprehensive settings at /admin:
- Families: Add, edit, import, export family records
- Events: Import from iCal or create manually
- Security: Access codes, checkout codes, label settings
- Branding: Logo, favicon, colors, organization details
- Backup & Restore: Export/import configuration
Click to collapse screenshots
| Main Kiosk | Family Selection |
|---|---|
![]() |
![]() |
| QR Code Checkout | Secure Checkout |
|---|---|
![]() |
![]() |
| Admin Dashboard | Event Management |
|---|---|
![]() |
![]() |
| Family Management | Edit Family Details |
|---|---|
![]() |
![]() |
| Branding Settings | Attendance History |
|---|---|
![]() |
![]() |
- Backend: Flask 3.0 (Python web framework)
- Database: SQLite (embedded, zero-config)
- Frontend: Bootstrap 5.3 + vanilla JavaScript
- QR Codes: qrcode library with Pillow
- Label Printing: Brother QL series support
- Calendar Import: icalendar + pytz
- CSV Processing: Native Python csv module
See requirements.txt for full dependency list:
- Flask==3.1.1
- icalendar==6.1.0
- requests==2.32.4
- qrcode==8.0
- Pillow==11.0.0
- python-dotenv==1.0.1
- gunicorn==23.0.0 (for production)
- cryptography==41.0.7 (encryption)
- pysqlcipher3==1.2.0 (database encryption)
Pull pre-built images from Docker Hub:
# Always specify the profile!
docker compose up -dSee DOCKER.md for complete guide.
- DigitalOcean, Linode, Vultr: Ubuntu + Docker
- AWS, Google Cloud, Azure: Container services
- SSL: Use Caddy or Cloudflare Tunnel for automatic HTTPS
See DEPLOYMENT_CHECKLIST.md for hosting guides.
- Railway: Docker support with automatic SSL
- Render: Docker deploy from GitHub
- Fly.io: Global edge deployment
- Heroku: Use included Procfile
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Built for Trail Life WI-4603, adapted for universal use
- Bootstrap for the responsive UI framework
- Flask community for excellent documentation
- All contributors and users providing feedback
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Docker Hub: mrcrunchybeans/youth-secure-checkin
For security concerns, please see SECURITY.md or open a private security advisory on GitHub.
Made with β€οΈ for youth organizations everywhere










