Skip to content

Commit f60d41a

Browse files
waleedlatif1andresdjassocursoragent
authored
feat(landing): enterprise page redesign with platform-loop hero and feature graphics (#5535)
* feat(landing): add enterprise link to navbar and footer * feat(landing): redesign enterprise page with platform-loop hero and feature graphics - New enterprise hero with animated platform loop (sidebar + home stage) and hero background - Nine redesigned feature tiles under enterprise/components/feature-graphics with a shared monochrome design vocabulary, per-tile tones, and CSS-module animations - Shared hero-header component and landing-layout constants; hero/platform/solutions pages aligned to the same layout system Co-authored-by: Cursor <cursoragent@cursor.com> * chore(dev): allow 127.0.0.1 dev origins and skip root redirect in dev Co-authored-by: Cursor <cursoragent@cursor.com> * chore(skills): install make-interfaces-feel-better skill Co-authored-by: Cursor <cursoragent@cursor.com> * cleanup(landing): enterprise redesign polish + asset compression - Fix ChipLink chrome overrides in navbar/mobile-nav to use variant='border' - Dedup elapsed-time reveal effects in enterprise-home-stage into one hook - Remove unused FeatureGraphicNode component and barrel export - Convert enterprise-hero-background.png (8.9MB lossless) to WebP q90 (1.07MB, near-lossless) - Fix team-avatar-1/2/3.png mislabeling (actual JPEG bytes) to correct .jpg extension * fix(landing): keep feature-tile graphics uncropped at small breakpoints Feature tiles shrank their min-height on small screens while the tallest vignettes (audit ledger, staging panel) still needed ~300px of visual slot, cropping their tops against the slot's overflow-hidden. Tiles now hold one 440px min-height everywhere. The 3-up grid also collapses to two columns below lg instead of md, and the fixed-width canvases (access graph, standards seal, ops router) scale down on the narrow two-column band and the 3-up row just past lg so outer labels and chips are never cut off. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(landing): regroup enterprise feature cards into 4/4/2/2 at two-column band Merge the four enterprise feature sections into one EnterpriseFeatureGrid so the 640-1023px two-column layout fills 4/4/2/2 with no orphan empty cell; lg+ and <sm layouts are unchanged via sm:max-lg order utilities. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: andresdjasso <andresdjasso@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 65b1ca1 commit f60d41a

65 files changed

Lines changed: 5587 additions & 195 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
---
2+
name: make-interfaces-feel-better
3+
description: Design engineering principles for making interfaces feel polished. Use when building UI components, reviewing frontend code, implementing animations, hover states, shadows, borders, typography, micro-interactions, enter/exit animations, or any visual detail work. Triggers on UI polish, design details, "make it feel better", "feels off", stagger animations, border radius, optical alignment, font smoothing, tabular numbers, image outlines, box shadows.
4+
---
5+
6+
# Details that make interfaces feel better
7+
8+
Great interfaces rarely come from a single thing. It's usually a collection of small details that compound into a great experience. Apply these principles when building or reviewing UI code.
9+
10+
## Quick Reference
11+
12+
| Category | When to Use |
13+
| --- | --- |
14+
| [Typography](typography.md) | Text wrapping, font smoothing, tabular numbers |
15+
| [Surfaces](surfaces.md) | Border radius, optical alignment, shadows, image outlines, hit areas |
16+
| [Animations](animations.md) | Interruptible animations, enter/exit transitions, icon animations, scale on press |
17+
| [Performance](performance.md) | Transition specificity, `will-change` usage |
18+
19+
## Core Principles
20+
21+
### 1. Concentric Border Radius
22+
23+
Outer radius = inner radius + padding. Mismatched radii on nested elements is the most common thing that makes interfaces feel off.
24+
25+
### 2. Optical Over Geometric Alignment
26+
27+
When geometric centering looks off, align optically. Buttons with icons, play triangles, and asymmetric icons all need manual adjustment.
28+
29+
### 3. Shadows Over Borders
30+
31+
Layer multiple transparent `box-shadow` values for natural depth. Shadows adapt to any background; solid borders don't.
32+
33+
### 4. Interruptible Animations
34+
35+
Use CSS transitions for interactive state changes — they can be interrupted mid-animation. Reserve keyframes for staged sequences that run once.
36+
37+
### 5. Split and Stagger Enter Animations
38+
39+
Don't animate a single container. Break content into semantic chunks and stagger each with ~100ms delay.
40+
41+
### 6. Subtle Exit Animations
42+
43+
Use a small fixed `translateY` instead of full height. Exits should be softer than enters.
44+
45+
### 7. Contextual Icon Animations
46+
47+
Animate icons with `opacity`, `scale`, and `blur` instead of toggling visibility. Use exactly these values: scale from `0.25` to `1`, opacity from `0` to `1`, blur from `4px` to `0px`. If the project has `motion` or `framer-motion` in `package.json`, use `transition: { type: "spring", duration: 0.3, bounce: 0 }` — bounce must always be `0`. If no motion library is installed, keep both icons in the DOM (one absolute-positioned) and cross-fade with CSS transitions using `cubic-bezier(0.2, 0, 0, 1)` — this gives both enter and exit animations without any dependency.
48+
49+
### 8. Font Smoothing
50+
51+
Apply `-webkit-font-smoothing: antialiased` to the root layout on macOS for crisper text.
52+
53+
### 9. Tabular Numbers
54+
55+
Use `font-variant-numeric: tabular-nums` for any dynamically updating numbers to prevent layout shift.
56+
57+
### 10. Text Wrapping
58+
59+
Use `text-wrap: balance` on headings. Use `text-wrap: pretty` for body text to avoid orphans.
60+
61+
### 11. Image Outlines
62+
63+
Add a subtle `1px` outline with low opacity to images for consistent depth. The color must be pure black in light mode (`rgba(0, 0, 0, 0.1)`) and pure white in dark mode (`rgba(255, 255, 255, 0.1)`) — never a near-black like slate, zinc, or any tinted neutral. A tinted outline picks up the surface color underneath it and reads as dirt on the image edge.
64+
65+
### 12. Scale on Press
66+
67+
A subtle `scale(0.96)` on click gives buttons tactile feedback. Always use `0.96`. Never use a value smaller than `0.95` — anything below feels exaggerated. Add a `static` prop to disable it when motion would be distracting.
68+
69+
### 13. Skip Animation on Page Load
70+
71+
Use `initial={false}` on `AnimatePresence` to prevent enter animations on first render. Verify it doesn't break intentional entrance animations.
72+
73+
### 14. Never Use `transition: all`
74+
75+
Always specify exact properties: `transition-property: scale, opacity`. Tailwind's `transition-transform` covers `transform, translate, scale, rotate`.
76+
77+
### 15. Use `will-change` Sparingly
78+
79+
Only for `transform`, `opacity`, `filter` — properties the GPU can composite. Never use `will-change: all`. Only add when you notice first-frame stutter.
80+
81+
### 16. Minimum Hit Area
82+
83+
Interactive elements need at least 40×40px hit area. Extend with a pseudo-element if the visible element is smaller. Never let hit areas of two elements overlap.
84+
85+
## Common Mistakes
86+
87+
| Mistake | Fix |
88+
| --- | --- |
89+
| Same border radius on parent and child | Calculate `outerRadius = innerRadius + padding` |
90+
| Icons look off-center | Adjust optically with padding or fix SVG directly |
91+
| Hard borders between sections | Use layered `box-shadow` with transparency |
92+
| Jarring enter/exit animations | Split, stagger, and keep exits subtle |
93+
| Numbers cause layout shift | Apply `tabular-nums` |
94+
| Heavy text on macOS | Apply `antialiased` to root |
95+
| Animation plays on page load | Add `initial={false}` to `AnimatePresence` |
96+
| `transition: all` on elements | Specify exact properties |
97+
| First-frame animation stutter | Add `will-change: transform` (sparingly) |
98+
| Tiny hit areas on small controls | Extend with pseudo-element to 40×40px |
99+
100+
## Review Output Format
101+
102+
Always present changes as a markdown table with **Before** and **After** columns. Include every change you made — not just a subset. Never list findings as separate "Before:" / "After:" lines outside of a table. Group changes by principle using a heading above each table, and keep each row focused on a single diff so the reader can scan the whole list quickly.
103+
104+
### Example
105+
106+
#### Concentric border radius
107+
| Before | After |
108+
| --- | --- |
109+
| `rounded-xl` on card + `rounded-xl` on inner button (`p-2`) | `rounded-2xl` on card (`12 + 8`), `rounded-lg` on inner button |
110+
| `border-radius: 16px` on both nested surfaces | Outer `24px`, inner `16px` with `8px` padding |
111+
112+
#### Tabular numbers
113+
| Before | After |
114+
| --- | --- |
115+
| `<span>{count}</span>` on animated counter | `<span className="tabular-nums">{count}</span>` |
116+
| Default numerals on timer | Added `font-variant-numeric: tabular-nums` to root |
117+
118+
#### Scale on press
119+
| Before | After |
120+
| --- | --- |
121+
| `<button className="...">` | Added `active:scale-[0.96] transition-transform` |
122+
| `scale(0.9)` on press | Raised to `scale(0.96)` — anything below `0.95` feels exaggerated |
123+
124+
Rows should cite the specific file and the specific property that changed when it isn't obvious from the snippet. If a principle was reviewed but nothing needed to change, omit that table entirely — empty tables add noise.
125+
126+
## Review Checklist
127+
128+
- [ ] Nested rounded elements use concentric border radius
129+
- [ ] Icons are optically centered, not just geometrically
130+
- [ ] Shadows used instead of borders where appropriate
131+
- [ ] Enter animations are split and staggered
132+
- [ ] Exit animations are subtle
133+
- [ ] Dynamic numbers use tabular-nums
134+
- [ ] Font smoothing is applied
135+
- [ ] Headings use text-wrap: balance
136+
- [ ] Images have subtle outlines
137+
- [ ] Buttons use scale on press where appropriate
138+
- [ ] AnimatePresence uses `initial={false}` for default-state elements
139+
- [ ] No `transition: all` — only specific properties
140+
- [ ] `will-change` only on transform/opacity/filter, never `all`
141+
- [ ] Interactive elements have at least 40×40px hit area
142+
143+
## Reference Files
144+
145+
- [typography.md](typography.md) — Text wrapping, font smoothing, tabular numbers
146+
- [surfaces.md](surfaces.md) — Border radius, optical alignment, shadows, image outlines
147+
- [animations.md](animations.md) — Interruptible animations, enter/exit transitions, icon animations, scale on press
148+
- [performance.md](performance.md) — Transition specificity, `will-change` usage

0 commit comments

Comments
 (0)