You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
# TalkativeTom - Multi-Room Live Chat Application
A real-time multi-room chat application built with Astro, HTMX, SSE, and PostgreSQL.
## Features
- **Nickname Picker** - Pick any nickname (2-20 chars) without passwords
- **Avatar Selection** - Choose from 6 avatars with customizable colors
- **Multiple Rooms** - Lobby exists by default, create public or private rooms
- **Private Rooms** - Create private rooms and invite users with @username
- **Private Messages** - Send direct messages using @username "message"
- **Real-time Messaging** - Messages appear instantly via Server-Sent Events (SSE)
- **Typing Indicators** - See when others are typing
- **Online Presence** - See who's online in each room
- **Message History** - Messages persist in PostgreSQL database
- **Mobile Responsive** - Works on desktop and mobile
## Tech Stack
- **Framework**: Astro with Node adapter (SSR)
- **Real-time**: HTMX with SSE extension
- **Database**: PostgreSQL with Drizzle ORM
- **Styling**: Tailwind CSS
- **Deployment**: Railway
## Prerequisites
- Node.js 18+
- PostgreSQL database
## Setup
1. **Install dependencies**:
```bash
npm install
```
2. **Set up environment variables**:
```bash
cp .env.example .env
# Edit .env with your PostgreSQL connection string
```
3. **Set up the database**:
```bash
# Generate Drizzle migrations
npm run db:generate
# Run migrations
npm run db:migrate
# (Optional) Seed default rooms
npm run db:seed
```
4. **Run development server**:
```bash
npm run dev
```
5. **Open http://localhost:3000** in your browser
## Deployment to Railway
1. Create a new project on [Railway](https://railway.app)
2. Add a PostgreSQL database
3. Connect your GitHub repository
4. Set the `DATABASE_URL` environment variable
5. Deploy
## Usage
1. Enter a nickname and pick an avatar/color
2. Click "Join Chat" to enter the Lobby
3. Create new rooms or join existing ones
4. Send messages in real-time
5. Use @username to send private messages or invite to private rooms
# T a l k a t i v e T o m
# TalkativeTom