CushLabs.ai — Design & Technical Specification

A comprehensive design document covering branding, visual system, language implementation, and JavaScript functionality.


1. Brand Identity

Brand Name

CushLabs.ai

Brand Positioning

AI consulting and modern software development studio targeting SMBs. Positioned as experienced, technically sophisticated, and approachable — expertise without intimidation.

Brand Voice

  • Professional but personable (first-person "I" rather than corporate "we")
  • Technical depth communicated accessibly
  • Confident without arrogance
  • Modern and forward-looking

2. Color Palette

Primary Colors

NameHexRGBUsage
Black#0000000, 0, 0Primary background
White#FFFFFF255, 255, 255Primary text, headlines
Orange (Accent)#FF6A3D255, 106, 61CTAs, highlights, accents

Chart Palette (Forecast + Range)

The chart series colors are implemented as CSS variables in app/globals.css so they stay consistent across light/dark mode:

TokenPurpose
--chart-pessimisticConservative scenario
--chart-realisticMost-likely scenario
--chart-optimisticBest-case scenario

Secondary / UI Colors

NameHexUsage
Gray 900#0A0A0ASubtle background variation
Gray 800#141414Card backgrounds
Gray 700#1A1A1ABorders, dividers
Gray 600#2A2A2AInactive borders
Gray 400#666666Tertiary text
Gray 300#888888Secondary text
Gray 200#AAAAAABody text

Gradient & Glow Effects

EffectValue
Orange Glowrgba(255, 106, 61, 0.15)
Orange Softrgba(255, 106, 61, 0.08)
Spotlight Gradientradial-gradient(circle, var(--color-orange-glow) 0%, transparent 70%)
Hero Pulseradial-gradient(circle, var(--color-orange-glow) 0%, transparent 60%)

3. Typography

Font Stack

RoleFont FamilyWeightsSource
Display / HeadlinesSpace Grotesk500, 600, 700Google Fonts
Body / ProseSource Serif 4300, 400, 500Google Fonts

Type Scale (Fluid)

All sizes use clamp() for smooth scaling between mobile (320px) and desktop (1440px+):

TokenMobileDesktopCSS Variable
text-xs0.75rem0.875rem--text-xs
text-sm0.875rem1rem--text-sm
text-base1rem1.125rem--text-base
text-lg1.125rem1.375rem--text-lg
text-xl1.25rem1.625rem--text-xl
text-2xl1.5rem2.25rem--text-2xl
text-3xl2rem3.5rem--text-3xl
text-4xl2.5rem5rem--text-4xl
text-5xl3rem7rem--text-5xl

Typography Settings

ElementFontWeightTrackingLine Height
Hero HeadlineSpace Grotesk700-0.02em1.05
Section TitlesSpace Grotesk700-0.01em1.2
Section LabelsSpace Grotesk6000.25em1.0
Body TextSource Serif 4400normal1.7
About TextSource Serif 4300normal1.8

4. Layout System

Container

PropertyValue
Max Width1440px
Content Widthmin(90%, 1200px)
PaddingFluid via --space-md

Spacing Scale (Fluid)

TokenMobileDesktopCSS Variable
space-xs0.5rem0.75rem--space-xs
space-sm0.75rem1.25rem--space-sm
space-md1rem1.75rem--space-md
space-lg1.5rem3rem--space-lg
space-xl2rem4.5rem--space-xl
space-2xl3rem7rem--space-2xl
space-3xl4rem10rem--space-3xl

Grid System

Features Grid (2×2):

  • Fixed 2-column layout: grid-template-columns: repeat(2, 1fr)
  • Max width: 900px
  • Gap: --space-lg
  • Breakpoint: Single column below 600px

5. Current App Implementation Notes

Language (EN/ES)

  • UI strings are sourced from lib/i18n/translations.ts.
  • Components use useTranslation(language).
  • Language is persisted in the Zustand store (lib/store.ts).

Theme (Light/Dark)

  • Theme tokens are implemented via CSS variables in app/globals.css.
  • Tailwind color tokens resolve to CSS variables (tailwind.config.js).
  • Theme defaults to system preference when no persisted theme exists, and persists via Zustand.

6. JavaScript / Interaction Notes

  • This project is implemented as a Next.js (App Router) application.
  • Client-side interactivity is handled within React components.

Notes

  • Any animation/interaction patterns should be implemented as React components.
  • Prefer small, composable UI pieces and keep business logic outside UI components.

7. Animation Specifications

Entry Animations

ElementAnimationDurationDelayEasing
BrandfadeSlideUp800ms200msease-out-expo
HeadlinefadeSlideUp800ms400msease-out-expo
SubheadlinefadeSlideUp800ms600msease-out-expo
CountdownfadeSlideUp800ms800msease-out-expo
Lang SwitcherfadeSlideUp800ms1000msease-out-expo
Scroll IndicatorfadeSlideUp800ms1200msease-out-expo

Scroll Animations

ElementTriggerAnimation
.fade-in10% visibleOpacity 0→1, translateY 40px→0
.fade-in-stagger10% visibleSame + staggered delays (0, 100, 200, 300ms)

Ambient Animations

EffectTypeDurationIteration
Hero Glow Pulsescale + opacity8sinfinite
Brand Dot Pulsebox-shadow2sinfinite
Colon Blinkopacity1sinfinite
Scroll LinetranslateY2sinfinite

Easing Functions

NameValueUsage
ease-out-expocubic-bezier(0.16, 1, 0.3, 1)Entry animations
ease-out-quartcubic-bezier(0.25, 1, 0.5, 1)Hover transitions

8. Responsive Breakpoints

BreakpointWidthChanges
Mobile< 480pxTighter countdown spacing
Small Tablet< 600pxFeatures grid → single column
Tablet< 768pxHide scroll indicator, adjust countdown
Desktop768px+Full layout, all effects enabled

9. Accessibility Compliance

WCAG 2.1 AA Checklist

CriterionStatusImplementation
1.1.1 Non-text ContentAlt text on images, aria-hidden on decorative
1.4.3 Contrast (Minimum)7:1+ for body text on dark background
1.4.10 ReflowResponsive down to 320px
2.1.1 KeyboardAll interactive elements focusable
2.3.1 Three FlashesNo flashing content
2.4.1 Bypass BlocksSemantic sections
2.5.5 Target SizeButtons meet 44×44px minimum
3.1.1 Language of Page<html lang> attribute

Reduced Motion Support

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}

10. Technical SEO Implementation (Current)

This app relies on Next.js metadata rather than manual <meta> tags inside components.

Metadata sources

  • app/layout.tsx exports metadata (site-wide defaults).
  • app/income-planner/page.tsx exports page-level metadata for the tool.
  • app/docs/[slug]/page.tsx uses generateMetadata() from the markdown frontmatter.

Notes

  • Open Graph / Twitter metadata is currently minimal; if we want richer share cards, add openGraph + twitter fields in app/layout.tsx and use a real production URL.
  • The docs system already supports per-doc titles and descriptions via frontmatter.

11. Documentation Files

  • README.md (root) — Setup and overview
  • PRD.md (root) — Product requirements
  • docs/BRAND.md — Brand strategy
  • docs/DESIGN.md — Design system
  • docs/ROADMAP.md — Roadmap
  • docs/PREDEPLOY_AUDIT.md — Deployment checklist

12. Version History

VersionDateChanges
1.0.02025-01Initial release
1.1.02025-01Added bilingual support (EN/ES)
1.1.12025-01Browser language auto-detection
1.2.02025-01Technical SEO overhaul: meta tags, Open Graph, Twitter Cards, hreflang, structured data
1.3.02025-01Solo brand copy update, personal intro section with Steve Jobs quote, enhanced hero glow
1.4.02025-12Pastel chart palette, Lucide icons, goal progress insights, FX proxy route

Document maintained by CushLabs.ai