This repository has no description
README.md

Vibe Atmosphere RSS Reader #

Lecteur RSS qui se connecte avec votre identité AT Protocol (Bluesky). Sans backend applicatif : l'application (web, desktop, mobile) parle directement à votre PDS. Les abonnements sont stockés sur votre PDS : portables et interopérables.

Architecture #

  • app/ — client Dioxus 0.7 en Rust, compilé pour web (wasm), Linux desktop, macOS, Windows et Android.
  • Pas de backend applicatif. Le client effectue lui-même le flow OAuth d'ATProto (PKCE + DPoP avec une clé ES256 locale) puis lit/écrit les abonnements via XRPC sur le PDS de l'utilisateur (collection at.glean.subscription, compatible avec le lecteur Glean). Les articles sont récupérés depuis les flux RSS/Atom : requête directe en natif, et via une fonction serveur du serveur Dioxus qui héberge l'app sur le web (les navigateurs bloquent la lecture cross-origin des flux sans en-têtes CORS). Le HTML est nettoyé côté client (ammonia). L'état « lu / non lu » reste local (IndexedDB sur le web, fichier JSON en natif).

Déclaration OAuth par plateforme #

  • Desktop / Android : client « loopback » du profil atproto — client_id = http://localhost, callback sur un listener éphémère http://127.0.0.1:<port>/callback. Aucune infrastructure.
  • Web : le client_id doit être une URL HTTPS publique qui sert un document de métadonnées. Le serveur fullstack expose ce document sur /client-metadata.json, généré à partir de la variable d'environnement VIBE_APP_ORIGIN (l'origine publique du déploiement, ex. https://mon-app.example.com). Définissez-la au lancement du binaire server produit par just build-web — aucun rebuild nécessaire pour changer d'origine.

Note : en développement web local (dx serve), les PDS publics ne peuvent pas récupérer vos métadonnées client ; testez le flow web après déploiement, ou utilisez le build desktop.

Prérequis #

  • Rust stable + cible wasm32-unknown-unknown
  • dx CLI
  • Pour le desktop Linux : webkit2gtk-4.1, gtk3, libsoup
  • Pour Android : Android SDK/NDK + cibles Rust correspondantes

Commandes #

cd app

# Vérifications rapides sans build complet
cargo check --features desktop
cargo check --target wasm32-unknown-unknown --features web
cargo test --features desktop

# web (wasm) — build fullstack : déploie en exécutant le binaire `server`
# produit (il sert l'app wasm et télécharge les flux côté serveur)
dx build --platform web --fullstack

# desktop Linux
dx build --platform desktop   # ou : cargo run --features desktop

# Android (nécessite le NDK configuré)
just build-android

Connexion (OAuth ATProto, sans backend) #

  1. Saisir son handle dans l'écran de connexion.
  2. L'app résout handle → DID → PDS → serveur d'autorisation, puis pousse une requête d'autorisation (PAR).
  3. Le navigateur s'ouvre sur la page d'autorisation du PDS.
  4. Au retour (reload sur le web, listener loopback en natif), l'échange de code se fait en DPoP et la session est stockée localement.

Les jetons sont rafraîchis automatiquement ; la déconnexion révoque le jeton côté serveur d'autorisation quand c'est possible.