MBTA Dashboard - Kiosk Mode#
What Was Established#
The MBTA dashboard runs as a 24/7 kiosk display on a Raspberry Pi 3B+ using Anthias (formerly Screenly OSE) in Docker. The display is portrait 1080x1920. The Pi has severe memory constraints (788MB total) requiring aggressive optimization.
Anthias Deployment#
Hardware#
- Device: Raspberry Pi 3B+ (788MB RAM)
- Display: 1080x1920 portrait screen
- Software: Anthias (Docker-based digital signage)
Display Configuration#
- Dashboard page set as primary asset
- Splash page appears for 1 minute every 11 hours 59 minutes as a refresh cycle
- Page refreshes via cron job to prevent memory leaks
Cron Refresh#
# Refresh the kiosk page periodically to clear memory
0 */6 * * * docker restart screenly-anthias-viewer-1Qt WebEngine Quirks#
Anthias uses Qt WebEngine for rendering, which differs from desktop Chrome:
- Font rendering: Wider default fonts; use Arial for consistency
- Emoji support: Limited — use Bootstrap Icons instead of Unicode emoji
- WebP support: May not render WebP images (test before deploying)
- CSS animations: Choppier than desktop browsers, especially continuous animations
- Debug mode:
QT_LOGGING_DEBUG=1 QT_QPA_EGLFS_DEBUG=1environment variables
Font Fix#
* { font-family: Arial, Helvetica, sans-serif; }Icon Strategy#
- Prefer Bootstrap Icons (
bi-*) over Unicode emoji - Meteocons for weather icons (small, targeted icon set)
- Avoid loading full icon libraries — use specific CSS classes only
Memory Management#
Pi 3B+ Constraints#
- 788MB total RAM, ~624MB used by system + Docker + Anthias
- No swap recommended (degrades SD card)
- Docker container:
screenly-anthias-viewer-1 - All data fetches must be server-side to minimize browser memory
Optimization Checklist#
- Server-side proxy for all API calls
- Static map image (WebP/PNG) instead of Leaflet.js
- Lazy loading for non-critical sections
- CSS animations over JavaScript for tickers
- Remove unused DOM elements
- Regular page refresh via cron
- Minimize icon/emoji loading
Current Configuration#
- MBTA API Key: Stored server-side in
/opt/mbta-proxy/.env - MBTA API Base:
https://api-v3.mbta.com - Data endpoint:
http://transit.intra.plgt.com/api/data - Access: Internal via
transit.intra.plgt.com, external via Cloudflare tunnel tombtadash.nbkelley.com
Historical Notes#
- Initial conversation: 2026-02-20 (kiosk mode basics)
- Claude Code session: 2026-03-12 to 2026-04-12 (full implementation + Anthias debugging)
- Blue Bikes removed when GBFS feed deprecated
- Ferry panels updated seasonally (winter schedule removes F2H Hull, F3 Boston)
- User strongly prefers server-side proxy over client-side API calls
Related Pages#
Sources#
ingested/chats/179-CSS Media Query Screen Size Issue.md
- DeepSeek conversation: “Local test proxy for MBTA tracker” (chat 184)
- Claude Code conversation: “MBTADashboard - Prompt Maker” (chat 24)