Files
usher-manage-stack/.planning/research/FEATURES.md

233 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Feature Landscape
**Domain:** CRM/Admin Member Note Systems
**Researched:** 2026-02-13
**Confidence:** MEDIUM
## Table Stakes
Features users expect. Missing = product feels incomplete.
| Feature | Why Expected | Complexity | Notes |
|---------|--------------|------------|-------|
| Create note inline | Standard in admin interfaces; users expect quick annotation without navigation | Low | Alpine.js inline form on member list row |
| View note count | Badge indicators are universal pattern for "items present" | Low | Badge on member row, clickable to expand |
| Display author + timestamp | Audit integrity; users need "who wrote this when" | Low | Laravel auth()->user() + created_at |
| Chronological ordering | Notes are temporal; most recent first/last is expected | Low | ORDER BY created_at DESC in query |
| Expandable note history | Accordion/expansion is standard UX for "show more" | Low | Alpine.js x-show toggle, accordion pattern |
| Search/filter by content | Modern CRMs make notes searchable; users expect to find past comments | Medium | Full-text search on notes.content field |
| Empty state messaging | When no notes exist, users need clear "no notes yet" indicator | Low | Conditional display in Blade template |
| Responsive display | Admin interfaces must work on tablets; notes should be readable on smaller screens | Low | Tailwind responsive classes |
## Differentiators
Features that set product apart. Not expected, but valued.
| Feature | Value Proposition | Complexity | Notes |
|---------|-------------------|------------|-------|
| Note export (member-specific) | Chairman can generate member note history PDF for meetings or handoffs | Medium | barryvdh/laravel-dompdf already in stack |
| Batch note visibility filter | Show only members with notes vs. all members for focused review | Low | Query scope: whereHas('notes') |
| Recent notes dashboard widget | Surface latest N notes across all members for quick admin overview | Medium | Dashboard addition with notes query |
| Note length indicator | Visual cue for long vs short notes (e.g., truncated preview with "read more") | Low | CSS + Alpine.js for text truncation |
| Keyboard shortcuts | Power users expect quick access (e.g., 'N' to add note on focused row) | Medium | Alpine.js keyboard listener, accessibility consideration |
| Note context linking | Link note to specific member action (payment, status change, etc.) for context | High | Polymorphic relationship, context metadata |
## Anti-Features
Features to explicitly NOT build.
| Anti-Feature | Why Avoid | What to Do Instead |
|--------------|-----------|-------------------|
| Note editing/deletion | Destroys audit trail; creates compliance risk (append-only is healthcare/NPO standard) | Addendum pattern: add new note clarifying/correcting previous note |
| Private/role-scoped notes | Chairman explicitly wants transparency; adds complexity with minimal value | All admin roles share notes; document in UI that notes are shared |
| Rich text editor (WYSIWYG) | Overkill for simple observations; formatting rarely needed; security risk (XSS) | Plain text with auto-linking for URLs |
| Note categories/tags | Premature optimization; no user request; adds cognitive overhead | If categorization needed later, add via simple text conventions (e.g., "[follow-up]") |
| Note attachments/files | Scope creep; files belong in member documents, not quick notes | Link to existing document library in note text if needed |
| Scheduled reminders/tasks | Transforms simple note system into task manager; different domain | Keep notes as observations only; use separate task system if needed |
| Real-time collaboration | Single chairman use case; no concurrent editing needed; adds WebSocket complexity | Standard AJAX; page refresh shows new notes from other admins |
| Note templates | No evidence of repeated note patterns; premature optimization | Copy-paste from previous notes if patterns emerge |
| Soft delete for notes | Violates append-only principle; creates "hidden but recoverable" ambiguity | Hard constraint: no delete operation at all |
## Feature Dependencies
```
Display note count badge
└──requires──> Create note (must have notes to count)
Expandable note history
└──requires──> Display note count badge (badge is the expand trigger)
└──requires──> Display author + timestamp (what to show when expanded)
Search/filter by content
└──requires──> Create note (must have notes to search)
Note export (member-specific)
└──requires──> View note history (export queries same data)
Batch note visibility filter
└──requires──> Display note count badge (filters on notes existence)
Recent notes dashboard widget
└──requires──> Display author + timestamp (widget shows who/when)
Note context linking
└──enhances──> Display author + timestamp (adds "why" context to "who/when")
```
### Dependency Notes
- **Display note count badge requires Create note:** Badge shows count; zero notes = no badge or "0" badge (design choice)
- **Expandable note history requires Display note count badge:** Badge is the UI affordance for expansion (click to show)
- **Search/filter by content enhances Create note:** Makes note system scalable beyond 10-20 notes per member
- **Note context linking enhances everything:** If added, transforms simple notes into action-linked annotations (v2+ feature)
## MVP Recommendation
### Launch With (v1)
Minimum viable product — what's needed to validate the concept.
- [x] Create note inline — Core value: quick annotation on member list
- [x] Display note count badge — Table stakes: visual indicator of notes present
- [x] Expandable note history — Table stakes: view past notes without navigation
- [x] Display author + timestamp — Table stakes: audit integrity
- [x] Chronological ordering — Table stakes: temporal display
- [x] Empty state messaging — Table stakes: UX clarity when no notes
**Rationale:** These 6 features deliver the core value ("annotate members inline") with minimal complexity. All are Low complexity and align with user's stated need.
### Add After Validation (v1.x)
Features to add once core is working and chairman confirms value.
- [ ] Search/filter by content — Add when: chairman has >50 total notes across members and reports difficulty finding specific comments
- [ ] Batch note visibility filter — Add when: chairman wants to review "all members I've annotated" without scrolling
- [ ] Note length indicator — Add when: notes consistently exceed 200 characters and full display clutters UI
**Trigger for adding:** User feedback after 2-4 weeks of usage, or when specific pain point emerges.
### Future Consideration (v2+)
Features to defer until product-market fit is established.
- [ ] Note export (member-specific) — Defer: no stated need for printed reports in initial request
- [ ] Recent notes dashboard widget — Defer: chairman uses member list as entry point, not dashboard
- [ ] Keyboard shortcuts — Defer: no power-user workflow identified yet
- [ ] Note context linking — Defer: major complexity; evaluate after understanding note content patterns
**Why defer:** Not requested, not table stakes, and complexity doesn't justify speculative value.
## Feature Prioritization Matrix
| Feature | User Value | Implementation Cost | Priority |
|---------|------------|---------------------|----------|
| Create note inline | HIGH | LOW | P1 |
| Display note count badge | HIGH | LOW | P1 |
| Expandable note history | HIGH | LOW | P1 |
| Display author + timestamp | HIGH | LOW | P1 |
| Chronological ordering | HIGH | LOW | P1 |
| Empty state messaging | MEDIUM | LOW | P1 |
| Search/filter by content | MEDIUM | MEDIUM | P2 |
| Batch note visibility filter | MEDIUM | LOW | P2 |
| Note length indicator | LOW | LOW | P2 |
| Note export (member-specific) | MEDIUM | MEDIUM | P3 |
| Recent notes dashboard widget | LOW | MEDIUM | P3 |
| Keyboard shortcuts | LOW | MEDIUM | P3 |
| Note context linking | LOW | HIGH | P3 |
**Priority key:**
- P1: Must have for launch (table stakes + core value)
- P2: Should have, add when specific need emerges
- P3: Nice to have, future consideration after validation
## Competitor Feature Analysis
Based on research of CRM and member management systems in 2026:
| Feature | SugarCRM/Salesforce | Sumac (Nonprofit) | Our Approach |
|---------|---------------------|-------------------|--------------|
| Note creation | Separate "Notes" tab, requires navigation | Case notes within case management module | Inline on member list (no navigation) |
| Note visibility | Role-based permissions available | Shared across caseworkers | Shared across all admin roles |
| Edit/Delete | Editable with audit log | Append-only with addendum pattern | Append-only (no edit/delete) |
| Rich formatting | WYSIWYG editor | Plain text with attachments | Plain text only |
| Search notes | Full-text search with filters | Search across cases and notes | Full-text search (v1.x) |
| Note categories | Tags and custom fields | Service plan categories | None (anti-feature) |
| Timestamps | Absolute + relative display | Absolute timestamps | Absolute + relative (tooltip) |
| Count indicator | Badge on related list tab | Note count in case summary | Badge on member row |
| Export | Include in reports/exports | PDF export per case | PDF export (v2+) |
**Our competitive position:**
- **Simpler:** No categories, tags, or rich formatting (reduces cognitive overhead)
- **Faster:** Inline creation vs. tab navigation (optimized for quick annotation)
- **More transparent:** Forced shared visibility (aligns with NPO culture)
- **More auditable:** Strictly append-only (exceeds healthcare standards)
## Implementation Pattern Reference
Based on research findings, recommended UX patterns:
**Badge UI (Material Design 3, PatternFly):**
- Pill shape, positioned at right edge of member row
- Count display: "3" for small counts, "99+" for >99 notes
- Color: Blue/info semantic (not red/error unless tied to action required)
- Clickable affordance: Cursor pointer + hover state
**Accordion/Expansion (Smashing Magazine, Accessible Accordion):**
- Caret icon: Downward when collapsed, upward when expanded
- Entire badge area clickable (not just icon)
- Icon position stays constant (no layout shift on toggle)
- Smooth transition (Alpine.js x-transition)
- ARIA: aria-expanded attribute for screen readers
**Timestamp Display (PatternFly, Cloudscape):**
- Recent (<24h): "2小時前" (relative)
- Older: "2026-02-11 14:30" (absolute)
- Tooltip on hover: Full ISO 8601 timestamp
- Format: Taiwan locale (zh-TW), 24-hour time
**Inline Form (Eleken List UI, Data Table UX):**
- Textarea (not single-line input) for multi-line notes
- 3 rows visible, auto-expand on focus
- Submit on Ctrl+Enter (keyboard UX)
- Cancel button to close without saving
- Loading state during AJAX submit
## Research Confidence
**HIGH confidence (Context7/Official docs):**
- None (no Context7 libraries for this domain-specific question)
**MEDIUM confidence (Multiple credible sources agree):**
- Table stakes features: Based on CRM industry standards from Salesforce/Sugar docs, Material Design, PatternFly component libraries
- Append-only best practice: Healthcare compliance docs (Healthie, Sessions Health), audit trail standards
- UI patterns: Design system documentation (Material Design 3, PatternFly, Smashing Magazine)
- NPO CRM landscape: Multiple 2026 nonprofit CRM reviews (Neon One, Bloomerang, Case Management Hub)
**LOW confidence (WebSearch only, needs validation):**
- Specific NPO note-taking workflows beyond Sumac case management
- Exact usage frequency of note export features (no user research data available)
## Sources
- [Best Practices for Taking Notes in CRM: A Complete Guide](https://www.sybill.ai/blogs/best-way-to-take-notes-in-crm)
- [CRM Notes - Optimize CRM Notes: Key Features and Benefits | Pipedrive](https://www.pipedrive.com/en/blog/crm-notes)
- [Historical Summary vs. Activity Stream vs. Audit Log - SugarCRM](https://support.sugarcrm.com/knowledge_base/user_interface/historical_summary_vs._activity_stream_vs._change_log/)
- [10 Essential Audit Trail Best Practices for 2026 OpsHub Signal](https://signal.opshub.me/audit-trail-best-practices/)
- [Addendums to Progress Notes - Healthcare Best Practice](https://support.sessionshealth.com/article/393-addendum)
- [Best Nonprofit CRM for Managing Donors, Clients & Operations Case Management Hub](https://casemanagementhub.org/nonprofit-crm/)
- [Sumac | #1 Nonprofit Case Management Software](https://www.societ.com/solutions/case-management/sumac/)
- [PatternFly • Notification badge](https://www.patternfly.org/components/notification-badge/design-guidelines/)
- [Badge Material Design 3](https://m3.material.io/components/badges/guidelines)
- [Designing The Perfect Accordion — Smashing Magazine](https://www.smashingmagazine.com/2017/06/designing-perfect-accordion-checklist/)
- [Accordion UI Examples: Best Practices & Real-World Designs](https://www.eleken.co/blog-posts/accordion-ui)
- [UI Date Stamp Best Practices | Medium](https://medium.com/user-experince/ui-date-stamp-best-practices-85ae2c5ad9eb)
- [PatternFly • Timestamp](https://www.patternfly.org/components/timestamp/design-guidelines/)
- [30+ List UI Design Examples with Tips and Insights](https://www.eleken.co/blog-posts/list-ui-design)
- [Data Table Design UX Patterns & Best Practices - Pencil & Paper](https://www.pencilandpaper.io/articles/ux-pattern-analysis-enterprise-data-tables)
- [Filtering Contacts and Companies | Agile CRM](https://www.agilecrm.com/sales-enablement/filtering-contacts-and-companies)
- [33 CRM Features Your Small Business Needs in 2026](https://www.onepagecrm.com/blog/crm-features/)
---
*Feature research for: Member Notes System (會員備註系統)*
*Researched: 2026-02-13*