Back to Projects

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:

  1. Git push triggers Coolify webhook
  2. Docker builds the Next.js application
  3. PostgreSQL container provides database services
  4. Traefik routes traffic with SSL termination
  5. 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