cproudlock fbe5312e7b Feature: Convert from Node.js/Express to Python/Flask
BREAKING CHANGE: Replaced Node.js backend with Python Flask

Reason: npm not available on production server, Python/pip is available.

Changes:
- Created app.py (Flask) to replace server.js (Node.js)
- Created requirements.txt with only 2 dependencies (Flask, mysql-connector-python)
- Updated README.md with Flask installation and deployment instructions
- Maintained all existing functionality:
  * Same API endpoints (/api/notifications, /health)
  * Same database queries (isshopfloor filter, 72-hour window)
  * Same priority sorting (incidents first)
  * Serves static files from public/ directory
  * Same environment variable configuration

Dependencies:
- Flask==3.0.0
- mysql-connector-python==8.2.0

The public/index.html frontend remains unchanged - only the backend was converted.

Tested and verified:
- API endpoint returns correct data
- Health check responds
- Dashboard displays properly
- Database connectivity working
- PM2 process manager compatible

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-24 11:52:34 -04:00

Shopfloor Dashboard

GE Aerospace West Jefferson shopfloor events and notifications dashboard.

Overview

Real-time display dashboard for showing current and upcoming events on the shopfloor. Designed for TV displays with large, readable text and GE Aerospace branding.

Features

  • Live Data Updates: Auto-refreshes every 10 seconds via AJAX (no page reload)
  • 72-Hour Window: Shows current events and upcoming events within next 72 hours
  • Shopfloor Filtering: Only displays notifications marked for shopfloor display
  • Type-Based Color Coding: Visual severity indicators (Red=Incident, Yellow=Change, Green=Awareness)
  • Priority Sorting: Critical incidents always shown first
  • Real-Time Clock: Always-on clock display
  • Connection Monitoring: Visual indicator shows live connection status
  • GE Aerospace Branding: Official colors, fonts, and logo

Technology Stack

  • Backend: Python 3 with Flask
  • Database: MySQL 5.6+
  • Frontend: Vanilla JavaScript (no frameworks)
  • Styling: Custom CSS with GE Aerospace brand colors

Installation

Prerequisites

  • Python 3.8+ with pip
  • MySQL 5.6+ database
  • Access to ShopDB database

Setup

# Install dependencies
pip install -r requirements.txt

# Set environment variables (optional)
export DB_HOST=localhost
export DB_PORT=3306
export DB_USER=570005354
export DB_PASS=570005354
export DB_NAME=shopdb
export PORT=3001

# Start the server
python3 app.py

Configuration

Environment variables:

Variable Default Description
PORT 3000 Server port
DB_HOST localhost Database host
DB_PORT 3306 Database port
DB_USER 570005354 Database username
DB_PASS 570005354 Database password
DB_NAME shopdb Database name

Usage

Access the Dashboard

Open your browser to:

http://localhost:3001

API Endpoints

Get Notifications:

GET /api/notifications

Returns current and upcoming events in JSON format.

Health Check:

GET /health

Returns server status.

Display on TV

  1. Open the dashboard URL in a web browser (Chrome recommended)
  2. Press F11 for fullscreen mode
  3. Dashboard will auto-refresh every 10 seconds
  4. Connection status indicator shows "LIVE" when connected

Project Structure

shopfloor-dashboard/
├── app.py                 # Flask application
├── requirements.txt       # Python dependencies
├── public/
│   ├── index.html        # Dashboard UI
│   └── ge-aerospace-logo.svg
├── .gitignore
└── README.md

Database Schema

Queries the notifications table in ShopDB with shopfloor filtering:

SELECT n.notificationid, n.notification, n.starttime, n.endtime,
       n.ticketnumber, n.link, n.isactive, n.isshopfloor,
       nt.typename, nt.typecolor
FROM notifications n
LEFT JOIN notificationtypes nt ON n.notificationtypeid = nt.notificationtypeid
WHERE n.isactive = 1
AND n.isshopfloor = 1
AND (conditions for 72-hour window)
ORDER BY n.starttime ASC

Key Fields:

  • isshopfloor: Boolean flag (0/1) - only events with 1 appear on dashboard
  • typecolor: Used for visual severity indicators (danger/warning/success)

Design

Colors (GE Aerospace Brand)

  • Deep Navy: #00003d (background)
  • Sky Blue: #4181ff (accents, clock)
  • Avionics Green: #0ad64f (live indicator)
  • Tungsten: #eaeaea (secondary text)

Typography

  • Font: Inter (sans-serif)
  • Sizes: Large for TV readability (38px-48px headers)

Git Repository

This project is version controlled with Git and hosted on Gitea.

Repository URL:

  • SSH: ssh://git@localhost:2222/cproudlock/shopfloor-dashboard.git
  • HTTP: http://localhost:3000/cproudlock/shopfloor-dashboard

SSH Key Setup:

The repository uses SSH authentication. The SSH key is already configured:

# SSH public key location
~/.ssh/id_ed25519.pub

# Key is registered in Gitea as "AI Key"
# User: cproudlock

Common Git Commands:

# Clone the repository
git clone ssh://git@localhost:2222/cproudlock/shopfloor-dashboard.git

# Pull latest changes
git pull

# Commit and push changes
git add .
git commit -m "Your commit message"
git push

Development

# Install dependencies
pip install -r requirements.txt

# Run the Flask development server
python3 app.py

# The built-in Flask server auto-reloads on code changes when debug=True

Deployment

For production deployment (no pip/npm required on production server):

  1. Package entire directory including installed Python packages
  2. Copy to production server
  3. Run directly with Python 3
  4. Use a process manager (systemd, supervisor, or PM2)

Option 2: Install on Production

# Install dependencies on production
pip install -r requirements.txt

# Run with production WSGI server (recommended)
pip install gunicorn
gunicorn -w 4 -b 0.0.0.0:3001 app:app

# Or use PM2 with Python
pm2 start app.py --name shopfloor-dashboard --interpreter python3
pm2 save
pm2 startup

Note: Flask's built-in server (python3 app.py) works for production if using a process manager, but gunicorn is recommended for higher traffic.

Troubleshooting

Port already in use:

# Use a different port
PORT=3001 python3 app.py

Can't connect to database:

  • Verify MySQL is running
  • Check credentials in environment variables or app.py
  • Ensure database exists and user has permissions
  • Verify mysql-connector-python is installed

Dashboard not updating:

  • Check browser console for errors
  • Verify /api/notifications endpoint returns data
  • Check network connectivity
  • Ensure Flask server is running

Python module errors:

# Reinstall dependencies
pip install -r requirements.txt

# Or install individually
pip install Flask mysql-connector-python

License

Internal GE Aerospace project - West Jefferson facility

Support

Contact: IT Support - West Jefferson

Description
Shopfloor Dashboard
Readme 159 KiB
Languages
HTML 62.9%
Python 37.1%