Ruby for Good 2025 In Person Event ‐ Project Ideas - rubyforgood/casa GitHub Wiki
Small Bites (good hackathon starters)
Unflake one (1) system spec by asserting DB change after submit
- Where: pick any “System Test Overhaul” issue and tackle that file (e.g.
spec/system/..._spec.rb
). GitHub+1 - Pattern:
expect { click_button "Save" }.to change { Model.where(attrs).count }.by(1)
- Done when: spec waits for page load (use
have_current_path
/have_content
) and asserts the DB changed once.
Make Admin Dashboard minimally responsive
- Where: the admin dashboard view + CSS utilities.
- Why: There’s an open issue calling this out. GitHub Issue
- Done when: On a ~375px viewport, cards stack, tables scroll, no horizontal overflow; add a view spec/screenshot note.
Wire the Scout Discord webhook (config only)
- Where: ENV/credentials + wherever the webhook is sent (likely an initializer/service).
- Why: Open maintenance task. GitHub Issue
- Done when: Test webhook posts successfully in non-prod with a dummy channel; config documented in README “Common issues”. Add missing NOT NULL + indexes for common filters
- Where:
db/migrate/*
- How: Grep controllers for
where(...)
/joins(...)
; add indexes for columns used in filters/sorts (e.g., foreign keys, status enums). - Done when: migration adds
null: false
where appropriate and b-tree indexes for query hot paths; explain rationale in migration comment. - Note: Repo is Rails 7; standards + tooling are present. Keep style consistent. NO GITHUB ISSUE FOUND
Convert one jQuery interaction to Stimulus
-
Where: pick a page still using inline jQuery; rewrite as a Stimulus controller per README refactor note. NO GITHUB ISSUE FOUND
-
Done when: no inline JS; behavior lives in
app/javascript/controllers/*_controller.js
, tested with a system spec.// app/javascript/controllers/toggle_controller.js import { Controller } from "@hotwired/stimulus" export default class extends Controller { static targets=["panel"]; toggle(){ this.panelTarget.classList.toggle("hidden") } }
Add OpenAPI validation to CI for **swagger/v1**
- Where:
swagger/v1/*
, GitHub Action. - How: Use
swagger-cli validate
oropenapi-generator-cli validate
. - Done when: CI fails on invalid schema; add a README line “Validating API schema”.
- Context: Swagger dir exists. NO GITHUB ISSUE FOUND
Document and add a Docker healthcheck
- Where:
Dockerfile
and/ordocker-compose.yml
- How: Add
HEALTHCHECK CMD curl -f
[http://localhost:3000/health](http://localhost:3000/health)
|| exit 1
- Done when:
docker ps
shows healthy; compose respects it. - Context: Docker files exist. NO GITHUB ISSUE FOUND
Lock in linter autofix commands in contributing guide snippet
- Where:
README.md
“Developing!”
- Why: Make the 3 lint commands copy-pasteable in one task runner (e.g.,
bin/lint:fix
). - Done when:
bin/lint:fix
runsstandardrb --fix
,erblint --autocorrect
,npm run lint:fix
; docs updated. NO GITHUB ISSUE FOUND
Fix “Report a site issue” link target
- Where: search for “report a site issue” in views and partials.
- Why: Needs to go to an email/form the org controls. GitHub Issue
- Done when: Link points to the new destination; capybara test asserts correct href.
expect(page).to have_link("Report a site issue", href: expected_url)
Medium projects (pair up)
Case Contact table UX revamp (scoped sub-component)
- Where: Implement a new table with accessible sorting, sticky header, and server-side pagination.
- Why: There’s an open “New Case Contact Table” effort; carve out a self-contained piece (e.g., sort + sticky header). GitHub Issue
- Done when: Keyboard-navigable header sorts; aria-sort updates; feature spec covers sort order.
Admin mobile layout audit (site-wide)
- Where: Core layouts + a couple high-traffic admin pages.
- How: Use CSS utilities to eliminate horizontal scroll, ensure tap targets ≥44px, consistent font scale.
- Done when: Lighthouse “Best Practices/Accessibility” improves on mobile; notes in PR.
- Trigger: “Mobile View for Admin Dashboard” indicates this need. NO GITHUB ISSUE FOUND
AfterParty tasks: idempotency + guardrails
- Where:
lib/tasks/after_party/*
- How: Ensure each task checks for prior completion, wraps in transaction, logs result, and short-circuits safely.
- Done when: running
bin/update
repeatedly is safe; add a test that re-runs tasks without side effects. - Context: AfterParty is in use. NO GITHUB ISSUE FOUND
Policy spec coverage pass for Pundit policies
- Where:
app/policies/*
,spec/policies/*
- How: Ensure each role’s allow/deny matrix is covered; add shared examples to standardize.
- Done when: 100% branch coverage for policies; one shared example reused everywhere.
- Context: Pundit is part of stack. NO GITHUB ISSUE FOUND
OpenAPI → request spec sync
- Where: choose 2–3 endpoints; write request specs that assert response schema using the swagger file.
- Done when: CI validates example responses match schema (e.g.,
json-schema
gem), preventing drift. - Context:
swagger/v1
present. NO GITHUB ISSUE FOUND
Bigger bets (lead a small crew)
System spec stabilization strike team
- Scope: Triage the “System Test Overhaul” set and create a repeatable pattern: (1) assert navigation, (2) assert DB change, (3) de-flake waits.
- Output: A documented recipe + refactor 5–8 files. Issues exist for many specific specs. [NO GitHub ISSUE] Stimulus migration sprint
- Scope: Inventory all jQuery usages; migrate a cluster (e.g., table filters + modals) to Stimulus with targets/actions.
- Output: A mini styleguide for controllers; 3–4 pages migrated; remove dead jQuery. The refactor is already signposted. NO GITHUB ISSUE FOUND
Performance pass: N+1 and indexing
- Scope: Add Bullet (if not already) in dev/test, run high-traffic pages, kill N+1s with
includes
, add composite indexes for the worst offenders. - Output: Before/after log showing eliminated queries; migration adding composite index; docs “How to run Bullet”.
API contract tests + schema docs pipeline
- Scope: CI job that (a) validates
swagger/v1
, (b) fails on breaking changes unless aBREAKING_CHANGE.md
is updated, (c) publishes HTML docs artifact. - Output: New GitHub Action workflow; link added to README. NO GITHUB ISSUE FOUND
Container/dev-env parity
- Scope: Add
HEALTHCHECK
, slim the image (multi-stage), ensuredocker-compose
supports first-time contributors (seed, a fake mailer, storage). - Output:
docker-compose up
leads to a working app + seeded admin in ≤1 command; README updated. NO GITHUB ISSUE FOUND