ui-design
Designing premium user interfaces with egui
Installation
Follow the repository instructions for this skill and your agent. Review the files and dependencies before adding it to your workflow.
View source ↗GuidesSkill instructions
Skill: UI Design
When to use this skill
- Creating new UI views or components
- Modifying existing layouts
- Improving UX/UI aesthetics
- Ensuring consistency with the design system
Design Philosophy
"Premium Dark Mode" is the core aesthetic. The UI should look professional, financial, and sleek.
-
Backgrounds: Deep, rich dark blues/blacks (not just plain
#000000). -
Accents: Neon blue (
#42A5F5) for action, Green/Red for financial data. - Hierarchy: Use visual weight, spacing, and font size to guide the eye.
- Feedback: Interactive elements must respond to hover/click.
Color Palette (Reference)
| Role | Color | Hex | usage |
|---|---|---|---|
| Window Bg | Dark Blue/Black | #0A0C10 |
Main application background |
| Panel Bg | Dark Blue/Black | #0A0C10 |
Sidebars, panels |
| Card Bg | Slightly lighter | #12161D |
Surface for content containers |
| Button Bg | Lighter input | #1C212A |
Standard interactive elements |
| Hover | Highlight | #282E3A |
Hover state |
| Primary | Vibrant Blue | #42A5F5 |
Active states, primary actions |
| Text | High Contrast | #F0F0F0 |
Primary text |
| Subtext | Muted | #B4B4B4 |
Labels, secondary info |
| Border | Subtle | #282C34 |
Separators, outlines |
Component Guidelines
1. Structure
All UI components should exist in src/interfaces/ submodules.
pub fn render_my_component(ui: &mut egui::Ui, data: &MyData) {
ui.group(|ui| {
ui.heading("Title");
// ... content
});
}
2. Layouts
Use egui layout helpers effectively:
-
ui.horizontal(|ui| { ... })for toolbars -
ui.vertical(|ui| { ... })for lists -
egui::Gridfor aligned forms or data -
ui.allocate_uifor custom sizing
3. "Card" Pattern
To create distinct sections, use a coherent card style:
// Helper for consistent card styling (implement if not exists or use frame)
egui::Frame::none()
.fill(egui::Color32::from_rgb(18, 22, 29))
.rounding(4.0)
.stroke(egui::Stroke::new(1.0, egui::Color32::from_rgb(40, 44, 52)))
.inner_margin(12.0)
.show(ui, |ui| {
ui.heading("Card Title");
ui.label("Card content...");
});
Best Practices (egui)
❌ Don't
-
Hardcode colors everywhere: Use the
ctx.style().visualsor defined constants where possible (though custom colors are allowed for the specific theming). -
Block the UI thread: No long computations in
update(). Use channels to generic agents. -
Over-nest layouts: Too many nested
ui.horizontal/verticalcalls can kill performance and readability.
✅ Do
-
Use
ui.add_enabled(bool, widget)for conditional interactivity. -
Use
ui.push_idloops to avoid ID clashes. - Separate logic from rendering: The render function should typically take a reference to data, not the whole application state if possible.
Checklist for UI Changes
- Does it respect the Dark Mode palette?
- Are texts readable (contrast)?
- Is the layout responsive (resizing window)?
- Do buttons/inputs have hover states?
- Are icons using the correct emoji font fallback?
- Is padding/margin consistent (standard: 8.0, 12.0, 24.0)?
Updates
When updating the theme, modify UserAgent::update in src/interfaces/ui.rs.
Examples
Read the usage examples in the source repository.
View source ↗Source history
- Indexed on
- 2026-01-20
- Index updated
- 2026-02-03
- Branch
- main
Index and sync dates describe this directory. View the source repository for code history.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!