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
- run Rails server with
launchd
- add health checks for home assistant automations
- 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
- Use a pi for kiosk mode instead of a mac mini
- Alert on unavailable entities
- Baby age should be in months until 2 years+
- Add lightning warning
Local development
Setup
1) bundle install
2) rails db:setup
3) Copy .config.yml
from 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