Skip to content

feat: Tier 0 Slack-parity features#4

Merged
factory-sam merged 9 commits into
mainfrom
feat/tier0-slack-parity
Jun 15, 2026
Merged

feat: Tier 0 Slack-parity features#4
factory-sam merged 9 commits into
mainfrom
feat/tier0-slack-parity

Conversation

@factory-sam

Copy link
Copy Markdown
Owner

Summary

Implements all six Tier 0 Slack-parity features (backend + frontend), shipped in 8 phased commits plus docs.

Features

  1. Message edit + delete - inline edit (Esc / Cmd+Enter), soft-delete with realtime reconciliation, (edited) indicator.
  2. Full emoji reactions - frimousse picker, unicode storage, localStorage recents, unicode quick reactions.
  3. Rich text rendering - sanitized GitHub-flavored markdown (react-markdown + remark-gfm + rehype-sanitize).
  4. Unread experience - sidebar badges (channel_unread_counts RPC), new-messages divider, mark-on-read + focus refresh.
  5. Notification center - header bell over the user:<id> private realtime topic, mark-all-read, click-through.
  6. Custom status + presence - active/away/dnd, status emoji/text/expiry, presence dots, activity toast suppressed in do-not-disturb.
  7. Link unfurling - SSRF-safe /api/unfurl (protocol + private-host + DNS + redirect re-validation), link_previews cache, preview cards.

Backend

  • supabase/migrations/003_tier0_parity.sql: presence/status columns, channel_unread_counts() RPC, mention/thread/dm/reaction notification triggers, broadcast to user:<id> topic with RLS gating, link_previews table.
  • Types updated in src/types/database.ts and src/types/chat.ts.

Architecture

The chat orchestrator was decomposed to stay under max-lines: WorkspaceSidebar, the useChannelRealtime / useUnread / useNotifications hooks, and pure helpers (unread.ts, notifications.ts, status.ts, emoji-recents.ts, unfurl.ts) - all unit-tested at 100% coverage.

Verification

  • typecheck, lint (incl. complexity/max-lines), knip, jscpd: clean
  • unit tests: 100% statements/branches/functions/lines on the pure logic layer
  • production build: pass
  • Playwright e2e: 7/7

Note: the migration was reviewed by hand because the Supabase CLI is not available in this environment; run supabase db reset locally to apply migration 003.

factory-sam and others added 9 commits June 14, 2026 21:53
…on triggers, link previews

Phase 1 of Tier 0 Slack parity: backend schema + types.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
…ase 2)

Inline edit (Esc/Cmd+Enter), soft-delete, (edited) indicator.
Extract realtime subscription into useChannelRealtime; split MessageRow
into MessageActions/MessageEditor to satisfy lint limits.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Add frimousse emoji picker (ReactionPicker) with localStorage recents,
unicode emoji storage, and unicode quick reactions. Covered by unit tests.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Render message bodies as sanitized GitHub-flavored markdown via
react-markdown + remark-gfm + rehype-sanitize (MessageBody).

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Sidebar unread badges via channel_unread_counts RPC, new-messages
divider, mark-read on open + focus refresh. Extract WorkspaceSidebar +
useUnread; pure unread helpers with full test coverage.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Header bell panel listing thread/dm/reaction/mention notifications, live
updates via the user:<uid> private realtime topic, mark-all-read, and
click-through to channel. Pure notification helpers fully tested.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
…ase 7)

Presence (active/away/dnd) + custom status (emoji/text/expiry) editor in
sidebar, presence dots and status emoji on members, transient activity
toast suppressed in do-not-disturb. Pure status helpers fully tested.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
POST /api/unfurl validates URLs (protocol + private-host + DNS resolution
+ redirect re-validation), parses OpenGraph, and caches in link_previews.
LinkPreviewCard renders the first link's preview. Pure helpers fully tested.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
…hase 9)

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
@factory-sam factory-sam merged commit 8b76bee into main Jun 15, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant