Skip to content

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.

License

Notifications You must be signed in to change notification settings

GauthierNelkinsky/ShipShipShip

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

96 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿšข ShipShipShip

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

License Go Version Node Version Docker

SSSBanner

๐Ÿ”— Links

โœจ 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

Docker (Recommended)

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

Access: 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:

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 ๐Ÿšข