Update plugin versions and add logo assets for cwb-app-icon, cwb-local-build, cwb-ship, and cwb-theming; create OPENAI-SUBMISSION.md for plugin directory submission.

This commit is contained in:
Beto
2026-07-12 09:59:36 -05:00
parent a2555edf56
commit f35f3d9ce5
10 changed files with 179 additions and 11 deletions
+2 -1
View File
@@ -1 +1,2 @@
.DS_Store
.DS_Store
dist/
+147
View File
@@ -0,0 +1,147 @@
# OpenAI Plugin Directory Submission — Working Doc
Prep sheet for submitting the four CWB plugins to the public plugin directory via
**platform.openai.com/plugins**. Each plugin is a separate skills-only submission
(no MCP tab needed). Delete this file after publishing, or keep it for future releases.
## One-time prerequisites (do these first, in the OpenAI Platform)
- [ ] Verify a **developer or business identity** for the org. The identity's name,
website, support contact, privacy policy, and terms must match what's below:
- Name: **Code with Beto**
- Website: **https://codewithbeto.dev**
- Privacy: **https://codewithbeto.dev/privacy**
- Terms: **https://codewithbeto.dev/terms**
- [ ] Make sure your account has the **Apps Management** write permission in the org.
## Shared listing info (Info tab, all four plugins)
- Developer: Code with Beto
- Category: Developer Tools
- Logo: `plugins/<name>/assets/logo.png` (1024×1024 PNG)
- Website / support: https://codewithbeto.dev
- Privacy: https://codewithbeto.dev/privacy · Terms: https://codewithbeto.dev/terms
- Skill bundle: upload the plugin's `skills/` directory (contains `SKILL.md`)
- Release notes (first submission, all plugins): "Initial public release."
---
## 1. cwb-app-icon v1.0.4
**Starter prompts** (from manifest): "Generate a new app icon for my Expo app" ·
"Update my app icon with iOS 26 Liquid Glass support"
**Positive test cases (5):**
1. Prompt: "Generate a new app icon for my Expo app" in an Expo project.
Expected: skill triggers, generates an icon via the SnapAI CLI, and updates the
app config to reference it.
2. Prompt: "Update my app icon with iOS 26 Liquid Glass support."
Expected: produces the iOS 26 `.icon` folder format with Liquid Glass layers.
3. Prompt: "Add an Android adaptive icon with Material You theming."
Expected: generates foreground/background (and monochrome) layers and wires them
into the Android config.
4. Prompt: "Create a minimalist app icon for a meditation app."
Expected: applies the minimalism style option when generating.
5. Prompt: "My app icon looks low-res on Android, regenerate it."
Expected: regenerates at correct resolutions and fixes the adaptive icon config.
Test data: an Expo project with an existing low-res icon.
**Negative test cases (3):**
1. Prompt: "Generate an app icon" in a directory that is not a React Native/Expo
project. Expected: skill explains the requirement instead of writing config files.
2. Prompt: icon generation with no SnapAI API key configured.
Expected: clear setup instructions for the key; no fabricated output.
3. Prompt: "Publish my app to the App Store."
Expected: skill does not trigger; out of scope.
---
## 2. cwb-local-build v1.0.3
**Starter prompts:** "Build a release APK for my Expo app locally" ·
"Create a simulator .app build for e2e testing"
**Positive test cases (5):**
1. Prompt: "Build a release APK for my Expo app locally."
Expected: writes a gradlew-based build script, runs it, and copies the `.apk`
into `builds/`.
2. Prompt: "Create a simulator .app build for e2e testing."
Expected: xcodebuild simulator build; `.app` copied into `builds/`.
3. Prompt: "Build both Android and iOS artifacts for my Maestro tests."
Expected: both artifacts produced with predictable paths under `builds/`.
4. Prompt: "Build an APK without using EAS."
Expected: local gradlew path used; no EAS commands run.
5. Test data: an Expo project with a custom scheme and slug in app config.
Expected: skill reads app name, slug, scheme, and bundle ID from the config and
names artifacts accordingly.
**Negative test cases (3):**
1. Prompt: "Build a release APK" in a non-Expo project.
Expected: explains the Expo project requirement; writes nothing.
2. Test data: machine without the Android SDK (or without Xcode for iOS).
Expected: surfaces the actionable environment error instead of looping on retries.
3. Prompt: "Submit my build to the Play Store."
Expected: skill does not trigger; out of scope.
---
## 3. cwb-ship v1.0.3
**Starter prompts:** "Scaffold a new React Native app with the ship CLI" ·
"Create a revenue-ready AI image app from the Platano template"
**Positive test cases (5):**
1. Prompt: "Scaffold a new React Native app with the ship CLI."
Expected: runs `bunx @codewithbeto/ship`, collects the app name, scaffolds project.
2. Prompt: "Create a revenue-ready AI image app from the Platano template."
Expected: Platano template scaffolded with RevenueCat payments pre-configured.
3. Prompt: "Scaffold Platano as 'Glow' with bundle ID com.beto.glow."
Expected: app name, bundle ID, and slug set from the prompt.
4. Prompt: any scaffold request. Expected: dependencies installed and git initialized
in the new project without extra prompting.
5. Prompt: "What templates can I ship with the ship CLI?"
Expected: lists available templates and what each includes.
**Negative test cases (3):**
1. Prompt: scaffold request run inside an existing app directory.
Expected: warns and asks before writing into a non-empty directory.
2. Test data: machine without bun/node available.
Expected: actionable install guidance, not a raw stack trace loop.
3. Prompt: "Write a blog post about React Native."
Expected: skill does not trigger; out of scope.
---
## 4. cwb-theming v1.0.3
**Starter prompts:** "Set up theming and dark mode in my Expo app" ·
"Add Material You dynamic colors to my React Native app"
**Positive test cases (5):**
1. Prompt: "Set up theming and dark mode in my Expo app" in an Expo Router project.
Expected: scaffolds the semantic color token system and the `useColors()` hook.
2. Prompt: "Add Material You dynamic colors to my React Native app."
Expected: Android tokens resolve to Material You dynamic colors.
3. Prompt: "Make my colors use native iOS system colors."
Expected: iOS tokens resolve to native iOS colors.
4. Prompt: "Make my app switch between light and dark mode automatically."
Expected: tokens flip with the system appearance without extra wiring.
5. Test data: project with an existing partial color file.
Expected: integrates without breaking existing imports; migration steps explained.
**Negative test cases (3):**
1. Prompt: theming request in a project without Expo Router.
Expected: explains the Expo Router requirement before scaffolding.
2. Test data: bare React Native project (no Expo).
Expected: states the limitation and offers guidance rather than writing files.
3. Prompt: "Theme my website with CSS variables."
Expected: skill does not trigger; web CSS is out of scope.
---
## Submit tab (each plugin)
- Release notes: "Initial public release."
- Policy attestations: review and accept in the portal.
- Global tab: select availability (suggest: all countries).
- After approval, hit **Publish** — approval alone doesn't list the plugin.
@@ -1,6 +1,6 @@
{
"name": "cwb-app-icon",
"version": "1.0.2",
"version": "1.0.4",
"description": "AI-powered app icon generation for React Native and Expo apps, with iOS 26 Liquid Glass and Android adaptive icon support.",
"author": {
"name": "Beto",
@@ -10,7 +10,7 @@
"homepage": "https://codewithbeto.dev",
"repository": "https://github.com/Code-with-Beto/skills",
"license": "MIT",
"keywords": ["expo", "react-native", "app-icon", "ios", "android", "snapai"],
"keywords": ["expo", "react-native", "app-icon", "ios", "android", "snapai", "codewithbeto"],
"skills": "./skills/",
"interface": {
"displayName": "CWB App Icon",
@@ -23,6 +23,11 @@
"Write"
],
"websiteURL": "https://codewithbeto.dev",
"privacyPolicyURL": "https://codewithbeto.dev/privacy",
"termsOfServiceURL": "https://codewithbeto.dev/terms",
"brandColor": "#000000",
"composerIcon": "./assets/logo.png",
"logo": "./assets/logo.png",
"defaultPrompt": [
"Generate a new app icon for my Expo app",
"Update my app icon with iOS 26 Liquid Glass support"
Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

@@ -1,6 +1,6 @@
{
"name": "cwb-local-build",
"version": "1.0.1",
"version": "1.0.3",
"description": "Build release APK and simulator .app artifacts locally for Expo apps using gradlew and xcodebuild directly.",
"author": {
"name": "Beto",
@@ -10,7 +10,7 @@
"homepage": "https://codewithbeto.dev",
"repository": "https://github.com/Code-with-Beto/skills",
"license": "MIT",
"keywords": ["expo", "react-native", "build", "apk", "xcodebuild", "gradle"],
"keywords": ["expo", "react-native", "build", "apk", "xcodebuild", "gradle", "codewithbeto"],
"skills": "./skills/",
"interface": {
"displayName": "CWB Local Build",
@@ -23,6 +23,11 @@
"Write"
],
"websiteURL": "https://codewithbeto.dev",
"privacyPolicyURL": "https://codewithbeto.dev/privacy",
"termsOfServiceURL": "https://codewithbeto.dev/terms",
"brandColor": "#000000",
"composerIcon": "./assets/logo.png",
"logo": "./assets/logo.png",
"defaultPrompt": [
"Build a release APK for my Expo app locally",
"Create a simulator .app build for e2e testing"
Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

+9 -4
View File
@@ -1,16 +1,16 @@
{
"name": "cwb-ship",
"version": "1.0.1",
"version": "1.0.3",
"description": "Scaffold production-ready React Native apps from Code with Beto templates using the @codewithbeto/ship CLI.",
"author": {
"name": "Beto",
"email": "beto@codewithbeto.dev",
"url": "https://codewithbeto.dev"
},
"homepage": "https://cwb.sh/platano",
"homepage": "https://codewithbeto.dev/platano",
"repository": "https://github.com/Code-with-Beto/skills",
"license": "MIT",
"keywords": ["expo", "react-native", "scaffold", "template", "platano", "revenuecat"],
"keywords": ["expo", "react-native", "scaffold", "template", "platano", "revenuecat", "codewithbeto"],
"skills": "./skills/",
"interface": {
"displayName": "CWB Ship",
@@ -22,7 +22,12 @@
"Read",
"Write"
],
"websiteURL": "https://cwb.sh/platano",
"websiteURL": "https://codewithbeto.dev/platano",
"privacyPolicyURL": "https://codewithbeto.dev/privacy",
"termsOfServiceURL": "https://codewithbeto.dev/terms",
"brandColor": "#000000",
"composerIcon": "./assets/logo.png",
"logo": "./assets/logo.png",
"defaultPrompt": [
"Scaffold a new React Native app with the ship CLI",
"Create a revenue-ready AI image app from the Platano template"
Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

@@ -1,6 +1,6 @@
{
"name": "cwb-theming",
"version": "1.0.1",
"version": "1.0.3",
"description": "Scaffold a unified cross-platform color theme system (native iOS + Android Material You) into an Expo Router app.",
"author": {
"name": "Beto",
@@ -10,7 +10,7 @@
"homepage": "https://codewithbeto.dev",
"repository": "https://github.com/Code-with-Beto/skills",
"license": "MIT",
"keywords": ["expo", "react-native", "theming", "dark-mode", "material-you", "expo-router"],
"keywords": ["expo", "react-native", "theming", "dark-mode", "material-you", "expo-router", "codewithbeto"],
"skills": "./skills/",
"interface": {
"displayName": "CWB Theming",
@@ -23,6 +23,11 @@
"Write"
],
"websiteURL": "https://codewithbeto.dev",
"privacyPolicyURL": "https://codewithbeto.dev/privacy",
"termsOfServiceURL": "https://codewithbeto.dev/terms",
"brandColor": "#000000",
"composerIcon": "./assets/logo.png",
"logo": "./assets/logo.png",
"defaultPrompt": [
"Set up theming and dark mode in my Expo app",
"Add Material You dynamic colors to my React Native app"
Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB