sleek-design-mobile-apps
ユーザーがモバイルアプリの設計、画面作成、UI構築、またはSleekプロジェクトの操作を希望する際に、大まかな要望から具体的な指示まで対応し、アプリ開発を支援するSkill。
📜 元の英語説明(参考)
Use when the user wants to design a mobile app, create screens, build UI, or interact with their Sleek projects. Covers high-level requests ("design an app that does X") and specific ones ("list my projects", "create a new project", "screenshot that screen").
🇯🇵 日本人クリエイター向け解説
ユーザーがモバイルアプリの設計、画面作成、UI構築、またはSleekプロジェクトの操作を希望する際に、大まかな要望から具体的な指示まで対応し、アプリ開発を支援するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o sleek-design-mobile-apps.zip https://jpskill.com/download/20834.zip && unzip -o sleek-design-mobile-apps.zip && rm sleek-design-mobile-apps.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/20834.zip -OutFile "$d\sleek-design-mobile-apps.zip"; Expand-Archive "$d\sleek-design-mobile-apps.zip" -DestinationPath $d -Force; ri "$d\sleek-design-mobile-apps.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
sleek-design-mobile-apps.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
sleek-design-mobile-appsフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
[スキル名] sleek-design-mobile-apps
Sleek を使ったデザイン
概要
Sleek は AI を活用したモバイルアプリのデザインツールです。REST API (/api/v1/*) を介して操作し、プロジェクトを作成し、構築したいものを平易な言葉で記述すると、レンダリングされた画面が返されます。すべての通信は標準の HTTP で行われ、ベアラートークン認証を使用します。
ベース URL: https://sleek.design
認証: すべての /api/v1/* リクエストで Authorization: Bearer $SLEEK_API_KEY
Content-Type: application/json (リクエストおよびレスポンス)
CORS: すべての /api/v1/* エンドポイントで有効
前提条件: API キー
API キーは https://sleek.design/dashboard/api-keys で作成します。キーの完全な値は作成時に一度だけ表示されます。SLEEK_API_KEY 環境変数に保存してください。
必要なプラン: Pro+ (API アクセスは制限されています)
キーのスコープ
| スコープ | 解放される機能 |
|---|---|
projects:read |
プロジェクトのリスト表示 / 取得 |
projects:write |
プロジェクトの作成 / 削除 |
components:read |
プロジェクト内のコンポーネントのリスト表示 |
chats:read |
チャット実行ステータスの取得 |
chats:write |
チャットメッセージの送信 |
screenshots |
コンポーネントのスクリーンショットのレンダリング |
タスクに必要なスコープのみを持つキーを作成してください。
セキュリティとプライバシー
- 単一ホスト: すべてのリクエストは
https://sleek.designのみに送信されます。第三者にデータが送信されることはありません。 - HTTPS のみ: すべての通信は HTTPS を使用します。API キーは
Authorizationヘッダーでのみ Sleek エンドポイントに送信されます。 - 最小限のスコープ: タスクに必要なスコープのみを持つ API キーを作成してください。短期間有効なキーまたは取り消し可能なキーを推奨します。
- 画像 URL: チャットメッセージで
imageUrlsを使用する場合、これらの URL は Sleek のサーバーによってフェッチされます。機密性の高いコンテンツを含む URL を渡すことは避けてください。
高レベルなリクエストの処理
ユーザーが「フィットネス追跡アプリをデザインして」や「設定画面を作成して」のようなことを言った場合:
- まだプロジェクトが存在しない場合は、プロジェクトを作成します (ユーザーに名前を尋ねるか、リクエストから名前を導き出します)。
- 構築したいものを記述したチャットメッセージを送信します。ユーザーの言葉を
message.textとして直接使用できます。Sleek の AI は自然言語を解釈します。 - 結果を表示するために、以下のスクリーンショット配信ルールに従います。
最初にリクエストを画面に分解する必要はありません。意図全体を単一のメッセージとして送信し、Sleek にどの画面を作成するかを決定させます。
スクリーンショット配信ルール
screen_created または screen_updated 操作を生成するすべてのチャット実行後には、常にスクリーンショットを撮り、ユーザーに表示してください。 視覚的な成果物を配信せずにチャット実行をサイレントに完了することは決してありません。
プロジェクトで画面が初めて作成される場合 (つまり、実行に screen_created 操作が含まれる場合) は、以下を配信します。
- 新しく作成された画面ごとに 1 つのスクリーンショット (個別の
componentIds: [screenId]) - プロジェクト内のすべての画面を組み合わせた 1 つのスクリーンショット (
componentIds: [all screen ids])
既存の画面のみが更新される場合 は、影響を受ける画面ごとに 1 つのスクリーンショットを配信します。
ユーザーが明示的に要求しない限り、すべてのスクリーンショットには background: "transparent" を使用してください。
クイックリファレンス — すべてのエンドポイント
| メソッド | パス | スコープ | 説明 |
|---|---|---|---|
GET |
/api/v1/projects |
projects:read |
プロジェクトのリスト表示 |
POST |
/api/v1/projects |
projects:write |
プロジェクトの作成 |
GET |
/api/v1/projects/:id |
projects:read |
プロジェクトの取得 |
DELETE |
/api/v1/projects/:id |
projects:write |
プロジェクトの削除 |
GET |
/api/v1/projects/:id/components |
components:read |
コンポーネントのリスト表示 |
POST |
/api/v1/projects/:id/chat/messages |
chats:write |
チャットメッセージの送信 |
GET |
/api/v1/projects/:id/chat/runs/:runId |
chats:read |
実行ステータスのポーリング |
POST |
/api/screenshots |
screenshots |
スクリーンショットのレンダリング |
すべての ID は安定した文字列識別子です。
エンドポイント
プロジェクト
プロジェクトのリスト表示
GET /api/v1/projects?limit=50&offset=0
Authorization: Bearer $SLEEK_API_KEY
レスポンス 200:
{
"data": [
{
"id": "proj_abc",
"name": "My App",
"slug": "my-app",
"createdAt": "2026-01-01T00:00:00Z",
"updatedAt": "..."
}
],
"pagination": { "total": 12, "limit": 50, "offset": 0 }
}
プロジェクトの作成
POST /api/v1/projects
Authorization: Bearer $SLEEK_API_KEY
Content-Type: application/json
{ "name": "My New App" }
レスポンス 201 — 単一のプロジェクトと同じ形式です。
プロジェクトの取得 / 削除
GET /api/v1/projects/:projectId
DELETE /api/v1/projects/:projectId → 204 No Content
コンポーネント
コンポーネントのリスト表示
GET /api/v1/projects/:projectId/components?limit=50&offset=0
Authorization: Bearer $SLEEK_API_KEY
レスポンス 200:
{
"data": [
{
"id": "cmp_xyz",
"name": "Hero Section",
"activeVersion": 3,
"versions": [{ "id": "ver_001", "version": 1, "createdAt": "..." }],
"createdAt": "...",
"updatedAt": "..."
}
],
"pagination": { "total": 5, "limit": 50, "offset": 0 }
}
チャット — メッセージの送信
これは主要なアクションです。message.text で希望する内容を記述すると、AI が画面を作成または変更します。
POST /api/v1/projects/:projectId/chat/messages?wait=false
Authorization: Bearer $SLEEK_API_KEY
Content-Type: application/json
idempotency-key: <optional, max 255 chars>
{
"message": { "text": "Add a pricing section with three tiers" },
"imageUrls": ["https://example.com/ref.png"],
"target": { "screenId": "scr_abc" }
}
| フィールド | 必須 | 注釈 |
|---|
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Designing with Sleek
Overview
Sleek is an AI-powered mobile app design tool. You interact with it via a REST API at /api/v1/* to create projects, describe what you want built in plain language, and get back rendered screens. All communication is standard HTTP with bearer token auth.
Base URL: https://sleek.design
Auth: Authorization: Bearer $SLEEK_API_KEY on every /api/v1/* request
Content-Type: application/json (requests and responses)
CORS: Enabled on all /api/v1/* endpoints
Prerequisites: API Key
Create API keys at https://sleek.design/dashboard/api-keys. The full key value is shown only once at creation — store it in the SLEEK_API_KEY environment variable.
Required plan: Pro+ (API access is gated)
Key scopes
| Scope | What it unlocks |
|---|---|
projects:read |
List / get projects |
projects:write |
Create / delete projects |
components:read |
List components in a project |
chats:read |
Get chat run status |
chats:write |
Send chat messages |
screenshots |
Render component screenshots |
Create a key with only the scopes needed for the task.
Security & Privacy
- Single host: All requests go exclusively to
https://sleek.design. No data is sent to third parties. - HTTPS only: All communication uses HTTPS. The API key is transmitted only in the
Authorizationheader to Sleek endpoints. - Minimal scopes: Create API keys with only the scopes required for the task. Prefer short-lived or revocable keys.
- Image URLs: When using
imageUrlsin chat messages, those URLs are fetched by Sleek's servers. Avoid passing URLs that contain sensitive content.
Handling high-level requests
When the user says something like "design a fitness tracking app" or "build me a settings screen":
- Create a project if one doesn't exist yet (ask the user for a name, or derive one from the request)
- Send a chat message describing what to build — you can use the user's words directly as
message.text; Sleek's AI interprets natural language - Follow the screenshot delivery rule below to show the result
You do not need to decompose the request into screens first. Send the full intent as a single message and let Sleek decide what screens to create.
Screenshot delivery rule
After every chat run that produces screen_created or screen_updated operations, always take screenshots and show them to the user. Never silently complete a chat run without delivering the visuals.
When screens are created for the first time on a project (i.e. the run includes screen_created operations), deliver:
- One screenshot per newly created screen (individual
componentIds: [screenId]) - One combined screenshot of all screens in the project (
componentIds: [all screen ids])
When only existing screens are updated, deliver one screenshot per affected screen.
Use background: "transparent" for all screenshots unless the user explicitly requests otherwise.
Quick Reference — All Endpoints
| Method | Path | Scope | Description |
|---|---|---|---|
GET |
/api/v1/projects |
projects:read |
List projects |
POST |
/api/v1/projects |
projects:write |
Create project |
GET |
/api/v1/projects/:id |
projects:read |
Get project |
DELETE |
/api/v1/projects/:id |
projects:write |
Delete project |
GET |
/api/v1/projects/:id/components |
components:read |
List components |
POST |
/api/v1/projects/:id/chat/messages |
chats:write |
Send chat message |
GET |
/api/v1/projects/:id/chat/runs/:runId |
chats:read |
Poll run status |
POST |
/api/screenshots |
screenshots |
Render screenshot |
All IDs are stable string identifiers.
Endpoints
Projects
List projects
GET /api/v1/projects?limit=50&offset=0
Authorization: Bearer $SLEEK_API_KEY
Response 200:
{
"data": [
{
"id": "proj_abc",
"name": "My App",
"slug": "my-app",
"createdAt": "2026-01-01T00:00:00Z",
"updatedAt": "..."
}
],
"pagination": { "total": 12, "limit": 50, "offset": 0 }
}
Create project
POST /api/v1/projects
Authorization: Bearer $SLEEK_API_KEY
Content-Type: application/json
{ "name": "My New App" }
Response 201 — same shape as a single project.
Get / Delete project
GET /api/v1/projects/:projectId
DELETE /api/v1/projects/:projectId → 204 No Content
Components
List components
GET /api/v1/projects/:projectId/components?limit=50&offset=0
Authorization: Bearer $SLEEK_API_KEY
Response 200:
{
"data": [
{
"id": "cmp_xyz",
"name": "Hero Section",
"activeVersion": 3,
"versions": [{ "id": "ver_001", "version": 1, "createdAt": "..." }],
"createdAt": "...",
"updatedAt": "..."
}
],
"pagination": { "total": 5, "limit": 50, "offset": 0 }
}
Chat — Send Message
This is the core action: describe what you want in message.text and the AI creates or modifies screens.
POST /api/v1/projects/:projectId/chat/messages?wait=false
Authorization: Bearer $SLEEK_API_KEY
Content-Type: application/json
idempotency-key: <optional, max 255 chars>
{
"message": { "text": "Add a pricing section with three tiers" },
"imageUrls": ["https://example.com/ref.png"],
"target": { "screenId": "scr_abc" }
}
| Field | Required | Notes |
|---|---|---|
message.text |
Yes | 1+ chars, trimmed |
imageUrls |
No | HTTPS URLs only; included as visual context |
target.screenId |
No | Edit a specific screen; omit to let AI decide |
?wait=true/false |
No | Sync wait mode (default: false) |
idempotency-key header |
No | Replay-safe re-sends |
Response — async (default, wait=false)
Status 202 Accepted. result and error are absent until the run reaches a terminal state.
{
"data": {
"runId": "run_111",
"status": "queued",
"statusUrl": "/api/v1/projects/proj_abc/chat/runs/run_111"
}
}
Response — sync (wait=true)
Blocks up to 300 seconds. Returns 200 when completed, 202 if timed out.
{
"data": {
"runId": "run_111",
"status": "completed",
"statusUrl": "...",
"result": {
"assistantText": "I added a pricing section with...",
"operations": [
{ "type": "screen_created", "screenId": "scr_xyz", "screenName": "Pricing" },
{ "type": "screen_updated", "screenId": "scr_abc" },
{ "type": "theme_updated" }
]
}
}
}
Chat — Poll Run Status
Use this after async send to check progress.
GET /api/v1/projects/:projectId/chat/runs/:runId
Authorization: Bearer $SLEEK_API_KEY
Response — same shape as send message data object:
{
"data": {
"runId": "run_111",
"status": "queued",
"statusUrl": "..."
}
}
When completed successfully, result is present:
{
"data": {
"runId": "run_111",
"status": "completed",
"statusUrl": "...",
"result": {
"assistantText": "...",
"operations": [...]
}
}
}
When failed, error is present:
{
"data": {
"runId": "run_111",
"status": "failed",
"statusUrl": "...",
"error": { "code": "execution_failed", "message": "..." }
}
}
Run status lifecycle: queued → running → completed | failed
Screenshots
Takes a snapshot of one or more rendered components.
POST /api/screenshots
Authorization: Bearer $SLEEK_API_KEY
Content-Type: application/json
{
"componentIds": ["cmp_xyz", "cmp_abc"],
"projectId": "proj_abc",
"format": "png",
"scale": 2,
"gap": 40,
"padding": 40,
"background": "transparent"
}
| Field | Default | Notes |
|---|---|---|
format |
png |
png or webp |
scale |
2 |
1–3 (device pixel ratio) |
gap |
40 |
Pixels between components |
padding |
40 |
Uniform padding on all sides |
paddingX |
(optional) | Horizontal padding; overrides padding for left/right when provided |
paddingY |
(optional) | Vertical padding; overrides padding for top/bottom when provided |
background |
transparent |
Any CSS color (hex, named, transparent) |
showDots |
false |
Overlay a subtle dot grid on the background |
paddingX and paddingY take precedence over padding for their axis. If neither is set, padding applies to all sides. For example, { "padding": 20, "paddingX": 10 } gives 10px horizontal and 20px vertical padding.
When showDots is true, a dot pattern is drawn over the background color. The dots automatically adapt to the background: dark backgrounds get light dots, light backgrounds get dark dots. This has no effect when background is "transparent".
Always use "background": "transparent" unless the user explicitly requests a specific background color.
Response: raw binary image/png or image/webp with Content-Disposition: attachment.
Error Shapes
{ "code": "UNAUTHORIZED", "message": "..." }
| HTTP | Code | When |
|---|---|---|
| 401 | UNAUTHORIZED |
Missing/invalid/expired API key |
| 403 | FORBIDDEN |
Valid key, wrong scope or plan |
| 404 | NOT_FOUND |
Resource doesn't exist |
| 400 | BAD_REQUEST |
Validation failure |
| 409 | CONFLICT |
Another run is active for this project |
| 500 | INTERNAL_SERVER_ERROR |
Server error |
Chat run-level errors (inside data.error):
| Code | Meaning |
|---|---|
out_of_credits |
Organization has no credits left |
execution_failed |
AI execution error |
Flows
Flow 1: Create project and generate a UI (async + polling)
1. POST /api/v1/projects → get projectId
2. POST /api/v1/projects/:id/chat/messages → get runId (202)
3. Poll GET /api/v1/projects/:id/chat/runs/:runId
until status == "completed" or "failed"
4. Collect screenIds from result.operations
(screen_created and screen_updated entries)
5. Screenshot each affected screen individually
6. If any screen_created: also screenshot all project screens combined
7. Show all screenshots to the user
Polling recommendation: start at 2s interval, back off to 5s after 10s, give up after 5 minutes.
Flow 2: Sync mode (simple, blocking)
Best for short tasks or when latency is acceptable.
1. POST /api/v1/projects/:id/chat/messages?wait=true
→ blocks up to 300s
→ 200 if completed, 202 if timed out
2. If 202, fall back to Flow 1 polling with the returned runId
3. On completion, screenshot and show affected screens (see screenshot delivery rule)
Flow 3: Edit a specific screen
1. GET /api/v1/projects/:id/components → find screenId
2. POST /api/v1/projects/:id/chat/messages
body: { message: { text: "..." }, target: { screenId: "scr_xyz" } }
3. Poll or wait as above
4. Screenshot the updated screen and show it to the user
Flow 4: Idempotent message (safe retries)
Add idempotency-key header on the send request. If the network drops and you retry with the same key, the server returns the existing run rather than creating a duplicate. The key must be ≤255 chars.
POST /api/v1/projects/:id/chat/messages
idempotency-key: my-unique-request-id-abc123
Flow 5: One run at a time (conflict handling)
Only one active run is allowed per project. If you send a message while one is running, you get 409 CONFLICT. Wait for the active run to complete before sending the next message.
409 response → poll existing run → completed → send next message
Pagination
All list endpoints accept limit (1–100, default 50) and offset (≥0). The response always includes pagination.total so you can page through all results.
GET /api/v1/projects?limit=10&offset=20
Common Mistakes
| Mistake | Fix |
|---|---|
Sending to /api/v1 without Authorization header |
Add Authorization: Bearer $SLEEK_API_KEY to every request |
| Using wrong scope | Check key's scopes match the endpoint (e.g. chats:write for sending messages) |
| Sending next message before run completes | Poll until completed/failed before next send |
Using wait=true on long generations |
It blocks 300s max; have a fallback to polling for 202 response |
HTTP URLs in imageUrls |
Only HTTPS URLs are accepted |
Assuming result is present on 202 |
result is absent until status is completed |