Local-first, decentralized app for traditional seeds
Find a file
vjrj 2a6b4b0947 feat(block2): relay pool — publish to many relays, discover deduped, tolerate failures
Relay-strategy hardening (network-trust §3): don't hang on one relay.
- NostrChannel interface: what the transports need (sign, publish, subscribe,
  reqOnce). Implemented by NostrConnection (single relay) and the new RelayPool.
- RelayPool: connects to all configured relays (skips unreachable ones, throws
  only when none are reachable), publishes to every live relay (accepted if any
  accepts), merges discovery deduped by event id, and survives a relay dropping.
- Transports now depend on NostrChannel, not a concrete connection.
- SocialService.openSession takes ALL configured relays (was relays.first);
  createOffersCubit passes the whole list.

commons_core 63 tests green (3 new pool tests over two in-process relays);
app_seeds social/market 18 green.
2026-07-10 10:35:39 +02:00
.run docs(block1): status marker + IntelliJ run config 2026-07-07 22:14:53 +02:00
apps/app_seeds feat(block2): relay pool — publish to many relays, discover deduped, tolerate failures 2026-07-10 10:35:39 +02:00
docs docs(block2): lift the gate — open the social round 2026-07-10 02:26:16 +02:00
packages/commons_core feat(block2): relay pool — publish to many relays, discover deduped, tolerate failures 2026-07-10 10:35:39 +02:00
.gitignore Initial import: mockups, visual identity, stock photos, project plan, README 2026-07-06 23:58:31 +02:00
.gitlab-ci.yml ci: manual Windows desktop build job (allow_failure) 2026-07-09 21:48:14 +02:00
analysis_options.yaml feat(block1): inventory walking skeleton + first quick-add slice 2026-07-07 15:16:14 +02:00
CHANGELOG.md chore(release): beta packaging — signing, changelog, store metadata, scale test 2026-07-09 23:10:01 +02:00
CLAUDE.md docs(block2): lift the gate — open the social round 2026-07-10 02:26:16 +02:00
LICENSE feat(block1): inventory walking skeleton + first quick-add slice 2026-07-07 15:16:14 +02:00
PLAN.md Note optional Darwin Core / GBIF / ALA biodiversity-portal bridge as a deferred, opt-in intention (open-decisions C + data-notes 3-bis), with privacy guardrails; not a phase or model change 2026-07-07 11:38:51 +02:00
pubspec.lock feat(block2): Nostr transport backend in commons_core (all 3 contracts) 2026-07-10 02:38:50 +02:00
pubspec.yaml feat(block1): inventory walking skeleton + first quick-add slice 2026-07-07 15:16:14 +02:00
README.md Note optional Darwin Core / GBIF / ALA biodiversity-portal bridge as a deferred, opt-in intention (open-decisions C + data-notes 3-bis), with privacy guardrails; not a phase or model change 2026-07-07 11:38:51 +02:00
seedks.ttf Fix naming (Seedks->Tanemaki) in PLAN; reconcile data-model with core/domain boundary (Plantare->Pledge, Movement->LedgerEntry notes); fix quantity_label type nit; note social layer as one indivisible block in VISION; add seedks.ttf asset 2026-07-07 11:06:38 +02:00
VISION.md Note optional Darwin Core / GBIF / ALA biodiversity-portal bridge as a deferred, opt-in intention (open-decisions C + data-notes 3-bis), with privacy guardrails; not a phase or model change 2026-07-07 11:38:51 +02:00

Tanemaki 種まき

A local-first, decentralized app for managing and sharing traditional seeds and seedlings.

Tanemaki (種まき, "to sow / scatter seeds" in Japanese; short name Tane, 種 "seed") helps people and collectives keep a friendly inventory of their seed bank, decide what they offer, and share it locally — without a central intermediary that could control, censor, or be fined for it. The goal is both practical and political: to support traditional seed varieties and push back against the seed monopoly.

The name honors the old Japanese mutual-aid traditions around rice — yui (shared community labor) and tanomoshi (reciprocity funds) — that inspired the paper Plantare, the "community currency for seed exchange" (BAH-Semillero, 2009, CC-BY-SA). Tanemaki is the digital Plantare.

Status

Early design. See PLAN.md for the full analysis and roadmap (in Spanish). The valuable prior work lives in docs/mockups/.

Principles

  • Local-first. Works fully offline, no account, no central server. Stays useful even if no one maintains it.
  • Decentralized. Identity is a single key you own (Duniter/Ğ1-style, with a derived subkey for transport); sharing rides on open protocols (Nostr), with optional interoperability with the Ğ1/Duniter web of trust and currency. Never a central marketplace.
  • Free/libre. Copyleft software, open data formats, multilingual from day one.
  • Layered. Inventory -> Offer -> Local sharing -> Web of trust. Each layer is useful on its own.

Conventions

English is the project language for all code. Identifiers, class/field/column names, code comments, commit messages, branch names, and technical documents (data model, schemas) are written in English, without exception. This keeps the project contributable by anyone, anywhere.

  • User-facing strings are never hardcoded — they go through i18n (the app itself is multilingual by design).
  • Planning and discussion documents may be written in Spanish (e.g. PLAN.md, docs/design/data-notes.md); technical specs that feed code are in English (e.g. docs/design/data-model.md).
  • Database schema changes ship as versioned Drift migrations (drift_schemas/), one new version per change, never editing a released version. See docs/design/data-model.md §5.

License

Software: AGPL-3.0 (GPLv3 strengthened with the network clause; compatible with GPLv3 and with Duniter/Ğ1nkgo, which we reuse). Docs & assets under CC-BY-SA where noted.