Lor delete pass#53
Conversation
Remove allies, blocks, and privacy-settings surfaces — Discord-style
community features that don't apply to Lor's B2B model where workspace
membership IS the relationship.
DB: deleted ally-requests + user-privacy-settings schemas. user-blocks
table kept for now (UI/enforcement gone).
API: deleted /v1/{allies,blocks,privacy-settings}. DM creation no longer
gates on ally/block/privacy. User profile no longer returns
ally/block status fields.
Realtime: removed presence privacy filtering and DM block enforcement
from message:send and typing:start.
Web: deleted allies page + privacy-safety settings UI. Stripped
ally/block actions from profile card. new-dm-dialog and dms/index
reduced to placeholders pending sidebar IA rebuild.
|
Caution Review failedPull request was closed or merged during review 📝 WalkthroughWalkthroughThis PR executes the Lor product pivot by removing allies/blocks/privacy-settings features across API/realtime/database/web tiers, refactoring DM authorization to workspace-membership validation, enhancing the message composer with code-block syntax highlighting, redesigning the landing page with Lor branding, and updating the design system with a purple-and-gold color palette and serif typography. ChangesPivot Documentation & AI Skill Specifications
Social Features Removal (Allies, Blocks, Privacy Settings)
DM Authorization Model Refactor
Message Composer Code-Block Syntax Highlighting
UI Component Icon & Layout Updates
Landing Page & Download Page Redesign (Lor Branding)
Design System & Branding Updates
Supporting Configuration & Package Updates
🎯 4 (Complex) | ⏱️ ~60 minutes
Possibly Related PRs
✨ Finishing Touches🧪 Generate unit tests (beta)
|
PR Summary: Lor Delete Pass
Overview
This is a large-scale feature deletion and rebranding pass that transforms the "Townhall" product into "Lor" (an institutional-memory chat offering called "Merlin"). The PR systematically removes social features (allies, friend requests, user blocks, privacy settings) and replaces them with a workspace-scoped DM model. It includes comprehensive documentation, design specifications, and landing page rebranding.
Key Changes
Product & Strategy
.agents/skills/design-taste-frontend/SKILL.md,gpt-taste/SKILL.md,high-end-visual-design/SKILL.md) with proper symlinks and skills-lock manifestAPI & Backend Deletion
Removed endpoints/handlers:
/v1/allies/*(send/list/accept/decline ally requests, list allies, remove ally) — entire module deleted with no remaining references/v1/blocks/*(block/unblock user, list blocked users) — entire module deleted/v1/privacy-settings/*(get/update privacy settings) — entire module deletedAuthorization & DM Logic:
guildIdwith the requester (replaces prior ally/block/privacy checks)getUserProfileno longer returnsallyStatus,allyRequestId, orblockStatusDatabase Schema:
ally_requests.ts,user_privacy_settings.tsmodulesuserBlockRelationsremoved;userRelationsno longer includesblockedUsers,blockedByUsers,privacySettingsrelations (verified no remaining references)Realtime (Socket.IO):
isDMBlockedForUserservice entirelyWeb Frontend Deletion
Removed components:
AlliesPage— entire allies management UI (667 lines)PrivacySafetySettings— privacy settings dialog taballies-page.tsx,privacy-safety-settings.tsxfilesSimplified components:
NewDMDialogrefactored to stub: now shows instructional message "Open a member's profile to start a direct message with them" instead of search/ally selection UIDMPanelsimplified: removed "Allies" button and navigation elementsUserProfileCardstripped: removed ally-request/block/unblock buttons; "Send DM" remains as only non-profile-owner actionScrollTexticon and "send a raven to begin" messagingHooks & API:
useBlockedUsers,useBlockedUserIds,usePrivacySettings,useUpdatePrivacySettingshooksListAlliesResponse,Ally,ListAllyRequestsResponse,AllyRequest,ListBlockedUsersResponse,BlockedUserblockedUserIdsprop from DM and channel routesDesign & Branding
Landing page (Townhall → Lor):
lor.chat), OpenGraph, and favicon to Lor brandingGrain(overlay),Reveal(scroll-reveal),Waitlist(email signup) — all properly functionalCopyTerminal,ThemeToggle,PreviewPagecomponents;/previewroute removedChat UI icons & typography:
Hash→Scroll(for text channels, applied consistently across sidebar and message list)LoraVF.woff2) with--font-serifCSS variableoklchvalues) for Lor brand in both light and dark modesChat composer & UX:
CodeBlockLowlight,CodeBlockView, lowlight library) with language selectoractive:scale-[0.97]press feedback for tactile responseDependencies & Configuration
@tiptap/extension-code-block-lowlight,lowlight(code syntax highlighting)CustomSelectItemcomponent with optional tooltip support in@repo/uidev:wwwin rootpackage.jsonPOST /waitlistproperly wired in API with schema, handlers, routes, and mounted inapp.tsTesting & Coverage
/v1/dmsand/v1/notification-settingsCode Quality Observations
✅ Clean removals: All deleted modules have zero remaining references; imports are properly cleaned up
✅ Consistent schema updates: Relations are correctly trimmed without dangling references
✅ Symlink structure: Design skills symlinks verified as correct
✅ No broken imports: Verified no imports of removed files across codebase
✅ API completeness: Waitlist endpoint exists and is mounted
Confidence Score: 3/5
The PR is mostly solid with some notable gaps:
However, the removal of DM creation dialog UI (even as a workaround with instructions) and the absence of visible database migrations are meaningful gaps. The NewDMDialog stub is functional but represents incomplete UX that depends on users discovering profile-based DM creation. Database migrations must exist elsewhere or need to be created for production.
Can merge with caveats: The PR is not breaking, but should be followed by: