A Vercel-ready Next.js product for checking token launch readiness, designing community utility and turning a cultural signal into an Emblem-ready, multichain creative launch kit. It includes a deterministic project validator, Community Mission builder, downloadable Utility Manifest and readiness reports, three curated creative directions, a Launch Kit v1 JSON handoff, optional provenance and a waitlist form.
Live product · SDK showcase · Utility builder · Partnership contact
ZeitMint is the creative layer above launchpads. Emblem is the preferred partnership and handoff target, Solana is the default chain, and the same kit can travel to Robinhood Chain or another EVM workflow. ZeitMint does not deploy tokens, configure liquidity or replace the launch platform selected by the creator.
Emblem is a partnership target, not a current partner, affiliation or endorsement.
ZeitMint gives launchpads a structured intake layer before deployment. A creator can validate the project, develop a differentiated identity, define useful community work and export portable JSON for a launchpad-owned flow. The launchpad retains control of contracts, tokenomics, compliance, liquidity and final approval.
| Surface | Current status |
|---|---|
| Launch-readiness validator | Working browser implementation |
| Launch Kit v1 | Working builder, export and public JSON Schema |
| Utility Manifest v1 | Working mission builder, export and public JSON Schema |
@zeitmint/launch-kit |
Universal v0.3.0 release with optional Uniswap v4 integration |
| Partner API v1 | Versioned validation, capabilities and universal draft routes |
| Founding pilot | 49 USDC planned price; no live checkout or payment collection |
| Robinhood Chain provenance | Optional testnet experiment |
The proposed partner flow, integration boundaries and design-partner questions are documented in docs/partner-integration.md.
The homepage validator performs ten deterministic checks across identity, narrative, public presence and creator declarations. It produces a score out of 100, separates blockers from warnings, copies a plain-text launchpad handoff and downloads a structured JSON readiness report.
Validation runs entirely in the browser; project data is not submitted or stored. URL checks validate format only. Ownership, availability, trademark, contract and regulatory checks remain separate and are stated as limitations in every report.
The public readiness-report JSON Schema lives at /readiness-report.schema.json, and the scoring implementation lives in app/lib/readiness.ts.
The Community Mission builder turns a useful contribution brief into a portable Utility Manifest. It validates the project and ticker, requires a concrete deliverable and submission criteria, records rewards and self-declared funding, requires original work and rejects missions based on buying, shilling, raids, likes or reposts.
Drafts are versioned and saved only to local browser storage. ZeitMint does not host submissions, verify funding, custody rewards or automate payouts in this release. Every generated mission remains a draft, and its utility proof remains unverified until hosted completion receipts are built.
The public JSON Schema lives at /utility-manifest.schema.json, and the deterministic implementation lives in app/lib/utility-manifest.ts.
Requires Node.js 22.13 or newer.
git clone <your-fork-or-repository-url>
cd zeitmint
npm ci
cp .env.example .env.local
npm run devOpen http://localhost:3000.
All environment files are ignored except .env.example. Add real values only to .env.local or Vercel; never commit them.
Waitlist signups and one anonymous visit alert per browser session are sent to a Telegram bot. The visitor alert includes only the page path, referring hostname and timestamp; it does not include an IP address.
- Create a bot by messaging
@BotFatherin Telegram and running/newbot. - Add the token to the ignored
.env.localfile:
TELEGRAM_BOT_TOKEN=your_bot_token- Message the bot, then find the destination chat ID without exposing the token:
npm run telegram:chat-id- Add the returned ID to
.env.localand restart the development server:
TELEGRAM_CHAT_ID=your_chat_idTo send alerts to a Telegram group instead, add the bot to that group, send a bot command in the group and run npm run telegram:chat-id again.
The website does not currently contain a checkout. It does not request a payment signature, move funds or store private keys. The 49 USDC amount is a planned founding-pilot price, and the public call to action joins the founding list.
Before payment can be enabled, the product needs wallet-native transaction construction, server-side confirmation, replay protection, expiring orders and support/refund handling. A custom contract is only necessary if the product later needs escrow, refunds or automatic revenue splits.
The studio creates a stable JSON package containing token metadata, creative direction, campaign copy, handoff boundaries and creator-review flags. The handoff records a preferred launchpad and chain, defaulting to Emblem and Solana, while preserving an open format for other launchpads and EVM chains. Users can download the JSON or copy an Emblem-ready plain-text brief.
The public JSON Schema lives at /launch-kit.schema.json. The browser implementation lives in app/lib/launch-kit.ts; the published SDK provides typed helpers for launchpads to validate and import kits.
The packages/launch-kit workspace contains @zeitmint/launch-kit v0.3.0. It builds ESM, CommonJS and TypeScript declarations; validates all three public schemas; checks name, ticker and chain consistency across a bundle; and maps an approved bundle into a neutral launchpad-owned draft.
The core SDK is protocol-agnostic. EVM launchpads can optionally import @zeitmint/launch-kit/integrations/uniswap-v4 to create and validate a protocol-shaped PoolKey and hook intent. That integration orders currencies and validates fees, tick spacing, initial price bounds and hook permission flags, but does not deploy hooks, initialize a pool, add liquidity, sign or move funds. Solana and Emblem workflows continue to use the universal handoff without a Uniswap dependency.
Build, test and inspect the release tarball locally with:
npm run sdk:test
npm run sdk:packThe deployed partner API exposes:
GET /api/v1/partner/capabilitiesPOST /api/v1/partner/validatePOST /api/v1/partner/{partner}/draftGET /partner-api.jsonGET /.well-known/zeitmint.json
The API is stateless, performs no network calls from submitted content and limits request bodies to 256 KiB. Public bundle validation is unauthenticated; partner draft routes require a partner-specific bearer token configured in the server-only ZEITMINT_PARTNER_KEYS JSON variable. It does not deploy, sign, move funds or submit a launch. Vercel Firewall rate limits should be configured before announcing the endpoint broadly.
Create a bearer token for any launchpad ID, then sync it through the existing Vercel environment flow:
npm run partner:key -- your-launchpad
npm run env:vercelThe generator stores the token in ignored .env.local, applies owner-only file permissions and prints the new token once so it can be shared privately. Use --rotate to replace an existing partner token.
The shareable showcase is available at https://zeitmint.com/#sdk, with partnership contact at devs@zeitmint.com.
The universal handoff maps public launch fields and fee intent into a review draft. Optional partner fields live under options.extensions; live submission remains disabled until each launchpad implements its own reviewed connector.
ZeitMint includes an early, independent Robinhood Chain testnet provenance option. It is a secondary multichain experiment, not the main launch route. It can add/switch an injected EVM wallet to chain ID 46630 and register the Launch Kit v1 content hash as a creator-owned receipt. The registry does not deploy a token, choose a launchpad, move funds or grant any admin privileges.
Run the contract tests:
forge testTo deploy the registry without placing a private key in a command or file, first import a dedicated testnet wallet into Foundry's encrypted keystore:
cast wallet import zeitmint-deployer --interactive
forge create contracts/src/ZeitMintCreativeKitRegistry.sol:ZeitMintCreativeKitRegistry \
--rpc-url https://rpc.testnet.chain.robinhood.com \
--chain 46630 \
--account zeitmint-deployer \
--broadcastFund only that dedicated wallet with testnet ETH. After deployment, configure the returned public contract address:
NEXT_PUBLIC_RH_REGISTRY_ADDRESS=0xYourDeployedContractRestart the development server to enable the “Register provenance proof” button. npm run deploy will sync the public contract address to Vercel when it is present.
This integration does not imply affiliation, partnership or endorsement by Robinhood.
Copy .env.example to the ignored .env.local file and configure the deployment-specific values there. Variables prefixed with NEXT_PUBLIC_ are exposed to the browser; Telegram credentials and partner keys must remain server-only.
The project includes a one-command deployment that securely syncs the private and public values to the already-linked Vercel project before deploying:
npm run deployOn a new machine, install the CLI with npm install -g vercel, then run vercel login and vercel link once before that command. If you deploy through Vercel's Git dashboard instead, run npm run env:vercel once after linking the project; Vercel intentionally does not upload .env.local from Git.
Verify production locally with:
npm run build
npm startThe remaining Vercel, DNS, messaging, legal-review and abuse-control checks are tracked in docs/production-checklist.md.
- Report security issues privately using
SECURITY.md. - Review contribution expectations in
CONTRIBUTING.md. - The website remains source-available for partner evaluation under the root
LICENSE. The standalone SDK inpackages/launch-kitis MIT licensed for integration and adoption.