vibes-diy sharing 13 states · 3 roles · docs
who's in. who's out. what they can do.

You made your thing.
Now run who sees it.

Every link you share lands someone on a decision: do they get in, or do they see a door? This is the full reference — every access state, every control, Clone vs Remix, the pill, all of it.

access states
13
roles
3
sharing controls
3
buttons on the door
2
the door

Every state the door can be in.

When someone follows your link, the platform resolves one state. Here's all of them.

state what it means what they see
ownerIt's their thingFull controls — Edit, Share, Update
granted-access.editorApproved as editorApp loads, can comment
granted-access.viewerApproved as viewerApp loads, read-only
granted-access.submitterApproved as submitterApp loads, submitter-level interaction
public-accessPublic sharing is on; no personal grantApp loads as anonymous viewer
accepted-email-inviteRedeemed an email invite linkApp loads, treated as editor
req-login.requestPrivate; visitor is logged outLanding card: Fresh Install + Request access
req-login.inviteHas a pending invite; not logged inLanding card: Fresh Install + Join collab
req-login.auto-joinAuto-approve is on; visitor not logged inLanding card: Fresh Install + Join collab
pending-requestRequest submitted; owner hasn't approved yetLanding card: button disabled → "Requested"
revoked-accessHad access; it was revokedLanding card: button disabled → "Revoked"
not-foundDoesn't exist, or no grant on a private thing"App not available"
not-grantExists but this visitor has no grantSame as not-found
the door, when you're outside

What they see when they don't have access.

A centered card over a grid background. App title, screenshot if one exists, two buttons side by side.

/ 01 / SHOW UP

They clicked your link.

They don't have access. Instead of the app, they see a card: the thing's title, a screenshot if one's been generated, and two buttons. No blank error page. Always the card.

/ 02 / CHOOSE

Two buttons. Two different transactions.

Fresh Install — makes their own copy, running with their own data. They never touch yours.

Request access / Join collab — asks to join yours. Label changes by state. "Requested" or "Revoked" means it's disabled.

Fresh Install Request access
/ 03 / ROUTE

Logged out? The platform remembers.

If they're not signed in and click either button, the URL gets ?intent=install or ?intent=join, a login screen appears, and the action fires automatically after sign-in. No lost clicks.

the controls

Three switches. One comments toggle.

These live in the Share panel (bottom-right pill → Community button) and in App Settings → Sharing. Same data, both places.

Public Sharing

On: anyone gets in as an anonymous viewer. No account, no request, no door at all.

Off (default): visitors without a grant need either an invite or Requests to be enabled. Otherwise they get "App not available" — no landing card, no door.

Requests

Off (default): visitors with no grant see "App not available" — the landing card with Request access only exists when this is on.

On: visitors can knock. A live badge count appears on your Share button as requests come in. Auto-approve option: pick a role (viewer or editor) and every incoming request gets approved automatically — no individual approvals needed.

Email Invitations

Type an email, click Editor or Viewer. They get a one-time token link by email.

Logged in when they open it → app loads immediately. Logged out → sign in, app opens. Invite list shows pending / accepted / revoked with per-invite role toggle and revoke action.

Comments

"Only collaborators can comment" — off by default. Off means members (editors, viewers, owner) can post and delete. Public visitors on a public app are not members and cannot comment even with this off. On means editors and owner only.

Enforced server-side. The composer is also hidden client-side for viewers and anonymous users as a prefetch UX.

copy the thing

Clone lands you in the app. Remix lands you in the editor.

Both create a new copy under your account. One flag changes where you land.

Clone

Skips the editor entirely. Your copy goes straight to production. You land at /vibe/yourname/appname — the live app, running with your data.

This is also what Fresh Install does from the landing card.

Remix

Opens the builder with ?view=code. Your copy starts in dev mode. You land in the editor, ready to change the source.

Same fork under the hood — one flag (skipChat) decides where you land.

what they can do

Three roles. One not in the UI.

Editor and Viewer are what you assign. Submitter exists in the code but no current control exposes it.

/ EDITOR

Full collaborator.

Can interact with the app and write to its databases. The thing responds to them the way it responds to you.

/ VIEWER

Read-only.

Can see and use the app. Writes to the app's databases may be restricted depending on how the app's database access rules are configured.

/ SUBMITTER

Not in the UI yet.

Present in the type system and grant enum. Intended for form-submit or write-limited workflows — add data, can't read existing records. No control exposes it currently.

the floating thing

The pill in the corner.

Bottom-right of any /vibe/ page, after the app loads. Expands to three buttons.

Three Buttons · Two Badge Indicators

Home opens vibes.diy. Community opens the Share panel. Vibe opens a vertical submenu. Badge on Community (owner only): live count of pending access requests. Dot to the left of the pill (owner only): you have unpublished changes.

Make your thing. Run it for your crew.

The sharing system is how your thing becomes their thing — or stays yours. Build it on Vibes DIY.