From 7587908ac772effc91b0d84bbe85495839649e5e Mon Sep 17 00:00:00 2001 From: Brian O'Kelley Date: Tue, 6 Jan 2026 19:05:10 -0800 Subject: [PATCH] feat: improve accounts dashboard with activity feed and bug fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add new Activity tab showing unified activity stream (Slack, emails, events, payments, working groups) - Fix "Needs Attention" to exclude paying members in good standing - Fix fire emoji display by removing letter-spacing that broke rendering - Loosen "Hot Prospects" criteria (engagement >= 50 OR high interest) - Extend "New Insights" from 7 days to 30 days - Add source filter validation for security - Improve escapeHtml to handle quotes - Add expiring_soon attention badge styling 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .changeset/accounts-dashboard-improvements.md | 11 + server/public/admin-account-detail.html | 1 - server/public/admin-accounts.html | 315 +++++++++++++++++- server/src/routes/admin/accounts.ts | 236 +++++++++++-- 4 files changed, 532 insertions(+), 31 deletions(-) create mode 100644 .changeset/accounts-dashboard-improvements.md diff --git a/.changeset/accounts-dashboard-improvements.md b/.changeset/accounts-dashboard-improvements.md new file mode 100644 index 0000000000..0c1b148125 --- /dev/null +++ b/.changeset/accounts-dashboard-improvements.md @@ -0,0 +1,11 @@ +--- +"adcontextprotocol": minor +--- + +Improve accounts dashboard with activity feed and bug fixes + +- Add new Activity tab showing unified activity stream (Slack, emails, events, payments, working groups) +- Fix "Needs Attention" to exclude paying members in good standing (only show prospects with action items or members with expiring subscriptions) +- Fix fire emoji display in account detail page +- Loosen "Hot Prospects" criteria (engagement >= 50 OR high interest, not AND) +- Extend "New Insights" from 7 days to 30 days of Slack activity diff --git a/server/public/admin-account-detail.html b/server/public/admin-account-detail.html index ecb7b10138..ff3428641b 100644 --- a/server/public/admin-account-detail.html +++ b/server/public/admin-account-detail.html @@ -90,7 +90,6 @@ /* Engagement fires */ .engagement-fires { font-size: var(--text-xl); - letter-spacing: 2px; } /* Member status badges */ diff --git a/server/public/admin-accounts.html b/server/public/admin-accounts.html index d591b15297..d004e1064c 100644 --- a/server/public/admin-accounts.html +++ b/server/public/admin-accounts.html @@ -170,7 +170,7 @@ /* Engagement fires */ .engagement-fires { - letter-spacing: 1px; + /* No letter-spacing - breaks emoji rendering */ } /* Owner */ @@ -193,6 +193,7 @@ .attention-recent_activity { background: var(--color-success-100); color: var(--color-success-700); } .attention-high_engagement_unowned { background: var(--color-warning-100); color: var(--color-warning-700); } .attention-needs_review { background: var(--color-gray-200); color: var(--color-text-secondary); } + .attention-expiring_soon { background: var(--color-warning-100); color: var(--color-warning-700); } /* Activity date coloring */ .activity-recent { color: var(--color-success-600); } @@ -302,6 +303,122 @@ .btn-secondary:hover { background: var(--color-gray-200); } + + /* Activity Feed */ + .activity-feed { + background: var(--color-bg-card); + border-radius: var(--radius-md); + box-shadow: var(--shadow-xs); + overflow: hidden; + } + .activity-item { + display: flex; + align-items: flex-start; + gap: var(--space-3); + padding: var(--space-4); + border-bottom: var(--border-1) solid var(--color-gray-100); + transition: var(--transition-all); + } + .activity-item:last-child { + border-bottom: none; + } + .activity-item:hover { + background: var(--color-gray-50); + } + .activity-icon { + width: 36px; + height: 36px; + border-radius: var(--radius-full); + display: flex; + align-items: center; + justify-content: center; + font-size: var(--text-lg); + flex-shrink: 0; + } + .activity-icon.slack { background: var(--color-primary-100); } + .activity-icon.email { background: var(--color-info-100); } + .activity-icon.event { background: var(--color-warning-100); } + .activity-icon.payment { background: var(--color-success-100); } + .activity-icon.working_group { background: var(--color-primary-100); } + .activity-content { + flex: 1; + min-width: 0; + } + .activity-header { + display: flex; + align-items: center; + gap: var(--space-2); + margin-bottom: var(--space-1); + } + .activity-actor { + font-weight: var(--font-semibold); + color: var(--color-text-heading); + } + .activity-action { + color: var(--color-text-secondary); + font-size: var(--text-sm); + } + .activity-org { + color: var(--color-brand); + text-decoration: none; + font-size: var(--text-sm); + } + .activity-org:hover { + text-decoration: underline; + } + .activity-description { + font-size: var(--text-sm); + color: var(--color-text-secondary); + margin-top: var(--space-1); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + .activity-time { + font-size: var(--text-xs); + color: var(--color-text-muted); + flex-shrink: 0; + } + .activity-filters { + display: flex; + gap: var(--space-2); + margin-bottom: var(--space-4); + flex-wrap: wrap; + } + .activity-filter { + padding: var(--space-1) var(--space-3); + border-radius: var(--radius-full); + font-size: var(--text-xs); + cursor: pointer; + background: var(--color-gray-100); + border: none; + color: var(--color-text-secondary); + transition: var(--transition-all); + } + .activity-filter:hover { + background: var(--color-gray-200); + } + .activity-filter.active { + background: var(--color-brand); + color: white; + } + .load-more { + text-align: center; + padding: var(--space-4); + } + .load-more-btn { + padding: var(--space-2) var(--space-4); + border: var(--border-1) solid var(--color-border); + border-radius: var(--radius-md); + background: white; + color: var(--color-text-secondary); + cursor: pointer; + font-size: var(--text-sm); + } + .load-more-btn:hover { + background: var(--color-gray-50); + border-color: var(--color-gray-300); + } @@ -321,6 +438,9 @@

Accounts

+ @@ -360,8 +480,8 @@

Accounts

- -
+ +
@@ -379,6 +499,24 @@

Accounts

+ + +