A modern, real-time team collaboration platform built with .NET, designed to facilitate seamless communication through persistent chat rooms, direct messages, and private groups. Inspired by Slack and Discord, SharpTalk provides a clean, intuitive interface for team collaboration.
SharpTalk is a multi-tenant collaboration tool organized around Workspaces, where teams can communicate through Channels, share files, and collaborate in real-time. The platform supports:
- Multi-Workspace Architecture: Users can belong to multiple independent workspaces
- Real-Time Communication: Instant message delivery using SignalR WebSockets
- Role-Based Access Control: Owner, Admin, and Member roles with appropriate permissions
- Rich Messaging: Support for markdown, reactions, and message threading
- File Sharing: Drag-and-drop file uploads with cloud storage integration
- Presence Tracking: Online/offline status and typing indicators
- Framework: ASP.NET Core 10 Web API
- Real-Time: SignalR (WebSocket-based communication)
- Database: PostgreSQL 15
- ORM: Entity Framework Core
- Authentication: JWT (JSON Web Tokens)
- Caching/PubSub: Redis (for presence tracking and SignalR scale-out)
- File Storage: Local storage (with Azure Blob Storage planned)
- Framework: Blazor WebAssembly
- State Management: Blazored.LocalStorage
- Authentication: ASP.NET Core Authentication State Provider
- Styling: Vanilla CSS with premium dark mode and glassmorphism design
- Containerization: Docker & Docker Compose
- Database: PostgreSQL 15 (Docker container)
- Cache: Redis (Docker container)
Authentication & Identity
- โ User registration with email/password
- โ User login with JWT token generation
- โ Secure API endpoints with JWT authentication
- โ Custom authentication state provider for Blazor
- โ Case-insensitive email handling
- โ Automatic redirection for invalid sessions
Workspace Management
- โ Create and delete workspaces
- โ Rename workspaces and update descriptions
- โ Invite users and manage members
- โ Leave workspace functionality
- โ Workspace settings modal
Channel Management
- โ Create, list, and manage channels
- โ Public and private channel support
- โ Channel member tracking
Real-Time Messaging
- โ SignalR hub configuration with Redis backplane
- โ Instant message delivery and broadcasting
- โ Connection management and auto-reconnect
Direct Messaging
- โ 1:1 private conversations (Global DMs)
- โ Group Direct Messages (Support for multiple members)
- โ Unified DM list across workspaces
Presence & Activity
- โ Real-time Online/Offline status tracking
- โ Integration with Redis for scalable presence
- โ Visual status indicators in UI
User Experience
- โ Modern "Slack-like" UI with Dark Mode
- โ User Settings and Profile Management
- โ Avatar uploading and cropping
- โ Responsive design for mobile/desktop
Notifications & Unread
- โณ Unread message counters
- โณ Typing indicators
- โณ "Edited" message status
File Sharing
- File upload endpoint with validation
- Drag-and-drop file upload in UI
- Image and GIF auto-expansion in chat
- Cloud storage integration (Azure Blob Storage)
Message Threading
- Reply to specific messages
- Threaded conversation view
- Thread notifications
Search Functionality
- Global message search
- User search
- Quick Switcher (Ctrl+K) for navigation
Future Enhancements
- Workspace analytics
- Voice/video integration
- Third-party integrations
SharpTalk/
โโโ SharpTalk.Api/ # Backend Web API
โ โโโ Controllers/ # API endpoints
โ โ โโโ AuthController.cs
โ โ โโโ ChannelController.cs
โ โ โโโ MessageController.cs
โ โ โโโ UserController.cs
โ โ โโโ WorkspaceController.cs
โ โโโ Data/ # Database context
โ โ โโโ ApplicationDbContext.cs
โ โโโ Entities/ # EF Core entities
โ โ โโโ Attachment.cs
โ โ โโโ Channel.cs
โ โ โโโ ChannelMember.cs
โ โ โโโ Message.cs
โ โ โโโ Reaction.cs
โ โ โโโ User.cs
โ โ โโโ Workspace.cs
โ โ โโโ WorkspaceMember.cs
โ โโโ Hubs/ # SignalR hubs
โ โ โโโ ChatHub.cs
โ โโโ Migrations/ # Database migrations
โ โโโ Program.cs # API startup configuration
โ
โโโ SharpTalk.Web/ # Frontend Blazor WASM
โ โโโ Auth/ # Authentication
โ โ โโโ CustomAuthStateProvider.cs
โ โโโ Layout/ # Layout components
โ โ โโโ MainLayout.razor
โ โ โโโ NavMenu.razor
โ โ โโโ LandingLayout.razor
โ โโโ Pages/ # Page components
โ โ โโโ Login.razor
โ โ โโโ Register.razor
โ โ โโโ Home.razor
โ โ โโโ Index.razor
โ โโโ Services/ # Business logic services
โ โ โโโ WorkspaceService.cs
โ โ โโโ ChannelService.cs
โ โ โโโ ChatService.cs
โ โ โโโ UserService.cs
โ โโโ Shared/ # Shared components
โ โ โโโ Sidebar.razor
โ โ โโโ ChannelList.razor
โ โ โโโ ChatArea.razor
โ โ โโโ CreateWorkspaceModal.razor
โ โ โโโ CreateChannelModal.razor
โ โ โโโ WorkspaceSettingsModal.razor
โ โ โโโ UserSettingsModal.razor
โ โ โโโ UserProfile.razor
โ โโโ Program.cs # Blazor startup configuration
โ
โโโ SharpTalk.Shared/ # Shared DTOs and models
โ โโโ DTOs/ # Data transfer objects
โ โโโ AuthResponse.cs
โ โโโ ChannelDto.cs
โ โโโ CreateChannelRequest.cs
โ โโโ CreateWorkspaceRequest.cs
โ โโโ InviteUserRequest.cs
โ โโโ LoginRequest.cs
โ โโโ MessageDto.cs
โ โโโ RegisterRequest.cs
โ โโโ RemoveMemberRequest.cs
โ โโโ RenameWorkspaceRequest.cs
โ โโโ SendMessageRequest.cs
โ โโโ TransferOwnershipRequest.cs
โ โโโ UpdateMemberRoleRequest.cs
โ โโโ UpdateWorkspaceDescriptionRequest.cs
โ โโโ UserInfo.cs
โ โโโ UserStatusDto.cs
โ โโโ WorkspaceDto.cs
โ โโโ WorkspaceMemberDto.cs
โ
โโโ plans/ # Feature planning documents
โ โโโ workspace-management-features.md
โ โโโ user-avatar-features.md
โ
โโโ docker-compose.yml # Docker services configuration
โโโ IMPLEMENTATION_PLAN.md # Detailed implementation roadmap
โโโ Requirements Document.txt # Original requirements specification
โโโ README.md # This file
The application uses PostgreSQL with the following core entities:
- User: User accounts with authentication and profile data
- Workspace: Independent collaboration spaces
- WorkspaceMember: Join table linking users to workspaces with roles
- Channel: Communication channels within workspaces
- ChannelMember: Join table tracking channel membership
- Message: Chat messages with threading support
- Attachment: File attachments linked to messages
- Reaction: Emoji reactions on messages
- Workspace Owner: Creator of the workspace, can delete and manage all aspects
- Workspace Admin: Can manage users, channels, and moderation
- Member: Standard user, can send messages and join public channels
- Guest (Future): Restricted access to specific channels
- .NET 10 SDK
- Docker Desktop (for PostgreSQL and Redis)
- Git
-
Clone the repository
git clone <repository-url> cd SharpTalk
-
Start infrastructure services
docker-compose up -d
This starts:
- PostgreSQL on port 5433
- Redis on port 6379
-
Configure connection strings
Update
SharpTalk.Api/appsettings.json:{ "ConnectionStrings": { "DefaultConnection": "Host=localhost;Port=5433;Database=sharptalk;Username=postgres;Password=password" }, "JwtSettings": { "Secret": "your-super-secret-key-at-least-32-characters-long", "Issuer": "SharpTalk", "Audience": "SharpTalkUsers" } } -
Run database migrations
cd SharpTalk.Api dotnet ef database update -
Start the API
dotnet run
The API will be available at
http://localhost:5298 -
Start the Web client (in a new terminal)
cd SharpTalk.Web dotnet runThe web application will be available at
http://localhost:5000
# Run all tests
dotnet test
# Run tests with coverage
dotnet test --collect:"XPlat Code Coverage"cd SharpTalk.Api
dotnet ef migrations add MigrationName
dotnet ef database update# Build API
cd SharpTalk.Api
dotnet publish -c Release
# Build Web
cd SharpTalk.Web
dotnet publish -c Release- Project setup and structure
- Docker Compose configuration
- EF Core entities and relationships
- Database migrations
- Authentication (JWT)
- Workspace CRUD operations
- Channel CRUD operations
- Private channel support
- Frontend layout and navigation
- Authentication state management
- Real-time messaging (SignalR) - In Progress
- Direct Messages (1:1 and Group)
- Online/offline status tracking
- Typing indicators
- Unread message counters
- Message editing indicators
- File upload and sharing
- Message threading
- Search functionality
- Workspace management enhancements
- User profile and avatar features
- Complete real-time messaging implementation
- Add presence tracking with Redis
- Implement typing indicators
- Add unread message counters
- Implement message editing and deletion
- Direct messaging (1:1 and group)
- File upload and sharing
- Message threading
- Enhanced workspace management
- User profile and avatar features
- Global search functionality
- Quick Switcher (Ctrl+K)
- Notifications system
- Workspace analytics
- Mobile app (React Native or MAUI)
- Voice/video integration
- Integration with third-party services (GitHub, Jira, etc.)
Contributions are welcome! Please follow these guidelines:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow C# coding conventions
- Write unit tests for new features
- Update documentation as needed
- Ensure all tests pass before submitting PR
- Follow the existing code style and structure
This project is licensed under the MIT License - see the LICENSE file for details.
- Inspired by Slack and Discord
- Built with Microsoft .NET ecosystem
- Uses SignalR for real-time communication
- Styled with modern CSS and glassmorphism design principles
For questions, issues, or suggestions:
- Open an issue on GitHub
- Check the Requirements Document.txt for detailed specifications
- Review the IMPLEMENTATION_PLAN.md for development progress
- ASP.NET Core Documentation
- Blazor Documentation
- SignalR Documentation
- Entity Framework Core Documentation
- PostgreSQL Documentation
- Redis Documentation
Built with โค๏ธ using .NET 10