$ show TheOdinProject/theodinproject
This is the main application for The Odin Project, a free and open-source web development curriculum. It is a Rails 8.1 monolith that provides a learning management system (LMS) with user authentication, lesson tracking, project submissions, flagging/moderation, and an admin panel. The application imports lesson content from a separate GitHub repository, converts Markdown to structured HTML using custom Kramdown converters, and tracks user progress through materialized SQL views. It features a modern Hotwire frontend (Stimulus + Turbo), Tailwind CSS, and extensive use of ViewComponents. The codebase is well-tested with RSpec, including system and request specs. While primarily an application, it includes analytical reporting via materialized views and daily summary jobs, giving it a hybrid nature leaning heavily toward application.
The LLM identified 4 files worth highlighting for reuse:
Encapsulates the conversion of lesson content from Markdown to HTML with custom section handling. Uses Kramdown with a custom converter (OdinHtml) and document sections. This service is isolated from the rest of the application (only depends on Kramdown and custom converters) and can be extracted to any Ruby project needing structured Markdown-to-HTML conversion with section anchoring.
Implements the strategy pattern for resolving flagged project submissions. The factory selects an action class (ban, dismiss, notify_user, remove_project_submission, null_action) based on flag parameters. Each action inherits from a base class and implements a single `execute` method. This pattern is self-contained, testable, and demonstrates clean separation of concerns for state-based decision making.
A custom Kramdown converter that generates HTML with specific class names and structure for lesson content (e.g., inline images with a specific class, custom panel markup). It extends the Kramdown::Converter::Html base class and overrides several conversion methods. This is a clean, isolated component that could be reused in any project that needs custom HTML generation from Markdown via Kramdown.
A reusable Rails concern that adds 'like' functionality to any model. It defines a polymorphic association to a `likes` table, includes a `Likeable` scope for sorting by likes, and integrates with counter caches. This concern is a textbook example of decoupling a social feature from the core model and could be extracted to any Rails application needing voting/liking capabilities.