# Great Lakes Ice Report A community-driven web application for tracking winter road conditions and icy hazards in the Great Lakes region. Reports automatically expire after 48 hours to maintain current information. ## Features - πŸ—ΊοΈ **Interactive Map** - Real-time location tracking centered on Grand Rapids - ⚑ **Fast Geocoding** - Lightning-fast address lookup with MapBox API - πŸ”„ **Auto-Expiration** - Reports automatically removed after 24 hours - πŸ‘¨β€πŸ’Ό **Admin Panel** - Manage and moderate location reports - πŸ“± **Responsive Design** - Works on desktop and mobile devices - πŸ”’ **Privacy-Focused** - No user tracking, community safety oriented ## Quick Start ### Prerequisites - Node.js 18+ - MapBox API token (free tier available) ### Local Development 1. **Clone the repository:** ```bash git clone git@github.com:deco/great-lakes-ice-report.git cd great-lakes-ice-report ``` 2. **Install dependencies:** ```bash npm install ``` 3. **Configure environment variables:** ```bash cp .env.example .env # Edit .env with your MapBox token ``` 4. **Start the server:** ```bash npm start ``` 5. **Visit the application:** ``` http://localhost:3000 ``` ## Environment Variables ```bash # Required for fast geocoding MAPBOX_ACCESS_TOKEN=pk.your_mapbox_token_here # Admin panel access ADMIN_PASSWORD=your_secure_password # Server configuration PORT=3000 ``` ## Deployment ### Automated Deployment (Debian 12 ARM64) 1. **Run the deployment script on your server:** ```bash curl -sSL https://ice.puremichigan.lol/scripts/deploy.sh | bash ``` 2. **Deploy your application:** ```bash git clone git@github.com:deco/great-lakes-ice-report.git /opt/great-lakes-ice-report cd /opt/great-lakes-ice-report npm install ``` 3. **Configure environment:** ```bash cp .env.example .env nano .env # Add your API keys ``` 4. **Start services:** ```bash sudo systemctl enable great-lakes-ice-report sudo systemctl start great-lakes-ice-report sudo systemctl enable caddy sudo systemctl start caddy ``` ### Manual Deployment See `docs/deployment.md` for detailed manual deployment instructions. ## API Endpoints - `GET /api/locations` - Get active location reports - `POST /api/locations` - Submit new location report - `GET /api/config` - Get API configuration - `GET /admin` - Admin panel (password protected) ## Technology Stack - **Backend:** Node.js, Express.js, SQLite - **Frontend:** Vanilla JavaScript, Leaflet.js - **Geocoding:** MapBox API (with Nominatim fallback) - **Reverse Proxy:** Caddy (automatic HTTPS) - **Database:** SQLite (lightweight, serverless) ## Contributing 1. Fork the repository 2. Create a feature branch 3. Make your changes 4. Test thoroughly 5. Submit a pull request ## Security - API keys are stored in environment variables - Admin routes are password protected - Database queries use parameterized statements - HTTPS enforced in production ## License MIT License - see LICENSE file for details ## Support This is a community safety tool. For issues or questions: - Create a GitHub issue - Check existing documentation - Review security guidelines --- **⚠️ Safety Notice:** This tool is for community awareness. Always prioritize personal safety and know your rights.