# Each > L'IA rédige le brouillon de preuve; seule la personne confirme, avec sa clé d'accès. Chaque preuve est signée et vérifiable publiquement. ## À retenir - "Prouvé" = appuyé par une preuve signée vérifiable; "déclaré" = affirmé sans preuve (ex.: une affiliation). - Aujourd'hui: compte par clé d'accès, affiliation, gestes confirmés en preuves signées, page personnelle signée, vérification et revendication de marque (en attente). Prévu: vraie API PivoHub, confirmation des revendications, each.app, validation et modération. - Public: preuves confirmées, affiliations, sections publiques. Privé: sections privées, opinions politiques par défaut, brouillons, clés d'accès. Détails dans la FAQ. - Marques: vérifier ta marque, la revendiquer, lire et vérifier les preuves, gratuit; plans de marque, tarifs à venir. - Personnes: gratuit; récompenses à venir. - Une clé d'accès prouve qui a confirmé, pas que le geste a eu lieu. ## Key facts - "Proven" = backed by a verifiable signed proof; "declared" = stated without proof (e.g. an affiliation). - Today: passkey account, affiliation, gestures confirmed as signed proofs, signed personal page, brand check and claim (pending). Planned: real PivoHub API, claim confirmation, each.app, validation and moderation. - Public: confirmed proofs, affiliations, public sections. Private: private sections, political opinions by default, drafts, passkeys. Details in the FAQ. - Brands: checking, claiming, reading and verifying proofs is free; brand plans, pricing to come. - Individuals: free; rewards to come. - A passkey proves who confirmed, not that the gesture happened. Question phare: "Qu'est-ce qui mérite d'être fait?" (Qu'est-ce qui est vraiment bon, pour toi, pour les tiens, pour le monde?) ## Pourquoi Each, selon ton profil - Personne: Une page publique (/p/{handle}) dont les liens s'appuient sur des preuves vérifiées: tes gestes deviennent des preuves signées, rattachées aux marques et communautés que tu soutiens. Gratuit pour les personnes. - Marque: Une page de marque où paraissent les gestes confirmés par tes ambassadeurs, et un accès direct à l'écosystème. Une marque, c'est aussi une microbrasserie, un producteur, un artisan ou la marque d'une boutique. - Accès direct à ta communauté: les personnes qui s'affilient à ta marque, sans intermédiaire. - Les gestes de tes ambassadeurs deviennent des preuves signées, vérifiables par n'importe qui, et paraissent sur ta page de marque. - Tes outils sur la surface: déclarés au catalogue, ils travaillent avec ceux des autres (preuve de geste, vérification, missions). - Des missions et des statistiques agrégées sur ta communauté (prévu). - Une revendication de marque en un geste, confirmée ensuite par le compte PivoHub de la marque. - Gratuit: vérifier ta marque au catalogue, la revendiquer, lire et vérifier les preuves et les pages publiques. - Plans de marque: tarifs à venir. ### Pour une microbrasserie 1. Vérifie si ta microbrasserie figure au catalogue PivoHub (gratuit). 2. Revendique-la en un geste confirmé par ta clé d'accès; elle reste en revendication en attente jusqu'à la confirmation par le compte PivoHub de la marque. 3. Tes amateurs rejoignent ta communauté et déclarent leurs gestes (dégustation, achat local, faire découvrir une bière, retour de contenants). 4. Chaque geste confirmé devient une preuve signée, vérifiable par n'importe qui, et paraît sur ta page de marque. 5. Plans de marque: tarifs à venir. ### For a microbrewery (EN) A brand also means a microbrewery, a producer, an artisan or a shop's own brand. 1. Check whether your microbrewery is in the PivoHub catalogue (free). 2. Claim it with one gesture confirmed by your passkey; it stays a pending claim until the brand's PivoHub account confirms it. 3. Your fans join your community and declare their gestures (tasting, buying local, introducing someone to a beer, returning containers). 4. Each confirmed gesture becomes a signed proof anyone can verify, shown on your brand page. 5. Brand plans: pricing to come. - Marchand: Aucune offre propre aux marchands n'est encore définie. Un marchand peut participer comme marque ou par une communauté. - Communauté: Une communauté est rattachée à une marque. Les personnes s'y affilient et y déclarent des gestes, confirmés en preuves signées. ## Comment se brancher - Crée ton compte avec une clé d'accès (aucun mot de passe): https://test.each.app/ - Prix: gratuit pour les personnes. Marques: vérifier, revendiquer et vérifier les preuves, gratuit; plans de marque, tarifs à venir. - Preuve de geste: déclarer un geste, confirmer avec ta clé d'accès, preuve signée - Vérifier une preuve: https://test.each.app/v1/proofs/{id} - Page personnelle lisible par l'IA: https://test.each.app/p/{handle}.json - Ta marque est-elle déjà là?: https://test.each.app/v1/pivohub/brands/check?name= - Statut d'une revendication de marque: https://test.each.app/v1/pivohub/claims/{proof_id} - Catalogue PivoHub: https://test.each.app/v1/connectors/pivohub/brands, https://test.each.app/v1/connectors/pivohub/products, https://test.each.app/v1/connectors/pivohub/communities ## Occasions actuelles - PivoHub (partenaire de démarrage): Rejoindre une communauté PivoHub et déclarer des gestes; revendiquer ta marque si elle figure au catalogue (revendication en attente jusqu'à la confirmation par le compte PivoHub de la marque). https://test.each.app/m/pivohub · données d'exemple en attendant l'accès à l'API de PivoHub JSON: https://test.each.app/each.json PivoHub: https://test.each.app/m/pivohub/llms.txt ## Ce que tu y gagnes (personne) - Une page publique (/p/{handle}), lisible par les humains et par l'IA. - Des preuves signées de tes gestes, que n'importe qui peut vérifier. - Tes affiliations aux marques et communautés que tu soutiens. - Gratuit pour les personnes. - Récompenses à venir. ## Ce qui marche aujourd'hui - Compte par clé d'accès (aucun mot de passe). - Affiliation à une communauté PivoHub (données d'exemple). - Déclarer un geste; l'IA rédige le brouillon, la personne le corrige et le confirme avec sa clé d'accès. - Preuves signées ES256, en ajout seulement, vérifiables publiquement. - Page personnelle en 4 couches, versionnée et signée, avec sections privées. - Vérification de marque au catalogue d'exemple et revendication en un geste (en attente). ## Ce qui est prévu - Vraies données de l'API de PivoHub (marques, produits, communautés). - Confirmation des revendications par le compte PivoHub de la marque. - Comptes et clés d'accès sur each.app. - Validation des gestes par les marques, témoins, modération et limites renforcées. - Missions et statistiques agrégées pour les marques; plans de marque: tarifs à venir. - Récompenses à venir pour les personnes. ## Dernières preuves publiques - "Ce qui reste d'Élise" de Malorie NC, version 1. @equipe-each (2026-10-31) · https://test.each.app/v1/proofs/pr_DblRD4s2ZZoxxVtr · vérifier: https://test.each.app/v1/proofs/pr_DblRD4s2ZZoxxVtr/verify ## Comment les preuves sont signées - Algorithme: ES256 (ECDSA, courbe P-256, SHA-256; signature au format brut r||s de 64 octets, encodée base64url) - kid: each-test-2026-10-a - Clés publiques: https://test.each.app/.well-known/each-keys - On signe les octets UTF-8 du JSON canonique de l'objet "proof": clés triées par ordre alphabétique à tous les niveaux, aucun espace, tableaux dans leur ordre. ### Vérifier une preuve toi-même, étape par étape 1. GET https://test.each.app/v1/proofs/{id}: tu reçois "proof", "signature" (alg, kid, value) et "keys_url". 2. GET https://test.each.app/.well-known/each-keys et prends la clé dont le "kid" égale signature.kid (JWK EC P-256, x et y). 3. Sérialise l'objet "proof" en JSON canonique (clés triées, aucun espace) puis encode-le en UTF-8. 4. Décode signature.value (base64url) en 64 octets. 5. Vérifie avec ECDSA P-256 + SHA-256 (par exemple crypto.subtle.verify dans un navigateur ou dans Node). Résultat vrai = la preuve vient d'Each et n'a pas été modifiée. 6. Raccourci: GET https://test.each.app/v1/proofs/{id}/verify (vérifié par le serveur) ou la page https://test.each.app/verifier/{id} (vérifiée dans ton navigateur). ### Contenu d'une preuve, champ par champ - v: version du format (1) - type: "each.proof" - id: identifiant de la preuve (pr_...) - issuer: émetteur: each.app - environment: "production" - issued_at: date ISO 8601 (UTC) de la signature - person: handle et nom affiché de la personne - brand: marque liée (slug, nom) - community: communauté (slug, nom) ou null - tool: outil qui a produit la preuve (preuve-de-geste) - gesture: id, type, description écrite par la personne, date de déclaration - statement: phrase confirmée par la personne - statement_lang: langue de la phrase - draft_source: "ai" ou "template": qui a rédigé le brouillon - statement_edited: vrai si la personne a modifié le brouillon - confirmation: méthode passkey, identifiant de la clé, user_verified, challenge, rp_id - claim: (revendication de marque seulement) marque visée et sens: revendication, pas une preuve de propriété ## Affiliation et preuve Une affiliation est "déclarée": la personne dit faire partie de la communauté, sans preuve signée. Les preuves viennent seulement des gestes confirmés avec une clé d'accès. Une personne peut donc être affiliée sans avoir encore de preuve. ## Format de /v1/pivohub/brands/check Requête: GET https://test.each.app/v1/pivohub/brands/check?name={nom} - query: texte cherché - found: vrai si au moins une marque ressemble (score >= 0,6) - matches: jusqu'à 3 marques: id, slug, name, score (0 à 1) - source: "sample" = données d'exemple - source_label: libellé FR/EN Exemple (trouvée): ```json { "query": "brasserie du nord", "found": true, "matches": [ { "id": "pb-001", "slug": "brasserie-exemple-nord", "name": "Brasserie Exemple du Nord", "score": 1 } ], "source": "sample", "source_label": { "fr": "données d'exemple", "en": "sample data" } } ``` Exemple (absente): ```json { "query": "Dieu du Ciel", "found": false, "matches": [], "source": "sample", "source_label": { "fr": "données d'exemple", "en": "sample data" } } ``` ## FAQ ### Qui confirme une revendication de marque, et en combien de temps? Le compte PivoHub de la marque. Le délai n'est pas connu: pour l'instant, la confirmation est simulée et reste toujours "revendication en attente". ### Que se passe-t-il si une revendication est refusée? Ce n'est pas encore défini. La preuve signée de la revendication reste (le journal est en ajout seulement), mais elle ne vaut jamais preuve de propriété; le statut refusé est prévu, pas encore construit. ### Qu'est-ce qui est public, qu'est-ce qui est privé? Public: les preuves confirmées, les affiliations, les sections que la personne a mises publiques et les versions signées de sa page. Privé: les sections privées (jamais dans le HTML, le JSON ou llms.txt), les opinions politiques par défaut, les brouillons non publiés et les clés d'accès. ### Comment empêche-t-on quelqu'un de confirmer un faux geste? Honnêtement: aujourd'hui, on ne peut pas l'empêcher. Une clé d'accès prouve QUI a confirmé, pas que le geste a eu lieu. Une preuve Each dit "cette personne affirme ceci, et l'a confirmé elle-même". Il y a des limites de débit sur les écritures et les gestes. Prévu: validation par la marque, témoins, modération et limites renforcées. Aucune garantie que le geste est vrai. --- # English ## What you gain (individual) - A public page (/p/{handle}), readable by humans and AI. - Signed proofs of your gestures that anyone can verify. - Your affiliations to the brands and communities you support. - Free for individuals. - Rewards to come. ## What works today - Passkey account (no password). - Joining a PivoHub community (sample data). - Declaring a gesture; AI drafts, the person edits and confirms with a passkey. - ES256 signed, append-only, publicly verifiable proofs. - 4-layer personal page, versioned and signed, with private sections. - Brand check against the sample catalogue and one-gesture claim (pending). ## What is planned - Real data from the PivoHub API (brands, products, communities). - Claim confirmation by the brand's PivoHub account. - Accounts and passkeys on each.app. - Gesture validation by brands, witnesses, moderation and stronger limits. - Missions and aggregated stats for brands; brand plans: pricing to come. - Rewards to come for individuals. ## Latest public proofs - "Ce qui reste d'Élise" de Malorie NC, version 1. @equipe-each (2026-10-31) · https://test.each.app/v1/proofs/pr_DblRD4s2ZZoxxVtr · verify: https://test.each.app/v1/proofs/pr_DblRD4s2ZZoxxVtr/verify ## How proofs are signed - Algorithm: ES256 (ECDSA, courbe P-256, SHA-256; signature au format brut r||s de 64 octets, encodée base64url) - kid: each-test-2026-10-a - Public keys: https://test.each.app/.well-known/each-keys - The signature covers the UTF-8 bytes of the canonical JSON of the "proof" object: keys sorted alphabetically at every level, no whitespace, arrays kept in order. ### Verify a proof yourself, step by step 1. GET https://test.each.app/v1/proofs/{id}: you get "proof", "signature" (alg, kid, value) and "keys_url". 2. GET https://test.each.app/.well-known/each-keys and take the key whose "kid" equals signature.kid (EC P-256 JWK, x and y). 3. Serialize the "proof" object as canonical JSON (sorted keys, no whitespace), UTF-8 encode it. 4. Decode signature.value (base64url) to 64 bytes. 5. Verify with ECDSA P-256 + SHA-256 (e.g. crypto.subtle.verify). True = issued by Each and unaltered. 6. Shortcut: GET https://test.each.app/v1/proofs/{id}/verify (server-checked) or the page https://test.each.app/verifier/{id} (checked in your browser). ### Contents of a proof, field by field - v: format version (1) - type: "each.proof" - id: proof id (pr_...) - issuer: issuer: each.app - environment: "production" - issued_at: ISO 8601 (UTC) signing time - person: person's handle and display name - brand: linked brand (slug, name) - community: community (slug, name) or null - tool: tool that produced the proof (preuve-de-geste) - gesture: id, kind, person's own description, declaration time - statement: sentence the person confirmed - statement_lang: statement language - draft_source: "ai" or "template": who drafted it - statement_edited: true if the person edited the draft - confirmation: passkey method, credential id, user_verified, challenge, rp_id - claim: (brand claims only) target brand and meaning: a claim, not proof of ownership ## Affiliation vs proof An affiliation is "declared": the person says they belong to the community, with no signed proof. Proofs come only from gestures confirmed with a passkey. So a person can be affiliated without any proof yet. ## FAQ ### Who confirms a brand claim, and how long does it take? The brand's PivoHub account. The delay is unknown: for now, confirmation is simulated and always stays "claim pending". ### What happens if a claim is refused? Not defined yet. The signed claim proof stays (the log is append-only) but never counts as proof of ownership; a refused status is planned, not built yet. ### What is public, what is private? Public: confirmed proofs, affiliations, sections the person made public and signed page versions. Private: private sections (never in HTML, JSON or llms.txt), political opinions by default, unpublished drafts and passkeys. ### How do you stop someone from confirming a fake gesture? Honestly: today it cannot be prevented. A passkey proves WHO confirmed, not that the gesture happened. An Each proof says "this person states this and confirmed it themselves". Writes and gestures are rate-limited. Planned: brand validation, witnesses, moderation and stronger limits. No guarantee that the gesture is true.