| title | Food Messaging and Trust Roadmap |
|---|---|
| weight | 70 |
This roadmap keeps food exchange simple while supporting practical trust and responses.
Allow members to post surplus or request listings (for example: oats, jam, produce), and let peers respond with intent ranges (for example: 1-2 jars, 5-10 jars, 15+ jars).
- Keep listings as they are:
giveorfindwith pickup windows and optional public contact. - Add lightweight responses bound to a listing:
listing_idresponder_peer_idintent(interested,can_take,can_offer)quantity_band(free text like1-2 jars)note(short)created_at_unix_ms
- Keep in-app response UX intentionally small:
- one-tap reaction chips
- optional quantity band input
- optional note
- Route detailed conversation to external channels:
- Matrix
- Signal
- SMS/phone
This avoids turning Common OS into a full chat app while still unlocking coordination.
Use local-first notifications in phases:
- In-node activity feed for new responses.
- Optional push-style local notifications in the PWA/app shell.
- Optional bridge notifications only when the user explicitly shares Matrix/SMS contact.
Use QR scan verification as the first trust primitive.
- QR exchange establishes node identity and public key mapping.
- Promote trust in explicit levels (discovered -> verified -> trusted).
- Require
trustedfor posting listings. - Keep responses readable to peers, but show trust badges on responders.
Longer-term, add a web-of-trust score inspired by GPG:
- trust attestations signed by peers
- local weighting policy (strict vs permissive)
- no global reputation token
IPFS and broader decentralized storage can be valuable, but adds operational complexity early.
Recommended sequence:
- Keep SQLite local-first baseline now.
- Add signed export/import bundles for backup and migration.
- Consider optional IPFS pinning for public noticeboard snapshots later.
Potential endpoints for v1 responses:
POST /api/food/listings/{id}/responsesGET /api/food/listings/{id}/responses
Rules:
- only trusted peers can post listings
- any known peer can post a response
- contact fields remain optional and explicit
To keep "a reason for every line of code":
- each new API requires one integration test
- each trust rule requires one negative test
- each UI action requires one localized string and one error state
- each persisted field requires a documented purpose in schema comments