No description
Find a file
Deco Vander 7daced0cea Fix reports table text color with explicit th,td selector
Applied the exact same selector pattern as admin table:
- .reports-table th, .reports-table td { color: var(--text-color); }

This ensures both header and data cells explicitly inherit the correct
text color variable, matching the admin table behavior exactly.

Should resolve the white text visibility issue in dark mode.
2025-07-03 21:12:11 -04:00
.github/workflows Fix S3 upload: remove ACL parameters for bucket without ACL support 2025-07-03 00:11:08 -04:00
public Fix reports table text color with explicit th,td selector 2025-07-03 21:12:11 -04:00
scripts Update HTML files to use Bunny.net CDN for static assets 2025-07-03 20:44:16 -04:00
.env.example Update HTML files to use Bunny.net CDN for static assets 2025-07-03 20:44:16 -04:00
.gitignore Initial commit: ICE Watch Michigan community safety tool 2025-07-02 23:27:22 -04:00
package-lock.json Initial commit: ICE Watch Michigan community safety tool 2025-07-02 23:27:22 -04:00
package.json Update HTML files to use Bunny.net CDN for static assets 2025-07-03 20:44:16 -04:00
README.md Update HTML files to use Bunny.net CDN for static assets 2025-07-03 20:44:16 -04:00
s3-bucket-policy.json Update HTML files to use Bunny.net CDN for static assets 2025-07-03 20:44:16 -04:00
server.js Fix persistent locations not showing on homepage 2025-07-03 20:56:27 -04:00

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:

    git clone git@github.com:deco/great-lakes-ice-report.git
    cd great-lakes-ice-report
    
  2. Install dependencies:

    npm install
    
  3. Configure environment variables:

    cp .env.example .env
    # Edit .env with your MapBox token
    
  4. Start the server:

    npm start
    
  5. Visit the application:

    http://localhost:3000
    

Environment Variables

# 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:

    curl -sSL https://ice.puremichigan.lol/scripts/deploy.sh | bash
    
  2. Deploy your application:

    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:

    cp .env.example .env
    nano .env  # Add your API keys
    
  4. Start services:

    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.