Graine v0.2.1 — documentation technique
TajNet
Documentation
Nœud personnel souverain : IPFS, Tajcoin (TAJ), Guard, Discover et économie de contenu.
Cette page centralise l'architecture, les routes API et la configuration du moteur.
Introduction
TajNet est un nœud souverain qui combine stockage IPFS, micro-paiements Tajcoin
et un panel web pour publier, annoncer et monétiser du contenu sans cloud centralisé.
| Composant | Rôle | Port par défaut |
| Core (Express) | API REST, proxy Matomo, gateway UI | 8090 |
| IPFS Kubo | Stockage CID, pinning | 5001 API · 8080 gateway |
| Tajcoin | Blockchain locale, OP_RETURN, TAJ | 12107 RPC · 10712 P2P |
| Matomo | Analytics (localhost/LAN uniquement) | 8888 |
| Guard | Sas payant avant upload/publish | via /api/guard/ |
| Discover | Index des annonces blockchain | via /api/discover/ |
Base URL API
Local : http://localhost:8090 · Production :
https://tajnet.cloud (Nginx + Let's Encrypt).
Référence complète : docs/REFERENCE-API.md.
Démarrage rapide
Installation locale
git clone <url-du-depot> tajnet
cd tajnet
cp .env.example .env
docker compose up -d --build
Accès aux interfaces
| URL | Description | Accès WAN |
/ | Cette documentation | Oui |
/panel/ | TajPanel — tableau de bord | Oui (tajnet.cloud) |
/editor | Éditeur GrapesJS | Idem |
/wallet/ | Wallet MetaMask | Idem |
/view/?txid=… | Fiche contenu Discover | Oui |
/futuremen/ | Futuremen HQ — chronique Discover (recherche + pagination) | Oui |
/pulse/ | Pulse — maillage TajNet LAN (FM-006) | Non (localhost/LAN) |
/ipfs/<CID> | Gateway contenu | Oui |
/matomo/ | Proxy analytics | Non (localhost/LAN) |
Accès distant (tunnel SSH)
ssh -N -L 8090:127.0.0.1:8090 user@serveur
# Puis : http://localhost:8090
MetaMask obligatoire en WAN
Depuis Internet, les paiements TAJ (Guard, pinning, staking) passent par MetaMask.
Le wallet fichier nœud (tajpanel) reste réservé à localhost.
État du nœud
Données en direct depuis GET /api/status (rafraîchi toutes les 20 s).
Architecture
Le moteur core/bridge.js orchestre les services et expose l'API REST.
Navigateur
│
▼
TajNet Core (:8090) ── express
│
├── /panel/ TajPanel (app.js)
├── /editor GrapesJS + publish (UI mobile : tiroirs bas)
├── /futuremen/ Chronique Discover live (API feed)
├── /wallet/ MetaMask auth
├── /view/ Fiche contenu + métriques
├── /matomo/ Proxy → Matomo (:8888) [LAN/local]
├── /ipfs/<CID> Gateway + compteur vues
│
├── /api/status État global
├── /api/guard/ Sas upload
├── /api/discover/ Index blockchain
├── /api/pin-service/ Pinning payant
├── /api/content-staking/ Investissement contenu
├── /api/content-metrics/ Vues & score
└── /api/wallet/ Sessions MetaMask + wallet nœud
│
┌───────┴────────┐
▼ ▼
IPFS :5001 Tajcoin :12107
(data/pins) (wallet.dat, OP_RETURN)
Structure du dépôt
tajnet/
├── core/ Moteur Express (bridge.js, lib/, routes/)
├── panel/
│ ├── landing/ Page d'accueil (/) — doc (full) ou thèmes (public)
│ │ ├── themes/ Thèmes music · heritage (édition public)
│ │ └── presets/ Profils JSON (lastfm, raspberry, …)
│ ├── src/ TajPanel (/panel/)
│ ├── editor/ Éditeur GrapesJS
│ ├── futuremen/ Futuremen HQ — chronique Discover live
│ ├── view/ Fiche contenu
│ └── wallet/ Wallet UI
├── data/ Persistance (Discover, pins, metrics, landing)
├── plugins/ Extensions (super-cv, bran-web)
├── scripts/ deploy-vps.sh, deploy-public-node.sh, enable-vps-domain.sh
└── docker-compose.yml
Interfaces & URLs
| Chemin | Fichier source | Description |
/ | panel/landing/ | Documentation (édition full) ou landing thématique (public) |
/panel/ | panel/src/ | Dashboard opérateur & visiteurs |
/editor | panel/editor/ | Création pages HTML → IPFS (mobile ≤768 px) |
/futuremen/ | panel/futuremen/ | Futuremen HQ — chronique Discover (/api/futuremen/feed) |
/view/ | panel/view/ | Fiche contenu + réclamation lecteur |
/wallet/ | panel/wallet/ | Connexion MetaMask, envoi TAJ |
/api/… | core/routes/ | API REST JSON |
Headers HTTP utiles
| Header | Usage |
X-Guard-Session | Session Guard validée (upload, publish) |
X-Wallet-Session | Session wallet MetaMask |
X-Forwarded-For | IP client (avec TRUST_PROXY=1) |
Page d'accueil & thèmes
La route / sert une page HTML selon l'édition du nœud et le champ
theme du profil landing (data/landing/profile.json).
| Édition | TAJNET_EDITION | Page / | Futuremen |
| Full (dev / tajnet.cloud) | full ou absent | Cette documentation | /futuremen/ — siège HQ |
| Public (release GitHub) | public | Landing i18n ou thème | Non servi |
Thèmes landing (édition public)
Si theme vaut music ou heritage, le core sert
panel/landing/themes/<theme>/index.html au lieu de la doc ou de la landing i18n générique.
| Thème | Nœud type | Agents Futuremen | Preset |
music | lastfm (IPFS hôte) | Echo, Abel, Scriptor | panel/landing/presets/lastfm.profile.json |
heritage | raspberry (Tajcoin hôte ARM) | Tamara, Olga, Anna | panel/landing/presets/raspberry.profile.json |
Appliquer un preset
# Sur le nœud cible (localhost ou via deploy-public-node.sh)
./scripts/apply-landing-preset.sh lastfm
./scripts/apply-landing-preset.sh raspberry [data_dir]
Le déploiement public applique automatiquement le preset selon le slug du fichier credentials
(secrets/nodes/lastfm.env → thème music, etc.).
Personnalisation
- Panel → Administration opérateur → Page d'accueil (localhost / tunnel SSH)
- API :
GET /api/landing/profile · PUT /api/landing/profile (localhost)
- Champs clés :
nodeName, heroTitle, primaryCtaUrl, theme, agents[]
Zones réseau & sécurité
Détection par IP client dans core/lib/request-local.js :
localhost, lan (RFC1918) ou wan.
| Zone | Panel / éditeur | Wallet nœud | Matomo | Pin local gratuit |
| localhost | Oui | Oui | Oui | Oui |
| LAN | Oui | Non* | Oui | Non |
| WAN | Si VPS | Jamais | Jamais | Non |
* Sauf WALLET_LOCAL_LAN=true (dev uniquement).
Variables réseau
| Variable | Effet |
TAJNODE_MODE=vps | Panel, éditeur, wallet UI accessibles sur Internet |
PUBLIC_PANEL=true | Alias de TAJNODE_MODE=vps |
WAN_PANEL_ACCESS=true | Panel WAN — Matomo reste LAN/local |
WALLET_LOCAL_LAN=true | Wallet nœud depuis LAN (jamais WAN) |
TRUST_PROXY=1 | Détection IP derrière Nginx/Caddy |
Routes bloquées sur WAN sans VPS
/panel/, /editor, /wallet/ → HTTP 403.
Matomo /matomo/ → 403 sur WAN même avec WAN_PANEL_ACCESS=true.
Économie contenu
Quatre profils complémentaires autour du contenu épinglé sur le nœud. Un même acteur peut en cumuler plusieurs — par exemple un hébergeur qui crée son contenu, stake dessus pour le mettre en avant et perçoit à long terme les parts créateur, hébergeur et investisseur.
Créateur
Publie le contenu et ouvre la cagnotte (escrow à l'annonce). Reçoit 25 % de chaque réclamation versée au créateur.
Lecteur
Consulte le contenu épinglé et réclame sa part (25 % du lot, 0,125 TAJ sur 0,5 TAJ) — sans payer.
Contributeur
Aime le contenu et apporte le revenu : donateur (don pinning) ou investisseur (stake). Peut être un tiers — ou le créateur / l'hébergeur sur son propre contenu pour le booster.
Hébergeur
Nœud qui stocke et sert le contenu épinglé. Reçoit 25 % de chaque réclamation (HOST_REWARD_ACCOUNT).
Score contenu
Indicateur interne (visites, soutiens payants, réclamants). Alimente le rendement staking et le classement Discover.
Ratio de valorisation (boostScore = score ÷ vues) : TajNet met en avant les contenus les mieux valorisés par rapport à leur audience — un créateur-hébergeur qui investit sur son propre contenu peut remonter même avec peu de vues initiales.
Mise en avant Discover
Tri : d'abord cagnottes / réclamations disponibles, puis boostScore décroissant, puis hauteur de bloc.
Compteur de vues
- +1 sur fiche
/view/resolve
- +1 sur accès direct gateway
/ipfs/<CID> (hors iframe aperçu)
recordViewer n'incrémente pas les vues (attestation MetaMask seulement)
Répartition des revenus (0,5 TAJ)
Chaque réclamation depuis la cagnotte distribue 0,5 TAJ en quatre parts égales.
Les contributeurs donateurs (don pinning) alimentent cette cagnotte — ce ne sont pas les bénéficiaires de la part « créateur ».
| Part (25 %) | Bénéficiaire |
| Créateur | publisherAddress — auteur du contenu publié |
| Lecteur | Adresse MetaMask qui consulte et réclame (sans avoir payé le pinning) |
| Hébergeur | Nœud local (HOST_REWARD_ACCOUNT, défaut tajpanel) |
| Investisseur | Stakes actifs (contributeur en mode investissement, prorata) — sinon réserve investisseur |
Éligibilité réclamation
- Contenu épinglé localement (
getLocalPin)
- Adresse a consulté le contenu (
hasViewer)
- Cagnotte ≥ 0,5 TAJ
- Pas déjà réclamé pour cette adresse
Futuremen HQ — chronique live
Page corporate (timeline 2047, Michael & Olga) qui agrège le corpus Discover en direct
depuis le nœud local et les nœuds partenaires (FUTUREMEN_NODE_URLS).
Disponible uniquement en édition full (ex. tajnet.cloud/futuremen/).
| Accès | Description |
/futuremen/ | Interface Futuremen HQ servie par le core |
GET /api/futuremen/feed | Flux JSON fusionné (dédoublonnage par contentCid) |
Interface
- Organigramme des 11 agents Futuremen (portraits officiels du siège)
- Chronique triée par
boostScore — badges nœud source, filtres par source
- Recherche client-side (titre, description, nœud, CID, protocole, type) — tokens multiples
- Pagination — 12 transmissions par page, navigation Précédent / Suivant
- Liens vers Documentation (
/) et TajPanel (/panel/) dans la nav, le hero et le footer
- Liens fiche vers
/view?txid=… sur l'origine publique (FUTUREMEN_PUBLIC_ORIGIN)
- Bouton Rafraîchir — recharge le flux sans redéployer
- Mobile : barre corporate masquée ; accès Docs / TajPanel conservé
- Liens GitHub discrets en pied de page uniquement (
tajnet-public, Taj-Coin)
- Tracking Matomo injecté (
MATOMO_PUBLIC_URL ou {DISCOVER_NODE_ENDPOINT}/matomo/)
Configuration multi-nœuds
FUTUREMEN_NODE_URLS=https://tajnet.cloud|São Paulo,http://127.0.0.1:8090|localhost
FUTUREMEN_PUBLIC_ORIGIN=https://tajnet.cloud
Agents lore
Scriptor (index), Echo (narration), Circuit (CID), Vortex (tri métriques) —
voir brain/AGENTS.md.
API — Système & statut
| Méthode | Route | Description |
| GET | /api/status | État moteur, IPFS, Tajcoin, Matomo, discover, sécurité réseau |
| GET | /api/plugins | Liste des plugins |
| GET | /api/landing/profile | Profil page d'accueil |
| PUT | /api/landing/profile | Met à jour le profil — localhost |
Champs notables de /api/status
| Champ | Description |
requestZone | localhost | lan | wan |
tajnodeMode | local | vps |
localWalletAllowed | Wallet nœud autorisé pour cette requête |
matomo.restricted | true sur WAN — admin Matomo bloqué ; trackingUrl / trackingSnippet restent disponibles |
matomo.trackingSnippet | Snippet public à copier (ne pas utiliser celui de l'admin tunnel localhost) |
tls.fingerprintSha256 | Empreinte certificat HTTPS |
landing | Profil page d'accueil |
API — IPFS & publication
| Méthode | Route | Description |
| POST | /api/ipfs/upload | Upload fichier → CID — 402 sans Guard |
| POST | /api/publish | Publie page HTML GrapesJS + annonce |
| GET | /api/editor/config | Config gateway, Matomo, Guard pour l'éditeur |
| GET | /api/announce/status | Compte tajannounce, solde |
Flux annonce : metadata JSON sur IPFS → transaction OP_RETURN (TAJ + type + CID).
API — Discover
| Méthode | Route | Description |
| GET | /api/discover/status | État index |
| GET | /api/discover/entries | Liste / recherche |
| GET | /api/discover/entries/:txid | Détail entrée |
| POST | /api/discover/entries/:txid/pin | Pin local — localhost |
| POST | /api/discover/entries/:txid/pin-request | Session pinning payant (contributeur donateur) |
| POST | /api/discover/entries/:txid/view | Attestation consultation |
| GET | /api/discover/entries/:txid/claim-eligibility | Éligibilité réclamation |
| POST | /api/discover/entries/:txid/claim | Réclamation récompense |
| GET | /api/discover/pins | Pins locaux |
| POST | /api/discover/scan | Force scan blocs |
API — Staking & métriques
Content metrics — /api/content-metrics/
| Méthode | Route | Description |
| GET | /status | État store métriques |
| GET | /:contentCid | Vues, score, boostScore, payeurs, réclamants |
Content staking — /api/content-staking/
| Méthode | Route | Description |
| GET | /status | Périodes (1m–12m), APY base, min stake |
| GET | /content/:contentCid | Résumé staking pour un CID |
| POST | /preview | Estimation rendement { contentCid, amount, periodId } |
| POST | /request | Crée session staking (MetaMask requis) |
| GET | /session/:id | État session |
| POST | /session/:id/check | Vérifie paiement + finalise |
| GET | /stakes | Liste stakes (?contentCid= ou adresse) |
Périodes : 1 mois (×1,0), 3 mois (×1,15), 6 mois (×1,35), 12 mois (×1,6). Min. STAKE_MIN_TAJ (défaut 1 TAJ).
API — Paiements & Guard
Guard — /api/guard/
| Méthode | Route | Description |
| GET | /status | État global, sessions, prix |
| POST | /session | Crée session paiement Guard |
| POST | /pay | Paiement intégré wallet nœud |
| POST | /check | Scan blockchain session |
Pin service — /api/pin-service/
| Méthode | Route | Description |
| POST | /request | Session pinning { contentCid } |
| POST | /pay | Paiement pinning |
| POST | /session/:id/check | Vérifie + exécute pin |
Paiements unifiés — /api/payments/
| Méthode | Route | Description |
| GET | /services | Catalogue services payants |
| GET | /options | Solde compte tajpanel |
| POST | /fund | Alimente tajannounce ou tajpanel |
Pin rewards — /api/pin-rewards/
| Méthode | Route | Description |
| GET | /status | Auto-pay, escrow, compteurs |
| POST | /claim | Règlement réclamation visiteur |
API — Wallet & admin opérateur
Wallet MetaMask — /api/wallet/
| Méthode | Route | Description |
| POST | /auth/login | Connexion MetaMask |
| GET | /auth/session | Session courante |
| GET | /local | Wallet nœud — localhost |
| POST | /send | Envoi TAJ |
Admin localhost — /api/tajcoin/wallet/ & peers
| Méthode | Route | Description |
| GET | /api/tajcoin/wallet/export | Télécharge wallet.dat |
| POST | /api/tajcoin/wallet/import | Import multipart wallet |
| GET/POST/DELETE | /api/tajcoin/nodes/ | Gestion addnode dans tajcoin.conf |
Super CV
GET /api/super-cv/search?q=&skills= — index sémantique de profils PDF/TXT.
Variables d'environnement
Fichier modèle : .env.example. Principales variables :
| Variable | Défaut | Description |
TAJNET_EDITION | full | full (doc + Futuremen) ou public (landing i18n / thèmes) |
FUTUREMEN_NODE_URLS | — | Nœuds distants à fusionner dans le flux (url|label, virgules) |
FUTUREMEN_PUBLIC_ORIGIN | tajnet.cloud | Origine canonique des liens fiche Discover |
PANEL_PORT | 8090 | Port HTTP du core |
IPFS_API_URL | 127.0.0.1:5001 | API Kubo |
TAJCOIN_RPC_URL | 127.0.0.1:12107 | RPC Tajcoin |
GUARD_PRICE_TAJ | 1 | Tarif session Guard |
DISCOVER_ENABLED | false | Active l'index Discover |
PIN_REWARD_PER_CLAIM | 0.5 | Récompense max par réclamation |
STAKE_MIN_TAJ | 1 | Mise minimale staking |
STAKE_BASE_APY | 0.12 | APY de base (12 %) |
TAJNET_WALLET_ACCOUNT | tajpanel | Compte paiements auto panel |
Docker & VPS
Éditions & scripts
| Édition | Script | Cible type | Page / |
| Full | ./scripts/deploy-vps.sh saopaulo | VPS tajnet.cloud | Documentation + Futuremen HQ |
| Public | ./scripts/deploy-public-node.sh lastfm | LAN — IPFS hôte | Thème music |
| Public | ./scripts/deploy-public-node.sh raspberry | LAN — Tajcoin hôte ARM | Thème heritage |
Credentials nœuds : secrets/nodes/<nom>.env (hors Git) — voir secrets/README.md.
Trois modes Docker courants
| Mode | Commande / fichier | Usage |
| Tout embarqué | docker-compose.embedded.yml | VPS sans daemons préinstallés |
| Daemons hôte | docker compose up | IPFS + tajcoind déjà sur la machine |
| Déploiement VPS | ./scripts/deploy-vps.sh env | rsync + tajcoind existant |
VPS public
# .env sur le serveur
TAJNODE_MODE=vps
TRUST_PROXY=1
TLS_ENABLED=true
TLS_PORT=443
# Déploiement (Discover activé sur le VPS)
./scripts/deploy-vps.sh saopaulo.env
./scripts/enable-vps-domain.sh saopaulo.env tajnet.cloud admin@tajnet.cloud
./scripts/enable-vps-tls.sh saopaulo.env # alternative : IP seule, certificat auto-signé
TLS & Matomo
HTTPS
| Variable | Description |
TLS_ENABLED | Active le serveur HTTPS |
TLS_PORT | 8443 (local) ou 443 (VPS) |
TLS_SAN | Domaines et IP du certificat |
Génération : ./scripts/generate-tls-cert.sh — empreinte dans /api/status → tls.
Sans nom de domaine (VPS par IP)
Certificat auto-signé — voir README. En production, préférez un domaine +
./scripts/enable-vps-domain.sh (ex. tajnet.cloud).
Production (Let's Encrypt)
Nœud de référence : Nginx termine le TLS sur :443, TajNet core en HTTP sur :8090,
TRUST_PROXY=1, DISCOVER_NODE_ENDPOINT=https://tajnet.cloud.
Matomo
- Interne :
MATOMO_URL + MATOMO_HOST_PORT (8888 local, souvent 8877 sur VPS)
- Public :
MATOMO_PUBLIC_URL → https://domaine/matomo/
- Proxy panel :
/matomo/ — tracking WAN autorisé ; admin bloqué sur Internet
- Pages trackées : publish éditeur,
/futuremen/, Bran Web publish
- Snippet fiable : TajPanel → Publication → Matomo, ou
/api/status → matomo.trackingSnippet
- Accès admin : tunnel SSH — le port Matomo est dans
MATOMO_HOST_PORT (affiché en fin de deploy-vps.sh)
# Vérifier le port sur le VPS :
grep MATOMO_HOST_PORT /opt/tajnet/.env
# Tunnel (exemple port 8877) :
ssh -N -L 8090:127.0.0.1:8090 -L 8877:127.0.0.1:8877 user@serveur
Ressources
| Document | Contenu |
README.md | Guide utilisateur complet |
docs/REFERENCE-API.md | Référence API détaillée |
.env.example | Toutes les variables |
brain/tajnet.md | Architecture & historique |
Tajcoin/DOCKER.md | Blockchain en Docker |
scripts/deploy-vps.sh | Déploiement édition full (Discover ON, Futuremen HQ) |
scripts/deploy-public-node.sh | Déploiement édition public + preset landing |
scripts/apply-landing-preset.sh | Applique un profil thème (lastfm, raspberry) |
scripts/enable-vps-domain.sh | Nginx + Let's Encrypt (domaine public) |