bmrc-events

Guides development of the BMRC events, shift signup, roster, and attendance system.

2|Updated Dec 24, 2025
One-click install
npx skills add https://github.com/iv-zhang/BMRC-Logistics --skill bmrc-events-iv-zhang
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: bmrc-events
Source: https://github.com/iv-zhang/BMRC-Logistics/tree/main/.claude/skills/bmrc-events
Command: npx skills add https://github.com/iv-zhang/BMRC-Logistics --skill bmrc-events-iv-zhang

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? It prevents developers from breaking the load-bearing business rules of the BMRC Logistics events and shift-signup system when modifying event creation, staffing, attendance, or roster code. ## Core Features & Use Cases - Role gating rules: Documents the medops reduced-admin role, the isEventManagerRole gate, and the narrower attendance panel visibility so event surfaces are never gated on isAdmin. - Cert gating and experience derivation: Explains EMT/CPR certification requirements for shift signup, the org_settings kill switch, and how member experience is computed from memberStatus and joinedTerm. - Attendance and shift hours: Covers check-in stamps, computed minutesLate, exception handling, shift end via button or statpack check-in, and per-semester volunteer statistics. - Use Case: When adding a new notification type to the /events page, consult this Skill to correctly write broadcast notification docs to managers and the team FTO without adding an unsupported email path. ## Quick Start Use the bmrc-events skill to add a new attendance exception type to the event roster check-in flow.

Frequently Asked Questions about bmrc-events

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I gate an event or roster page for the medops role?▼

Gate every event and roster surface on isEventManagerRole(role), which covers admin, quartermaster, and medops, never on isAdmin. The attendance panel is narrower: only the assigned FTO or admin/quartermaster see it, so medops is excluded there.

How does shift signup cert gating work in Firestore?▼

canSignUpForShifts requires unexpired EMT and CPR certification expiry dates, with no document upload. The org_settings.requireCertsForShiftSignup flag defaults to true and blocks all signup when enabled, showing an inline amber reason from getShiftBlockReason.

Why is minutesLate stored instead of entered manually?▼

minutesLate is computed against the event call time via computeMinutesLate and eventCallDateTime in event-utils.ts, then stored as a snapshot. Manual entry is disallowed so attendance records stay consistent with the recorded check-in timestamp.

Can the events system send email notifications to volunteers?▼

No. Notifications are in-app broadcast documents written to the notifications collection for managers and the team FTO. The app is a static export with no mail server, so adding an email path requires an explicit design decision first.

Why do event dates display incorrectly after createEvent?▼

deepRemoveUndefined previously rebuilt Firestore Timestamps into plain maps, breaking dates on create while update worked. The toJsDate helper coerces legacy maps, and scripts/repair-event-dates.cjs permanently repairs old documents in dry-run mode by default.