Submission
Submit a URL, declare what scopes you call, and wait for review. Approval lands in days, not weeks. Any change to the entry URL kicks off a new review.
The flow
Write
HTML/JS — peqaboo.* global
Deploy
Vercel / Netlify / your host
Submit
Paste URL + metadata
Review
Reviewer checks scopes & flow
Live
Listed in launcher + directory
Form fields
The dashboard saves these as a record in our manifest store. A reviewer reads the same record before approving.
appIdstring (kebab-case)
Unique permanent identifier — e.g. mochi-stamp-card. Cannot be changed after creation.
namestring (i18n-aware)
Display name shown in the launcher and directory. Translator agent fills locales after first save.
iconstring (HTTPS URL)
Square PNG/JPG hosted by you, ≥ 512×512. We recommend serving alongside your BooApp.
entryUrlstring (HTTPS URL)
The URL the runtime will load. Must return 200 + valid HTML over HTTPS.
category'event' | 'tool' | 'game' | 'commerce' | 'utility'
Drives where your app appears in the directory.
permissionsstring[]
Every scope you call must be declared here. Calling an undeclared scope at runtime fails immediately.
Example manifest payload:
{
"appId": "mochi-stamp-card",
"name": "Mochi Stamp Card",
"shortDescription": "Collect stamps when you visit partner shops.",
"icon": "https://my-app.vercel.app/icon.png",
"entryUrl": "https://my-app.vercel.app",
"category": "commerce",
"permissions": [
"auth.requireLogin",
"pet.list",
"device.scanCode",
"device.share",
"notification.send"
],
"orientation": "portrait",
"themeColor": "#7c3aed",
"minBridgeVersion": 3
}Watch out for
These are the most frequent issues that bounce a first submission. Fix them in advance and your review goes faster.
Permission called but not declared
Your BooApp calls e.g. peqaboo.media.pickImage() but media.pickImage is not in the permissions array.
Broken or unreachable entryUrl
The submitted URL returns 4xx/5xx, redirects in a loop, or fails to render in the runtime sandbox.
Missing manifest declarations
Required fields are blank: name, icon, category, or short description below the minimum length.
Low-quality content
Empty placeholder pages, scraped content, no actual interactive value, or duplicates of existing apps.
Mishandled permissions UX
High-tier confirm sheets bypassed via auto-tap, or no graceful fallback when the user denies a scope.
Non-HTTPS or mixed content
entryUrl is plain HTTP, or your page loads scripts/images over HTTP. Modern WebViews block these.
After launch