open critical items
Project improvement tracker
One view of shipped capabilities, planned safeguards, release gates and the SCALES controls that protect the application from regressions and reversions.
open high-priority items
open planned quality items
open future items
Controlled delivery sequence
Security and financial correctness precede structural and visual refinement.
Existing
9 tracked outcomes
9/9 implementedR4 Product quality
10 tracked outcomes
2/10 implementedClient requests
7 tracked outcomes
4/7 implementedR1 Security foundation
6 tracked outcomes
4/6 implementedR2 Financial integrity
3 tracked outcomes
0/3 implementedR3 Maintainability
4 tracked outcomes
0/4 implementedRegression prevention framework
Every item carries applicable controls and a mandatory regression gate.
Surgical
Make precise changes with explicit scope and rollback boundaries.
Clean
Keep code, ownership, naming and documentation maintainable.
Architecture-Aligned
Follow the application’s established platform and domain boundaries.
Low-Regression
Protect active UI, APIs, data, authentication and payment flows.
Expandable
Favor decoupled foundations that support future additions.
Stepwise/Systematic
Baseline, implement, verify and document one controlled increment at a time.
Features and improvements
39 items shown
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.