24pullrequests/24pullrequests
51.7
Adequate · 19 September 2026
3.2k
lines of production code
Ruby
with JavaScript
1
measurement over time
What this system is
This system is a Ruby on Rails web application designed to track and visualize open-source contributions, specifically tailored for the '24 Pull Requests' holiday initiative. It enables users to authenticate via GitHub, submit pull requests or manual code gifts, and manage these contributions through a dashboard with calendar-based gifting features. The platform aggregates data from GitHub repositories to display project statistics, language filters, and user profiles, while also supporting administrative management of projects and automated email notifications for engagement.
How it got here
2012 — Rails 4 initialization and core feature development
29 changes.
The project was initialized as a Ruby on Rails application, establishing the core domain models for contributions and gifts alongside a complete controller and view layer. This period focused on building the foundational user-facing features, including authentication, project claiming, and the gift-giving workflow, while simultaneously setting up the testing infrastructure and database schema.
2013–2014 — Service extraction and UI modernization
13 changes.
The codebase underwent significant structural refactoring by extracting GitHub integration and gift logic into dedicated service classes, accompanied by comprehensive test coverage. Concurrently, the user interface was modernized through a migration to Bootstrap 3 SCSS, conversion of views to ERB, and the addition of interactive features like event maps and email confirmation workflows.
2016–2025 — ERB migration and contribution expansion
6 changes.
The project standardized its view layer by migrating all templates from HAML to ERB, ensuring consistent rendering across core UI components and shared partials. Concurrently, the platform expanded its scope by renaming 'Pull Requests' to 'Contributions' and introducing support for non-GitHub contributions, allowing users to submit and manage diverse types of contributions via a new form.
Features
Add HTML and text templates for the thank-you email
New ERB templates have been added for the thank-you mailer, providing both HTML and plain-text versions of the message. The email congratulates users on sending 24 pull requests and encourages continued contribution beyond the holiday season.
_app/views/thank\_you\mailer · high confidence
Added Rails 3 executable script
A new executable script at script/rails has been added to support Rails 3 gems. This script bootstraps the application by loading the configuration from config/application and config/boot, allowing users to run Rails commands directly from the application root.
script · high confidence
Added email confirmation capability
Users can now confirm their email addresses via a verification link sent in a new confirmation email. The email includes a personalized greeting using the user's nickname and provides a direct link to confirm the address, with instructions to ignore the message if the change was unintended.
_app/views/confirmation\mailer · high confidence
Added standard Rails development binstubs and Docker startup script
The application now includes a set of executable binstubs in the bin directory to streamline local development workflows. These include standard Rails entry points (rails, rake, bundle, rspec), a spring binstub for faster test execution, and utility scripts for environment setup (setup), updates (update), and JavaScript dependency management (yarn). Additionally, a new bin/dev script provides a convenient way to start the Rails server, and a bin/docker-start script has been added to handle database readiness checks and migrations within a Docker development environment.
bin · high confidence
Emoji support added to the application
The application now supports rendering emojis in user-generated content. This change introduces two new JavaScript files, \emoji.js\ and \emojione.js\, into the \vendor/assets/javascripts\ directory. The \emojione.js\ file provides a comprehensive mapping of emoji shortcodes (like \:smile:\) and ASCII emoticons (like \:)\) to their corresponding Unicode characters and images. The \emoji.js\ file contains the logic to scan DOM elements and replace these text representations with actual emoji graphics, enabling users to see emojis correctly displayed in their posts and comments.
vendor · high confidence
Initial controller layer for the 24 Pull Requests application
This change introduces the complete set of application controllers that define the core user-facing behavior of the site. It establishes authentication and authorization flows (requiring login for actions like creating contributions, gifts, and events, while keeping public pages like the homepage and project index open), implements user session management via OmniAuth, and provides the logic for key features such as the dashboard, gift-giving calendar, project search and claiming, language-based filtering, and account management (including email confirmation and deletion).
app/controllers · high confidence
Introduce interactive map and geolocation for events
Events now feature an interactive map on the show and index pages, allowing users to visualize event locations via latitude and longitude data attributes. The event creation and editing forms include a map picker component that lets users select a location, which is then saved as geolocation coordinates. Additionally, the event list displays upcoming and past events with map pins, and the event detail page shows the specific location on the map alongside event details.
app/views/events · high confidence
New admin controllers for Dasher webhooks and project management
This change introduces two new admin controllers. The DasherController provides a real-time webhook endpoint for receiving GitHub pull request data, secured by an API key check. The ProjectsController allows administrators to view, edit, and deactivate projects, supporting pagination and the ability to update project details such as the homepage and GitHub URL.
app/controllers/admin · high confidence
New email notification system for user engagement
The application now sends automated emails to users for account confirmation, periodic project suggestions, and seasonal greetings. A new ConfirmationMailer handles email address verification, while the ReminderMailer provides daily and weekly digests of suggested projects (limited to eight items) and a specific November reminder about the upcoming season. Additionally, a ThankYouMailer sends a holiday appreciation message to users after their contributions.
app/mailers · high confidence
New rake tasks for managing contributions, projects, and notifications
This change introduces a suite of new rake tasks organized into namespaces (users, organisations, projects, pull\_requests, emails) to manage the application's core data and user communications. Key capabilities include resetting and refreshing contribution counts for users and organisations, downloading and updating pull request data from GitHub, checking and reactivating inactive projects based on their scores, and sending daily or reminder emails to users. A new \JsonApi\ library is also added to handle paginated API responses, supporting the data fetching tasks.
lib/tasks · high confidence
New user profile and contribution views with calendar and merge tracking
The user profile page now displays contributions in a tabbed interface including Gifts (calendar), Contributions, and Merges, with support for viewing historical years. A new 'mergers' page lists maintainers who have merged pull requests, and user avatars now show merged contribution counts. Contributions can now include markdown body text, and the profile includes a sync button to fetch pull requests. The user index and language pages have been updated to support infinite pagination and display contributors using specific languages.
app/views/users · high confidence
Project initialized with Rails 4.0.5, Puma, and Docker support
The repository is established as a Ruby on Rails application targeting Ruby 4.0.5, replacing the previous Unicorn web server with Puma as defined in the Procfile. A Docker development environment is introduced via a new Dockerfile and docker-compose.yml, allowing users to run the application and its PostgreSQL database using Docker Compose. The project also includes standard configuration files such as .editorconfig, .rubocop.yml, and .rspec, along with documentation for contributors (CONTRIBUTING.md, CODE\_OF\_CONDUCT.md) and repository guidelines (AGENTS.md). Legacy static assets, including a canvas-based snow animation script and a standalone index.html, have been removed.
(repo-wide) · high confidence
Behavioural changes
Add meta information to the pull requests endpoint
The pull requests endpoint now includes pagination metadata (count and total pages) in its response. This is achieved by introducing a base decorator class that dynamically defines an attributes method, and a specific PullRequestsDecorator that exposes the count and total\_pages fields, along with helper methods for pagination.
app/decorators · high confidence
Added asset manifest configuration
A new manifest file has been added to configure the asset pipeline, explicitly linking the application's CSS and JavaScript bundles along with the images directory.
app/assets/config · high confidence
Admin projects interface migrated to ERB with pagination and homepage editing
The admin projects views have been converted from HAML to ERB templates. This update introduces pagination for the project list using Kaminari and adds a new 'homepage' field to the project editing form, allowing administrators to set a homepage URL for projects.
app/views/admin · high confidence
Dashboard views converted to ERB with new gift and account management features
The dashboard interface has been migrated from HAML to ERB templates, introducing several new user-facing capabilities. Users can now manage their account preferences, including email frequency, ignored organizations, and time zone settings, via a dedicated preferences page. A new account deletion flow allows users to confirm or cancel the removal of their account. The main dashboard view now displays contributions, pull requests, and suggested projects, with support for adding new contributions. Additionally, a new 'gifts' feature enables users to view, create, and manage gifts linked to their contributions, with forms for selecting dates and specific pull requests.
app/views/dashboards · high confidence
Database schema and seed data initialization
The application now includes a complete database schema definition (schema.rb) and a seed script (seeds.rb) for development and test environments. The schema defines tables for users, contributions (renamed from pull requests), projects, events, gifts, skills, and various organizational structures, including fields for social integration (Twitter, Gravatar), email preferences, and geographic data. The seed script populates these tables with synthetic test data using FactoryBot and Faker, ensuring a consistent baseline for local development and testing.
db · high confidence
Database schema evolution and migration updates
This update applies a comprehensive set of database migrations to the application's schema. It introduces new tables for organisations, events, skills, labels, and aggregation filters, while adding numerous columns to existing tables such as users (e.g., gravatar\_id, twitter tokens, profile fields, geolocation, time zone, unsubscribe token), projects (e.g., inactive status, featured flag, homepage, contributing URL), and pull requests (e.g., language, comments count, merged\_by\_id). Significant structural changes include renaming the 'pull\_requests' table to 'contributions' and updating associated foreign keys and counter caches, as well as changing the 'organiser' column in events to 'name' and expanding the event description from string to text. The migrations also handle data type conversions, such as changing user UIDs to integers and adding array support for ignored organisations.
db/migrate · high confidence
Extracted core GitHub integration and gift logic into dedicated service classes
The application now uses dedicated service classes in app/services to handle specific domains: AuthHash extracts user profile details (name, blog, location) from authentication hashes; GithubClient centralizes Octokit API calls with improved error handling for unauthorized or unavailable repositories; Downloader manages the synchronization of user organizations and pull requests, including auto-gifting logic; GiftFactory standardizes gift creation; Notification handles email delivery with better error logging; and RepoWithLabels fetches repository metadata and labels. This refactoring moves logic out of models and controllers into reusable, testable services.
app/services · high confidence
Initial Bootstrap 3 SCSS styling and component assets
The application's stylesheet architecture has been migrated to SCSS and integrated with Bootstrap 3, establishing a new visual baseline. This change introduces a centralized \application.scss\ manifest that imports modular styles for the site layout, user profiles, project contributions, and language filtering. It also adds specific UI components, including a responsive calendar view with gift-handling interactions, a 'scroll to top' button, custom checkbox skins, and a typeahead search interface, while defining a cohesive color palette and typography for the user interface.
app/assets/stylesheets · high confidence
Introduce Contribution model and gift-giving workflow
The application now uses a new Contribution model to represent both pull requests and manual code gifts, replacing the previous PullRequest-centric approach. This change introduces a dedicated gift-giving workflow where users can assign their contributions to specific dates in December via the Gift and GiftForm models, with automatic gifting support for contributions mentioning '24 pull request' in the body. The system also includes an AggregationFilter to manage contribution visibility, a Calendar class to handle the gift-giving date range, and a ScoreCalculator to evaluate project quality based on repository metadata and activity.
app/models · high confidence
Introduction of application, count, and project helper modules
The application now includes three new helper modules to centralize view logic. ApplicationHelper provides utilities for language handling (escaping and parameterizing), locale management, and a new Markdown rendering method using the Commonmarker 2.x API. CountHelper introduces methods to calculate counts for projects, contributions, and users, with support for filtering by language. ProjectHelper adds methods for determining project status, generating edit and view paths based on admin context, and retrieving avatar URLs.
app/helpers · high confidence
JavaScript assets restructured with new interactive features
The application's JavaScript manifest has been reorganized to explicitly require specific libraries including Bootstrap, Typeahead, iCheck, and Emojify, replacing the previous CoffeeScript-based structure. This change introduces several new user-facing capabilities: a 'scroll to top' button appears after scrolling down, project creation forms can now be autofilled from GitHub URLs, and event pages feature interactive maps with geolocation support and datetime pickers. Additionally, the projects listing page now supports infinite scrolling and improved filter interactions via iCheck, while pull request and dashboard views utilize timeago for relative timestamps.
app/assets/javascripts · high confidence
Migrate application views from HAML to ERB
The application's view templates in app/views/application and related directories have been converted from HAML to ERB syntax. This change updates the rendering engine for core UI components, including the header, footer, user navigation, and error pages, ensuring consistent template handling across the site.
app/views/application · high confidence
Migrate organisation views from HAML to ERB
The organisation listing, detail, and JSON rendering templates have been converted from HAML to ERB. This change updates the user interface for browsing organisations and viewing their members and contributions, including the addition of an infinite pagination feature for the organisation list and the use of Octicons helpers for pull request badges. JSON responses for organisations and their members are now generated using ERB-based Rabl templates.
app/views/organisations · high confidence
Migrate project views from HAML to ERB
The project listing, detail, and management interfaces have been converted from HAML to ERB templates. This change updates the rendering engine for project pages, including the project index with its label and language filters, the project show page (which now displays contributing URLs and contribulator scores), and the admin controls for editing, deactivating, and reactivating projects. The migration also includes the new project claim form and ensures consistent styling with Octicons and Bootstrap helpers across the project views.
app/views/projects · high confidence
New GitHub login page with CSRF protection
The login interface now features a dedicated view for GitHub authentication, displaying a prominent button that initiates the OAuth flow via the configured default provider. This change integrates the omniauth-rails\_csrf\_protection gem to ensure that the login form includes necessary CSRF protection tokens, enhancing security during the authentication process.
app/views/sessions · high confidence
New application layout with flash alerts and scroll-to-top
The application layout has been replaced with a new ERB template that includes a GitHub corner badge, conditional animated snow on the homepage, and a 'scroll to top' feature. Users will now see dismissible flash alerts (notices and alerts) with close buttons, and a specific alert prompting unconfirmed users to verify their email address.
app/views/layouts · high confidence
Rails 8 environment configuration files added
New environment configuration files for development, test, and production have been added to align with Rails 8 defaults. The development environment enables code reloading, server timing, and allows web console access from Vagrant hosts. The production environment enforces SSL, sets the log level to info by default, configures Postmark for email delivery, and integrates Google Analytics. The test environment disables eager loading to improve test suite performance and disables request forgery protection.
config/environments · high confidence
Rails 8.0 application configuration and routing setup
The application configuration has been updated to target Rails 8.0, setting the default configuration version to 8.0 in \config/application.rb\ and enabling the \bootsnap\ gem in \config/boot.rb\ to speed up boot time. The routing structure has been reorganized to reflect current features: the \languages\ resource now exposes nested \projects\, \pull\_requests\, and \users\ endpoints; \projects\ support \claim\ and \reactivate\ actions; and \contributions\ (backed by the \pull\_requests\ controller) expose a \meta\ endpoint. Additionally, the web server configuration has been switched to Puma in \config/puma.rb\, and the database configuration now uses environment variables for credentials with a production pool size of 20.
config · high confidence
Rails 8.0 upgrade scaffolding and security hardening
This change introduces the configuration files required for upgrading to Rails 8.0, including the \new\_framework\_defaults\_8\_0.rb\ initializer which prepares the app for new defaults like timezone preservation and stricter freshness checks. It also adds a \secret\_token.rb\ initializer that enforces the \SECRET\_TOKEN\ environment variable in production, removing the hardcoded fallback to improve security. Additionally, the update includes scaffolding for other framework versions (5.0, 5.2, 6.1) to ease future migrations, configures \Rack::Attack\ for rate limiting, sets up \Bugsnag\ for error tracking in production, and initializes \SimpleForm\ with Bootstrap 3 styling.
config/initializers · high confidence
Reminder emails now include suggested projects and plain-text support
The reminder email templates have been updated to display a list of suggested open-source projects for users to contribute to, including each project's name, main language, and description. This change also introduces plain-text versions of the daily, weekly, and November reminder emails to ensure compatibility with email clients that do not render HTML. Additionally, the sign-off section has been updated to direct users to Mastodon for social interaction and provides a direct link to unsubscribe from the emails.
_app/views/reminder\mailer · high confidence
Rename Pull Requests to Contributions and add non-PR support
The site has renamed the 'Pull Requests' concept to 'Contributions' across the user interface, including the index, show, and meta pages. This change introduces support for recording contributions that are not GitHub pull requests; users can now submit non-PR contributions via a new form that captures repository name, issue URL, body, and date. The contribution display templates now distinguish between pull requests and other contributions, rendering appropriate links and titles. Additionally, non-PR contributions can now be edited and destroyed by their authors, and the contribution body is rendered using Markdown formatting.
app/views/contributions · high confidence
Social sharing buttons now use ERB and include GitHub watch/fork widgets
The shared social buttons partial has been converted from HAML to ERB and now renders a Facebook Like button alongside GitHub watch and fork count iframes. This change updates the template format for the social sharing component and adds specific GitHub repository interaction metrics to the user interface.
app/views/shared · high confidence
Static pages migrated from HAML to ERB templates
The static site views (including the homepage, about, API documentation, contributing guide, and contributors list) have been converted from HAML syntax to standard ERB templates. This change aligns the view layer with the application's primary templating engine, ensuring consistency across the codebase and simplifying maintenance for developers familiar with ERB.
app/views/static · high confidence
Updated design assets with vectorized logos and print-ready files
The design folder now includes new vector source files for branding assets, specifically a print-ready PDF/AI logo for the 24pr initiative and a color EPS logo for DNSimple. These additions replace or supplement previous raster assets, providing scalable graphics for high-quality printing and web use.
design · high confidence
Test coverage
Added controller specs for core application features; Added mailer previews for reminder emails; Added mailer specs for confirmation, reminder, and thank-you emails; Added model specs for Calendar, Contribution, Event, Gift, Organisation, Project, and User; Added request specs for admin project management; Added request specs for core user and project workflows; Added test coverage for new service layer components; Added test support helpers for login, pull requests, and performance; Added tests for PullRequestsDecorator; Added tests for application and count helper methods; Initial RSpec test suite and test infrastructure setup.
Dependencies
Routine dependency updates
This change updates the project's gem dependencies, including bumping versions for libraries such as dalli, rails-i18n, reline, octokit, pg, bigdecimal, rack-attack, loofah, parser, hashdiff, net-imap, rspec-core, bootsnap, faraday, date, rubocop, commonmarker, webmock, mimemagic, securerandom, brakeman, zeitwerk, sassc, jwt, octicons, octicons\_helper, puma, msgpack, erubi, ffi, regexp\_parser, json, version\_gem, i18n, and others. These updates ensure the application uses the latest stable versions of its dependencies, which may include bug fixes, performance improvements, and security patches.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 52.
Lenses
- Code Health 71
- Architecture 82
- Maturity 67
- Readiness 85
- Security 72
- Domain Modelling 43
- Accessibility 45
Changes since last survey
- 300 commits — 300 feature/other, 0 fixes
By area
- (root) — 150 commits
- (repo) — 147 commits
- app/assets — 3 commits
Notable commits
- change: Address JavaScript review comments
- change: Bump action_text-trix from 2.1.17 to 2.1.18
- change: Bump action_text-trix from 2.1.18 to 2.1.19
- change: Bump addressable from 2.8.9 to 2.9.0
- change: Bump anonymous_loader from 0.1.1 to 0.1.2
- change: Bump anonymous_loader from 0.1.2 to 0.1.3
- change: Bump auth-sanitizer from 0.1.2 to 0.1.3
- change: Bump auth-sanitizer from 0.1.3 to 0.1.4
- change: Bump auth-sanitizer from 0.1.4 to 0.2.0
- change: Bump auth-sanitizer from 0.2.1 to 0.2.2
- change: Bump auth-sanitizer from 0.2.2 to 0.2.3
- change: Bump bigdecimal from 4.0.1 to 4.1.0
- change: Bump bigdecimal from 4.1.0 to 4.1.1
- change: Bump bigdecimal from 4.1.1 to 4.1.2
- change: Bump bigdecimal from 4.1.2 to 4.1.3
- change: Bump bootsnap from 1.23.0 to 1.24.1
- change: Bump bootsnap from 1.24.3 to 1.24.4
- change: Bump bootsnap from 1.24.4 to 1.24.5
- change: Bump bootsnap from 1.24.6 to 1.25.0
- change: Bump bootsnap from 1.25.0 to 1.26.0
- …and 280 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
24pullrequests/24pullrequests was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 19 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 7274318b3fe0e4fc4d4cf39a5d00f00b23c7cbc7 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-13a154b7f5d1.