134 lines
6.0 KiB
Markdown
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
|