...its lifecycle, and how to cut a requirement into issues that are neither too small nor too large. You can write an issue that a colleague can implement without asking...
You can explain our gatekeeping: feature branches, code review, and squashed commits that keep history traceable with git blame. You use our merge request checklist on every merge request...
...the agent's help, from the route to the response. You can find where something is implemented, and learn a project's conventions and vocabulary. You can explain why an...
...agent sometimes describes code that isn't there, and verify its claims against the actual code. You can keep an exploration session useful by scoping your questions so the context...
...Everything you build from here on attaches to it — Rails renders HTML, your CSS selects it, your JavaScript walks it. Important Work on this lesson in teacher mode. Note
...things beginners get wrong: headings are for structure, not for size ( because it's a sub-section, not because you wanted smaller text), and an element must be closed inside...
...that well: how to align on a plan before code is written, how to shape the agent's behavior, how to make it verify its own work, and how to...
...keep a session productive. Important Work on this lesson in builder mode. Learning goals You can explain when planning with an agent pays off and when it is overhead, and...
...and — more and more — code that an agent wrote for you. Reviewing is a skill of its own. This lesson teaches you what to look for, how to write useful...
...code review is for: a code base that gets better over time, knowledge that spreads, bugs caught before users find them. You can review a change in order of importance...
Most of MovieDB is server-rendered and enhanced with Unpoly, and that's our default. Sometimes one region of a page needs more interactivity than that model gives you comfortably...
...Then we build an island: a React component mounted into a server-rendered page. This card teaches the React basics you need for that — components, state, effects, talking to Rails...
...up. Run /trainee-setup. It will pick a folder for your code, create a folder for stand-alone exercises and prepare your global agent configuration. The MovieDB app comes later, in...
...you're stuck is fine and visible in the transcript. Doing it secretly in a side-session defeats the purpose of your own training. Explain it or don't ship...
...you will build features on top of an LLM API. Both come with a security story — and it's the same word, prompt injection, describing two different attacks. This card...
...an agent — training against injected instructions, untrusted-content handling, auto mode's command review, sandboxing — and why your own review of the agent's actions is the layer you control...
...items along one line and wraps, Grid controls both axes together, which makes page skeletons, card galleries and forms with aligned labels far simpler and removes many wrapper elements. As...
...a rule of thumb: Flexbox for one-dimensional flows, Grid for two-dimensional structures. Important Work on this lesson in teacher mode. Learning goals You can explain the difference between...
...a bug resists you. Important Work on this lesson in teacher mode. A debugger statement ("breakpoint") opens a REPL ("console") at that line, where you can inspect the program's...
...debugging console if developer tools are already open. Do this. Note that since JavaScript is single-threaded, you cannot interact with your app's frontend while the debugging console is...
In this card we will learn to write code that scales with a large number of database records. We will do this by pushing work out of Ruby and into...
...a scope of movies matching the following query format: The query is a list of space-separated words that all need to appear in the movie title for the movie...
...request to save the movie. Select the request from the list and go to the sub-tab Payload. You should see your request's payload as a list of key/value...
...used the square brackets in the payload keys to group all movie attributes into one sub-hash, params['movie']. Let's take a look at only the movie-related attributes...
...lesson you fetch data from external XML and JSON APIs in Ruby, and learn several techniques for testing code that talks to the network without making your test suite slow...
...no results, ambiguous results. You can test code that talks to the network in several ways — real calls, stubs, request-level mocking (e.g. WebMock), recorded responses (e.g. VCR) — and explain...
...applications now call an LLM for features that would otherwise be impossible or expensive: summarizing, extracting data from images, recommendations. In this card you build such features into MovieDB with...
...context windows mean for cost and limits. You keep instructions and user input in separate message roles: the system prompt is yours, user content goes into a user message and...
...can explain the difference between unit tests and end-to-end tests, with the strengths and costs of each, and why we rarely test controllers or views in isolation.
...path, unit tests for the edge cases. You can write unit tests with RSpec, structured by the behavior under test. You can write end-to-end tests that drive the...
...Form models / presenters No default — a gap in the framework ActiveType form models and presenters Screen-specific validations, callbacks and virtual attributes (sign-up, checkout, wizards) don't belong on...
...RSpec in Rails — balanced comparison 📄 GoodJob README: comparison with other queues 📄 Rendering on the web — server-rendered vs. client-rendered, with the vocabulary Discuss with your mentor Pick three rows...
...to keep working. This card walks the spectrum from classic multi-page apps to full single-page apps, explains where we usually land and why — and prepares you for the...
...You can explain the three main web architectures — multi-page app (MPA), progressively enhanced MPA, single-page app (SPA) — and how each splits work between server and browser.
...records as deleted instead of removing them — and how listing, finding and associations behave for soft-deleted records. You can decide between :dependent and soft delete from the shape of...
...make this more convenient we like to define a scope :active, -> { where(trashed: false) } on soft-deletable models. Controllers should no longer deliver show views or forms for a soft...
Applications send e-mail for notifications, confirmations and more. This lesson covers Action Mailer, keeping development and staging from sending real mail, and getting mail delivered to the inbox.
...mailer, including attachments, and preview mails during development. You can explain why development and staging must never send real mail, and how to make sure of it, e.g. with an...
...on this lesson in advisor mode. Learning goals You can explain what problem Unpoly solves: SPA-like navigation and interactions on a server-rendered app, with very little JavaScript.
...Rails ships with Hotwire (Turbo and Stimulus) for the same job: updating fragments of a server-rendered page without full reloads. Turbo Drive and Turbo Frames correspond roughly to Unpoly...
...number of different versions for Ruby, Rails and many gems. To be able to switch between projects easily, we must control every dependency our applications has. Important
...gem is and where installed gems live, and you can read a gem's source locally (e.g. with bundle open) or on GitHub. You can explain why we need a...
...which records a user sees, which transitions they may trigger — to the state. You test state-dependent behavior at the right level: end-to-end for the business process, unit...
...as it's getting reviewed. This could be a typical state flow for a movie: stateDiagram-v2 [*] --> draft draft --> pending pending --> declined: Reason declined --> pending pending --> published Changes to the...
...are attacked constantly. This lesson covers the most common attacks like XSS, CSRF and SQL injection, how Rails protects you, and where you still need to be careful. Important
Learning goals You can explain the CIA triad — confidentiality, integrity, availability — and sort any threat into it. You can explain how the most common attacks on web applications...
Code that works is not enough; it must stay easy to change. This lesson introduces the principles of maintainable code: avoiding duplication, small responsibilities, clear names and loose coupling.
...in teacher mode. Learning goals You can explain why working code isn't enough: software entropy, and the cost of change over an application's lifetime. You can recognize duplication...