205 Basic file uploads and image versions [2d]
ActiveRecord-style file uploads with image resizing, cropping, validation, caching, and forced downloads for movie posters in Rails using CarrierWave.
210 Cucumber in depth [2d]
Advanced Cucumber features, cucumber_factory, and DRY scenario design help reduce duplicated step definitions and improve maintainability.
215 Browser automation with Capybara and Selenium WebDriver [2d]
Real-browser integration tests with Capybara and Selenium often become flaky because of driver differences, JavaScript dialogs, cookies, downloads, and browser state.
224 Advanced git [2d]
Advanced Git workflows for rewriting history, splitting commits, rebasing branches, and handling remote pushes, conflicts, and recovery after mistakes.
225 Event bubbling and delegation [1.5d]
Event bubbling and delegation reduce handler count while affecting propagation control and dynamically created elements. stopPropagation(), stopImmediatePropagation() and preventDefault() behave differently.
230 Unobtrusive JavaScript components [3d]
Reusable JavaScript components need clear scope, multiple instances, dynamic activation, and cleanup to avoid brittle page-specific behavior.
235 Cookies and Rails Sessions [1d]
Cookies and Rails sessions differ in scope, lifetime, and security properties. Signed, encrypted, and SameSite cookies shape how state survives requests and browser storage.
237 Web application security [4d]
Web application security centers on common attack vectors, Rails protections, dependency checks, and HTTPS limits for preventing XSS, CSRF, SQL injection, and session theft.
240 Authentication [3d]
User identity verification in Rails needs secure session handling and password storage; Clearance or Devise avoid custom authentication pitfalls while supporting sign-in, sign-out, and protected pages.
245 Authorization [2.5d]
Fine-grained access control in Rails can depend on role, ownership, and per-resource permissions. Consul and assignable_values help model custom authorization rules and restricted choices in forms.
247 Nested forms [2d]
Rails nested attributes keep child records in one transaction, while form helpers encode names so additions, removals, and ignored blank entries map correctly.
250 Form models [2d]
Form models separate user-facing input handling from domain models, especially for sign-up, login, and merge screens. They help manage validation and interaction-specific code without overloading ActiveRecord.
255 Parsing text with regular expressions [1d]
Regular expressions can extract structured data from simple Ruby code, including class names, superclasses, and methods, when a full parser would be overkill.
260 Network basics [0.5d]
Web requests depend on HTTP, TLS, DNS and routing; headers, certificates and name resolution determine how browsers reach and secure sites.
270 More Software design [2d]
Software design review topics focus on code smells, technical debt, and architecture antipatterns in existing repos such as Cards and MovieDB.
275 The HTML5 platform [1.5d]
Browser support varies for HTML, CSS, and JavaScript features; older Safari lags, and BrowserStack, feature detection, transpilation, and polyfills help keep apps working.
285 Frontend build pipelines in Rails [3d]
Rails frontend asset systems differ in bundling, fingerprinting, package support, and postprocessing; esbuild is the current preferred approach, while Sprockets and Webpacker remain relevant in older apps.
287 The asset pipeline [1d]
Rails serves stylesheets, JavaScript, and images through the asset pipeline, with preprocessing, bundling, minification, and fingerprinting needed for production caching.
288 50% Milestone
Halfway through the curriculum deck, with foundational stack basics complete and a transition into advanced topics plus repetition reminders for retention.
290 Structuring CSS with the BEM pattern [4d]
BEM brings consistent, reusable CSS structure to new and legacy projects, making block-based styling easier to maintain and reuse across screens.
295 Advanced JavaScript [2.5d]
ES6+ JavaScript requires solid understanding of prototypes, modules, equality, closures, and let/const to read and write more complex code correctly.
300 JavaScript: Writing asynchronous code [2.5d]
Asynchronous JavaScript avoids blocking the event loop and is essential for network requests, animations, and error handling; Promises, async/await, and callbacks shape control flow.
301 Using external JavaScript libraries [1.5d]
Browser apps often need third-party UI and utility libraries; choosing maintained, lightweight packages with compatible dependencies avoids bloat and integration problems.
305 Internal APIs and client-side rendering
Server-rendered search results and client-side rendering patterns for a movie list, shifting from HTML snippets to JSON and safe DOM construction.