get-shit-pretty 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +15 -9
- package/agents/{gsp-accessibility-auditor.md → gsp-auditor.md} +17 -14
- package/agents/gsp-brand-auditor.md +97 -0
- package/agents/gsp-brand-strategist.md +64 -27
- package/agents/{gsp-design-engineer.md → gsp-builder.md} +12 -9
- package/agents/gsp-campaign-director.md +50 -11
- package/agents/gsp-codebase-scanner.md +171 -0
- package/agents/gsp-critic.md +18 -13
- package/agents/gsp-designer.md +126 -0
- package/agents/gsp-identity-designer.md +90 -0
- package/agents/gsp-project-researcher.md +102 -0
- package/agents/gsp-researcher.md +54 -18
- package/agents/gsp-reviewer.md +66 -0
- package/agents/gsp-scoper.md +103 -0
- package/agents/gsp-system-architect.md +91 -26
- package/agents/gsp-verbal-strategist.md +84 -0
- package/bin/install.js +161 -5
- package/commands/gsp/brand-audit.md +116 -0
- package/commands/gsp/brand-discover.md +17 -0
- package/commands/gsp/brand-identity.md +200 -0
- package/commands/gsp/brand-patterns.md +223 -0
- package/commands/gsp/brand-research.md +99 -0
- package/commands/gsp/brand-strategy.md +140 -0
- package/commands/gsp/brand-system.md +17 -0
- package/commands/gsp/brand-verbal.md +94 -0
- package/commands/gsp/brand.md +9 -83
- package/commands/gsp/brief.md +142 -0
- package/commands/gsp/build.md +49 -41
- package/commands/gsp/critique.md +140 -0
- package/commands/gsp/design.md +65 -50
- package/commands/gsp/discover.md +17 -0
- package/commands/gsp/doctor.md +319 -0
- package/commands/gsp/help.md +85 -38
- package/commands/gsp/identity.md +18 -0
- package/commands/gsp/launch.md +55 -35
- package/commands/gsp/new-project.md +5 -86
- package/commands/gsp/new.md +237 -0
- package/commands/gsp/plan.md +18 -0
- package/commands/gsp/progress.md +58 -26
- package/commands/gsp/research.md +91 -34
- package/commands/gsp/review.md +115 -59
- package/commands/gsp/strategy.md +18 -0
- package/commands/gsp/system.md +8 -65
- package/commands/gsp/update.md +102 -0
- package/commands/gsp/verbal.md +18 -0
- package/package.json +2 -2
- package/prompts/01-design-system-architect.md +35 -3
- package/prompts/03-ui-ux-pattern-master.md +11 -1
- package/prompts/09-design-to-code-translator.md +9 -0
- package/prompts/10-project-scoper.md +51 -0
- package/prompts/11-deliverable-reviewer.md +58 -0
- package/prompts/12-project-researcher.md +57 -0
- package/references/brand-archetypes.md +151 -0
- package/references/brand-prism.md +138 -0
- package/references/chunk-format.md +48 -0
- package/references/design-trends.md +47 -0
- package/references/positioning-frameworks.md +197 -0
- package/references/questioning.md +1 -1
- package/references/trends/aurora-gradients.md +245 -0
- package/references/trends/bento-grid.md +473 -0
- package/references/trends/claymorphism.md +232 -0
- package/references/trends/dark-mode-oled.md +282 -0
- package/references/trends/glassmorphism.md +455 -0
- package/references/trends/kinetic-typography.md +277 -0
- package/references/trends/liquid-glass.md +236 -0
- package/references/trends/micro-interactions.md +307 -0
- package/references/trends/neubrutalism.md +276 -0
- package/references/voice-tone.md +193 -0
- package/scripts/gsp-statusline.js +1 -1
- package/templates/branding/brief.md +74 -0
- package/templates/branding/config.json +26 -0
- package/templates/branding/roadmap.md +43 -0
- package/templates/branding/state.md +29 -0
- package/templates/changelog.md +4 -0
- package/templates/codebase-inventory.md +71 -0
- package/templates/exports-index.md +93 -0
- package/templates/manifest.md +19 -0
- package/templates/phases/brief.md +53 -0
- package/templates/phases/build.md +24 -48
- package/templates/phases/critique.md +68 -0
- package/templates/phases/design.md +54 -32
- package/templates/phases/discover.md +60 -0
- package/templates/phases/identity.md +78 -0
- package/templates/phases/launch.md +48 -55
- package/templates/phases/research.md +75 -47
- package/templates/phases/review.md +27 -75
- package/templates/phases/strategy.md +67 -0
- package/templates/phases/system.md +84 -78
- package/templates/phases/verbal.md +63 -0
- package/templates/{project.md → projects/brief.md} +13 -17
- package/templates/projects/config.json +32 -0
- package/templates/projects/roadmap.md +59 -0
- package/templates/{state.md → projects/state.md} +19 -9
- package/agents/gsp-spec-engineer.md +0 -121
- package/agents/gsp-ui-designer.md +0 -59
- package/commands/gsp/spec.md +0 -88
- package/templates/config.json +0 -26
- package/templates/phases/brand.md +0 -60
- package/templates/phases/spec.md +0 -46
- package/templates/roadmap.md +0 -62
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
# OLED-Optimized Dark Mode
|
|
2
|
+
|
|
3
|
+
> True OLED optimization with pure blacks for pixel-off battery savings, reduced contrast for eye comfort, and structured surface/text token hierarchies.
|
|
4
|
+
|
|
5
|
+
Last verified: 2026-03-04
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Visual Characteristics
|
|
10
|
+
|
|
11
|
+
- True black (`#000000`) base — OLED pixels turn off completely
|
|
12
|
+
- Surface hierarchy via subtle lightness steps (`#000` → `#0A0A0A` → `#141414` → `#1E1E1E` → `#282828`)
|
|
13
|
+
- Off-white text (`#E0E0E0` max) to prevent halation — bright white text glows on OLED
|
|
14
|
+
- Desaturated accent colors (~15-20% less saturation than light mode)
|
|
15
|
+
- Elevation expressed through lightness, not shadows (shadows are invisible on dark surfaces)
|
|
16
|
+
- 82% of mobile users prefer dark mode (Android/iOS usage data, 2025)
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## CSS Implementation
|
|
21
|
+
|
|
22
|
+
### Color Token Strategy
|
|
23
|
+
|
|
24
|
+
```css
|
|
25
|
+
:root {
|
|
26
|
+
/* Surface hierarchy */
|
|
27
|
+
--surface-base: #000000; /* true black — OLED pixel off */
|
|
28
|
+
--surface-1: #0A0A0A; /* barely lifted — cards on pure black */
|
|
29
|
+
--surface-2: #141414; /* secondary surface */
|
|
30
|
+
--surface-3: #1E1E1E; /* elevated (modals, popovers) */
|
|
31
|
+
--surface-4: #282828; /* highest elevation */
|
|
32
|
+
|
|
33
|
+
/* Text hierarchy */
|
|
34
|
+
--text-primary: #E0E0E0; /* off-white — never pure #FFF */
|
|
35
|
+
--text-secondary: #A0A0A0; /* muted */
|
|
36
|
+
--text-tertiary: #666666; /* disabled / placeholder */
|
|
37
|
+
|
|
38
|
+
/* Borders */
|
|
39
|
+
--border-subtle: rgba(255, 255, 255, 0.06);
|
|
40
|
+
--border-default: rgba(255, 255, 255, 0.12);
|
|
41
|
+
--border-strong: rgba(255, 255, 255, 0.20);
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Key Rules
|
|
46
|
+
|
|
47
|
+
- **True black `#000000`** for base backgrounds — OLED pixels turn off, saving significant battery
|
|
48
|
+
- **Never pure white `#FFFFFF`** text — causes halation (text glow/bleed) on OLED panels. Maximum brightness: `#E0E0E0`
|
|
49
|
+
- **Surface elevation via lightness** — each step increases by ~10 in hex (`0A`, `14`, `1E`, `28`). Shadows are invisible on dark, so lightness = elevation
|
|
50
|
+
- **Desaturate accents** ~15-20% for dark mode — full saturation causes eye strain on dark backgrounds
|
|
51
|
+
- **Minimum contrast**: 4.5:1 for body text, 3:1 for large text (WCAG AA)
|
|
52
|
+
- **Test on real OLED devices** — LCD emulators display dark grey, not true black
|
|
53
|
+
|
|
54
|
+
### Media Query
|
|
55
|
+
|
|
56
|
+
```css
|
|
57
|
+
@media (prefers-color-scheme: dark) {
|
|
58
|
+
:root {
|
|
59
|
+
color-scheme: dark;
|
|
60
|
+
/* swap all semantic tokens to dark values */
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Battery Savings Context
|
|
66
|
+
|
|
67
|
+
The commonly cited "47% battery savings" for true black OLED comes from a 2018 Google/Android study comparing full-white vs full-black screens at max brightness. Real-world savings depend on actual screen content mix — typical dark UI interfaces see ~20-30% savings compared to light mode. The benefit is real but varies with usage patterns.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Implementation Guide
|
|
72
|
+
|
|
73
|
+
### Step-by-step
|
|
74
|
+
|
|
75
|
+
1. Define surface hierarchy tokens: 5 levels from `#000000` to `#282828`
|
|
76
|
+
2. Define text hierarchy: primary (`#E0E0E0`), secondary (`#A0A0A0`), tertiary (`#666666`)
|
|
77
|
+
3. Define border tokens using `rgba(255,255,255)` at varying opacities (0.06, 0.12, 0.20)
|
|
78
|
+
4. Desaturate all accent colors 15-20% for dark mode variants
|
|
79
|
+
5. Apply `color-scheme: dark` to `:root` inside the media query
|
|
80
|
+
6. Replace shadow-based elevation with surface lightness stepping
|
|
81
|
+
7. Test all text/surface combinations for WCAG contrast compliance
|
|
82
|
+
8. Test on a real OLED device — halation is invisible on LCD/emulators
|
|
83
|
+
|
|
84
|
+
### Progressive Enhancement
|
|
85
|
+
|
|
86
|
+
```css
|
|
87
|
+
/* Baseline: light mode */
|
|
88
|
+
:root {
|
|
89
|
+
--bg: #ffffff;
|
|
90
|
+
--text: #1a1a1a;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/* Enhanced: dark mode when system preference is set */
|
|
94
|
+
@media (prefers-color-scheme: dark) {
|
|
95
|
+
:root {
|
|
96
|
+
color-scheme: dark;
|
|
97
|
+
--bg: #000000;
|
|
98
|
+
--text: #E0E0E0;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
For manual toggle support, use a class-based approach:
|
|
104
|
+
|
|
105
|
+
```css
|
|
106
|
+
/* User-toggled dark mode */
|
|
107
|
+
html.dark {
|
|
108
|
+
color-scheme: dark;
|
|
109
|
+
--bg: #000000;
|
|
110
|
+
--text: #E0E0E0;
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Framework Notes
|
|
115
|
+
|
|
116
|
+
#### React + Tailwind CSS
|
|
117
|
+
|
|
118
|
+
Tailwind supports two dark mode strategies:
|
|
119
|
+
|
|
120
|
+
```js
|
|
121
|
+
// tailwind.config.js
|
|
122
|
+
module.exports = {
|
|
123
|
+
darkMode: 'class', // 'class' for manual toggle, 'media' for system preference
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
```tsx
|
|
128
|
+
// Component with dark mode support
|
|
129
|
+
export function Card({ children }) {
|
|
130
|
+
return (
|
|
131
|
+
<div className="bg-white dark:bg-[#0A0A0A] text-zinc-900 dark:text-[#E0E0E0] border border-zinc-200 dark:border-white/[0.12] rounded-2xl p-6">
|
|
132
|
+
{children}
|
|
133
|
+
</div>
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// OLED surface hierarchy via Tailwind
|
|
138
|
+
// surface-base: dark:bg-black
|
|
139
|
+
// surface-1: dark:bg-[#0A0A0A]
|
|
140
|
+
// surface-2: dark:bg-[#141414]
|
|
141
|
+
// surface-3: dark:bg-[#1E1E1E]
|
|
142
|
+
// surface-4: dark:bg-[#282828]
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
#### React Native
|
|
146
|
+
|
|
147
|
+
```tsx
|
|
148
|
+
import { useColorScheme } from 'react-native';
|
|
149
|
+
|
|
150
|
+
export function useOLEDTheme() {
|
|
151
|
+
const scheme = useColorScheme();
|
|
152
|
+
return scheme === 'dark' ? {
|
|
153
|
+
surfaceBase: '#000000',
|
|
154
|
+
surface1: '#0A0A0A',
|
|
155
|
+
surface2: '#141414',
|
|
156
|
+
surface3: '#1E1E1E',
|
|
157
|
+
textPrimary: '#E0E0E0',
|
|
158
|
+
textSecondary: '#A0A0A0',
|
|
159
|
+
borderDefault: 'rgba(255,255,255,0.12)',
|
|
160
|
+
} : {
|
|
161
|
+
surfaceBase: '#FFFFFF',
|
|
162
|
+
surface1: '#F5F5F5',
|
|
163
|
+
surface2: '#EEEEEE',
|
|
164
|
+
surface3: '#E0E0E0',
|
|
165
|
+
textPrimary: '#1A1A1A',
|
|
166
|
+
textSecondary: '#666666',
|
|
167
|
+
borderDefault: 'rgba(0,0,0,0.12)',
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
For true black on React Native, ensure no background color overrides on ancestor views — any non-black ancestor prevents OLED pixel-off.
|
|
173
|
+
|
|
174
|
+
#### Vanilla CSS
|
|
175
|
+
|
|
176
|
+
The CSS implementation section above is pure vanilla. Use CSS custom properties for the full token system and swap values inside the media query.
|
|
177
|
+
|
|
178
|
+
### Common Pitfalls
|
|
179
|
+
|
|
180
|
+
1. **Pure white text on black**: causes halation — bright text bleeds/glows on OLED screens. Cap text brightness at `#E0E0E0`.
|
|
181
|
+
2. **Using shadows for elevation in dark mode**: shadows are invisible on dark surfaces. Use surface lightness stepping instead.
|
|
182
|
+
3. **Same accent saturation as light mode**: fully saturated colors cause eye strain on dark backgrounds. Desaturate 15-20%.
|
|
183
|
+
4. **Testing on LCD only**: dark grey (`#0A0A0A`) and true black (`#000000`) look identical on LCD but are visually distinct on OLED. Always test on real OLED hardware.
|
|
184
|
+
5. **Forgetting `color-scheme: dark`**: without this property, form elements, scrollbars, and browser chrome stay in light mode appearance.
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## Examples Gallery
|
|
189
|
+
|
|
190
|
+
| Site | What They Do Well | Screenshot Description |
|
|
191
|
+
|------|-------------------|----------------------|
|
|
192
|
+
| Twitter/X (mobile) | True black OLED mode with #000000 base, surface hierarchy for cards and menus | Timeline with pure black background and elevated card surfaces |
|
|
193
|
+
| Spotify | True black with vibrant (but desaturated) accent colors — album art drives color | Player screen with black base and colorful album artwork |
|
|
194
|
+
| YouTube (dark mode) | Surface hierarchy: #000 base, #0F0F0F for cards, #272727 for elevated elements | Video player with layered dark surfaces |
|
|
195
|
+
| Apple Developer (docs) | System-respecting dark mode with precise surface hierarchy and desaturated code highlighting | Documentation with OLED-optimized code blocks |
|
|
196
|
+
| Linear | Dark-first product — true black with aurora gradient accents and glass overlays | Issue tracker with atmospheric dark background |
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## Accessibility
|
|
201
|
+
|
|
202
|
+
### Contrast Requirements
|
|
203
|
+
|
|
204
|
+
| Text Type | WCAG AA Minimum | Recommended |
|
|
205
|
+
|-----------|----------------|-------------|
|
|
206
|
+
| Body text on surface-base | 4.5:1 | `#E0E0E0` on `#000` = 18.4:1 |
|
|
207
|
+
| Body text on surface-2 | 4.5:1 | `#E0E0E0` on `#141414` = 14.9:1 |
|
|
208
|
+
| Secondary text on surface-base | 4.5:1 | `#A0A0A0` on `#000` = 10.3:1 |
|
|
209
|
+
| Tertiary text on surface-base | 3:1 (large text) | `#666666` on `#000` = 4.0:1 |
|
|
210
|
+
| Disabled text | No minimum | `#666666` — clearly visible but muted |
|
|
211
|
+
|
|
212
|
+
### Halation Prevention
|
|
213
|
+
|
|
214
|
+
Halation occurs when bright content (above ~`#E8E8E8`) on a pure black OLED background causes the text to appear to glow or bleed. The threshold varies by device, but `#E0E0E0` (88% brightness) is a safe maximum for body text.
|
|
215
|
+
|
|
216
|
+
### Focus Indicators
|
|
217
|
+
|
|
218
|
+
On dark surfaces, use high-contrast focus rings:
|
|
219
|
+
|
|
220
|
+
```css
|
|
221
|
+
:focus-visible {
|
|
222
|
+
outline: 2px solid #60A5FA; /* blue works well on dark surfaces */
|
|
223
|
+
outline-offset: 2px;
|
|
224
|
+
}
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## Performance
|
|
230
|
+
|
|
231
|
+
- **OLED battery**: true black areas consume zero power (pixels off). Real-world UI savings: 20-30% vs light mode
|
|
232
|
+
- **No GPU cost**: dark mode is a color swap — no filters, blur, or compositing involved
|
|
233
|
+
- **CSS custom properties**: token swapping via media query is computed once on theme change, not per-frame
|
|
234
|
+
- **Image consideration**: images on true black backgrounds may appear too bright. Consider reducing image brightness by 5-10% in dark mode
|
|
235
|
+
- **Transition**: when toggling themes, use `transition: background-color 200ms ease, color 200ms ease` on body — but not `*` (too expensive)
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## When to Use / When to Avoid
|
|
240
|
+
|
|
241
|
+
### Use When
|
|
242
|
+
- Default: offer both modes, respect `prefers-color-scheme` system preference
|
|
243
|
+
- Dark-first: media apps, developer tools, creative tools, nighttime-use apps
|
|
244
|
+
- OLED-targeting mobile apps where battery savings matter
|
|
245
|
+
- Environments with low ambient light where bright screens cause discomfort
|
|
246
|
+
|
|
247
|
+
### Avoid When
|
|
248
|
+
- Print-focused content where dark mode creates excessive ink usage on print
|
|
249
|
+
- Products where brand identity requires a light aesthetic (some luxury, healthcare)
|
|
250
|
+
- Consider: auto-switching based on ambient light sensor or time of day
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## Design Tokens
|
|
255
|
+
|
|
256
|
+
```json
|
|
257
|
+
{
|
|
258
|
+
"dark-oled": {
|
|
259
|
+
"surface-base": "#000000",
|
|
260
|
+
"surface-1": "#0A0A0A",
|
|
261
|
+
"surface-2": "#141414",
|
|
262
|
+
"surface-3": "#1E1E1E",
|
|
263
|
+
"surface-4": "#282828",
|
|
264
|
+
"text-primary": "#E0E0E0",
|
|
265
|
+
"text-secondary": "#A0A0A0",
|
|
266
|
+
"text-tertiary": "#666666",
|
|
267
|
+
"border-subtle": "rgba(255, 255, 255, 0.06)",
|
|
268
|
+
"border-default": "rgba(255, 255, 255, 0.12)",
|
|
269
|
+
"border-strong": "rgba(255, 255, 255, 0.20)",
|
|
270
|
+
"accent-desaturate": "15%",
|
|
271
|
+
"halation-max-brightness": "#E0E0E0"
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## Related
|
|
279
|
+
|
|
280
|
+
- [Glassmorphism](./glassmorphism.md) — dark glassmorphism variant with adjusted opacity and border values
|
|
281
|
+
- [Aurora Gradients](./aurora-gradients.md) — aurora on true black is visually stunning
|
|
282
|
+
- [Liquid Glass](./liquid-glass.md) — surface token adaptation needed for dark liquid glass
|