
Build a project management system from landing page to dashboard, featuring projects, tasks, priorities, due dates, and notifications. Create, search, and sort tasks; complete items; track deadlines on a calendar.
Build a real-world multi-tenant SaaS with Rails and Hotwire, introducing teams, subdomains, and projects; manage payments with Stripe and unlock calendar features through plan upgrades.
Build a styled Rails home page from scratch using Tailwind and Postgres, creating a home controller and root route, then style with assets and SVGs.
Build user authentication in a real world multitenant SaaS with Ruby on Rails and Hotwire, wiring Devise sign in, sign up, and sign out to a secured dashboard.
Use Stimulus to manage alert and notice messages inside a Hotwire Rails app and Turbo framework. Build a dismissible flash notification with an svg close icon, controllers, targets, and timeouts.
Design a dashboard navbar with a top bar, left sidebar, and dark page background, featuring search, notifications, and user menu, while teaching camel and kebab case usage and svg assets.
Create an interactive profile card that pops up on click, using a partial, styling, and links for log out and profile edits, with Stimulus and Turbo in Rails.
Learn to build a Stimulus-powered toggle for a profile card by defining a toggle controller, target profile card, and actions that show or hide the element with a hidden class.
Create a flex sidebar next to the main content, render the sidebar as a partial, and style it with gray colors, white text, hover, and a small-screen toggle.
Toggle the admin sidebar using a hamburger button wired to the Togo JavaScript controller, which toggles the sidebar target by switching the hidden class.
Create a projects controller and routes, enforce devise authentication, and render the index within a shared admin layout with flash partials, aligning yield points and proper folder naming.
Create a projects index table showing project name and completion status, with edit, view, and delete icons, styled with gray text, padding, borders, and full-width layout.
Make the projects table dynamic by looping over the index action's projects array in the view, replacing hard-coded names, preparing ten records, fetching from the database and adding a form.
Generate a dynamic projects model in Rails with a user reference, run migrations, and implement a form and create action to add projects from the view.
Implement the Rails projects create action by whitelisting params, building with current user, and handling success or error states with presence and uniqueness validations.
Learn to delete projects in a Rails app by wiring routes and a destroy action, locating the project by id, and confirming deletion with Turbo confirm.
Discover how to edit a project in a Rails multitenant app by adding the edit route and template, wiring the update action, and using a before_action to load the project.
Use turbo frames to edit a project in a modal within a real world multitenant SaaS, loading the edit form into a frame and styling a blurred overlay.
Learn to preserve scroll position in the projects table by enabling turbo eight's morphine page refresh, so deletions keep you in place, using turbo head in the application layout.
Scaffold a task resource with name, due date, completed datetime, and priority enum, linked to a project, generating model, views, controller, and routes for full CRUD.
Build a Rails CRUD workflow for tasks, style the list, connect a form to select a project, and implement an enum-based priority (high, medium, low) with has_many associations.
Move tasks to the dashboard layout and require login for access, reuse the admin layout from the projects controller, and refine task views with grey text for readability.
Nest tasks under their projects to manage and view all tasks from a project show page, using project tasks paths and a new task button to add tasks.
Learn to convert the new task action into a modal using turbo frame, wire nested project and task models, and fix routing by passing [project, task] to the form.
Style the modal as an overlay by embedding the wrapped task form, reusing project edit styles, and ensure close navigates to the specific project with turbo frame top.
Demonstrate CRUD for a project's tasks in Rails, using project_id and build, and redirecting to the project's show page to display tasks under the project.
Render the tasks table inside the project view by reusing the project table, add headers for name, due date, priority, and completed, and wire edit links for each task.
Implement and test editing, updating, and deleting nested project tasks using proper project_task_path routes, passing project and task IDs to an edit form, with delete functionality.
Fix flash messages and redirect users to the dashboard after sign in, in a real-world multitenant Rails SaaS, using devise, application controller, and z-index layout adjustments.
Clean up the task interface by deleting unused builder files and sidebar tasks, and add a complete checkbox to the task form to mark tasks as completed and align table.
Add a boolean completed column to tasks, migrate and default to false; build a checkbox form that auto submits on change to toggle completion and permit the completed parameter.
Implement an after_update callback to auto update completed_at when a task is completed and nil when undone, using update_column to avoid recursion, and move completed items to the bottom.
Refactor update callback to avoid endless loops by using before_update instead of updating on update. Guard by setting completed only when the task is completed, using time.current.
Arrange and refine the tasks table by adding columns, adjusting font size, capitalizing headers, and hiding the sidebar, while implementing validations to prevent tasks from being in the past.
Validate tasks in a Rails app by enforcing name presence, case-sensitive uniqueness within a project, and a due date in the future, with error handling and dependent destroys.
Parse dates in tasks using Rails time ago in words to show completed times. Use distance of time in words to display time remaining until due dates.
Sort tasks so incomplete items appear first and completed ones show a line-through with an orange highlight. Move the ordering logic to the task model and define an incomplete-first scope.
Add a dynamic progress bar on the project show page to display task completion, using Ruby to compute completed and total tasks, and refactor with a completed scope for efficiency.
Seed a rails app with faker to generate 20 projects and 20 tasks per project, using unique subject names, read-prefixed titles, and seeding via bundle install and rails db reset.
Explore how to reset and seed a Rails multitenant app, run the server, and use the Rails console to query and manage users and projects, then implement pagination.
Learn to implement pagination in a Rails app using a gem, set five items per page, and render page navigation styled with Tailwind, while eager loading tasks to improve performance.
Master paginating progenitor tasks on the projects show page using a page variable and five per page, and adjust the search label from projects to tasks for accurate filtering.
Implement a Rails search controller with an index action to query projects by name via a get request, wiring a form in the admin nav to submit and display results.
Style the search results as a popup using turbo frames, link results to their project show page, and implement a case-insensitive fuzzy name search with raw sql.
Hook up a stimulus search controller to the form and input in a Hotwire app, implementing a three-second debounce to submit after typing stops, with timeout clearing on disconnect.
Add per-project search in a multitenant Rails app using the ransac gem, updating gemfile and controller, and building a task name search form, noting elastic search and Algolia as alternatives.
Learn to filter and sort tasks by priority with a form select using exact match, chaining forms, a reset link, and submit on change to show high, medium, or low.
Sort a multitenant SaaS task table with header sort links, customize header names, and enable per-column sorting for name and due date while adding near-deadline notifications and color-coded priorities.
Style task priorities with a helper using content_tag to render colored high, medium, and low labels, and show expired status by labeling expired tasks while validating due dates in Rails.
I'm excited to release this feature rich course, it is the only up to date video course on the internet showing how to build a multitenant SaaS real world application using ruby on rails and hotwire.
The technologies used are:
Ruby on rails 7+
Ruby 3+
Stripe
Hotwire
The course contains more than 20 hours and by the end you will learn the following:
Learn to build your own advanced software from end to end and profit
How to add different subscriptions to your application using stripe
Authentication and authorization to separate data from different entities using multitenancy
Creating Notifications and deliver via emails, database and cronjobs.
Visualize data using Charts in rails
Effectively use hotwire for reactive applications without JavaScript.
Sorting and searching in ruby on rails
Some of the things we will cover are as follows:
(A) Home Page Design
Pick colors for design
Pick icons for design
Pick Illustrations for design
Using tailwind CSS to bring design to life
(B) Authentication Build using devise
Set up devise
Design login pages
Design Sign out pages
Redirection after sign in
Redirection to subdomains
Accepting nested attributes
Add custom fields
(C)Dashboard layouts
Designing the dashboard using tailwind
Displaying dashboard cards
Visualizing data using pie charts and charts
Navbar with modals
(D) Projects and tasks
Create read Update Delete Projects
Using Modals to edit projects
Nesting tasks under projects
Assigning tasks
Marking tasks completed
Sorting and searching projects or tasks
(E) Authorization and roles
Set admin roles
Set team leader roles
Set team member roles
Advanced authorization
(F) Notifications
Send urgent tasks notifications
Deliver roles via email
Mark roles as read
Background jobs
Trigger notifications via a cron job
(G) Multitenancy
Create organizations
Concept of team and team members
Inviting users to the organization
Using acts as tenant to separate organizations data
(H) Calendar
Calendar view for tasks due
Use simple calendar gem
(I) Payments
Using stripe and pay gem for subscriptions
Cancel or upgrade plans
Restrict pro features to paying customers
I highly recommend giving Ruby on rails a try if you haven't and experience the magic!!. There is a reason big companies like GitHub, Shopify or Airbnb use it and its still going strong after 20 years!!
Incase of anything no matter how stupid it may seem, please reach out to me and I will be more than happy to respond. With your support, this course will always be up to date.