DEV Community

Csaba8472
Csaba8472

Posted on

App Release Copilot: AI-Powered App Store Metadata from Your Terminal

This is a submission for the GitHub Copilot CLI Challenge

What I Built

APP Release Copilot — a chat-style CLI that generates AI-powered App Store Optimization (ASO) metadata for iOS apps, powered by the GitHub Copilot SDK.

As an indie iOS developer, I've always found writing App Store metadata tedious and time-consuming. Crafting the perfect title within 30 characters, squeezing meaningful keywords into 100 characters, and writing a description that hooks users in the first 3 lines — it's a skill of its own. I wanted a tool that brings AI directly into my terminal workflow, right where I already spend most of my time.

APP Release Copilot connects to GitHub Copilot through the @github/copilot-sdk, integrates with a custom MCP server for real-time keyword traffic and difficulty scoring, and outputs metadata in your terminal.

Key Features

  • Slash-command interface/title, /subtitle, /desc, /keywords, /release, /promo, /full
  • Natural language refinement — type "make it shorter" or "focus on productivity" to iterate
  • Live keyword scoring — MCP-powered tool calls analyze keyword traffic & difficulty in real-time
  • Character limit awareness — color-coded counts (green ≤80%, yellow ≤100%, red over limit)
  • Dynamic model selection — pick from all available Copilot models at startup (GPT-4o, Claude Sonnet, o-series)
  • App Store competitor import/url fetches any competitor's App Store listing for context
  • App icon & feature graphic generation/icon and /feature produce store-ready images via OpenAI or Gemini, with 16 style presets adapted from SnapAI
  • Beautiful TUI — gradient ASCII logo, box-drawn panels, progress bars, model badges

Demo

GitHub Repo: github.com/Csaba8472/app-release-copilot

Typical Workflow

❯  /title                     # Generate 5 title options (30 chars each)
❯  more like option 3         # Refine with natural language
❯  /keywords                  # Generate keyword string with live MCP scoring
❯  /desc                      # Full App Store description
Enter fullscreen mode Exit fullscreen mode

Each generation shows real-time spinner states — "📊 Analyzing keyword scores..." when MCP tools fire, "✨ Writing title options... (12 lines)" as content streams in.

Export Output

{
  "configVersion": 0,
  "apple": {
    "info": {
      "en-US": {
        "title": "foodie - ai cal food tracker",
        "subtitle": "Snap, Track & Eat Smarter",
        "description": "Transform your meals into insights...",
        "keywords": ["calorie,tracker,food,photo,ai,nutrition,diet,meal,snap,health"],
        "releaseNotes": "What's new in foodie 2.0...",
        "promoText": "Track calories instantly — just snap a photo!"
      }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

My Experience with GitHub Copilot CLI

This project is deeply intertwined with GitHub Copilot at two levels:

1. Built ON GitHub Copilot

APP Release Copilot isn't just built with Copilot — it runs on it. The entire AI backbone uses the @github/copilot-sdk:

  • CopilotClient manages authentication, sessions, and model lifecycle
  • Streaming sessions with event-driven architecture (assistant.message_delta, tool.execution_start, session.idle)
  • MCP server integration — the SDK connects to my custom MCP server at aso-mcp.vercel.app for real-time keyword traffic/difficulty scoring via the get_keyword_scores tool
  • Quota tracking — usage snapshots from assistant.usage events update the status bar in real-time
  • Dynamic model listingclient.listModels() fetches available models at startup, so users always see what's currently offered

The system prompt is a carefully crafted ASO expert persona with character limits baked in, so the AI natively respects the 30-char title limit, 100-char keyword budget, etc.

2. Built WITH GitHub Copilot

During development, GitHub Copilot was my constant pair programmer:

  • Architecture decisions — Copilot helped design the event-driven streaming architecture, suggesting the SessionEvent switch-case pattern for handling deltas, tool executions, and quota snapshots
  • ASO domain expertise — the system prompt itself was co-authored with Copilot, refining App Store best practices like "use singular keyword forms (Apple matches plurals automatically)" and "don't repeat title words in keywords"
  • Terminal UI — the gradient ASCII logo, box-drawing helpers, and progress bar utilities were iterated on with Copilot's suggestions
  • Edge cases — the double Ctrl+C exit pattern, ExitPromptError handling for every @inquirer/prompts call, and graceful cleanup sequences all came together faster with Copilot's awareness of Node.js patterns

What Made the Difference

The biggest impact was on the MCP integration. Wiring up the Copilot SDK's MCP server support — where the AI autonomously decides to call get_keyword_scores during keyword generation — would have taken much longer without Copilot understanding the SDK's patterns. The streaming event model, in particular, has nuances (when to resolve the Promise, how to track tool completions) that Copilot navigated with me step by step.

The result is a tool I actually use for my own apps.


Tech Stack: TypeScript, @github/copilot-sdk, @inquirer/prompts, Commander.js, Chalk, Ora, Clipboardy

License: MIT

Top comments (0)