🚢 ShipShipShip

A modern, self-hostable changelog and roadmap platform with emoji reactions, custom themes, and automated newsletters.

License Go Version Node Version Docker

SSSBanner

Features

  • 📋 Rich Event Management - TipTap editor with markdown support, tags, and media uploads
  • 😊 Emoji Reactions - 8 reaction types (👍❤️🔥🎉👀💡🤔👎) for community feedback
  • 🗳️ Voting System - Let users vote on proposed features
  • 📊 Kanban Board - Drag-and-drop interface with customizable statuses
  • 🎨 Theme System - Install custom themes with manifest-based configuration
  • 📧 Newsletter Automation - Auto-send emails when events change status
  • 📮 Email Templates - Customizable templates for different event types
  • 🔧 Admin Dashboard - Full-featured SvelteKit admin panel
  • 🔌 RESTful API - Complete API for integrations

🏗️ Tech Stack

Admin: SvelteKit 2 · Svelte 5 · TailwindCSS · shadcn-svelte · TipTap
Backend: Go 1.21 · Gin · SQLite · GORM
Deploy: Docker (AMD64 & ARM64)

🚀 Quick Start

🔑 Admin Panel: /admin Visit http://localhost:8080/admin (or https://your-domain/admin) right after installation to complete setup.

docker run -d \
  -p 8080:8080 \
  -e ADMIN_USERNAME=admin \
  -e ADMIN_PASSWORD=changeme \
  -e JWT_SECRET=your-secret-key \
  -e BASE_URL=https://changelog.yourdomain.com \
  -v shipshipship_data:/app/data \
  nelkinsky/shipshipship:latest

🔑 Admin Panel: http://localhost:8080/admin

Docker Compose

version: "3.8"
services:
  shipshipship:
    image: nelkinsky/shipshipship:latest
    ports:
      - "8080:8080"
    environment:
      - ADMIN_USERNAME=admin
      - ADMIN_PASSWORD=changeme
      - JWT_SECRET=your-secret-key
      - BASE_URL=https://changelog.yourdomain.com
      - GIN_MODE=release
    volumes:
      - shipshipship_data:/app/data
    restart: unless-stopped

volumes:
  shipshipship_data:

🔑 Admin Panel: http://localhost:8080/admin

Local Development

git clone https://github.com/GauthierNelkinsky/ShipShipShip.git
cd ShipShipShip

# Start backend + admin dev server
./start-dev.sh

# Or backend only
./quick-start.sh

Dev URLs:

⚙️ Configuration

Variable Default Description
ADMIN_USERNAME admin Admin username
ADMIN_PASSWORD admin Admin password
JWT_SECRET your-secret-key-change-in-production JWT signing key
BASE_URL (auto-detected) Base URL of your instance (e.g., https://changelog.yourdomain.com) - used for email unsubscribe links
PORT 8080 Server port
GIN_MODE debug debug or release
DB_PATH ./data/changelog.db Database path

🎨 Theme System

ShipShipShip separates the admin interface from the public-facing changelog through installable themes:

  1. Install Theme: Upload via /admin/customization/theme
  2. Configure: Customize theme settings (colors, layout, etc.)
  3. Map Statuses: Connect your event statuses to theme categories
  4. Publish: Your themed changelog appears at the root URL

Without a theme, the root URL shows the admin interface for initial setup.

📧 Newsletter Setup

  1. Go to /admin/newsletter/settings
  2. Configure SMTP settings (Gmail, Outlook, SendGrid, etc.)
  3. Test configuration
  4. Enable automation for status-based triggers
  5. Customize email templates

Automation: Automatically send newsletters when events move to specific statuses (e.g., "Released").

🛠️ Development

# Full dev mode (hot reload)
./start-dev.sh

# Rebuild everything
./start-dev.sh --rebuild

# Backend only
./quick-start.sh

Project Structure

admin/              # SvelteKit admin panel (SPA)
  ├── src/routes/admin/
  │   ├── events/          # Kanban board
  │   ├── newsletter/      # Email management
  │   └── customization/   # Themes & branding
  └── build/        # Static output (served by backend)

backend/            # Go API server
  ├── handlers/     # API endpoints
  ├── models/       # Database models
  ├── services/     # Business logic (email, automation)
  └── main.go       # Server entry point

data/               # SQLite + uploads + themes

📖 API Examples

Public:

# Get public events
curl http://localhost:8080/api/events

# Add reaction
curl -X POST http://localhost:8080/api/events/1/reactions \
  -H "Content-Type: application/json" \
  -d '{"reaction_type":"thumbs_up"}'

# Subscribe to newsletter
curl -X POST http://localhost:8080/api/newsletter/subscribe \
  -H "Content-Type: application/json" \
  -d '{"email":"user@example.com"}'

Admin (requires JWT):

# Create event
curl -X POST http://localhost:8080/api/admin/events \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"New Feature","status":"Proposed","content":"..."}'

🤝 Contributing

Contributions welcome! Fork the repo, create a feature branch, and submit a PR.

📝 License

Apache 2.0 - see LICENSE

💬 Support


Built with ❤️ and shipped with ShipShipShip 🚢

Description
A lightweight, self-hostable changelog and roadmap web application that lets you share product updates with your community and gather feedback through voting on upcoming features. Built with SvelteKit and Go.
Readme Apache-2.0 3 MiB
Languages
Svelte 65.4%
Go 26.6%
TypeScript 4.6%
CSS 1.6%
Shell 0.8%
Other 1%