/timeframe

Primary LanguageRubyOtherNOASSERTION

Timeframe

A web application for displaying information from various APIs on digital signage.

Project goals

  • Serve as a test bed for learning new technologies.
  • Long term: I expect to run this application for years, if not decades.
  • Stability: I expect the application to run without maintenance indefinitely.
  • Availability: 100% uptime.
  • Fault tolerance: the application functions when no internet connection is available.

Architecture

  • Signage endpoints
    • Visionect 13" displays (/thirteen)
    • Boox Mira Pro (/mira)
      • Fetched by a client Mac Mini with a Boox Mira Pro (25.3" 3200x1800px e-Paper display) running Google Chrome full screen.
      • Self-refreshes entire screen every 1s.

Todo list

  • remove .stub from tests in favor of dependency injection
  • Use PStore instead of SQLite
  • Add (day x/y) for multi-day all-day events
  • run Rails server with launchd
  • add health checks for home assistant automations
  • integrate with RFID jukebox: https://github.com/maddox/magic-cards
  • set up remote chrome debugging on client display
  • sync tempest weather data
  • Dither images using this technique: https://news.ycombinator.com/item?id=37837009
  • Integrate with Home Assistant to show whether mail has been delivered today

Local development

Setup

  1. bundle install
  2. rails db:setup
  3. Copy .config.ymlfrom a friend.
  4. rails s
  5. Visit http://localhost:3000

Testing

bundle exec rake

Deploying

Currently, Timeframe runs on a local Mac Mini in development mode. There is no production deployment.

To fetch the latest version: git fetch --all && git reset --hard origin/main

To upgrade Visionect: docker-compose pull && docker-compose up -d

Rails server: SECRET_KEY_BASE="foo" RAILS_ENV=production rails s -p 80 -b 0.0.0.0 --no-log-to-stdout

BG jobs: RAILS_ENV=production bundle exec sidekiq