Changelog

This page tracks notable public project changes so organizations and contributors can follow current progress and direction.

About this changelog

Changelog entries summarize meaningful project changes. This includes implementation updates, workflow improvements, and notes that help teams evaluate current project maturity.

Release history and selected project documentation are sourced from the public CrowdCAD repository submodule when available.

Recent entries

1.1.0

2026-03-19

Lite mode local-only workflow for event setup and dispatch, including browser-local persistence without Firebase sync.

Added

  • Lite mode local-only workflow for event setup and dispatch, including browser-local persistence without Firebase sync.
  • Lite dispatch navbar controls for Posting Schedule, Clear Event, and Export Summary actions.

Changed

  • Unified Lite and Cloud dispatch onto a shared dispatch UI flow to reduce duplication and keep feature parity.
  • Lite dispatch navbar behavior now mirrors main app navbar behavior (clock placement, auth controls, desktop/mobile parity).
  • Lite dispatch route now uses a lightweight wrapper that delegates to the shared dispatch page.

Fixed

  • Resolved Next.js route export/type issues on dispatch pages that could fail production builds.
  • Cleared lint/type build blockers across dispatch, venue management, profile, and modal components.
  • Updated venue map icon rendering to satisfy Next.js image lint requirements.
  • Suppressed non-actionable React hydration mismatch warnings in development when browser extensions inject attributes on root HTML/body before client hydration.

1.0.0

2026-02-28

Initial public release of CrowdCAD — an open-source, browser-based Computer-Aided Dispatch system for volunteer EMS and event medical teams.

Notes

  • Next.js 15 App Router frontend with TypeScript, TailwindCSS, and HeroUI component library.
  • Firebase backend: Email/password authentication, Firestore real-time database, Firebase Hosting deployment pipeline.
  • Firebase Data Connect schema (Cloud SQL / PostgreSQL) for structured event, unit, and incident data.
  • Dark-mode design system with a custom token palette (surface, accent, status.) applied globally via Tailwind.
  • Create and configure events with name, date, venue, and posting schedule.
  • Per-event posting schedules: define time slots, assign teams to posts, and edit times inline.
  • Scheduled auto-post sync: at each posting-time boundary the system automatically prepares teams to be moved to their assigned posts.
  • Event summary page with activity charts (SummaryCharts).
  • Share modal to grant other authenticated users access to an event.
  • End-event modal with summary navigation.
  • Create and edit venues with metadata (equipment capacity, medical post definitions).
  • Image-based interactive venue maps with named layers; markers for teams and equipment are customizable.
  • Equipment staging locations attached to posts.
  • Call tracking table — live call log with columns for call number, chief complaint, age/sex, location, status, and assigned teams.
  • Clinic tracking — separate table for walk-up patients with walkup-entry modal.
  • Quick-call entry form for rapid incident creation.
  • Priority call flagging (visual highlight and sort).
  • Duplicate call detection and resolution workflow.
  • Cell-level inline editing for call fields with click-to-edit UX.
  • Per-call team assignment with status tracking and log entries.
  • Resolved-call archive toggle (show/hide resolved rows).
  • Add, edit, and delete field teams with named members and certification levels (CPR, EMT-B, EMT-A, EMT-P, RN, MD/DO); lead designation per member.
  • Add, edit, and delete supervisors with call sign and certification.
  • Team status and location controls; per-team status timer derived from activity log.
  • Sort teams by availability, name (A→Z / Z→A).
  • Condensed team card view mode for high team-count events.
  • Equipment cards with status (Available / Deployed / In Use / Maintenance), current location, and staging location.
  • Add venue-defined equipment to the dispatch board.
  • Inline location editing with commit-on-blur.
  • Equipment reset-to-staging-location bulk action.
  • Soft-delete equipment from active board.
  • .env.example with all required Firebase and SMTP environment variables documented.
  • firebase.json.template for self-hosted Firebase Hosting setup.
  • firestore.rules with baseline security rules.
  • scripts/backfillOrgIds.js migration helper.
  • Full documentation suite: ARCHITECTURE.md, COMPONENTS.md, DEPLOYMENT.md, FIREBASESETUP.md, USERGUIDE.md.
  • CONTRIBUTING.md, CODEOFCONDUCT.md, SECURITY.md, LICENSE.md (AGPL-3.0).

Unreleased

Foundation refactor: extracted core utilities to src/lib/ for reuse across features:

Added

  • Foundation refactor: extracted core utilities to src/lib/ for reuse across features:
  • uploadUtils.ts — file upload with exponential backoff retry logic (transient error detection, original error preservation).
  • zoomPanUtils.ts — viewport math utilities (clampScale, clampPanPosition) for consistent zoom/pan behavior.
  • markerUtils.ts — marker detection and placement helpers.
  • Shared React hooks extracted to src/hooks/ for reuse:
  • useZoomPan — manages zoom/pan state and mouse/wheel event handlers for map-based interfaces.
  • useScheduleGeneration — generates shift schedules from event duration and team coverage.
  • useTeamForm — team/supervisor form submission and validation.
  • Shared UI primitives added to src/components/ui/:
  • map-zoom-controls.tsx — zoom in/out/reset button cluster with accessibility labels (reused across event create and venue management).
  • map-pan-surface.tsx — reusable pan/wheel interaction surface for canvas-based viewers.
  • Event creation flow decomposed into focused section components under src/components/event-create/:
  • MetadataSection.tsx — event name, date, and venue selection.
  • TeamStaffingSection.tsx — team roster assignment.
  • SupervisorStaffingSection.tsx — supervisor roster assignment.
  • PostingScheduleSection.tsx — shift schedule generation and management.
  • PostsEquipmentSection.tsx — posts and equipment selection with multi-select state.
  • Venue management flow decomposed into focused section components under src/components/venue-management/:
  • EquipmentManagementSection.tsx — add/edit/delete equipment with stable React keys.
  • LayerControlBar.tsx — layer navigation (previous/next/add/delete) with accessibility labels.
  • MarkerModeToggleButton.tsx — toggle marker placement mode.
  • PendingMarkerDialog.tsx — marker naming dialog.
  • MarkerPlacementInstruction.tsx — on-screen guidance during marker placement.
  • Lite event drafts now persist a postingScheduleEnabled flag to keep posting schedule behavior consistent between setup and dispatch.

Changed

  • Event creation page (src/app/(main)/events/[eventId]/create/page.tsx) now uses decomposed section components instead of a monolithic page layout, improving maintainability and testability.
  • Venue management page (src/app/(main)/venues/management/page.client.tsx) now uses decomposed section components and shared map controls instead of page-local implementations.
  • Dispatch call tracking page now threads styling through rowClassName prop to restore per-status visual differentiation.
  • Pan math in zoomPanUtils.clampPanPosition corrected to properly clamp against scaled image overflow (fixes off-by-factor error at different zoom levels).
  • Lite setup Locations/Equipment add row now uses an attached input + action button style with aligned corner radii and consistent spacing.
  • Teams and Supervisors panel actions in Lite setup now use explicit Add Team and Add Supervisor buttons.
  • Lite dispatch navbar now hides Posting Schedule when posting schedule is disabled in event setup.
  • Lite navbar primary links were simplified to focus on Lite routes (Lite Home, Create).
  • Landing page copy and CTA text were refined (CrowdCAD Lite footer label and Lite subtitle wording), and Lite CTA iconography was simplified.
  • Updated public/logo.svg artwork/viewBox for refined logo rendering.

Fixed

  • Upload retry logic now only retries on transient Firebase Storage errors (storage/retry-limit-exceeded, storage/unknown) to avoid masking real failures, and preserves original error for diagnostics.
  • Removed initial navbar mount flicker/layout shift on page reload by rendering the main app navbar in the initial render path instead of client-only lazy loading.
  • Equipment list now uses stable React keys (item.id) instead of array indices to prevent component state loss on edit/delete operations.

Release stream

Release labels are normalized from project changelog history so this page remains stable even if markdown formatting shifts over time.

  • 1.1.0 (2026-03-19): Lite mode local-only workflow for event setup and dispatch, including browser-local persistence without Firebase sync.
  • 1.0.0 (2026-02-28): Initial public release of CrowdCAD — an open-source, browser-based Computer-Aided Dispatch system for volunteer EMS and event medical teams.

For code history and issue-level detail, use GitHub.