Council #18262 · Delivery control center

Project improvement tracker

One view of shipped capabilities, planned safeguards, release gates and the SCALES controls that protect the application from regressions and reversions.

49%overall items implemented
19 implemented · 20 remaining · 39 total
P05

open critical items

P17

open high-priority items

P28

open planned quality items

P30

open future items

Release roadmap

Controlled delivery sequence

Security and financial correctness precede structural and visual refinement.

00

Existing

9 tracked outcomes

9/9 implemented
01

R4 Product quality

10 tracked outcomes

2/10 implemented
02

Client requests

7 tracked outcomes

4/7 implemented
03

R1 Security foundation

6 tracked outcomes

4/6 implemented
04

R2 Financial integrity

3 tracked outcomes

0/3 implemented
05

R3 Maintainability

4 tracked outcomes

0/4 implemented
SCALES controls

Regression prevention framework

Every item carries applicable controls and a mandatory regression gate.

S

Surgical

Make precise changes with explicit scope and rollback boundaries.

C

Clean

Keep code, ownership, naming and documentation maintainable.

A

Architecture-Aligned

Follow the application’s established platform and domain boundaries.

L

Low-Regression

Protect active UI, APIs, data, authentication and payment flows.

E

Expandable

Favor decoupled foundations that support future additions.

S

Stepwise/Systematic

Baseline, implement, verify and document one controlled increment at a time.

Work inventory

Features and improvements

39 items shown

PUB-01P1Implemented
Public experience

Public council website

Responsive home, about, contact, join, community, news and gallery experiences.

Release
Existing
Current evidence
Routes and reusable public components are active.
Regression gate
Public navigation and responsive smoke test.
Low-RegressionExpandable
PUB-02P1Implemented
Public experience

Programs and events catalog

Firestore-backed programs, event discovery, filtering and event participation.

Release
Existing
Current evidence
Programs and events hooks and routes are active.
Regression gate
Filtering, pagination, empty states and event modal test.
Architecture-AlignedExpandable
PUB-03P2Implemented
Public experience

Resources and document directory

Searchable documents, links, testimonials and council history.

Release
Existing
Current evidence
Resource data hooks and route are active.
Regression gate
Search, category filtering and document-link test.
Architecture-AlignedExpandable
PUB-04P1Implemented
Public experience

Virtual prayer wall

Prayer submissions, public feed and support counts.

Release
Existing
Current evidence
Prayer intentions collection and community UI are active.
Regression gate
Submission, moderation visibility and support-count test.
ExpandableLow-Regression
PORT-01P0Implemented
Officer portal

Authenticated officer portal

Officer login, first-login setup, password recovery and dashboard access.

Release
Existing
Current evidence
Firebase Auth portal routes are active.
Regression gate
Authorized, unauthorized and expired-session tests.
Architecture-AlignedLow-Regression
PORT-02P1Implemented
Officer portal

Council content management

Manage officers, gallery, news, events, programs, documents, links and testimonials.

Release
Existing
Current evidence
Real-time Firestore CRUD exists in the dashboard.
Regression gate
Create, edit, delete and upload tests for each module.
Architecture-AlignedExpandable
PORT-03P1Implemented
Officer portal

Membership and participation management

Manage leads, members, volunteers, prayer intentions, donations and dues.

Release
Existing
Current evidence
Dashboard collections and management panels exist.
Regression gate
PII visibility, role boundary and CRUD regression tests.
Architecture-AlignedExpandable
PORT-04P1Implemented
Officer portal

Atomic photo upload and asset cleanup

Prevent invisible orphaned Storage objects by treating upload, gallery-record save, replacement, cancellation, and deletion as one managed asset lifecycle.

Release
R4 Product quality
Current evidence
Extended the atomic image lifecycle proven under FCR-02 (event) and FCR-04 (Knight of the Month) to the four remaining image-bearing admin modules: gallery (Site Photo CMS — the module that caused the original incident), officer, news, and program. Added shared deleteManagedImageFor/isManagedStorageImageFor helpers (config-driven by folder/default-image per type) instead of duplicating per-type functions a third and fourth time, wired into each type's open/edit/save/delete handlers and closeContentDrawer. Also fixed two Cancel buttons (news, program) that were still calling setIsDrawerOpen(false) directly, bypassing cleanup entirely — the same gap fixed for event under FCR-02 had never been propagated to these two. Gallery required special handling since its "new" flow and category-switch dropdown (syncGalleryFormWithPlacement) load an existing placement's photo rather than starting blank, so the previous-image baseline must re-sync mid-session. tsc passes clean. Owner manually tested all four modules end-to-end with real file uploads (upload+save, upload+cancel, replace, delete) against the live Firebase Storage console for all four types and confirmed every case passed with no orphaned objects and no broken existing images.
Regression gate
Upload-and-save, upload-and-cancel, replacement, failed-save, CMS deletion, public visibility, and exact Storage cleanup tests pass with no orphaned objects or broken existing images.
SurgicalCleanArchitecture-AlignedLow-RegressionExpandableStepwise/Systematic
EVT-01P1Planned
Officer portal

Admin RSVP roster and attendance management

Operationalize stored event RSVPs through an Admin-only roster with event filtering, attendee and guest totals, notes, status, cancellation, check-in, export, and reliable count reconciliation.

Release
R4 Product quality
Current evidence
The public RSVP form writes individual eventRSVPs records and increments events.rsvpsCount, but no UI reads or manages those individual registrations.
Regression gate
Public users see aggregate counts only; Officer/Admin roster access passes; create, cancel, delete, check-in, export and counter-reconciliation tests pass without affecting Volunteer Roster behavior.
SurgicalCleanArchitecture-AlignedLow-RegressionExpandableStepwise/Systematic
FCR-01P0Implemented
Feature Client Requests

Current-month homepage upcoming events

Keep the homepage Upcoming Events section aligned to the current calendar month from event dates instead of stale manual month content.

Release
Client requests
Current evidence
The homepage and Events page now share the same upcoming-event helper. Browser verification on August 31, 2026 showed the homepage first three events as AUG 31 Council Meeting for September, SEP 12 To Hot to Handle 5K run, and SEP 13 Hispanic Heritage Luncheon, matching the Events page upcoming schedule.
Regression gate
Homepage shows current and future events for the active month, hides past-month homepage content, preserves the public Events page, and handles empty-month fallback cleanly.
SurgicalArchitecture-AlignedLow-RegressionExpandableStepwise/Systematic
FCR-02P0Implemented
Feature Client Requests

Event-specific image management

Allow each event to use its own image while preserving a branded fallback only when no event-specific image is available.

Release
Client requests
Current evidence
The public Events page and Admin event form read and write event.image, and the homepage renders event-specific images when available while fallback-only events keep the compact existing date-card layout. The event drawer now deletes an unsaved newly-uploaded Storage image on cancel, close, and replace, and deletes the linked Storage object on event deletion. The Cancel button was the last unwired close path and now shares the same closeContentDrawer cleanup as the backdrop and header-close actions. Manually verified upload/save, upload/cancel, replace, and delete flows with no orphaned Storage objects.
Regression gate
Admin can preview, upload, replace, and remove an event image; public event cards use event-specific images first; existing fallback images remain intact; Storage cleanup does not orphan assets.
SurgicalCleanArchitecture-AlignedLow-RegressionExpandableStepwise/Systematic
FCR-03P1Implemented
Feature Client Requests

Memorial page for fallen brothers

A respectful public memorial experience for deceased Knights, with full officer-portal CRUD (photo, dates, service summary, rich-text tribute, draft/publish gating) built now rather than deferred.

Release
Client requests
Current evidence
Built a memorials Firestore collection with staff-write/public-read Firestore and Storage rules mirroring the FCR-04 pattern; a solemn public /memorial page (useMemorials hook, timezone-safe date formatting, respectful empty state) linked from the Navbar under Our Council; and a full admin CRUD module in the portal dashboard (In Memoriam CMS) reusing the shared IMAGE_LIFECYCLE_CONFIG/deleteManagedImageFor upload-cleanup lifecycle proven under PORT-04. Firestore and Storage rules deployed to production kofc-18262 (dry-run passed first). Live-verified end-to-end in browser as Admin: created a real memorial with a synthetic entry, confirmed it appeared on the public page correctly formatted and mobile-responsive, then deleted it and confirmed the public page returned to its empty state with no orphaned data.
Regression gate
Public memorial page renders respectfully on mobile and desktop, supports empty state, does not expose private family details, and does not disturb existing navigation or content pages.
SurgicalCleanArchitecture-AlignedLow-RegressionExpandableStepwise/Systematic
FCR-04P1Implemented
Feature Client Requests

Knight of the Month feature

Show monthly Knight of the Month recognition with photo, month/year, name, and recognition text, with room for an archive.

Release
Client requests
Current evidence
Built a knightOfTheMonth Firestore collection with deployed staff-write/public-read Firestore and Storage rules; an admin CRUD module mirroring the Event editor including its image upload/replace/cancel/delete Storage cleanup lifecycle; a homepage Hero spotlight slide and a public /knight-of-the-month archive page, both using a shared framed-portrait layout; and isPublished draft/publish gating (this codebase’s first such convention). Live-verified in browser with the admin account: a draft entry stayed hidden from both public surfaces, publishing it made it appear on both, the no-photo fallback rendered cleanly, and deleting it cleaned up correctly with no console errors. Caught and fixed a real timezone bug during this pass (month/year display rolled back a month in US timezones). Image upload/replace/cancel could not be live-driven from this session (the browser tool has no file-picker capability); that path relies on code parity with the identical, already production-verified FCR-02 event-image lifecycle rather than a fresh live test.
Regression gate
Homepage highlight and archive render current and prior recipients, admin-managed content can be drafted or published, and missing photos use a polished fallback.
SurgicalCleanArchitecture-AlignedLow-RegressionExpandableStepwise/Systematic
FCR-05P1Planned
Feature Client Requests

Safe Environment certification page

Add a dedicated public information page for Safe Environment certification requirements, process, links, and contact support.

Release
Client requests
Current evidence
The client request includes a dedicated Safe Environment certification page for Knights.
Regression gate
Page content is easy to update, links are verified, public navigation remains coherent, and no private member certification status is exposed.
SurgicalCleanArchitecture-AlignedLow-RegressionExpandable
FCR-06P1Planned
Feature Client Requests

That Man Is You ministry page

Add a dedicated public page for the TMIY ministry with schedule, location, expectations, contact details, and call to action.

Release
Client requests
Current evidence
The client request includes a dedicated That Man Is You ministry page.
Regression gate
Page works as a public ministry entry point, schedule/contact details are maintainable, and routing/navigation do not regress other program pages.
SurgicalCleanArchitecture-AlignedLow-RegressionExpandable
FCR-07P2Planned
Feature Client Requests

CMS freshness controls for client-managed content

Reduce future code dependence by giving officers publish, unpublish, scheduling, expiration, and freshness controls for recurring content.

Release
Client requests
Current evidence
The client concerns collectively show a need for month-to-month maintenance of events, images, recognitions, memorials, and ministry information without code edits.
Regression gate
Draft, publish, unpublish, expiration, and scheduled visibility states work for selected content types without hiding existing published content unexpectedly.
SurgicalCleanArchitecture-AlignedLow-RegressionExpandableStepwise/Systematic
PAY-01P0Implemented
Payments

Donation checkout

Public donation form creates Stripe Checkout sessions.

Release
Existing
Current evidence
Donation route and checkout API are present.
Regression gate
Test-mode checkout and redirect smoke test.
SurgicalLow-Regression
PAY-02P0Implemented
Payments

Annual dues checkout

Member lookup, registration and annual dues checkout.

Release
Existing
Current evidence
Dues route and checkout API are present.
Regression gate
Existing-member, new-member and cancelled-payment tests.
SurgicalLow-Regression
SEC-01P0Implemented
Security

Access-control matrix

Define public, member, officer, admin and trusted-server permissions for every resource.

Release
R1 Security foundation
Current evidence
The approved matrix and compatibility blockers are documented in docs/SECURITY_ACCESS_CONTROL_MATRIX.md.
Regression gate
Every collection, Storage path and API route has an explicit target permission and compatibility note.
SurgicalArchitecture-AlignedLow-RegressionStepwise/Systematic
SEC-02P0Implemented
Security

Role-enforced Firestore rules

Replace broad authenticated writes with explicit, non-self-assignable roles.

Release
R1 Security foundation
Current evidence
All 9 Firestore emulator tests pass; production Admin create, public read, Admin update and Admin delete succeeded for an exact temporary Resource Link, while an anonymous production write returned HTTP 403 and created no record.
Regression gate
Emulator allow/deny suite plus controlled production CRUD and anonymous-denial verification.
SurgicalArchitecture-AlignedLow-Regression
SEC-03P0Planned
Security

Private user and participation data

Prevent public enumeration of users, volunteers, dues and personal information.

Release
R1 Security foundation
Current evidence
Current rules allow broader reads than least privilege requires.
Regression gate
Anonymous and cross-account access tests.
SurgicalLow-Regression
SEC-04P0Implemented
Security

Storage upload rules

Enforce role, path, MIME type and file-size restrictions.

Release
R1 Security foundation
Current evidence
All 5 Storage emulator tests pass; production rules are deployed with the required Firestore cross-service IAM role, and a controlled Admin gallery upload succeeded before its exact test object was deleted and verified absent.
Regression gate
Allowed and rejected upload emulator tests plus controlled production upload and cleanup.
SurgicalArchitecture-AlignedLow-Regression
SEC-05P0Implemented
Security

Verified server authorization

Validate Firebase ID tokens and roles on privileged API routes.

Release
R1 Security foundation
Current evidence
Invite, resend-invite, and volunteer-reminder operations use verified, non-revoked ID tokens and UID-keyed roles. Nine non-mutating API smoke checks prove missing-token denial, Admin-token acceptance, and continued public-route reachability.
Regression gate
Repeatable anonymous/public/Admin API authorization smoke suite.
CleanArchitecture-AlignedLow-Regression
SEC-06P0In progress
Security

Input validation and abuse controls

Shared schemas, sanitization, rate limits and spam protection for public inputs.

Release
R1 Security foundation
Current evidence
Validation, escaping, bounded payloads, redirect-origin protection, and per-client throttling cover notification, recovery, donation, and dues routes. App Check is registered, all 15 local checks pass, and Vercel production custom-API enforcement is active: tokenless requests return 401 while a real browser token reaches 400 input validation. Direct client Firebase calls now share an early browser App Check bootstrap before auth, Firestore, and Storage services are exported. Guided browser smoke verified public events, exact RSVP/Contact/Join create-and-cleanup, Admin dashboard reads, Tracker visibility, and an authorized gallery Storage upload with exact cleanup. A seven-day production baseline found Authentication 19/19 verified, Storage 12/13 verified, but Firestore only 1,859/3,080 verified with 864 outdated-client and 357 invalid-token requests. The bootstrap has since been deployed to production (merged to master) and a fresh baseline, pulled live via the new scripts/check-appcheck-status.mjs (npm run security:appcheck:status), showed Storage 100% valid (7/7) and Auth 96.1% valid (73/76) with only trivial MISSING volume, while Firestore's 5,149 INVALID verifications over 7 days all carried app_id=UNKNOWN (bot/scanner traffic, not real users). Storage and Auth were switched to ENFORCED; a live anonymous fetch confirmed public Storage download-URL reads (which bypass App Check by design) remain unaffected. Firestore stays UNENFORCED pending a longer watch period, since it carries the site's donation/RSVP/contact traffic and was the collection involved in the prior enforcement incident.
Regression gate
Malformed, oversized, unsafe, repeated, and valid-input tests plus missing, invalid, debug, production App Check token, direct Firestore, and Storage smoke tests.
CleanLow-RegressionExpandable
PAY-03P0Planned
Payments

Authoritative Stripe webhooks

Record payment outcomes only from verified, idempotent Stripe events.

Release
R2 Financial integrity
Current evidence
Current redirect success and placeholder fallback are not authoritative.
Regression gate
Signature, replay, retry, failed and successful payment tests.
SurgicalArchitecture-AlignedLow-Regression
PAY-04P0Planned
Payments

Payment lifecycle and reconciliation

Track pending, paid, failed and refunded states with Stripe identifiers.

Release
R2 Financial integrity
Current evidence
Needed for auditable donations and dues.
Regression gate
Stripe-to-Firestore reconciliation report.
CleanArchitecture-AlignedExpandable
PAY-05P0Planned
Payments

Server-owned prices and production mode

Validate amounts server-side and remove implicit production simulation.

Release
R2 Financial integrity
Current evidence
Checkout routes currently support placeholder behavior.
Regression gate
Tampered-amount and missing-key tests.
SurgicalLow-Regression
PLAT-01P1Planned
Platform

Portal modularization

Split the large dashboard into feature modules without changing behavior.

Release
R3 Maintainability
Current evidence
The dashboard concentrates many domains in one client component.
Regression gate
Module-by-module parity checklist and end-to-end tests.
SurgicalCleanArchitecture-AlignedLow-RegressionExpandableStepwise/Systematic
PLAT-02P1Planned
Platform

Shared domain services and validation

Centralize types, schemas and data operations by domain.

Release
R3 Maintainability
Current evidence
CRUD and form behavior are currently repeated across the portal. Owner explicitly requested (2026-09-08) that every content module (Program, News, Photos, Events, Members, Officers, etc.) share the same robust, reliable, scalable, maintainable CRUD/Firestore/Storage pattern — this is exactly what PLAT-01/PLAT-02 already scope; the image-lifecycle piece of that consistency is already delivered per-type under FCR-02/FCR-04/PORT-04, and a true shared implementation (one generic CRUD/upload hook reused by every module) remains the PLAT-01/PLAT-02 target.
Regression gate
Typed build plus CRUD contract tests.
CleanArchitecture-AlignedExpandable
PORT-05P2Implemented
Officer portal

On-the-fly category creation in content forms

Let officers add a new category/placement directly from the News, Event, and Photo admin forms instead of being limited to a fixed dropdown list.

Release
R4 Product quality
Current evidence
Added an "+ Add New Category..." option to the News, Event, and Gallery (Site Photo) category/placement selects; choosing it swaps to a text input with a toggle back to dropdown mode. Category option lists are computed as the fixed defaults merged with the distinct category values already present in each module's live Firestore data, so a newly typed category persists as selectable for future items with no new collection or schema change. Program's "Faith in Action Pillar" field was intentionally excluded — it is fixed structural taxonomy tied to the public /programs page's four pillar sections, not a free-form category (Program's "tag" field was already free text). Live-verified in browser: created and cleaned up a real News article with a custom category, confirmed it then appeared as a selectable option; confirmed the same select-to-input swap works for Event and Gallery with no console errors; confirmed pre-existing custom categories ("Officer Meeting", "Charity") already surface via the live-data merge.
Regression gate
Existing categories remain selectable and unaffected; a newly created category persists, is selectable afterward, and appears correctly on public pages that group/filter by category.
SurgicalCleanArchitecture-AlignedLow-RegressionExpandable
PORT-06P2Planned
Officer portal

Advanced rich content editor

Upgrade the shared RichTextEditor (used by News, Programs, and Knight of the Month) to support inserting images, video embeds, layout block elements (e.g. a div/section), and inline elements (e.g. a styled button/link).

Release
R4 Product quality
Current evidence
Owner requested (2026-09-08) a more advanced WYSIWYG for news/article content.
Regression gate
Existing plain-text and basic-formatting content already saved continues to render unchanged; new block/inline elements render correctly and safely (sanitized) on every public page that renders this field via dangerouslySetInnerHTML.
SurgicalCleanArchitecture-AlignedLow-RegressionExpandable
PUB-05P2Planned
Public experience

Responsive news article modal

Enlarge the public news article modal (NewsModal) so longer articles are comfortably readable, while remaining responsive on mobile.

Release
R4 Product quality
Current evidence
Owner requested (2026-09-08) a bigger, responsive news popup so article content displays properly and stays readable.
Regression gate
Modal remains fully usable and non-clipped from mobile through desktop widths; opening/closing behavior unchanged.
SurgicalCleanLow-Regression
QUAL-01P1Planned
Quality

Automated test foundation

Add unit, integration, security-rule and critical end-to-end coverage.

Release
R3 Maintainability
Current evidence
No automated test commands are currently declared.
Regression gate
CI blocks merging on failed critical tests.
Low-RegressionStepwise/Systematic
QUAL-02P1Planned
Quality

Continuous integration quality gates

Run typecheck, lint, build, tests and dependency checks on every change.

Release
R3 Maintainability
Current evidence
Package scripts currently provide build and legacy lint commands only.
Regression gate
Required green checks for pull requests.
CleanLow-RegressionStepwise/Systematic
QUAL-03P2Planned
Quality

Design-system consolidation

Unify tokens and shared UI states while preserving the established brand.

Release
R4 Product quality
Current evidence
CSS variables coexist with page CSS and extensive inline styles.
Regression gate
Visual comparison at mobile, tablet and desktop sizes.
SurgicalCleanExpandable
QUAL-04P2Planned
Quality

Accessibility verification

Verify keyboard operation, focus, semantics, contrast and reduced motion.

Release
R4 Product quality
Current evidence
Accessibility is a documented goal but lacks a repeatable gate.
Regression gate
Keyboard walkthrough and automated accessibility scan.
Low-RegressionStepwise/Systematic
QUAL-05P2Planned
Quality

Performance and Firestore efficiency

Optimize images, client bundles, listeners and database reads.

Release
R4 Product quality
Current evidence
The application uses large imagery and many real-time subscriptions.
Regression gate
Bundle, Lighthouse and Firestore-read baseline comparison.
Architecture-AlignedExpandableStepwise/Systematic
QUAL-06P2Planned
Quality

Current-state documentation

Align setup, architecture, deployment and operations docs with the active application.

Release
R4 Product quality
Current evidence
README and master guide mix legacy, target and implemented states.
Regression gate
Fresh-environment setup walkthrough.
CleanStepwise/Systematic
QUAL-07P2Planned
Quality

Monitoring, audit and recovery

Add structured errors, admin audit records, uptime checks and backup procedures.

Release
R4 Product quality
Current evidence
Operational controls are not represented in the current repository.
Regression gate
Incident drill covering alert, audit and restore.
Architecture-AlignedLow-RegressionExpandable