All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Deployment Architecture
- Migrated from Traefik reverse proxy to Cloudflare Tunnel for secure external access
- Container naming:
yapli_app(application),yapli_db(database) - Docker network:
yapli-tunnel(external network for Cloudflare integration) - Removed port mappings from application container (handled by Cloudflare Tunnel)
- Updated Node.js base image to 22-alpine
- Added Socket.io installation to production Dockerfile for WebSocket support
- Database Scripts
- Added
db:generate- Generate Prisma client - Added
db:migrate- Run database migrations in development - Added
db:migrate:deploy- Deploy migrations to production - Added
db:push- Push schema changes without migrations - Added
db:studio- Open Prisma Studio GUI - Added
db:setup- Create database and run initial migrations - Added
db:reset- Drop, recreate, and migrate database
- Added
- WebSocket connectivity through reverse proxies with
allowEIO3and explicit transports configuration
- Initial release of Yapli - a modern, minimalist web-based chatroom application
- Dynamic Room Management
- Create unlimited chat rooms with custom titles
- Unique shareable URLs for each room (
/[roomId]) - Room isolation with per-room message and presence tracking
- Real-time room deletion with trash icon interface
- Real-time Chat Features
- Instant messaging with WebSocket integration via Socket.io
- Live presence tracking showing online users
- Automatic link detection and conversion to clickable links
- Message persistence with timestamp display
- Link preview functionality for shared URLs
- Modern UI/UX
- Beautiful dark theme with #ffc100 yellow accents
- Responsive design for all screen sizes
- Consistent branding with integrated Yapli logo
- Smooth hover animations and transitions
- Icon-based UI with Heroicons for intuitive interactions
- Security & Accessibility
- Secure external link handling with
noopener noreferrer - Keyboard navigation support
- Cross-browser compatibility
- Input validation and sanitization
- Secure external link handling with
- Database & Architecture
- PostgreSQL database with Prisma ORM
- Database migrations for rooms and messages
- RESTful API endpoints for room and message management
- Development & Deployment
- Docker containerization with multi-stage builds
- Docker Compose setup with PostgreSQL service
- Health checks for database connectivity
- Production-ready configuration with environment variables
- ESLint configuration for code quality
- TypeScript support throughout the application
- Frontend: Next.js 15.3.2 with React 19
- Styling: Tailwind CSS v4 with custom dark theme
- Real-time Communication: Socket.io 4.8.1
- Database: PostgreSQL with Prisma ORM 6.8.2
- UI Components: Heroicons 2.2.0
- Link Processing: Linkifyjs 4.3.1 and link-preview-js 3.1.0
- Runtime: Node.js 22-alpine (Docker)
- Infrastructure: Hetzner VPS hosting
- External Access: Cloudflare Tunnel (no port exposure required)
- Container Orchestration: Docker Compose with 2 containers:
yapli_app: Next.js application container (Node.js 22-alpine)yapli_db: PostgreSQL 17 database container
- Networking: External Docker network
yapli-tunnelfor Cloudflare integration - Data Persistence: PostgreSQL data stored in named Docker volume
- Health Monitoring: Database health checks with 10s intervals
- Restart Policy:
unless-stoppedfor both containers - Environment Management: Production environment variables via
.env.production - Container Dependencies: App container depends on healthy PostgreSQL service
npm run dev- Development servernpm run build- Production buildnpm run start- Production server with environment configurationnpm run lint- Code lintingnpm run test- Run test suitenpm run test:watch- Run tests in watch modenpm run db:generate- Generate Prisma clientnpm run db:migrate- Run database migrations (development)npm run db:migrate:deploy- Deploy migrations (production)npm run db:push- Push schema changes without migrationsnpm run db:studio- Open Prisma Studio GUInpm run db:setup- Create database and run initial setupnpm run db:reset- Reset database (drop, recreate, migrate)