Projects
One list of every project, each with an id that never changes. People and organizations point at the id, so a project's name lives in one place.
The people and projects below are made up to show the shape. Mapping an exchange to a project on its own, the Relate step, is not built yet.
The picture
The projects list, as a table
One row is one project in projects.json. A field is one column.
| id | name | aliases | from | created_at |
|---|---|---|---|---|
prj_3fa21c9e0b4d | Tool library | Tool shed | agent | 2026-10-08T21:30:00-05:00 |
prj_8c1e5a7d2f90 | Neighborhood Workshop | intake:json agent | 2026-10-09T09:12:04-05:00 |
What each field holds
- id
prj_plus 12 random hex characters. Given once and never changed. Not made from the name, so a rename never breaks a link.- name
- The name shown everywhere. Change it here to rename the project.
- aliases
- Earlier names. A store or note that still uses an old name lands on the same project.
- from
- The stores or routes that named it. A route that names it again is added here.
- created_at
- When it was first named.
In a person or organization file, the link is one entry in relationships, a Murmurations triple:
- predicate_url
- How they relate to the project, in your own word.
affiliatedunless the store or note says otherwise, such ascollaborator. - object_url
- The project's
prj_id. The same field can hold a person (per_) or an organization (org_).
What the file looks like inside
JSON, a plain text format. This is projects.json, one file for the whole folder.
{
"about": "Every project people and organizations point at. Rename a project by changing its name here; its id never changes.",
"projects": [
{
"id": "prj_3fa21c9e0b4d",
"name": "Tool library",
"aliases": ["Tool shed"],
"from": ["agent"],
"created_at": "2026-10-08T21:30:00-05:00"
},
{
"id": "prj_8c1e5a7d2f90",
"name": "Neighborhood Workshop",
"from": ["intake:json", "agent"],
"created_at": "2026-10-09T09:12:04-05:00"
}
]
}
An intake note names a project by name. The processor looks the name up, ignoring case and checking aliases. A name it has never seen gets a new random id, and the report says to rename it in projects.json.
{
"filed_by": "agent",
"how_filed": "From a note the owner gave the agent.",
"people": [
{ "name": "Sam Lee", "email": ["sam@example.org"], "projects": ["Tool shed"] }
]
}
Sam's person file then holds the id, not the name:
"relationships": [
{ "predicate_url": "affiliated", "object_url": "prj_3fa21c9e0b4d" }
]
How it connects
Your own want for a project is one file in offers-wants/. Its who is you, and its associations list holds the project's prj_ id. People and organizations who can meet it are named in the note's with list. Each gets a can-meet connection on their own record, pointing at the want's ow_ id.
Wants and offers โ
Impact report โ
