Projects
Group related Things without moving them.
A Project groups Things for Home and listings only. Every Thing stays at ~/things/<id> and keeps its own address. A Thing belongs to at most one Project. Projects do not change routing, visibility, or lifecycle.
Create a Project, then assign Things to it:
$ empty project create personal-finance Personal Finance
Created Project personal-finance at /home/exedev/projects/personal-finance
$ empty put ./notes.html --as finance --project personal-finance
Installed private static Thing finance in Project personal-finance from 1 file (61 bytes) at /home/exedev/things/finance
On yourname.emptyos.com
View it (owner sign-in): https://finance.yourname.emptyos.com/
Only you can open it until you share it
Share it: `empty share finance --with <email>`
Make it public: `empty expose finance`
See all Things: `empty things`
$ empty thing assign budget personal-finance
Assigned budget to Project personal-finance
$ empty thing unassign budget
Unassigned budget from Project personal-finance
To list Projects with their Thing counts, run empty projects. Use empty projects --json for agent-readable output.
Membership is the project: field in the Thing's thing.yaml. Assigning or unassigning a Git-backed Thing commits only that file as one change. That change appears in Changes. You can undo it while it is the latest change.
A Project is ~/projects/<id>/project.yaml with id, name, and an optional description. The id is permanent. Change the name instead.
Home draws each Project as an outlined region holding its Things. Things without a Project sit loose on Home, outside any outline. Home puts the most recently changed Things first, and orders the regions by their most recently changed Thing. A Thing whose Project is missing keeps working. Home shows it in a separate Missing project region. There is no command to delete or rename a Project yet.