// the find
TheOdinProject/theodinproject
Main website for The Odin Project
The website powering theodinproject.com — a free, structured curriculum for learning full-stack web development. This is the Rails app that tracks user progress, hosts lesson content (pulled from a separate curriculum repo), and handles project submissions and community features. Not the curriculum itself, just the delivery vehicle.
- ViewComponent is used consistently across the UI — sidebar, cards, charts, notifications all have dedicated component classes with paired templates, which keeps the view layer from becoming a mess of partials
- Stimulus controllers are scoped tightly to their components (sidebar_toggle_controller.js lives next to the sidebar component), so the JS surface is small and auditable without a build pipeline that fights you
- CI/CD and contributing infrastructure is solid — issue templates cover bug/chore/feature separately, dependabot is configured, and there are linting rules for Ruby (RuboCop), ERB, and CSS all enforced in CI
- The admin section is properly namespaced with its own base controller, separate session handling, and 2FA support — not bolted on as an afterthought
- Heroku-specific deployment artifacts are baked in (.slugignore, .slugcleanup, heroku-review-app workflow) — migrating off Heroku would require more than just pointing at a new host
- The actual curriculum content lives in a separate repo and gets pulled in; if you want to run a fork with modified lessons, you're maintaining two repos and wiring them together yourself
- The API surface appears minimal (one points endpoint visible in the directory), so if you wanted to build a mobile client or external tooling against lesson/progress data, there's almost nothing there
- No evidence of background job infrastructure in the directory tree — for a site with webhooks (github/webhooks_controller.rb) and notifications, the absence of a visible job queue setup (Sidekiq config, etc.) is a gap worth investigating before contributing anything async