Grief to Action (G2A) combines a data annotation interface with a lightweight conversational agent to accelerate community legal response efforts.
Problem Space
Volunteers needed to triage and label incoming case records quickly, then query them conversationally. Existing tools were either too heavy or not secure enough.
High-Level Architecture
- Frontend: Minimal SPA for auth, queue navigation, and labeling UX.
- API Layer: REST endpoints mediating annotation CRUD + search.
- Chat Agent: Intent classification + templated retrieval over labeled records.
- Storage: Relational (PL/SQL routines) + object store for attachments.
- Auth: Token-based, short TTL, refresh endpoint; role claims (annotator, reviewer).
Annotation Flow
- Fetch next record (server assigns to avoid collisions)
- Annotator applies label set
- Optimistic UI update; background write with retry
- Reviewer queue fed by status changes
Conversational Layer
- Domain intents kept narrow (lookup, count, recent changes)
- Fallback to keyword guided form when confidence low
- Caching normalized question → response pairs to speed repeats
Performance & Reliability
- Batched writes to reduce round trips
- Advisory locking pattern to prevent double assignment
- CloudWatch metrics: queue depth, avg annotation latency
Security Considerations
- All PII fields encrypted at rest
- Strict CORS allowlist; no wildcard origins
- Minimum viable audit log (who changed what, when)
Lessons Learned
- Define label taxonomy early; mid-project changes cascade painfully.
- Conversation UX must degrade gracefully—confidence gating matters.
- Small, frequent deploys surface integration issues sooner.
Future Improvements
- Add active learning loop to suggest labels
- Rich diff review mode for complex edits
This platform balanced speed and correctness, giving volunteers a focused tool that respected data sensitivity.