frontend-expert
frontend-expert — a Claude Code skill from jorijn/meshcore-stats
Features
- ✓**Data Collection** - Metrics from local companion and remote repeater nodes
- ✓**Interactive Charts** - SVG charts with day/week/month/year views and tooltips
- ✓**Auto Telemetry Charts** - Repeater `telemetry.*` metrics are charted automatically when telemetry is enabled (`telemetry.voltage.*` excluded)
- ✓**Statistics Reports** - Monthly and yearly report generation
- ✓**Light/Dark Theme** - Automatic theme switching based on system preference
Installation Guide
Docker (Recommended)
#### 1. Clone the Repository
git clone https://github.com/jorijn/meshcore-stats.git
cd meshcore-stats#### 2. Configure
Copy the example configuration and edit it:
cp meshcore.conf.example meshcore.confMinimal required settings:
# Repeater identity (required)
REPEATER_NAME=Your Repeater Name
REPEATER_PASSWORD=your-admin-password
# Display names
REPEATER_DISPLAY_NAME=My Repeater
COMPANION_DISPLAY_NAME=My CompanionSee [meshcore.conf.example](meshcore.conf.example) for all available options.
Optional telemetry display settings:
# Enable environmental telemetry collection from repeater
TELEMETRY_ENABLED=1
# Telemetry display units only (DB values stay unchanged)
DISPLAY_UNIT_SYSTEM=metric # or imperial#### 3. Create Data Directories
mkdir -p data/state out
sudo chown -R 1000:1000 data outThe container runs as UID 1000, so directories must be writable by this user. If sudo is not available, you can relaxed the permissions using chmod 777 data out, but this is less secure.
#### 4. Configure Serial Device
Create docker-compose.override.yml to specify your serial device:
services:
meshcore-stats:
devices:
- /dev/ttyACM0:/dev/ttyACM0Ensure your user has serial port access:
sudo usermod -aG dialout $USER
# Log out and back in for changes to take effect#### 5. Start the Containers
docker compose up -dAfter the various collection and render jobs has run, the dashboard will be available at http://localhost:8080.
#### Verify Installation
# Check container status
docker compose ps
# View logs
docker compose logs -f meshcore-statsCommon Docker Commands
# View real-time logs
docker compose logs -f meshcore-stats
# Restart after configuration changes
docker compose restart meshcore-stats
# Update to latest version (database migrations are automatic)
docker compose pull && docker compose up -d
# Stop all containers
docker compose down
# Backup database
cp data/state/metrics.db data/state/metrics.db.backupNote:docker compose downpreserves your data. Usedocker compose down -vonly if you want to delete everything.
Manual Installation (Alternative)
For environments where Docker is not available.
#### Requirements
#### Setup
cd meshcore-stats
uv venv
source .venv/bin/activate
uv sync
cp meshcore.conf.example meshcore.conf
# Edit meshcore.conf with your settings#### Cron Setup
Add to your crontab (crontab -e):
MESHCORE=/path/to/meshcore-stats
# Companion: every minute
* * * * * cd $MESHCORE && .venv/bin/python scripts/collect_companion.py
# Repeater: every 15 minutes
1,16,31,46 * * * * cd $MESHCORE && .venv/bin/python scripts/collect_repeater.py
# Charts: every 5 minutes
*/5 * * * * cd $MESHCORE && .venv/bin/python scripts/render_charts.py
# Site: every 5 minutes
*/5 * * * * cd $MESHCORE && .venv/bin/python scripts/render_site.py
# Reports: daily at midnight
0 0 * * * cd $MESHCORE && .venv/bin/python scripts/render_reports.pyServe the out/ directory with any web server.