Repository navigation
Design a screen in Penpot
Generated from
docs/how-to/design-a-screen.md. Edit that file in the repository: changes made in the wiki are overwritten.
Every change to what users see starts from a mockup
(ADR-0017). This covers website pages, companion windows, WoW addon
frames and Discord messages. The design is made in Penpot. Its source, <screen>.penpot, and
the SVG rendered from it, <screen>.svg, are kept together in docs/mockups/ and nowhere else
(ADR-0018).
- Create a free account at penpot.app (the Professional plan is free for up to eight members), or use a self-hosted Penpot.
- Create a team and a project named RaidManager, and invite the people who design or review screens.
- Keep one Penpot file per screen, named like its future mockup file, for example
character-review. - Use RaidManager's design system (ADR-0019): the dark palette, Open Sans, and the app shell on every website screen. The shell has a sidebar with the community, the Player and Officer navigation and the signed-in user, and a top bar with the breadcrumb and realm status.
A screen's first version is generated in the repository, so it arrives in Penpot as a small design system:
- every text is an editable text layer;
- every layer and group has a function-based name;
- the design system's colors and text styles are shared library assets that the layers use;
- the buttons are linked into a clickable prototype.
- Write
scripts/mockups/<screen_name>.pywith the scene model inscripts/penpot_scene.py: one board per state (filled, empty, error, dialogs), made of named groups, rectangles, circles and text. Draw each website board withapp_screenfromscripts/penpot_components.py, which adds the shell, and use its page header, cards, buttons, badges and notices. Take colors from the house palette and link each control to the board it leads to. - Run
python scripts/mockups/<screen_name>.py. It checks that every color is a named palette color and that text meets WCAG AA contrast, then writesdocs/mockups/<screen>.penpotand rendersdocs/mockups/<screen>.svgfrom it. Use lowercase words with hyphens for<screen>. - Import the
.penpotfile in Penpot (Import Penpot files on the dashboard) and check it: texts are editable, the Assets panel lists the colors and typographies, and View mode plays each flow.
- Adjust the design in Penpot. Draw each state as a board, side by side in one file.
- While the design is in progress, open View mode, choose Share, and copy the link into the issue's
Mockup field. The issue's
needs-mockuplabel goes away at the next hierarchy audit, which the agent's board report starts (GitHub's own schedule runs it only every few hours). - When the design is agreed, choose Download Penpot file (.penpot) from the main menu and save it over
docs/mockups/<screen>.penpot. From then on, the downloaded file is the source; don't rerun the screen script. - Render its SVG:
python scripts/penpot_render.py docs/mockups/<screen>.penpot. Never export or edit the SVG by hand; the docs check fails when the SVG isn't the current rendering of its.penpotfile. The renderer draws boards, groups, rectangles, circles and text, and shows anything else as a labeled placeholder. - Commit both files together in the pull request of the design task or of the task that implements the screen.
Never leave a
.penpotor SVG in the repository root or any other folder; the docs check fails on it. - Show the committed image in the user story, its UI task and the pull request, for example
.
- Show the mockup in the pull request that changes the screen, as an image or a link to
docs/mockups/<screen>.svg. Thedescriptioncheck fails if a pull request changes user-interface files without one. - A pull request that changes UI code without changing what users see, such as a refactor or a renamed field, states
it on its own line:
No visual change: <reason>. - If the implementation must differ from the design, update the Penpot file and render its SVG again in the same pull request, so the mockup stays the truth.
- To change an existing screen, import
docs/mockups/<screen>.penpotinto Penpot (Import Penpot files on the dashboard), edit it, download it over the old file, and render its SVG again.
Any epic, feature, story, improvement, bug, task or spike that changes what users see. Answer Yes to the
User interface question in the issue form, or add the ui label. The item must then link or show its mockup,
and the hierarchy workflow labels it needs-mockup until it does. An epic or
feature can show the mockups of its stories in a short list.
- Product scope
- Architecture
- Visual guide
- Diagram maintenance
- Review a pull request
- Design a screen
- Test the addon
- Set up Discord
- Provision the server
- Glossary
- API contracts
- Addon snapshot contract
- Project automation
- Work management specification
- Warmane lockout evidence
- Planning
-
Decisions
- Index
- Foundation and authentication
- Character synchronization
- Documentation publication
- Protected automatic squash merges
- Viewed files before approval
- Operator review before a peer
- Auto-merge when ready
- Merge with the workflow token
- Meaningful review comments
- Read queries from the write database
- Website session and API trust
- Interactive Server rendering with Radzen
- Scalar API reference
- GitHub Wiki mirror
- Coverage gate
- Work item hierarchy
- Penpot mockups
- Generated Penpot mockups
- Dark design system
- SonarCloud findings
- Addon roster import
- Discord role checks
- Discord servers at sign-in
- Community roles
- Work item classification
- Work management specification adoption
- OVH test environment
- Environment secrets
- PostgreSQL
- Companion pairing
- WoW addon in Lua
- Windows companion in Avalonia
- Companion in the Microsoft Store
- Workflows on a self-hosted runner