feat(hub): hide standalones not provisioned on this deploy #130
No reviewers
Labels
No labels
app:activities
app:chat
app:events
app:forum
app:libra
app:market
app:restaurant
app:tasks
app:wallet
app:webapp
bug
enhancement
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
aiolabs/webapp!130
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/hub-hide-disabled-standalones"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes the behavior in #129.
Problem
The hub rendered all 8 standalones statically and greyed out any whose
VITE_HUB_<APP>_URLwas unset — so an events-only deploy showed 7 dead "coming soon" tiles. The greyed path was overloaded:hubLink()returnednullfor both "not deployed" and "logged out", so the template couldn't tell them apart.Approach — registry → resolver → view-model
Rather than special-casing, the hub now resolves an explicit availability state per app:
availableauth-lockedinactiveactive:false)unavailableavailabilityOf(m)is the single resolver(app, env, auth) → state.tilescomputed maps the catalog → view-models and dropsunavailable, so the grid only ever renders provisioned apps.auth-lockedpreserves today's greyed + login-toast behavior for deployed-but-logged-out apps (wallet, chat, tasks, libra).Forward-compatibility (per the install/remove model discussed)
inactive/ the optionalactiveflag is wired now as a greyed, inert seam for a future deploy-time "disable a provisioned app" capability — no app sets it yet, no UI/config committed. This is the "greyed-out button" case: the app is enabled on deploy, then marked off./hub/appsresponse or a NIP-78 replaceable event) for Nextcloud-style install/remove — without touching the render path. Resolver and view stay as-is; only where the list comes from changes.Verification
vue-tsc -bbuild passes..envsets allVITE_HUB_*_URL, so locally every tile isavailableand the hide path can't be exercised — it shows on a real partial deploy (e.g. events-only). Logic is a straightforward env-presence + auth check.Decision taken (open Q in #129)
Went with (a): any app with no live URL ⇒ hidden. Deliberate greyed teasers are now expressed via
active:false(theinactivestate) rather than an env-less tile, so the two intents stay distinct.🤖 Generated with Claude Code
inactive(deployed-but-greyed) app state end-to-end #132