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 or openapi-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/or docker-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! :sparkles::sparkles:
  • Why: Make the 3 lint commands copy-pasteable in one task runner (e.g., bin/lint:fix).
  • Done when: bin/lint:fix runs standardrb --fixerblint --autocorrectnpm 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 a BREAKING_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), ensure docker-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