πŸ“» ECTLogger

ECTLogger

A Modern Radio Net Logger for Emergency Communications Teams and SKYWARN Spotter Nets

License: MIT

ECTLogger is a production-ready, web-based net logging application designed specifically for Emergency Communications Teams, SKYWARN spotter nets, and amateur radio net control operations. Built with modern technology, it provides real-time check-in tracking, multi-frequency support, and comprehensive net management capabilities.

Check-in Log

Multi-frequency/band check-ins, in dark and light mode! β€” πŸ“· More screenshots

✨ Features

πŸ”’ Security

ECTLogger implements comprehensive security measures to protect your data and prevent common vulnerabilities:

For complete security documentation, deployment best practices, and vulnerability reporting, see SECURITY.md.

For Fail2Ban setup instructions, see FAIL2BAN.md.

πŸš€ Quick Start

⚑ One-Line Install (Debian/Ubuntu)

Fresh system? Run this single command to download and install everything:

curl -fsSL https://raw.githubusercontent.com/bradbrownjr/ectlogger/main/bootstrap.sh | bash

This installs all prerequisites (Git, Python, Node.js), clones the repository, and runs the installer.

Linux/macOS (Manual)

# 1. Clone the repository
git clone https://github.com/bradbrownjr/ectlogger.git
cd ectlogger

# 2. Make scripts executable and install
chmod +x *.sh
./install.sh

# 3. Configure and start
./configure.sh
./start.sh

# 4. Open http://localhost:3000 and sign in!

Windows

# 1. Clone the repository
git clone https://github.com/bradbrownjr/ectlogger.git
cd ectlogger

# 2. Run the setup script
.\start.ps1

# 3. Open http://localhost:3000 and sign in!

See QUICKSTART.md for detailed instructions.

πŸ“š Documentation

Getting Started

Deployment

Configuration

Development

πŸ› οΈ Technology Stack

Technology

πŸ‘₯ User Roles

ECTLogger has two types of roles: global roles (system-wide) and net roles (per-net assignments).

Global Roles

Net Roles

When a user creates a net, they automatically become its NCS (Net Control Station). The net creator can then assign these roles to other users for that specific net:

This means any registered user can run their own nets without needing admin privileges. A user might be a regular participant in one net while serving as NCS for another.

🎯 Key Capabilities

Multi-Frequency Net Support

Net loggers typically track one frequency, but ECT and SKYWARN nets often move between frequencies to meet participants where they are. ECTLogger tracks:

Station Status Tracking

Visual indicators for:

Role Assignments

πŸ“‹ Net Workflow

1. Create Net

2. Schedule Net (Optional)

3. Start Net

4. Log Check-ins

5. Track Participation

6. Close Net

πŸ“ Check-in Fields

Required Fields

Custom Fields

πŸ–₯️ System Requirements

πŸ“¦ Installation

See MANUAL-INSTALLATION.md for complete installation instructions.

Quick Install

Linux/macOS:

chmod +x *.sh
./install.sh      # Automated installation
./configure.sh    # Interactive configuration
./start.sh        # Start the application

Optional: Install as systemd service (Linux):

./install-service.sh  # Install systemd service
sudo systemctl start ectlogger

Windows:

.\start.ps1       # Automated installation and startup

Manual Install

# 1. Install backend dependencies
cd backend
python3 -m venv venv
source venv/bin/activate  # Linux/macOS
# OR: .\venv\Scripts\Activate.ps1  # Windows
pip install -r requirements.txt

# 2. Install frontend dependencies
cd ../frontend
npm install

# 3. Configure environment
cp .env.example backend/.env
# Edit backend/.env with your settings

πŸ”„ Migration

Use migrate.sh (Linux/macOS) or migrate.ps1 (Windows) to change host addresses when moving between environments (e.g., LAN development to production) without modifying other configuration settings.

Quick Migration Examples

Linux/macOS:

# Production domain (with reverse proxy)
./migrate.sh --host ect.example.com

# LAN IP (development)
./migrate.sh --lan-ip 192.168.1.100

Windows PowerShell:

# Production domain (with reverse proxy)
.\migrate.ps1 -Host ect.example.com

# LAN IP (development)
.\migrate.ps1 -LanIP 192.168.1.100

The script automatically updates backend/.env and frontend/.env, and configures the Vite allowed hosts for security.

See PRODUCTION-DEPLOYMENT.md for complete deployment instructions.

πŸ”§ Configuration

Key configuration in backend/.env:

# Database
DATABASE_URL=sqlite:///./ectlogger.db

# Security (generate secure key!)
SECRET_KEY=your-secret-key-here

# Email (required for authentication)
SMTP_HOST=smtp.gmail.com
SMTP_USER=your-email@gmail.com
SMTP_PASSWORD=your-app-password

# Magic Link Configuration
MAGIC_LINK_EXPIRE_DAYS=30  # Valid for 30 days (great for long events!)

# Logging
LOG_LEVEL=INFO  # DEBUG, INFO, WARNING, ERROR

# OAuth (optional)
GOOGLE_CLIENT_ID=your-google-client-id
MICROSOFT_CLIENT_ID=your-microsoft-client-id
GITHUB_CLIENT_ID=your-github-client-id

🌐 API Documentation

When the backend is running, access interactive API documentation at:

πŸ§ͺ Testing

# Backend tests
cd backend
source venv/bin/activate  # Linux/macOS
# OR: .\venv\Scripts\Activate.ps1  # Windows
pytest

# Frontend tests
cd frontend
npm test

🚒 Production Deployment

  1. Set production environment variables
  2. Use PostgreSQL or MySQL database
  3. Configure SSL/TLS certificates
  4. Set up reverse proxy (nginx/Apache)
  5. Build frontend: npm run build
  6. Use production WSGI server (gunicorn)

See PRODUCTION-DEPLOYMENT.md for detailed deployment guide.

🀝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

This means you can:

With the requirement to:

πŸ™ Acknowledgments

Built for the amateur radio and emergency communications community.

Special thanks to all NCS operators, loggers, and participants who make emergency communication nets possible.

πŸ“ž Support

πŸ—ΊοΈ Roadmap

Future enhancements planned:

Stretch Goals

βœ… Tested Environments

Environment Status Notes
Debian Trixie βœ… Tested Python 3.13, production with Caddy reverse proxy
Windows Server ⬜ Untested Should work with PowerShell scripts
Host Migration βœ… Tested LAN to production domain migration

73 and stay safe! πŸ“»