How to build a complete, real-world application from scratch with Ruby on Rails step by step.
A lot of Ruby code is "magic". We'll explain the magic and see how it works using the powerful tools Ruby gives us.
Accept subscription and one-time payments with Stripe in your Rails apps
Expert advice on keeping Rails apps organized and fast.
Cheap, easy hosting for Ruby and Rails apps.
Launch your product business way faster with our SaaS template.
A weekly podcast on web development and building products with Ruby, Rails, Javascript, and more.
Build a Ruby on Rails app in 48 hours with us.
Help Junior developers get hired by sharing small projects to build their resume with paid work.
Find your next Ruby on Rails Job.
Copying to the clipboard is an incredibly useful feature for a password manager. We always want to copy & paste the username and password to authenticate, so we'll write a Stimulus Controller to add copy to clipboard functionality
User mentions in group chat is a crucial feature, so this week we're taking a look at how to add @ mentions for our users in chat with regex and more.
Scroll events in Javascript can happen quickly. We want to make sure we don't request the same page multiple times which we can solve easily by introducing a little throttling.
It's important to see that there are unread messages in channels you're not actively viewing. We can use a very simple event in ActionCable to do this and bold channel names with unread messages.
Need a way for users to edit code in your Rails app? CodeMirror is an excellent option for a Javascript code editor that you can use with your Rails apps. We'll set up CodeMirror with Stimulus.js so you can replace any text field in Rails.
Webpack bundles can be confusing as to what actually ships in production. Using the bundle analyzer plugin, we can visualize and see exactly what libraries and files are taking up what space.
Learn how to add Google Analytics' gtag.js to Webpacker with Turbolinks support
In this episode, we'll walk through how I discovered an improvement for Rails' new Request.js library and how we approached and implemented the feature in a pull request.
Learn how to use system tests for file uploads with file input fields and drag & drop with Uppy and Dropzone
hCaptcha is a method to try detecting bots on your website. This episode, we'll walk through how to implement hCaptcha in a way that's compatible with Turbo using Stimulus.js and
We don't want anyone to be able to embed your Javascript widget on any domain, so we'll setup our app to check the domain and only allow the widget on specific sites
Keeping track of a user's last read timestamp for each chat room is straightforward, especially when we use Stimulus.js to update it from the client side.
Turbo confirm modals typically ask a simple yes or no confirmation. What if you want to force the user to type in confirmation text to ensure they are paying attention? That's exactly what we'll build in this episode!
Using jQuery and plugins like jQueryUI in modern Javascript can be a little tricky. We'll see how to use it, how to deal with javascript import hoisting and how to add plugins like jQueryUI
A command palette is a common feature for power users. Learn how to add a command palette to your Ruby on Rails app using the Ninja Keys web component.
Resources on how to learn Ember more deeply
Learn how to auto-submit forms when a user changes a value and use custom Turbo Stream Actions to update the page
Learn how to use Javascript constructors and destructors with Turbolinks to add compatilibty to any Javascript library you want
Creating draft records in your database can be tricky. We'll be using the Draftsman gem to help us create draft versions of our records with our autosave Javascript
An updated version of our Group Chat series using Webpacker, ActionCable, Stimulus.js, and modern Javascript to build a very clean version of realtime group chat in Rails
Join 82,464+ developers who get early access to new tutorials, screencasts, articles, and more.
We care about the protection of your data. Read our Privacy Policy.