Keeps Launch Plan 🔮 #
Status: 🟡 v6 Live, Rolling to v7
Last Updated: March 8, 2026
Current Timeline #
| Date | Milestone | Status |
|---|---|---|
| 2026-03-07 | v6 launch prep complete | ✅ Done |
| 2026-03-08 | v6 deployed on mainnet (KT1J15kADMuRWh9kJZzosBeRBYPjYr7RvhoN) |
✅ Done |
| 2026-03-08 | First production keep minted ($roz, token #0) |
✅ Done |
| 2026-03-08 | v7 source + artifacts prepared | ✅ Done |
| Next | v7 staging validation (transfer + creator refresh + lock) | 🔄 In Progress |
| Next | v7 mainnet deployment from keeps.tez |
⏳ Pending |
Active Contracts #
| Network | Contract | Version | Status | Admin |
|---|---|---|---|---|
| Mainnet | KT1J15kADMuRWh9kJZzosBeRBYPjYr7RvhoN |
v6 | Live | keeps.tez |
| Ghostnet | KT1StXrQNvRd9dNPpHdCGEstcGiBV6neq79K |
v3 lineage | Dev/Test | keeps.tez |
Wallet Architecture #
| Wallet | Address | Domain | Role |
|---|---|---|---|
| kidlisp | tz1Lc2DzTjDPyWFj1iuAVGGZWNjK67Wun2dC |
keeps.tez | Production deploy/admin wallet |
| staging | tz1dfoQDuxjwSgxdqJnisyKUxDHweade4Gzt |
— | Staging and migration housekeeping |
| aesthetic | tz1gkf8EexComFBJvjtT1zdsisdah791KwBE |
aesthetic.tez | Creator-flow verification |
v7 Direction #
- Keep FA2 entrypoints and storage compatibility.
- Add creator-safe post-transfer refresh in
edit_metadata. - Preserve immutable guarantees for
content_hashandroyalties. - Keep Mongo
secretsas the single source of truth for active profile/address. - Detailed runbook:
tezos/V7-LAUNCH-PLAN.md
Overview #
Keeps are interactive KidLisp programs preserved as Tezos FA2 NFTs. Each keep bundles the complete source code, a self-contained HTML artifact, and metadata into an on-chain token that can be viewed on objkt.com or played directly from IPFS.
Current Architecture #
User Flow:
prompt.mjs (keep $code)
→ keep.mjs (timeline UI with confirmation)
→ /api/keep-mint (SSE streaming)
→ bundle-html (HTML generation)
→ oven/grab-ipfs (256x256 thumbnail)
→ Pinata IPFS upload
→ tezos-wallet.mjs (Beacon SDK)
→ Temple/Kukai/etc wallet
→ Contract.keep() call
→ /api/keep-confirm (record in MongoDB)
Rebake Flow (update existing):
→ keep.mjs (already-minted view)
→ Rebake button → /api/keep-mint?regenerate=true
→ Update Chain button → /api/keep-update
→ edit_metadata entrypoint
Phase 1: Ghostnet Hardening ✅ (Complete) #
1.1 Core Mint Flow Testing #
| Test Case | Status | Notes |
|---|---|---|
| Basic mint from prompt.mjs | ✅ | keep $code works |
| Timeline visual feedback | ✅ | 10-step progress UI |
| Confirmation before mint | ✅ | User must confirm before starting |
| Wallet connection (Temple) | ✅ | Beacon SDK integration |
| Wallet connection (Kukai) | ✅ | Works with network switching |
| Bundle HTML generation | ✅ | Self-contained artifact |
| Thumbnail WebP generation | ✅ | Fixed 256x256 via oven |
| IPFS pinning (Pinata) | ✅ | 3 files per keep |
| Duplicate prevention | ✅ | content_hashes bigmap |
| Already-minted UI | ✅ | Shows existing token info + rebake |
| Error handling | ✅ | Improved messages |
| SSE streaming | ✅ | Real-time progress updates |
| Network switching | ✅ | Uses KEEPS_NETWORK env var |
| Token ID retry | ✅ | 5 attempts after mint |
1.2 UI/UX Polish #
In keep.mjs:
In prompt.mjs / wallet.mjs:
1.3 Analysis & Metadata #
Implemented:
1.4 kidlisp.com Integration #
Current state: kidlisp.com is a standalone HTML editor that:
- Has code editor with syntax highlighting
- Shows live preview
- Can save/load to localStorage
- Links to aesthetic.computer for full execution
Needed for keeps integration:
1.5 API Improvements #
/api/keep-mint:
/api/keep-update:
/api/keep-confirm:
New APIs needed:
1.6 Bundle/NFT Fixes #
Phase 2: Mainnet Preparation ✅ (Complete) #
2.1 Contract Deployment #
# Mainnet staging contract already deployed!
# Contract: KT1JEVyKjsMLts63e4CNaMUywWTPgeQ41Smi
Pre-deployment checklist:
2.2 Configuration #
Environment Variables (Current):
KEEPS_NETWORK=mainnet
KEEPS_CONTRACT=KT1EcsqR69BHekYF5mDQquxrvNg5HhPFx6NM
KEEPS_RPC=https://mainnet.ecadinfra.com
Implemented:
2.3 Network Switching #
In keep.mjs and wallet.mjs:
2.4 Fee Structure #
| Fee Type | Ghostnet | Mainnet |
|---|---|---|
| Mint fee | 0 XTZ | 1-5 XTZ |
| Gas (estimate) | ~0.1 XTZ | ~0.3 XTZ |
| IPFS pinning | Free | Free (Pinata) |
Phase 3: Launch & Marketing #
3.1 Soft Launch #
- Enable mainnet for trusted testers
- Mint first 10-20 canonical keeps
- Verify objkt.com display
- Test secondary sales
3.2 Public Launch #
- Announce on aesthetic.computer
- Add keeps to kidlisp.com homepage
- Create launch collection (curated codes)
- Document in WRITE-A-PIECE.md
3.3 Gallery Features #
Testing Checklist #
Ghostnet Tests (Do Before Mainnet) #
# From prompt.mjs
keep $cow # Already minted → shows existing
keep $newpiece # Fresh mint → full flow
# From kidlisp.com
# 1. Write new code
# 2. Click "Mint"
# 3. Connect wallet
# 4. Sign transaction
# 5. Verify on objkt.com
Manual Test Flow #
-
Start fresh:
wallet disconnect -
Connect wallet:
wallet -
Check piece doesn't exist:
keep $testxyz -
Observe timeline:
- Wallet connected ✓
- Validate piece ✓
- Analyze source ✓
- Generate thumbnail ✓
- Bundle assets ✓
- Upload to IPFS ✓
- Create metadata ✓
- Review & confirm ✓
- Sign transaction ✓
- Complete! ✓
-
Verify on explorers:
- TzKT: token exists
- objkt: artwork displays
- IPFS: artifact loads
Known Issues #
High Priority 🔴 #
Wallet reconnection flaky✅ Fixed - Beacon session restoration improvedError messages cryptic✅ Fixed - Better user messagesNo cancel during prep✅ Cancel button + Esc returns to prompt
Medium Priority 🟡 #
Thumbnail size✅ Fixed - Now 256x256- No batch minting - One at a time only
Missing analytics✅ Added - Sync status, contract linking
Low Priority 🟢 #
- No royalties - Could add FA2.1 royalty support
- No burns - Tokens are permanent
- No collections - All in one flat list
Files & Locations #
| Component | Location |
|---|---|
| CLI tool | tezos/keeps.mjs |
| Contract v3 (Python) | tezos/keeps_fa2_v3.py |
| Contract v3 (Michelson) | tezos/KeepsFA2v3/ |
| Mint UI | system/.../disks/keep.mjs |
| Prompt commands | system/.../disks/prompt.mjs |
| Wallet lib | system/.../lib/tezos-wallet.mjs |
| Mint API | system/netlify/functions/keep-mint.mjs |
| Bundle API | system/netlify/functions/bundle-html.js |
| kidlisp.com | kidlisp.com/index.html |
Next Steps (Production Launch) #
Next Steps (Now) #
- End-to-end mint via keep UI
- Run
keep $codefrom prompt and complete wallet signing. - Verify
keep-confirmwrites the record and the token shows in objkt.
- Artifact bundle validation
- Confirm the “bundle” + “ipfs” steps complete.
- Open the IPFS artifact URL and ensure it runs.
- v3 attribution test
- Mint with creator wallet → Rebake → Update Chain (prepare mode).
- Confirm objkt “Created by” remains the original creator.
- Fee/contract consistency
- Ensure review step shows the contract fee and wallet sends the same amount.
Mainnet Staging Testing (Current Phase) #
Metadata Editing Tests:
v3 Permission Model (edit_metadata):
edit_metadata can be called by:
1. Admin (contract administrator) — loses artist attribution on objkt!
2. Token owner (current holder) — may not be original artist
3. Original creator (token_creators[token_id]) — ✅ PRESERVES attribution!
For proper objkt.com artist display:
→ User must sign the mint from their wallet (becomes token_creator)
→ User must sign edit_metadata from same wallet (preserves firstMinter)
→ Server/admin signing breaks attribution!
Current Token 0 ($roz) State:
- Creator:
tz1gkf8EexComFBJvjtT1zdsisdah791KwBE(aesthetic.tez) - Owner:
tz1dfoQDuxjwSgxdqJnisyKUxDHweade4Gzt(staging) - Admin:
tz1dfoQDuxjwSgxdqJnisyKUxDHweade4Gzt(staging)
Security & Logic Audit:
Integration Tests:
Production Launch #
Last updated: January 1, 2026