├── .githooks └── pre-commit └── README.md /.githooks/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | # Prevents a commit if any image URLs are missing. 4 | 5 | # To enable this hook, run the following in this repo locally: 6 | # git config --local core.hooksPath .githooks 7 | 8 | file = "README.md" 9 | 10 | pattern = /^\s*- ((?\n|github.com).)+$/ 11 | content_before_toc_end, content_after_toc = File.read(file).partition(/.+## Table of contents.+?(?=##)/m)[1..2] 12 | line_count_before_toc_end = content_before_toc_end.count("\n") 13 | lines = content_after_toc.split("\n").map { it << "\n" } 14 | 15 | red = "\x1b[1;31m" 16 | dim = "\x1b[2m" 17 | reset = "\x1b[0m" 18 | 19 | bad_lines = lines.filter_map.with_index { |line, index| 20 | if pattern.match?(line) 21 | "#{file}:#{index + 1 + line_count_before_toc_end} #{dim}#{line.lstrip}#{reset}" 22 | end 23 | } 24 | 25 | if bad_lines.any? 26 | puts "\n#{red}Oops! Missing image URLs:#{reset} \n\n" + bad_lines.join 27 | `git reset` 28 | exit 1 29 | end 30 | 31 | exit 0 32 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Learn Ruby: a resource list 3 | 4 | Hi! This road map has helped me as a self-taught developer. I hope it helps you too. 5 | 6 | Notice a broken link? [Open an issue!](https://github.com/fpsvogel/learn-ruby/issues/new) 7 | 8 | 9 | ## Table of contents 10 | 11 | - [Preliminaries](#preliminaries) 12 | - [What's the best single learning resource?](#whats-the-best-single-learning-resource) 13 | - [Why Ruby?](#why-ruby) 14 | - [Basics](#basics) 15 | - [Front-end basics](#front-end-basics) 16 | - [Ruby basics](#ruby-basics) 17 | - [Rails basics](#rails-basics) 18 | - [Getting hired](#getting-hired) 19 | - [Foundations](#foundations) 20 | - [SQL and databases](#sql-and-databases) 21 | - [Git](#git) 22 | - [Front end](#front-end) 23 | - [CSS](#css) 24 | - [JavaScript](#javascript) 25 | - [Usability](#usability) 26 | - [Accessibility](#accessibility) 27 | - [Web standards](#web-standards) 28 | - [Hotwire](#hotwire) 29 | - [Advanced Ruby and Rails](#advanced-ruby-and-rails) 30 | - [Advanced Ruby](#advanced-ruby) 31 | - [Advanced Rails](#advanced-rails) 32 | - [Miscellaneous](#miscellaneous) 33 | - [Community](#community) 34 | - [Ruby that is not web development](#ruby-that-is-not-web-development) 35 | - [Rails codebases to study](#rails-codebases-to-study) 36 | 37 | ## Preliminaries 38 | 39 | ### What's the best single learning resource? 40 | 41 | I suggest the free [Odin Project](https://www.theodinproject.com/paths) if you're looking for one resource that can take you from zero to potentially hireable. If you want more variety and more depth on certain topics, keep reading! 42 | 43 | ### Why Ruby? 44 | 45 | Initially I looked into full-stack JS, but the JS ecosystem was confusing to me as a solo learner. I found Ruby to be more straightforward and enjoyable. 46 | 47 | ## Basics 48 | 49 | ### Front-end basics 50 | 51 | - [x] Learn some HTML, CSS, and JS: [The Odin Project - Foundations path](https://www.theodinproject.com/paths/foundations/courses/foundations) or [MDN - Learn web development](https://developer.mozilla.org/en-US/docs/Learn_web_development) or [web.dev - Learn web development](https://web.dev/learn/). 52 | - [x] Build a blog from scratch. [GitHub Pages](https://pages.github.com) is an accessible way to do this. (Choose the option "Project site", then "Start from scratch".) 53 | 54 | ### Ruby basics 55 | 56 | - **Basics:** 57 | - [x] [The Odin Project - Ruby](https://www.theodinproject.com/paths/full-stack-ruby-on-rails/courses/ruby) 58 | - [x] [GoRails - Ruby for Beginners](https://gorails.com/series/ruby-for-beginners) if you prefer videos. 59 | - [x] [Try Ruby](https://try.ruby-lang.org/) and [BigBinary Academy](https://academy.bigbinary.com/learn-ruby), if you like an interactive approach. 60 | - [ ] [Eloquent Ruby, 2nd ed.](https://pragprog.com/titles/eruby2/eloquent-ruby-second-edition) (beta) 61 | - **Guided practice:** 62 | - [x] [Exercism - Ruby](https://exercism.org/tracks/ruby) 63 | - [x] [Advent of Code](https://adventofcode.com) with other people's Ruby solutions to compare yours to. One way to do this is [my Advent of Ruby gem](https://github.com/fpsvogel/advent_of_ruby). 64 | - **OOP (object-oriented programming):** 65 | - [x] 💲[Sandi Metz - Practical Object-Oriented Design](https://www.poodr.com) 66 | - [x] 💲[Sandi Metz & Katrina Owen - 99 Bottles of OOP](https://sandimetz.com/99bottles-sample-ruby) 67 | - **Build stuff with Ruby.** Here are some ideas: 68 | - A CLI (command-line interface) app. I made [one that gives statistics on a reading log](https://fpsvogel.com/posts/2021/my-first-ruby-app-lessons-learned). 69 | - A game. A text-based game is the most straightforward option, but [there are Ruby game engines](#beyond-web-development) for graphical games. 70 | - A static site with [Bridgetown](https://github.com/bridgetownrb/bridgetown), which is simpler than building a web app with Rails. Maybe rebuild your blog? Be sure to [join the Bridgetown Discord server](https://discord.gg/Cugms94QFM). 71 | 72 | ### Rails basics 73 | 74 | Only books and courses are listed below, but be sure to *build things* as you learn. I found it most helpful to build a bunch of little throwaway apps and write about each learning experience ([1](https://fpsvogel.com/posts/2021/gpt3-ai-story-writer), [2](https://fpsvogel.com/posts/2021/wiki-stumble-wikipedia-explorer), [3](https://fpsvogel.com/posts/2021/pass-the-story-collaborative-writing-game), [4](https://fpsvogel.com/posts/2022/doctor-lookup-health-provider-search-tool)). 75 | 76 | - **Basics:** 77 | - [x] [Getting started with Rails](https://rails-tutorial.evilmartians.io/), an interactive quick start. 78 | - [x] [typecraft - Rails New](https://www.youtube.com/playlist?list=PLHFP2OPUpCeZcPutT9yn4-e0bMmrn5Gd1) and/or [GoRails - Build a Blog with Rails 7](https://gorails.com/series/build-a-blog-with-rails-7) if you like videos. 79 | - [x] [The Odin Project - Rails](https://www.theodinproject.com/paths/full-stack-ruby-on-rails) 80 | - **Testing:** 81 | - [x] [thoughtbot - Testing Rails](https://github.com/thoughtbot/testing-rails) or [the summary blog post](https://thoughtbot.com/blog/how-we-test-rails-applications). (In the book, ignore controller specs because [they have been superseded by request specs](https://stackoverflow.com/a/46500842).) 82 | - [x] 💲[Effective Testing with RSpec 3](https://pragprog.com/titles/rspec3/effective-testing-with-rspec-3/) 83 | 87 | - **Miscellaneous:** 88 | - [x] [Beginners Guide to Ruby on Rails Performance](https://henry.bearblog.dev/beginners-guide-to-ruby-on-rails-performance-part-1) 89 | - [x] [Style guides](https://ruby.style/) for Ruby, Rails, and RSpec 90 | 91 | ### Getting hired 92 | 93 | - **Get real-world experience to put on your resume:** 94 | - Contribute to open-source projects. I've written [a short guide on how to get started](https://fpsvogel.com/posts/2021/how-to-contribute-to-open-source-ruby-rails). 95 | - [Ruby Central - Scholars and Guides Program](https://rubycentral.org/scholars_guides_program/) 96 | - **Mentorship:** 97 | - [First Ruby Friend](https://firstrubyfriend.org) where aspiring and first-year developers are connected with a mentor. 98 | - [r/rails](https://www.reddit.com/r/rails). Examples: [1](https://www.reddit.com/r/rails/comments/rvs7f2/rails_mentoring/), [2](https://www.reddit.com/r/rails/comments/lvwn41/finding_a_mentor/). 99 | - **The job search:** 100 | - [RubyOnRemote](https://rubyonremote.com) 101 | - [Welcome to the Jungle](https://www.welcometothejungle.com) 102 | 108 | 109 | ## Foundations 110 | 111 | In addition to the topics below, it's also good to know the basic workings of the Internet and the Web. Resources for that are listed in [my "Learn Computer Science" list](https://github.com/fpsvogel/learn-cs#networking--the-web). 112 | 113 | ### SQL and databases 114 | 115 | 116 | - [x] [SQL Teaching](https://www.sqlteaching.com) 117 | - [x] [SQLBolt](https://sqlbolt.com) 118 | - [x] [Select Star SQL](https://selectstarsql.com) 119 | - [x] [SQL Practice](https://www.sql-practice.com/) 120 | - [x] [PostgreSQL Exercises](https://pgexercises.com/) 121 | - [x] [Next-Level Database Techniques for Developers](https://sqlfordevs.com/ebook) 122 | - [x] [Use the Index, Luke!](https://use-the-index-luke.com/sql/preface) 123 | 124 | 125 | ### Git 126 | 127 | - [x] [Oh My Git!](https://ohmygit.org/) or [Learn Git Branching](https://learngitbranching.js.org/) 128 | - [x] [Oh Shit, Git!?!](https://ohshitgit.com/) or for more detail, [Git Flight Rules](https://github.com/k88hudson/git-flight-rules) 129 | - [x] [Git Katas](https://github.com/eficode-academy/git-katas) 130 | - [x] [The Git Parable](https://youtube.com/watch?v=ANNboouhNHE) 131 | 135 | 136 | ## Front end 137 | 138 | ### CSS 139 | 140 | 141 | - [x] [CSS Nouveau](https://www.spicyweb.dev/css-nouveau/1-vanilla-has-never-tasted-so-hot/) 142 | - [ ] 💲[Every Layout](https://every-layout.dev/) 143 | 144 | ### JavaScript 145 | 146 | - **Basics:** 147 | - [x] [Exploring JavaScript](https://exploringjs.com/js/) or [MDN - JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript) 148 | - [x] [Modern JavaScript Explained For Dinosaurs](https://peterxjang.com/blog/modern-javascript-explained-for-dinosaurs.html) plus [MDN - import maps](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script/type/importmap) 149 | - [x] [What the heck is the event loop anyway?](https://youtube.com/watch?v=8aGhZQkoFbQ) 150 | - [x] [The Modern JavaScript Tutorial - Browser: Document, Events, Interfaces](https://javascript.info/ui) 151 | - **Web components:** 152 | - [ ] [Lit docs](https://lit.dev/docs/) 153 | - [ ] [Lit - Learn](https://lit.dev/learn/) 154 | - [ ] [Open Web Components (Lit) - Codelabs](https://open-wc.org/guides/developing-components/codelabs/) and [Code Examples](https://open-wc.org/guides/developing-components/code-examples/) 155 | - [ ] [Google - From Web Component to Lit Element](https://codelabs.developers.google.com/codelabs/the-lit-path) and [Lit for React Developers](https://codelabs.developers.google.com/codelabs/lit-2-for-react-devs) 156 | - [ ] Explore source code of [Heartml Reciprocate](https://thathtml.blog/2025/09/reciprocate-reactivity-for-html-web-components/), [QuietUI](https://quietui.org/), [Web Awesome](https://webawesome.com/) 157 | - **Other vanilla JS:** 158 | - [ ] Signals: [Ryan Carniato explains JavaScript Signals](https://www.youtube.com/watch?v=l-0fKa0w4ps), [alien-signals](https://github.com/stackblitz/alien-signals), [Preact Signals](https://github.com/preactjs/signals) 159 | - [ ] [Declarative HTML binding with Signals](https://thathtml.blog/2025/08/declarative-html-binding-with-signals/) 160 | - [ ] [nimble-html](https://thathtml.blog/2025/10/nimble-html-adds-great-dx-to-ui-components/) 161 | - **Build your own front-end framework:** 162 | - [ ] General: [Let's learn how modern JavaScript frameworks work by building one](https://nolanlawson.com/2023/12/02/lets-learn-how-modern-javascript-frameworks-work-by-building-one/), [Frontend framework](https://mfrachet.github.io/create-frontend-framework/), 💲[Build a Frontend Web Framework](https://www.manning.com/books/build-a-frontend-web-framework-from-scratch) 163 | - [ ] React: [Implementing React From Scratch](https://www.rob.directory/blog/react-from-scratch), [Build your own React](https://pomb.us/build-your-own-react/), [Creating Our Own React From Scratch](https://itnext.io/creating-our-own-react-from-scratch-82dd6356676d), [Let's build a React from scratch](https://geekpaul.medium.com/lets-build-a-react-from-scratch-part-1-virtualdom-and-renderer-14f4f716de62) 164 | - [ ] Other frameworks: [Building AlpineJS](https://laracasts.com/series/building-alpinejs), [Create Your Own Vue.js From Scratch](https://dev.to/themarcba/coding-a-vue-js-like-framework-from-scratch-part-1-introduction-3nbf), [A Hands-on Introduction to Fine-Grained Reactivity](https://dev.to/ryansolid/a-hands-on-introduction-to-fine-grained-reactivity-3ndf) and [SolidJS: Reactivity to Rendering](https://angular.love/solidjs-reactivity-to-rendering), [Compile Svelte 5 in your head](https://lihautan.com/compile-svelte-5-in-your-head) 165 | 171 | - **TypeScript:** 172 | 173 | - [x] [Total TypeScript VS Code extension](https://www.totaltypescript.com/vscode-extension) 174 | - [x] [Total TypeScript essentials](https://www.totaltypescript.com/books/total-typescript-essentials/kickstart-your-typescript-setup) 175 | - [ ] [The TypeScript Handbook](https://www.typescriptlang.org/docs/handbook/intro.html) 176 | - [ ] [The Concise TypeScript Book](https://gibbok.github.io/typescript-book/book/the-concise-typescript-book/) 177 | - [ ] [Execute Program - TypeScript courses](https://www.executeprogram.com/courses/typescript) 178 | - [ ] [Official docs](https://www.typescriptlang.org/) 179 | - [ ] [Tackling TypeScript](https://exploringjs.com/tackling-ts/index.html) 180 | - [ ] [Type Challenges](https://tsch.js.org/) 181 | - [ ] [TypeHero](https://typehero.dev/) 182 | - [ ] Type | Treat [2020](https://dev.to/typescript/type-treat-challenge-1-829), [2021](https://devblogs.microsoft.com/typescript/type-treat-2021-day-1/) 183 | - [ ] [Codeless Code - posts on TypeScript](https://code.lol/tags/typescript/) e.g. [Higher Kindred Types in TypeScript](https://code.lol/post/programming/higher-kinded-types/) and [Point-free Programming via HKTs](https://code.lol/post/programming/hkt-tacit/) 184 | - [ ] TypeScript libraries: [TS-Pattern](https://github.com/gvergnaud/ts-pattern), [Zod](https://github.com/colinhacks/zod), [type-fest](https://github.com/sindresorhus/type-fest), [Effect](https://effect.website/) 185 | - [ ] 💲[TypeScript Cookbook](https://typescript-cookbook.com/) 186 | - [ ] 💲[Effective TypeScript](https://effectivetypescript.com/) 187 | - [ ] [Google TypeScript Style Guide](https://google.github.io/styleguide/tsguide.html) and [TypeScript Style Guide](https://mkosir.github.io/typescript-style-guide/) 188 | - **New web APIs:** 189 | - [View Transitions](https://developer.mozilla.org/en-US/docs/Web/API/View_Transition_API) 190 | - [Speculation Rules](https://developer.mozilla.org/en-US/docs/Web/API/Speculation_Rules_API) 191 | - [Invoker Commands](https://developer.mozilla.org/en-US/docs/Web/API/Invoker_Commands_API) 192 | - [Popover](https://developer.mozilla.org/en-US/docs/Web/API/Popover_API) 193 | - [IntersectionObserver](https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API) 194 | 195 | 199 | 200 | 202 | 210 | 214 | 215 | ### Usability 216 | 217 | - [ ] [Vercel - Web Interface Guidelines](https://vercel.com/design/guidelines) 218 | - [ ] [Laws of UX](https://lawsofux.com/articles/) 219 | - [x] 💲[Don't Make Me Think](https://sensible.com/dont-make-me-think/) 220 | - [x] 💲[The Design of Everyday Things](https://www.nngroup.com/books/design-everyday-things-revised/) 221 | - [x] [Victor Ponamariov - 100 UI/UX Tips](https://vpon.me/hundred) 222 | - [ ] 💲[User Interface Design: A Software Engineering Perspective](https://www.amazon.com/dp/0321181433) 223 | 224 | ### Accessibility 225 | 226 | - [ ] [Accessibility Developer Guide](https://www.accessibility-developer-guide.com/) 227 | - [ ] [MDN - Accessibility](https://developer.mozilla.org/en-US/docs/Learn/Accessibility) or [web.dev - Learn Accessibility](https://web.dev/learn/accessibility/) 228 | - [ ] [Responsible Web Applications](https://responsibleweb.app/) 229 | - [ ] 💲[Inclusive Components](https://book.inclusive-components.design/) 230 | - [ ] [RailsConf talks on accessibility](https://www.youtube.com/results?search_query=railsconf+accessibility) 231 | - [ ] Examples of accessible components: [Deque University Code Library](https://dequeuniversity.com/library/), [Scott O'Hara's Accessible Components](https://github.com/scottaohara/accessible_components) 232 | 233 | ### Web standards 234 | 235 | References for when you want to stick to native Web technologies and patterns. 236 | 237 | - [Plain Vanilla](https://plainvanillaweb.com/index.html) 238 | - [Under-Engineered Patterns](https://adrianroselli.com/2023/05/under-engineered-patterns-for-wcbuf.html) 239 | - [Stephanie Eckles - SmolCSS](https://smolcss.dev/) 240 | - [Stephanie Eckles - Modern CSS Solutions](https://moderncss.dev/) 241 | 242 | ### Hotwire 243 | 244 | - **News:** 245 | - [Hotwire Weekly](https://www.hotwireweekly.com) 246 | - **Basics:** 247 | - [ ] 💲[Master Hotwire](https://masterhotwire.com/) 248 | - [ ] [30 days of Hotwire tips](https://twitter.com/ilrock__/status/1631315562390519809) 249 | - [ ] [Hotwire Cheatsheet](https://cheatsheetshero.com/user/igor-kasyanchuk/930-hotwire-for-ruby-on-rails-developers-cheatsheet?ref=shortruby.com#page-3609) 250 | - [ ] [Turbo 8 Cheatsheet](https://radanskoric.com/cheatsheet/) 251 | - [ ] 💲[Hotwire Native for Rails Developers](https://pragprog.com/titles/jmnative/hotwire-native-for-rails-developers/) 252 | - **Turbo 8:** 253 | - [ ] [Turbo 8 in 8 minutes](https://fly.io/ruby-dispatch/turbo-8-in-8-minutes) 254 | - [ ] [A happier happy path in Turbo with morphing](https://dev.37signals.com/a-happier-happy-path-in-turbo-with-morphing/) 255 | - [ ] [Turbo Music Drive](https://github.com/palkan/turbo-music-drive) app demonstrating upcoming features of Turbo 8, along with accompanying blog posts (pt. 1 [on morphing](https://evilmartians.com/chronicles/the-future-of-full-stack-rails-turbo-morph-drive), pt. 2 [on view transitions](https://evilmartians.com/chronicles/the-future-of-full-stack-rails-turbo-view-transitions)) 256 | - **Reference:** 257 | - [Hotwire.io](https://hotwire.io) (more extensive than [the official docs](https://hotwired.dev/)) 258 | - [turbo-rails "Usage" README section](https://github.com/hotwired/turbo-rails#usage) 259 | - [thoughtbot - Hotwire examples](https://github.com/thoughtbot/hotwire-example-template/branches/all) 260 | - [Betterstimulus](https://www.betterstimulus.com) 261 | - [Stimulus-Use](https://stimulus-use.github.io/stimulus-use) 262 | - [Stimulus Components](https://www.stimulus-components.com/) 263 | 264 | ## Advanced Ruby and Rails 265 | 266 | See also [my GitHub star lists](https://github.com/fpsvogel?tab=stars) for handy Ruby gems. 267 | 268 | ### Advanced Ruby 269 | 270 | - **Language features:** 271 | - [ ] [Blended Ruby](https://alchemists.io/books) (WIP) 272 | - [ ] [Victor Shepelev (zverok) - The Ruby Reference](https://rubyreferences.github.io/rubyref/) plus [Ruby Changes](https://rubyreferences.github.io/rubychanges/3.0.html) (covering Ruby 3+). [Ruby Evolution](https://rubyreferences.github.io/rubychanges/evolution.html) is also great. 273 | - [ ] [RuboCop performance rules](https://github.com/rubocop/rubocop-performance) 274 | - **Concurrency:** 275 | - [ ] [Jesse Storimer - Working with Ruby Threads](https://workingwithruby.com/wwrt/intro) 276 | - [ ] [Jesse Storimer - Working with Unix Processes](https://workingwithruby.com/wwup/intro) 277 | - [ ] Jesse Storimer - articles: [Threads, Not Just for Optimizations](https://web.archive.org/web/20171112112011/https://www.jstorimer.com/blogs/workingwithcode/7766063-threads-not-just-for-optimizations), [Matz is not a threading guy](https://web.archive.org/web/20180324184633/https://www.jstorimer.com/blogs/workingwithcode/7766069-matz-is-not-a-threading-guy), Nobody Understands the GIL (parts [1](https://web.archive.org/web/20170801134641/https://www.jstorimer.com/blogs/workingwithcode/8085491-nobody-understands-the-gil), [2](https://web.archive.org/web/20161024030142/http://www.jstorimer.com/blogs/workingwithcode/8100871-nobody-understands-the-gil-part-2-implementation), [3](https://web.archive.org/web/20160506090126/http://www.jstorimer.com/blogs/workingwithcode/8158971-nobody-understands-the-gil-part-3-thread-safety)) 278 | - [ ] [Prateek Codes - series on concurrency and parallelism](https://www.prateekcodes.dev/ruby-threads-explained-simple-guide-part-1) 279 | - [ ] [JP Camara - series on concurrency, parallelism and asynchronous programming in Ruby](https://jpcamara.com/2024/06/04/your-ruby-programs.html) 280 | - [ ] [Ruby, Ractors, and Lock-Free Data Structures](https://iliabylich.github.io/ruby-ractors-and-lock-free-data-structures/intro.html) 281 | - [ ] Articles on threads and processes in Ruby: [1](https://mensfeld.pl/2024/02/the-art-of-forking-unlocking-scalability-in-ruby/), [2](https://thecodest.co/blog/forking-and-threading-in-ruby/), [3](https://www.toptal.com/ruby/ruby-concurrency-and-parallelism-a-practical-primer), [4](https://www.sitepoint.com/forking-ipc-ruby-part/), [5](https://thoughtbot.com/blog/untangling-ruby-threads) 282 | - [ ] [parallel gem](https://github.com/grosser/parallel) 283 | - [ ] [concurrent-ruby gem](https://github.com/ruby-concurrency/concurrent-ruby) 284 | - **Ruby internals:** 285 | - [ ] 💲[Ruby Under a Microscope](https://patshaughnessy.net/2025/1/28/updating-ruby-under-a-microscope) (WIP) 286 | - [ ] [A Rubyist's Walk Along the C-side](https://blog.peterzhu.ca/ruby-c-ext/) 287 | 288 | 289 | 290 | 291 | ### Advanced Rails 292 | 293 | - **Reference:** 294 | - [ ] 💲[The Rails 8 Way](https://leanpub.com/therails8way) 295 | - [ ] [Rails Guides](https://guides.rubyonrails.org/) 296 | - [ ] [Rails API docs](https://api.rubyonrails.org/) 297 | - **Rails internals:** 298 | - [ ] [The Rails Companion](https://books.writesoftwarewell.com/8/rails-companion) 299 | - [x] 💲[Noah Gibbs - Rebuilding Rails](https://noahgibbs.gumroad.com/l/rebuilding_rails) 300 | - **Architecture:** 301 | - [x] 💲[Layered Design for Ruby on Rails Applications](https://www.packtpub.com/product/layered-design-for-ruby-on-rails-applications/9781801813785) 302 | - [ ] 💲[Maintainable Rails](https://leanpub.com/maintain-rails) 303 | - [ ] 💲[Gradual Modularization for Ruby and Rails](https://leanpub.com/package-based-rails-applications) and [Gusto engineering blog posts on modularity](https://engineering.gusto.com/all?topic=modularization) 304 | - **Background jobs:** 305 | - [x] [Sidekiq wiki](https://github.com/sidekiq/sidekiq/wiki) 306 | - [x] [How does Sidekiq work?](https://www.mikeperham.com/how-sidekiq-works) 307 | - [x] 💲[Nate Berkopec - Sidekiq in Practice](https://nateberk.gumroad.com/l/sidekiqinpractice) 308 | - **Performance:** 309 | - [ ] [BigBinary - Scaling Rails series](https://www.bigbinary.com/blog/scaling-rails-series) 310 | - [ ] [RorVsWild blog](https://www.rorvswild.com/blog/) is largely about performance 311 | - [ ] 💲[Nate Berkopec - The Complete Guide to Rails Performance](https://www.railsspeed.com/) 312 | - [ ] 💲[Nate Berkopec - The Ruby on Rails Performance Apocrypha](https://www.speedshop.co/2021/01/14/announcing-apocrypha.html) 313 | - [ ] [Mature Optimization Handbook](https://carlos.bueno.org/optimization/) (not Rails-specific) 314 | - [ ] 💲[Rails Scales!](https://pragprog.com/titles/cprpo/rails-scales/) 315 | - **PostgreSQL:** 316 | - [ ] [Postgres Playground](https://www.crunchydata.com/developers/tutorials) 317 | - [ ] [Yeah, Postgres can do that](https://dev.to/efertsch/series/20415) 318 | - [ ] 💲[High Performance PostgreSQL for Rails](https://pragprog.com/titles/aapsql/high-performance-postgresql-for-rails/) 319 | - [ ] Blog posts on Rails + Postgres: [lots on Paweł Urbanek's blog](https://pawelurbanek.com/blog), [this one at Honeybadger](https://www.honeybadger.io/blog/rails-postgresql-queries/), [this one at thoughtbot](https://thoughtbot.com/blog/advanced-postgres-performance-tips). 320 | - [ ] 💲[The Art of PostgreSQL](https://theartofpostgresql.com/) 321 | - [ ] 💲[PostgreSQL Query Optimization: The Ultimate Guide to Building Efficient Queries](https://link.springer.com/book/10.1007/978-1-4842-6885-8) 322 | - [ ] [PostgreSQL docs](https://www.postgresql.org/docs/current/) 323 | - **SQLite:** 324 | - [ ] 💲[SQLite on Rails](https://fractaledmind.gumroad.com/l/sqlite-on-rails) 325 | - **Deployment:** 326 | - [ ] 💲[Josef Strzibny - Deployment from Scratch](https://deploymentfromscratch.com/) 327 | - [ ] 💲[Julia Evans - How Containers Work](https://wizardzines.com/zines/containers/) 328 | - [ ] [Ruby on Whales: Dockerizing Ruby and Rails development](https://evilmartians.com/chronicles/ruby-on-whales-docker-for-ruby-rails-development) 329 | - [ ] 💲[The Docker Book](https://dockerbook.com/) 330 | - [ ] [Using Kamal 2.0 in Production](https://rubys.github.io/kamal-in-production/) 331 | - [ ] 💲[Josef Strzibny - Kamal Handbook](https://kamalmanual.com/handbook/) 332 | - **Miscellaneous:** 333 | - [ ] [Perfecting Your Rails Forms](https://alexbarret.com/blog/2024/perfecting-your-rails-form-part-1/) 334 | - [ ] 💲[Frictionless Generators](https://garrettdimon.com/products/frictionless-generators) 335 | 336 | ## Miscellaneous 337 | 338 | ### Community 339 | 340 | - [Awesome Ruby Blogs](https://github.com/Yegorov/awesome-ruby-blogs) for blogs, newsletters, podcasts, screencasts, and livestreams 341 | - [Bluesky starter packs for Ruby developers](https://blueskystarterpack.com/ruby-developers) 342 | - [Discord: Ruby](https://discord.com/invite/ruby-518658712081268738) 343 | - [Lobsters](https://lobste.rs/) is not Ruby-specific, but it's a way to widen your horizons and the discussions are of high quality. It's like Hacker News but smaller and more focused on programming. 344 | - [Mastodon: Ruby.social](https://ruby.social) 345 | - Reddit: [r/ruby](https://www.reddit.com/r/ruby) and [r/rails](https://www.reddit.com/r/rails) 346 | - [Slack: Ruby on Rails Link](https://www.rubyonrails.link/) 347 | 348 | ### Ruby that is not web development 349 | 350 | - 💲[DragonRuby Game Toolkit](https://dragonruby.itch.io/dragonruby-gtk) for game development. See [their Discord](https://discord.dragonruby.org/) and [community site](https://www.dragonriders.community/). Other Ruby game libraries: [Gosu](https://www.libgosu.org/), [Raylib Ruby](https://www.raylib-ruby.com/), [MiniGL](https://github.com/victords/minigl), [Ruby 2D](https://www.ruby2d.com/), [Taylor](https://www.taylormadetech.dev), [TIC-80](https://tic80.com/) 351 | - [Gamefic](https://gamefic.com/) for building text-based games and interactive fiction. See [Getting Started](https://gamefic.com/guides/getting-started) and [examples](https://github.com/castwide/gamefic-sdk/tree/master/examples). 352 | - [SC2AI](https://sc2ai.pages.dev/) for StarCraft II botting 353 | - [Sonic Pi](https://sonic-pi.net/) for live music coding 354 | - [Ronin](https://ronin-rb.dev/) for security development 355 | - Scripting and text processing: [Ruby One-Liners Guide](https://learnbyexample.github.io/learn_ruby_oneliners/), [Ruby Regexp](https://learnbyexample.github.io/Ruby_Regexp), 💲[Text Processing with Ruby](https://pragprog.com/titles/rmtpruby/text-processing-with-ruby) 356 | 357 | 361 | 362 | ### Rails codebases to study 363 | 364 | I've chosen the codebases below based on a these criteria: 365 | 366 | * Is active, with recent commits. 367 | * Does not use a JS framework on the front end, though I made exceptions. 368 | * Is well-known *or* solves a problem that's interesting to me. 369 | 370 | If you want to explore more widely, here are other places to find open-source Ruby projects: 371 | 372 | * [OpenSourceRails](https://opensourcerails.org/) 373 | * [Ruby projects on CodeTriage](https://www.codetriage.com/?language=Ruby), though not all of them are Rails apps 374 | * [Real World Rails](https://github.com/eliotsykes/real-world-rails) (and [how to search through it](https://www.hexdevs.com/posts/massive-list-of-open-source-ruby-on-rails-applications-you-can-use-as-a-reference/)) 375 | * [Awesome Ruby and Rails Open Source Apps](https://github.com/asyraffff/Open-Source-Ruby-and-Rails-Apps) 376 | 377 | Without further ado… 378 | 379 | - **Small codebases:** Less than 50k lines of Ruby code. 380 | - [github.com/nshki/naisho](https://github.com/nshki/naisho). <2k lines. *Send personal data deletion request emails to hundreds of data brokers at once.* 381 | - [github.com/carsoncole/workypad](https://github.com/carsoncole/workypad). 2k lines. *App for managing job prospecting.* 382 | - [once.com/writebook](https://once.com/writebook). 3k lines. *App for publishing books to the web.* 383 | - [github.com/garyharan/fresh](https://github.com/garyharan/fresh) plus [github.com/garyharan/FreshAppIOS](https://github.com/garyharan/FreshAppIOS) and [github.com/garyharan/FreshAppAndroid](https://github.com/garyharan/FreshAppAndroid). 4k lines. *Dating app using Hotwire Native.* 384 | - [github.com/ChaelCodes/MeetAnotherDay](https://github.com/ChaelCodes/MeetAnotherDay). 4k lines. *Helps you find and meet up with your friends at conferences.* 385 | - [github.com/SpinaCMS/Spina](https://github.com/SpinaCMS/Spina). 6k lines. *CMS (Content Management System).* 386 | - [github.com/eigenfocus/eigenfocus](https://github.com/eigenfocus/eigenfocus/). 5k lines. *Self-hosted project/time management app.* 387 | - [github.com/basecamp/once-campfire](https://github.com/basecamp/once-campfire). 6k lines. *Self-hosted chat application similar to Slack.* 388 | - [github.com/codetriage/codetriage](https://github.com/codetriage/codetriage). 6k lines. *Issue tracker for open-source projects.* 389 | - [github.com/demingfactor/calagator](https://github.com/demingfactor/calagator). 9k lines. *Community calendar platform.* 390 | - [github.com/rubyevents/rubyevents](https://github.com/rubyevents/rubyevents). 11k lines. *Index of Ruby events and videos.* 391 | - [github.com/lookbook-hq/lookbook](https://github.com/lookbook-hq/lookbook). 11k lines. *UI development environment for Rails apps.* 392 | - [github.com/thoughtbot/upcase](https://github.com/thoughtbot/upcase). 14k lines. *Learning platform for developers.* 393 | - [github.com/joemasilotti/railsdevs.com](https://github.com/joemasilotti/railsdevs.com). 14k lines. *The reverse job board for Ruby on Rails developers.* 394 | - [github.com/galahq/gala](https://github.com/galahq/gala). 15k lines. *Collaborative learning platform.* 395 | - [github.com/CircuitVerse/CircuitVerse](https://github.com/CircuitVerse/CircuitVerse). 15k lines. *Digital logic circuit simulator. Has a Vue.js front end.* 396 | - [github.com/docusealco/docuseal](https://github.com/docusealco/docuseal). 15k lines. *Open source DocuSign alternative.* 397 | - [github.com/rubyforgood/homeward-tails](https://github.com/rubyforgood/homeward-tails). 15k lines. *Connects adopters/fosters with pets.* 398 | - [github.com/TheOdinProject/theodinproject](https://github.com/TheOdinProject/theodinproject). 16k lines. *Main website for The Odin Project web development learning platform.* 399 | - [github.com/AllYourBot/hostedgpt](https://github.com/AllYourBot/hostedgpt). 16k lines. *Self-hosted ChatGPT alternative.* 400 | - [github.com/RailsEventStore/ecommerce](https://github.com/RailsEventStore/ecommerce). 17k lines. *Example app showing DDD (Domain-Driven Design), CQRS, and Event Sourcing.* 401 | - [github.com/lobsters/lobsters](https://github.com/lobsters/lobsters). 18k lines. *Hacker News clone.* 402 | - [github.com/maybe-finance/maybe](https://github.com/maybe-finance/maybe). 19k lines. *Personal finance app.* 403 | - [github.com/rauversion/rauversion](https://github.com/rauversion/rauversion). 20k lines. *Music platform.* 404 | - [github.com/ifmeorg/ifme](https://github.com/ifmeorg/ifme). 21k lines. *Mental health communication web app to share experiences with loved ones.* 405 | - [github.com/openSUSE/osem](https://github.com/openSUSE/osem). 24k lines. *Event management tool tailored to Free and Open Source Software conferences.* 406 | - [github.com/chicago-tool-library/circulate](https://github.com/chicago-tool-library/circulate). 26k lines. *A lending library management system.* 407 | - [github.com/feedbin/feedbin](https://github.com/feedbin/feedbin). 31k lines. *RSS reader.* 408 | - [github.com/AlchemyCMS/alchemy_cms](https://github.com/AlchemyCMS/alchemy_cms). 37k lines. *CMS (Content Management System).* 409 | - [github.com/huginn/huginn](https://github.com/huginn/huginn). 37k lines. *Web task automation.* 410 | - [github.com/rubyforgood/casa](https://github.com/rubyforgood/casa). 44k lines. *Volunteer management system for the nonprofit CASA.* 411 | - [github.com/rubyforgood/human-essentials](https://github.com/rubyforgood/human-essentials). 47k lines. *An inventory management system for essentials supply banks.* 412 | - **Larger codebases:** More than 50k lines of Ruby code. 413 | - [github.com/rubygems/rubygems.org](https://github.com/rubygems/rubygems.org). 56k lines. *Where Ruby gems are hosted.* 414 | - [github.com/WikiEducationFoundation/WikiEduDashboard](https://github.com/WikiEducationFoundation/WikiEduDashboard). 59k lines. *Wikipedia course dashboard system. Has a React front end.* 415 | - [github.com/chatwoot/chatwoot](https://github.com/chatwoot/chatwoot). 74k lines. *Customer engagement suite. Has a Vue.js front end.* 416 | - [github.com/solidusio/solidus](https://github.com/solidusio/solidus). 98k lines. *E-commerce platform.* 417 | - [github.com/alphagov/whitehall](https://github.com/alphagov/whitehall). 110k lines. *Publishes government content on [gov.uk](https://www.gov.uk/).* 418 | - [github.com/mastodon/mastodon](https://github.com/mastodon/mastodon). 117k lines. *Like Twitter but self-hosted and federated.* 419 | - [github.com/redmine/redmine](https://github.com/redmine/redmine). 118k lines. *Project management app.* 420 | - [github.com/forem/forem](https://github.com/forem/forem). 126k lines. *Powers the blogging site [dev.to](https://dev.to/). Uses Preact on the front end.* 421 | - [github.com/openfoodfoundation/openfoodnetwork](https://github.com/openfoodfoundation/openfoodnetwork). 129k lines. *An online marketplace for local food.* 422 | - [github.com/decidim/decidim](https://github.com/decidim/decidim). 294k lines. *The participatory democracy framework.* 423 | - [github.com/zammad/zammad](https://github.com/zammad/zammad). 299k lines. *Helpdesk/customer support system.* 424 | - [github.com/antiwork/gumroad](https://github.com/antiwork/gumroad). 323k lines. *E-commerce platform.* 425 | - [github.com/opf/openproject](https://github.com/opf/openproject). 479k lines. *Project management software.* 426 | - [github.com/discourse/discourse](https://github.com/discourse/discourse). 514k lines. *Discussion forum platform. Has an Ember.js front end.* 427 | - [github.com/instructure/canvas-lms](https://github.com/instructure/canvas-lms). 891k lines. *A popular LMS (learning management system).* 428 | - [gitlab.com/gitlab-org/gitlab](https://gitlab.com/gitlab-org/gitlab). 3 million lines. *Like GitHub but with CI/CD and DevOps features built in. Uses Vue.js on the front end. Has [docs on architecture](https://docs.gitlab.com/ee/development/architecture.html).* 429 | --------------------------------------------------------------------------------