PrintLyrics finds songs through LRCLIB and turns their lyrics into shareable, print-optimized lyric sheets. Manual lyric entry is also supported. It is a Rails 8.1 application built with Hotwire, Tailwind CSS, SQLite, and a small amount of Stimulus for preview controls.
- Ruby 4.0.5
- SQLite 3
bin/setup
bin/devThe application runs at http://localhost:3000.
bin/rails test
bin/rubocop
bin/brakeman --no-pager
bin/rails assets:precompileSong search uses the public LRCLIB API. Selecting a result fills the editable form without creating a database record. A record is persisted only after the user generates the print page.
Generated pages expire 180 days after their last visit. Visits renew the retention window, and creating a new page purges expired records. The same cleanup can be run explicitly:
bin/rails lyrics:purge_expiredThe Dockerfile builds assets without Node.js. Kamal deploys one web container to the existing Hetzner host, with SQLite stored on a persistent Docker volume. Deployments require:
RAILS_MASTER_KEY=...
KAMAL_REGISTRY_PASSWORD=...The printlyrics-prod GitHub environment also requires KAMAL_SSH_KEY.
CI runs for pull requests and pushes to main. Release Please maintains a
release pull request and updates version.txt; merging that pull request
publishes a release and dispatches the production deployment. The application
shows that version in its footer.
Use the organic search operations runbook to configure Search Console and Plausible, record launch baselines, and run the 30- and 90-day reviews.