Files
usher-manage-stack/.planning/PROJECT.md
2026-02-13 10:53:03 +08:00

3.4 KiB

Member Notes System (會員備註系統)

What This Is

An enhancement to the existing admin member list that adds per-member note-taking capability. Any admin user can quickly add timestamped text notes to any member, and see a note count badge on the member list. Designed primarily for the chairman (理事長) to track observations and follow-ups, but shared across all admin roles.

Core Value

The chairman can annotate any member with timestamped notes directly from the member list, without navigating away from the page.

Requirements

Validated

  • ✓ Member lifecycle management (pending → active → expired/suspended) — existing
  • ✓ Admin member list with search, filter, CRUD — existing
  • ✓ Role-based access control via Spatie permissions — existing
  • ✓ Multi-tier financial approval workflows — existing
  • ✓ CMS (articles, pages, documents) with headless API — existing
  • ✓ Issue tracking system — existing
  • ✓ Audit logging on business-critical actions — existing
  • ✓ Member profile with LINE ID — existing

Active

  • Per-member notes with text + timestamp, stored in DB
  • Inline quick-add note UI on the admin member list (no page navigation)
  • Note count badge displayed on each member row in the list
  • Click badge to expand/view full note history for that member
  • All admin roles can view and write notes (shared visibility)
  • Notes display author name and creation datetime
  • Notes management (view history, chronological order)

Out of Scope

  • Private/role-scoped notes — all notes are shared across admin roles
  • Note categories or tags — keep it simple, just text + time
  • Reminders or scheduled follow-ups — not needed for v1
  • Note editing or deletion — append-only for audit integrity
  • Dashboard/summary statistics — just the annotated member list
  • API endpoint for notes — admin-only, no public/headless API needed

Context

  • The existing admin member list is at /admin/members with full CRUD, search, and filtering
  • The chairman (理事長) role maps to finance_chair in the RBAC system
  • The admin middleware allows access to anyone with the admin role or any permissions
  • UI is Blade + Tailwind CSS + Alpine.js — inline interactions fit naturally with Alpine.js
  • All UI text is hardcoded Traditional Chinese
  • The member list uses standard Laravel pagination

Constraints

  • Tech stack: Must use existing Laravel 10 + Blade + Tailwind + Alpine.js stack
  • Database: SQLite (dev) / MySQL (prod) — standard Laravel migration
  • Access control: Reuse existing admin middleware — no new permission needed
  • UI pattern: Inline interaction via Alpine.js — no full-page reloads for note operations
  • Audit: Notes are append-only; use AuditLogger for tracking note creation

Key Decisions

Decision Rationale Outcome
Enhance existing member list vs new page User wants notes integrated into existing workflow, not a separate tool — Pending
Shared notes (all admin roles) Chairman wants transparency; secretary and others should see same notes — Pending
Append-only notes (no edit/delete) Maintains audit integrity for member observations — Pending
Alpine.js inline UI Matches existing stack; avoids full page reloads for quick note-taking — Pending

Last updated: 2026-02-13 after initialization