Files
wiki/Catalogue-Self-Hosted/apps/app-shipshipship.md
T
2026-06-09 18:40:21 +02:00

134 lines
6.0 KiB
Markdown

---
title: ShipShipShip
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, development, launch, product-hunt, marketing, landing]
confidence: high
contested: false
sources: [https://selfh.st/apps/?tag=Development, https://github.com/marclavergne/shipshipship]
---
# 💻 ShipShipShip
> **L'outil de « launch pages » self-hosted façon Product Hunt** — créez des pages de lancement stylées pour vos produits, avec vote, commentaires, file d'attente, badges « Top of the day », sans SaaS tiers.
## 📋 Informations Générales
| Champ | Valeur |
| :--- | :--- |
| **Site web** | [shipshipship.dev](https://shipshipship.dev/) |
| **GitHub** | [marclavergne/shipshipship](https://github.com/marclavergne/shipshipship) |
| **License** | MIT |
| **Langage** | TypeScript (Next.js) |
| **Étoiles GitHub** | 290 ⭐ |
| **Catégorie** | Development, Product Launch |
| **Référence** | [selfh.st Development](https://selfh.st/apps/?tag=Development) |
## 📝 Description
**ShipShipShip** est un **clone self-hosted de Product Hunt** (et de ses alternatives comme BetaList, Launching Next) : il permet de **créer des pages de lancement** pour vos produits, avec un système de **vote, classement, commentaires, badges**#1 Product of the Day ») et une **file d'attente** pour les lancements à venir.
Le concept est simple : quand on lance un nouveau produit (SaaS, app mobile, projet open source), on veut le mettre en avant sur une page dédiée, avec un effet « monday morning launch » à la Product Hunt. Les services existants (Product Hunt, BetaList) sont **cloud only**, payants ou imposés, et on n'a pas le contrôle du branding. ShipShipShip propose la même mécanique **chez soi**, avec votre propre nom de domaine, votre branding, vos propres règles.
L'outil est particulièrement adapté aux **indie hackers, studios indie et SaaS bootstrappés** qui lancent plusieurs produits par an et veulent un **hub de lancements** réutilisable. Possibilité d'**embed** la page sur son propre site, d'envoyer des **notifications email** aux abonnés à chaque nouveau produit, et de **tracker** les lancements passés (statut shipped / in queue).
**Fonctionnalités clés** : pages produits avec images, vidéos, tags, vote up/down, classement par jour/semaine/mois, commentaires, file d'attente, badges « Top of the Day », newsletter, custom CSS, multi-tenants (plusieurs pages de lancement sur une instance).
## 🚀 Installation
### Via Docker (recommandé)
```yaml
# docker-compose.yml
version: '3.8'
services:
shipshipship:
image: ghcr.io/marclavergne/shipshipship:latest
container_name: shipshipship
restart: unless-stopped
ports:
- "3000:3000"
environment:
DATABASE_URL: "postgresql://ship:***changeme***@db:5432/ship"
NEXTAUTH_URL: "https://launch.example.com"
NEXTAUTH_SECRET: "openssl-rand-hex-50"
GITHUB_ID: "***"
GITHUB_SECRET: "***"
SMTP_HOST: "smtp.example.com"
SMTP_PORT: 587
SMTP_USER: "noreply@example.com"
SMTP_PASS: "***"
SMTP_FROM: "noreply@example.com"
depends_on: [db]
labels:
- "traefik.enable=true"
- "traefik.http.routers.ship.rule=Host(`launch.example.com`)"
- "traefik.http.routers.ship.entrypoints=websecure"
- "traefik.http.routers.ship.tls.certresolver=letsencrypt"
db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_DB: ship
POSTGRES_USER: ship
POSTGRES_PASSWORD: ***changeme***
volumes:
- ship_db:/var/lib/postgresql/data
volumes:
ship_db:
```
### Installation manuelle
```bash
git clone https://github.com/marclavergne/shipshipship.git
cd shipshipship
pnpm install
cp .env.example .env.local # éditer DATABASE_URL, NEXTAUTH_*, SMTP_*
pnpm prisma migrate deploy
pnpm build && pnpm start
```
## ⚙️ Configuration
1. **OAuth GitHub** (recommandé) : créer une app OAuth sur GitHub pour l'authentification des contributeurs et votes.
2. **NEXTAUTH_SECRET** : `openssl rand -hex 50` pour signer les sessions.
3. **Branding** : modifier `theme.config.ts` pour couleurs, logo, tagline — la page publique reflète votre marque.
4. **Premier admin** : créer un compte, se logguer, accéder à `/admin` pour modérer les soumissions.
5. **Webhook de déploiement** (optionnel) : ping à chaque release pour auto-publier un nouveau produit.
## 🔗 Alternatives
- **Product Hunt** — Le référence, cloud only, audience massive mais algorithme opaque et pay-to-play.
- **BetaList** — Historique, orienté early-adopters, payant pour soumettre.
- **Launching Next** — Annuaire de lancements à venir, gratuit, pas self-hostable.
- **Peerlist Launches** — Nouveau venu, orienté dev, gratuit.
- **Une landing page Notion** — Solution minimaliste, sans dynamique de vote ni classement.
## 🔒 Sécurité
- 🔐 **HTTPS obligatoire** via [[app-traefik]] : OAuth, sessions et votes transitent en clair sinon.
- 🔒 **NEXTAUTH_SECRET robuste** : `openssl rand -hex 50`, sauvegarder hors-ligne.
- 🛡️ **Modération** : prévoir un workflow d'approbation pour éviter le spam et les lancements frauduleux.
- 🛡️ **Rate limiting** : activer un rate-limit sur `/api/vote` et `/api/submit` pour éviter les votes automatisés.
- 🛡️ **Anti-bot sur les votes** : ajouter un CAPTCHA ([[app-private-captcha]]) pour empêcher la triche au classement.
- 🛡️ **Backups PostgreSQL** : `ship_db` contient les votes, commentaires et métadonnées produits.
## 📚 Ressources
- [Site officiel](https://shipshipship.dev/)
- [Documentation](https://github.com/marclavergne/shipshipship#readme)
- [GitHub marclavergne/shipshipship](https://github.com/marclavergne/shipshipship)
- [Selfh.st — Development](https://selfh.st/apps/?tag=Development)
## 🔗 Pages Liées
- [[cat-development]] — Catégorie Development
- [[app-private-captcha]] — CAPTCHA self-hosted pour anti-bot sur les votes
- [[app-traefik]] — Reverse proxy HTTPS
- [[securisation-home-lab]] — Bonnes pratiques de sécurité
- [[recettes-docker-compose]] — Templates Docker Compose