# SupeRails > Ruby on Rails and Hotwire code-along screencasts Every episode below is also available as markdown by appending `.md` to its URL. The full text of all free episodes is at https://superails.com/llms-full.txt. ## Playlists - [Action Mailer](https://superails.com/playlists/action-mailer) - [Active Storage](https://superails.com/playlists/active-storage) - [AVO](https://superails.com/playlists/avo) - [Build a Calendar](https://superails.com/playlists/calendars): Do you work at 37signals? Are you building a calendar? Are you facing a deadline? This series is for you! 😜 - [Build an OpenGraph automation tool](https://superails.com/playlists/build-an-opengraph-automation-tool): Automate your open-graph social images with screenshots! Get better CTR to your link with engaging OG social images. Build a micro SaaS like https://image.social/ or https://tinyzap.co/ - [Build a PDF generator (CertificateOwl)](https://superails.com/playlists/certificateowl): I've always dreamt of building an app, where a user can: 1. Select a certificate template (certificate of completion/award/graduation/etc.) 2. Upload a CSV file with a list of awardees;emails;award_details 3. Auto-generate PDF certificates and send people emails 4. Page to validate certificate by QR on ID I will start with researching the competition and building a proof-of-concept app. Let's see where it takes me! - [Build a Q&A app](https://superails.com/playlists/building-askdemos): I am often asked to create a video about X topic. This app would allow content creators to create Questions, and their audience can add Answers and upvote them (yeah, sounds a bit like Stackoverflow). - [Create and host static website with Jekyll](https://superails.com/playlists/create-a-static-website-with-jekyll) - [Datatables](https://superails.com/playlists/datatables): Search, sort, filter tables - [Devise Authentication (Login)](https://superails.com/playlists/authentication) - [Friendly Show Podcast](https://superails.com/playlists/friendly-show-podcast) - [Hotwire Native](https://superails.com/playlists/turbo-native): Learn to build mobile apps with Ruby on Rails and Hotwire Native. Turbo Native + Strada = Hotwire Native. - [i18n (internationalization)](https://superails.com/playlists/i18n-internationalization) - [International company database](https://superails.com/playlists/build-a-global-company-search-engine): Find & autocomplete company info across different national registries - [Just enough Hotwire for Rails developers](https://superails.com/playlists/just-enough-hotwire-for-rails-developers) - [Live talks](https://superails.com/playlists/talks) - [Maps & Geolocation](https://superails.com/playlists/maps-geolocation) - [Mentions, Hashtags](https://superails.com/playlists/mentions-hashtags) - [Progressive Web Apps (PWA)](https://superails.com/playlists/pwa) - [Rails Authentication generator](https://superails.com/playlists/rails-authentication-generator) - [Rails REST API](https://superails.com/playlists/rails-rest-api): - Bearer token authentication - create API endpoints - Swagger - OpenAPI - rswag - Usage tracking - Rate limiting & more! - [Stripe Ecommerce App](https://superails.com/playlists/stripe-ecommerce-app): Build an app where user can add items (and choose quantity) to the shopping card and checkout by processing a payment via Stripe. Also available on Udemy: https://www.udemy.com/course/complete-guide-to-payments-with-ruby-on-rails-stripe-api/ - [Stripe SaaS Subscriptions app](https://superails.com/playlists/stripe-saas-subscriptions-app): Rails 6, Stripe Checkout, Stripe Billing dashboard - [Stripe SaaS with Rails 7](https://superails.com/playlists/stripe-saas-with-rails-7): Revised approach to processing subscriptions - [Tailwind on Rails](https://superails.com/playlists/tailwind-on-rails): Stop copypasting CSS and Javascript UI elements! Learn to write your own! Really, there are like 50 classes that you need to remember and you're set for life! - [Telegram API](https://superails.com/playlists/telegram-api): Automate your Telegram group! - Create a bot - Auto-send notifications to group chat - oAuth ## Episodes - [Gem Hotwire Native Rails - convert your Rails app into Native VERY FAST | SupeRails #219](https://superails.com/posts/gem-hotwire-native-rails-convert-your-rails-app-into-native-very-fast-superails-219.md): Quick recap Yaro discussed the use of Hotwire Native, a tool for wrapping web applications into mobile applications, and demonstrated how to use the Hotwire ... - [#240 Stop Making Ugly Rails Apps – DaisyUI + Tailwind Will Change Your Life](https://superails.com/posts/240-daisyui-an-essential-component-library-for-tailwindcss.md): BootstrapCSS has amazing components. TailwindCSS has amazing utility classes. DaisyUI is a component library on top of Tailwind. It let's you use Boostrap-li... - [#239 Feature flags and A/B testing](https://superails.com/posts/239-big-boys-use-feature-flags.md): Any mature Rails app needs feature flags. Usecase #1: Product & QA people can test features before releasing them. They can enable/disable features without d... - [#238 Deploy Rails 8 to Render.com. Solid Trifecta on Postgres](https://superails.com/posts/238-deploy-rails-8-to-render-com-solid-trifecta-on-postgres.md): These days Render is my go-to tool for deploying Rails apps. For example, SupeRails.com has been hosted there for 2 years now. Render is as easy as Heroku to... - [#237 Solid Queue, Cache, Cable with Postgres in Production](https://superails.com/posts/237-solid-queue-cache-cable-with-postgres-on-production.md): Make Solid Queue, Cache, Cable work with Postgres Add MissionControl to monitor Jobs Deploy to production and troubleshoot PR with code changes - [#236 Run Moneygun SaaS locally. Configure Stripe Plans and Webhooks](https://superails.com/posts/236-run-moneygun-saas-locally-configure-stripe-plans-and-webhooks.md): Build your next B2B SaaS app (software as a service) with Moneygun: It's the EASIEST way to add Teams and Subscriptions. Focus on Your unique app features, n... - [#235 How to hide IDs from page URLs in Ruby on Rails. The smartest approach!](https://superails.com/posts/235-how-to-hide-ids-from-page-urls-in-ruby-on-rails-the-smartest-approach.md): You definitely want to hide IDs from your app. It's a very basic security consideration. There are many Ruby gems that let you hide ids, but neither gem is p... - [#234 Vibe coding basics. Adding Dark mode to existing app with only prompts?!](https://superails.com/posts/234-vibe-coding-basics-adding-dark-mode-to-existing-app-with-only-prompts.md): These days I wouldn't hire someone that does not use any AI in their daily coding. Stubborn? Stuck in the past? Here's a very basic introduction to "vibe cod... - [#233 Build your next B2B SaaS with Moneygun SaaS Multitenancy boilerplate!](https://superails.com/posts/233-build-your-next-b2b-saas-with-moneygun-saas-multitenancy-boilerplate.md): Previously Moneygun was just an example app of how to implement secure route-based Multitenancy without any gems. Now I've added Subscriptions on Organizatio... - [#232 AVO Directory. SEO basics. Friendly ID, Meta Tags.](https://superails.com/posts/05-avo-directory-friendly-id-meta-tags.md): Search Listings by JSON payload (metadata) Computed resource title Friendly ID (Pretty URLs) Meta Tags - [#231 AVO Directory. Attachments. Screenshot automation](https://superails.com/posts/04-avo-directory-attachments-screenshot-automation.md) - [#230 AVO Directory. Cover & Profile images. Grid VS Table. Nokogiri for metadata](https://superails.com/posts/03-avo-directory-images.md): Parse URL metadata with Nokogiri Avo resources: - Actions - Profile & Cover photo - External Image - Grid Example directories (not an endorsement) - [#229 AVO Directory. Associations, Search](https://superails.com/posts/02-avo-directory-associations-search.md): Avo resources: - Search - [Upgrading Tailwind CSS from v3 to v4 in Rails #228](https://superails.com/posts/tailwind-4-upgrade-228.md): Keep your dependencies updated! Tailwind 4 can be configured in the CSS file (no need of tailwind.config.js) However you need to first update tailwind.config... - [oEmbed - the secret public API for content metadata #227](https://superails.com/posts/oembed-226.md): Want to allow users to embed third-party content? (youtube or vimeo videos, podcast players) You should use oEmbed. This way you won't have to manually handl... - [Best VS Code Extensions for Ruby on Rails Developers for 2025 #226](https://superails.com/posts/best-vs-code-extensions-for-ruby-on-rails-developers-for-2025-226.md): Copy my VS Code settings here: The extensions I use in every app: "esbenp.prettier-vscode", - lint CSS and JS "bradlc.vscode-tailwindcss", - Tailwind CSS loo... - [Yaroslav Shmarov, "Rails 8 Frontend: 10 commandments and 7 deadly sins in 2025"](https://superails.com/posts/yaroslav-shmarov-rails-8-frontend-10-commandments-and-7-deadly-sins-in-2025.md): Rewire your React/RailsAPI brain and learn to build a maintainable Rails Frontend!We will analyse some design patterns (10 commandments) and antipatterns (7 ... - [Typesense search with Ruby on Rails #225](https://superails.com/posts/typesense-search-with-ruby-on-rails-225.md): Previously I did the obvious thing and searched my Postgres database for Posts by "title". But when you need to scale your search due to a a large dataset, o... - [Global app settings with gem rails-settings-cached #224](https://superails.com/posts/gem-rails-settings-cached-for-global-app-settings-224.md): Allow admin users to change global app settings like app name, contact email. With this gem you store settings in the database, and have a UI to change setti... - [ALL the Jekyll plugins you will ever need #223](https://superails.com/posts/all-the-jekyll-plugins-you-will-ever-need-223.md): 10 Jekyll plugins (ruby gems) that will turn your blog from 💩 to 🔥 Episode source code: Based on this blogpost - [Jekyll site - add comments, analytics, monetisation #222](https://superails.com/posts/jekyll-site-add-comments-analytics-monetisation.md): Let's add some external tools to our Jekyll site: - Plausible analytics for tracking visits - Giscus (Disqus alternative) for comments via Github Discussions... - [You don't have a blog? Are you even a Web Developer? Create a blog with Jekyll! #221](https://superails.com/posts/you-don-t-have-a-blog-are-you-even-a-web-developer-create-a-blog-with-jekyll-221.md): Use Jekyll: Episode source code: My blog that uses Jekyll - [Host a static website on Github Pages on your own domain for free #220](https://superails.com/posts/host-a-static-website-on-github-pages-on-your-own-domain-for-free-220.md): Am I even a Web Developer, if I don't have a website? Episode source code: Text version: Verify a domain with Github - [How to use SupeRails | #00](https://superails.com/posts/how-to-make-the-most-of-superails.md): Platform: Text blog: Source code for all episodes - [Add Avo to existing app | SupeRails #218](https://superails.com/posts/add-avo-to-existing-app.md): Let's add Avo to an existing Rails app Change history: generate Avo resources add search admin-only Avo access styling All the changes together - [AVO Internal tool. Authentication, Invitations, Roles, Tests | SupeRails #217](https://superails.com/posts/avo-internal-tool-rails-8-authentication-invitations-tests.md): If you want to build an Internal tool, or Admin dashboard in Ruby on Rails, there is no better tool than Avo If you are building an internal tool, you don't ... - [AppStore Review Component | Hotwire Native Bridge | SupeRails #216](https://superails.com/posts/hotwire-native-bridge-dropdown-app-store-review-prompt-component-superails-216.md): Blogpost: Source code - [Dropdown Component (iOS UIMenu) | Hotwire Native Bridge | SupeRails #215](https://superails.com/posts/hotwire-native-bridge-dropdown-bridge-component-uimenu-superails-215.md): Blogpost: Episode source code - [Menu Component (iOS Action Sheet) | Hotwire Native Bridge | SupeRails #214](https://superails.com/posts/214-hotwire-native-bridge-menu-component.md): Bridge Menu let's you open a native menu with links and buttons. For example you can hide the HMTL "Edit" and "Delete" buttons on mobile, and display them in... - [Form Component | Hotwire Native Bridge | SupeRails #213](https://superails.com/posts/hotwire-native-bridge-form-component-superails-213.md): Hotwire Native Bridge FORM Component let's you hide the HTML "Submit" button on a form, and display a native "Submit" button on the top-right corner of the s... - [Cmd+Enter to Submit Forms | SupeRails #212](https://superails.com/posts/command-enter-to-submit-forms-superails-212.md): We will explore 3 different ways of solving the same problem with StimulusJS. I think solving the same problem with different approaches is a great way to le... - [Clickable Video Chapters. Vimeo Player API | SupeRails #211](https://superails.com/posts/clickable-video-chapters-vimeo-player-api-superails-211.md): In my app I embed videos with Vimeo. I’ve just implemented Video timestamp/chapter navigation on videos embeded on SupeRails. I was inspired by Chapters on Y... - [Pros embed Vimeo. Amateurs embed Youtube. Learn Vimeo API basics | SupeRails #210](https://superails.com/posts/vimeos-competitive-advantage-over-youtube-superails-207.md): I host SupeRails PRO videos on Vimeo It is great because: - no youtube branding & ads = more premium feeling - I don’t have to think about hosting my videos ... - [Moneygun - Add ActsAsTenant to an existing application | SupeRails #209](https://superails.com/posts/moneygun-add-actsastenant-to-an-existing-application.md): Enhance Multi-Tenancy with ActsAsTenant in Rails! In this episode, we’re diving into ActsAsTenant—a gem that strengthens your multi-tenancy setup by ensuring... - [Moneygun - Multitenancy & Teams boilerplate | SupeRails #208](https://superails.com/posts/moneygun-teams-multitenancy-boilerplate.md): In Episode 115 we created a multi-tenant application without any gems. Multitenancy was row-based, and we set current tenant via routes. Episode 115: Based o... - [Exploring the SupeRails source code | SupeRails #207](https://superails.com/posts/exploring-the-superails-source-code-superails-207.md): In this episode we dive into the SupeRails codebase! See the database architecture, gems, API dependencies, and admin backend powering the SupeRails web app.... - [Sentiment Analysis: No AI, just math | SupeRails #206](https://superails.com/posts/sentiment-analysis-superails-206.md): Sentiment analysis is a way to analyse a text and quantify its positivity negativity based on keywords from a "word positivity database". In this episode we ... - [Authentication-Zero: What Rails 8 Authentication Wants to Be When It Grows Up | SupeRails #205](https://superails.com/posts/authentication-zero-what-rails-8-authentication-wants-to-be-when-it-grows-up-superails-204.md): Some people don't like Devise because: - it feels too much like magic - it can be hard to extend Rails 8 authentication aims to solve these objections by gen... - [PWA in real life. The Rails World 2024 experience with Campfire and Agenda app | SupeRails #204](https://superails.com/posts/pwa-in-real-life-the-rails-world-2024-experience-with-campfire-and-agenda-app.md): During Rails World 2024 the 1000 attendees had the experience of using 2 PWA apps. The Agenda app by Telos Labs, and a Campfire instance. In this video I wil... - [Nav Button Component | Hotwire Native Bridge | SupeRails #203](https://superails.com/posts/af2918d5-fcb6-4cc5-ab0a-1917a219d479.md): In this episode you will: - Learn to install & use Bridge Button component. - Extend Bridge Button to accept images. - Learn what happens if there are multip... - [Hotwire Native - Rails World 2024 Lightning talk (Unofficial recording), Yaroslav Shmarov](https://superails.com/posts/yaroslav-shmarov-hotwire-native-rails-world-2024-lightning-talk-unofficial-recording.md): Slides: You will learn: What is Hotwire Native? How is Hotwire Native different from Turbo Native and Strada? How to prepare your Rails app to work as a Hotw... - [Hotwire Native Tabs | SupeRails #202](https://superails.com/posts/hotwire-native-tabs-superails-202.md): Let's add native iOS tabs! Each native tab has its own browsing session. We will also customize Navbar & Tabbar colours (make it them transparent). Finally, ... - [Hotwire Native on existing Rails app | SupeRails #201](https://superails.com/posts/hotwire-native-on-existing-rails-app-superails-201.md): In the previous episode we ran the Hotwire Native Demo app, explored the code and example behaviours. Now let's run our own Rails inside the Hotwire Native "... - [Hotwire Native: Getting Started. Build mobile apps with Rails | SupeRails #200](https://superails.com/posts/hotwire-native-getting-started-build-mobile-apps-with-rails-superails-200.md): Turbo Native is now deprecated. Use Hotwire Native instead! Hotwire Native is a combination of Turbo Native + Strada + Turbo Navigator. Also, Strada Componen... - [Turbo Native 7. Strada Form Component (Native submit button) #196](https://superails.com/posts/turbo-native-7-strada-form-native-submit-button.md): Strada Form pattern lets us hide the submit button we display in web views, and replace it with a Native submit button in the top-right corner of the screen.... - [Turbo Native 6. Strada. Navigation Button Component #195](https://superails.com/posts/turbo-native-6-strada-navigation-button.md): Unfortunately currently TurboNative + TurboNavigator + Strada don't just work out of the box (yet). The setup is quite tricky. I installed Strada the same wa... - [Turbo Native 5. Conditional Rendering (only Web/only Mobile) #194](https://superails.com/posts/turbo-native-5-conditional-rendering-css.md): use html title, conditional rendering with turbo_native_app? helper: display app name in title only for Web: tailwind turbo-native variant - [Turbo Native 4. Better Authentication flow. Turbo Confirm. Turbo Replace #193](https://superails.com/posts/turbo-native-4-better-authentication-flow-turbo-confirm-turbo-replace.md): confirmation modal to sign_out: don't render devise views as modals: navbar - do not stack navigation (breadcrumbs): generate devise views: devise forms - do... - [Turbo Native 3. Turbo Navigator, Native Modals, PathConfiguration #192](https://superails.com/posts/turbo-native-3-turbo-navigator-native-modals-pathconfiguration.md): Install Turbo Native the right way using turbo-navigator branch, open /new, /edit, /sign_up, /sign_in as a modal: Push Path Configuration JSON from Rails app... - [Turbo Native 2. Create new Turbo Native app. Basic navigation and authentication #191](https://superails.com/posts/turbo-native-2-create-new-turbo-native-app-basic-navigation-and-authentication.md): Generate new Rails app: Generate iOS app: iOS - install Turbo Native: Rails - static pages: iOS - use localhost: Rails - install devise for authentication - [I'm launching Trezy Classifier on ProductHunt! API tool to analyse bank transactions #190](https://superails.com/posts/i-m-launching-trezy-classifier-on-producthunt-api-tool-to-analyse-bank-transactions.md): The API tool: I built a big part of this app for a company I've been working with. The app allows you to analyse and categorise bank transactions, and compan... - [Use JSON to store and display company information | SupeRails #189](https://superails.com/posts/use-json-to-store-and-display-company-information-superails-189.md): Bravo, you made it to the final episode in the series, dear friend! To store the whole company information and make it searchable and readable, we should use... - [Build a international company search engine | SupeRails #188](https://superails.com/posts/build-a-international-company-search-engine-superails-188.md): In #181 & #187 we searched French & UK company registries via API. Now let's add a country-select field, so that users can search for comanies across legisla... - [Find and update UK🇬🇧 company information | SupeRails #187](https://superails.com/posts/find-and-update-uk-company-information-superails-187.md): Previously I wrote about finding a company in the French national company database. Now let’s search 🇬🇧UK companies via API. Episode source code: Based on th... - [Mention users with TributeJS | SupeRails #186](https://superails.com/posts/mention-users-with-tributejs-superails-186.md): In episode #95 we focused on parsing text and converting hashtags and mentions into links. Now let's add an @ mentions dropdown to any text field, so that yo... - [Social Share button (very important for PWA & Turbo Native apps) | SupeRails #185](https://superails.com/posts/social-share-button-very-important-for-pwa-turbo-native-apps-superails-185.md): If you open an app in a browser, you can easily copy the URL or click the native Share button. But if you are running the app as a PWA or Turbo Native app, t... - [Getting Started with Turbo Native in Ruby on Rails | SupeRails #184](https://superails.com/posts/ruby-on-rails-184-turbo-native-in-15-minutes-getting-started.md): Let's learn to build mobile apps with Hotwire using Turbo Native! Turbo Native iOS: Turbo Navigator branch: Shoutout to @joemasilotti - he has great examples... - [#183 Rails 7.2 Rate limiting for Devise - Guard your app from spam and bots!](https://superails.com/posts/rails-7-2-rate-limiting-for-devise-guard-your-app-from-spam-and-bots.md): 🔒 Secure your app from password-guessing attacks, spam, and abuse by rate-limiting your sign-up and sign-in pages. I always rely on the wonderful rack-attack... - [#182 Build an OpenGraph image generator](https://superails.com/posts/182-build-an-opengraph-image-generator.md): This app will automatically take screenshots of URLs and turn them into custom opengraph-friendly images. Episode source code: Text guide - [#181 Search and Autocomplete French Company Information](https://superails.com/posts/181-search-and-autocomplete-french-company-information.md): Let's solve a common business problem! Allow users to find a company in a public company registry via API and autocomplete company info. While building this ... - [#180 EU eInvoicing. PDF to XML to JSON. FaxturX, ZUGFeRD](https://superails.com/posts/180-eu-einvoicing-pdf-to-xml-to-json-faxturx-zugferd.md): I will walk you through the codebase of a Ruby app that lets you upload PDF documents and extract XML metadata, if the PDF document is eInvoice-compliant acc... - [#179 NEW Rails 8 Authentication Generator: Build Registrations feature](https://superails.com/posts/179-new-rails-8-authentication-generator-build-registrations-feature.md): Rails will now have a default authentication generator out of the box! In the previous episode we ran the generator, allowing existing users to sign in. Now ... - [#178 NEW Rails 8 Authentication Generator](https://superails.com/posts/178-new-rails-8-authentication-generator.md): Recently DHH merged a PR that adds an authentication generator to Rails. Currently the generator allows email-password log in for existing users. It does not... - [Tailwind on Rails #177 Responsive Collapsible Sidebar](https://superails.com/posts/tailwind-on-rails-177-responsive-collapsible-sidebar.md): Let's add a button to minimise (collapse) the sidebar. When the sidebar is minimised, only link icons (not labels) are visible. We will also save the sidebar... - [#176 Sign in with Apple. Omniauth. Social log in with Devise](https://superails.com/posts/176-sign-in-with-apple-omniauth-social-log-in-with-devise.md): Add a "Sign in with Apple" button to your app! Step 1: Create an apple developer account ($99) Step 2: Generate the API keys Step 3: Fix gem omniauth-apple T... - [#175 Sell access to a Github Repository. Sell your code!](https://superails.com/posts/175-sell-access-to-a-github-repository-sell-your-code.md): Allow users to pay for your product via Stripe Payment Link. You can place the payment link on any website. When a user pays, a webhook will be sent to the R... - [#174 i18n. Test translations, refactor, and launch into production! 🚀](https://superails.com/posts/rails-174-i18n-test-translations-refactor-and-launch-into-production.md): The feature is ready, but the code is not production-grade yet. Let's refactor the code and write some tests for translations. This way we can go from "good"... - [#173 automate translations with AI](https://superails.com/posts/rails-173-ai-automated-translations.md): Previously we enabled language selection for guests and users. Now let's actually translate the YML files from English to other languages. There are many too... - [#172 i18n. Set language preferences in session or in User model](https://superails.com/posts/ruby-on-rails-172-i18n-set-language-preferences-in-session-or-in-user-model.md): 🚫 The official Rails Guides do not recommend to store locale in session/cookie. Let's break the rules! 😈 In this episode: - not logged in users store languag... - [#171 Internationalisation (i18n) basics. Translate your app!](https://superails.com/posts/ruby-on-rails-171-internationalisation-i18n-basics-translate-your-app.md): In this episode we make our app available in different languages. There are different strategies to set the current language. Setting the language in the URL... - [#170 Maintainable Buttons CSS](https://superails.com/posts/tailwind-on-rails-170-maintainable-buttons-css.md): Please, don't abstract button CSS into a component! It leads to suffering. Don't do this: Using inline styles for buttons with Tailwind is also a bad option,... - [Build a diff checker with database record version control #169](https://superails.com/posts/diff-app.md): Track changes in post.title and post.body Display version history Display diff between versions (like github) Text version: Episode source code: Gem audited:... - [#168 Mobile footer navigation](https://superails.com/posts/tailwind-on-rails-168-mobile-footer-navigation.md): You use your thumb to click on your phone. That's why all mobile apps have footer navigation. A good web app should also have footer navigation on a mobile (... - [#167 Build a PWA](https://superails.com/posts/ruby-on-rails-167-build-a-pwa.md): Let's turn an existing app into a PWA by adding a valid Webmanifest and Service Worker. You can simply add the files to the /public folder, OR you can do it ... - [#166 PWA (Progressive Web Apps) in Rails 8](https://superails.com/posts/166-pwa-progressive-web-apps-in-rails-8.md): Make your Rails website behave like an installable app by turning it into a PWA. All new Rails apps will have a webmanifest by default, meaning your app will... - [Friendly S2E8 Radoslav Stankov does not need Hotwire](https://superails.com/posts/friendly-s2e8-radoslav-stankov-does-not-need-hotwire.md): One more cool cat from BalkanRuby! This time we talk to Rado ex-producthunt, building his own product - AngryBuilding. He is the only developer and has a tea... - [Friendly S2E7 Nick Sutterer - Trailblazer and ViewComponents daddy and heart of the party](https://superails.com/posts/friendly-s2e7-nick-sutterer-trailblazer-and-viewcomponents-daddy-and-heart-of-the-party.md): Nick is one of the most fun exciting people to be around! He has a few superpowers: Developing unique Ruby tools way ahead of their time He created Trailblaz... - [Stripe Embedded Checkout form](https://superails.com/posts/stripe-embedded-checkout-form.md): 😖 I really dislike Stripe Elements: you have to build and style the checkout form yourself. 🤩 Instead, stripe-hosted full screen checkout is a much better ap... - [Friendly S2E6 Meet Balkan Ruby organiser Genadi Samokovarov 🇧🇬](https://superails.com/posts/friendly-s2e6-meet-balkan-ruby-organiser-genadi-samokovarov.md): Since the first moment I met Genadi I felt “this guy is great to be around“! In this episode he talks about the 🇧🇬 ruby community, organising conferences, hi... - [Friendly Show S2E5 Balkan Ruby! 👽 Irina Nazarova. Making $ on Dev tools 🤑🤑🤑](https://superails.com/posts/friendly-show-s2e5-balkan-ruby-irina-nazarova-sustainable-open-source.md): This week we are visiting Balkan Ruby in Sofia, Bulgaria. We met a lot of people who impact our community. In this episode we discuss Sustainable Open Source... - [#165 Manage active sessions. Security feature](https://superails.com/posts/superails-165-manage-active-sessions-security-feature.md): In some cases to enhance security of your application you will want to allow users to see all the devices/browsers they are logged in with. You would also pr... - [#164 The illegal loophole to scaffold Tables in Rails 7](https://superails.com/posts/superails-164-scaffold-tables-in-rails-7-custom-scaffold-templates.md): Since Rails 7 you can not scaffold tables in the index view any more. Instead you have a list of cards. Here's how you can bring back tables to your scaffold... - [#163 Instant page loads with Turbo 8 prefetch (aka InstantClick)](https://superails.com/posts/superails-163-instant-page-loads-with-turbo-8-prefetch-aka-instantclick.md): Turbo 8 has been released! One of the core new features - hover-click preload acceleration (ala InstantClick). InstantClick makes an assumption about potenti... - [Friendly Show S2E4 Ufuk says there is definitely NO consipracy around RailsConf 2024 in Detroit!](https://superails.com/posts/friendly-show-s2e4-ufuk-says-there-is-definitely-no-consipracy-around-railsconf-2024-in-detroit.md): Audio version: RailsConf is happening on 7-9 of May! And Ufuk is the lead organizer! He recently joined the Ruby Central board of directors. He is on the Sho... - [#162 Gem Ferrum - Generate PDF and PNG with Headless Chrome API. No Puppeteer, no NodeJS](https://superails.com/posts/superails-162-gem-ferrum-generate-pdf-and-png-with-headless-chrome-api-no-puppeteer-no-nodejs.md): Ferrum is Headless Chrome Ruby API. Ferrum lets you open a headless chrome browser and perform different actions: - visit web page - HTTP authenticate - find... - [#161 Import ICS Calendar events with Gem iCalendar](https://superails.com/posts/rails-161-import-ics-calendar-events-with-gem-icalendar.md): I love building calendars! ICS is the default format for a calendar file. Today we'll learn to read an ICS file and import it into our app. Recently 37signal... - [Friendly Show S2E3 Meet SQLite Jesus, Stephen Margheim](https://superails.com/posts/meet-sqlite-jesus-steven-memenheim.md): Stephen is on a mission to make SQLite good enough for production. We talked about: - SQLite and Litestack - contributing to open source - being "the guy" in... - [#160 Meta Tags. Open Graph, SEO, social sharing previews](https://superails.com/posts/rails-160-meta-tags-open-graph-seo-social-sharing-previews.md): Meta tags help to render your website nicely in the browser, in search engines, and in social media link previews. Favicon, site name, page title, page descr... - [#159 Access localhost anywhere with Ngrok](https://superails.com/posts/rails-159-access-localhost-anywhere-with-ngrok.md): Ngrok gives a public URL to your localhost. This is useful for testing from other devices, working with external APIs that require a real URL. Based on this ... - [Friendly Show S2E1 Andy Croll - CTO at CoverageBook, Brighton Ruby, RailsConf](https://superails.com/posts/friendly-show-s2e1-andy-croll-cto-at-coveragebook-brighton-ruby-railsconf.md): Join the conversation with the serial conference organizer Andy Croll, where we talk about how he started Brighton Ruby, why he's still doing it, how he's he... - [#158 Build a Calendar from zero. No external dependencies!](https://superails.com/posts/rails-158-build-a-calendar-from-zero-no-external-dependencies.md): A long time ago I thought it impossible to build a calendar on your own; I thought you need an external library. However building a calendar is much easier t... - [Friendly Show S2E2 Amanda Perino. RailsWorld 2024. CFP open. How to become a speaker?](https://superails.com/posts/friendly-show-s2e2-amanda-perino-railsworld-2024-cfp-open-how-to-become-a-speaker.md): Join the dialogue with Amanda Perino, CEO of the Rails Foundation, as we unpack the intricacies and excitement of Rails World 2024. Amanda brings her unique ... - [Is DocRaptor worth it? Puppeteer, DocRaptor, WeasyPrint](https://superails.com/posts/is-docraptor-worth-it-puppeteer-docraptor-weasyprint.md): In E155 I talked about DocRaptor - a premium API for generating and storing PDF via the PrinceXML HMTL-to-PDF technology. Today I am joined by James Paden wh... - [#157 Calendar Pagination with gem Pagy](https://superails.com/posts/ruby-on-rails-157-calendar-pagination-with-gem-pagy.md): We are all used to pagination by clicking a prev or next page link. But what if we could paginate by year/month/day? Some time ago I asked Domizio Demichelis... - [FriendlyShow S1E10 Finale. 2023 summary, 2024 plans. What's coming to Rails 8?](https://superails.com/posts/friendlyshow-s1e10-finale-2023-summary-2024-plans-what-s-coming-to-rails-8.md): Season 1 finale! Today we talk about: - our reflections about 2023 and plans for 2024 - Rails 8 features Highlights: 👶 Being a young father ⛵️ Sailing ✈️ vis... - [#156 Turbo 8 Morphing in real life](https://superails.com/posts/rails-156-turbo-8-morphing-in-real-life.md): Turbo 8 adds a new technique of sending HTML over the wire: "refresh current page, preserve scroll". This new approach opens EASYER ways to render elements o... - [Friendly S1E9 Mariusz Koziel - Ruby community in Poland, how to become CTO and CEO](https://superails.com/posts/friendly-s1e9-mariusz-koziel-ruby-community-in-poland-how-to-become-cto-and-ceo.md): Mariusz is an old friend of ours. Over the last few years we've chilled 🍻 at many events around 🇪🇺 He works at an iconic ruby consulting shop in Warsaw, Pola... - [#155 Generate, store, email PDF invoices. DocRaptor API, HTML to PDF, ActiveStorage, ActionMailer](https://superails.com/posts/155-generate-store-email-pdf-invoices-docraptor-api-html-to-pdf-activestorage-actionmailer.md): Let's solve a classic problem: generate an invoice and email it as PDF to a client. Historically I would do it with gem wicked_pdf. But the underlying techno... - [#154 Avo 3 upgrade](https://superails.com/posts/ruby-on-rails-154-avo-3-upgrade.md): AVO 3 was released a few days ago. I use AVO to manage posts, playlists, tags, comments and users in Superails.com. Follow me as I upgrade Avo 2 to Avo 3! Av... - [#153 Refactoring Hotwire Modals](https://superails.com/posts/ruby-on-rails-153-refactoring-hotwire-modals.md): I AM SORRY for not providing the complete, best approach right away. In E151 we connected turbo frame "modals" with the html dialog element. However this app... - [#152 Custom Turbo Streams. How to redirect from a form that is inside a turbo frame?](https://superails.com/posts/ruby-on-rails-152-custom-turbo-streams-how-to-redirect-from-a-form-that-is-inside-a-turbo-frame.md): How to redirect from a form that is inside a turbo frame? This is a very specific question that you will definitely have after working with Hotwire for some ... - [Friendly Show E8 Andrea Rocca, Hotwire Cookbook, Rails UI, and flying foxes](https://superails.com/posts/friendly-show-e8-andrea-rocca-hotwire-cookbook-rails-ui-and-flying-foxes.md): Surprise surprise: we invited our friend Andrea to the FRIENDLY show! We talked about: 💰 How Andrea switched to programming and became CTO 🙆‍♂️ Everybody nee... - [#151 Advanced Hotwire modals](https://superails.com/posts/ruby-on-rails-151-advanced-hotwire-modals.md): 63 + 142 = 151. Why? In Ep 63 we learnt to build "modals" with Hotwire. In Ep 142 we learnt to use the native HTML dialog element Now let's combine them to c... - [#150 Global Search](https://superails.com/posts/ruby-on-rails-150-global-search.md): "Global search" allows you to search multiple attributes of multiple models in a single search form. For example, on superails.com when you perform a search ... - [#149 DataTables - Filters. Form fields OUTSIDE form. Checkboxes, radio buttons](https://superails.com/posts/rails-149-datatables-filters-form-fields-outside-form-checkboxes-radio-buttons.md): Previously we created a table that we can search and sort using gem Ransack, and paginate using gem Pagy. We also made results update without page refresh us... - [Friendly Show E7 October summary, Brovember plans](https://superails.com/posts/friendly-show-e7-october-summary-brovember-plans.md): I think it was one of our most chill, relaxed episodes. Take a break and join us as we discuss: Building a new Rails starter kit? Rails UI frameworks? GoodJo... - [#148 DataTables without page refresh using Hotwire Turbo Frames](https://superails.com/posts/rails-148-datatables-without-page-refresh-using-hotwire-turbo-frames.md): In the previous episode we added Search, Sort, and Pagination to a data table. Turbo Frames will help us make it work WITHOUT PAGE REFRESH! However we will h... - [#147 DataTables - search, sort, pagination with Ransack and Pagy](https://superails.com/posts/rails-147-datatables-search-sort-pagination-with-ransack-and-pagy.md): Datatables - tables that you can search, sort, and paginate. Gem Ransack is an great tool that I use in most of my apps to add search and sort. Let's dive de... - [#146 Generate Barcodes with JsBarcode. StimulusJS, Importmaps](https://superails.com/posts/ruby-on-rails-146-generate-barcodes-with-jsbarcode-stimulusjs-importmaps.md): This episode is not what you expected, not what you asked for, and not what you deserve. Previously, in episode 56, I talked about generating barcodes with g... - [Rails World - Hotwire Cookbook - Yaroslav Shmarov: Common Uses, Essential Patterns & Best Practices - ](https://superails.com/posts/rails-world-hotwire-cookbook-yaroslav-shmarov-common-uses-essential-patterns-best-practices.md): SupeRails creator and Rails mentor Yaroslav Shmarov shares how some of the most common frontend problems can be solved with Hotwire. He covers: - Pagination,... - [Friendly Show E6 RailsWorld, EuRuKo, FriendlyRB](https://superails.com/posts/friendly-show-e6-railsworld-euruko-friendlyrb.md): Adrian and Yaroslav completed a Triathlon by visiting 3 Ruby conferences in the span of 3 weeks! Today we meet to share our fresh emotions after visiting the... - [#RailsWorld opening!](https://superails.com/posts/railsworld-opening.md) - [Yaroslav Shmarov - Hotwire Cookbook and common use cases - Lightning Talk](https://superails.com/posts/yaroslav-shmarov-hotwire-cookbook-and-common-use-cases-lightning-talk.md): Yaroslav Shmarov is the co-host of the Friendly Show podcast, a content creator on SupeRails.com, and a prominent Ruby community member who focuses on educat... - [A whole train of Ruby developers on RAILS! Literally!](https://superails.com/posts/a-whole-train-of-ruby-developers-on-rails-literally.md): I’m visiting @Euruko (European Ruby Conference) in Vilnus, Lithuania right now. They organised a private train to take the attendees around. Everyone on this... - [Friendly Show E5 André Arko and how we got RubyGems and Bundler. RubyConf 2023: what to expect?](https://superails.com/posts/friendly-show-e5-andre-arko-and-how-we-got-rubygems-and-bundler-rubyconf-2023-what-to-expect.md): André is a long-term maintainer for RubyGems and Bundler - fundamental tools of the Ruby community that we usually take for granted. 🎙️ He joins us to tell t... - [Stripe LIFETIME Subscriptions with Rails 7](https://superails.com/posts/stripe-lifetime-subscriptions-with-rails-7.md): In the previous episode I allowed users to purchase Monthly and Yearly subscriptions via Stripe and gain access to subscriber-only content. Now, let's introd... - [Stripe Subscriptions with Rails 7](https://superails.com/posts/stripe-subscriptions-with-rails-7.md): Previously I did a series on making Stripe subscriptions work with a Rails 6 app: Now, let's make install Stripe and make subscriptions work from zero on a R... - [#145 StimulusJS Hotkeys without any external libraries. It just works!](https://superails.com/posts/ruby-on-rails-145-stimulusjs-hotkeys-without-any-external-libraries-it-just-works.md): Bring your app one step closer to pefection: Assign keyboard hotkeys to let power users quickly navigate around your app! For simple scenarios, you don't nee... - [#144 Why I am replacing Turbo Frames with Streams for ActsAsVotable?](https://superails.com/posts/ruby-on-rails-144-why-i-am-replacing-turbo-frames-with-streams-for-actsasvotable.md): Some server-side rendering problems can be equally solved by either Turbo Frames or Streams. Each approach has it's cons and pros. In this scenario I first i... - [#143 Turbo Permanent: persist Audio Video and Search results while navigating pages](https://superails.com/posts/ruby-on-rails-143-turbo-permanent-persist-audio-video-and-search-results-while-navigating-pages.md): Often when you visiting media websites, you will want an audio or video player to keep playing even after navigating to another page (like Spotify). data-tur... - [#142 Modals with HTML dialog element, Tailwind and Stimulus](https://superails.com/posts/tailwind-on-rails-142-modals-with-html-dialog-element-tailwind-and-stimulus.md): HTML "dialog" is the new standard for creating "modals" with less JS and CSS. Is now supported by all browsers! 🌍 Dialog has some behaviours out of the box: ... - [#141 Responsive Content layout: Grid, Flex, Centered](https://superails.com/posts/ruby-on-rails-141-responsive-content-layout-grid-flex-centered.md): Previously we have created a responsive general application layout and navigation using TailwindCSS. Now, let's look at a few most common ways of placing con... - [#140 Click outside to close Menu with Stimulus-Use](https://superails.com/posts/ruby-on-rails-140-click-outside-to-close-menu-with-stimulus-use.md): "Click outside element to hide it" - this might be one of the most common javascript tasks! We will leverage Stimulus-use and it's clickOutside behaviour to ... - [#139 Advanced Navbar Dropdown Menu](https://superails.com/posts/tailwind-on-rails-139-advanced-navbar-dropdown-menu.md): Previously we created a responsive layout with a Sidebar. On a small screen we will hide the sidebar and display a dropdown mobile-only menu instead. To make... - [#138 Responsive Layout with Sidebar and Navbar](https://superails.com/posts/tailwind-on-rails-138-responsive-layout-with-sidebar-and-navbar.md): "Tailwind CSS: It looks awful, and it works." - Adam Wathan, TailwindCSS creator As of Rails 7, you can automatically install TailwindCSS when generating a n... - [Friendly Show E4 Jonathan Markwell about his new SaaS, BrightonRuby](https://superails.com/posts/friendly-show-e4-jonathan-markwell-about-his-new-saas-brightonruby.md): When I was in middle school in 2005, Jon was already🥇pioneering Rails, startups, coworking, conferences, SaaS and other stuff that became 🔥hot over the years... - [#137 Use ViewComponent to Abstract reusable HTML. Blocks, Slots, Variables](https://superails.com/posts/rails-7-137-use-viewcomponent-to-abstract-reusable-html-blocks-slots-variables.md): Don't repeat yourself (DRY) applies not only to Ruby code, but HTML and CSS too! In this episode we will identify common HTML/CSS elements across some pages ... - [#136 Highlight link to current page](https://superails.com/posts/rails-7-136-highlight-link-to-current-page.md): Highlighting the link to the current page is a very common frontend navigation problem that needs to be solved in all sorts of Rails apps. In this episode we... - [Friendly Show E3 The Ruby On Rails Interview Bible - Author Nezir Zahirović talks about his book](https://superails.com/posts/friendly-show-e3-the-ruby-on-rails-interview-bible-author-nezir-zahirovic-talks-about-his-book.md): Today we speak with Nezir Zahirović, author of "The Ruby On Rails Interview Bible", about how his first contact with technology and how he got started with d... - [#135 Export videos from ANY Youtube channel using Youtube API](https://superails.com/posts/rails-7-135-export-videos-from-any-youtube-channel-using-youtube-api.md): How to Get List of YouTube Channel Videos using YouTube API? I’ve got 150+ videos on @SupeRails Youtube channel, and now I want to list them on my own supera... - [RailsSaaS in Greece. Andy Croll from CoverageBook, OneRubyThing, BrightonRuby, FirstRubyFriend](https://superails.com/posts/railssaas-in-greece-andy-croll-from-coveragebook-onerubything-brightonruby-firstrubyfriend.md) - [#railssaas](https://superails.com/posts/railssaas-greece-build-apps-10x-faster-adrian-marin-from-avohq-ruby-railssaas.md) - [Friendly Show E2 Adrian and Yaro visited RailsSaaS Conference in Athens, Greece](https://superails.com/posts/friendly-show-e2-adrian-and-yaro-visited-railssaas-conference-in-athens-greece.md): Today we talk about our awesome times at the Rails Saas conference in Athens last week. We touched on how well the conference was organized, the great talks,... - [RailsSaaS conference in Athens, Greece. Jane Portman talking about business challenges of SaaS](https://superails.com/posts/railssaas-conference-in-athens-greece-jane-portman-talking-about-business-challenges-of-saas.md) - [#134 Date Range Picker](https://superails.com/posts/rails-7-134-date-range-picker.md): Daterangepicker is an ultra popular library. Unfortunately, it depends on jQuery. Luckily, there is a re-write that uses vanilla JS: vanilla-datetimerange-pi... - [Friendly Show E1 Pilot 😬. You need a CS degree to be a programmer? How did you start? RailsSaaS conf](https://superails.com/posts/friendly-show-e1-pilot-you-need-a-cs-degree-to-be-a-programmer-how-did-you-start-railssaas-conf.md): Yaro and Adrian are online and conference buddies that enjoy speaking about development and tech and want to take you in their journey. 🤪 This is our clumsy ... - [#1 Amanda Perino from Rails Foundation about Rails World](https://superails.com/posts/supechat-1-amanda-perino-from-rails-foundation-about-rails-world.md): I meet Amanda Perino, the CEO of the newly created Rails Foundation. We talk about what the foundation does and about the upcoming Rails World conference in ... - [#133 API Pagination with Pagy](https://superails.com/posts/rails-7-133-api-pagination-with-pagy.md): If you don’t paginate GET LIST data in your API, most likely you will be giving your API consumers too much data, and adding too much load on your API. Episo... - [#132 API Analytics and Rate Limiting](https://superails.com/posts/rails-7-132-api-analytics-and-rate-limiting.md): If you don’t limit your API usage, bad users can DDOS your server. If you don’t track API usage, how do you know if it is even used? Apps like Twitter and Sh... - [Rails SaaS Boilerplates and Starterkits. Trying out Bullettrain for the first time](https://superails.com/posts/rails-saas-boilerplates-and-starterkits-trying-out-bullettrain-for-the-first-time.md): Sometimes I have a "new genious app" idea, but when I start coding it I get demotivated with re-creating all the same functionality for the 100th time: - Aut... - [#131 API Documentation with OpenAPI, Swagger, RSWAG. Generate manifest with ChatGPT?!](https://superails.com/posts/rails-7-131-api-documentation-with-openapi-swagger-rswag-generate-manifest-with-chatgpt.md): Public API without GOOD Documentation is useless! Good API documentation is crucial for helping others adopt and use your public API. OpenAPI (previously Swa... - [#130 API CRUD endpoints](https://superails.com/posts/rails-7-130-api-crud-endpoints.md): Create an API Controller where you can LIST, SHOW, CREATE, UPDATE, DESTROY records. Episode source code: Based on this blogpost - [#129 API Token generation UI](https://superails.com/posts/rails-7-129-api-token-generation-ui.md): Allow users to generate and disable API tokens. Users can view the secret token only once, when it is generated using Turbo Streams API tokens are used for B... - [#128 Faraday CRUD API requests. Communicate between two Rails apps!](https://superails.com/posts/rails-7-128-faraday-crud-api-requests-communicate-between-two-rails-apps.md): In this episode we will send API requests from one Rails app to another! While you can use CURL to make HTTP requests from your console, you would want to us... - [#127 cURL for CRUD API requests](https://superails.com/posts/rails-7-127-curl-for-crud-api-requests.md): 7 years ago I was googling "rails call controller action from console" 😂. Well, THIS is the way! API let's apps communicate with each other. CURL let's you m... - [#126 API from Zero. Bearer authentication](https://superails.com/posts/rails-7-126-api-from-zero-bearer-authentication.md): Let's build a public REST API with Rails! Have you ever obtained API keys to a service, using which you could read and write data? For example, Twitter, Slac... - [#125 Test Devise authentication with Controller and System tests](https://superails.com/posts/rails-7-125-test-devise-authentication-with-controller-and-system-tests.md): When setting up a new Rails app with Devise, you should set up your test suite to work with authentication and write controller (integration) and system test... - [#124 Test omniauth login with controller (integration) tests](https://superails.com/posts/rails-7-124-test-omniauth-login-with-controller-integration-tests.md): Testing is a very important part of app development that I haven't covered a lot before. Previously we've added oAuth login for Microsoft & Github. Now, let'... - [#123 omniauth with multiple providers](https://superails.com/posts/rails-7-123-omniauth-with-multiple-providers.md): Most often you would like to enable more than one oAuth provider for your app. In this episode I will show a resuable approach to enabling multiple oAuth pro... - [#122 sign in with Microsoft Azure OAuth and Single Sign-On](https://superails.com/posts/rails-7-122-sign-in-with-microsoft-azure-oauth-and-single-sign-on.md): Let’s add a “Sign in with Microsoft” button! Most big corporations use Microsoft to manage their employees email addresses. If you are building a B2B app, yo... - [#121 Turbo Broadcasts CRUD Demystified](https://superails.com/posts/rails-7-121-turbo-broadcasts-crud-demystified.md): There are two different ways of serving Turbo Streams "via HTTP and via Websockets". The regular HTTP streams send updates ONLY to the user that performed an... - [#120 Active Record Encryption usage and troubleshooting](https://superails.com/posts/rails-7-120-active-record-encryption-usage-and-troubleshooting.md): Active Record Encryption let's you encrypt data that is stored in the database (it's a very useful layer of security in case your database gets exposed). In ... - [#119 Trello Clone. Advanced Kanban Drag and Drop Sortable Lists with Hotwire](https://superails.com/posts/rails-7-119-trello-clone-advanced-drag-and-drop-sortable-lists-with-hotwire.md): I'm so proud of this one, it should be premium content! I've watched all the other youtube videos on this topic and I'm sure this approach is better and more... - [#118 Dark mode. Toggle inside your app or use OS default preferred color scheme](https://superails.com/posts/rails-7-118-dark-mode-toggle-inside-your-app-or-use-os-default-preferred-color-scheme.md): Some say that Dark Mode should be an MVP feature. In this episode, we will allow users to toggle light and dark modes inside our app based on system preferen... - [#117 Find code security vulnerabilities with Bearer static code analysis tool](https://superails.com/posts/rails-7-117-find-code-security-vulnerabilities-with-bearer-static-code-analysis-tool.md): I used to work at Bearer together with Guillaume for a year (he's my EX-boss). Now they finally made the tool they've been working on public! It's a static c... - [CertificateOwl day2 - building a proof-of-concept (POC) app with Ruby on Rails](https://superails.com/posts/certificateowl-day2-building-a-proof-of-concept-poc-app-with-ruby-on-rails.md): In this series I will try to build a SaaS that will let organizations (universities, schools, test centers, event organizers) easily bulk-generate PDF certif... - [#116 Custom error pages (404 Not found and 500 Internal server error)](https://superails.com/posts/rails-7-116-custom-error-pages-404-not-found-and-500-internal-server-error.md): Ruby on Rails #116 Custom error pages (404 Not found and 500 Internal server error) When you create a new rails app, error pages like 404 and 500 are automat... - [CertificateOwl day1 - product and market ressearch](https://superails.com/posts/certificateowl-day1-product-and-market-ressearch.md): In this series I will try to build a SaaS that will let organizations (universities, schools, test centers, event organizers) easily bulk-generate PDF certif... - [#115 Multitenancy, Teams and Roles without a gem](https://superails.com/posts/rails-7-115-multitenancy-teams-and-roles-without-a-gem.md): Ruby on Rails #115 Multitenancy, Teams and Roles without a gem Want to learn more on the topic? Here's a DISCOUNT for my complete course "Ruby on Rails: Lear... - [Reverse Engineering a Web App: Pipplet Language Testing Platform](https://superails.com/posts/reverse-engineering-a-web-app-pipplet-language-testing-platform.md): 🔍 Recently Pipplet app has come to my spotlight. It is an online language testing platform, used by businesses to evaluate a candidates skills. As a pleasant... - [#114 Recently viewed products with Kredis](https://superails.com/posts/rails-7-114-recently-viewed-products-with-kredis.md): Recently viewed products is a very common feature in Ecommerce. Showing users a list of products they viewed is considered to increase conversion. The least ... - [#113 Kredis Live counter, HTTP vs Websocket Turbo Broadcasts](https://superails.com/posts/rails-7-113-kredis-live-counter-http-vs-websocket-turbo-broadcasts.md): In the two previous episodes we use Kredis to store website visitors and users online. Let's dive deeper into what Kredis is and other ways we can use it! Re... - [#112 Devise finally works with Rails 7 and Turbo, but with a twist](https://superails.com/posts/rails-7-112-devise-finally-works-with-rails-7-and-turbo-but-with-a-twist.md): As I recently mentioned, Devise has been finally patched to work with Rails 7 out of the box. But when I tried installing it, I had a few minor issues: - rem... - [#111 Twilio SMS API](https://superails.com/posts/rails-7-111-twilio-sms-api.md): Twilio makes it super easy to send SMS from your Ruby app. In this episode we will: - get Twilio API credentials - get a Twilio phone number from which we wi... - [#110 Realtime Online User Tracking with Actioncable, Kredis, Turbo Broadcasts](https://superails.com/posts/rails-7-e110-realtime-online-user-tracking-with-actioncable-kredis-turbo-broadcasts.md): This episode was inspired by the great work of other creators. Hopefully my input tackles some flaws that would appear in a production environment, demistifi... - [Rails 7 E109 Live vistor count. ActionCable, Turbo Broadcasts, Kredis](https://superails.com/posts/rails-7-e109-live-vistor-count-actioncable-turbo-broadcasts-kredis.md): Let's add "Live count for total website visitors" and "Live count for visitors inside a room". Importantly, we will not deal with user REGISTRATION to identi... - [#108 How to use the Browser Geolocation API with Rails](https://superails.com/posts/ruby-on-rails-108-how-to-use-the-browser-geolocation-api-with-rails.md): Another geolocation episode! In previous episodes we learnt to get COORDINATES based on address, and place coordinates on a map. Now, we will learn to get a ... - [#107 How to display locations on a map with Mapbox API and gem Mapkick like AirBnB](https://superails.com/posts/ruby-on-rails-107-how-to-display-locations-on-a-map-with-mapbox-api-and-gem-mapkick-like-airbnb.md): In the previous episode we learnt to use gem Geocoder to calculate COORDINATES (latitude, longitude) based on address. In this episode, we will display multi... - [#106 How to use gem Geocoder, GPS coordinates, distance calculation, map markers](https://superails.com/posts/ruby-on-rails-106-how-to-use-gem-geocoder-gps-coordinates-distance-calculation-map-markers.md): In this episode we will use gem Geocoder to: - find for GPS coordinates (latitude and longitude) based on an address; - calculate distances in miles and kilo... - [#105 parse JSON and YAML](https://superails.com/posts/ruby-on-rails-105-parse-json-and-yaml.md): JSON and YAML are great ways of storing data structures. You can parse a JSON/YAML file directly with Ruby, or within a Rails application. You can also WRITE... - [#104 Remote Calendar Subscription with WEBCAL](https://superails.com/posts/ruby-on-rails-104-remote-calendar-subscription-with-webcal.md): WEBCAL protocol allows a user to "subscribe" to a calendar with many events in your app. The users calendar app will “ping” your calendar endpoint from time ... - [#103 Simple Omniauth without Devise](https://superails.com/posts/ruby-on-rails-103-simple-omniauth-without-devise.md): Previously I’ve covered "Github omniauth with Devise". An even simpler solution would be to sign in via a social login provider (Github) without Devise at al... - [#102 Email Calendar Invite](https://superails.com/posts/ruby-on-rails-102-email-calendar-invite.md): In the PREVIOUS episode we generated .ICS files, that can be downloaded and added to your calendar. In THIS episode we will EMAIL calendar invites and automa... - [#101 iCalendar and .ics format. Add events to calendar](https://superails.com/posts/ruby-on-rails-101-icalendar-and-ics-format-add-events-to-calendar.md): Learn to create valid calendar events, that a user can download as an .ics file and add to his calendar! Resources: - text version of this video: - source co... - [#100 Browser tab title notifications](https://superails.com/posts/ruby-on-rails-100-browser-tab-title-notifications.md): Do you like see the "new notifications count" in the LinkedIn browser tab? In this episode we will update the browser tab title, if the application user has ... - [#99 Hotwire: Search and Infinite Pagination (Ransack with Pagy)](https://superails.com/posts/ruby-on-rails-99-hotwire-search-and-infinite-pagination-ransack-with-pagy.md): Implementing search or pagination is relatively easy, but it can get tricky when you try to combine the two, especially when you factor in some frontend. In ... - [#98 Inline editing attributes with Hotwire](https://superails.com/posts/ruby-on-rails-98-inline-editing-attributes-with-hotwire.md): Allow user to easily edit an attribute by just clicking on it! This way you can have fewer full-page redirects; don't have to always render a full edit form.... - [#97 PASSWORDLESS login with MAGIC LINK](https://superails.com/posts/ruby-on-rails-97-passwordless-login-with-magic-link.md): Passwordless authentication via magic link is an interesting alternative to email-password authentication solutions like Devise. A passwordless authenticatio... - [#96 Deploy to Digital Ocean App Platform](https://superails.com/posts/ruby-on-rails-96-deploy-to-digital-ocean-app-platform.md): In this episode we will deploy a Rails 7 app that uses Postgresql and Redis to Digital Ocean App platform - an "easy deploy & manage" solution. We will also ... - [#95 parse text and convert hashtags and mentions into links](https://superails.com/posts/ruby-on-rails-95-parse-text-and-convert-hashtags-and-mentions-into-links.md): Parse text to find hashtags and mentions and turn them into searchable links. This is a CORE feature when building a social texting app! Episode source code:... - [#94 Rails 7 Select Box with Search using Slim-Select](https://superails.com/posts/ruby-on-rails-94-rails-7-select-box-with-search-using-slim-select.md): I was planning to create a short episode on enabling slim-select, but it ended up having a big boilerplate for adding "select" and "multiselect". If you don'... - [#93 Slack API - send transactional messages from your app to Slack](https://superails.com/posts/ruby-on-rails-93-slack-api-send-transactional-messages-from-your-app-to-slack.md): Configure Slack Bot permissions and get an API token. Send transactional messages from your app to Slack. Episode source code: Gem slack-ruby-client: Text ve... - [#92 Github Actions CI (run Tests, Rubocop, Erblint)](https://superails.com/posts/ruby-on-rails-92-github-actions-ci-run-tests-rubocop-erblint.md): ⚡️ Here's how you can set up Github Actions on a new Ruby on Rails project with: ✅ Postgres ✅ Redis ✅ Minitest ✅ System tests ✅ Rubocop ✅ Erblint Git repo: R... - [#91 Rmagick with Rails ActiveStorage](https://superails.com/posts/ruby-on-rails-91-rmagick-with-rails-activestorage.md): In the previous episode we used Rmagick to generate images with pure Ruby. Now we will learn to generate images based on ActiveRecord objects and store them ... - [#90 How to use Rmagick to autogenerate images](https://superails.com/posts/ruby-on-rails-90-how-to-use-rmagick-to-autogenerate-images.md): ImageMagick is a library that allows you to do all kinds of image manipulations. Rmagick is Ruby plugin for ImageMagick. In this episode we will learn to rea... - [Yaroslav Shmarov - 18 months of using hotwire and viewcomponent in production - wroc_love.rb 2022](https://superails.com/posts/yaroslav-shmarov-18-months-of-using-hotwire-and-viewcomponent-in-production-wroc_love-rb-2022.md) - [Live talk: Hotwire, ViewComponent, StimulusJS in production (my experience )](https://superails.com/posts/live-talk-hotwire-viewcomponent-stimulusjs-in-production-my-experience.md): On August 25 I gave (my first ever) live talk in Warsaw, Poland. I described my experience developing Rails monolyth apps using Hotwire, ViewComponent, Stimu... - [#89 export to CSV (different approaches)](https://superails.com/posts/ruby-on-rails-89-export-to-csv-different-approaches.md): Explore different ways of exporting data from a Ruby on Rails database to CSV. First we will create flexible custom templates for generating CSV data in a sp... - [#88 Import CSV and parse it within a Rails app](https://superails.com/posts/ruby-on-rails-88-import-csv-and-parse-it-within-a-rails-app.md): In this episode we will import a custom CSV into a Rails app. We will also map columns from the CSV, so that they fit our database. To conclude, we will extr... - [#87 StimulusJS select all checkboxes](https://superails.com/posts/ruby-on-rails-87-stimulusjs-select-all-checkboxes.md): Episode Source Code: Text version - [#86 Bulk Actions, Edit Multiple Selected Records](https://superails.com/posts/ruby-on-rails-86-bulk-actions-edit-multiple-selected-records.md): Episode Source Code: Text version - [#85 HTTP Authentication in Production](https://superails.com/posts/ruby-on-rails-85-http-authorization-in-production.md): Sometimes the most simple authorization solution is just enough. HTTP Basic Authorization is built into every browser. Here's how you can use it with Rails E... - [#84 Cookies Consent Banner](https://superails.com/posts/ruby-on-rails-84-cookies-consent-banner.md): Here's the easiest way to add an "Accept Cookies" pop-up banner modal and save preferences in a Rails monolyth app using Hotwire Turbo Frames. No 3rd party p... - [#83 import and use SVG in Rails. gem inline_svg](https://superails.com/posts/ruby-on-rails-83-import-and-use-svg-in-rails-gem-inline_svg.md): Sometimes instead of depending on an external SVG library you will want to import your own SVGs into a Rails app. In this episode we will look at different a... - [#82 Chained Select Fields in a form. Gem City-State](https://superails.com/posts/ruby-on-rails-82-chained-select-fields-in-a-form-gem-city-state.md): Episode source code: Gem city-state - [#81 StimulusJS: Conditionally display form fields based on selected value](https://superails.com/posts/ruby-on-rails-81-stimulusjs-conditionally-display-form-fields-based-on-selected-value.md): Episode Source Code: Blogpost - [#80 Dynamic Forms with Turbo (not JS approach)](https://superails.com/posts/ruby-on-rails-80-dynamic-forms-with-turbo-not-js-approach.md): Learn how to add fields to a form dynamically based on your selection in previous fields Episode Source Code - [#79 Classless CSS frameworks](https://superails.com/posts/ruby-on-rails-79-classless-css-frameworks.md): Episode source code: Text description: Simple CSS Framework: MVP CSS Framework - [#78 Semantic HTML in Rails](https://superails.com/posts/ruby-on-rails-78-semantic-html-in-rails.md): Episode Source Code: Blogpost about Semantic HTML in Ruby on Rails - [#77 HACKERMAN: strong params authorization](https://superails.com/posts/ruby-on-rails-77-hackerman-strong-params-authorization.md): Even if some parameters are not visible or editable in the HTML, it does not mean a user won't be able to change them. This way a user can potentially do mal... - [#76 Fontawesome with Importmaps in Rails 7](https://superails.com/posts/ruby-on-rails-76-fontawesome-with-importmaps-in-rails-7.md): Episode source code: Text guide - [#75 ActsAsVotable: likes, bookmarks, hotwire, vote scopes, cached votes](https://superails.com/posts/ruby-on-rails-75-actsasvotable-likes-bookmarks-hotwire-vote-scopes-cached-votes.md): Complete guide to ActsAsVotable Episode source code: Some code clean up after all the hard work: Gem ActsAsVotable - [#73 Hovercards with Hotwire Turbo Frames](https://superails.com/posts/ruby-on-rails-73-hovercards-with-hotwire-turbo-frames.md): Learn to build lazy-loading github-styled hovercards(tooltips) with Hotwire Turbo Frames. Great example of using lazy-loading feature of turbo_frames. Blogpo... - [#72 gem Rouge for code highlighting in Markdown](https://superails.com/posts/ruby-on-rails-72-gem-rouge-for-code-highlighting-in-markdown.md): If you are using Redcarpet, you will definitely want to also add Rouge! Text version: Episode Source Code: Gem Rouge - [#71 Gem Redcarpet to Parse Markdown text to HTML](https://superails.com/posts/ruby-on-rails-71-gem-redcarpet-to-parse-markdown-text-to-html.md): Text version: Episode Source Code: Gem Redcarpet: Faker Markdown - [#70: Hotwire: Live form validations and previews](https://superails.com/posts/ruby-on-rails-70-hotwire-live-form-validations-and-previews.md): Get live character counter, validations, content preview while you fill in a form using Hotwire Article: "Live form validations and error rendering. Live mar... - [#69 Frames + Streams: Infinite Scroll Pagination (Best approach)](https://superails.com/posts/ruby-on-rails-69-frames-streams-infinite-scroll-pagination-best-approach.md): In the last 2 episodes we implemented Infinite Scroll Pagination with Frames and Streams separately. In this episode we will combine Frames + Streams to crea... - [#68 Frames: Infinite Scroll Pagination](https://superails.com/posts/ruby-on-rails-68-frames-infinite-scroll-pagination.md): In this previous episode we added a button to "Load more" records at the bottom of the list, with the help of Hotwire Turbo Streams. Episode Source Code: In ... - [#67 Streams: Infinite Scroll Pagination](https://superails.com/posts/ruby-on-rails-67-streams-infinite-scroll-pagination.md): In this episode we add a button to "Load more" records at the bottom of the list, with the help of Hotwire Turbo Streams. Episode Source Code: In the NEXT ep... - [#66 StimulusJS: Targets, Values, Classes. Build a PRO dropdown](https://superails.com/posts/ruby-on-rails-66-stimulusjs-targets-values-classes-build-a-pro-dropdown.md): In this episode we will learn to leverage StimulusJS values, targets and classes to build advanced controllers like a PRO! Source code - [#65 Hotwire SPA: Flash Messages](https://superails.com/posts/ruby-on-rails-65-hotwire-spa-flash-messages.md): The right way to render flash messages without page refresh, while mixing Turbo Streams and Stimulus JS. Automatically dismiss flash in 5 seconds. Creating a... - [#64 Cloud9 IDE - Rails 7, Github SSH, Heroku](https://superails.com/posts/ruby-on-rails-64-cloud9-ide-rails-7-github-ssh-heroku.md): Install Rails 7 on Cloud9: Github SSH: AWS Cloud9 usually costs me under $10/month. Totally worth it. - [#63 Hotwire Modals (the right way)](https://superails.com/posts/ruby-on-rails-63-hotwire-modals-the-right-way.md): ⛔DO NOT use a StimulusJS controller to render TurboStreams!⛔ Extended text guide to this video: * Git repo: * TLDR: P.S. Feel free to add CSS "p-5 bg-slate-3... - [#62 Live session: User Roles: Different approaches](https://superails.com/posts/ruby-on-rails-62-live-session-user-roles-different-approaches.md): A recording of a workshop I gave. Different approaches to setting user roles Topics covered: 1. post.user_id 2. admin:boolean 3. roles:integer enum 4. roles ... - [#60 Hotwire Turbo Streams Autocomplete Search](https://superails.com/posts/ruby-on-rails-60-hotwire-turbo-streams-autocomplete-search.md): Source code: Text guide - [#59 Hotwire Turbo Streams CRUD](https://superails.com/posts/ruby-on-rails-59-hotwire-turbo-streams-crud.md): Just Enough Hotwire for Rails Developers with Yaroslav Shmarov | Open Source Every Day TEXT VERSION: GIT REPO: CREATE APP: SCAFFOLD "MESSAGES": Turbo #1 Re-r... - [#2 Production! Let's build a User Feedback app with Rails 7](https://superails.com/posts/2-production-let-s-build-a-user-feedback-app-with-rails-7.md): I'll attempt to build and launch an app in 10 dev hours. User Feedback App (QnA) (askdemos.com): hosts can create "inboxes" users can add "messages" to "inbo... - [#1 Essentials! Let's build a User Feedback app with Rails 7](https://superails.com/posts/1-essentials-let-s-build-a-user-feedback-app-with-rails-7.md): I'll attempt to build and launch an app in 10 dev hours. User Feedback App (QnA) (askdemos.com): hosts can create "inboxes" users can add "messages" to "inbo... - [#58 Nested Resources](https://superails.com/posts/ruby-on-rails-58-nested-resources.md): Episode source code: Official docs - [#57 Database Architecture 101: Building an ERD (Entity Relationship Diagram) for UberEats clone](https://superails.com/posts/57-database-architecture-101-building-an-erd-entity-relationship-diagram-for-ubereats-clone.md): In this episode I'm looking and thinking aloud what the database for a restaurant management & delivery app can look like. Link to the diagram - [#56 Generate QR codes, Barcodes, use ServiceObjects](https://superails.com/posts/ruby-on-rails-56-generate-qr-codes-barcodes-use-serviceobjects.md): Source code for the episode: good random tool to decode barcodes and qrcodes - [#19 View Components](https://superails.com/posts/code-along-video-subscription-app-19-view-components.md): Episode source code: Official docs: Great article - [#18 Rubocop, Ruby Style Guide, Traceroutes](https://superails.com/posts/code-along-video-subscription-app-18-rubocop-ruby-style-guide-traceroutes.md): gem Rubocop: gem Traceroute: How to use Rubocop: How to use Traceroute - [#17 TomSelect.js - VanillaJS plugin to select or create tags](https://superails.com/posts/code-along-video-subscription-app-17-tomselect-js-vanillajs-plugin-to-select-or-create-tags.md): add tom select: tom select in stimulus without turbolinks - [#55 Subdomain Multitenancy with Ernest Addae](https://superails.com/posts/ruby-on-rails-55-subdomain-multitenancy-with-ernest-addae.md): Watch Ernest Addae create and troubleshoot an application with Subdomain Multitenancy (like shop1.domain.com, shop2.domain.com). At the end we discuss how to... - [#16: Fat Model Skinny Controller, Post has many Tags](https://superails.com/posts/code-along-video-subscription-app-16-fat-model-skinny-controller-post-has-many-tags.md): fat model, skinny controller: merge current_user in comment_params for new action: errors patial for form objects: create tags and taggings: conter_cache com... - [#15: Advanced ActsAsVotable Scopes - Bookmarks, Watchlist](https://superails.com/posts/code-along-video-subscription-app-15-advanced-actsasvotable-scopes-bookmarks-watchlist.md): vote_scope for like functionality: bookmarks with acts_as_votable: add cached like votes to posts: add to watchlist, mark as complete: styling new like butto... - [#54 Gem VanillaNested by Ariel Juodziukynas (Cocoon successor without jQuery)](https://superails.com/posts/ruby-on-rails-54-gem-vanillanested-by-ariel-juodziukynas-cocoon-successor-without-jquery.md): Gem source code: Ariel Juodziukynas on Twitter - [#14: Infinite Nested Comments, Embed Vimeo Videos](https://superails.com/posts/code-along-video-subscription-app-14-infinite-nested-comments-embed-vimeo-videos.md): Fix all bugs with nested comments: Embedding Vimeo videos - [#13: Polymorphic Comments, Nested Resources](https://superails.com/posts/code-along-video-subscription-app-13-polymorphic-comments-nested-resources.md): basic polymorphic comments: css for comments: reply to comments - [#12: Vote stats, gem Meta-Tags, Friendly ID: history & finders](https://superails.com/posts/code-along-video-subscription-app-12-vote-stats-gem-meta-tags-friendly-id-history-finders.md): create posts through current_user association: vote search scopes for users and posts: gem friendly_id finders and histroy: dont display zero votes count in ... - [#53 Gem Public Activity - add an Activity Feed to your app](https://superails.com/posts/ruby-on-rails-53-gem-public-activity-add-an-activity-feed-to-your-app.md): Gem source: Episode source code - [#52 gem Friendly ID: The Complete guide. Generate readable URLs like a PRO](https://superails.com/posts/ruby-on-rails-52-gem-friendly-id-the-complete-guide-generate-readable-urls-like-a-pro.md): episode source code: gem source: official docs - [#51 array of checkboxes in a Rails app](https://superails.com/posts/ruby-on-rails-51-array-of-checkboxes-in-a-rails-app.md): episode source code - [#50 ActiveRecord Enum - when and why to use enums?](https://superails.com/posts/ruby-on-rails-50-activerecord-enum-when-and-why-to-use-enums.md): without enums: enums as integers: enums as strings: official guide - [#49 gem Pundit for Authorization - Complete Guide](https://superails.com/posts/ruby-on-rails-49-gem-pundit-for-authorization-complete-guide.md): Restrict access to different views and actions in your application based on users roles. Episode source code: My text notes for this episode: Gem pundit sour... - [#48 Gem Rolify for assigning user roles - Complete Guide](https://superails.com/posts/ruby-on-rails-48-gem-rolify-for-assigning-user-roles-complete-guide.md): episode source code: gem rolify source code - [#47 TIP: create a list of buttons to change status](https://superails.com/posts/ruby-on-rails-47-tip-create-a-list-of-buttons-to-change-status.md): episode source code - [#46 gem invisible_captcha - pure Ruby reCaptcha alternative. No more bots in your app!](https://superails.com/posts/ruby-on-rails-46-gem-invisible_captcha-pure-ruby-recaptcha-alternative-no-more-bots-in-your-app.md): episode source code: gem invisible_captcha docs - [#45 config_for Settings.yml - add default settings to your app](https://superails.com/posts/ruby-on-rails-45-config_for-settings-yml-add-default-settings-to-your-app.md): episode source code: official docs - [#44 Rails Counter Cache: Count associated child records CORRECTLY](https://superails.com/posts/ruby-on-rails-44-rails-counter-cache-count-associated-child-records-correctly.md): episode source code: official docs - [#11: gem Rouge, gem InvisibleCaptcha, highlight search results](https://superails.com/posts/code-along-video-subscription-app-11-gem-rouge-gem-invisiblecaptcha-highlight-search-results.md): In this Code-Along video series we'll be building a new home for all the videos - SupeRails.com. Github repo: Live demo: redcarpet + rouge = good markdown hi... - [#43 Gem Devise Invitable - the correct way to create or invite users to your app](https://superails.com/posts/ruby-on-rails-43-gem-devise-invitable-the-correct-way-to-create-or-invite-users-to-your-app.md): Gem source: Episode code: Intro. Creating users manually Installing the gem Inviting users Button to resend invitation - [#10: Bootstrap, Friendly ID, ExceptionNotification](https://superails.com/posts/code-along-video-subscription-app-10-bootstrap-friendly-id-exceptionnotification.md): In this Code-Along video series we'll be building a new home for all the videos - SupeRails.com. Github repo: Live demo: bootstrap styling progress bar for u... - [#42 Devise Lockable. Ban or Unban users as you please.](https://superails.com/posts/ruby-on-rails-42-devise-lockable-ban-or-unban-users-as-you-please.md): Official Devise Lockable Docs: devise lockable if password wrong 3 times ban or unban users - [#9: Stimulus Components CharacterCount, AutoGrow; Post Description](https://superails.com/posts/code-along-video-subscription-app-9-stimulus-components-charactercount-autogrow-post-description.md): In this Code-Along video series we'll be building a new home for all the videos - SupeRails.com. Github repo: Live demo: add description to posts validate le... - [#41 Devise Confirmable - no more users with fake emails!](https://superails.com/posts/ruby-on-rails-41-devise-confirmable-no-more-users-with-fake-emails.md): Devise Confirmable: Official Wiki - [#8: Posts access, AJAX voting, pagination, search, styling](https://superails.com/posts/code-along-video-subscription-app-8-posts-access-ajax-voting-pagination-search-styling.md): Github repo: Live demo: basic bootstrap styling for posts and users, post view validations vote for posts with gem acts_as_votable posts pagination and ransa... - [#40 Devise Trackable, Users Index page](https://superails.com/posts/ruby-on-rails-40-devise-trackable-users-index-page.md): devise trackable: users index view: Official Wiki - [#7: FINISH Stripe Subscription Payments, Billing Management](https://superails.com/posts/code-along-video-subscription-app-7-finish-stripe-subscription-payments-billing-management.md): HELP NEEDED: While watching, can You add timecodes to the video? In this Code-Along video series we'll be building a new home for all the videos - SupeRails.... - [#39 Devise Authentication from ZERO](https://superails.com/posts/ruby-on-rails-39-devise-authentication-from-zero.md): Episode covering user log-in functionality for for entry-level developers. Source code: Gem devise - [#6: premium posts, stripe gem, stripe webhooks](https://superails.com/posts/code-along-video-subscription-app-6-premium-posts-stripe-gem-stripe-webhooks.md): In this Code-Along video series we'll be building a new home for all the videos - SupeRails.com. Github repo: Live demo: seeds for posts, markdown for posts ... - [#5: Helpers, Devise Invitable, Posts, Markdown, CounterCache](https://superails.com/posts/code-along-video-subscription-app-5-helpers-devise-invitable-posts-markdown-countercache.md): In this Code-Along video series we'll be building a new home for all the videos - SupeRails.com. Github repo: Live demo: update mailer emails active link to ... - [#4: seeds, faker, pagy, ransack, strftime](https://superails.com/posts/code-along-video-subscription-app-4-seeds-faker-pagy-ransack-strftime.md): In this Code-Along video series we'll be building a new home for all the videos - SupeRails.com. Github repo: Live demo: seeds.rb and gem faker gem pagy for ... - [#3: Notifications, Devise Confirmable, AWS SES, LetterOpener](https://superails.com/posts/code-along-video-subscription-app-3-notifications-devise-confirmable-aws-ses-letteropener.md): In this Code-Along video series we'll be building a new home for all the videos - SupeRails.com. Github repo: Live demo: styling for notifications devise con... - [#2: Thumbnail, Logo, UsersController, Devise Trackable](https://superails.com/posts/code-along-video-subscription-app-2-thumbnail-logo-userscontroller-devise-trackable.md): In this Code-Along video series we'll be building a new home for all the videos - SupeRails.com. Github repo: Live demo: add thumbnail and logo, footer layou... - [#1: Devise Omniauth, Heroku SSL, Bootstrap, Navbar, Footer](https://superails.com/posts/code-along-video-subscription-app-1-devise-omniauth-heroku-ssl-bootstrap-navbar-footer.md): In this Code-Along video series we'll be building a new home for all the videos - SupeRails.com. Github repo: Live demo: COMMITS: initialize app static publi... - [#38 Install Fontawesome 5 with Rails 6, yarn and webpacker](https://superails.com/posts/ruby-on-rails-38-install-fontawesome-5-with-rails-6-yarn-and-webpacker.md): Blogpost covering the topic: Source code - [#37 Install Bootstrap 5 with Rails 6, Yarn and Webpacker](https://superails.com/posts/ruby-on-rails-37-install-bootstrap-5-with-rails-6-yarn-and-webpacker.md): Blogpost covering the topic: Source code - [#36 Action Text - Rich text editing with Trix](https://superails.com/posts/ruby-on-rails-36-action-text-rich-text-editing-with-trix.md): episode source code: official guide - [#35 Google API Console, oAuth Consent Screen](https://superails.com/posts/ruby-on-rails-35-google-api-console-oauth-consent-screen.md): Just in case you have issues getting the API keys to work - [#34 Github oAuth in Development and Production](https://superails.com/posts/ruby-on-rails-34-github-oauth-in-development-and-production.md): Just in case you have issues, in this episode I try to go through of running a github oAuth app both in development & production - [#33 Gem Dotenv - alternative to Rails credentials](https://superails.com/posts/ruby-on-rails-33-gem-dotenv-alternative-to-rails-credentials.md): Source Code of the episode: The gem - [#32 gem omniauth google (social log in with Google)](https://superails.com/posts/ruby-on-rails-32-gem-omniauth-google-social-log-in-with-google.md): The gem: get an API key: gem omniauth google - [#31 Save Personal Data from Social Login to your app](https://superails.com/posts/ruby-on-rails-31-save-personal-data-from-social-login-to-your-app.md): The auth hash: Source code - [#30 Social log in with Github (omniauth 2.0)](https://superails.com/posts/ruby-on-rails-30-social-log-in-with-github-omniauth-2-0.md): gem omniauth-github: Devise + Omniauth integration - basic docs: Gem agains "Authenticity error": Ultimate text guide: Source code - [#29 Action Mailer: Send emails with Amazon Simple Email Service in production](https://superails.com/posts/ruby-on-rails-29-action-mailer-send-emails-with-amazon-simple-email-service-in-production.md): The problem with Letter Opener: Test SES emails: Episode source code - [#28 Action Mailer: Gmail SMTP - send emails in production for free](https://superails.com/posts/ruby-on-rails-28-action-mailer-gmail-smtp-send-emails-in-production-for-free.md): Source Code: Docs: Google URL to set password - [#27 Gem Letter Opener - best way to preview emails in development](https://superails.com/posts/ruby-on-rails-27-gem-letter-opener-best-way-to-preview-emails-in-development.md): gem letter_opener: Source Code for the Episode: To fix Launchy error - run these commands in console: export BROWSER=/dev/null export LAUNCHY_DRY_RUN=true - [#26 send emails with Action Mailer - Complete Guide](https://superails.com/posts/ruby-on-rails-26-send-emails-with-action-mailer-complete-guide.md): In this episode we will use ActionMailer to send the User an email after he creates a Post. We will also explore different options and ways to customise our ... - [#25 gem Active Storage Validations](https://superails.com/posts/ruby-on-rails-25-gem-active-storage-validations.md): install gem active_storage_validations: gem active_storage_validations - [#24 Active Storage - Deleting Attachments (Ultimate approach)](https://superails.com/posts/ruby-on-rails-24-active-storage-deleting-attachments-ultimate-approach.md): action to delete post avatar: delete any attachment object - [#23 Active Storage - Display Audio, Video, PDF attachments](https://superails.com/posts/ruby-on-rails-23-active-storage-display-audio-video-pdf-attachments.md): display different attachment types: HTML5 audio and video tags: Displaying Images, Videos, and PDFs - [#22 ActiveStorage Direct Uploads, AWS S3 CORS](https://superails.com/posts/ruby-on-rails-22-activestorage-direct-uploads-aws-s3-cors.md): Source Code: Active Storage Direct Uploads Docs - [#21 Active Storage With Amazon S3 Cloud Storage](https://superails.com/posts/ruby-on-rails-21-active-storage-with-amazon-s3-cloud-storage.md): aws s3 for file storage: ActiveStorage docs: How to use Credentials in Ruby on Rails 6? TLDR - [#20 ActiveStorage - attach avatar, attach images](https://superails.com/posts/ruby-on-rails-20-activestorage-attach-avatar-attach-images.md): Source code: Docs: install active_storage, post has one avatar: post has many images - [#19 Gem Pagy - Ultimate Guide to the best pagination gem](https://superails.com/posts/ruby-on-rails-19-gem-pagy-ultimate-guide-to-the-best-pagination-gem.md): Pagy Source code: Pagy Homepage: Source code: Install Bootstrap 5 on Rails 6 - [#18 Encrypted Credentials and Global Variables (+ VIM basics)](https://superails.com/posts/ruby-on-rails-18-encrypted-credentials-and-global-variables-vim-basics.md): Credentials Cheat Sheet: Official Docs - [#17 Gem Wicked PDF - generate, save, and send PDFs](https://superails.com/posts/ruby-on-rails-17-gem-wicked-pdf-generate-save-and-send-pdfs.md): gem wicked_pdf: source code: blogpost "Complete guide to generating PDFs with gem wicked_pdf": install gem wicked pdf: send PDF as attachment: make it work w... - [#16 Gem ActsAsVotable - upvote and downvote with AJAX](https://superails.com/posts/ruby-on-rails-16-gem-actsasvotable-upvote-and-downvote-with-ajax.md): Gem source: Source code: Blogpost - install gem: Blogpost - best ajax voting - [#15 Stripe API - SaaS blog - Webhooks to update Subscription Status](https://superails.com/posts/ruby-on-rails-15-stripe-api-saas-blog-webhooks-to-update-subscription-status.md): Github Repo: Heroku Demo: add stripe webhooks add customer.created event to webhooks fix typo in webhooks customer.created update webhooks for subscriptions ... - [#14 Stripe API - SaaS blog - Stripe Checkout Session, Billing Portal](https://superails.com/posts/ruby-on-rails-14-stripe-api-saas-blog-stripe-checkout-session-billing-portal.md): Github Repo: Heroku Demo: link to stripe checkout session current_user can select any available plan stripe billing portal - [#13 Stripe API - SaaS blog - gem Stripe + gem Devise, display Stripe pricing via API](https://superails.com/posts/ruby-on-rails-13-stripe-api-saas-blog-gem-stripe-gem-devise-display-stripe-pricing-via-api.md): Github Repo: Heroku Demo: install gem stripe assign stripe_customer_id to newly registered users display stripe pricing on static page - [#12 Stripe API - SaaS blog - Build the MVP](https://superails.com/posts/ruby-on-rails-12-stripe-api-saas-blog-build-the-mvp.md): Github Repo: Heroku Demo: Devise navigation: Better scaffolds: scaffold posts posts validations and navigation gem faker to generate fake posts install gem d... - [#11 Stripe API - Coupons, Currencies, gem money rails](https://superails.com/posts/ruby-on-rails-11-stripe-api-coupons-currencies-gem-money-rails.md): Github Repo: Heroku Demo: allow_promotion_codes for checkout product can have prices with different currencies gem money-rails - [#10 Stripe API - Clear Cart after Checkout, edit Stripe Price](https://superails.com/posts/ruby-on-rails-10-stripe-api-clear-cart-after-checkout-edit-stripe-price.md): Github Repo: Heroku Demo: if product price is updated - create new stripe price and assing to product empty cart after successful transaction - [#09 Stripe API - Shopping Cart, Checkout Multiple Products](https://superails.com/posts/ruby-on-rails-9-stripe-api-shopping-cart-checkout-multiple-products.md): Github Repo: Heroku Demo: session-based Shopping Cart Stripe Checkout for all items in Shopping Cart - [#08 Stripe API - Update Webhooks and Success URL](https://superails.com/posts/ruby-on-rails-8-stripe-api-update-webhooks-and-success-url.md): Github Repo: Heroku Demo: move logic from checkout#success to webhooks ui element to disable checkout button beautify data display on checkout success page - [#07 Stripe API - Hijack Stripe Checkout Session, Payment Success URL](https://superails.com/posts/ruby-on-rails-7-stripe-api-hijack-stripe-checkout-session-payment-success-url.md): Github Repo: Heroku Demo: Retrieve Checkout Session in view, play with Stripe API JSON Success and Cancel paths for stripe checkout After Successful Checkout... - [#06 Stripe API - Stripe with Devise, Create Stripe API records from Rails](https://superails.com/posts/ruby-on-rails-6-stripe-api-stripe-with-devise-create-stripe-api-records-from-rails.md): Github Repo: Heroku Demo: install gem devise user is assigned stripe_customer_id after create assign checkout to current_user.stripe_customer_id add stripe_p... - [#05 Stripe API - Pay Now Button with Stripe Checkout API](https://superails.com/posts/ruby-on-rails-5-stripe-api-pay-now-button-with-stripe-checkout-api.md): Github Repo: Heroku Demo: Stripe Dashboard: Stripe Checkout: initialize app scaffold products product validations install gem stripe stripe checkout session ... - [#04 Telegram API - omniauth without a gem](https://superails.com/posts/ruby-on-rails-04-telegram-api-omniauth-without-a-gem.md): Github repo: Live demo: Useful resources - [#03 Telegram API - notifications for CRUD operations](https://superails.com/posts/ruby-on-rails-03-telegram-api-notifications-for-crud-operations.md): Github repo: Live demo - [#02 Telegram API - Create Bot, use API, gem HTTParty](https://superails.com/posts/ruby-on-rails-02-telegram-api-create-bot-use-api-gem-httparty.md): Github repo: Useful resources: Heroku demo - [#01 Gem Boring Generators - 10x your initial development speed](https://superails.com/posts/ruby-on-rails-01-gem-boring-generators-10x-your-initial-development-speed.md): Gem source: Github repo