Backend Node.js/TypeScript pour le projet Plinkk, une alternative moderne à Linktree.
- Authentification (inscription, connexion, session sécurisée)
- Génération dynamique de profils utilisateurs
- API pour servir les assets, images, fichiers JS/CSS personnalisés
- Intégration avec Prisma (SQLite (pour le développement), PostgreSQL)
- Sécurité renforcée (bcrypt, validation Zod, cookies sécurisés)
- Rendu côté serveur avec EJS
- Fastify (serveur web)
- Prisma (ORM)
- SQLite (base de données)
- TypeScript
- EJS (templates)
- bcrypt (hash de mot de passe)
- Zod (validation)
-
Cloner le repo
git clone https://github.com/PlinkkCorp/plinkk-backend.git cd plinkk-backend
Bienvenue dans le backend de Plinkk (Node.js + TypeScript). Ce dépôt sert l'API, le rendu côté serveur (EJS) et les endpoints pour les pages « Plinkk ».
Badges: [build] [prisma] [node]
- Serveur rapide avec Fastify
- TypeScript + Prisma (client généré dans
generated/prisma/) - Templates EJS pour rendu serveur
- Auth (bcrypt, sessions sécurisées)
- Support multi-pages par utilisateur (slugs / index)
- Node.js 18+ (ou version LTS compatible)
- pnpm (recommandé) ou npm
- PostgreSQL (requis en production — configurez DATABASE_URL, ex :
postgresql://user:password@host:5432/dbname) - SQLite peut être utilisé localement uniquement pour du développement/test (fichier :
prisma/dev.db), mais la cible de déploiement est PostgreSQL
- Clonez le dépôt et entrez dans le dossier:
git clone https://github.com/PlinkkCorp/plinkk-backend.git
cd plinkk-backend- Installez les dépendances:
pnpm installBackend Node.js + TypeScript pour le projet Plinkk (service de pages de liens).
- Serveur web rapide (Fastify)
- Rendu serveur avec EJS
- TypeScript + Prisma (client dans
generated/prisma/) - Auth sécurisée (bcrypt + sessions)
- Support multi-pages par utilisateur (slugs / index)
- Node.js 18+ (ou LTS compatible)
- pnpm (recommandé) ou npm
- SQLite pour le développement (fichier:
prisma/dev.db) ; Postgres possible en production
- Clonez le dépôt et entrez dans le dossier:
git clone https://github.com/PlinkkCorp/plinkk-backend.git
cd plinkk-backend- Installez les dépendances:
pnpm install- Générez la clé secrète de session (si nécessaire):
pnpm run create-key- Préparez la base de données en développement:
pnpm prisma:devdb
# ou : pnpm prisma-db-push- Lancez le serveur en mode dev:
pnpm run dev
# Ouvrez ensuite http://localhost:3000PORT(ex: 3000)DATABASE_URL(dev:file:./prisma/dev.db; prod: Postgres URI)SESSION_KEY/SESSION_SECRET(générée avecpnpm run create-key)
Placez-les dans un fichier .env ou dans votre système d'environnement avant de lancer l'application.
pnpm run dev— développement (watch)pnpm run build— compilation TypeScriptpnpm run start— lancer la version compiléepnpm run create-key— génère une clé de sessionpnpm run prisma:devdb— applique migrations locales (développement)pnpm run prisma-db-push— push schema sans migrations
Consultez package.json pour la liste complète.
- Point d'entrée:
src/server.ts - Templates:
src/views/(EJS) - Static:
src/public/ - Prisma client:
generated/prisma/
Routage public principal:
/:username— page par défaut/:username/0ou/:username/default— page par défaut/:username/:index(1..N) — pages additionnelles/:username/:slug— page par slug
Dashboard (admin / utilisateur connecté):
/dashboard/plinkks— créer / modifier / supprimer / définir défaut / statistiques
Par défaut: 2 pages par utilisateur (modifiable selon rôle).
Le système de rôles est étendu via les modèles Role, Permission et RolePermission (voir packages/prisma/prisma/schema.prisma).
Champs additionnels sur Role:
isStaff: booléen permettant de distinguer le staff (accès admin).priority: ordre d'affichage / importance.maxPlinkks,maxThemes: quotas de créations par rôle.limits,meta: champs JSON libres pour futures extensions/quota/badges.
Permissions atomiques (ex: MANAGE_ROLES, BAN_USER, CREATE_THEME) sont catégorisées pour une interface ergonomique. La page d'administration /admin/roles permet:
- Création / suppression de rôles.
- Modification des paramètres du rôle (staff, quotas, priorité…).
- Ajout / retrait de permissions par clé.
- Visualisation de l'ensemble des permissions groupées par catégorie.
Définies dans packages/prisma/permissions.ts (source TypeScript) et packages/prisma/permissions.js (version runtime). Pour ajouter une permission:
- Ajouter l'entrée à
PERMISSIONS(clé unique en MAJUSCULES). npx prisma db push --schema=packages/prisma/prisma/schema.prismasi le schéma évolue.- Exécuter le seed:
node scripts/seed-permissions.js(met à jour rôles & permissions par défaut).
Après un clone fresh:
npx prisma db push --schema=packages/prisma/prisma/schema.prisma
node scripts/seed-permissions.jsPour vérifier si un utilisateur possède une permission donnée, récupérer son rôle puis ses permissions via Prisma, ou développer un helper (exemple pseudo-code):
async function userHasPermission(prisma, userId: string, key: string) {
const user = await prisma.user.findUnique({ where: { id: userId }, include: { role: { include: { permissions: true } } }});
return !!user?.role?.permissions?.find(p => p.permissionKey === key);
}/admin/roles (accès staff) — EJS + JS vanilla, modulaire et extensible. Ajoutez simplement de nouvelles permissions puis seed pour les voir apparaître.
- Schéma:
prisma/schema.prisma - Fichier dev SQLite:
prisma/dev.db - Migrations:
prisma/migrations/
Commandes fréquentes:
pnpm prisma:devdb # applique les migrations locales
pnpm prisma-generate # génère le client Prisma (postinstall)
pnpm prisma-db-push # push schema (avec --accept-data-loss si nécessaire)En production, utilisez Postgres et
pnpm prisma:migrate:deployounpx prisma migrate deploy.
- Hash des mots de passe: bcrypt
- Sessions signées/chiffrées (fastify-secure-session ou équivalent)
- Validation des entrées: Zod
Bonnes pratiques:
- Ne commitez jamais votre clé de session dans Git
- Activez HTTPS en production
- Construire:
pnpm run build - Démarrer:
pnpm run start - Assurez-vous que
DATABASE_URLpointe vers une DB accessible et que la clé de session est configurée
Exemple (container / CI):
pnpm install --prod
pnpm run build
NODE_ENV=production DATABASE_URL="postgresql://..." pnpm run start- Forkez & créez une branche
feature/xxxoufix/xxx - Respectez les linters / formatters (PRs clairs, petits commits)
- Tests: aucun test automatisé pour l'instant — contributions bienvenues
Si vous souhaitez ajouter des tests, proposez un petit set (Jest / Vitest) pour les handlers critiques.
- Erreur:
PrismaClientnon trouvé → exécutezpnpm prisma-generateoupnpm installpuispnpm prisma:devdb - Erreur: port occupé → changez
PORTou tuez le processus - Erreur: clé de session manquante → exécutez
pnpm run create-keyet exportez la variable
MIT — voir le fichier LICENSE.
- Email : contact@plinkk.fr
- Repo: Plinkk Backend
- Frontend: Plinkk Frontend