Heavily customized version of smokesignal - https://whtwnd.com/kayrozen.com/3lpwe4ymowg2t
README.md

Plaque Tournante#

Une application de gestion d'événements et de RSVP basée sur ATProtocol.

À propos#

SmokeSignal est une plateforme événementielle décentralisée basée sur le protocole AT. Elle permet aux utilisateurs de créer des événements liés à leur identité ATProtocol, de gérer les RSVPs et de découvrir des événements sans biais algorithmique.

Ce projet sert de base au projet québécois Plaque Tournante, qui en est une adaptation francophone avec des fonctionnalités spécifiques à la communauté culturelle québécoise.

Fonctionnalités#

  • Création d'événements liés à votre identité ATProtocol
  • Gestion des RSVPs pour suivre la participation
  • Découverte d'événements sans biais algorithmique
  • Compatibilité multiplateforme grâce à l'ATProtocol
  • Options d'événements en présentiel, virtuels ou hybrides
  • Interface disponible en anglais et en français

Contribution#

Les contributions sont les bienvenues! Si vous souhaitez contribuer, n'hésitez pas à créer une pull request ou à ouvrir une issue pour discuter de vos idées.

Contact#

Pour toute question concernant ce projet, vous pouvez me contacter sur Bluesky: @plaquetournante.art

Licence#

Ce projet est disponible sous licence open source. Consultez le fichier LICENSE pour plus de détails.


À propos de Smoke Signal#

Version Licence

Smoke Signal est une application de gestion d'événements et de RSVP qui s'intègre avec le protocole AT (Bluesky). Elle permet aux utilisateurs de créer, gérer et répondre à des événements au sein de l'écosystème du protocole AT.

Architecture et Structure du Projet#

Smoke Signal suit une architecture d'application web moderne conçue pour la scalabilité et la maintenabilité:

Composants Principaux#

  • Serveur Web (Axum): Gère les requêtes et réponses HTTP en utilisant le framework Axum
  • Moteur de Template (MiniJinja): Génère des templates HTML avec contenu dynamique
  • Couche de Base de Données (SQLx): Toolkit SQL fournissant des interactions avec la base de données typées
  • Système d'Authentification: Authentification basée sur OAuth avec support du protocole AT
  • Internationalisation (i18n): Support multi-langues utilisant les bundles Fluent

Structure des Répertoires#

  • /src: Code source Rust
    • /bin: Exécutables binaires (smokesignal, crypto, resolve)
    • /http: Gestionnaires de routes HTTP et middlewares
    • /storage: Modèles de base de données et couche de persistance
    • /atproto: Implémentation spécifique au protocole AT
  • /templates: Templates HTML utilisant le système de templates MiniJinja
  • /static: Ressources statiques (CSS, JavaScript, images)
  • /i18n: Ressources d'internationalisation
  • /migrations: Migrations de base de données SQL
  • /playbooks: Guides opérationnels pour le déploiement et le développement
  • /fixtures: Données de test et fixtures

Modèle de Données#

Le modèle de données principal comprend:

  • Événements: Contient les détails de l'événement, l'emplacement, l'heure et autres métadonnées
  • RSVPs: Réponses des utilisateurs aux événements (participation, intéressé, non participation)
  • Utilisateurs: Profils utilisateurs et informations d'authentification

Fonctionnalités Principales en Détail#

  1. Intégration du Protocole AT

    • Se connecte de manière transparente avec les identités Bluesky
    • Utilise les DIDs (Identifiants Décentralisés) pour l'identification des utilisateurs
    • Supporte les flux d'authentification standard du protocole AT
  2. Système de Gestion d'Événements

    • Crée, met à jour et supprime des événements
    • Prend en charge les événements récurrents
    • Gère intelligemment les fuseaux horaires
    • Fournit une découverte d'événements basée sur la localisation
  3. Gestion des RSVP

    • Suit les réponses des utilisateurs aux événements
    • Fournit des notifications pour les mises à jour d'événements
    • Prend en charge des options de RSVP privées et publiques
  4. Interface Utilisateur Responsive

    • Design mobile-first utilisant le framework CSS Bulma
    • HTMX pour contenu dynamique sans JavaScript lourd
    • Amélioration progressive pour les utilisateurs sans JavaScript

Stack Technologique#

  • Backend: Rust avec le framework web Axum
  • Base de Données: PostgreSQL pour le stockage persistant
  • Mise en Cache: Redis/Valkey pour une récupération rapide des données
  • Frontend: Templates MiniJinja avec HTMX pour les interactions dynamiques
  • Authentification: Intégration OAuth avec le protocole AT

Prérequis#

  • Toolchain Rust (1.83+)
  • Base de données PostgreSQL
  • Redis ou Valkey pour le stockage clé-valeur
  • Docker (pour le déploiement conteneurisé)
  • SQLx CLI (cargo install sqlx-cli@0.8.2 --no-default-features --features postgres)

Démarrage#

Développement Local#

voir playbooks/localdev.md

Configuration#

Smoke signal est configuré via des variables d'environnement:

Variable Description Par défaut
DATABASE_URL URL de connexion PostgreSQL Obligatoire
REDIS_URL URL de connexion Redis/Valkey Obligatoire
EXTERNAL_BASE URL de base externe Obligatoire
HTTP_PORT Port du serveur HTTP 3100
HTTP_STATIC_PATH Chemin vers les ressources statiques /var/lib/smokesignal/static
PLC_HOSTNAME Nom d'hôte du service PLC Obligatoire
DNS_NAMESERVERS Serveurs DNS 8.8.8.8,1.1.1.1
SIGNING_KEYS Chemin vers le fichier de clés JWK Obligatoire
OAUTH_ACTIVE_KEYS Liste séparée par des virgules d'IDs JWK Obligatoire

Développement#

Compilation#

# Compilation de développement avec rechargement des templates
cargo build --bin smokesignal --no-default-features -F reload

# Compilation de production avec templates embarqués
cargo build --release --bin smokesignal --no-default-features -F embed

Tests#

# Exécuter tous les tests
cargo test

# Exécuter avec des fonctionnalités spécifiques
cargo test --no-default-features -F embed

Linting et Qualité de Code#

# Exécuter le linter clippy
cargo clippy

# Vérifier le formatage du code
cargo fmt --check

Publication#

Pour publier une nouvelle version de Smoke signal:

  1. Mettre à jour la version dans Cargo.toml
  2. Mettre à jour la version dans Dockerfile (LABEL org.opencontainers.image.version)
  3. Commiter les changements: git commit -m "release: X.Y.Z"
  4. Tagger le commit: git tag -s -m "vX.Y.Z" X.Y.Z
  5. Construire le conteneur: docker build -t repository/smokesignal:latest .

Licence#

Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.

Liens#