--- name: portfolio-originality description: Originality gate for studios and developers that ship many similar mobile apps or games (templates, white-label apps, reskins) - measure listing text, icon, screenshot and project similarity offline with storebound originality, score a planned or finished app or game against your own catalogue (mechanic, content, art, metadata, screenshots), require a clear differentiator, and suggest merging thin ideas, to avoid App Store Guideline 4.3 (spam) and Play repetitive content rejections. Use before starting a new app or game, before submitting one, or after a 4.3 / "repetitive content" rejection. --- # Portfolio originality (Guideline 4.3 gate) Apple 4.3 and Play's repetitive content policy reject apps that are near-copies of other apps, **including your own**. Studios with a template engine and white-label / reskinned apps hit this first. Run this gate twice: before building (idea stage) and before submitting. ## Inputs - The new app or game: one-paragraph pitch, core loop or main task, controls or flows, progression or features, art direction, the planned listing (name, subtitle, short description, keywords, screenshot captions). - The catalogue: the same for every app or game you have published or submitted (store links are fine). ## Measure first (offline) `storebound originality --against ` compares this app with your other apps: each folder with a `storebound.config.ts`, or a folder holding several (one level down); or list them once in `originality.against`. Per pair it reports a 0-100 % likeness for the **name**, the **listing text** (word frequency + copied 3-word phrases), the **icon** and the **screenshots** (perceptual hashes: dHash + DCT pHash of the icon and of the rendered screenshots of the first language, PNG decoded in TypeScript, JPEG / WebP through ffmpeg if installed), and the **project structure** (same file layout, byte-identical files; build output and dependencies left out), an overall score, why a pair is flagged (overall >= 70 % by default, `--threshold`, or one axis nearly identical) and what to change. `--json` for agents (MCP tool `originality`); exit 1 when a pair is flagged. It measures what reviewers see and what a template shares; it cannot judge the core mechanic or content. Feed its numbers into the scores below. ## Score each pair (new app vs each catalogue app), 0 = identical, 2 = clearly different | axis | 0 | 1 | 2 | |---|---|---|---| | core mechanic or main task | same verb, same rules | same verb, new rule that changes decisions | different verb / goal | | content | same levels / items reskinned | new content, same structure | different structure (modes, progression) | | art and audio | same assets / palette / UI kit | same kit, new theme | own visual identity | | metadata | same description pattern / keywords | rewritten, same promises | different promise and audience | | screenshots | same layout and captions | same layout, new captions | different scenes and message | Total 0-10 per pair. **Below 6 against any catalogue app: stop.** 6-7: ship only with a differentiator a user can see in the first screenshot. 8+: fine. ## Differentiator test Write one sentence: "Unlike , in the user ." If the sentence needs the words "theme", "skin", "colours" or "levels" to work, it is not a differentiator. ## When the score is low - **Merge** the idea into the existing app as a mode, feature, world or event instead of a new app. - **Deepen** one axis until it scores 2 (usually mechanic or progression), not five axes a little. - Never vary only the name, icon and keywords: reviewers compare binaries and screenshots, and that is the pattern 4.3 describes. - After a 4.3 rejection: list the concrete differences in the reply (`review-rejections`); if there are none, merge. ## Output for the owner A table per catalogue app with the `storebound originality` likeness per axis, the five scores, the total, the differentiator sentence, and a recommendation: ship / ship after / merge into .