6.0 KiB
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 |
| GitHub | marclavergne/shipshipship |
| License | MIT |
| Langage | TypeScript (Next.js) |
| Étoiles GitHub | 290 ⭐ |
| Catégorie | Development, Product Launch |
| Référence | selfh.st 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é)
# 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
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
- OAuth GitHub (recommandé) : créer une app OAuth sur GitHub pour l'authentification des contributeurs et votes.
- NEXTAUTH_SECRET :
openssl rand -hex 50pour signer les sessions. - Branding : modifier
theme.config.tspour couleurs, logo, tagline — la page publique reflète votre marque. - Premier admin : créer un compte, se logguer, accéder à
/adminpour modérer les soumissions. - 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/voteet/api/submitpour é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_dbcontient les votes, commentaires et métadonnées produits.
📚 Ressources
🔗 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