Project
Ephemera - Temporary Content Sharing
A self-hosted web application for sharing temporary content with automatic expiration, built with Next.js and PostgreSQL, deployed via Coolify with Traefik routing.
Next.jsPostgreSQLDockerCoolifyTraefik
Overview
Ephemera is a self-hosted web application designed for sharing temporary content that automatically expires. Whether you need to share sensitive information, temporary links, or time-limited content, Ephemera handles the lifecycle management automatically.
Features
- Automatic Expiration - Content automatically deletes after the specified time period
- Self-Hosted - Full control over your data with no third-party dependencies
- Clean Interface - Minimal, focused UI for creating and viewing ephemeral content
- PostgreSQL Backend - Reliable data storage with automatic cleanup
Technical Highlights
Next.js Architecture
Built with Next.js App Router for:
- Server-side rendering for fast initial loads
- API routes for content management
- Type-safe development with TypeScript
Database Layer
PostgreSQL provides:
- Reliable content storage
- Efficient queries for expiration checks
- Data integrity and ACID compliance
Deployment Infrastructure
Deployed through my self-hosted Coolify instance:
- Docker containerization for consistent environments
- Traefik reverse proxy for routing and SSL
- Health checks for reliability monitoring
- Automatic rebuilds on git push
Deployment Journey
Getting Ephemera deployed was an iterative process that taught me valuable lessons about containerized deployments:
Challenges Solved
- Traefik Integration - Configured service discovery with explicit labels and container naming
- Database Networking - Ensured PostgreSQL accessibility within the Docker network
- Health Checks - Resolved IPv6 resolution issues affecting container health monitoring
- Build Configuration - Fixed Next.js config and import path issues for Docker compatibility
Infrastructure Stack
The full deployment path:
- Git push triggers Coolify webhook
- Docker builds the Next.js application
- PostgreSQL container provides database services
- Traefik routes traffic with SSL termination
- Cloudflare provides DNS and CDN
Lessons Learned
Building and deploying Ephemera reinforced my understanding of:
- Docker networking and multi-container orchestration
- Traefik labels and service discovery patterns
- Health check configuration for containerized apps
- The debugging process for self-hosted infrastructure