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 設計:先檢查是否已有設計系統,再查看檔案結構,建立畫板、圖形與文字,套用彈性版面,新增畫面時避免重疊,最後匯出圖形來核對結果。內建預設的間距、字級與顏色 Token(只在你沒有設計系統時才用)、常見的行動端與桌面端版面、元件清單、無障礙速查(對比度 4.5:1、觸控目標 44px)以及 Penpot API 的注意事項。四份參考文件分別說明元件、無障礙、平台規範與 MCP 安裝。
運作方式
- 模型先試著呼叫一個 Penpot MCP 工具;沒連上時會先問你,再說明安裝。
- 透過 Penpot 外掛 API 讀取檔案,然後建立或修改畫板與元素。
- 匯出圖形檢查設計,也可以從選取內容擷取 CSS。
適合什麼場景
在 Penpot 中設計頁面與設計系統,或對照無障礙規則檢視設計。
中風險:它透過 Penpot MCP 服務在你開啟的 Penpot 檔案中執行 JavaScript,可以新增、修改或刪除該檔案中的圖形,請先複製檔案或在副本上操作。安裝需要引入第三方程式碼(從 GitHub 複製 `penpot-mcp`、`npm install`、`npm run bootstrap`,需要 Node 22+,本機開放 4400~4402 連接埠)並從 localhost 載入外掛,執行前請先審查該倉庫。已試用:我在本機裝好 penpot-mcp 並連上你的 Penpot 雲端檔案,模型用這個 Skill 做出一張登入頁,匯出後我對照畫布確認與它的描述一致,對比度我重算過。須知:我讀程式碼發現它預設把 4402、4403 連接埠開給整個區域網路,別人能連上執行程式碼,試用時我改成了只綁本機,你自己安裝時請同樣限制;它的匯出與匯入圖片工具會讀寫你指定的任意絕對路徑。模型自述的問題:沒有元件、狀態與互動,圖層順序一開始是錯的。