Nauman's Production Rails Stack
FEATUREDBattle-tested gems from BuiltOnRails, InventList, and Shorttags. LLM-ready with detailed context for each tool.
Stacks in this Collection
The web framework. Rails 7+ for established apps, Rails 8+ for new apps. Use with Hotwire for modern interactivity without JavaScript frameworks.
Modern asset pipeline for Rails 7+. Simpler than Sprockets, no compilation step. Use instead of Sprockets for new Rails 7/8 apps.
Default Rails web server. Configure with threads matching CPU cores. Use with Thruster for HTTP caching in production.
Primary database. Use for everything: data, caching (solid_cache), jobs (solid_queue), websockets (solid_cable). No need for Redis.
In-memory store. Used in InventList for caching/sessions. For new apps, prefer Solid Cache (database-backed) instead.
SPA-like navigation without JavaScript. Use Turbo Frames for partial updates, Turbo Streams for real-time. Replace most JavaScript needs.
Modest JavaScript framework. Use for DOM manipulation, form validation, UI interactions. One controller per behavior.
Utility-first CSS. Use tailwindcss-rails gem for zero-build setup with importmaps. Neo-brutalism style: bold borders, offset shadows.
JavaScript without bundling. Use for Rails 8+ apps. Import npm packages directly via CDN. No node_modules needed.
Encapsulated view components. Use for reusable UI pieces like cards, modals, forms. Better than partials for complex components.
Database-backed job queue for Rails 8+. No Redis needed. Use for all background jobs. Runs in Puma process with SOLID_QUEUE_IN_PUMA=true.
Redis-backed job queue. Used in older apps. For new Rails 8 apps, prefer Solid Queue instead.
PostgreSQL full-text search. Use for search without external services. Supports multisearch across models.
Full-featured authentication. Use for traditional username/password auth. Pairs with OmniAuth for social login.
OAuth framework. Use for GitHub/Google/etc login. Configure strategies per provider.
Authorization via policy objects. Use for role-based access control. One policy class per model.
Payment processing. Use stripe gem directly or via Pay gem. Webhooks for subscription management.
Subscription billing abstraction. Wraps Stripe/Paddle/Braintree. Use for SaaS with recurring billing.
Container deployment to bare metal. Use for production deploys. Zero-downtime via rolling restarts. Configure in config/deploy.yml.
HTTP accelerator for Puma. Adds caching, compression, X-Sendfile. Use in production Dockerfile.
Amazon Web Services. Use aws-sdk-s3 for file storage (S3/R2), aws-sdk-ses for email sending.
Analytics tracking. Track visits and events. Use for product analytics without external services.
Error tracking. Use for production error monitoring. Configure via SENTRY_DSN env var.
Default Rails testing. Use for unit and integration tests. Simpler than RSpec.
Browser testing. Use for system tests. Configure with Selenium for JavaScript testing.
Rate limiting middleware. Use for API throttling and brute force protection. Configure in config/initializers/rack_attack.rb.
Gem vulnerability scanner. Check for known CVEs in dependencies. Run regularly.
Email preview in development. Opens emails in browser instead of sending. Essential for development.
Fast pagination. Use instead of will_paginate/kaminari. Configure limit per page. Version 9.x for traditional API.
Slugs for URLs. Use for SEO-friendly URLs like /products/my-product instead of /products/123.
SEO meta tags helper. Use for dynamic title, description, OG tags. Configure defaults in application_helper.
JavaScript charts. Use with Groupdate for time-series charts. Supports multiple chart libraries.
Time-based grouping for charts. Use with Chartkick for daily/weekly/monthly analytics.
XML sitemap generation. Use for SEO. Configure in config/sitemap.rb.
Markdown rendering. Use for user-generated content, READMEs, documentation pages.
Ruby-first HTML views. Alternative to ERB. Use for component-driven UI with Ruby syntax.
LLM Context
# Nauman's Production Rails Stack This is a curated collection of Ruby gems and tools used across three production Rails applications: - **BuiltOnRails** - A directory of Rails applications (Rails 8.1) - **InventList** - An inventory management SaaS (Rails 7.0) - **Shorttags/SpotBZ** - A real-time analytics and notifications platform (Rails 8.0) ## Philosophy This stack follows the **37signals/Basecamp** approach to Rails development: - Rich domain models over service objects - CRUD controllers over custom actions - Database-backed everything (no Redis dependency in newer apps) - Hotwire (Turbo + Stimulus) for interactivity - Kamal for deployment ## When to Use This Stack Use this collection when: - Building a new Rails 7+ or Rails 8+ application - You want production-tested, battle-proven gems - You prefer the "vanilla Rails" philosophy - You need to minimize external dependencies ## Key Patterns 1. **Authentication**: Passwordless magic links (no passwords) or Devise for traditional auth 2. **Background Jobs**: Solid Queue (database-backed) over Redis-based solutions 3. **Frontend**: Hotwire stack (Turbo + Stimulus + Tailwind) 4. **Payments**: Stripe via the `pay` gem or direct integration 5. **Search**: pg_search for PostgreSQL full-text search 6. **Deployment**: Kamal with Thruster for zero-downtime deploys ## Usage Instructions for LLMs When using these gems in a new project: 1. Start with the core Framework + Database + Frontend gems 2. Add Background processing (Solid Queue for Rails 8+) 3. Add Auth based on needs (passwordless vs Devise) 4. Add Payments if needed (Stripe) 5. Add Monitoring/Security gems for production Each gem below includes a note explaining its specific use case in these applications.
Powers This Product
BuiltOnRails
Directory
A directory showcasing the best products built with Ruby on Rails. Discover SaaS apps, marketplaces, developer tools, and more.