Skip to content

Latest commit

ย 

History

50 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

ShadowDock

A self-hostable real-time messaging application built with React, Node.js, Socket.IO, PostgreSQL, Redis, and Docker.

ShadowDock is a full-stack messaging application focused on real-time communication, authenticated user sessions, private conversations, persistent message storage, and a containerized development environment.

The project follows a modular client-server architecture and is designed to be extensible for future features such as end-to-end encryption, multi-device synchronization, voice and video communication.


โœจ Features

  • ๐Ÿ” User authentication
  • ๐Ÿ‘ค User profiles
  • ๐Ÿ’ฌ Private conversations
  • โšก Real-time messaging with Socket.IO
  • ๐Ÿ’พ Persistent message storage
  • ๐Ÿ”„ Session and refresh-token based authentication
  • ๐Ÿ—„๏ธ PostgreSQL database
  • โšก Redis service support
  • ๐Ÿณ Docker-based development environment
  • ๐Ÿ”ฅ Hot reloading during development
  • ๐Ÿ›ก๏ธ API validation
  • ๐Ÿšฆ Rate limiting
  • ๐Ÿ”Œ REST API and WebSocket communication
  • ๐Ÿงฉ Modular backend architecture
  • ๐Ÿงช Testing structure for future automated tests

๐Ÿ› ๏ธ Tech Stack

Frontend

  • React
  • Vite
  • JavaScript
  • Axios
  • Socket.IO Client

Backend

  • Node.js
  • Express
  • Socket.IO
  • PostgreSQL
  • Redis
  • JWT
  • bcrypt

Infrastructure

  • Docker
  • Docker Compose
  • WSL2 / Linux development environment

๐Ÿ—๏ธ Architecture

ShadowDock uses a client-server architecture with REST APIs for HTTP-based operations and Socket.IO for real-time communication.

                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚         Client          โ”‚
                    โ”‚      React + Vite       โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                 โ”‚
                    HTTP / REST  โ”‚  Socket.IO
                                 โ–ผ
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚         Server          โ”‚
                    โ”‚  Node.js + Express      โ”‚
                    โ”‚      + Socket.IO        โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜
                                โ”‚       โ”‚
                                โ–ผ       โ–ผ
                     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                     โ”‚ PostgreSQL   โ”‚ โ”‚    Redis     โ”‚
                     โ”‚   Database   โ”‚ โ”‚    Cache     โ”‚
                     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ”„ Request Flow

User
 โ”‚
 โ–ผ
Client Application
 โ”‚
 โ”œโ”€โ”€ HTTP / REST โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ Express API
 โ”‚
 โ””โ”€โ”€ Socket.IO โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ Socket Server
                                       โ”‚
                                       โ–ผ
                               Application Services
                                       โ”‚
                              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                              โ–ผ                 โ–ผ
                         PostgreSQL           Redis

The REST API handles operations such as authentication, user management, chat management, and other HTTP-based requests.

Socket.IO handles real-time communication, including message delivery and future real-time features.


๐Ÿง  Backend Responsibilities

The backend is responsible for:

  • User registration and login
  • Password hashing
  • Access token generation
  • Refresh token generation and rotation
  • Session management
  • User authorization
  • Chat and conversation management
  • Message persistence
  • Real-time Socket.IO communication
  • API validation
  • Rate limiting
  • Database access
  • Redis integration

The backend follows a layered architecture to keep application logic separated from database operations and transport logic.

Request
   โ”‚
   โ–ผ
Routes
   โ”‚
   โ–ผ
Controllers
   โ”‚
   โ–ผ
Services
   โ”‚
   โ–ผ
Repositories
   โ”‚
   โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ PostgreSQL
   โ”‚
   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ Redis

Layer Responsibilities

Routes

Routes define API endpoints and connect incoming requests to the appropriate controllers.

Controllers

Controllers handle HTTP requests and responses. They validate request flow and delegate business logic to services.

Services

Services contain the core application logic, including authentication, chat operations, message handling, and session management.

Repositories

Repositories handle direct database access and keep SQL operations separated from application logic.


๐Ÿ“ Project Structure

ShadowDock/
โ”‚
โ”œโ”€โ”€ client/                     # React + Vite frontend
โ”‚
โ”œโ”€โ”€ server/                     # Node.js backend
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ controllers/            # Request controllers
โ”‚   โ”œโ”€โ”€ middleware/             # Authentication, validation, rate limiting
โ”‚   โ”œโ”€โ”€ repositories/           # Database access layer
โ”‚   โ”œโ”€โ”€ routes/                 # API routes
โ”‚   โ”œโ”€โ”€ services/               # Business logic
โ”‚   โ”œโ”€โ”€ socket/                 # Socket.IO configuration and events
โ”‚   โ”œโ”€โ”€ utils/                  # Utility functions
โ”‚   โ”‚
โ”‚   โ””โ”€โ”€ index.js                # Server entry point
โ”‚
โ”œโ”€โ”€ docker/                     # Docker configuration
โ”‚
โ”œโ”€โ”€ docs/                       # Project documentation
โ”‚
โ”œโ”€โ”€ tests/                      # Automated tests
โ”‚
โ”œโ”€โ”€ docker-compose.yml          # Base Docker configuration
โ”œโ”€โ”€ docker-compose.dev.yml      # Development configuration
โ”œโ”€โ”€ docker-compose.prod.yml     # Production configuration
โ”‚
โ”œโ”€โ”€ .dockerignore
โ”œโ”€โ”€ .gitignore
โ”œโ”€โ”€ CHANGELOG.md
โ”œโ”€โ”€ CONTRIBUTING.md
โ”œโ”€โ”€ LICENSE
โ”œโ”€โ”€ README.md
โ””โ”€โ”€ SECURITY.md

๐Ÿ” Authentication Architecture

ShadowDock uses JWT-based authentication with access tokens and refresh tokens.

User
 โ”‚
 โ–ผ
Login Request
 โ”‚
 โ–ผ
Authentication Service
 โ”‚
 โ”œโ”€โ”€ Verify Credentials
 โ”‚
 โ”œโ”€โ”€ Generate Access Token
 โ”‚
 โ””โ”€โ”€ Generate Refresh Token
          โ”‚
          โ–ผ
      Active Session
          โ”‚
          โ–ผ
Authenticated Requests

Access Token

The access token is used to authenticate API requests and protected operations.

Refresh Token

The refresh token is used to maintain authenticated sessions without requiring the user to log in repeatedly.

Refresh tokens can be rotated to improve session security and support session management.


๐Ÿ’ฌ Real-Time Messaging

ShadowDock uses Socket.IO to support real-time communication between connected users.

User A
   โ”‚
   โ”‚ Message Event
   โ–ผ
Socket.IO Server
   โ”‚
   โ”œโ”€โ”€ Validate User
   โ”‚
   โ”œโ”€โ”€ Process Message
   โ”‚
   โ”œโ”€โ”€ Store Message
   โ”‚
   โ–ผ
PostgreSQL
   โ”‚
   โ–ผ
Socket Event
   โ”‚
   โ–ผ
User B

Messages are persisted before or alongside real-time delivery so that conversations remain available after page reloads or reconnections.


๐Ÿ—„๏ธ Data Layer

PostgreSQL

PostgreSQL is used as the primary persistent database for application data.

Core data includes:

  • Users
  • Chats
  • Chat members
  • Messages
  • Attachments
  • Authentication sessions and related data

Redis

Redis is available for services that benefit from fast in-memory storage and caching.

Potential responsibilities include:

  • Caching
  • Temporary session-related data
  • Rate limiting support
  • Socket-related coordination
  • Future scalability features

๐Ÿณ Docker Architecture

ShadowDock uses Docker Compose to create a consistent development environment.

The development stack includes:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚    Client    โ”‚
โ”‚ React + Vite โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
       โ”‚
       โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚    Server    โ”‚
โ”‚ Node + API   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
       โ”‚
       โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ PostgreSQL
       โ”‚
       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ Redis

Docker allows the application services to run together without manually configuring every dependency on the host system.

The project supports separate Docker Compose configurations for:

  • Base configuration
  • Development
  • Production

๐Ÿš€ Development Environment

The project is designed to run using Docker Compose.

Typical development services include:

  • Client
  • Server
  • PostgreSQL
  • Redis

The development configuration supports hot reloading so that frontend and backend changes can be reflected without rebuilding the entire environment manually.

โš™๏ธ Prerequisites

Before running ShadowDock, make sure the following tools are installed:

  • Docker
  • Docker Compose
  • Git

For local development without Docker, you may also need:

  • Node.js
  • npm
  • PostgreSQL
  • Redis

Verify Docker installation:

docker --version
docker compose version

๐Ÿ“ฅ Getting Started

1. Clone the Repository

git clone <your-repository-url>

Navigate into the project directory:

cd ShadowDock

2. Configure Environment Variables

The backend uses environment variables for application configuration.

Create or configure the server environment file:

server/.env

A development configuration may include:

NODE_ENV=development

SERVER_HOST=localhost
PORT=5000

CLIENT_URL=http://localhost:5173

DB_HOST=postgres
DB_PORT=5432
DB_NAME=shadowdock
DB_USER=postgres
DB_PASSWORD=postgres
DB_SSL=false

DB_POOL_MIN=2
DB_POOL_MAX=20
DB_IDLE_TIMEOUT=30000
DB_CONNECTION_TIMEOUT=5000

Authentication-related secrets and other sensitive configuration values should not be committed to version control.


๐Ÿณ Running with Docker Compose

Start the development environment with:

docker compose \
  -f docker-compose.yml \
  -f docker-compose.dev.yml \
  up --build

To run the containers in detached mode:

docker compose \
  -f docker-compose.yml \
  -f docker-compose.dev.yml \
  up --build -d

This starts the services defined by the Docker Compose configuration.

Depending on the current configuration, the stack includes services such as:

  • Client
  • Server
  • PostgreSQL
  • Redis

๐Ÿ›‘ Stopping the Development Environment

To stop and remove the development containers:

docker compose \
  -f docker-compose.yml \
  -f docker-compose.dev.yml \
  down

This safely shuts down the development stack.

If volumes should also be removed:

docker compose \
  -f docker-compose.yml \
  -f docker-compose.dev.yml \
  down -v

โš ๏ธ Removing volumes can delete persistent development database data.


๐Ÿ“œ Viewing Logs

View logs from all running services:

docker compose \
  -f docker-compose.yml \
  -f docker-compose.dev.yml \
  logs

Follow logs in real time:

docker compose \
  -f docker-compose.yml \
  -f docker-compose.dev.yml \
  logs -f

View logs for a specific service:

docker compose \
  -f docker-compose.yml \
  -f docker-compose.dev.yml \
  logs -f server

The service name may vary depending on the Docker Compose configuration.


๐ŸŒ Application Access

During development, the frontend and backend typically run on separate ports.

Client

http://localhost:5173

Server

http://localhost:5000

API Base Path

http://localhost:5000/api/v1

The exact available endpoints depend on the currently implemented API routes.


๐Ÿ”Œ API Architecture

The API is organized under a versioned base path:

/api/v1

This allows future API versions to be introduced without immediately breaking older clients.

Example structure:

/api
โ””โ”€โ”€ v1
    โ”œโ”€โ”€ auth
    โ”œโ”€โ”€ users
    โ”œโ”€โ”€ chats
    โ””โ”€โ”€ messages

๐Ÿ” Authentication Endpoints

Authentication functionality includes routes for operations such as:

POST   /api/v1/auth/register
POST   /api/v1/auth/login
POST   /api/v1/auth/refresh
POST   /api/v1/auth/logout
POST   /api/v1/auth/logout-all
GET    /api/v1/auth/me

Authentication Flow

Register / Login
       โ”‚
       โ–ผ
Verify User Credentials
       โ”‚
       โ–ผ
Generate Access Token
       โ”‚
       โ–ผ
Generate Refresh Token
       โ”‚
       โ–ผ
Authenticated Session

Protected routes require valid authentication credentials.


๐Ÿงฉ Socket.IO Architecture

The Socket.IO server is responsible for real-time communication.

The general connection flow is:

Client
   โ”‚
   โ–ผ
Socket Connection
   โ”‚
   โ–ผ
Socket Authentication
   โ”‚
   โ–ผ
Authenticated Socket
   โ”‚
   โ–ผ
Chat Events
   โ”‚
   โ”œโ”€โ”€ Join Conversation
   โ”œโ”€โ”€ Send Message
   โ”œโ”€โ”€ Receive Message
   โ””โ”€โ”€ Future Real-Time Events

Socket authentication helps ensure that only authenticated users can perform protected real-time operations.


๐Ÿ’ฌ Message Flow

A simplified message flow looks like:

User
 โ”‚
 โ–ผ
Message Input
 โ”‚
 โ–ผ
Client Application
 โ”‚
 โ–ผ
Socket Event
 โ”‚
 โ–ผ
Socket Server
 โ”‚
 โ–ผ
Message Service
 โ”‚
 โ–ผ
Message Repository
 โ”‚
 โ–ผ
PostgreSQL
 โ”‚
 โ–ผ
Persisted Message
 โ”‚
 โ–ผ
Real-Time Delivery
 โ”‚
 โ–ผ
Conversation Participants

This architecture separates:

  • Client-side interaction
  • Real-time transport
  • Business logic
  • Database operations

๐Ÿ—‚๏ธ Backend Module Structure

The backend is organized into modular components.

server/
โ”‚
โ”œโ”€โ”€ controllers/
โ”‚   โ”œโ”€โ”€ auth.controller.js
โ”‚   โ”œโ”€โ”€ chat.controller.js
โ”‚   โ””โ”€โ”€ ...
โ”‚
โ”œโ”€โ”€ middleware/
โ”‚   โ”œโ”€โ”€ authentication
โ”‚   โ”œโ”€โ”€ validation
โ”‚   โ”œโ”€โ”€ error handling
โ”‚   โ””โ”€โ”€ rate limiting
โ”‚
โ”œโ”€โ”€ repositories/
โ”‚   โ”œโ”€โ”€ user.repository.js
โ”‚   โ”œโ”€โ”€ chat.repository.js
โ”‚   โ”œโ”€โ”€ message.repository.js
โ”‚   โ””โ”€โ”€ ...
โ”‚
โ”œโ”€โ”€ routes/
โ”‚   โ””โ”€โ”€ v1/
โ”‚       โ”œโ”€โ”€ auth.routes.js
โ”‚       โ”œโ”€โ”€ chat.routes.js
โ”‚       โ””โ”€โ”€ ...
โ”‚
โ”œโ”€โ”€ services/
โ”‚   โ”œโ”€โ”€ auth.service.js
โ”‚   โ”œโ”€โ”€ chat.service.js
โ”‚   โ”œโ”€โ”€ user.service.js
โ”‚   โ””โ”€โ”€ ...
โ”‚
โ”œโ”€โ”€ socket/
โ”‚   โ”œโ”€โ”€ auth.js
โ”‚   โ”œโ”€โ”€ index.js
โ”‚   โ””โ”€โ”€ events/
โ”‚       โ”œโ”€โ”€ chat.events.js
โ”‚       โ”œโ”€โ”€ message.events.js
โ”‚       โ””โ”€โ”€ ...
โ”‚
โ”œโ”€โ”€ utils/
โ”‚
โ””โ”€โ”€ index.js

This structure is intended to make the application easier to maintain and extend as additional features are introduced.


๐Ÿ—ƒ๏ธ Database Entities

The PostgreSQL database currently supports application entities related to messaging and user communication.

Core entities include:

Users
Chats
Chat Members
Messages
Attachments

Their relationships can be represented conceptually as:

User
 โ”‚
 โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
 โ–ผ              โ–ผ
Chat Member    Messages
 โ”‚
 โ–ผ
Chat
 โ”‚
 โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ Chat Members
 โ”‚
 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ Messages

A chat can contain multiple members, while messages belong to conversations and are persisted for retrieval after reconnecting or reloading the application.


๐Ÿงช Testing

The project includes a dedicated testing structure:

tests/

Tests can be expanded to cover:

  • Authentication flows
  • API endpoints
  • Service logic
  • Repository operations
  • Socket.IO events
  • Message delivery
  • Authorization
  • Error handling

Future testing goals include automated integration and end-to-end testing.


๐Ÿ›ก๏ธ Security

Security-related measures and architecture include:

  • Password hashing
  • JWT-based authentication
  • Refresh token handling
  • Session management
  • User authorization
  • Protected API routes
  • Socket authentication
  • Input validation
  • Rate limiting
  • Separation of sensitive environment variables from source code

Additional security information can be found in:

SECURITY.md

๐Ÿ”ฎ Planned Features

ShadowDock is being designed as an extensible messaging platform.

Potential future features include:

  • ๐Ÿ”’ End-to-end encryption
  • ๐Ÿ“ฑ Multi-device synchronization
  • ๐Ÿ“Ž File and media sharing improvements
  • ๐Ÿ”” Real-time notifications
  • ๐ŸŽ™๏ธ Voice communication
  • ๐Ÿ“น Video communication
  • ๐Ÿ‘ฅ Group conversations
  • โœ๏ธ Typing indicators
  • ๐ŸŸข User presence and online status
  • ๐Ÿ” Message search
  • ๐Ÿ—‘๏ธ Message deletion
  • โœ๏ธ Message editing
  • โณ Ephemeral messages
  • ๐Ÿ“Œ Pinned messages
  • ๐Ÿ›ก๏ธ Improved security and privacy controls
  • ๐Ÿ“ˆ Improved monitoring and observability
  • ๐Ÿš€ Production deployment improvements

๐Ÿงญ Project Status

ShadowDock is currently under active development.

The core architecture includes:

  • React + Vite frontend
  • Node.js + Express backend
  • PostgreSQL database
  • Redis service
  • JWT authentication
  • Refresh-token based sessions
  • REST API architecture
  • Socket.IO integration
  • Chat and conversation functionality
  • Persistent message storage
  • Docker-based development environment

Some features are still being actively developed, refined, and tested.


๐Ÿ—บ๏ธ Development Roadmap

Phase 1 โ€” Foundation

  • Project initialization
  • Docker development environment
  • PostgreSQL integration
  • Redis integration
  • React frontend setup
  • Node.js backend setup
  • Express API foundation

Phase 2 โ€” Authentication

  • User registration
  • User login
  • Password hashing
  • JWT access tokens
  • Refresh token support
  • Session management
  • Protected routes
  • Logout functionality

Phase 3 โ€” Messaging

  • Chat data structure
  • Chat membership
  • Message persistence
  • Message repositories
  • Chat services
  • Socket.IO infrastructure
  • Real-time message events
  • Continued message synchronization improvements
  • Message editing
  • Message deletion

Phase 4 โ€” Real-Time Features

  • Typing indicators
  • Online presence
  • Read receipts
  • Notifications
  • Improved reconnection handling
  • Multi-device synchronization

Phase 5 โ€” Advanced Features

  • Group chats
  • File sharing
  • Media sharing
  • Message search
  • Pinned messages
  • Ephemeral messages
  • Voice communication
  • Video communication

Phase 6 โ€” Security and Production

  • End-to-end encryption research and architecture
  • Security hardening
  • Expanded automated testing
  • Monitoring and observability
  • Production deployment configuration
  • CI/CD pipeline
  • Performance optimization

๐Ÿค Contributing

Contributions, suggestions, bug reports, and improvements are welcome.

Before contributing, review:

CONTRIBUTING.md

A typical contribution workflow is:

# Clone the repository
git clone <your-repository-url>

# Navigate into the project
cd ShadowDock

# Create a feature branch
git checkout -b feature/your-feature-name

# Make your changes

# Check repository status
git status

# Stage changes
git add .

# Create a commit
git commit -m "feat: describe your change"

# Push the branch
git push origin feature/your-feature-name

๐Ÿ› Bug Reports

If you encounter a bug, please include as much useful information as possible.

A good bug report should include:

  • A clear description of the issue
  • Steps to reproduce the problem
  • Expected behavior
  • Actual behavior
  • Relevant screenshots
  • Relevant logs or error messages
  • Environment information when applicable

For security-related issues, refer to:

SECURITY.md

๐Ÿ“„ Documentation

Project documentation can be found in:

docs/

Additional repository documents include:

File Purpose
README.md Project overview and setup instructions
CHANGELOG.md Project changes and release history
CONTRIBUTING.md Contribution guidelines
SECURITY.md Security policy and reporting information
LICENSE Project license

๐Ÿงฐ Useful Docker Commands

Start development services

docker compose \
  -f docker-compose.yml \
  -f docker-compose.dev.yml \
  up --build

Start services in detached mode

docker compose \
  -f docker-compose.yml \
  -f docker-compose.dev.yml \
  up --build -d

Stop services

docker compose \
  -f docker-compose.yml \
  -f docker-compose.dev.yml \
  down

View running containers

docker compose \
  -f docker-compose.yml \
  -f docker-compose.dev.yml \
  ps

View logs

docker compose \
  -f docker-compose.yml \
  -f docker-compose.dev.yml \
  logs

Follow logs

docker compose \
  -f docker-compose.yml \
  -f docker-compose.dev.yml \
  logs -f

Rebuild services

docker compose \
  -f docker-compose.yml \
  -f docker-compose.dev.yml \
  up --build

๐Ÿง‘โ€๐Ÿ’ป Development Philosophy

ShadowDock is being developed with an emphasis on:

  • Clear separation of responsibilities
  • Modular architecture
  • Maintainable code
  • Real-time communication
  • Persistent data
  • Authentication and authorization
  • Docker-based reproducibility
  • Future extensibility
  • Security-conscious design

The goal is to build the project incrementally while maintaining a clean architecture that can support more advanced messaging capabilities over time.


๐Ÿ”ฎ Vision

ShadowDock aims to evolve beyond a basic messaging application into a more advanced, privacy-focused communication platform.

The long-term vision includes exploring:

Real-Time Messaging
        โ”‚
        โ–ผ
Secure Communication
        โ”‚
        โ–ผ
Multi-Device Synchronization
        โ”‚
        โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ–ผ               โ–ผ
   Voice Calls      Video Calls
        โ”‚               โ”‚
        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                โ–ผ
       Advanced Privacy
                โ”‚
                โ–ผ
       Scalable Architecture

Future development will focus on improving reliability, synchronization, security, user experience, and scalability.


๐Ÿ“Š Current Stack Overview

Frontend
โ””โ”€โ”€ React + Vite
        โ”‚
        โ”‚ HTTP / REST
        โ”‚ Socket.IO
        โ–ผ
Backend
โ””โ”€โ”€ Node.js + Express
        โ”‚
        โ”œโ”€โ”€ Authentication
        โ”œโ”€โ”€ API
        โ”œโ”€โ”€ Services
        โ”œโ”€โ”€ Socket.IO
        โ”‚
        โ–ผ
Data Services
โ”œโ”€โ”€ PostgreSQL
โ””โ”€โ”€ Redis
        โ”‚
        โ–ผ
Infrastructure
โ””โ”€โ”€ Docker Compose

๐Ÿ“œ License

This project is distributed under the terms specified in the repository's:

LICENSE

๐Ÿ‘ค Author

ShadowDock is an independently developed full-stack real-time messaging project.

Built as a hands-on engineering project to explore and develop practical experience with:

  • Full-stack web development
  • React
  • Node.js
  • Express
  • PostgreSQL
  • Redis
  • Docker
  • REST APIs
  • Socket.IO
  • Authentication
  • Real-time systems
  • Scalable application architecture

โญ Support

If you find ShadowDock interesting or useful, consider supporting the project by:

  • โญ Starring the repository
  • ๐Ÿ› Reporting bugs
  • ๐Ÿ’ก Suggesting improvements
  • ๐Ÿค Contributing to the project
  • ๐Ÿ“ข Sharing feedback

ShadowDock

Real-time communication. Modular architecture. Built to evolve.

About

Built for Everyone. Controlled by No One.

Resources

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages