Skip to content

Repository files navigation

Logo de Kinklist

Kinklist

Créez, explorez et partagez vos préférences dans un espace accessible et confidentiel.

Application Node.js Licence Accessibilité

Découvrir le site · Installation · Fonctionnalités · Confidentialité

Important

Kinklist est destiné à un public adulte et averti. La pratique doit toujours rester consensuelle, sûre et respectueuse des limites physiques et mentales de chacun·e.

✨ Fonctionnalités

Fonctionnalité Description
📚 Deux niveaux de détail 172 pratiques essentielles en mode Basique, ou 1 014 entrées réparties dans 45 catégories en mode Complet
🎯 Six niveaux d'intérêt De « J'adore » à « Hard Limit », avec une forme distincte pour chaque statut
↔️ Rôles Donne/Reçois Indiquez si vous donnez, recevez ou alternez pour chaque pratique
🔎 Recherche instantanée Retrouvez rapidement une pratique dans l'ensemble de la liste
🔗 Partage sécurisé Créez un lien court contenant vos sélections, vos rôles et les informations renseignées
🖼️ Export en image Générez une image haute qualité, lisible et prête à être partagée
💾 Sauvegarde locale Retrouvez automatiquement vos préférences dans votre navigateur
📱 Interface responsive Utilisable sur mobile, tablette et ordinateur

♿ Une interface accessible

La couleur n'est jamais le seul moyen de transmettre une information. Chaque statut possède également une forme géométrique propre :

Symbole Statut Symbole Statut
J'adore J'aime
Curieux·se Peut-être
Non merci Hard Limit
Donne Reçois

L'application prend également en charge :

  • la navigation complète au clavier ;
  • les attributs ARIA pour les technologies d'assistance ;
  • un focus visible sur chaque contrôle interactif ;
  • les préférences prefers-reduced-motion et prefers-contrast ;
  • des infobulles explicites sur les icônes.

Raccourcis clavier

Touche Action
Tab / Maj + Tab Naviguer entre les éléments
Entrée / Espace Activer le contrôle sélectionné
1 à 6 Choisir rapidement un statut

🚀 Installation

Avec Node.js

Prérequis : Node.js 18 ou supérieur.

git clone <url-du-depot>
cd Kinklist
npm install
npm start

L'application est ensuite disponible sur http://localhost:3000.

Note

Le serveur est nécessaire pour créer et ouvrir les liens courts. Une ouverture directe de index.html en file:// conserve les fonctions locales, mais le partage ne sera pas disponible sans serveur.

Avec Docker

docker compose up -d
Afficher les commandes Docker utiles
# Voir les journaux
docker compose logs -f

# Reconstruire l'image
docker compose up -d --build

# Vérifier l'état des services
docker compose ps

# Arrêter l'application
docker compose down

🧭 Utilisation

  1. Choisissez le mode Basique ou Complet.
  2. Recherchez une pratique ou parcourez les catégories.
  3. Sélectionnez un statut, puis précisez éventuellement le rôle Donne ou Reçois.
  4. Exportez votre liste en image ou créez un lien de partage.

Changer de mode filtre uniquement l'affichage : les statuts et rôles déjà enregistrés restent conservés.

Partager une liste

Le bouton Partager envoie les données renseignées au serveur et copie un lien court dans le presse-papier :

https://kink.eldayia.fr/#s/A1b2C3d4E5f6

La personne qui ouvre le lien peut consulter les préférences et choisir de les importer. Aucun lien long de secours n'est généré si l'API est indisponible.

Exporter une image

Le bouton Exporter (Image) produit un fichier de moins de 5 Mo, limité à 4 096 px. L'application privilégie le PNG sans perte, puis le WebP haute qualité. Les catégories, libellés et rôles sont dessinés directement pour conserver une bonne lisibilité sur les réseaux sociaux.

🔒 Confidentialité

Principe Mise en œuvre
Local par défaut Les préférences restent dans localStorage tant qu'aucun lien n'est créé
Partage volontaire Seule la création d'un lien envoie les champs renseignés au serveur
Expiration Les partages expirent après 30 jours par défaut
Minimisation Les champs vides et rôles sans sélection associée ne sont pas conservés
Aucun pistage Aucun cookie, compte utilisateur ou outil d'analyse
Chiffrement En production, les données sont chiffrées avec AES-256-GCM

Caution

Toute personne disposant d'un lien peut consulter les informations qu'il contient. Ne partagez le lien qu'avec des personnes de confiance.

⚙️ Configuration

Copiez .env.example vers .env, puis adaptez les valeurs à votre environnement.

Variable Description Valeur par défaut
HOST_PORT Port publié sur la machine hôte 3000
NODE_ENV Active les protections destinées à la production production
SHARE_TTL_DAYS Durée de conservation de 1 à 365 jours ; 0 désactive l'expiration 30
ALLOWED_ORIGINS Origines CORS supplémentaires, séparées par des virgules https://kink.eldayia.fr
STATS_TOKEN Jeton Bearer de /api/stats ; la route est désactivée si la valeur est vide
DATA_ENCRYPTION_KEY Secret de 32 caractères minimum, obligatoire en production
DATA_DIR Répertoire du stockage JSON ./data
TRUST_PROXY À activer uniquement derrière un proxy de confiance false
Afficher un exemple de configuration
HOST_PORT=3000
NODE_ENV=production
SHARE_TTL_DAYS=30
ALLOWED_ORIGINS=https://kink.eldayia.fr
STATS_TOKEN=remplacez-moi-par-un-secret-long-et-aleatoire
DATA_ENCRYPTION_KEY=remplacez-moi-par-un-autre-secret-long-et-aleatoire
TRUST_PROXY=false

Générez deux secrets distincts avec openssl rand -hex 32. N'ajoutez jamais .env à Git et conservez DATA_ENCRYPTION_KEY avec vos sauvegardes : les partages chiffrés sont irrécupérables sans cette clé.

🧱 Architecture

Kinklist/
├── index.html           Interface HTML sémantique
├── style.css            Design responsive et icônes accessibles
├── script.js            Logique de l'application
├── kinks-data.js        Catalogue des pratiques
├── favicon.svg          Identité visuelle
├── server.js            Serveur Express et API REST
├── Dockerfile           Image de production
├── docker-compose.yml   Orchestration et volume persistant
└── data/                Stockage privé des partages

Technologies

  • Interface : HTML5, CSS3 et JavaScript vanilla ES6+
  • Persistance locale : Web Storage API
  • Export : Canvas API, avec repli vers html2canvas
  • Serveur : Node.js 18+ et Express
  • Identifiants : nanoid, 12 caractères alphanumériques (~71 bits d'entropie)
  • Sécurité : validation stricte, CSP, HSTS, CORS restreint, limitation du débit et AES-256-GCM
  • Déploiement : conteneur non-root, système de fichiers en lecture seule et health check

API

Méthode Route Description
POST /api/share Crée un partage court
GET /api/share/:id Récupère un partage
GET /api/health Vérifie l'état du serveur
GET /api/stats Retourne les statistiques avec un STATS_TOKEN valide

🧪 Outils de test

Une API privée exposée dans la console du navigateur permet de remplir la liste avec des données reproductibles :

// Remplir la liste avec la graine par défaut
window.__eldaKinkTest.fill()

// Utiliser une graine personnalisée
window.__eldaKinkTest.fill(12345)

// Ajouter également un profil fictif
window.__eldaKinkTest.fill(12345, true)

// Restaurer les données précédentes
window.__eldaKinkTest.restore()

Le premier appel à fill() sauvegarde les sélections, rôles et informations personnelles actuels. restore() rétablit cette sauvegarde puis la supprime.

🤝 Contribuer

Les contributions sont les bienvenues, notamment pour :

  • enrichir ou corriger le catalogue ;
  • améliorer l'accessibilité ;
  • proposer une fonctionnalité ;
  • corriger un dysfonctionnement.

Avant toute modification, veillez à préserver les formes distinctes des statuts, les attributs ARIA et la navigation au clavier.

📜 Licence

Ce projet est distribué sous licence MIT.


Fait avec ❤️ pour une communauté inclusive et respectueuse.
kink.eldayia.fr

About

Un site web moderne et accessible pour créer et partager votre kinklist (liste de préférences intimes).

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages