I designed the login screen as a 390×844 board named "Login – Brew & Co". It sits at x=1200 on Page 1, to the right of the board that was already there, which I left alone. I exported it and checked the image. All elements sit inside the board.
What's on it
- Logo and title: a 72px espresso-brown circle with a "B&" mark. Below it are "Brew & Co" at 36px bold and the subtitle "Sign in to order your coffee" at 16px.
- Form: "Email" and "Password" labels sit above white 52px fields with 12px corners and a 1px border. The placeholders are "[email protected]" and "Enter your password". The password field has a "Show" toggle.
- Forgot password?: an underlined, right-aligned link inside a 44px-tall touch area.
- Sign in: a filled 56px button in dark brown with white 18px bold text. It's the strongest element on the screen.
- Create account: an outlined 56px secondary button, set off by an "or" divider.
Design choices
- Colour: the palette is a cream background (#FAF6F1), espresso brown (#3E2723) and a caramel link colour (#8A4B1F). I estimated the contrast rather than measuring it. I expect the text to clear 4.5:1 and the field borders to clear 3:1.
- Spacing: the layout uses a 24px side margin and mostly 8px-grid spacing.
- Touch targets: the buttons are 56px tall and the fields 52px, which is above the 44px minimum.
Problems I noticed
- Layer order: my first render hid the text behind the rectangles.
insertChildat the end of the children list put new shapes at the bottom of the stack. I fixed it by sending the rectangles to the back, and the second export is correct. An earlier attempt had also failed on a bad property name (textAligninstead ofalign), so I deleted that partial board before rebuilding. - Not interactive or reusable: this is a static layout with no flex layout, components or prototype links. The "Show" toggle and the "Forgot password?" touch area are not wired to anything.
- Missing states: there are no focus, error, filled or loading states. The password field also shows a placeholder, not masked dots.
- Placeholder contrast: the placeholder text (#6F5F57) is only just above the 4.5:1 threshold.
- Logo: the mark is a simple "B&" in a circle, not a real brand asset.
- Layout: there are no status-bar or safe-area elements, and the bottom ~120px of the screen is empty. A "Continue as guest" or terms line could fill it, or the content could shift down a little.
- Fonts: I used Penpot's default font and didn't pick a typeface.
How this was tried: I cloned and started penpot-mcp on the local machine (with ports 4402 and 4403 bound to localhost only), and the reviewer loaded its plugin into a Penpot cloud file. During the run only this skill and Penpot's MCP tools were allowed. The model created a new board in an empty file. I compared the canvas screenshot with the model's description and they match, and I recomputed the contrast ratios myself. The weaknesses the model lists itself (no components, states or interactions) are real.
できること
penpot-mcp サーバーを使って Penpot で UI/UX デザインを作るようモデルを導きます。既存のデザインシステムの有無を先に確認し、ファイル構造を調べ、ボード、図形、テキストを作成し、フレックスレイアウトを適用し、新しい画面が重ならない位置に配置し、図形を書き出して結果を確認します。デフォルトの余白、タイポグラフィ、色のトークン(デザインシステムがない場合のみ使用)、モバイルとデスクトップの定番レイアウト、コンポーネントのチェックリスト、アクセシビリティの簡易確認(コントラスト 4.5:1、タッチターゲット 44px)、Penpot API の注意点を備えます。参考ファイルは 4 つで、コンポーネント、アクセシビリティ、プラットフォームの指針、MCP のセットアップを扱います。
動き方
- モデルがまず Penpot MCP のツールを呼び出し、接続されていなければセットアップの説明の前に確認します。
- Penpot のプラグイン API でファイルを読み、ボードや要素を作成・変更します。
- 図形を書き出してデザインを確認し、選択範囲から CSS を取り出すこともできます。
向いている場面
Penpot での画面やデザインシステムの設計、アクセシビリティの規則に沿ったデザインの確認。
中リスク:Penpot MCP サーバー経由で、開いている Penpot ファイル内で JavaScript を実行するため、そのファイルの図形を作成・変更・削除できます。先にファイルを複製するか、コピーで作業してください。セットアップにはサードパーティのコードの導入(GitHub から `penpot-mcp` を clone、`npm install`、`npm run bootstrap`、Node 22 以上、ローカルのポート 4400〜4402)と localhost からのプラグイン読み込みが必要なので、実行前にそのリポジトリを確認してください。試用済み:penpot-mcp を手元にインストールして Penpot のクラウド上のファイルに接続し、モデルがこの Skill でログイン画面を作りました。キャンバスで説明と一致することを確認し、コントラストも再計算しました。注意:コードを読むと、既定では 4402・4403 ポートがローカルネットワーク全体に開かれ、他の人が接続してコードを実行できます。試用では自分のマシンだけに制限したので、インストール時も同様に制限してください。画像の書き出し・取り込みツールは、指定された任意の絶対パスを読み書きします。モデルの自己申告の課題:コンポーネント・状態・操作がなく、最初はレイヤー順が誤っていました。