velais-ui-design
activeProvides the single source of truth for building Velais-branded internal UI products. Use when starting a new Velais dashboard, tool, or client-facing app; replicating the Loader or LoginPage components (.tsx files); setting up the color system (CSS tokens, Tailwind classes), typography (Onsite Extended font, WOFF2/WOFF files), or GSAP animation conventions; or configuring shadcn/ui (New York style) for a Velais project. Covers the full tech stack (React 19 + TypeScript + Vite + Tailwind CSS 4 + TanStack React Query + GSAP + Hono). Do NOT use for general design advice unrelated to Velais, Azure DevOps API integration, or backend/auth configuration (WorkOS, Hono middleware).
Quality Score Breakdown
Show checks (11)
- ✓ SKILL.md exists with exact casing 3/3
- ✓ Valid YAML frontmatter 3/3
- ✓ No unexpected frontmatter keys 1/1
- ✓ Name field valid (kebab-case) 2/2
- ✓ Name matches folder name 1/1
- ✓ Description field present 2/2
- ✓ No angle brackets in frontmatter 1/1
- ✓ Folder name is kebab-case 1/1
- ✓ No README.md inside skill folder 1/1
- ✓ Test directory with test-cases.yml exists 2/2
- ✓ Status 'active' is valid 1/1
Show checks (7)
- ✗ No action verbs found — description should say what the skill DOES 0/4
- ✓ Contains trigger indicators: use when, use for 5/5
- ✓ Description is specific and actionable 4/4
- ✓ File types mentioned in description 3/3
- ✓ Description length: 683/1024 chars 2/2
- ✓ Has negative triggers (scope boundaries) 2/2
- ✓ Owner/author specified in metadata 2/2
Show checks (8)
- ✓ Skill body has content 3/3
- ✓ Has step/section structure 4/4
- ✓ Includes examples 5/5
- ✓ Includes error handling 4/4
- ✓ Uses progressive disclosure (references/scripts) 4/4
- ✗ Instructions could be more actionable — use 'Run X', 'Call Y', 'Check Z' 1/3
- ✓ Word count: 682/5000 2/2
- ✓ All referenced paths exist 3/3
Show checks (10)
- ✓ test-cases.yml exists and parses 3/3
- ✓ 8 should-trigger tests ✓ 4/4
- ✓ 4 should-not-trigger tests ✓ 3/3
- ✓ 7 functional tests ✓ 5/5
- ✓ 2 negative tests ✓ 3/3
- ✓ 2 edge case tests ✓ 3/3
- ✓ Performance baseline documented 2/2
- ✓ All functional tests have ≥2 assertions 2/2
- ✓ All trigger phrases are diverse 2/2
- ✓ All assertions are specific 2/2
Show checks (5)
- ✓ No secrets detected 5/5
- ✓ No injection vectors in frontmatter 3/3
- ✓ Name is not reserved 3/3
- ✓ No suspicious code patterns 2/2
- ✗ 4 external URLs found — verify they're necessary: https://ui.shadcn.com/schema.json, http://www.w3.org/2000/svg, https://fonts.googleapis.com/css2?family=Host+Grotesk:wght@400;500;600;700&displ 1/2
Test Coverage
Velais UI Design Skill
Single source of truth for all Velais-branded internal UI products. When starting a new Velais dashboard, tool, or client-facing app, invoke this skill first.
Quick Reference
Before building anything, read the relevant reference file:
| Task | Reference File |
|---|---|
| Color tokens, palette, status colors | references/color-system.md ← start here |
| Font loading, typography rules | references/typography.md |
| GSAP setup, useCascadeAnimation | references/animation-system.md |
| shadcn setup, Tailwind 4, component patterns | references/component-patterns.md |
| Full-screen loading overlay | references/loader-component.md |
| Branded login / sign-in page | references/login-page.md |
Complementary Skills
| Skill | When to also invoke |
|---|---|
/gsap-animations | Building any new animation beyond the Velais cascade pattern |
/velais-brand-guidelines | Creating documents, presentations, or marketing materials |
/react-best-practices | Performance optimization, memoization, code splitting |
shadcn MCP (mcp__shadcn__*) | Adding or auditing shadcn/ui components |
Overview
Tech stack: React 19 · TypeScript · Vite · Tailwind CSS 4 · TanStack React Query · GSAP · Hono backend · Bun runtime
Design philosophy:
- Dark-first — deep navy/off-black backgrounds; brand blues for text, borders, and interactive elements only
- Monochromatic blue palette — five blues from
#aecceb(soft-sky) to#0b1b3e(midnight-blue) plus one muted burgundy for errors - Purposeful motion — GSAP for all animation; CSS-only transitions only for hover micro-interactions (≤ 200ms)
- Heading vs body font discipline — Onsite Extended for headings, Host Grotesk for everything else
Core Design Rules
These rules apply in every Velais UI project:
- Colors: Always use CSS variables (
var(--color-*)) or Tailwind semantic utilities. Never hardcode hex in component files. - Typography: Use
font-heading(Onsite Extended) only for headings. Usefont-body(Host Grotesk) for all other text. - GSAP imports: Always import
gsapanduseGSAPfrom@/lib/gsap.ts(the singleton). Never import directly fromgsapor@gsap/react. - GSAP compositing: Add
[data-gsap] { will-change: transform, opacity; }globally in CSS. Mark animated elements withdata-gsap="<role>". - Animated elements that start hidden: Use Tailwind
invisibleclass + GSAPautoAlphato reveal. Never useopacity-0for GSAP-driven reveals. - shadcn style: Always initialize with
--style new-yorkand--base-color neutral. SetcssVariables: true. - Path aliases: Configure
@/*→./src/*and@shared/*→./shared/*in bothtsconfig.jsonandvite.config.ts.
New Project Setup Checklist
Follow this checklist when starting a new Velais UI product:
1. Scaffold
bun create vite@latest my-app -- --template react-ts
cd my-app
bun install
2. Install core dependencies
bun add gsap @gsap/react @tanstack/react-query clsx tailwind-merge lucide-react
bun add -d @tailwindcss/vite tailwindcss typescript @types/react @types/react-dom
3. Configure Tailwind CSS 4
Remove tailwind.config.ts — Tailwind 4 is configured via @theme in CSS.
In vite.config.ts:
import tailwindcss from "@tailwindcss/vite";
export default defineConfig({
plugins: [react(), tailwindcss()],
resolve: {
alias: { "@": "/src", "@shared": "/shared" },
},
});
In src/index.css, add the full @theme block from references/color-system.md.
4. Initialize shadcn/ui
bunx --bun shadcn@latest init
# Style: New York
# Base color: Neutral
# CSS variables: Yes
5. Copy font files
Copy assets/fonts/OnsiteExtended-Regular.woff2 and .woff to src/fonts/.
Add @font-face declaration from references/typography.md to src/index.css.
6. Add favicon tags
Copy assets/favicon/ to public/. Add <link> tags from assets/templates/index-head.html to index.html.
7. Create GSAP singleton
Copy assets/templates/gsap.ts to src/lib/gsap.ts.
8. Create logo constants
Copy assets/templates/logo.ts to src/lib/logo.ts.
Copy assets/logo/logo-symbol.svg to src/assets/.
9. Add global CSS rules
In src/index.css:
[data-gsap] { will-change: transform, opacity; }
.kanban-card { content-visibility: auto; contain-intrinsic-size: 0 80px; }
10. Copy Loader and LoginPage
See references/loader-component.md and references/login-page.md for full verbatim implementations.
Reusable Components
Loader
Full-screen branded loading overlay with three SVG layers (ghost, fill, shimmer) and a
diagonal progress fill driven by GSAP. Accepts dataReady and onComplete props.
See references/loader-component.md for the complete verbatim implementation.
LoginPage
Branded sign-in page with a sequential GSAP timeline entry (logo → wordmark → divider →
subtitle → button → footer). Uses data-login="<role>" attributes and Tailwind invisible
- GSAP
autoAlphapattern. AcceptsonSignInprop. Seereferences/login-page.mdfor the complete verbatim implementation.