Build on Rails
Build a task management system on Rails
Tasks, assignees, due dates, and a board your team moves work across, built on your own Rails models, with a Kanban add-on so a status change is a dragged card, not an edited field.
250+ paying companies · 2.7M downloads of the avo gem
01 · the hand-built version
What building a task management system by hand actually costs
A task manager sounds like a weekend build until you want it to sit next to the real records the work is about. That is where the hand-rolled version starts to hurt.
-
01
The board lives outside your app
Your tasks are about real records, an order to chase, a customer to call, a ticket to close, but they sit in a separate SaaS board that knows nothing about any of them. Context lives in one place and the work lives in another.
-
02
Status is a field nobody updates
A status column only changes when someone remembers to open the record and edit it, so the board drifts from reality and stops being trusted. The list is only as honest as the last person who bothered to update it.
-
03
Assignments get made and then forgotten
A task is assigned, a due date is set, and nothing tells the assignee any of it happened. Work slips not because people are careless but because the system never nudged anyone.
-
04
You keep rebuilding the same board
The drag-and-drop, the persistence, the reordering within a column: it is a surprising amount of moving parts to build and keep working for what everyone thinks of as a simple checklist.
02 · the Avo version
Your models are already the hard part. Avo is the rest.
Avo turns your Task model into real screens, assignees, statuses, due dates, and comments, and the Kanban add-on turns any resource into a board where dragging a card writes the new status straight back to the record. Your tasks live in the same app as the orders and customers they are about, behind the same auth, so the board and the data can never quietly disagree.
A task manager shaped like your data
A resource on Task gives you an assignee, a status badge, a due date, and comments over the schema you control, so the task manager fits your workflow instead of a generic tool's idea of one.
A board that matches the data
The <a href='/addons/kanban'>Kanban add-on</a> makes your status values the columns, and dragging a card between them updates the record and remembers its position, so moving work and recording it are the same action.
Everyone opens their own list
Assigned to me, due this week, overdue: each is a saved view a person starts the day in, so nobody scans the whole board to find their work.
A nudge when work lands on someone
Pair tasks with the <a href='/addons/notifications'>Notifications add-on</a> so an assignee hears about a new task or an approaching due date in the app, instead of finding out when it is already late.
Tasks linked to the record they are about
A belongs_to (polymorphic) field points a task at the order, customer, or ticket it concerns, so opening a task lands you one click from the thing it is really about.
Comments and history in place
A has_many of comments keeps the back-and-forth on the task itself, so the decision and its context live together instead of scattering across chat threads.
A task resource with an assignee, a Kanban-ready status, and comments, ready to drop onto a board:
class Avo::Resources::Task < Avo::BaseResource
self.title = :title
self.includes = [:assignee, :project]
self.default_sort_column = :due_on
def fields
field :id, as: :id
field :title, as: :text, required: true
field :status, as: :badge, options: {
neutral: %w[backlog],
info: %w[in_progress],
warning: %w[blocked],
success: %w[done]
}
field :assignee, as: :belongs_to
field :due_on, as: :date, sortable: true
field :description, as: :textarea
field :comments, as: :has_many
end
def actions
action Avo::Actions::AssignToMe
end
def filters
filter Avo::Filters::Overdue
end
end
03 · the timeline
From first resource to the team running on it
Generate a resource for your Task model and work through tasks with assignees, due dates, and comments in your own app, over records that already exist.
Install the Kanban add-on, turn status into columns, and move work by dragging cards, with each drop writing the new status back to the record. Put it behind your existing auth and ship.
The team runs the day off one board that sits next to the orders and customers the tasks are about, and the separate SaaS board nobody kept current is gone.
Prefer to prompt?
Hand this to Claude Code, Cursor, or whatever agent you build with, and review what it ships like any other pull request.
Build a brand-new Ruby on Rails task management system from scratch with Avo 4 as the management UI (https://avohq.io, docs at https://docs.avohq.io/4.0/). Assume an empty directory and scaffold everything.
1. Run rails new for a fresh app with sensible defaults, then generate authentication with Rails' built-in authentication generator so there is a real user to sign in as. Add the avo gem, bundle, run bin/rails generate avo:install, and mount Avo at /avo behind that authentication.
2. Design the data model before you touch a migration. Reason from what a task manager genuinely needs rather than copying a schema: the unit of work people track, the workflow states it moves through (an enum when the states are fixed, a table of their own when statuses need to carry data), who owns each task, its deadline, the discussion that accumulates on it, and a way to hang a task off whatever real record the work concerns (a polymorphic association is the usual fit). The page's ideas, an assignee, a due date, a badge status, comments, a link to an order or customer or ticket, are things the design has to cover, not columns to transcribe. Decide the entities and how they associate, write that down, then create the migrations and models.
3. Generate an Avo resource per model with bin/rails generate avo:resource, then make each one concrete: set self.title to a human label, self.search over the columns people actually look up by, self.includes to preload the owner and any associations the Index touches, and match field types to your columns, a badge for the workflow status, a belongs_to for the owner, a sortable date for the deadline, a textarea for the description, and a has_many for the discussion (https://docs.avohq.io/4.0/fields.html).
4. Turn the verbs of the workflow into Avo Actions (https://docs.avohq.io/4.0/actions.html), such as assigning a task to the current user, marking it done, or reassigning it. Since the app is new, put the real behavior in model methods or small service objects and have each action call into them rather than writing logic inline.
5. Add filters (overdue, assigned to me, due this week), scopes over those same query ideas, and a dashboard that surfaces open work, overdue counts, and load per assignee (https://docs.avohq.io/4.0/dashboards.html). Then install the Kanban add-on (https://avohq.io/addons/kanban) and run its install generator, which scaffolds the board, column, and item resources plus a migration; allow the task resource on a board with allowed_resources, map the columns onto your workflow states, and confirm a dragged card writes the new status back to the record and keeps its position. Optionally add the Notifications add-on (https://avohq.io/addons/notifications) so an owner hears in the app when a task lands on them or a deadline approaches.
6. Add Pundit authorization (https://docs.avohq.io/4.0/authorization.html) with the roles this app implies: an admin who sees and moves every task, and a member who works their own. Gate the actions and the Kanban board through those policies.
7. Seed realistic sample data, several users, tasks spread across every workflow state, assignees, deadlines both past and upcoming, and a few comment threads, so every screen and board column has something to show.
8. Boot the app, sign in, open /avo, and drag a task from its first workflow state to the next, confirming the record's status changed and the card kept its new place.
04 · start today
Stand up a task management system this week
Avo is per app with unlimited users, so the whole team works from it without the bill scaling with headcount. When you hit an edge Avo doesn't cover, you drop to plain Rails instead of filing a feature request.
More things teams run from their Rails app
Frequently asked questions
- Can I build a task manager in Ruby on Rails?
- Yes. A task manager is a Task model with an assignee, a status, a due date, and comments, which is straightforward Active Record. Avo turns that model into working screens, and its Kanban add-on adds the board, so you get the drag-and-drop layer without building and maintaining it yourself.
- Does Avo have a Kanban board?
- Yes. The Kanban add-on turns any Avo resource into a board: each board tracks one property on your records, the columns are that property's values, and dropping a card in a new column updates the record and remembers its position. One board can even hold more than one resource type, the way GitHub Projects mixes issues and pull requests.
- How do I add a Kanban board to a Rails admin?
- Add the Kanban add-on and run its install generator, which scaffolds the board, column, and item resources plus a migration. You choose which resources a board accepts with the allowed_resources setting, then add cards from each resource's own search. The drag interactions and position persistence come with the add-on rather than being yours to write.
- Can I notify an assignee when a task is assigned?
- Yes. Pair your task resource with the Notifications add-on so an assignee is told in the app when a task lands on them or a due date approaches. That closes the common gap where work is assigned in a board but nothing actually reaches the person responsible for it.
- How do I keep tasks connected to the records they are about?
- Give the Task model a polymorphic belongs_to, then expose it as a belongs_to field on the Avo resource. A task can then point at the order, customer, or ticket it concerns, and because it all lives in the same Rails app, that link is a normal Active Record association rather than a reference into a separate tool.
- How much does a Rails task management system cost with Avo?
- Avo is priced per application with unlimited users, so the whole team can be on the board without the cost scaling by headcount. The Kanban and Notifications add-ons are priced separately, and each is bought once for the app rather than per person.