ponos

Ponos (du grec signifiant "travail", "effort") est un réseau professionnel européen qui met l'accent sur la simplicité et les connexions authentiques. Nous croyons qu'un réseau professionnel devrait être un outil, pas une distraction. C'est pourquoi nous avons conçu Ponos pour être minimaliste, rapide et respectueux de votre temps. Ponos s'inscrit dans une démarche d'autonomie européenne face aux grands acteurs géopolitiques, en proposant une alternative souveraine aux plateformes américaines et chinoises.

Active Pure Nim score 65/100 · last commit 2026-07-30 · 4 stars · tests present · no docs generated

Summary

Latest Version Unknown
License Unknown
CI Status Failing
Stars 4
Forks 1
Open Issues 0
Last Commit 2026-07-30
Downloads 0
Last Indexed 2026-08-09 05:03

Installation

nimble install ponos
choosenim install ponos
git clone https://gitlab.com/pablopernot/ponos

OS Compatibility

Platform Linux macOS Windows FreeBSD OpenBSD NetBSD Android iOS WASM Embedded
ponos - - - - - - -

Source

Repository https://gitlab.com/pablopernot/ponos
Homepage https://gitlab.com/pablopernot/ponos
Registry Source gitlab

README

Ponos - Reseau Social Professionnel

Version 0.3.0 | Reseau social professionnel minimaliste europeen.

Stack Technique

  • Frontend: Next.js 16 + React 19 + TypeScript
  • Backend: API Routes Next.js
  • Base de donnees: PostgreSQL (driver pg natif, SQL brut)
  • Styling: Tailwind CSS
  • Authentification: JWT + bcryptjs + cookies HttpOnly
  • Architecture: Hexagonale (Ports & Adapters)
  • Tests: pytest (API) + Playwright (E2E) + Vitest (unitaires)

Fonctionnalites

Publications

  • Posts limites a 140 caracteres (URLs comptees comme 20 caracteres)
  • Edition des posts (fenetre de 5 minutes)
  • Citations de posts
  • Hashtags cliquables (#Tech, #Dev)
  • Mentions d'utilisateurs (@nom)
  • Filtres du feed : Mon reseau / Tout le flux / Mentions

Social

  • Connexions entre utilisateurs (demandes avec message optionnel)
  • Le message de demande devient le premier message de conversation
  • Chat en temps reel (SSE) avec messages expires apres 3 mois
  • Abonnements aux utilisateurs et hashtags
  • Suggestions et questions a l'equipe

Profils

  • Profil public avec slug personnalise
  • Avatar (upload/suppression)
  • Experiences professionnelles
  • Liens externes (pointers)
  • Visibilite configurable
  • Flux RSS personnel

Federation

  • Crossposting vers Mastodon
  • Crossposting vers Bluesky

Connecteurs d'emploi

  • France Travail (offres d'emploi France)
  • FOREM (offres d'emploi Belgique)
  • BOAMP (marches publics)

Autres

  • Internationalisation (11 langues, incluant les emails)
  • Suppression de compte RGPD
  • Mode maintenance
  • Panel d'administration

Installation

Prerequis

  • Node.js 20+
  • PostgreSQL

Etapes

# 1. Cloner et installer
npm install

# 2. Configurer l'environnement
cp .env.example .env
# Editer .env avec vos valeurs

# 3. Generer le secret JWT
openssl rand -base64 32
# Copier dans NEXTAUTH_SECRET

# 4. Initialiser la base de donnees (migrations SQL, dans l'ordre)
for f in migrations-sql/migrations/*/migration.sql; do psql "$DATABASE_URL" -f "$f"; done

# 5. (Optionnel) Charger les donnees de test
npm run db:reset

# 6. Lancer le serveur
npm run dev

Le site sera accessible sur http://localhost:3000

Commandes

Developpement

Commande Description
npm run dev Serveur de developpement (Turbopack)
npm run build Build production (webpack)
npm run start Demarrer en production
npm run db:reset Reset + seed base de donnees
psql $DATABASE_URL Acces direct a la base

Tests

Commande Description
npm run agents:test Tests API (pytest)
npm run test:e2e Tests E2E (Playwright)
npm run test:unit Tests unitaires (Vitest)

Agents de qualite

Commande Description
npm run agents Tous les agents
npm run agents:security Audit securite (18 categories)
npm run agents:pentest Tests de penetration
npm run agents:test Tests automatiques (pytest)
npm run agents:perf Performance
npm run agents:a11y Accessibilite WCAG
npm run agents:i18n Verification traductions
npm run agents:charte Charte graphique
npm run agents:hardcode Detection valeurs hardcodees
npm run agents:optimize Optimisation code
npm run agents:loadtest Tests de charge (k6)
npm run agents:changelog Maintenance journal de bord
npm run agents:message-cleanup Nettoyage messages expires

Maintenance

Commande Description
npm run maintenance:on Activer mode maintenance
npm run maintenance:off Desactiver mode maintenance
npm run maintenance:attack Mode securite (attaque)

Connecteurs (cron)

Commande Description
npm run cron:france-travail Publier une offre France Travail
npm run cron:forem Publier une offre FOREM
npm run cron:boamp Publier un marche public
npm run cron:update-keywords Mettre a jour les mots-cles

Structure du projet

ponos/
├── app/                    # Pages et API Routes Next.js
   ├── api/                # API endpoints
      ├── auth/           # Authentification
      ├── admin/          # Administration
      ├── private/        # Routes authentifiees
      └── public/         # Routes publiques
   ├── feed/               # Page du feed
   ├── chat/               # Messagerie
   ├── admin/              # Panel admin
   └── ...
├── src/                    # Architecture hexagonale
   ├── domain/             # Coeur metier
      ├── models/         # Entites
      ├── services/       # Services de domaine
      └── ports/          # Interfaces (contracts)
   ├── application/        # Cas d'utilisation
   └── infrastructure/     # Implementations
├── lib/                    # Utilitaires
   ├── config.ts           # Configuration centralisee
   ├── db.ts               # Pool PostgreSQL (pg)
   ├── auth.ts             # Authentification
   ├── validations.ts      # Schemas Zod
   ├── rate-limit.ts       # Rate limiting
   ├── email.ts            # Envoi d'emails
   └── i18n-server.ts      # Traductions serveur
├── components/             # Composants React
├── locales/                # Fichiers i18n (11 langues)
├── agents/                 # Agents de qualite
├── tests/                  # Tests API (pytest)
├── e2e/                    # Tests E2E (Playwright)
├── loadtests/              # Tests de charge (k6)
├── connecteurs/            # Connecteurs emploi
├── migrations-sql/                 # Schema et seeds
└── docs/                   # Documentation

API Endpoints (principales)

Authentification

  • POST /api/auth/register - Inscription
  • POST /api/auth/login - Connexion
  • POST /api/auth/logout - Deconnexion
  • POST /api/auth/forgot-password - Demander reset mot de passe
  • POST /api/auth/reset-password - Reinitialiser mot de passe
  • DELETE /api/account - Supprimer son compte (RGPD)

Posts

  • GET /api/posts - Liste des posts (pagination, filtres)
  • POST /api/private/posts - Creer un post
  • PUT /api/private/posts/[id] - Modifier un post
  • DELETE /api/private/posts/[id] - Supprimer un post

Connexions

  • GET /api/private/connections - Mes connexions
  • POST /api/private/connections - Demander une connexion
  • POST /api/private/connections/accept - Accepter
  • DELETE /api/private/connections - Supprimer

Chat

  • GET /api/chat/conversations - Mes conversations
  • POST /api/chat/conversations/[id]/messages - Envoyer un message
  • GET /api/chat/sse - Flux temps reel (SSE)

Profil

  • GET /api/public/profiles/[userId] - Profil public
  • PUT /api/private/profile - Modifier son profil
  • POST /api/avatar - Upload avatar

Configuration

Toutes les valeurs sont centralisees dans lib/config.ts :

Parametre Valeur Description
post.maxLength 140 Caracteres max par post
post.editWindowMinutes 5 Fenetre d'edition
post.urlFixedLength 20 Comptage URLs
message.maxLength 2000 Caracteres max par message
message.expirationMonths 3 Expiration messages
pagination.postsPerPage 20 Posts par page

Securite

  • Validation Zod : Toutes les entrees API validees
  • Rate Limiting : Protection contre les abus
  • Protection CSRF : Verification origine des requetes
  • Cookies HttpOnly : Sessions non accessibles via JS
  • Headers de securite : X-Frame-Options, CSP, etc.
  • Hachage bcrypt : 12 rounds
  • Honeypot : Protection anti-bot inscription

Documentation

Licence

Ce projet est distribue sous licence GNU AGPL v3.