Submission
From URL to live BooApp
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
Five steps, one round trip
- Step 1
Write
HTML/JS — peqaboo.* global
- Step 2
Deploy
Vercel / Netlify / your host
- Step 3
Submit
Paste URL + metadata
- Step 4
Review
Reviewer checks scopes & flow
- Step 5
Live
Listed in launcher + directory
Form fields
What you submit
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
Common reject reasons
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
Re-submission policy
- Any change to entryUrl creates a new submission record. The previous version stays live until the new one is approved.
- Metadata-only edits (name, icon, description) require a lighter re-review.
- Adding new permissions always re-triggers full review — don't over-declare on day one.
- If rejected, fix the cited issues and resubmit; you won't lose your appId or review history.