Unlikely Professionals

Messages

Real-time team chat with project linking and Friday integration

Messages is the portal's built-in chat system. Persistent, project-linked conversations replace email threads and scattered WhatsApp messages. All roles have access.

01 Getting There

Open Messages in the portal sidebar. A gold badge appears when you have unread messages.

URLWhat It Opens
/messagesConversation list + thread
/messages?conv={id}Specific conversation
/messages?conv=newNew conversation dialog
/messages?conv=new&project_id={id}New conversation pre-linked to a project
02 Layout

Split panel. Conversation list on the left (320px), message thread on the right. On mobile (<768px), these become full-width single views with a back arrow to toggle between them.

Conversation List

Each entry shows:

Sorted by most recent activity. New messages push conversations to the top.

03 Creating Conversations

Click + New in the list header.

FieldRequiredDescription
SubjectYesTitle shown in the conversation list
TypeYesDirect, Project, RFI, or Review
Project IDNoLinks conversation to a project (Project and RFI types)
First MessageNoSends an initial message on creation
From Project Detail The message icon on any project detail page navigates to /messages?conv=new&project_id={id}, pre-filling the project link.

Conversation Types

TypeWhen to Use
DirectGeneral team discussion, not tied to a project
ProjectDiscussion about a specific project — adds "View Project" link in header
RFIRequest for Information — clarifying project requirements
ReviewCert or invoice review discussion

Status & Priority

Status: open (default, no badge), resolved, archived. Priority: urgent, high, normal, low. Urgent shows a red indicator in the list.

04 Sending Messages
ActionHow
SendEnter or click Send
New lineShift + Enter
Ask FridayGold Ask Friday button (next to Send)

Messages are sent via REST for reliability, then broadcast to all viewers via WebSocket. You see an optimistic local copy immediately while the server confirms.

05 Real-Time Features

The page maintains a persistent WebSocket connection. Status indicator next to the page title: Connected or Reconnecting... (auto-retries with 3-second backoff).

FeatureHow It Works
Typing indicatorsShows "Jacob is typing..." below the thread. Auto-clears after 4 seconds.
Viewing presenceThread header shows who else is viewing: Jacob viewing
Read receiptsOpening a conversation marks all messages as read. Badges clear.
Unread badgesGold badge on sidebar + per-conversation counts. Header shows total unread.
Live deliveryNew messages appear instantly for all viewers without refresh.
06 Ask Friday

The gold Ask Friday button in the compose area invokes Friday AI within the conversation. Friday reads the full message history, understands the linked project, and responds as a visible participant.

Type a question in compose area
Click "Ask Friday"
Your question is saved as a chat message
Friday reads the conversation + project context
Friday's reply appears for all participants

Friday's reply is saved to the database and broadcast via WebSocket — everyone viewing the conversation sees it. Friday messages have a gold left border and an "AI" label.

Full Tools Friday has access to its full tool set in conversation context: project lookups, schedule queries, pipeline status, pricing intelligence, SQL queries, and more.
07 Messages vs Friday Bubble

The portal has two chat interfaces. They are separate systems with one bridge.

MessagesFriday Bubble
WhereFull page at /messagesFloating eye icon, every page
PurposeTeam collaborationPersonal AI assistant
StoragePermanent (SQLite)Session only (lost on tab close)
Multi-userYes — broadcasts to allSingle user only
ProtocolWebSocket (live)REST (request/response)
TypingShows who's typingN/A
Read receiptsYesN/A

The Ask Friday button in Messages is the one bridge. When clicked, Friday reads from the Messages database, responds, and saves its reply back as a chat message visible to all. The floating Friday bubble never touches the Messages database — its conversations are completely independent.

Same AI, Different Contexts Friday in Messages acts as a team-visible participant. Friday in the bubble acts as a private assistant.
08 Storage & Data
WhatWhere
Conversations & messages/data/portal-auth/chat.db
WebSocket endpoint/portal/chat/ws?token={jwt}
REST endpoints/portal/chat/*
Friday context endpoint/portal/friday/chat-context

All conversations and messages are stored permanently in SQLite. The WebSocket connection requires a JWT token (re-issued via /portal/chat/ws-token to work around httpOnly cookie constraints).