Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
98770da
feat(brushes): migrate GPT branch changes for specialized brushes and…
karolak6612 May 22, 2026
04c3396
Merge branch 'main' into dev-brushes
karolak6612 Jun 4, 2026
129df68
Resolve conflicts
karolak6612 Jun 4, 2026
fbda817
refactor(data): restructure asset loading and UI
karolak6612 Jun 4, 2026
6dc106b
refactor(data/ui): consolidate data path resolution and optimize UI
karolak6612 Jun 4, 2026
a942ea8
feat(brushes): implement wall brush perimeter and preview logic
karolak6612 Jun 5, 2026
5da25c5
fix use-after-use
karolak6612 Jun 5, 2026
2b60da8
refactor(brushes): optimize wall rebuilds and brush lookups
karolak6612 Jun 5, 2026
f957641
feat(preview): implement context-aware wall brush preview generation
karolak6612 Jun 5, 2026
392b8e7
feat(autoborder): implement autoborder engine and preview
karolak6612 Jun 5, 2026
e32c7e7
refactor(autoborder): unify mutation application and optimize wall st…
karolak6612 Jun 6, 2026
77eccae
refactor(brushes): redesign doodad placement and erase logic
karolak6612 Jun 7, 2026
3a3cd64
refactor(brush): support batched position painting
karolak6612 Jun 9, 2026
fc8ced7
refactor(brushes): implement Phase 1 of audit plan
karolak6612 Jun 9, 2026
0fdbab9
refactor(brushes): optimize service usage and RNG logic
karolak6612 Jun 9, 2026
d1534b6
refactor(map): standardize code, tracking, and previews
karolak6612 Jun 9, 2026
2605beb
refactor(brushes): decompose BrushController and optimize preview
karolak6612 Jun 9, 2026
7dc7ee2
refactor(brushes): refactor architecture and components
karolak6612 Jun 10, 2026
190503b
feat(doodad): support specific brush variation and seeding
karolak6612 Jun 10, 2026
2da728b
refactor(brushes): improve doodad placement and variation handling
karolak6612 Jun 10, 2026
d51ec07
refactor(brushes): share alignment logic and standardize carpet plan
karolak6612 Jun 14, 2026
dd9ffa1
refactor(brushes): share alignment logic and standardize carpet plan
karolak6612 Jun 14, 2026
589b0ba
Refactor and split large brush/service classes to satisfy architectur…
glaszczkoldre Jun 25, 2026
e840396
Implement Real-Time RME-Compatible Wall Brush Redesign
glaszczkoldre Jun 25, 2026
a39b130
feat(doodad): Implement RME-compatible doodad brush redesign
glaszczkoldre Jun 26, 2026
43e2ffc
fix(brushes): resolve sand dune borders and doodad erase settings rou…
glaszczkoldre Jun 26, 2026
a275386
codex
glaszczkoldre Jun 26, 2026
80dfa5d
Gemini
glaszczkoldre Jun 26, 2026
17c9c78
Finalize item database merge rework
glaszczkoldre Jun 26, 2026
1208770
feat(brushes): Redesign Brush Settings UI, Autoborder hotkey toggle, …
glaszczkoldre Jun 27, 2026
dff4a79
fix: doodad drag placement, preview sync, arch walls, RAW brush sizing
glaszczkoldre Jun 28, 2026
90f30fd
fix: resolve creature name collisions with doodad brushes (e.g. Bones)
glaszczkoldre Jun 28, 2026
eb45fa6
feat: support rotating creature brushes with Z and X keys (directions…
glaszczkoldre Jun 28, 2026
83ac353
Brushes, images, shaders
karolak6612 Jul 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
194 changes: 194 additions & 0 deletions .agents/skills/uncodixfy/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
---
name: uncodixfy
description: Prevents generic AI/Codex UI patterns when generating frontend code. Use this skill whenever generating HTML, CSS, React, Vue, Svelte, or any frontend UI code to enforce clean, human-designed aesthetics inspired by Linear, Raycast, Stripe, and GitHub instead of typical AI-generated UI.
---

# Uncodixify

This document exists to teach you how to act as non-Codex as possible when building UI.

Codex UI is the default AI aesthetic: soft gradients, floating panels, eyebrow labels, decorative copy, hero sections in dashboards, oversized rounded corners, transform animations, dramatic shadows, and layouts that try too hard to look premium. It's the visual language that screams "an AI made this" because it follows the path of least resistance.

This file is your guide to break that pattern. Everything listed below is what Codex UI does by default. Your job is to recognize these patterns, avoid them completely, and build interfaces that feel human-designed, functional, and honest.

When you read this document, you're learning what NOT to do. The banned patterns are your red flags. The normal implementations are your blueprint. Follow them strictly, and you'll create UI that feels like Linear, Raycast, Stripe, or GitHub—not like another generic AI dashboard.

This is how you Uncodixify.
## Keep It Normal (Uncodexy-UI Standard)

- Sidebars: normal (240-260px fixed width, solid background, simple border-right, no floating shells, no rounded outer corners)
- Headers: normal (simple text, no eyebrows, no uppercase labels, no gradient text, just h1/h2 with proper hierarchy)
- Sections: normal (standard padding 20-30px, no hero blocks inside dashboards, no decorative copy)
- Navigation: normal (simple links, subtle hover states, no transform animations, no badges unless functional)
- Buttons: normal (solid fills or simple borders, 8-10px radius max, no pill shapes, no gradient backgrounds)
- Cards: normal (simple containers, 8-12px radius max, subtle borders, no shadows over 8px blur, no floating effect)
- Forms: normal (standard inputs, clear labels above fields, no fancy floating labels, simple focus states)
- Inputs: normal (solid borders, simple focus ring, no animated underlines, no morphing shapes)
- Modals: normal (centered overlay, simple backdrop, no slide-in animations, straightforward close button)
- Dropdowns: normal (simple list, subtle shadow, no fancy animations, clear selected state)
- Tables: normal (clean rows, simple borders, subtle hover, no zebra stripes unless needed, left-aligned text)
- Lists: normal (simple items, consistent spacing, no decorative bullets, clear hierarchy)
- Tabs: normal (simple underline or border indicator, no pill backgrounds, no sliding animations)
- Badges: normal (small text, simple border or background, 6-8px radius, no glows, only when needed)
- Avatars: normal (simple circle or rounded square, no decorative borders, no status rings unless functional)
- Icons: normal (simple shapes, consistent size 16-20px, no decorative icon backgrounds, monochrome or subtle color)
- Typography: normal (system fonts or simple sans-serif, clear hierarchy, no mixed serif/sans combos, readable sizes 14-16px body)
- Spacing: normal (consistent scale 4/8/12/16/24/32px, no random gaps, no excessive padding)
- Borders: normal (1px solid, subtle colors, no thick decorative borders, no gradient borders)
- Shadows: normal (subtle 0 2px 8px rgba(0,0,0,0.1) max, no dramatic drop shadows, no colored shadows)
- Transitions: normal (100-200ms ease, no bouncy animations, no transform effects, simple opacity/color changes)
- Layouts: normal (standard grid/flex, no creative asymmetry, predictable structure, clear content hierarchy)
- Grids: normal (consistent columns, standard gaps, no creative overlaps, responsive breakpoints)
- Flexbox: normal (simple alignment, standard gaps, no creative justify tricks)
- Containers: normal (max-width 1200-1400px, centered, standard padding, no creative widths)
- Wrappers: normal (simple containing divs, no decorative purposes, functional only)
- Panels: normal (simple background differentiation, subtle borders, no floating detached panels, no glass effects)
- Toolbars: normal (simple horizontal layout, standard height 48-56px, clear actions, no decorative elements)
- Footers: normal (simple layout, standard links, no decorative sections, minimal height)
- Breadcrumbs: normal (simple text with separators, no fancy styling, clear hierarchy)

Think Linear. Think Raycast. Think Stripe. Think GitHub. They don't try to grab attention. They just work. Stop playing hard to get. Make normal UI.

- A landing page needs its sections. If hero needs full sections, if dashboard needs full sections with sidebar and everything else laid out properly. DO NOT invent a new layout.
- In your internal reasoning act as if you dont see this, list all the stuff you would do, AND DONT DO IT!
- Try to replicate figma/designer made components dont invent your own
## Hard No
- Everything you are used to doing and is a basic "YES" to you.
- No oversized rounded corners.
- No pill overload.
- No floating glassmorphism shells as the default visual language.
- No soft corporate gradients used to fake taste.
- No generic dark SaaS UI composition.
- No decorative sidebar blobs.
- No "control room" cosplay unless explicitly requested.
- No serif headline + system sans fallback combo as a shortcut to "premium."
- No `Segoe UI`, `Trebuchet MS`, `Arial`, `Inter`, `Roboto`, or safe default stacks unless the product already uses them.
- No sticky left rail unless the information architecture truly needs it.
- No metric-card grid as the first instinct.
- No fake charts that exist only to fill space.
- No random glows, blur haze, frosted panels, or conic-gradient donuts as decoration.
- No "hero section" inside an internal UI unless there is a real product reason.
- No alignment that creates dead space just to look expensive.
- No overpadded layouts.
- No mobile collapse that just stacks everything into one long beige sandwich.
- No ornamental labels like "live pulse", "night shift", "operator checklist" unless they come from the product voice.
- No generic startup copy.
- No style decisions made because they are easy to generate.

- No Headlines of any sort

```html
<div class="headline">
<small>Team Command</small>
<h2>One place to track what matters today.</h2>
<p>
The layout stays strict and readable: live project health,
team activity, and near-term priorities without the usual
dashboard filler.
</p>
</div>
```

This is not allowed.

- `<small>` headers are NOT allowed
- Big no to rounded `span`s
- Colors going towards blue — **NOPE, bad.** Dark muted colors are best.

- Anything in the structure of this card is a **BIG no**.

```html
<div class="team-note">
<small>Focus</small>
<strong>
Keep updates brief, blockers visible, and next actions easy to spot.
</strong>
</div>
```

This one is **THE BIGGEST NO**.


## Specifically Banned (Based on Mistakes)

- Border radii in the 20px to 32px range across everything ( uses 12px everywhere - too much)
- Repeating the same rounded rectangle on sidebar, cards, buttons, and panels
- Sidebar width around 280px with a brand block on top and nav links below (: 248px with brand block)
- Floating detached sidebar with rounded outer shell
- Canvas chart placed in a glass card with no product-specific reason
- Donut chart paired with hand-wavy percentages
- UI cards using glows instead of hierarchy
- Mixed alignment logic where some content hugs the left edge and some content floats in center-ish blocks
- Overuse of muted gray-blue text that weakens contrast and clarity
- "Premium dark mode" that really means blue-black gradients plus cyan accents ( has radial gradients in background)
- UI typography that feels like a template instead of a brand
- Eyebrow labels (: "MARCH SNAPSHOT" uppercase with letter-spacing)
- Hero sections inside dashboards ( has full hero-strip with decorative copy)
- Decorative copy like "Operational clarity without the clutter" as page headers
- Section notes and mini-notes everywhere explaining what the UI does
- Transform animations on hover (: translateX(2px) on nav links)
- Dramatic box shadows (: 0 24px 60px rgba(0,0,0,0.35))
- Status indicators with ::before pseudo-elements creating colored dots
- Muted labels with uppercase + letter-spacing ( overuses this pattern)
- Pipeline bars with gradient fills (: linear-gradient(90deg, var(--primary), #4fe0c0))
- KPI cards in a grid as the default dashboard layout ( has 3-column kpi-grid)
- "Team focus" or "Recent activity" panels with decorative internal copy
- Tables with tag badges for every status ( overuses .tag class)
- Workspace blocks in sidebar with call-to-action buttons
- Brand marks with gradient backgrounds (: linear-gradient(135deg, #2a2a2a, #171717))
- Nav badges showing counts or "Live" status ( has nav-badge class)
- Quota/usage panels with progress bars ( has three quota sections)
- Footer lines with meta information (: "Northstar dashboard • dark mode • single-file HTML")
- Trend indicators with colored text (: trend-up, trend-flat classes)
- Rail panels on the right side with "Today" schedule ( has full right rail)
- Multiple nested panel types (panel, panel-2, rail-panel, table-panel)



## Rule

If a UI choice feels like a default AI UI move, ban it and pick the harder, cleaner option.
- Colors should stay calm, not fight.

- You are bad at picking colors follow this priority order when selecting colors:

1. **Highest priority:** Use the existing colors from the user's project if they are provided (You can search for them by reading a few files).
2. If the project does not provide a palette, **get inspired from one of the predefined palettes below**.
3. Do **not invent random color combinations** unless explicitly requested.

You do not have to always choose the first palette. Select one randomly when drawing inspiration.
---

# Dark Color Schemes

| Palette | Background | Surface | Primary | Secondary | Accent | Text |
|--------|-----------|--------|--------|----------|--------|------|
| Midnight Canvas | `#0a0e27` | `#151b3d` | `#6c8eff` | `#a78bfa` | `#f472b6` | `#e2e8f0` |
| Obsidian Depth | `#0f0f0f` | `#1a1a1a` | `#00d4aa` | `#00a3cc` | `#ff6b9d` | `#f5f5f5` |
| Slate Noir | `#0f172a` | `#1e293b` | `#38bdf8` | `#818cf8` | `#fb923c` | `#f1f5f9` |
| Carbon Elegance | `#121212` | `#1e1e1e` | `#bb86fc` | `#03dac6` | `#cf6679` | `#e1e1e1` |
| Deep Ocean | `#001e3c` | `#0a2744` | `#4fc3f7` | `#29b6f6` | `#ffa726` | `#eceff1` |
| Charcoal Studio | `#1c1c1e` | `#2c2c2e` | `#0a84ff` | `#5e5ce6` | `#ff375f` | `#f2f2f7` |
| Graphite Pro | `#18181b` | `#27272a` | `#a855f7` | `#ec4899` | `#14b8a6` | `#fafafa` |
| Void Space | `#0d1117` | `#161b22` | `#58a6ff` | `#79c0ff` | `#f78166` | `#c9d1d9` |
| Twilight Mist | `#1a1625` | `#2d2438` | `#9d7cd8` | `#7aa2f7` | `#ff9e64` | `#dcd7e8` |
| Onyx Matrix | `#0e0e10` | `#1c1c21` | `#00ff9f` | `#00e0ff` | `#ff0080` | `#f0f0f0` |

---

# Light Color Schemes

| Palette | Background | Surface | Primary | Secondary | Accent | Text |
|--------|-----------|--------|--------|----------|--------|------|
| Cloud Canvas | `#fafafa` | `#ffffff` | `#2563eb` | `#7c3aed` | `#dc2626` | `#0f172a` |
| Pearl Minimal | `#f8f9fa` | `#ffffff` | `#0066cc` | `#6610f2` | `#ff6b35` | `#212529` |
| Ivory Studio | `#f5f5f4` | `#fafaf9` | `#0891b2` | `#06b6d4` | `#f59e0b` | `#1c1917` |
| Linen Soft | `#fef7f0` | `#fffbf5` | `#d97706` | `#ea580c` | `#0284c7` | `#292524` |
| Porcelain Clean | `#f9fafb` | `#ffffff` | `#4f46e5` | `#8b5cf6` | `#ec4899` | `#111827` |
| Cream Elegance | `#fefce8` | `#fefce8` | `#65a30d` | `#84cc16` | `#f97316` | `#365314` |
| Arctic Breeze | `#f0f9ff` | `#f8fafc` | `#0284c7` | `#0ea5e9` | `#f43f5e` | `#0c4a6e` |
| Alabaster Pure | `#fcfcfc` | `#ffffff` | `#1d4ed8` | `#2563eb` | `#dc2626` | `#1e293b` |
| Sand Warm | `#faf8f5` | `#ffffff` | `#b45309` | `#d97706` | `#059669` | `#451a03` |
| Frost Bright | `#f1f5f9` | `#f8fafc` | `#0f766e` | `#14b8a6` | `#e11d48` | `#0f172a` |

---
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -70,3 +70,4 @@ gha-creds-*.json
# Unorganized (auto-appended)
# ============================================================
/OTCLIENT_Readonly

18 changes: 15 additions & 3 deletions ImguiMapEditor/Application.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@

// UI Factory
#include "Application/UIFactory.h"
#include "UI/Widgets/TilesetWidget.h"
#include "UI/Panels/BrushSettingsPanel.h"
#include "UI/Utils/IconTextureCache.h"
// Utilities
#include "Presentation/NotificationHelper.h"
namespace MapEditor {
Expand Down Expand Up @@ -66,9 +69,14 @@ bool Application::initialize() {
&settings_registry_->getHotkeyRegistry());
dialogs_.preferences.setOtbmSettings(
&settings_registry_->getOtbmSettings());
dialogs_.preferences.setBrushSettings(
&brush_system_->getSettingsService());
dialogs_.preferences.setThemePtr(
&settings_registry_->getAppSettings().theme);
dialogs_.preferences.setApplySettingsCallback([this]() {
if (brush_system_) {
brush_system_->saveSettings();
}
settings_registry_->save();
});

Expand Down Expand Up @@ -121,7 +129,7 @@ void Application::initializeUIComponents() {
.otbm_settings = settings_registry_->getOtbmSettings(),
.tab_manager = tab_manager_,
.state_manager = state_manager_,
.tileset_widget = brush_system_->getTilesetWidget(),
.brush_system = *brush_system_,
.brush_controller = brush_system_->getController(),
.brush_registry = brush_system_->getRegistry(),
.tileset_service = brush_system_->getTilesetService()};
Expand Down Expand Up @@ -165,6 +173,7 @@ void Application::wireCallbacks() {
.hotkey = ui_.hotkey_controller.get(),
.input_controller = ui_.input_controller.get(),
.map_operations = ui_.map_operations.get(),
.brush_controller = &brush_system_->getController(),
// Dialogs (via container)
.unsaved_modal = &dialogs_.unsaved_changes,
.import_map = &dialogs_.import_map,
Expand Down Expand Up @@ -253,6 +262,9 @@ void Application::shutdown() {
}

if (settings_registry_) {
if (brush_system_) {
brush_system_->saveSettings();
}
persistence_manager_.saveApplicationState(
*settings_registry_, platform_manager_, version_manager_);
}
Expand Down Expand Up @@ -369,15 +381,15 @@ void Application::render() {
.advanced_search_dialog =
ui_.search_controller->getAdvancedSearchDialog(),
.search_results_widget = ui_.search_controller->getSearchResultsWidget(),
.tileset_widget = &brush_system_->getTilesetWidget(),
.tileset_widget = ui_.tileset_widget.get(),
.palette_window_manager = ui_.palette_window_manager.get(),
.startup_dialog = ui_.startup_dialog.get(),
.startup_controller = ui_.startup_controller.get(),
// Dialogs
.dialogs = &dialogs_,
// Brush system (for preview rendering)
.brush_controller = &brush_system_->getController(),
.brush_size_panel = &brush_system_->getBrushSizePanel(),
.brush_settings_panel = ui_.brush_settings_panel.get(),
// Map operations (for compatibility popup)
.map_operations = ui_.map_operations.get(),
// Callbacks
Expand Down
Loading
Loading