tane/docs/notes/ngi-fediversity-application.md
vjrj f1aa8f8e66 feat(app): scan a printed seed label back into its record
Closes the physical↔digital loop the labels opened: the QR on a printed
envelope (tane://seed, already encoded by seed_label_codec) can now be
scanned from the inventory bar. A known label opens its variety; an
unknown one asks before adding anything, then creates the variety (species
linked by exact scientific name when bundled) with a lot carrying the
label's year and origin. Scanner is pure ZXing (zxing_barcode_scanner,
MIT) — no ML Kit, no Play Services, F-Droid-safe, the stack Ğ1nkgo ships.
Mobile-only; other platforms don't show the button (OCR precedent).
The post-scan flow is a plain function (handleScannedPayload) so it's
widget-tested without a camera.
2026-07-18 12:26:27 +02:00

292 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Tane — NGI Fediversity (NLnet) application draft
> **Working document, NOT tracked in git.** Ready-to-submit draft for the NLnet
> NGI Fediversity call (nlnet.nl/propose). Deadline **1 Aug 2026, 12:00 CEST** (confirmed on the site).
> Derived from `VISION.md`, `PLAN.md`, `docs/design/*` and `docs/notes/modelos-financiacion.md`.
> Written in English (the proposal must be in English; VISION.md is the Spanish source).
> **Updated 2026-07-17** to reflect the shipped state: app live on Google Play (v0.1.1), site at
> tane.comunes.org, most of the social layer already built. The ask now funds the *remaining*
> federated-infrastructure work, not a from-scratch build.
---
## Part A — Strategy & framing (for us, NOT for the form)
### The new, stronger story: we shipped, now we complete the federated infrastructure
Since the first draft, the project advanced a lot. This is now a **track-record application**, not a
promise:
- **Live on Google Play** (v0.1.1, `org.comunes.tane`), **GMS-free build** ready for F-Droid.
- **Public site** at **tane.comunes.org**, translated via Weblate (translate.comunes.org).
- **Block 1 (inventory) shipped**, and **most of Block 2 (the social layer) already shipped**: offers
(NIP-99), private metadata-hiding messaging (NIP-17), a Duniter-style egocentric web of trust
(kind 30777), ratings (kind 30778), profiles + multi-account identity, Plantaré pledges, saved-search
alerts. All transports live in the reusable `commons_core` engine, with ~131 test files and CI.
NLnet weighs **technical feasibility (30%)** and **value for money (30%)**: a shipped, tested,
in-store app de-risks both. Lead with that.
### Fit with Fediversity — now genuine, not a stretch
The Fediversity fund leans to the *hosting stack / self-hosting* side. The **work that remains is
exactly that side**, which is why the fit is now real:
1. **Self-hostable community relay**`relay.comunes.org` is **already deployed and running**. The
remaining Fediversity-shaped work is turning it into a **reproducible, documented recipe any seed
network can self-host**, plus moderation tooling (NIP-56 reports, key-blocking) and operational
hardening — so the network is owned by communities, not a single instance.
2. **Multi-device sync** — the encrypted `SyncTransport` landed (NIP-78, relay sees only ciphertext);
the app-level `SyncService` that replicates your inventory across your own devices is **pending**.
This is data portability + self-custody, a Fediversity theme.
3. **Interoperability & portability** — open, versioned export/import already exists; add opt-in
**Darwin Core / GBIF** export so agrobiodiversity data can flow to open biodiversity atlases.
4. **`commons_core` as reusable federated infrastructure** — Tane is a seed app wrapped around a generic
Nostr + CRDT + web-of-trust + messaging engine; seeds are the first app, others can follow.
Framing in one line: **bringing federation beyond social media, into the physical commons — and we
already have a working app to prove it.**
### Plan B — don't bet everything on this call
Honest odds: the fit is now decent (the remaining work IS hosting/portability-shaped) but Fediversity
reviewers may still read "mobile app on Nostr" as adjacent to their ActivityPub/NixOS hosting focus.
Mitigation, at near-zero extra cost:
- **Submit to Fediversity anyway** (short form, strong track record, real infra milestones) — worst case
is a rejection with feedback.
- **Reuse this same dossier for NGI Zero Commons / Core when regular calls reopen after summer 2026** —
Tane as commons infrastructure is arguably a *better* fit there (`commons_core`, open protocols,
community-run relays). Keep this file as the master; only the fund-specific framing paragraph changes.
- Meanwhile, keep the **Goteo matchfunding** (Red de Semillas) track as the community-round complement.
### NLnet requirements checklist
- [x] **FOSS licence** — code AGPL-3.0; docs/assets CC-BY-SA.
- [x] **Open standards** — Nostr NIPs (99/17/44/78/56), Duniter-style WoT, open data formats, Darwin Core.
- [x] **European dimension** — EC-LLD (23 European seed networks), Red de Semillas, EU seed-law (PRM) context.
- [x] **Milestone-based, verifiable deliverables** — see Part C.
- [x] **Sustainability after funding** — local-first, open data/code, cheap community relays; never per-transaction fees.
- [ ] **Generative-AI disclosure** — declared honestly and minimally (see §13 + the log template below).
- [ ] **Privacy statement** — tick the acknowledgement of NLnet's privacy statement on the form.
### The AI concern (read before submitting)
NLnet has a formal **Generative AI policy** (nlnet.nl/foundation/policies/generativeAI/). It does **not**
forbid AI, but imposes real obligations, and reviewers value **substance over marketing**. Three things,
don't conflate them:
1. **Prompt provenance log (required):** if GenAI is used in the application process, you must keep a
log of prompts/outputs. → the Appendix table below.
2. **Public disclosure (required for substantive use):** any GenAI use that materially affects the
output must be disclosed so evaluators understand how the proposal was produced. → §13.
3. **Purely-AI outcomes are NOT payable, and must be FLOSS-clean:** "Outcomes purely generated by AI are
not allowed to be submitted as work eligible for payment." → this hits the **milestones (M1M5)**, not
just the application: the delivered code/docs must be **human-authored** (AI-assisted is fine; you must
also verify outputs don't reproduce copyrighted/licence-incompatible material). **Non-compliance can
mean rejection of the proposal or termination of a running grant.**
Plus the softer risk: an application that *reads* as AI slop scores worse. Fix for all of it = make the
text genuinely yours.
**Action for vjrj — rewrite §3, §4, §5 in your own voice** (that's what a reviewer reads first; the rest
is technical scaffolding). Add first-person specifics only you can write: Kokopelli, the 2009 paper
Plantare you originated, why the whole seed sector refuses per-transaction fees, your Ğ1nkgo/Duniter
background, and the fact the app is already in people's hands.
**De-"slop" pass:** cut the tells — em-dashes everywhere, rule-of-three lists, heavy bold,
"not X but Y" constructions, brochure cadence. Rougher, more technical, more personal = better here.
### Process notes
- Submit several days early — "deadlines are hard". Draft offline (this file), paste at the end.
- Plain text is preferred; keep formatting light. Attachments ≤ 50 MB total.
- You may submit multiple independent proposals in one round; do not double-submit via FundingBox + NLnet.
---
## Part B — Form answers (the actual draft, English)
### Current status (facts to weave in — all verifiable)
- **Live:** Google Play v0.1.1 (`org.comunes.tane`); site **tane.comunes.org**; community Nostr relay
**relay.comunes.org running**; source public (AGPL-3.0).
- **F-Droid:** GMS-free build + recipe ready (awaiting registry upload).
- **Languages:** 7 (en, es, pt, fr, ast, de, ja); RTL + CJK fonts bundled; translated on Weblate.
- **Engine:** `commons_core` (pure Dart) — identity derivation, HLC, CRDT, geohash, all Nostr transports.
- **Tests/CI:** ~131 test files; Forgejo Actions runs analyze + test on both packages.
### 1. Contact / Organisation / Country
- **Applicant organisation:** Comunes (registered non-profit association), Spain / EU.
- **Project lead:** Vicente J. Ruiz Jurado (vjrj) — technical lead.
- **Package id / namespace:** `org.comunes.tane`.
- **Contact:** vjrj@comunes.org.
- **Project page:** https://tane.comunes.org · source repository public (AGPL-3.0) · live on Google Play.
### 2. Project name
**Tane — self-hostable, local-first infrastructure for seed-sharing communities.** (種, "seed"; from
*tanemaki*, "to sow".)
### 3. Abstract (a few sentences)
> ✍️ **vjrj: rewrite in your own voice.** Scaffolding below — keep the meaning, drop the polished cadence.
Tane lets communities run their own seed-sharing network end to end: a local-first mobile app, a
self-hostable relay, and identity and data the user fully owns and can take anywhere — no account, no
central server, no company in the middle. The app is already live on Google Play in seven languages;
offers, private messaging, reputation and encrypted device sync ride on open federated protocols
(Nostr NIPs) and a Duniter-style web of trust, implemented in a reusable engine (`commons_core`) where
seeds are only the first application. What remains — and what this grant funds — is the hosting and
portability side: a **reproducible relay recipe any collective can self-host** (our reference instance
already runs), **completion of encrypted multi-device sync**, **open-standards data portability**
(Darwin Core / GBIF export), and production hardening — so a seed network can operate the whole stack
without depending on us, or on anyone.
### 4. Can you explain the whole project and its expected outcome?
> ✍️ **vjrj: rewrite in your own voice.** Add first-person specifics (Kokopelli, the 2009 paper Plantare,
> Ğ1nkgo). Scaffolding below.
A handful of corporations control most of the world's seed supply, and traditional varieties — and the
knowledge to grow them — are being lost. Sharing seeds has even become legally suspect (e.g. Kokopelli
fined in France). Seed networks resist with notebooks and spreadsheets; there was no friendly, free,
decentralised tool for them.
Tane is built in **layers, each useful alone**, and most are **already shipped**:
1. **Inventory (local-first) — shipped.** Encrypted seed bank on your phone (SQLite + SQLCipher), fully
offline, no account; backup + printed recovery; 7 languages.
2. **Offer status — shipped.** Per item: private / gift / exchange / sale.
3. **Local sharing (federated) — shipped.** Offers as signed Nostr events (NIP-99), discovered by
**coarse geohash** (~2.4 km, never your address); private DMs (NIP-17); ratings; Plantaré pledges;
saved-search alerts. No central operator can censor, sell data, or charge a fee.
4. **Trust — shipped.** Egocentric Duniter-style web of trust (you vouch for people you've met); spam
from unknown keys is filtered with no central moderator.
A de-risking spike proved the whole social happy-path on vetted pure-Dart libraries, and it is now
**production code in people's hands**. **What this grant funds is the hosting and portability layer that
makes the network genuinely community-owned** (see Part C): turning our running relay into a
**reproducible, self-hostable recipe with moderation tooling**; completing **encrypted multi-device
sync** (the transport already landed; the relay only ever sees ciphertext); **open-standards data
portability** (opt-in Darwin Core / GBIF export toward public biodiversity atlases); plus trust
cold-start for real seed fairs, optional Ğ1 price tags, and messaging/offers hardening.
**Expected outcome:** any seed collective in Europe can **self-host the entire stack from a documented
recipe** — relay, moderation, app, data — with identity and data fully portable and **zero dependency on
Comunes or any single operator**. And because the hard parts live in the generic `commons_core` engine,
the same infrastructure is reusable for other physical-commons networks (tool libraries are the next
candidate).
### 5. Compare your own project with existing or historical efforts
> ✍️ **vjrj: rewrite in your own voice.** You know this sector first-hand — say why it refuses
> per-transaction fees, and tell the Plantare story as its originator. Scaffolding below.
- **Seed Savers Exchange, Graines de Troc, Arche Noah, Red de Semillas** — valuable, but each is a
**centralised web platform**: single operator, an account, a server that can go dark, no local-first
offline app, not federated, not self-hostable.
- **Garden/inventory apps** — mostly **proprietary and extractive**; none do decentralised sharing or trust.
- **Marketplaces (Wallapop-style)** — a central intermediary that takes a commission and can censor.
Tellingly, **no seed-exchange platform anywhere charges per-transaction fees** — the whole sector uses
gift/exchange/membership. We follow that, by design.
- **Historical precedent — the Plantare (2009).** A paper "seed promissory note" already solved
decentralised trust and reciprocity *socially* (a bearer instrument, both parties hold a copy, the
ledger distributed across drawers). We digitise it without a central register.
**Why it's needed / why existing solutions don't answer it:** none combines local-first, federation over
open standards, self-hostability, identity/data portability, and a spam-resistant web of trust — while
staying free and non-extractive. Tane already does, in production; the engine is reusable for other
physical-commons networks.
### 6. Significant technical challenges (the remaining work)
- **Self-hostable relay + moderation** — `relay.comunes.org` already runs; the challenge is making it a
reproducible recipe others can run, with NIP-56 report handling and key-blocking, so moderation is
"with a response" but not centralised.
- **Multi-device sync at the app level** — wire `SyncService` onto the landed encrypted `SyncTransport`:
serialise inventory, push on mutation, idempotent LWW import on receipt, stable per-install device id,
rare-conflict UI. Relay only ever sees ciphertext.
- **Interoperability / portability** — opt-in Darwin Core / GBIF export of agrobiodiversity (blurred
location, collective-bank level, one-way) — exactly the data those atlases lack.
- **Messaging/offers hardening** — NIP-44 interop-exact test vectors, offline DM delivery/retry, offer
expiry & revocation on already-replicated relays.
- **Trust cold-start** — bootstrap the web of trust at real fairs / Ğ1 seed groups (QR, no network).
- **Portable derived identity** — one root seed, one-way HKDF secp256k1 subkey for Nostr, one printable
QR backs up everything (already implemented; polish + docs).
### 7. Project ecosystem & stakeholder engagement
- **Seed networks:** Red de Semillas (Spain), **EC-LLD / Let's Liberate Diversity** (23 European seed
networks) for European reach; Arche Noah as a policy ally.
- **Free-money communities (Ğ1/Duniter):** first pilots — existing identity, existing web of trust,
aligned values.
- **Seed fairs and markets:** where trust bootstraps face to face.
- **Translators & contributors:** already active via Weblate; code and docs public.
### 8. Relevant prior experience & track record
- **Shipped, in production:** Tane is **live on Google Play** (v0.1.1), GMS-free build ready for F-Droid,
site at tane.comunes.org, 7 languages via Weblate, RTL+CJK support, a full legal package, automated
store publishing (Fastlane) and CI (Forgejo Actions, ~131 test files). Block 1 + most of Block 2 done.
- **vjrj** authored **Ğ1nkgo**, a Duniter/Ğ1 wallet in Flutter/Dart; Tane reuses its cryptographic
primitives (secp256k1, HKDF, Duniter identity) — no reinvention.
- **vjrj originated the Plantare concept** (BAH-Semillero, 2009, CC-BY-SA) and wrote *"Las semillas del
conocimiento libre"* (2005) — a decade of domain authority in seed commons.
- **Comunes** — registered association, stable legal counterpart for milestone accountability.
### 9. Requested amount
**€32,000.**
### 10. Budget usage / task breakdown
See Part C. Milestone-based; each milestone is an independent, verifiable deliverable with a CI-gated
test suite where applicable. NLnet pays on verification of each milestone.
### 11. Other funding sources (past and present)
- Built so far with **volunteer work**; **no prior grant funding**; no overlapping funding for this scope.
- Complementary community funding (e.g. Goteo matchfunding with Red de Semillas) is a *future*
sustainability avenue, not a duplicate of this request.
### 12. Sustainability after the grant
- **Local-first:** useful even with no servers and no maintainer — utility does not expire.
- **Open code & data (AGPL-3.0, open export):** anyone can continue, fork, or **self-host the relay**.
- **Cheap, community-run relays** (collectives / Comunes), plus opportunistic app-as-relay and
physical-proximity exchange at fairs.
- **Non-extractive revenue only, never on the seed:** voluntary association membership (Seed Savers
model), optional managed services for institutional seed banks. No per-transaction commission — legally
prudent (EU PRM in trilogue) and coherent with the commons.
### 13. Compliance & disclosure
- **Licence:** AGPL-3.0 (code); CC-BY-SA (docs/assets). Compatible with the reused Duniter/Ğ1nkgo stack.
- **Privacy statement:** acknowledged.
- **Generative-AI disclosure (honest & minimal — paste into the form):**
> An AI assistant was used only as a drafting aid for this application text: to translate and structure
> an initial English outline from our pre-existing Spanish design documents (VISION.md, PLAN.md,
> docs/design/*), which predate and are independent of this application. All technical claims,
> architecture, milestones and budget are the applicant's own; the project lead rewrote and verified
> the text, and no AI output was submitted unedited. A prompt provenance log is available on request.
> The funded deliverables (M1M5) will be human-authored (AI-assisted at most), released under
> AGPL-3.0, with no purely-AI-generated outcomes submitted for payment.
*Adjust to match what you actually did before sending. If you rewrite §3§5 yourself (recommended),
this statement stays true and strong.*
---
## Part C — Milestones & budget (€32,000)
Milestones reflect the **real remaining work** (Block 1 + most of Block 2 are already shipped). They are
ordered by theme: **M1M3 are the federated-hosting core** (self-hosting, sync, portability); **M4M5
harden and bootstrap it**. Each is an independent, verifiable deliverable; NLnet pays on verification.
| # | Milestone | Verifiable deliverable | € |
|---|-----------|------------------------|---|
| **M1** | **Self-hostable relay recipe + moderation** | `relay.comunes.org` already runs; deliver a **reproducible, documented recipe** any seed network can self-host, plus NIP-56 report handling + key-blocking moderation tooling and an operator manual | 6,000 |
| **M2** | **Multi-device sync (app `SyncService`)** | Inventory replication across a user's own devices over the landed encrypted `SyncTransport` (NIP-78): serialise + push on mutation, idempotent LWW import, stable per-install device id, conflict UI; tests (relay sees only ciphertext) | 8,000 |
| **M3** | **Interoperability & data portability** | Opt-in Darwin Core / GBIF export of agrobiodiversity (blurred location, collective-bank level, one-way); polished open export/import + identity portability docs | 5,000 |
| **M4** | **Messaging & offers hardening** | NIP-44 interop-exact test vectors, offline DM delivery/retry queue, offer expiry + revocation on replicated relays, spam-filter polish; CI-gated | 7,000 |
| **M5** | **Trust cold-start + Ğ1 price integration + docs/release** | WoT cold-start flows for fairs / Ğ1 groups (QR, offline); Ğ1 price tag + deep-link to wallets (no in-app payment); contributor architecture guide + multilingual user guide; F-Droid release | 6,000 |
| | **Total** | | **32,000** |
---
## Submission checklist (before nlnet.nl/propose)
1. Cross-check every field above against the live form + Guide for Applicants.
2. Fit test: does the abstract + §4 opening read "federation / portability / self-hosting" *before* "seeds"?
3. Budget: milestones independent & verifiable, effort realistic, sum = €32,000.
4. Compliance: FOSS licence stated, privacy statement acknowledged, **AI-disclosure + provenance log ready**.
5. Confirm the 1 Aug 2026 deadline on the site; submit with several days' margin.
6. Language pass: rewrite §3§5 in vjrj's voice; clear, technical English throughout.
---
## Appendix — AI-use log (keep, attach or provide on request)
Fill as you go so the disclosure is accurate and verifiable.
| Date | Tool / model | Prompt (verbatim) | What the output was used for | Kept unedited? |
|------|--------------|-------------------|------------------------------|----------------|
| 2026-07-10 | Claude Code (Opus 4.8) | "Me ayudas a presentar tane a esta convocatoria? qué pedirías…" | Initial English draft/outline from repo docs | No — to be rewritten & verified by lead |
| 2026-07-17 | Claude Code (Opus 4.8) | "He avanzado mucho en el desarrollo, puedes actualizar la application?…" | Updated draft to reflect shipped status + new milestones | No — to be rewritten & verified by lead |
> Keep the raw session transcript alongside this table. If §3§5 are rewritten by hand, note that here too.