ShipShipShip
# ๐ข ShipShipShip A modern, self-hostable changelog and roadmap platform with emoji reactions, custom themes, and automated newsletters.     <img width="1280" height="832" alt="SSSBanner" src="https://github.com/user-attachments/assets/cc286bff-7838-4b35-b065-44ef3c99bc50" /> ## ๐ Links - **๐ [Website](https://shipshipship.io/)** - **๐ [Live Demo](https://demo.shipshipship.io/admin)** (Login: `demo` / `demo`) - **๐ณ [Docker Hub](https://hub.docker.com/r/nelkinsky/shipshipship)** ## โจ 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 (Recommended) ```bash 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 ```yaml 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 ```bash 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:** - Backend: http://localhost:8080 - Admin Dev: http://localhost:5173 ## โ๏ธ 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 ```bash # 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:** ```bash # 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":"[email protected]"}' ``` **Admin (requires JWT):** ```bash # 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](LICENSE) ## ๐ฌ Support - **Issues:** [GitHub Issues](https://github.com/GauthierNelkinsky/ShipShipShip/issues) - **Website:** [shipshipship.io](https://shipshipship.io/) - **Demo:** [demo.shipshipship.io](https://demo.shipshipship.io/) --- **Built with โค๏ธ and shipped with ShipShipShip** ๐ข