# Each > AI drafts the proof; only the person confirms it, with their passkey. Every proof is signed and publicly verifiable. ## 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. North star: "What is worth doing?" (What is truly good, for you, for your people, for the world?) ## Why Each, by profile - Individual: A public page (/p/{handle}) whose links rest on verified proofs: your gestures become signed proofs, tied to the brands and communities you support. Free for individuals. - Brand: A brand page showing gestures confirmed by your ambassadors, and direct access to the ecosystem. A brand also means a microbrewery, a producer, an artisan or a shop's own brand. - Direct access to your community: the people who join your brand, with no middleman. - Your ambassadors' gestures become signed proofs anyone can verify, shown on your brand page. - Your tools on the surface: listed in the catalogue, they work with everyone else's (gesture proof, verification, missions). - Missions and aggregated stats on your community (planned). - A one-gesture brand claim, then confirmed by the brand's PivoHub account. - Free: checking your brand in the catalogue, claiming it, reading and verifying proofs and public pages. - Brand plans: pricing to come. ### For a microbrewery 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. - Merchant: No merchant-specific offer is defined yet. A merchant can take part as a brand or through a community. - Community: A community belongs to a brand. People join it and declare gestures there, confirmed as signed proofs. ## How to connect - Create your account with a passkey (no password): https://test.each.app/en/ - Price: free for individuals. Brands: checking, claiming and verifying proofs is free; brand plans, pricing to come. - Gesture proof: declare a gesture, confirm with your passkey, get a signed proof - Verify a proof: https://test.each.app/v1/proofs/{id} · keys https://test.each.app/.well-known/each-keys - AI-readable personal page: https://test.each.app/p/{handle}.json · https://test.each.app/p/{handle}/llms.txt - Is your brand already here?: https://test.each.app/v1/pivohub/brands/check?name= - PivoHub catalogue (sample data): https://test.each.app/v1/connectors/pivohub/brands ## Current opportunities - PivoHub (launch partner): join a PivoHub community and declare gestures; claim your brand if it is in the catalogue (pending until the brand's PivoHub account confirms it). https://test.each.app/en/m/pivohub · sample data until PivoHub API access ## 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) · verify: https://test.each.app/v1/proofs/pr_DblRD4s2ZZoxxVtr/verify ## How proofs are signed - Algorithm: ES256 (ECDSA P-256, SHA-256, raw r||s 64 bytes, 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. 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). ## Proof fields - 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. French version: https://test.each.app/llms.txt · JSON: https://test.each.app/each.json · PivoHub: https://test.each.app/m/pivohub/llms.txt