mirror of
https://github.com/jjbrunton/Sauci.git
synced 2026-10-31 18:19:43 +00:00
- Add new question card components (photo, audio, text, who-likely) - Add share preview modal for matches - Add nudge notification system with rate limiting - Add session-based notification improvements - Add match confetti celebration animation - Update onboarding flow with paywall tracking - Remove deprecated swipe card and tutorial components - Update GlassCard/GlassInput to use solid backgrounds - Fix routing issues after packs screen removal
364 lines
11 KiB
Markdown
364 lines
11 KiB
Markdown
# Sauci Design System
|
|
|
|
A boutique, premium design framework for the Sauci couples intimacy app.
|
|
|
|
## Brand Identity
|
|
|
|
**Aesthetic:** Boutique lingerie store meets modern dating app. Think Ann Summers sophistication - sensual but tasteful, premium but accessible, intimate but playful.
|
|
|
|
**Mood:** Romantic, luxurious, warm, inviting, confident
|
|
|
|
**Key Principles:**
|
|
|
|
- Dark, velvety backgrounds with subtle gradient atmosphere
|
|
- Solid, high-contrast surfaces (no glass or blur effects)
|
|
- Primary gradient (rose → purple) as the core brand signature
|
|
- Gold reserved for premium/dares features only
|
|
- Soft glows and shadows for depth, not transparency
|
|
|
|
---
|
|
|
|
## Color Hierarchy
|
|
|
|
### 1. Brand Colors (Primary Palette)
|
|
|
|
The core brand identity. Used for primary actions, key UI elements, and brand recognition.
|
|
|
|
| Name | Hex | RGB | Usage |
|
|
|------|-----|-----|-------|
|
|
| **Primary** | `#e1306c` | 225, 48, 108 | Primary buttons, active states, key accents |
|
|
| **Primary Dark** | `#c12055` | 193, 32, 85 | Pressed states, darker variants |
|
|
| **Secondary** | `#9b59b6` | 155, 89, 182 | Secondary accents, gradient endpoints |
|
|
| **Secondary Dark** | `#8e44ad` | 142, 68, 173 | Pressed states, darker variants |
|
|
|
|
**Primary Gradient:** `#e1306c → #9b59b6` (Rose to Purple)
|
|
- Direction: Left to right (horizontal) or top to bottom (vertical)
|
|
- Use for: Primary buttons, match celebrations, brand moments
|
|
|
|
### 2. Premium/Luxury Colors
|
|
|
|
The boutique palette. Used for premium features, upgrades, and luxury moments.
|
|
|
|
| Name | Hex | RGB | Usage |
|
|
|------|-----|-----|-------|
|
|
| **Gold** | `#D4AF37` | 212, 175, 55 | Premium badges, Dares feature, luxury accents |
|
|
| **Gold Dark** | `#B8860B` | 184, 134, 11 | Gold gradient endpoint |
|
|
| **Rose** | `#E8A4AE` | 232, 164, 174 | Quiz feature, soft premium accents |
|
|
| **Rose Dark** | `#D4919B` | 212, 145, 155 | Rose gradient endpoint |
|
|
| **Champagne** | `#F7E7CE` | 247, 231, 206 | Highlights, premium text accents |
|
|
|
|
### 3. Feature Colors
|
|
|
|
Each core feature has a designated accent color for consistency and recognition.
|
|
|
|
| Feature | Primary Color | Hex | Gradient |
|
|
|---------|---------------|-----|----------|
|
|
| **Swipe/Match** | Primary | `#e1306c` | Primary gradient (rose → purple) |
|
|
| **Quiz** | Rose | `#E8A4AE` | `#E8A4AE → #D4919B` |
|
|
| **Dares** | Gold | `#D4AF37` | `#D4AF37 → #B8860B` |
|
|
| **Chat** | Primary | `#e1306c` | Primary gradient |
|
|
| **Profile** | Secondary | `#9b59b6` | Secondary gradient |
|
|
|
|
**Usage Rules:**
|
|
- Feature icons use their designated color
|
|
- Feature headers/titles can use the color as an accent
|
|
- Feature-specific buttons should use the feature color
|
|
- Keep the feature color consistent across all screens for that feature
|
|
|
|
### 4. Background Colors
|
|
|
|
Dark, rich backgrounds that make content pop.
|
|
|
|
| Name | Hex | RGBA | Usage |
|
|
|------|-----|------|-------|
|
|
| **Background** | `#0e0e11` | 14, 14, 17 | Primary app background |
|
|
| **Background Light** | `#17171c` | 23, 23, 28 | Cards, elevated surfaces |
|
|
| **Surface** | `#17171c` | 23, 23, 28 | Primary surface color |
|
|
| **Surface Solid** | `#17171c` | 23, 23, 28 | Opaque surfaces |
|
|
| **Border** | `#303036` | 48, 48, 54 | Dividers, outlines, input borders |
|
|
|
|
### 5. Tile/Category Colors (Home Screen)
|
|
|
|
Discovery/Home tiles use vibrant, solid colors for quick recognition.
|
|
|
|
| Token | Hex |
|
|
|-------|-----|
|
|
| **teal** | `#14B8A6` |
|
|
| **purple** | `#8B5CF6` |
|
|
| **orange** | `#F97316` |
|
|
| **coral** | `#F87171` |
|
|
| **emerald** | `#10B981` |
|
|
| **indigo** | `#6366F1` |
|
|
| **rose** | `#EC4899` |
|
|
| **amber** | `#F59E0B` |
|
|
|
|
**Usage Rules:**
|
|
- Tiles are solid fills with a subtle dark overlay for depth
|
|
- Category colors are consistent across the app
|
|
- Avoid gradients on tiles unless it is a premium moment
|
|
|
|
### 6. Text Colors
|
|
|
|
| Name | RGBA | Usage |
|
|
|------|------|-------|
|
|
| **Text** | `#ffffff` | Primary text, headings |
|
|
| **Text Secondary** | `rgba(255, 255, 255, 0.7)` | Secondary text, descriptions |
|
|
| **Text Tertiary** | `rgba(255, 255, 255, 0.5)` | Disabled, hints, captions |
|
|
|
|
### 7. Semantic Colors
|
|
|
|
For system feedback and states.
|
|
|
|
| Name | Hex | Usage |
|
|
|------|-----|-------|
|
|
| **Success** | `#2ECC71` | Yes responses, confirmations, positive states |
|
|
| **Warning** | `#F39C12` | Maybe responses, cautions |
|
|
| **Error** | `#E74C3C` | No responses, errors, destructive actions |
|
|
| **Muted** | `#6c757d` | Skip, disabled, inactive |
|
|
|
|
---
|
|
|
|
## Swipe Response Colors
|
|
|
|
Consistent across all swipe interactions:
|
|
|
|
| Response | Color | Hex/RGBA | Icon |
|
|
|----------|-------|----------|------|
|
|
| **Yes** | Success | `#2ECC71` / `rgba(46, 204, 113, 0.4)` | Checkmark |
|
|
| **No** | Error | `#E74C3C` / `rgba(231, 76, 60, 0.4)` | X |
|
|
| **Maybe** | Warning | `#F39C12` / `rgba(243, 156, 18, 0.4)` | Question mark |
|
|
| **Skip** | Muted | `#6c757d` / `rgba(108, 117, 125, 0.4)` | Forward arrow |
|
|
|
|
---
|
|
|
|
## Gradients
|
|
|
|
### Brand Gradients
|
|
|
|
```
|
|
Primary: #e1306c → #9b59b6 (Rose to Purple)
|
|
Primary Subtle: rgba(225, 48, 108, 0.8) → rgba(155, 89, 182, 0.8)
|
|
Primary Reverse: #9b59b6 → #e1306c (Purple to Rose)
|
|
```
|
|
|
|
### Premium Gradients
|
|
|
|
```
|
|
Premium Gold: #D4AF37 → #B8860B
|
|
Premium Rose: #E8A4AE → #D4919B
|
|
```
|
|
|
|
### Background Gradients
|
|
|
|
```
|
|
Background: #0e0e11 → #1f1417 → #0e0e11
|
|
Background Reverse: #0e0e11 → #1f1417 → #0e0e11
|
|
```
|
|
|
|
### Boutique Card Gradients
|
|
|
|
For pack cards and premium surfaces:
|
|
|
|
```
|
|
Boutique Rose: rgba(233, 69, 96, 0.4) → rgba(155, 89, 182, 0.4)
|
|
Boutique Purple: rgba(155, 89, 182, 0.4) → rgba(233, 69, 96, 0.4)
|
|
Boutique Dusty: rgba(183, 110, 121, 0.35) → rgba(139, 69, 87, 0.35)
|
|
Boutique Gold: rgba(212, 175, 55, 0.25) → rgba(184, 134, 11, 0.25)
|
|
Boutique Midnight: rgba(22, 33, 62, 0.8) → rgba(13, 13, 26, 0.8)
|
|
Boutique Amethyst: rgba(142, 68, 173, 0.4) → rgba(44, 62, 80, 0.4)
|
|
```
|
|
|
|
---
|
|
|
|
## Component Patterns
|
|
|
|
### Buttons
|
|
|
|
| Variant | Background | Text | Border |
|
|
|---------|------------|------|--------|
|
|
| **Primary** | Primary gradient | White | None |
|
|
| **Secondary** | Surface | White | Border |
|
|
| **Ghost** | Transparent | Primary | None |
|
|
| **Danger** | Error gradient | White | None |
|
|
| **Feature** | Feature color gradient | White | None |
|
|
|
|
### Cards
|
|
|
|
| Variant | Background | Border | Use Case |
|
|
|---------|------------|--------|----------|
|
|
| **Solid** | Surface | Border | Standard content |
|
|
| **Raised** | Surface | Border | Emphasized content + shadow |
|
|
| **Tinted** | Category color | None | Home tiles, feature promos |
|
|
|
|
### Inputs
|
|
|
|
| State | Border Color | Background |
|
|
|-------|--------------|------------|
|
|
| **Default** | Border | Surface |
|
|
| **Focused** | Primary | Surface |
|
|
| **Error** | Error | Surface |
|
|
| **Disabled** | Border | Surface (opacity 0.6) |
|
|
|
|
---
|
|
|
|
## Tab Bar
|
|
|
|
| Element | Color |
|
|
|---------|-------|
|
|
| **Background** | `#0e0e11` |
|
|
| **Top Border** | `rgba(225, 48, 108, 0.2)` (primary tint) |
|
|
| **Active Icon** | Primary `#e1306c` |
|
|
| **Inactive Icon** | Text secondary |
|
|
| **Badge** | Rose `#E8A4AE` |
|
|
|
|
## Play Button (Center Tab)
|
|
|
|
The main "play" button uses the primary brand gradient for maximum brand presence.
|
|
|
|
| Element | Color |
|
|
|---------|-------|
|
|
| **Glow** | Primary glow `rgba(225, 48, 108, 0.3)` |
|
|
| **Border** | `rgba(225, 48, 108, 0.4)` |
|
|
| **Highlight** | Primary → Secondary gradient |
|
|
| **Icon** | Primary `#e1306c` |
|
|
|
|
## Radial Menu
|
|
|
|
Feature-specific colors for quick action items:
|
|
|
|
| Item | Variant | Color |
|
|
|------|---------|-------|
|
|
| **Match** | Primary | `#e1306c` (core feature) |
|
|
| **Dares** | Gold | `#D4AF37` (premium/adventure) |
|
|
| **Quiz** | Rose | `#E8A4AE` (intimacy) |
|
|
|
|
---
|
|
|
|
## Feature Icons (Locked)
|
|
|
|
**IMPORTANT:** These icons are locked and must be used consistently across the entire app (radial menu, page headers, buttons, etc.).
|
|
|
|
| Feature | Icon Name | Ionicons | Description |
|
|
|---------|-----------|----------|-------------|
|
|
| **Swipe/Match** | `flame` | 🔥 | Fire/passion - the core swiping experience |
|
|
| **Dares** | `flash` | ⚡ | Lightning bolt - adventure, excitement, energy |
|
|
| **Quiz** | `help-circle` | ❓ | Question mark - discovery, questions about each other |
|
|
| **Matches** (tab) | `heart` | ❤️ | Love heart - connections made between partners |
|
|
| **Profile** | `person` | 👤 | Person - user settings and profile |
|
|
| **Home** | `home` | 🏠 | Home - main dashboard |
|
|
| **Packs** | `layers` | 📚 | Layers - question pack collections |
|
|
|
|
**Usage Rules:**
|
|
- Always use the exact icon name specified above
|
|
- Use the feature's designated color with its icon
|
|
- Never swap icons between features
|
|
- Radial menu, page headers, and any feature references must use the same icon
|
|
|
|
---
|
|
|
|
## Spacing Scale
|
|
|
|
| Token | Value | Usage |
|
|
|-------|-------|-------|
|
|
| `xs` | 4px | Tight spacing, icon gaps |
|
|
| `sm` | 8px | Small gaps, compact layouts |
|
|
| `md` | 16px | Standard spacing |
|
|
| `lg` | 24px | Section spacing |
|
|
| `xl` | 32px | Large gaps |
|
|
| `xxl` | 48px | Major sections |
|
|
|
|
---
|
|
|
|
## Border Radius Scale
|
|
|
|
| Token | Value | Usage |
|
|
|-------|-------|-------|
|
|
| `xs` | 4px | Small elements, tags |
|
|
| `sm` | 8px | Buttons, small cards |
|
|
| `md` | 12px | Standard cards |
|
|
| `lg` | 16px | Large cards |
|
|
| `xl` | 24px | Modal corners |
|
|
| `xxl` | 32px | Large containers |
|
|
| `full` | 9999px | Pills, circles |
|
|
|
|
---
|
|
|
|
## Typography
|
|
|
|
| Style | Size | Weight | Line Height | Usage |
|
|
|-------|------|--------|-------------|-------|
|
|
| `largeTitle` | 32px | Bold | 40px | Screen titles |
|
|
| `title1` | 28px | Bold | 34px | Section headers |
|
|
| `title2` | 24px | Bold | 30px | Card titles |
|
|
| `title3` | 20px | SemiBold | 26px | Subsection headers |
|
|
| `headline` | 17px | SemiBold | 22px | Emphasized body |
|
|
| `body` | 16px | Regular | 22px | Body text |
|
|
| `callout` | 15px | Regular | 20px | Secondary body |
|
|
| `subhead` | 14px | Regular | 20px | Supporting text |
|
|
| `footnote` | 13px | Regular | 18px | Captions |
|
|
| `caption1` | 12px | Regular | 16px | Small labels |
|
|
| `caption2` | 11px | Regular | 14px | Tiny text |
|
|
|
|
---
|
|
|
|
## Shadow Scale
|
|
|
|
| Style | Values | Usage |
|
|
|-------|--------|-------|
|
|
| `none` | — | Flat elements |
|
|
| `sm` | 0 2px 4px rgba(0,0,0,0.1) | Subtle lift |
|
|
| `md` | 0 4px 8px rgba(0,0,0,0.15) | Standard elevation |
|
|
| `lg` | 0 8px 16px rgba(0,0,0,0.2) | Prominent elevation |
|
|
| `xl` | 0 12px 24px rgba(0,0,0,0.25) | Maximum elevation |
|
|
| `glow` | 0 0 20px {color}Glow | Accent glow effect |
|
|
|
|
---
|
|
|
|
## Platform Considerations
|
|
|
|
### iOS
|
|
- Favor solid surfaces and shadows for depth
|
|
- Haptic feedback on interactions
|
|
- Native-feeling animations
|
|
|
|
### Android
|
|
- Match iOS surface colors and shadows
|
|
- Avoid blur and heavy transparency for performance
|
|
- Adjust shadow rendering as needed
|
|
|
|
---
|
|
|
|
## Do's and Don'ts
|
|
|
|
### Do
|
|
- Use the primary gradient for main CTAs
|
|
- Apply feature colors consistently within a feature
|
|
- Use solid surfaces with soft shadows for depth
|
|
- Keep text high-contrast (white on dark)
|
|
- Use gold/rose for premium moments
|
|
|
|
### Don't
|
|
- Mix feature colors within a single screen
|
|
- Use more than 2-3 accent colors per screen
|
|
- Apply the primary gradient to everything
|
|
- Use glass, blur, or frosted effects
|
|
- Use pure black (#000000) for backgrounds
|
|
|
|
---
|
|
|
|
## File Reference
|
|
|
|
**Theme Source:** `apps/mobile/src/theme/index.ts`
|
|
|
|
All colors, gradients, spacing, and typography are defined in the theme file. Always import from theme rather than hardcoding values.
|
|
|
|
```typescript
|
|
import { theme } from '@/theme';
|
|
|
|
// Usage
|
|
const styles = {
|
|
backgroundColor: theme.colors.background,
|
|
color: theme.colors.premium.gold,
|
|
};
|
|
```
|