Building systems like booking applications is where a framework like Rails shines the most.
One of the most famous of them all—Airbnb—was built from the ground up using Rails back in 2008 and, even though they've broken out of the monolith some time ago, they still use Rails for some parts of the app.
Rails can allow you to build CRUD interfaces and user flows pretty quickly, even more if you have a solid foundation to start with.
But, at some point, things get a bit repetitive, especially when building admin tooling with Rails and that's where a solution like Avo can help you out.
That's why we built avowork: a demo application to show, not tell, how Avo can empower even a single developer to swiftly build powerful applications by letting the developers focus on what's important: creating value for end users.
A walkthrough
The app, avowork, is a proof-of-concept where its end users can find places to work and book them for a limited amount of time.
It has four models:
- User: it represents the person that can place a booking and the admin who has access to manage the resources in the back-office.
- Room: represents the actual entity being booked. For our case, it's an office, but it can actually be anything that might be booked for a set amount of time.
- Location: the place where the rooms are located. In our case, it can be an office building or a co-working space, but it can also be a house or department with extra capacity that can be used for short-term rentals.
- Booking: a join table between the users and the bookings. It holds information about the booking itself.
The data model is simple, just enough to give an idea of how Avo can help us build a faster booking app:
The User
has a full_name
, an email
and an admin
boolean so we can authenticate admin users in our application.
The Location
and Room
models have a name
a description
and a photo
to identify and display them in our application.
Finally, the Booking
relates a user with a room and has booked_for
and booked_at
fields that allow us to know when and for how long the booking will take place.
As for the features, we're using Avo's bread and butter:
- Fields like image field, text area, date time, etc.
- Custom actions: in this case, we use a custom action to delay bookings by a set number of hours.
- Global search: using the
ransack
gem and minimal configuration, we can get global and individual resource customizable search features. - Filters: we have a basic filter in the bookings view to retrieve only bookings that are in the future (yet to be fulfilled).
- Dashboards and metric display: a basic dashboard where we can have a quick overview of how things are going using a chart and two metric cards.
This example app can be extended to be a fully-featured booking app using Avo and achieving it in a fraction of the time when compared to doing it with Rails alone.