Mission Control
Loading...
Create a Tag
Your Tags
About Command Deck
Mike's standalone mission control. Reads the LZ manifest, provides working tags/lists/search/sort, opens apps in an embedded viewer. All state saved to LZ KV cloud โ identical on every device.
How Edit Mode Works
Command Deck separates browsing (free, instant, no saves) from editing (batched, one cloud save when done). This prevents wasteful network calls while ensuring nothing is ever lost.
The flow
- Tap โ Edit to enter edit mode. An amber bar appears.
- Make all your changes โ reorder lists, tag apps, set nicknames, create tags.
- Every change saves to your device instantly (localStorage draft). If the app crashes or your phone dies, the draft survives.
- When you're done, tap Save โ one cloud write, everything synced.
- Or tap Discard to revert all changes since you started editing.
- If you reopen the app with an unsaved draft, you're prompted to resume or discard.
What requires edit mode
- Creating, renaming, deleting, or reordering lists
- Adding or removing apps from lists
- Creating or deleting tags
- Applying or removing tags on apps
- Setting or clearing app nicknames
What never needs edit mode
- Opening and using apps
- Searching, filtering, sorting
- Syncing the manifest
- Viewing the About or Data Safety tabs
Source Code Backup โ How & Why Tokens Are Preserved
The problem
Storing source code alongside app data means any Claude who opens the app's KV data would load the entire HTML file into their context window, consuming thousands of tokens before any work begins. This is wasteful and can exhaust Claude's context on large apps.
The solution: on-demand loading with a version index
Source code is stored under separate KV keys (cd-source-v1, cd-source-v2, etc.), NOT inside the main state key. The main state key (command-deck) contains only lightweight data โ tags, lists, nicknames. A separate index key (command-deck-source) contains a tiny JSON array of version metadata: version number, date, file size. No source code in the index.
When a Claude needs the source, they fetch one specific versioned key on demand. When they don't, the source is never loaded. The About tab only shows the version list (metadata) โ the full source loads behind a "View" button that a human taps deliberately.
Limitations
- 25MB per key: KV values max at 25MB. The Command Deck HTML is ~56KB, so this is fine. But if it grew past 25MB, it couldn't be stored in a single key.
- No diffing: Each version is a full copy. 10 versions = 10ร the storage. At 56KB each, this is negligible, but worth knowing.
- No encryption: Anyone who knows the KV key pattern can read the source. This is Mike's private infrastructure so it's acceptable, but the data is not encrypted at rest.
- Eventually consistent: KV writes can take up to 60 seconds to propagate globally. A backup made in London might not be readable in Sydney for a minute.
- Single platform: All backups live in Cloudflare KV. If Cloudflare has a catastrophic incident affecting the KV namespace, all versions could be lost simultaneously. See the Data Safety tab for mitigation.
Architecture Reference
For Claude โ repair/extend
Single HTML file. No build step. Fetch source from cd-source-v{N}, edit, deploy with wrangler pages deploy . --project-name=command-deck --branch=main. State shape: tags[], appTags{}, lists[], appNicknames{}, savedAt. Manifest from GET /apps. Apps via iframe to /apps/{id}/html.
Source Code Versions
Data Safety Assessment
An honest look at where your data lives, what's protected, what's vulnerable, and what you should do about it.
Where Your Data Lives
โ App HTML (your built apps)
Stored in Cloudflare KV as HTML blobs under app:{id}. Each app is a self-contained file. Versioning exists โ old versions are kept when redeploying under the same name. Risk: Low for individual apps. Any Claude can fetch and redeploy an app from KV at any time. The main risk is KV namespace deletion (see below).
โ App data (what apps save)
Stored in KV under appdata:{id}:{key}. Each app's saved state (settings, entries, preferences). No auth required to read or write. Risk: Medium. Data is only in KV โ no backup copies are made. If an app's data key is overwritten or deleted, the data is gone. localStorage provides a temporary cache but is cleared by browser resets.
โ Command Deck state (tags, lists, nicknames)
Stored in KV under appdata:platform:command-deck. One key, one JSON blob. If this key is corrupted or deleted, all your tags, lists, and nicknames are lost. localStorage has a copy but only on the last device you used. Recommendation: Periodically export this data (future feature) or back up the source which contains a snapshot.
โ LZ frontend (the React app)
Deployed to Cloudflare Pages project landing-zone-dbd. The source is in zip files passed between Claude sessions. If the zip is lost and the Pages project is deleted, the frontend is gone. The compiled build can be downloaded from Pages but the source code cannot be recovered from it. Recommendation: Store source zips in Google Drive or another external location.
โน Command Deck source
Backed up in KV via the source versioning system on this page. Also stored as a launcher app in the LZ. The HTML file is also downloadable from Claude chat sessions. Risk: Low โ multiple copies exist across KV, LZ, and chat history.
What You Should Do
1. Export app manifest regularly
The manifest (GET /apps) is the master list of all your apps. Save a copy of this JSON periodically. If the KV manifest key is ever corrupted, this lets you rebuild. A future Command Deck feature could automate this.
2. Store source zips externally
Every time Claude builds or modifies the LZ or any major app, download the source zip from the chat. Store these in Google Drive, Notion, or any location outside Cloudflare. KV is durable but it's one platform โ external copies are your insurance.
3. Back up Command Deck source
Use the "Backup Current Source to KV" button in the About tab after any changes. Also keep the HTML file from Claude chat sessions.
4. Consider a scheduled R2 export (future)
A Cloudflare Worker could run on a schedule (e.g., weekly) that exports all KV app data to an R2 bucket as timestamped JSON files. R2 has 99.999999999% durability. This would make your data nearly indestructible. This doesn't exist yet but is straightforward to build.
5. Don't rely on localStorage
localStorage is a cache, not a backup. It's cleared by "clear browsing data", phone factory reset, or switching browsers. Never treat it as your source of truth โ that's what KV is for.
Single Points of Failure
โ The KV namespace
KV namespace ID: 5a3da17af8dc4241bda02255b95fb94d. ALL app data, ALL manifests, ALL stored HTML lives here. If this namespace is deleted or corrupted, everything is lost simultaneously. Cloudflare doesn't offer automatic KV backups. The R2 export solution above is the fix. Priority: High.
โ The Worker (lz-api)
If the Worker is deleted or its code is broken, all apps stop loading and all data becomes inaccessible via the API. The data still exists in KV โ it just can't be reached without the Worker. Recovery: redeploy the Worker code. The current code can be fetched via the Cloudflare MCP tool. Priority: Medium.
โ Individual apps
If one app is deleted, only that app is lost. Its HTML and data keys are removed but other apps are unaffected. App versioning means previous versions may still exist in KV even after the latest is deleted. Priority: Low.