Updated September 2026
The Ruby on Rails project ideas worth building are the ones that replace a spreadsheet a real business still runs a process in. An estimating workbook, an order tracker, a stock count, an onboarding checklist. Each of those gives you the same work a paid Rails job gives you: five or six related tables, roles, file uploads, email, background jobs and a screen that updates while two people use it. A to-do list gives you one table. Below are twelve ideas, each with the process it replaces, the data model in one line, the Rails features it exercises and a difficulty rating.
In short
- Pick a process someone runs in a spreadsheet. Tabs become tables, headers become columns, dropdown lists become lookup tables, and the colour coding becomes a status column.
- Twelve ideas below map to real processes: estimating, job costing, order tracking, client onboarding, stock counts, asset registers, timesheets, quote to invoice, tickets, supplier price lists, inspections and bid tracking.
- Each idea exercises a named part of Rails: Active Record associations, Active Storage, Action Mailer, Active Job with Solid Queue, Hotwire and Turbo Streams, Devise, Pundit or CanCanCan, and an admin gem.
- Scope version one to a single workflow, a single role and three models, running on real data. Every customer app we ship at LlamaPress runs on Ruby on Rails.
I spent years at McKinsey inside other people's operating models, and I now read the workbooks businesses send us at LlamaPress. Every customer app we ship runs on Ruby on Rails, and we operate a fleet of production Rails apps for our customers. Our AI agent, Leonardo, writes the Rails code, and the people supervising it ship Rails daily. The ideas below are the processes those customers pay to replace.
What should I build with Ruby on Rails?
Build a process someone currently runs in a spreadsheet. That gives you requirements you did not invent, and a data model with real relationships in it.
A spreadsheet process is already a specification, written by the person who owns it. The tabs tell you the tables. The column headers tell you the fields. The dropdown lists tell you the lookup tables. The colour coding tells you there is a status column that was never allowed to exist. The tab everyone is scared to touch holds the business rules.
Rails is built for that shape of problem. The official Getting Started guide walks a reader with no Rails experience through models, migrations, routing, CRUD, authentication, file uploads, email, background jobs, security scanning and a production deployment. That is close to the feature list of a small internal business app. Start on the current versions: Rails 8.1.3.1, published 29 July 2026 per the RubyGems API, and Ruby 4.0.6, released 14 July 2026 per the official Ruby releases page. For the command sequence from an empty folder to a live site, read our page on creating a website with Ruby on Rails.
Why to-do apps make weak portfolio projects
A to-do app is a fine tutorial and a weak portfolio piece, because it has one table and one user. Nothing in it forces the decisions a reviewer looks for. No second role, so authorisation never comes up. No money, so decimal precision never comes up. No two people editing the same row, so locking never comes up.
A blog, a URL shortener and a recipe box are the same. They are the standard answers on every project-idea list, and a reviewer has read them fifty times. A business process gives you a project nobody else has.
Rails helps here. New applications since Rails 7.2 ship with a GitHub Actions CI workflow, Brakeman for security scanning and RuboCop with the omakase rule set, per the 7.2 release notes. Leave those defaults on. A green CI badge and a clean Brakeman run on a project that models a real business beats three tutorial clones.
Twelve Rails project ideas that map to real business processes
Each row is a process our customers ran in a spreadsheet before they ran it in software. The models column is a starting schema, written as you would declare it in Active Record. Difficulty is my own rating. Starter means three models, CRUD and sign-in. Intermediate adds uploads, email, background jobs and roles. Advanced adds money arithmetic, versioned records and concurrent edits.
| Idea | The process it replaces | Core models | Rails features it exercises | Difficulty |
|---|---|---|---|---|
| Estimating and bidding tool | The estimating workbook one person owns and everyone copies | Client has_many Estimates; Estimate has_many LineItems; LineItem belongs_to CostCode | Nested forms over Active Record associations, decimal columns for money, Turbo Streams for a live total, Devise | Advanced |
| Job costing and margin | The month-end sheet where actual costs get pasted against budgets | Project has_many CostEntries; CostEntry belongs_to CostCode and belongs_to User | Grouped queries and sums, scopes, Active Job for a nightly rollup | Advanced |
| Order tracker | The shared order tab with colour coding for status | Customer has_many Orders; Order has_many OrderLines and has_many StatusChanges | Turbo Streams board that updates for everyone, Action Mailer status emails, validations on the status column | Intermediate |
| Guided client onboarding | The onboarding checklist someone shepherds by email | Template has_many StepDefinitions; Client has_many Steps; Step has_many Documents | Active Storage for documents, Action Mailer reminders queued with Active Job, Pundit so a client sees only their own steps | Intermediate |
| Stock counts and inventory | The stock sheet that is printed, marked up and retyped | Location has_many Items; Item has_many StockMovements; Count has_many CountLines | Database transactions and row locking, Hotwire for phone-friendly counting, CSV import | Intermediate |
| Equipment and asset register | The asset tab with serial numbers and service dates | Asset belongs_to Location, has_many ServiceRecords, has_many Assignments | Active Storage for photos and manuals, Active Job for service-due reminders, an admin screen from ActiveAdmin or Avo | Starter |
| Timesheets and job hours | The weekly hours sheet emailed to the office every Friday | User has_many TimeEntries; TimeEntry belongs_to Job and belongs_to CostCode | Validations, weekly scopes, Devise roles for approver and crew, Turbo for inline edits | Starter |
| Quote to invoice | The quote template saved as a new file per customer | Customer has_many Quotes and has_many Invoices; Quote has_many LineItems; Invoice has_many Payments | Copying an association graph in a service object, Action Mailer to send the document, Active Job for chase-up email | Intermediate |
| Support ticket log | The shared inbox, plus the tracking tab beside it | Customer has_many Tickets; Ticket has_many Notes and belongs_to an assignee | Turbo Streams queue, Action Mailer replies, Pundit or CanCanCan for who may close a ticket | Intermediate |
| Supplier price lists | The folder of supplier workbooks with a lookup sheet on top | Supplier has_many PriceLists; PriceList has_many PriceItems | Active Storage for the uploaded file, Active Job for the import, queries that compare the new version to the last one | Intermediate |
| Compliance and inspection records | The inspection form that is printed, filled in and scanned | Site has_many Inspections; Inspection has_many Answers; Question has_many Answers | Nested forms, Active Storage photo evidence, Action Mailer for the signed copy, records that are never edited after submission | Intermediate |
| Tender and bid tracker | The bid log with deadlines nobody sees until Friday | Tender has_many BidEvents; Tender belongs_to an Estimator | Scheduled reminders with Active Job, a daily Action Mailer digest, dashboard scopes | Starter |
Four of those are worth expanding.
The estimating tool
An estimator prices a job by copying last year's workbook, and the rates live in a hidden tab. As an app, an estimate is a parent record with line items, and each line item points at a cost code with a current rate. Money needs decimal columns rather than floats, and rates need effective dates so an old estimate still prices the way it priced then. Totals update while the estimator types, which is a Turbo Stream. Our page on custom estimating software shows the finished product.
The order tracker
A wholesaler tracks orders on one tab with a colour for each status, and two of the three editors keep a local copy. As an app it is a customer, an order, order lines and a status history. Never overwrite a status; append a change with a user and a timestamp. When the warehouse marks an order packed, the sales screen should update without a refresh, which is a Turbo Stream. The commercial version is our order tracking software page.
The client onboarding workflow
At an IT provider, an insurance agency or a healthcare practice, getting a new client live means collecting twenty pieces of information across several steps, tracked on a checklist someone chases by email. As an app it is a template of steps, a set of steps per client, and a document on each step. You use Active Storage, Action Mailer, Active Job and Pundit in one project. The hard part is the guided part: a client sees one screen with the next thing they owe you. Our page on guided client onboarding software covers the operator side.
The stock count
Stock counts happen on paper because the spreadsheet is on a desktop and the shelves are not. As an app, a count is a header record with one line per item, filled in from a phone, and each accepted line writes a stock movement. Two counters must not write the same line, which is where transactions and row locking earn their place. Server-rendered HTML is enough for the counting screen, which is the case Hotwire makes for itself. We covered the spreadsheet version of this failure in why people overwrite each other in the inventory spreadsheet.
What each idea teaches you in Rails
Every idea above is a route through the same eight parts of Rails. Star counts and licences below were read from the GitHub API on 4 September 2026 and will drift.
| Part of Rails | What it does in these apps | Source, read 4 September 2026 |
|---|---|---|
| Active Record associations and validations | Turns tabs into related tables and enforces the rules the spreadsheet only suggested | Getting Started guide and the Active Record querying guide |
| Hotwire: Turbo and Stimulus | Live totals, status boards and phone screens with no separate frontend framework | hotwired.dev and the Turbo Streams handbook. hotwired/turbo, MIT, 7,388 stars; hotwired/stimulus, MIT, 13,091 stars |
| Active Storage | Drawings, signed forms, supplier price files, inspection photos | Active Storage overview |
| Action Mailer | The email the spreadsheet made a person send by hand | Action Mailer basics |
| Active Job with Solid Queue | Imports, nightly rollups and reminders, off the request | Active Job basics. Solid Queue ships by default in Rails 8 and runs 20 million jobs a day for HEY, per the Rails 8 announcement |
| Devise | Sign-in, which the shared workbook never had | heartcombo/devise, MIT, 24,357 stars, last pushed 22 June 2026 |
| Pundit or CanCanCan | Roles, so the estimator, the bookkeeper and the client see different screens | varvet/pundit, MIT, 8,521 stars; CanCanCommunity/cancancan, MIT, 5,684 stars |
| ActiveAdmin or Avo | The back office screen you would otherwise spend a week hand-building | activeadmin/activeadmin, MIT, 9,708 stars; avo-hq/avo, 1,799 stars, licence not classified by GitHub so check the repository LICENSE file |
Hotwire already ships with new Rails applications, so do not add the old hotwire-rails gem; that repository has been archived since December 2021. The Solid trio arrived as Rails 8 defaults to remove Redis as a required dependency, per the Rails 8 announcement. For finished code that uses these parts, read open-source Rails apps worth reading.
How do you scope a first version so you actually finish it?
Cut version one to one workflow, one role and three models, running on real data. That is the difference between a finished project and a folder you stop opening.
For the order tracker, version one is customer, order and order line. One role: the office. One workflow: create an order, move it through statuses, see today's list. Load last month's real orders as seed data on day one, because real data breaks assumptions that invented data hides.
Cut all of this from version one. Reporting and dashboards. Multi-company support. A public sign-up flow. Custom fields. A mobile app. Accounting integrations. Bulk import screens. Anything you would call configurable. Each is a second project wearing the first project's clothes.
Then add one thing at a time, deploying after each. Sign-in with Devise. The second role with Pundit. File uploads with Active Storage. The email people send by hand, with Action Mailer. The slow thing, moved into Active Job. Rails 8 ships with Kamal 2 and Thruster preconfigured, so a deploy is a command rather than a project.
Where do you get real requirements and real data?
Ask a small business for the spreadsheet they run a process in. Most owners will send it, because most owners want the problem gone. Offer to build version one for free and walk away if it is not useful.
Read the workbook in this order. Mark which tabs hold records and which hold calculations. The record tabs are your tables. Read the header row for the fields, and find the column holding two different things, because that column is a missing table. The data validation lists are your lookup tables and status values. Ask what each colour means; the answer is a status column and often a permission rule.
Then ask the owner three questions. What do you do when a value is wrong after the fact, which tells you whether you need an audit trail. Who is allowed to change this number, which tells you the roles. What happens at month end, which tells you the reports and the background jobs.
Spreadsheets carry live customer data. Ask for an anonymised copy, or replace names before you commit anything. Never put a real customer list in a public GitHub repository.
Where these ideas are the wrong choice
Some projects should not be Rails, and some processes should stay in the spreadsheet.
If your goal is to learn React, Vue or Svelte in depth, these ideas teach you less than a smaller project with a JavaScript frontend. Rails 8 defaults to import maps and Hotwire, framed in the Rails 8 announcement as a deliberate no-build path. You can add a build step with jsbundling-rails and swim against the defaults while you learn.
Rails is also the wrong tool when the hard part is not a database of records. Native mobile apps, offline-first field tools, video processing and machine learning pipelines have better homes.
On the business side, a spreadsheet one person uses for forty rows is fine. Leave it alone. The signal to build is more than two people depending on the file, or a process with steps and approvals, or a mistake that already cost money. Our own service has a limit too: we build from a process you already run. If the process does not exist yet, map it in a spreadsheet first.
When the idea is a business need rather than a learning project
Some readers want the practice, and some want the software. If you came here to learn Rails, take an idea from the table, scope it to three models, and build it.
If you are the operator whose estimating workbook is the idea, the calculation is different. You want the process out of the spreadsheet and into an app, with sign-in, roles, history and email, without hiring a development team. That is our job at LlamaPress. Every customer app we ship runs on Ruby on Rails. Our AI agent, Leonardo, writes the Rails code, and the US-based engineers supervising Leonardo review every change before it reaches you.
The steel contractor RSB is the closest match to the first idea in the table. Their estimating workbook priced every job, and every estimator worked in a copy of it. We rebuilt it as a custom app in 6 weeks from kickoff to deployment. Estimates now go out 62% faster and each one costs 40% less to produce. We have converted 400+ spreadsheets the same way.
The starting point is the workbook. Upload it and Leonardo reads the tabs, headers, formulas and dropdown lists, then builds a first working app on that structure. You get a standard Rails application, with official guides and a maintenance policy giving each version bug fixes for a year and security fixes for two, per Rails' Rails maintenance policy. For the companies that made the same call, read websites built with Ruby on Rails, and for how we work, the Rails development company where AI writes the code.
Your best project idea is already on your shared drive.
Upload the workbook that runs your process. Leonardo reads the tabs, formulas and dropdown lists and builds a first working Rails app, reviewed by a human engineer.
Building it yourself? Tell us what you built.
Frequently Asked Questions
What should I build with Ruby on Rails?
Build a process someone currently runs in a spreadsheet. An estimating workbook, an order tracker, a client onboarding checklist, a stock count or a timesheet each become a Rails app with related tables, roles, uploads, email and background jobs. The spreadsheet gives you requirements you did not invent.
What are good Ruby on Rails project ideas for a portfolio?
The ideas that show judgement have more than one role and more than one table. An estimating tool with versioned rates, an order tracker with a status history, or an onboarding workflow with documents and reminders all qualify. Keep the GitHub Actions CI, RuboCop and Brakeman defaults that new Rails applications ship with, so a reviewer can see the work is production shaped.
What is a good first Rails project for a beginner?
A timesheet or an equipment register. Both are three models, plain CRUD and sign-in with Devise, which is the first arc of the official Getting Started guide. Start with one workflow and one role, load real data as seed data, and deploy before you add uploads, email or background jobs.
How long does a Rails side project take to build?
No official Rails source gives a duration, so any number you read is a guess. What is measurable is scope. Three models, one role and one workflow is a project you can finish, and every extra role or integration multiplies the work.
Is Ruby on Rails a good choice for a business app?
Yes, for record-keeping and workflow apps, which is what most internal business software is. Rails ships authentication, file uploads, email, background jobs with Solid Queue and Hotwire in the framework itself. Each Rails version gets bug fixes for a year and security fixes for two, per the official maintenance policy.
Can AI build a Rails app for me?
Yes. At LlamaPress our AI agent, Leonardo, writes the Rails code, and US-based engineers review every change before it reaches you. Upload the spreadsheet that runs your process at llamapress.ai/excel-to-app and Leonardo reads the tabs, headers, formulas and dropdown lists, then builds a first working app.