Quote.Vote Chat: Reviving AIM For Civic Discourse

Alex Johnson
-
Quote.Vote Chat: Reviving AIM For Civic Discourse

Hey folks! Let's dive into a cool feature request for Quote.Vote: a purpose-built chat system that's inspired by the good ol' days of instant messaging, like AIM (AOL Instant Messenger) and ICQ. The goal? To foster real-time conversations, but tailored for the civic discussions happening on Quote.Vote. We're talking about a system that's all about presence, away messages, typing indicators, and read receipts. Think of it as a blast from the past, but with a modern twist!

The Core Vision: Bringing Back the Buddy List

So, what's this chat system all about? The core idea is to create a seamless way for users to connect and discuss. This means real-time one-to-one chats and group chats linked to specific posts. We're aiming for a user experience that's both intuitive and familiar. We want something straightforward without unnecessary complexity, that's easy to use. Let's break down the key features:

Buddy List

Imagine seeing your mutual connections, with their live presence status right there. Are they online, away, do not disturb, or invisible? Just like the good old AIM days, you'll know who's ready to chat at a glance. This feature is all about knowing who's around and available. It makes it easy to start a conversation with people you're connected with. It's about making it easy to build and maintain relationships and discussions with users on the platform.

Direct Messaging

We're planning lightweight, private message threads for one-on-one chats. This feature ensures users can have private conversations. These direct messages are intended to provide an easy way to start private conversations, providing the user with a more focused method of communication to collaborate and share ideas.

Rooms

Group chats will be anchored to posts, meaning a dedicated chat room for each quote. This setup facilitates discussions around specific topics, allowing users to dive deeper into specific content and engage in meaningful dialogue. The rooms feature will give users an intuitive way to collaborate in groups, fostering the discussion of specific posts and quotes.

Status and Away Messages

Users can set custom status messages, like “Out for lunch” or “In a meeting”. This feature tells others if you're available. This is about letting others know your availability. Status messages provide clarity to a user's current activities, providing a real-time understanding of when they're free to chat. Away messages can be set when you're unavailable.

Typing Indicators

Typing indicators will show when a participant is actively typing. This will provide real-time feedback on who's typing in the chat. This feature brings a natural feel to conversations and enhances the user experience.

Read Receipts

Read receipts will show who's read each message. This is about making sure people see what you send. This feature confirms that a message has been read and provides important feedback to the user.

Presence Service

We will be using a low-latency status update using Redis or Mongo, to provide a real-time status update. This feature ensures that your status is instantly updated and always shows your availability. It's all about making sure your status is always accurate and reflects whether you're online, away, or busy.

Moderation Controls

We'll have mutual opt-in for DMs, a block list, and rate limiting. This is about safety and preventing abuse, making the platform safer for everyone. The moderation controls make it easy to protect users from unwanted contact, giving users more control over who they communicate with. These tools are essential for maintaining a safe and respectful platform.

Technical Deep Dive: How It's Made

So how does this all come together? Let's peek under the hood at the technical side of things:

Backend

We'll be using Node.js, GraphQL, and MongoDB for the backend. Here's a look at the key collections and events:

Collections:

We'll have collections for users, rosters, presence, conversations, messages, and receipts. These will store the data needed for the chat.

Heartbeat:

Presence updates will happen every 30-60 seconds, and presence expires after about 2 minutes of inactivity. This keeps statuses up to date.

Core Events:

The core events include presence.publish and presence.stream for presence updates, conv.ensureDirect and conv.createRoom for managing conversations, msg.send and msg.new for sending messages, msg.typing and typing.update for typing indicators, and msg.read and receipt.update for read receipts. These events will handle the real-time functionality.

Frontend

The frontend will be built with React and Next.js. We'll have components like:

BuddyListPanel:

This will group users by presence, showing their status messages.

ChatWindow:

This will be the shared UI for both DMs and rooms.

StatusEditor:

This will let users set and clear away messages.

Features:

We'll have real-time message streams, typing indicators, and read receipts. These features will bring the chat to life.

Reconnect and Auto-Expire:

This allows stale presence data to auto-expire.

Safety First: Guardrails in Place

We're building with safety in mind:

Mutual Roster Acceptance

Mutual roster acceptance will be required before anyone can send a DM. This keeps things safe.

Blocklist

Blocked users can't send messages or see your presence.

Rate Limiting

Rate limiting will be enforced on the send pipeline. This helps to prevent abuse.

Making It Real: Acceptance Criteria

What needs to happen for us to say,

You may also like