Credits
Unknown Tales is built on the shoulders of the open-source community. We're grateful to every project listed here.
Framework & Runtime
| Ruby | Programming language runtime for the application |
| Ruby on Rails | Full-stack web framework |
| Puma | Web server |
| Sidekiq | Background job processing |
| sidekiq-scheduler | Recurring job scheduling for Sidekiq |
| Redis | In-memory data store for jobs and caching |
| PostgreSQL | Database |
| Bootsnap | Boot-time performance optimisation |
| Ahoy | First-party visit and event analytics stored in the application database |
| Blazer | Admin-only internal dashboard for Ahoy analytics and operational reporting |
| Chartkick | Chart rendering library used by Blazer dashboards and saved queries |
| Geocoder | Server-side IP geolocation used to infer visitors' country without analytics cookies |
| MaxMind GeoLite Legacy | Local GeoIP country database used for coarse visitor location reporting |
Frontend
| Tailwind CSS | Utility-first CSS framework |
| DaisyUI | Component library built on Tailwind CSS |
| Turbo | HTML-over-the-wire page navigation and frames |
| Stimulus | Lightweight JavaScript framework |
| Importmap | ES module imports without bundling |
| Tailwind Typography | Prose styling for Markdown-rendered content |
| Simple Form | Form builder for Rails |
| Lucide Rails | Rails view helper for Lucide icons |
| Cerberus | Fluid responsive HTML email template by Ted Goas, used as the base for transactional mailer layouts |
| Cropper.js | Image cropping library used for the profile photo upload UI |
Auth & Security
| Pundit | Policy-based authorisation |
| bcrypt | Password hashing |
| Rack::Attack | Rate limiting and request throttling |
| zxcvbn | Password strength estimation — server-side gem and client-side JS library, both ported from Dropbox's zxcvbn |
| Discourse Connect | SSO protocol — Unknown Tales acts as identity provider for the Discourse community forum |
| Cloudflare Turnstile | Bot protection on the registration form with server-side token verification |
Content
| Commonmarker | Markdown rendering (CommonMark spec) |
| Pagy | Pagination |
| meta-tags | SEO meta tag management |
| PaperTrail | Model versioning and audit trail |
| High Voltage | Static page rendering |
Fonts
| Inter | UI typeface by Rasmus Andersson, served via Bunny Fonts |
| Sora | Brand wordmark typeface used for the Unknown Tales title, served via Bunny Fonts |
| Merriweather | Default chapter reading typeface by Sorkin Type, served via Bunny Fonts |
| Source Sans 3 | Sans-serif chapter reading typeface by Paul D. Hunt, served via Bunny Fonts |
| Atkinson Hyperlegible | Dyslexia-friendly chapter reading typeface by the Braille Institute, served via Bunny Fonts |
Licensing
| Creative Commons | CC BY-SA 4.0 licence icons from the CC Presskit, served locally |
Images
Development & Operations
| ERB Lint | Template linting for ERB views, including HTML and accessibility-oriented checks |
| i18n-tasks | Translation health checks for missing, unused, and non-normalized locale keys |
| test-prof | Opt-in profiling tools for slow specs, heavy factory usage, and setup bottlenecks |
| rack-mini-profiler | Development-only request profiler for local SQL, view, and request timing analysis |
| Claude | AI coding assistant by Anthropic, used throughout development |
| Codex | AI coding assistant by OpenAI, used throughout development |
| qlty.sh | Code quality platform — coverage reporting, linting, and security scanning across PRs |
| SimpleCov | Ruby code coverage analysis |
| AppSignal | Error tracking, performance monitoring, and Sidekiq metrics |
| Railway | Docker-based PaaS hosting with PR preview environments |
| Mailtrap | Transactional email — live sending in production; sandbox email capture in staging and PR environments |
| Cloudflare R2 | S3-compatible object storage for uploaded story icons and generated image variants, hosted in Cloudflare's EU jurisdiction |
| Mailcatcher | Development email capture — intercepts outgoing mail and provides a local web UI at port 1080 |
| Thruster | HTTP/2 proxy and asset caching in front of Puma (non-Railway deployments) |
| Propshaft | Asset pipeline |
| lukin.io | ENV-driven Rack middleware approach for the /up health check endpoint, by Max Lukin |