A collaborative conversation platform that transforms team discussions into structured knowledge. Instead of letting important decisions and action items get buried in message threads, TeamConnect extracts and organizes key outcomes from conversations into a dedicated Knowledge Hub.
TeamConnect is built around a simple idea: team conversations produce valuable outcomes — decisions, tasks, and insights — but these outcomes are often lost in long chat histories.
The platform provides:
- Workspace-based collaboration where teams organize around shared workspaces
- Real-time conversations with instant messaging via WebSockets
- Knowledge extraction that captures decisions, action items, and AI-generated summaries directly from discussions
- AI-powered summaries using Google Gemini to distill conversation context into concise, structured summaries
- User registration and login with JWT-based authentication
- Access token and refresh token mechanism
- Email verification flow
- Secure password hashing with bcrypt
- Create and manage workspaces
- Invite members by email
- Role-based workspace ownership
- Pending invite management with revocation
- Rate-limited invite endpoint
- Private (1:1) and group conversations
- Add workspace members to conversations
- Real-time messaging with Socket.IO
- Message editing and soft-delete
- Typing indicators and presence tracking
Each conversation includes a Knowledge Hub panel that organizes structured information from discussions:
Action Items
- Create tasks directly from conversations
- Assign to conversation participants
- Track status:
OPEN→IN_PROGRESS→DONE - Real-time updates across participants
Decision Log
- Record decisions made during discussions
- Track author and timestamp
- Maintain a searchable decision history
AI Conversation Summaries
- Generate summaries from the last 50 messages using Gemini AI
- Structured prompt extracts decisions, constraints, and key ideas
- 5-minute cooldown prevents unnecessary API calls
- Summaries stored in the database and broadcast in real time
| Layer | Technologies |
|---|---|
| Backend | Node.js, Express, TypeScript |
| Database | PostgreSQL, Prisma ORM |
| Real-Time | Socket.IO |
| Authentication | JWT (access + refresh tokens), bcrypt |
| AI | Google Gemini API (gemini-1.5-flash) |
| Frontend | React, TypeScript, Vite, TailwindCSS |
Workspace
│
├── Members
│
└── Conversations
│
├── Participants
│
├── Messages
│
├── Action Items
│
├── Decisions
│
└── Summaries (AI-generated)
The architecture follows a layered approach with clear separation of concerns:
Client (React)
│
├── API Layer (axios abstraction)
├── Socket Layer (Socket.IO client)
└── State Management (Zustand)
Server (Express)
│
├── Routes
├── Middleware (auth, error handling)
├── Controllers
├── Services (Gemini AI)
└── Database (Prisma ORM → PostgreSQL)
User
├── WorkspaceMember → Workspace
├── Participant → Conversation
├── Message
├── ActionItem (created / assigned)
└── Decision (created)
Workspace
├── WorkspaceMember
├── WorkspaceInvite
└── Conversation
├── Participant
├── Message
├── ActionItem
├── Decision
└── ConversationSummary
Key design decisions:
- Cascade deletes on conversation-scoped entities
- Action items scoped to conversation participants (not workspace-wide)
- Summaries track
messageCountto indicate staleness - Soft-delete for messages to preserve conversation integrity
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/auth/register |
Register new user |
| POST | /api/auth/login |
Login |
| POST | /api/auth/refresh-token |
Refresh access token |
| POST | /api/auth/logout |
Logout |
| GET | /api/auth/verify-email/:token |
Verify email |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/workspaces |
Create workspace |
| GET | /api/workspaces |
List user workspaces |
| GET | /api/workspaces/:id/members |
List workspace members |
| POST | /api/workspace-invites/send |
Send email invite |
| DELETE | /api/workspace-invites/:id |
Revoke invite |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/conversations/private |
Create private conversation |
| POST | /api/conversations/group |
Create group conversation |
| GET | /api/conversations |
List user conversations |
| POST | /api/conversations/:id/participants |
Add member |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/messages |
Send message |
| GET | /api/messages/:conversationId |
Get messages |
| PATCH | /api/messages/:id |
Edit message |
| DELETE | /api/messages/:id |
Soft-delete message |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/conversations/:id/action-items |
Create action item |
| GET | /api/conversations/:id/action-items |
List action items |
| PATCH | /api/action-items/:id |
Update status/description |
| DELETE | /api/action-items/:id |
Delete action item |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/conversations/:id/decisions |
Record decision |
| GET | /api/conversations/:id/decisions |
List decisions |
| DELETE | /api/decisions/:id |
Delete decision |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/conversations/:id/summarize |
Generate AI summary |
| GET | /api/conversations/:id/summary |
Get latest summary |
TeamConnect/
├── server/
│ ├── prisma/
│ │ └── schema/ # Prisma schema files (multi-file)
│ └── src/
│ ├── config/ # Database and environment config
│ ├── controllers/ # Request handlers
│ ├── middleware/ # Auth and error middleware
│ ├── routes/ # Express route definitions
│ ├── services/ # Business logic (Gemini AI)
│ ├── socket/ # Socket.IO server and event handlers
│ ├── utils/ # Email utilities
│ ├── app.ts # Express app setup
│ └── server.ts # Server entry point
│
└── client/
└── src/
├── app/
│ ├── chart/ # Chat UI components (Knowledge Hub, Messages)
│ ├── components/ # Shared components
│ ├── layout/ # Layout wrappers
│ └── pages/ # Route pages
├── hooks/ # Custom React hooks
├── lib/ # API client, socket client
├── store/ # Zustand state management
└── types/ # TypeScript type definitions
- Node.js (v18+)
- PostgreSQL
- Google Gemini API key
cd server
npm installCreate a .env file:
DATABASE_URL=postgresql://user:password@localhost:5432/teamconnect_db
JWT_SECRET=your_jwt_secret
REFRESH_TOKEN_SECRET=your_refresh_secret
ACCESS_TOKEN_EXPIRES_IN=15m
REFRESH_TOKEN_EXPIRES_IN=7d
GEMINI_API_KEY=your_gemini_api_key
CLIENT_URL=http://localhost:5173
SMTP_HOST=smtp.gmail.com
SMTP_USER=your_email
SMTP_PASS=your_app_passwordRun migrations and start the server:
npx prisma migrate dev
npm run devcd client
npm installCreate a .env file:
VITE_API_URL=http://localhost:5000
VITE_SOCKET_URL=http://localhost:5000Start the development server:
npm run devThe frontend runs on http://localhost:5173 and the backend on http://localhost:5000.