A space is a shared library. Portfolios, strategies, backtests, signals, tactics, journals and models put inside it are visible to every member and can be edited by every member with write access. Everything else about VEEMAN stays exactly as it is: same pages, same workspace, same maths.
Spaces are private and invite-only. There is no public gallery and no way to discover a space you were not invited to.
Two places, always visible, showing the same state:
They matter for one reason above all: inside a space the library looks identical to your own. The label is what stops you saving in the wrong place.
Switching does not reload the page: the content fades and re-reads everything from the new scope.
This split is the heart of the feature.
Belongs to the space — saved portfolios, saved strategies, variants, trade CSVs, backtests, signal sets, tactics, replay journals and modeling models. They belong to the space, not to whoever created them: if that person leaves, their work stays.
Stays personal, always — your working session and its autosaved draft, your settings, your "recently used" marks, AI insight cache, and any running job (Monte Carlo, optimizer, walk-forward). You can be inside a space and still have your own unsaved work, private to you, until you deliberately save it.
A space sees saves, not keystrokes
Your draft is yours even while you edit an object that came from the space. The space only ever sees the deliberate act of saving. Two people editing at the same time do not overwrite each other's drafts.
| Role | Can do |
|---|---|
| Owner | Everything, plus: invite, change roles, rename, delete the space, transfer ownership. One owner per space. |
| Editor | Read, create, edit, delete objects in the space. Bring things in and out. Comment. |
| Read only | Read, compare, copy things out to their own library, and comment. Cannot change anything in the space. |
Read only is not a mute button on purpose: the person who cannot change the recipe is often the one with the objection worth hearing.
Everywhere a person appears — the member list, the author of a version, who holds the turn, who wrote a comment — you are shown by display name, never by the account id. That name is taken from the account you signed in with: the full name you registered with, or the name on your Google account, falling back to the first part of your email address. Nothing needs setting up; it is there the first time you open the app.
You can override it in Settings → Account, and from then on it is yours: changing the name on your Google account will not touch it. Clearing the field is how you go back to following the account name.
Names are visible only inside a shared space
A display name is shown to the people you share a space with, and to you. Anyone else gets a neutral label instead. Your email address is never shown to other members — the only place it appears is the invitation you sent yourself.
Create a space from Settings → Shared spaces. The same panel is where you invite, change roles, transfer ownership and leave or delete.
An invite is tied to one email address, works once, and expires after seven days. If the server has an email provider configured the invite is sent; otherwise the link appears on screen with a copy button next to it, and you send it yourself — it stays there until you dismiss it, and Show link brings any pending invite back. Either way the invite must be accepted by an account whose address matches.
Every member needs their own plan
Being in a space requires collaboration in your plan, not just the owner's. The space's capacity (how many members, how long versions are kept) comes from the owner's plan. If your subscription lapses you lose access, but your objects stay in the space and your name stays on the changes.
Objects move between your library and a space by copy, in both directions, always. There is no live link: after a copy the two versions go their own way.
A copy carries its companion trade files with it. If the name already exists on the other side the copy is renamed, and the references inside it are rewritten to match, so dynamic sizing keeps its trades.
Real numbers are shared
A saved portfolio contains the actual P/L series. Copying it into a space shares your real performance with every member, not just the recipe.
Every save inside a space writes a version. Open Versions from a library row to see who changed what, and when.
When you update a shared object you can add a short "what did you change?" note. It replaces the automatic summary and says the why, which nothing else records.
Older versions are pruned after the retention window of the owner's plan. The first version, the latest, and any version with a hand-written note are always kept — writing a note is also how you mark a version as worth keeping.
Inside a space, deleting an object leaves a tombstone and the object moves to the space trash (Settings → Shared spaces). Anyone can restore it. In your personal library deletion stays immediate and final, as it always was.
If someone else saved while you were working, your save is refused instead of silently overwriting theirs. You get a dialog with two ways out:
There is no automatic merge. On recipes with embedded series a wrong merge is worse than an honest conflict.
When you open a portfolio that lives in a space, you take a turn on it for fifteen minutes, renewed while you work and released when you leave. If someone else holds it, a band appears at the top of the workspace saying who, and for how long, with a Take control button.
The turn is a courtesy, not a lock: nothing is blocked, and taking control never destroys anyone's work (their unsaved changes stay in their own draft). It exists so you find out before doing the work twice, rather than at save time.
Every object in a space carries a flat comment thread, reachable from the speech-bubble icon on its library row, with a badge showing how many there are. Comments belong to that copy in that space: they do not travel when the object is copied elsewhere.
You can delete your own comments; the owner can delete any.
A dot on the scope pill means something happened in one of your spaces; the menu shows the count per space. Click the count to jump straight to that space's activity, where the new entries are marked with an accent dot and counted at the top. Opening the feed is what marks it as read — there is no button to remember to press. Your own actions never count.
Settings → Shared spaces shows what has happened, newest first. Two sources, one list:
Role changes in particular are worth having written down somewhere, so nobody discovers them by hitting a wall.
Invited addresses never appear in the feed: it is read by every member, and someone who has not joined yet is not their business.