⚙️ Dev / Intégrateur
⚙️

Astroport.ONE — Fat Protocol
décentralisé · Alternative à AWS/Azure

Noyau logiciel open-source : IPFS + NOSTR + Duniter/Ğ1 + rnostr + Qdrant. Une ♥️box remplace S3, Cognito, Lambda, DynamoDB — sans lock-in, sans GAFAM.

IPFS / uDRIVE (≈ S3) NOSTR NIP-42 (≈ Cognito) ASTROBOT (≈ Lambda) Duniter/Ğ1 (≈ Billing) rnostr (Rust relay) Qdrant (VectorKV) Paperclip / OpenWebUI IA cpscript / cpcode / todo.sh kind 30800/30850 N² relay mesh OpenCollective webhook
1 € → webhook OC → oc2uplanet.sh → 1 Ẑ on Duniter/Ğ1
🌐 Portail dev : u.copylaradio.com/dev  ·  📄 DEV.md : github/Astroport.ONE  ·  🔑 MULTIPASS test : zinkgo.copylaradio.com
⚡ Installer une ♥️box
bash <(curl -sL https://install.astroport.com)
🔀 Flux de données — Paiement → Ẑ → Services
💳
OpenCollective
Paiement € SEPA/CB sécurisé
POST /webhooks/OC
🔧
oc2uplanet.sh
Vérif HMAC · Parse tier · Route émission
Bash script · cron mensuel
⛓️
Duniter API
Émission ẐEN/ẑen sur clé Ğ1 du contributeur
POST /tx/process
📱
Ẑinkgo / App
Interface client MULTIPASS — création de clé, affichage solde, paiement services
🔄 Correspondance AWS/Azure → UPlanet · voir u.copylaradio.com/dev
DEV.md — table de migration
AWS / AzureUPlanet / Astroport.ONEAvantage
S3IPFS / uDRIVEStockage décentralisé, no lock-in
Cognito / FirebaseNOSTR Card (NIP-42)Auth sans serveur, souveraineté
Lambda / FunctionsASTROBOT (scripts)Programmable, open-source, bash
DynamoDB / CosmosDBNOSTR events + IPFSIndexation flexible, géolocalisée
IAMCtrl clé NOSTR/IPNSPermissions natives, sans tiers
BillingẐen stablecoinCoût prévisible, sans surprise
🤖 Outils Dev IA — Préparer & automatiser les prompts
cpscript
Regroupe un script et toutes ses dépendances dans le presse-papiers pour alimenter un LLM. Analyse récursivement les .sh, .py, .html, .js.
cpscript --json --depth 2 mon_script.sh
cpcode
Regroupe des fichiers par extension dans le presse-papiers. Idéal pour passer tous les .py ou .sh d'un répertoire à un assistant IA.
cpcode sh py ./UPassport/
code_assistant + todo.sh
Pipeline analyse → correction → contrôle via modèles Ollama locaux (deepseek-r1, qwen2.5-coder). todo.sh génère le TODO depuis les commits Git avec mémoire N² NOSTR.
code_assistant mon.py --phase analyse --kvbasename s1
Flux code_assistant
# Phase 1 : analyse (deepseek-r1:14b identifie 3 problèmes)
code_assistant 54321.py --kvbasename upassport

# Phase 2 : correction du problème 2 (qwen2.5-coder:14b propose a/b/c)
code_assistant 54321.py --kvbasename upassport --phase correction --choice 2

# Phase 3 : contrôle + application directe dans le fichier
code_assistant 54321.py --kvbasename upassport --phase controle --choice a --patch

# Générer le rapport TODO depuis les commits Git (avec mémoire N² constellation)
todo.sh --day   # analyse 24h, publie en NOSTR kind 30023
🧠 R&D Stack IA — Communication & Tech
🏢
AI Company Stack (R&D Market)
Paperclip + OpenWebUI + LiteLLM + Qdrant en stack Docker. Gestion des agents IA pour la communication et le marketing du G1FabLab.
~/.zen/Astroport.ONE/install/install-ai-company.docker.sh

Accès : http://localhost:3100 (Paperclip) · http://localhost:8000 (OpenWebUI)
🔍
rnostr + Qdrant Sémantique (R&D Tech)
🚧 EN COURS DE DÉVELOPPEMENT
Remplacement de strfry (Bash) par rnostr (Rust) + base vectorielle Qdrant appliquée au flux NOSTR. IA personnelles plus fiables via recherche sémantique sur les événements.
~/.zen/Astroport.ONE/install/install_rnostr_semantic.sh

Embedding : Ollama nomic-embed-text via IA/embed.py — actif après BLOOM.me
install-ai-company.docker.sh — démarrage rapide
# Déployer la stack AI Company (Paperclip + OpenWebUI + LiteLLM + Qdrant)
~/.zen/Astroport.ONE/install/install-ai-company.docker.sh

# Relancer/arrêter
docker compose -p ai-company-swarm restart

# Remplacer strfry par rnostr + activer Qdrant sémantique
~/.zen/Astroport.ONE/install/install_rnostr_semantic.sh

# Indexer des événements NOSTR dans Qdrant
python3 IA/embed.py --index "kind:1 author:NPUB"
python3 IA/embed.py --search "économie coopérative Ğ1"
📄 Schéma des clés administratives
🧑‍✈️
CAPTAIN KEY
Clé Ğ1 personnelle du Capitaine (la personne physique qui opère la station). Signe les événements NOSTR kind 30800 (config coopérative) et kind 30850 (économie). Différente de uplanet.G1.
G1pub: CAPTAING1PUB…
ARMATEUR / UPLANET.G1
L'Armateur est la personne qui héberge et maintient la station online (infrastructure physique). Son loyer = 1×PAF/semaine depuis CASHNODEG1PUB.

UPLANETNAME_G1 est le portefeuille central de l'essaim — émission et récupération des Ẑ (RESTITUTION:INDEMNISATION). Les burns PAF 4 semaines lui reviennent avant conversion en €.
G1pub: UPLANETNAME_G1 (central)…
💳
ZEN CARD KEY
Clé du Parrain Co-Bâtisseur. Reçoit les ẐEN majuscules (jeton de propriété Capex). Distribue automatiquement 33/33/33/1%.
G1pub: GZenCXXXX…
🎫
MULTIPASS KEY
Clé de l'usager. Reçoit les ẑen minuscules (jeton d'usage Opex). Utilisée pour payer les services cloud hebdomadairement.
G1pub: GMPassXXXX…
🌐
RELAY NOSTR KEY
Clé du nœud relai NOSTR de la station. Utilisée dans le protocole N² pour authentifier les événements de diffusion.
npub: npub1XXXX…
🔒
OC WEBHOOK SECRET
HMAC secret partagé avec OpenCollective. Valide l'authenticité des webhooks entrants avant toute émission de ẐEN.
env: OC_WEBHOOK_SECRET
💻 Exemple webhook → émission ẐEN
oc2uplanet.sh (extrait)
# 1. Vérification HMAC OpenCollective
verify_hmac() {
  local sig="$(echo -n "$BODY" | openssl dgst -sha256 -hmac "$OC_SECRET")"
  [[ "$sig" == "$OC_SIG" ]] || exit 1
}

# 2. Parse du tier et du montant
TIER=$(jq -r '.data.order.tier.slug' <<< "$BODY")
AMOUNT=$(jq -r '.data.order.totalAmount.value' <<< "$BODY")
G1PUB=$(jq -r '.data.fromAccount.description' <<< "$BODY")

# 3. Émission ẐEN sur Duniter selon le tier
case "$TIER" in
  "love-box-le-claude")     emit_zencard "$G1PUB" 50 ;;
  "love-box-deluxe-gpu")    emit_zencard "$G1PUB" 540 ;;
  "cloud-usage")             emit_multipass "$G1PUB" "$AMOUNT" ;;
  "membre-resident")         queue_monthly_multipass "$G1PUB" "$AMOUNT" ;;
esac

# 4. Distribution ZEN Card : 33/33/33/1
distribute_zencard() {
  transfer "$G1PUB_MULTIPASS" $(( AMOUNT * 33 / 100 ))
  transfer "$G1PUB_RND"       $(( AMOUNT * 33 / 100 ))
  transfer "$G1PUB_ACTIFS"    $(( AMOUNT * 33 / 100 ))
  transfer "$G1PUB_CAPTAIN"   $(( AMOUNT * 1  / 100 ))
}
NOSTR kind 30850 broadcast
# Publié par ECONOMY.broadcast.sh — lu par contribute.html
{
  "kind": 30850,
  "tags": [["d", "station-economy"]],
  "content": {
    "nostr_slots": 250,   // MULTIPASS capacity
    "nostr_count": 142,   // MULTIPASS used
    "zencard_slots": 24,  // ZEN Card capacity
    "zencard_count": 7,   // ZEN Card used
    "BILAN": 1247.5,      // Solde station en Ẑ
    "NCARD": 3            // ẑen/sem inclus membres
  }
}
Node ID
MULTIPASS slots
ZEN Card slots
Bilan Ẑ

📡 Protocole N² — Diffusion NOSTR

f(N) = N × N = N²
Chaque station Astroport agit comme relai NOSTR NIP-01. Lors d'une publication, l'utilisateur envoie vers ses N relais configurés (ses "amis"). Chaque relai propage à son tour vers ses N abonnés. Résultat : N × N = N² chemins de diffusion garantis pour atteindre les "amis des amis". Plus le réseau croît, plus la résilience est quadratique — sans serveur central. La configuration des relais voisins est stockée en kind 3 (contact list) sur chaque nœud Astroport.

Distribution automatique on-chain — Flux Sociétaire ZEN Card (UPLANET.official.sh -s)

33%
33%
33%
1%
33% → UPLANETG1PUB transit → G1PUBNOSTR MULTIPASS du Parrain (Opex circulaire)
33% → UPLANETNAME_RND (Astroport.ONE R&D)
33% → UPLANETNAME_ASSETS (forêts-jardins, biens communs)
1% → CAPTAING1PUB MULTIPASS personnel du Capitaine (prime gestion)
⚠️ Flux distinct : ZEN.COOPERATIVE.3x1-3.sh gère la répartition hebdomadaire des loyers MULTIPASS (depuis CAPTAIN_DEDICATEDCASH + RND + ASSETS + 1% après provision IS).
🛠️ Dev FAQ
Comment installer une ♥️box Astroport.ONE en une commande ?
Une seule ligne suffit : bash <(curl -sL https://install.astroport.com). Le script installe automatiquement : IPFS (kubo), relai NOSTR (strfry), UPassport API (port 54321), G1BILLET, Prometheus, Flutter SDK avec systemd, pare-feu UFW et sudoers. Pré-requis : Ubuntu/Debian + accès sudo. Après installation, envoyez un email à support@qo-op.com avec votre GMARKMAIL et hostname pour être validé (primo-transaction Ğ1 requise). Alternative : u.copylaradio.com/dev pour tester les API sans nœud local.
Comment utiliser cpscript/cpcode pour préparer des prompts LLM ?
cpscript analyse récursivement un fichier et regroupe le script + ses dépendances dans le presse-papiers. cpcode regroupe tous les fichiers d'une extension dans un répertoire. code_assistant orchestre les phases analyse → correction → contrôle via Ollama local (deepseek-r1 : analyse, qwen2.5-coder : correction). todo.sh génère un rapport TODO depuis les commits Git avec mémoire N² constellation (kind 31910). Ces outils s'installent avec Astroport.ONE dans ~/.zen/Astroport.ONE/.
Comment déployer la stack AI Company (Paperclip/OpenWebUI) ?
Lancez install/install-ai-company.docker.sh. La stack Docker comprend : Paperclip (gestion agents IA, port 3100), OpenWebUI (gateway + tools, port 8000), LiteLLM (proxy modèles, port 8001), Qdrant (mémoire vectorielle, port 6333). Ollama tourne sur l'hôte — les conteneurs y accèdent via le bridge Docker. Bootstrap admin : docker exec -it ai-company-swarm-paperclip-1 pnpm paperclipai onboard. Destinée à la R&D market (communication G1FabLab).
🚧 rnostr (Rust) + Qdrant sémantique — état d'avancement ?
⚠️ En cours de développement — ne pas utiliser en production. Le script install/install_rnostr_semantic.sh est fonctionnel pour les tests mais la migration des filtres bash strfry vers les règles Rust rnostr n'est pas encore complète. Les embeddings NOSTR dans Qdrant (IA/embed.py + nomic-embed-text) nécessitent l'activation de l'essaim IPFS privé (BLOOM.me → DRAGON_p2p_ssh.sh). Si vous voulez contribuer : github.com/papiche/Astroport.ONE — issues ouvertes sur la migration strfry → rnostr.
Comment override les URLs OC depuis NOSTR kind 30800 ?
La page lit le relai local (getRelayUrl()) et souscrit au kind 30800 avec le d-tag cooperative-config. Si le contenu JSON contient les champs OC_URL_SATELLITE, OC_URL_CONSTELLATION, OC_URL_CLOUD ou OC_URL_MEMBRE, ils remplacent les URLs hardcodées. L'event est signé par la clé du Capitaine.
Comment déployer une station Astroport (♥️box) ?
Le projet Astroport.ONE (github.com/papiche/Astroport.ONE) fournit les scripts d'installation. La stack comprend : un nœud IPFS local, un relai NOSTR Strfry, les scripts oc2uplanet.sh (webhook), ECONOMY.broadcast.sh (cron relai), et l'interface web UPlanet. La station nécessite une clé Ğ1 active (Capitaine) et un accès OpenCollective pour recevoir les webhooks. Voir aussi le pipeline CI/CD dans DEV.md pour automatiser le déploiement via GitHub Actions.
La "comptabilité 3D" — qu'est-ce que ça veut dire concrètement ?
Les 3 axes : 1. Capex (ẐEN majuscules / ZEN Card — investissement infrastructure), 2. Opex (ẑen minuscules / MULTIPASS — frais opérationnels), 3. Communs (33% Actifs — biens durables). Chaque transaction on-chain Duniter encode l'axe via le commentaire. Le script ECONOMY.broadcast.sh agrège les 3 vecteurs via kind 30850 — lisible sans base centralisée. C'est ce qu'Excel ou Dolibarr ne peuvent pas faire nativement.
Comment tester localement sans nœud Duniter ?
Lancez un relai NOSTR local (ws://127.0.0.1:7777) — la page le détecte automatiquement. Pour simuler les données station, exposez un JSON compatible sur localhost:54321. Pour le webhook, utilisez ngrok et testez avec le payload OC via curl -X POST avec le header HMAC. En production, le portail u.copylaradio.com/dev permet de tester les appels API sans installation locale.