No description
- Create public/utils.js with shared frontend utility functions - Extract parseUTCDate, getTimeAgo, getTimeRemaining, getRemainingClass to utils.js - Remove duplicate functions from admin.js, app-mapbox.js, app-google.js, and app.js - Add utils.js script import to index.html and admin.html - Add comprehensive JSDoc documentation for all utility functions - Ensure consistent UTC timestamp parsing across all frontend scripts This addresses Copilot AI feedback about function duplication across multiple frontend scripts. Now all timestamp and time calculation logic is centralized in one maintainable module. Benefits: - Single source of truth for time-related utilities - Easier maintenance and updates - Consistent behavior across all frontend components - Better code organization and documentation - Reduced bundle size through deduplication |
||
---|---|---|
.github/workflows | ||
public | ||
routes | ||
scripts | ||
tests | ||
.env.example | ||
.gitignore | ||
jest.config.js | ||
original-style.css | ||
package-lock.json | ||
package.json | ||
profanity-filter.js | ||
README.md | ||
s3-bucket-policy.json | ||
server.js |
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
-
Clone the repository:
git clone git@github.com:deco/great-lakes-ice-report.git cd great-lakes-ice-report
-
Install dependencies:
npm install
-
Configure environment variables:
cp .env.example .env # Edit .env with your MapBox token
-
Start the server:
npm start
-
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)
-
Run the deployment script on your server:
curl -sSL https://ice-puremichigan-lol.s3.amazonaws.com/scripts/deploy.sh | bash
-
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
-
Configure environment:
cp .env.example .env nano .env # Add your API keys
-
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 reportsPOST /api/locations
- Submit new location reportGET /api/config
- Get API configurationGET /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
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- 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.