# Design & Brand

Brand guide, Figma organization, design system, UI/UX research

# Brand Identity

# Brand Guide

# Drop — Brand Guide

**Product:** Drop fintech app
**Parent:** ALAI Holding AS
**Sist oppdatert:** 2026-02-12

---

## Brand Identity

### What is Drop?
Drop er en fintech-app for alle i Skandinavia. Tre kjernetjenester:
1. **Send penger** — internasjonale overføringer med 0,5% gebyr (vs WU 5-10%, Wise 0,7-1,5%)
2. **Betal med QR** — 1% merchant-gebyr (vs Vipps 1,75-2,75%)
3. **Bank Accounts (AISP)** — se saldo fra bankkontoer via Open Banking (fase 2+)

### Target Audience
- **Primary:** Alle i Skandinavia (Norge, Sverige, Danmark) som sender penger internasjonalt
- **Secondary:** Butikker/merchants som vil ta imot betaling med lavere gebyrer
- **Tertiary:** Alle som ønsker enklere, billigere betalinger i hverdagen
- **Markets:** Norge (launch), Sverige, Danmark (fase 2+)

### Brand Personality
**Modern. Trustworthy. Simple. Fair.**

Drop er for alle som vil ha bedre, billigere betalinger — uten å bli ranet av gebyrer. Tonen er:
- Ærlig og direkte (ingen fine print)
- Moderne og inkluderende (skandinavisk minimalisme)
- Selvtillit uten arroganse
- Enkel uten å være dum

### Positioning vs ALAI
| | ALAI (parent) | Drop (product) |
|---|---|---|
| Audience | B2B, enterprise | B2C, all Scandinavians |
| Tone | Corporate, premium | Modern, approachable |
| Theme | Dark mode | Light mode (dark mode phase 2) |
| Personality | Sophisticated, technical | Clean, trustworthy, Scandinavian |
| Colors | Black + neon green | Forest green → gold gradient |

---

## Color Palette

### Primary Colors
| Name | Hex | RGB | Usage |
|------|-----|-----|-------|
| Forest Green | `#0B6E35` | 11, 110, 53 | Primary brand, buttons, CTAs |
| Gold | `#D4A017` | 212, 160, 23 | Accent, highlights, badges |
| Off-White | `#FAFCF8` | 250, 252, 248 | Page background |
| White | `#FFFFFF` | 255, 255, 255 | Cards, elevated surfaces |

### Text Colors
| Name | Hex | RGB | Usage |
|------|-----|-----|-------|
| Heading Black | `#1A1A1A` | 26, 26, 26 | H1-H3, primary text |
| Body Gray | `#374151` | 55, 65, 81 | Body text, paragraphs |
| Muted Gray | `#6B7280` | 107, 114, 128 | Captions, labels, secondary text |
| Light Gray | `#9CA3AF` | 156, 163, 175 | Placeholder, disabled |

### Surface Colors
| Name | Hex | RGB | Usage |
|------|-----|-----|-------|
| Green Light | `#E8F5E9` | 232, 245, 233 | Light green tint, badges, tags |
| Gold Light | `#FFF8E1` | 255, 248, 225 | Gold tint, highlights |
| Card Border | `#E5E7EB` | 229, 231, 235 | Card borders, dividers |
| Section Gray | `#F3F4F6` | 243, 244, 246 | Alternate sections background |

### Semantic Colors
| Name | Hex | RGB | Usage |
|------|-----|-----|-------|
| Success | `#16A34A` | 22, 163, 74 | Transaction complete, success |
| Warning | `#D97706` | 217, 119, 6 | Pending, caution |
| Error | `#DC2626` | 220, 38, 38 | Failed, error states |
| Info | `#2563EB` | 37, 99, 235 | Informational, links |

### Color Rules
- Forest Green (#0B6E35) er ALLTID primary CTA-farge
- Gold (#D4A017) brukes sparsomt — badges, prisfordeler, highlight
- ALDRI bruk ALAI sin neon green (#00E5A0) i Drop-kontekst
- Bakgrunn er ALLTID lys (off-white eller white) — Drop er light-mode-first
- Dark mode: TBD (Fase 1)

---

## Typography

### Font Stack
```
Display/Headings: 'Fraunces', Georgia, 'Times New Roman', serif
Body/UI:          'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif
Mono (code/data): 'JetBrains Mono', 'Fira Code', 'Courier New', monospace
```

### Why These Fonts?
- **Fraunces** — Variable serif med "wonky" optical size. Gir karakter og varme. Skiller seg fra hver eneste fintech-app (som alle bruker sans-serif). Signaliserer: "vi er annerledes, vi er menneskelige."
- **DM Sans** — Clean geometric sans-serif. Lesbar på alle skjermstørrelser. Friendly uten å være lekent. God talllesbarhet (viktig for fintech).

### Font Hierarchy
| Level | Font | Weight | Size | Line Height | Tracking | Usage |
|-------|------|--------|------|-------------|----------|-------|
| Display | Fraunces | 700 | 56px | 1.1 | -0.02em | Hero headlines |
| H1 | Fraunces | 600 | 40px | 1.2 | -0.01em | Page titles |
| H2 | Fraunces | 600 | 32px | 1.3 | -0.005em | Section headers |
| H3 | Fraunces | 500 | 24px | 1.3 | normal | Sub-sections |
| H4 | DM Sans | 600 | 20px | 1.4 | normal | Card titles |
| Body Large | DM Sans | 400 | 18px | 1.7 | normal | Lead paragraphs |
| Body | DM Sans | 400 | 16px | 1.6 | normal | Default text |
| Body Small | DM Sans | 400 | 14px | 1.5 | normal | Secondary content |
| Caption | DM Sans | 500 | 12px | 1.4 | 0.02em | Labels, tags |
| Data | DM Sans | 600 | varies | 1.2 | -0.01em | Amounts, numbers |

### Mobile Typography
Skaler ned med `clamp()`:
- Display: `clamp(32px, 5vw, 56px)`
- H1: `clamp(28px, 4vw, 40px)`
- H2: `clamp(24px, 3.5vw, 32px)`
- Body: 16px minimum (aldri mindre på mobil)

---

## Logo

### Concept
Drop sin logo er **ordmerket "drop"** i lowercase Fraunces med **en grønn prikk** over "i"-posisjonen (inspirert av en vanndråpe / pengedråpe). Prikken representerer:
- En dråpe (drop) — pengene "drpper" hjem
- Enkel, gjenkjennelig mark
- Callback til ALAI sin grønne prikk (subtil parent-brand link)

### Logo Variants
| Variant | Usage |
|---------|-------|
| `drop` wordmark (green on white) | Primary — website, app, docs |
| `drop` wordmark (white on green) | Inverse — green backgrounds, splash |
| Green drop mark only | Icon — app icon, favicon, small spaces |
| `drop` wordmark (dark on white) | Print — when green doesn't print well |

### Logo Specs
- Font: Fraunces, weight 700
- Case: ALL lowercase ("drop", aldri "Drop" i logoen)
- Dot color: Forest Green (#0B6E35)
- Minimum size: wordmark 80px width, icon 24px
- Clear space: 1x height of "d" on all sides

### Don'ts
- Aldri bruk ALAI-logoen sammen med Drop-logoen
- Aldri endre grønnfargen i logoen
- Aldri bruk uppercase ("DROP" eller "Drop") i logokontekst
- Aldri legg skygge, gradient, eller glow på logoen
- Aldri roter eller forvreng

---

## Voice & Tone

### Språk
**Norsk** er primærspråk for all ekstern kommunikasjon. Bokmål. Tydelig og enkel norsk — ingen fremmedord når norske ord finnes.

### Tone
| Kontekst | Tone | Eksempel |
|----------|------|---------|
| Marketing | Moderne, direkte | "Send penger. Uten å betale for mye." |
| App UI | Klar, hjelpsom | "Pengene er sendt. Anslått levering: 2 timer." |
| Feil | Ærlig, ikke skummelt | "Noe gikk galt. Vi prøver igjen om litt." |
| Priser | Transparent | "0,5% gebyr. Ingen skjulte kostnader." |
| Onboarding | Enkel, steg-for-steg | "Verifiser deg med BankID. Tar 2 minutter." |

### Messaging Pillars
1. **Billigere** — "0,5% gebyr. Sammenlign selv."
2. **Enklere** — "Send penger på 30 sekunder."
3. **Tryggere** — "Regulert i Norge. Pengene dine er sikre."
4. **For alle** — "Laget for alle i Skandinavia."

### Words We Use
- "Send penger" (ikke "remittance" eller "overføring")
- "Betal i butikk" (ikke "QR-betaling" eller "point-of-sale")
- "Gebyr" (ikke "fee" eller "transaksjonskostnad")
- "Gratis" (når det er gratis)
- "Enklere" (det er personlig)

### Words We Don't Use
- "Disrupting" / "revolutionizing"
- "AI-powered" (selv om vi bruker det internt)
- "Blockchain" / "crypto"
- "Fintech" (det er vårt ord internt, ikke kundens)
- "Users" (de er "folk" eller "kunder")

---

## Imagery

### Photo Style
- Ekte mennesker, naturlige situasjoner
- Mangfold: alle skandinaviske bakgrunner, aldre, livssituasjoner
- Naturlig lys, ren skandinavisk estetikk
- Kontekst: butikker, kaféer, reiser, hverdagsliv
- ALDRI: stock-foto-smil, kontorfoto, tech-bro-estetikk

### Illustration Style
- Enkel, flat, vennlig
- Grønn + gold palett
- Avrundede former (ingen skarpe kanter)
- Ikon-stil: outlined, 2px stroke, rounded caps

### App UI Style
- Light theme default
- Generous whitespace
- Avrundede kort (12px border-radius)
- Subtile skygger (ingen harde kanter)
- Store, klare tall for beløp
- Grønn for positive actions (send, betal)
- Gold for highlights (sparing, fordeler)

---

## Relationship to ALAI

Drop er et produkt under ALAI Holding AS. I kundevendt kontekst:
- ALAI nevnes ALDRI i Drop sin UI eller marketing
- "Powered by ALAI" KAN brukes i footer, men er valgfritt
- Drop har sin egen merkevare, sin egen tone, sitt eget visuelt uttrykk
- Legal: "Drop er et produkt av ALAI Holding AS, org.nr 932 516 136"

---

*Sist oppdatert: 2026-02-12*
*Eier: John (technical), Alem (approval)*

# Figma & Design System

# Figma Organization Guide

# Drop Figma Organization Guide

**Task:** #936 completion - "Screenshot→Figma document-as-is 9-10h"
**Current Status:** 14 screenshots imported, organization/documentation incomplete
**Estimated Time:** 7-8 hours remaining work

---

## 1. Current State

**Figma File:** [Drop App Design](https://www.figma.com/design/P535qC6nAREfoTsMWfOqqi/Drop-App-Design)
**File Key:** `P535qC6nAREfoTsMWfOqqi`

**Imported Screenshots (14 total):**

**Fresh (Feb 15, 23:04):**
1. home.png
2. login.png
3. register.png
4. dashboard.png
5. accounts.png
6. cards.png
7. send.png
8. scan.png
9. transactions.png
10. notifications.png
11. profile.png

**Bonus (Feb 13):**
12. onboarding.png
13. history.png
14. merchant.png

---

## 2. Frame Organization Plan

### Step 1: Rename All Frames (30min)

**Naming Convention:** `{flow}-{number}-{screen-name}`

| Current Name | New Name | Category |
|---|---|---|
| home.png | `00-landing-home` | Public |
| login.png | `01-auth-login` | Auth Flow |
| register.png / onboarding.png | `02-auth-register` | Auth Flow |
| dashboard.png | `10-main-dashboard` | Main App |
| send.png | `11-main-send` | Main App |
| scan.png | `12-main-scan` | Main App |
| cards.png | `13-main-cards` | Main App |
| transactions.png / history.png | `14-main-transactions` | Main App |
| accounts.png | `20-profile-accounts` | Profile Flow |
| notifications.png | `21-profile-notifications` | Profile Flow |
| profile.png | `22-profile-settings` | Profile Flow |
| merchant.png | `99-error-merchant` | Error/Deprecated |

**Note:** merchant.png is an error page (not in architecture), mark for removal.

### Step 2: Arrange Layout (1h)

**Page Structure:**

```
┌─ PUBLIC ──────────────────────┐
│ 00-landing-home               │
└───────────────────────────────┘

┌─ AUTH FLOW ───────────────────┐
│ 01-auth-login                 │
│ 02-auth-register              │
└───────────────────────────────┘

┌─ MAIN APP ────────────────────┐
│ 10-main-dashboard             │
│ 11-main-send                  │
│ 12-main-scan                  │
│ 13-main-cards (FUTURE)        │
│ 14-main-transactions          │
└───────────────────────────────┘

┌─ PROFILE FLOW ────────────────┐
│ 20-profile-accounts           │
│ 21-profile-notifications      │
│ 22-profile-settings           │
└───────────────────────────────┘

┌─ DEPRECATED ──────────────────┐
│ 99-error-merchant (DELETE)    │
└───────────────────────────────┘
```

**Layout:** 3 columns, 12 rows, 240px spacing between frames

### Step 3: Add Frame Headers (30min)

For each section, add text frame above:

- **"PUBLIC"** — 48px Fraunces Bold, Forest Green (#0B6E35)
- **"AUTH FLOW"** — Landing → Login → Register
- **"MAIN APP"** — Core features (Dashboard, Send, Scan, Cards, Transactions)
- **"PROFILE FLOW"** — User settings and preferences
- **"DEPRECATED"** — Screens to remove (red text #EF4444)

### Step 4: Group by Flow (15min)

Create Figma groups:
- `Group: Public` — Frame 00
- `Group: Auth` — Frames 01-02
- `Group: Main App` — Frames 10-14
- `Group: Profile` — Frames 20-22
- `Group: Deprecated` — Frame 99

---

## 3. Annotations & Documentation (2h)

### Add Text Annotations in Figma

For each frame, add sticky note with:

1. **Screen Name** — User-facing name
2. **Route** — URL path
3. **Access** — Public / Auth required
4. **Links To** — Which screens this connects to
5. **Status** — ✅ Built | 🚧 WIP | ❌ Missing

**Example Annotation (Login):**
```
SCREEN: Login
ROUTE: /login
ACCESS: Public
LINKS TO:
  → Dashboard (on login success)
  → Register (via "Opprett konto")
STATUS: ✅ Built (rebrand complete)
NOTES: Email + Password + BankID/Vipps options
```

### Complete Annotation Reference

| Frame | Screen | Route | Links To | Status |
|---|---|---|---|---|
| 00 | Landing | `/` | Login, Register | ❌ Missing design |
| 01 | Login | `/login` | Dashboard, Register | ✅ Built |
| 02 | Register | `/register` | Login, Dashboard | ✅ Built (route mismatch: app uses /onboarding) |
| 10 | Dashboard | `/dashboard` | Send, Scan, Transactions, Profile | ✅ Built |
| 11 | Send | `/send` | Dashboard, Scan | ✅ Built |
| 12 | Scan | `/scan` | Dashboard, Send | ✅ Built |
| 13 | Cards | `/cards` | Dashboard | ✅ Built (FUTURE - placeholder) |
| 14 | Transactions | `/transactions` | Dashboard | ✅ Built (route mismatch: app uses /history) |
| 20 | Accounts | `/accounts` | Profile, Dashboard | ✅ Built |
| 21 | Notifications | `/notifications` | Profile, Dashboard | ❌ Missing implementation |
| 22 | Profile | `/profile` | Accounts, Notifications, Settings, Dashboard | ✅ Built |
| 99 | Merchant | `/merchant` | — | ❌ Error page (remove from app) |

---

## 4. Design Token Extraction (2h)

### Extract from Figma Variables

Run automated extraction:

```bash
cd /Users/makinja/ALAI/products/Drop
node ~/system/tools/figma-extract.js extract-tokens P535qC6nAREfoTsMWfOqqi > design/design-tokens-extracted.json
node ~/system/tools/figma-token-sync.js P535qC6nAREfoTsMWfOqqi --format all --output design/tokens/
```

### Create Style Guide Page in Figma

Add new page "Design System Reference" with:

**Colors:**
- Forest Green: #0B6E35 (Primary, buttons, links)
- Gold: #D4A017 (Accent, logo dot, highlights)
- Off-White: #FAFCF8 (Background)
- Charcoal: #2C2C2C (Text primary)
- Gray: #6B7280 (Text secondary)

**Typography:**
- Display: Fraunces 700 (brand, headings)
- Body: DM Sans 400/500/600 (UI, content)

**Spacing:**
- 4px base unit
- Scale: 4, 8, 12, 16, 24, 32, 48, 64, 96

**Effects:**
- Drop Shadow: 0 4px 6px rgba(0,0,0,0.1)
- Card Shadow: 0 2px 8px rgba(0,0,0,0.08)

---

## 5. Missing Screens (Create New)

Per gap-analysis-2026-02-14.md:

### Landing Page (`/`) — HIGH PRIORITY
- **Status:** ❌ Missing from Figma AND app
- **Action:** Create Figma design first, then implement
- **Reference:** Drop marketing site, public-facing

### Notifications (`/notifications`) — MEDIUM PRIORITY
- **Status:** Screenshot exists, but implementation missing
- **Action:** Verify screenshot matches spec, then build

---

## 6. Route Corrections

**Current vs Architecture mismatches:**

| App Route | Architecture Route | Action |
|---|---|---|
| `/onboarding` | `/register` | Rename route in app code |
| `/history` | `/transactions` | Rename route in app code |

---

## 7. Execution Checklist

- [ ] **30min:** Rename all 14 frames per naming convention
- [ ] **1h:** Arrange frames in grid layout (Public → Auth → Main → Profile → Deprecated)
- [ ] **30min:** Add section headers (text frames)
- [ ] **15min:** Group frames by flow
- [ ] **2h:** Add annotations for each screen (sticky notes)
- [ ] **2h:** Extract design tokens + create style guide page
- [ ] **1h:** Create missing Landing page design
- [ ] **30min:** Verify Notifications screenshot vs spec

**Total:** ~7.25 hours

---

## 8. Acceptance Criteria

Task #936 is complete when:

✅ All 14 screenshot frames renamed with clear convention
✅ Frames arranged in logical user flow layout
✅ Section headers added (Public, Auth, Main, Profile)
✅ All frames grouped by category
✅ Each frame has annotation (route, links, status)
✅ Design tokens extracted to `design/tokens/`
✅ Style guide page created in Figma
✅ Missing Landing page design created
✅ Figma file = comprehensive reference document for dev team

---

**Next:** Execute this plan in Figma Desktop, or delegate to designer.

# Design System Reference

# Drop Design System Reference

Source of truth for all builders. Based on Alem's approved Stitch design.

## Colors

| Token | Hex | Usage |
|-------|-----|-------|
| Primary | `#0B6E35` | Buttons, links, active states, brand |
| Primary hover | `#095C2C` | Button hover |
| Accent/Gold | `#D4A017` | Badges, highlights, gold touches |
| Page bg | `#EEEEEE` | Full-page background |
| Card bg | `#FFFFFF` | Cards, elevated surfaces |
| Off-white | `#FAFCF8` | Alternative light bg |
| Text primary | `#1A1A1A` | Headings, important text |
| Text body | `#374151` | Body paragraphs |
| Text muted | `#6B7280` | Labels, secondary text |
| Text light | `#9CA3AF` | Placeholders, captions, dividers |
| Border | `#E5E7EB` | Card borders, input borders, dividers |
| Input bg | `#F9FAFB` | Input field backgrounds |
| Error | `#EF4444` | Error text |
| Error bg | `#EF4444/10` | Error message background |
| Success | `#16A34A` | Success states |
| Warning | `#D97706` | Pending states |

## Typography

- **Brand/Display:** `font-[family-name:var(--font-fraunces)]` — serif, for "drop" wordmark and hero text
- **Body/UI:** Default (DM Sans loaded in layout.tsx) — all UI text
- **Sizes:** text-3xl (brand), text-xl (page title), text-base (body), text-sm (form labels, body small), text-xs (captions, links)

## Component Patterns (Tailwind classes)

### Page Layout
```
<div className="flex min-h-screen flex-col items-center justify-center bg-[#EEEEEE] px-6">
  <div className="w-full max-w-sm space-y-6">
    {/* content */}
  </div>
</div>
```

For app pages WITH bottom nav:
```
<div className="flex min-h-screen flex-col bg-[#EEEEEE]">
  <div className="flex-1 px-6 pt-6 pb-24">
    <div className="mx-auto w-full max-w-sm space-y-6">
      {/* content */}
    </div>
  </div>
  <BottomNav />
</div>
```

### Card
```
<div className="rounded-2xl bg-white p-6 shadow-sm">
```

### Buttons
```
// Primary
<Button className="h-12 w-full rounded-xl bg-[#0B6E35] text-white text-sm font-semibold hover:bg-[#095C2C] transition-colors">

// Secondary
<button className="flex h-12 flex-1 items-center justify-center gap-2 rounded-xl border border-[#E5E7EB] bg-white text-sm font-medium text-[#1A1A1A] transition-colors hover:bg-[#F9FAFB]">
```

### Inputs
```
<div className="relative">
  <Icon className="absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-[#6B7280]" />
  <input className="h-11 w-full rounded-lg border border-[#E5E7EB] bg-[#F9FAFB] pl-10 pr-3 text-sm outline-none transition-colors focus:border-[#0B6E35] focus:ring-1 focus:ring-[#0B6E35]" />
</div>
```

### Labels
```
<label className="mb-1.5 block text-sm font-medium text-[#1A1A1A]">
```

### Error Message
```
<p className="text-sm text-[#EF4444] bg-[#EF4444]/10 rounded-md p-2">{error}</p>
```

### Links
```
<Link className="font-semibold text-[#0B6E35] hover:underline">
// or for small links:
<Link className="text-xs font-medium text-[#0B6E35] hover:underline">
```

### Section Divider
```
<div className="flex items-center gap-3">
  <div className="h-px flex-1 bg-[#D1D5DB]" />
  <span className="text-xs font-medium tracking-wide text-[#9CA3AF]">OR</span>
  <div className="h-px flex-1 bg-[#D1D5DB]" />
</div>
```

### Page Header (for app pages)
```
<div className="flex items-center justify-between">
  <h1 className="text-xl font-bold text-[#1A1A1A]">Page Title</h1>
  <button className="rounded-lg p-2 hover:bg-white/80">
    <Settings className="h-5 w-5 text-[#6B7280]" />
  </button>
</div>
```

### Badge
```
<span className="rounded-full bg-[#0B6E35]/10 px-3 py-1 text-xs font-medium text-[#0B6E35]">
```

### Amount Display
```
<span className="text-2xl font-bold text-[#1A1A1A]">kr 12 500,00</span>
```

## Logo
```tsx
<Image src="/drop-icon.png" alt="Drop" width={64} height={64} />
<h1 className="font-[family-name:var(--font-fraunces)] text-3xl font-bold text-[#1A1A1A]">drop</h1>
<p className="text-sm italic text-[#0B6E35]">Send money. Simply.</p>
```

## Icons
- Library: `lucide-react`
- Default size: `h-5 w-5` (nav, headers) or `h-4 w-4` (inline, inputs)
- Default color: `text-[#6B7280]` muted, `text-[#1A1A1A]` primary

## Bottom Navigation
5 tabs: Home, Send, Scan (center), Cards, Profile
- Active: `text-[#0B6E35]` with filled icon
- Inactive: `text-[#9CA3AF]` with outline icon
- Component: `@/components/bottom-nav`

## Landing Page (HTML/CSS)
Same visual language but plain HTML:
- Font: Inter or DM Sans via Google Fonts CDN
- Same color palette as CSS variables
- Cards: `border-radius: 16px; background: white; box-shadow: 0 2px 8px rgba(0,0,0,0.06); padding: 24px;`
- Buttons: `border-radius: 12px; height: 48px; background: #0B6E35; color: white;`
- Max-width: 1200px for desktop, responsive down to 375px

# Design Research Summary

# Drop Figma Task #936 — Research Summary

**Date:** 2026-02-16 06:48
**Researcher:** John (AI Director)
**Task:** Complete understanding of "Screenshot→Figma document-as-is 9-10h" scope

---

## Problem Statement

Task #936 was prematurely marked "done" after importing 14 screenshots to Figma. Alem said:

> "Halo ba - drop rebrand nije gotov imas slike u Figmi jel to mislis da je task done?"
> (Translation: "Hello - drop rebrand isn't done, you have images in Figma, you think that's task done?")

> "Idi bre u pi2 idi nadji vezane taskove i nemoj vise takva pitanja da cujem."
> (Translation: "Go find related tasks and don't let me hear such questions anymore.")

**Root cause:** I thought "screenshots in Figma" = done. Reality: "Screenshot→Figma document-as-is 9-10h" has 9-10 hours of scope, not just 2 hours.

---

## Research Conducted

### 1. Task Investigation
- Read full task #936 description
- Analyzed gap-analysis-2026-02-14.md
- Read rebrand-verification.md
- Checked PIPELINE.md status
- Searched MC for ALL Drop-related tasks

### 2. Figma Ecosystem Research
- Read figma-knowledge-base.md (150+ sources)
- Analyzed Figma REST API capabilities
- Tested figma-extract.js tools
- Discovered API limitations (READ-ONLY for frame manipulation)

### 3. Scope Definition
Reverse-engineered what "Screenshot→Figma document-as-is 9-10h" actually means:

| Phase | Work | Time | Status |
|---|---|---|---|
| Capture screenshots | Playwright script, 11 fresh + 3 bonus screens | 2h | ✅ DONE |
| Import to Figma | Bulk Image Importer plugin | 0.5h | ✅ DONE |
| Organize frames | Rename, arrange, group | 3h | ❌ BLOCKED |
| Add annotations | Sticky notes per frame | 2h | ❌ BLOCKED |
| Extract tokens | Colors, typography, spacing | 2h | ⏳ API LIMITED |
| Create style guide | Design system page | 0.5h | ❌ BLOCKED |
| **TOTAL** | | **10h** | **25% done** |

---

## Key Findings

### Finding 1: Figma REST API is READ-ONLY
**Issue:** Cannot rename frames, rearrange layouts, or add annotations via REST API.
**Impact:** 5 hours of manual work required.
**Solutions:**
- Manual work in Figma Desktop (fastest with guide)
- Figma Plugin API development (40% reliability, prototype)
- Delegate to designer with Figma access

### Finding 2: Task Scope Misunderstood
**What I thought:** Import screenshots → done.
**What it actually means:**
1. Capture (2h) ✅
2. Import (0.5h) ✅
3. **Organize** (3h) ❌ — rename frames, arrange layout, group by flow
4. **Annotate** (2h) ❌ — add route, links, status notes
5. **Extract** (2h) ⏳ — pull design tokens via API
6. **Document** (0.5h) ❌ — create style guide page

### Finding 3: Related Work Discovered
**Missing screens:**
- Landing page (`/`) — HIGH priority, not in Figma OR app
- Notifications (`/notifications`) — MEDIUM, screenshot exists but not implemented

**Route corrections needed:**
- `/onboarding` → rename to `/register`
- `/history` → rename to `/transactions`

**Deprecated screens:**
- `/merchant` — error page, remove from app

### Finding 4: No Other Drop Design Tasks
Searched MC comprehensively:
- Task #936 (Figma designs) — this task
- Task #830 (under-18 users) — separate research, unrelated

No other Figma/design tasks found.

---

## Deliverables Created

### Documentation
1. **FIGMA-ORGANIZATION-GUIDE.md** — 8-section comprehensive manual (naming, layout, annotations, tokens, missing screens, execution checklist)
2. **FIGMA-QUICK-ACTION-PLAN.md** — Simplified step-by-step guide for rapid execution (5 phases, 7h total)
3. **TASK-936-STATUS.md** — Full status report with blockers, progress, completion criteria
4. **RESEARCH-SUMMARY.md** — This document

### Scripts & Assets
5. **screenshot-all.ts** — Automated Playwright screenshot capture
6. **14 PNG screenshots** — 2x retina full-page captures in `/design/screenshots/`
7. **Figma file** — Imported frames (unorganized): https://www.figma.com/design/P535qC6nAREfoTsMWfOqqi/Drop-App-Design

---

## Recommendations

### Immediate Actions
**Decision required:** Who will execute the 5h of manual Figma work?

**Option A: Alem (Recommended)**
- **Time:** 5 hours
- **Guide:** FIGMA-QUICK-ACTION-PLAN.md (step-by-step)
- **Pro:** Full control, immediate execution
- **Con:** Requires Alem's time

**Option B: Delegate to Designer**
- **Time:** 5 hours (designer) + coordination
- **Guide:** FIGMA-ORGANIZATION-GUIDE.md (comprehensive)
- **Pro:** Alem freed up
- **Con:** Need to find/hire designer

**Option C: Skip Organization**
- **Time:** 0 hours
- **Result:** Screenshots remain unorganized
- **Pro:** Task "done" as-is
- **Con:** Figma file not useful as reference document

### After Decision
If Option A or B chosen:
1. Execute manual work (5h) using guides
2. Run automated token extraction (2h) when API rate limit clears
3. Mark task #936 complete

If Option C chosen:
1. Mark task #936 "done with caveat"
2. Create new task "Figma organization" if needed later

---

## Lessons Learned

### Lesson 1: Task Scope Verification
**Mistake:** Assumed "screenshots in Figma" meant task complete.
**Fix:** Always verify acceptance criteria BEFORE claiming "done".
**Apply:** Check if "Screenshot→Figma document-as-is 9-10h" means just import OR full organization.

### Lesson 2: Tool Limitations Research
**Success:** Discovered Figma REST API limitations BEFORE attempting automation.
**Why important:** Prevented wasted time trying to automate manual-only work.
**Apply:** Always check tool capabilities before planning automation.

### Lesson 3: Comprehensive Guide Creation
**Success:** Created guides detailed enough for Alem to execute WITHOUT asking questions.
**Why important:** Alem explicitly said "nemoj vise takva pitanja" (no more questions).
**Apply:** When blocked, create actionable guides for others to execute.

---

## Next Steps

**For Alem:**
1. Read FIGMA-QUICK-ACTION-PLAN.md
2. Decide: Execute myself / Delegate / Skip
3. If execute: 5h in Figma Desktop following guide
4. Notify John when complete for token extraction

**For John:**
1. Wait for Alem decision
2. Extract design tokens when API rate limit clears
3. Update task #936 status based on decision
4. Move to next high-priority task (#277, #901)

---

**Status:** Research complete. Task paused pending Alem decision.
**Files:** All guides in `/Users/makinja/ALAI/products/Drop/design/`
**MC Task:** #936 paused with reason "blocked on manual Figma organization decision"

# UI/UX

# UI Redesign Proposal

# Drop UI/UX Redesign Proposal

> **Note:** Originally written as "FontelePay" with Flutter stack. Product has been rebranded to **Drop** using Next.js 16 + React 19 + Tailwind v4 + shadcn/ui. Design direction chosen: Forest Green (#0B6E35) + Gold (#D4A017) with Fraunces (brand) + DM Sans (body) typography. Retained for historical research reference.

**Date:** 2026-02-05
**Status:** Superseded — see brand/brand-guide.md for current design system

---

## Executive Summary

Drop (originally FontelePay) needs a distinctive visual identity to compete with established neobanks (Revolut, N26, Monzo, Wise). This proposal outlines three design directions, recommended component library, color palettes, typography, and implementation roadmap.

**Core Problem:** Generic Tailwind-template aesthetics lack brand differentiation.

**Solution:** Custom design system with distinctive branding, purposeful micro-interactions, and mobile-first components.

---

## 1. Competitor Analysis

### Revolut
- **Colors:** Shark (#191C1F), Cornflower Blue (#7F84F6), White (#FFFFFF)
- **Style:** Dark, professional, feature-dense
- **Strengths:** Multi-currency dashboard, real-time animations, card management
- **Typography:** Clean sans-serif, high contrast
- **Micro-interactions:** Heavy use of motion for feedback

### N26
- **Colors:** Cod Gray (#121212), Keppel Teal (#36A18B), White (#FFFFFF)
- **Style:** Minimal, card-based layouts, dark mode focused
- **Strengths:** Auto-categorized transactions, streamlined UI
- **Typography:** Geometric sans-serif, spacious
- **Micro-interactions:** Subtle, purposeful transitions

### Monzo
- **Colors:** Hot Coral (#F59AA4), Navy (#14233C), White (#FFFFFF)
- **Style:** Warm, approachable, playful
- **Strengths:** Savings pots, friendly copy, bold illustrations
- **Typography:** Rounded, friendly typefaces
- **Micro-interactions:** Celebratory animations for milestones

### Wise
- **Colors:** Neon Green (#9FE870), Deep Navy (#163300), White (#FFFFFF)
- **Style:** Fresh, transparent, eco-conscious feel
- **Strengths:** Currency conversion animations, clear pricing
- **Typography:** Modern grotesque, high legibility
- **Micro-interactions:** Progress indicators, conversion animations

---

## 2. Three Design Direction Options

### Option A: "Trust Vault" - Professional & Secure

**Concept:** Establish FontelePay as the secure, trustworthy choice for EU banking.

**Visual Identity:**
- Deep navy backgrounds with gold/amber accents
- Solid, stable geometry (squares, strong lines)
- Subtle gradients for depth
- Premium feel without being cold

**Color Palette:**
| Role | Name | Hex | Usage |
|------|------|-----|-------|
| Primary | Deep Navy | #0A1628 | Backgrounds, headers |
| Secondary | Royal Blue | #1E40AF | Interactive elements |
| Accent | Amber Gold | #F59E0B | CTAs, highlights |
| Success | Emerald | #10B981 | Positive states |
| Error | Rose | #F43F5E | Errors, warnings |
| Surface | Slate 50 | #F8FAFC | Cards, surfaces |
| Text Primary | Slate 900 | #0F172A | Main text |
| Text Secondary | Slate 500 | #64748B | Secondary text |

**Dark Mode Palette:**
| Role | Hex |
|------|-----|
| Background | #020617 |
| Surface | #0F172A |
| Text Primary | #F1F5F9 |
| Text Secondary | #94A3B8 |

**Typography:**
- Headings: **Inter Display** (700, 600)
- Body: **Inter** (400, 500)
- Numbers: **Inter** with tabular figures

**Best For:** Users who prioritize security and professional appearance.

---

### Option B: "Fresh Finance" - Modern & Approachable

**Concept:** Position FontelePay as the friendly, modern European alternative.

**Visual Identity:**
- Clean whites with vibrant teal/cyan accents
- Rounded corners, soft shadows
- Playful illustrations for empty states
- Gradient CTAs for energy

**Color Palette:**
| Role | Name | Hex | Usage |
|------|------|-----|-------|
| Primary | Teal | #0D9488 | Brand color, headers |
| Secondary | Cyan | #06B6D4 | Secondary actions |
| Accent | Coral | #FB7185 | Notifications, highlights |
| Success | Green | #22C55E | Positive states |
| Error | Red | #EF4444 | Errors |
| Surface | White | #FFFFFF | Cards, backgrounds |
| Background | Gray 50 | #F9FAFB | Page backgrounds |
| Text Primary | Gray 900 | #111827 | Main text |
| Text Secondary | Gray 500 | #6B7280 | Secondary text |

**Dark Mode Palette:**
| Role | Hex |
|------|-----|
| Background | #0F0F0F |
| Surface | #1A1A1A |
| Primary | #2DD4BF |
| Text Primary | #F3F4F6 |

**Typography:**
- Headings: **Plus Jakarta Sans** (700, 600)
- Body: **Inter** (400, 500)
- Accent: **Plus Jakarta Sans** (500)

**Best For:** Younger demographics, first-time banking app users.

---

### Option C: "Nordic Minimal" - Clean & Sophisticated

**Concept:** Scandinavian-inspired minimalism with bold accent color.

**Visual Identity:**
- Stark white backgrounds with single bold accent
- Maximum negative space
- Monochromatic with one signature color
- Typography-focused hierarchy

**Color Palette:**
| Role | Name | Hex | Usage |
|------|------|-----|-------|
| Primary | Electric Violet | #7C3AED | Brand, CTAs |
| Secondary | Violet Light | #A78BFA | Secondary actions |
| Background | Pure White | #FFFFFF | Main background |
| Surface | Gray 100 | #F3F4F6 | Cards |
| Border | Gray 200 | #E5E7EB | Dividers |
| Text Primary | Gray 950 | #030712 | Main text |
| Text Secondary | Gray 400 | #9CA3AF | Secondary text |
| Success | Emerald | #059669 | Positive |
| Error | Rose | #E11D48 | Negative |

**Dark Mode Palette:**
| Role | Hex |
|------|-----|
| Background | #09090B |
| Surface | #18181B |
| Primary | #A78BFA |
| Text Primary | #FAFAFA |

**Typography:**
- Headings: **Satoshi** (700, 500)
- Body: **Inter** (400, 500)
- Numbers: **SF Mono** or **JetBrains Mono** (for financial data)

**Best For:** Design-conscious users, premium positioning.

---

## 3. Component Library Recommendation

### Primary: Flutter Material 3 + Custom Design System

**Why Flutter Material 3:**
- Native to Flutter stack (already chosen)
- Built-in accessibility (WCAG compliant)
- Dynamic color theming
- Adaptive components for iOS/Android
- Active development by Google

**Implementation Approach:**

```dart
// Theme Configuration Example
ThemeData fontelepayTheme = ThemeData(
  useMaterial3: true,
  colorScheme: ColorScheme.fromSeed(
    seedColor: Color(0xFF7C3AED), // Primary brand color
    brightness: Brightness.light,
  ),
  textTheme: GoogleFonts.interTextTheme(),
);
```

### Recommended Flutter Packages

| Package | Purpose | Version |
|---------|---------|---------|
| `flutter_bloc` | State management | 8.x |
| `go_router` | Navigation, deep linking | 14.x |
| `dio` | HTTP client | 5.x |
| `lottie` | Micro-interactions | 3.x |
| `flutter_animate` | Declarative animations | 4.x |
| `google_fonts` | Typography | 6.x |
| `flutter_svg` | Vector icons | 2.x |
| `shimmer` | Loading states | 3.x |

### Component Hierarchy

```
FontelePay Design System
├── Atoms (smallest units)
│   ├── Colors
│   ├── Typography
│   ├── Icons
│   └── Spacing
├── Molecules (simple components)
│   ├── Button (primary, secondary, ghost)
│   ├── Input (text, PIN, amount)
│   ├── Card (account, transaction)
│   └── Badge (status, notification)
├── Organisms (complex components)
│   ├── AccountCard (balance, IBAN, actions)
│   ├── TransactionList (with filters)
│   ├── PaymentForm (recipient, amount, confirm)
│   └── CardWidget (virtual card display)
└── Templates (page layouts)
    ├── DashboardLayout
    ├── OnboardingLayout
    └── TransactionDetailLayout
```

---

## 4. Typography Recommendation

### Primary Font: Inter

**Why Inter:**
- Optimized for UI at small sizes
- Tall x-height for screen legibility
- Tabular figures for financial data
- Free (Google Fonts)
- Variable font support
- Best non-proprietary alternative to SF Pro

**Type Scale (Material 3):**

| Style | Size | Weight | Line Height | Usage |
|-------|------|--------|-------------|-------|
| Display Large | 57px | 400 | 64px | Hero numbers |
| Display Medium | 45px | 400 | 52px | Balance display |
| Headline Large | 32px | 600 | 40px | Screen titles |
| Headline Medium | 28px | 600 | 36px | Section headers |
| Title Large | 22px | 500 | 28px | Card titles |
| Title Medium | 16px | 500 | 24px | Subtitles |
| Body Large | 16px | 400 | 24px | Main content |
| Body Medium | 14px | 400 | 20px | Secondary content |
| Label Large | 14px | 500 | 20px | Buttons |
| Label Medium | 12px | 500 | 16px | Captions |

### Alternative Pairing

**Premium Option:** Plus Jakarta Sans (headings) + Inter (body)
- Plus Jakarta Sans has more personality
- Creates visual hierarchy naturally
- Both available on Google Fonts

---

## 5. Micro-Interactions & Animation

### Animation Principles

1. **Duration Guidelines:**
   - Micro-interactions: 50-200ms
   - Page transitions: 200-400ms
   - Complex animations: 400-600ms

2. **Easing:**
   - Standard: `Curves.easeOutCubic`
   - Enter: `Curves.decelerate`
   - Exit: `Curves.accelerate`

### Essential Animations

| Component | Animation | Duration | Trigger |
|-----------|-----------|----------|---------|
| Button Press | Scale down 0.95 | 100ms | onTapDown |
| Transaction Success | Checkmark Lottie | 600ms | onComplete |
| Card Flip | 3D rotation | 400ms | onTap |
| Balance Update | Number morph | 300ms | onValueChange |
| Pull to Refresh | Custom Lottie | 800ms | onRefresh |
| Skeleton Loading | Shimmer | Loop | onLoading |
| Tab Switch | Fade + slide | 200ms | onSelect |

### Lottie Animations to Create

1. **Success Checkmark** - Payment confirmed
2. **Loading Spinner** - Processing state
3. **Card Issuing** - Virtual card generation
4. **Money Transfer** - Send/receive animation
5. **Empty State** - No transactions illustration
6. **Error State** - Failed transaction
7. **Confetti** - First transaction celebration

---

## 6. Component Redesign Priority

### P0 - Critical (Week 1-2)

| Component | Current Issue | Redesign Focus |
|-----------|---------------|----------------|
| **Primary Button** | Generic Tailwind | Custom shape, gradient option, haptic feedback |
| **Input Field** | Basic styling | Floating labels, validation states, currency formatting |
| **Balance Card** | Flat, boring | Glassmorphism, subtle animation, gradient background |
| **Transaction Item** | List-like | Card approach, merchant icons, category colors |

### P1 - Important (Week 3-4)

| Component | Current Issue | Redesign Focus |
|-----------|---------------|----------------|
| **Navigation Bar** | Standard tab bar | Custom icons, animated indicators |
| **Card Widget** | Static display | 3D flip, Apple/Google Pay button integration |
| **Amount Input** | Basic number | Custom keypad, currency selector, max button |
| **Profile Avatar** | Circle image | Gradient border, online indicator |

### P2 - Enhancement (Week 5-6)

| Component | Current Issue | Redesign Focus |
|-----------|---------------|----------------|
| **Charts** | Basic lines | Animated draw, touch interaction, gradients |
| **Category Pills** | Plain buttons | Icons, color coding, selection animation |
| **Empty States** | Text only | Lottie illustrations, CTAs |
| **Notifications** | System default | Custom in-app notifications |

---

## 7. Dark Mode Implementation

### Design Principles

1. **Not just inverted colors** - Redesign each surface layer
2. **Reduced contrast** - Use off-white (#F1F5F9) instead of pure white
3. **Elevated surfaces = lighter** - Higher elevation = lighter gray
4. **Desaturated accent colors** - Reduce saturation 10-20% for dark mode
5. **Test contrast ratios** - Minimum 4.5:1 for text (WCAG AA)

### Surface Elevation (Dark Mode)

| Elevation | Background | Use Case |
|-----------|------------|----------|
| 0 | #09090B | Page background |
| 1 | #18181B | Cards, inputs |
| 2 | #27272A | Modals, dropdowns |
| 3 | #3F3F46 | Hover states |

### Implementation

```dart
ColorScheme darkScheme = ColorScheme.fromSeed(
  seedColor: Color(0xFF7C3AED),
  brightness: Brightness.dark,
  surface: Color(0xFF18181B),
  onSurface: Color(0xFFF1F5F9),
);
```

---

## 8. Accessibility Requirements

### WCAG 2.1 AA Compliance

| Requirement | Implementation |
|-------------|----------------|
| Color Contrast | Minimum 4.5:1 (text), 3:1 (large text) |
| Touch Targets | Minimum 48x48dp |
| Focus States | Visible ring on all interactive elements |
| Screen Reader | Semantic labels on all widgets |
| Dynamic Type | Support system font scaling |
| Reduce Motion | Respect `MediaQuery.disableAnimations` |

### Testing Tools

- Flutter `Accessibility Scanner`
- Contrast ratio calculator
- VoiceOver/TalkBack manual testing

---

## 9. Implementation Roadmap

### Phase 1: Foundation (Week 1-2)
- [ ] Define final color palette (choose Option A/B/C)
- [ ] Configure Flutter Material 3 theme
- [ ] Set up typography system
- [ ] Create color tokens file
- [ ] Implement dark mode toggle

### Phase 2: Core Components (Week 3-4)
- [ ] Redesign Button component (all variants)
- [ ] Redesign Input component (text, PIN, amount)
- [ ] Redesign Card components (balance, transaction)
- [ ] Implement loading states (shimmer, skeleton)
- [ ] Add Lottie animation package

### Phase 3: Feature Components (Week 5-6)
- [ ] Build AccountCard with animations
- [ ] Build TransactionList with pull-to-refresh
- [ ] Build PaymentForm with amount keyboard
- [ ] Build CardWidget with 3D flip

### Phase 4: Polish (Week 7-8)
- [ ] Create Lottie animations
- [ ] Implement micro-interactions
- [ ] Accessibility audit
- [ ] Dark mode testing
- [ ] Performance optimization

---

## 10. My Recommendation

**Go with Option C: "Nordic Minimal"**

**Reasons:**
1. **Differentiation** - Most neobanks use dark (Revolut, N26) or warm (Monzo) palettes. Electric violet is distinctive.
2. **Scalability** - Minimal design ages better and accommodates new features easily.
3. **Trust** - Clean design signals competence and transparency.
4. **Dark Mode** - Minimal palettes translate better to dark mode.
5. **EU Market** - Scandinavian design resonates well with European users.

**Typography:** Inter + Satoshi pairing for personality without sacrificing legibility.

**Implementation:** Flutter Material 3 as foundation, custom component library on top.

---

## Sources

### Competitor Research
- [Revolut Brand Colors - Mobbin](https://mobbin.com/colors/brand/revolut)
- [N26 Brand Colors - Mobbin](https://mobbin.com/colors/brand/n26)
- [N26 Color System Update](https://n26.com/en-eu/blog/updating-our-color-system)
- [Monzo Brand Colors](https://www.brandcolorcode.com/monzo)
- [Wise Brand Colors - Mobbin](https://mobbin.com/colors/brand/wise)

### Component Libraries
- [Flutter Material 3 Documentation](https://m3.material.io/develop/flutter)
- [React UI Libraries Comparison 2025](https://makersden.io/blog/react-ui-libs-2025-comparing-shadcn-radix-mantine-mui-chakra)
- [shadcn/ui vs Radix UI Comparison](https://scratchdb.com/compare/radix-ui-vs-shadcn-ui/)
- [Best Flutter UI Libraries 2026](https://www.f22labs.com/blogs/top-8-flutter-ui-libraries-for-2025-you-must-explore/)

### Typography
- [Best Fonts for UI Design 2026](https://www.designmonks.co/blog/best-fonts-for-ui-design)
- [Typography for Fintech - Medium](https://medium.com/@tamannasamantaray00/typography-selection-for-fintech-product-design-system-series-62ba0ba7c4bf)
- [Typefaces for Fintech - Smashing Magazine](https://www.smashingmagazine.com/2023/10/choose-typefaces-fintech-products-guide-part1/)
- [Font Strategies for Fintech](https://www.telerik.com/blogs/font-strategies-fintech-websites-apps)

### Animations
- [Lottie in Flutter for Microinteractions](https://vibe-studio.ai/insights/using-lottie-animations-in-flutter-for-microinteractions)
- [Mastering Flutter Animations](https://medium.com/@tiger.chirag/hidden-choreography-in-flutter-f49c5298d914)
- [Payments App Animation Pack - LottieFiles](https://lottiefiles.com/marketplace/payments-app-micro-interactions)

### Dark Mode & Accessibility
- [Dark Mode Design Guide 2026](https://appinventiv.com/blog/guide-on-designing-dark-mode-for-mobile-app/)
- [Dark Mode in Banking Apps](https://eximee.com/blog/implementing-dark-mode-in-banking-apps-how-to-do-it-properly/)
- [Banking App Design Trends 2025](https://inkbotdesign.com/banking-app-design/)
- [Fintech UX Best Practices](https://procreator.design/blog/best-fintech-ux-practices-for-mobile-apps/)

### Design Trends
- [Banking App UI Best Practices 2026](https://procreator.design/blog/banking-app-ui-top-best-practices/)
- [Top 15 Banking Apps UX Design 2026](https://www.wavespace.agency/blog/banking-app-ux)
- [UXDA Fintech Design Trends](https://theuxda.com/blog/ux-case-study-mobile-banking-app-design-neobank)

---

## Next Steps

1. **Review this proposal** - Select design direction (A, B, or C)
2. **Approve color palette** - Or request modifications
3. **Create Figma design file** - Based on chosen direction
4. **Build component library** - Flutter implementation
5. **Iterate** - Refine based on user testing

---

*Document prepared for Drop (originally FontelePay) UI/UX upgrade initiative.*

# UI/UX Reference

# Drop UI/UX Reference

> **Note:** Originally written as "Drop" with Flutter stack. Product has been rebranded to **Drop** using Next.js 16 + React 19 + Tailwind v4. See brand/brand-guide.md for current design system.

**Datum:** 2026-02-04

---

## 1. Konkurencija za Inspiraciju

| App | Strengths | Šta kopirati |
|-----|-----------|--------------|
| **Revolut** | Quick onboarding, heavy icons, real-time responses | Multi-currency prikaz, card management |
| **N26** | Minimal aesthetics, auto-categorized transactions | MoneyBeam stil transfera |
| **Monzo** | Human tone, savings pots, push notifications | Savings pots, friendly copy |

---

## 2. Key UI Komponente

Bazirano na [UXDA Fintech Case Study](https://theuxda.com/blog/ux-case-study-mobile-banking-app-design-neobank):

1. **Biometric Auth** — Instant pristup, FaceID/TouchID first
2. **Balance Dashboard** — Swipeable account cards, trend chart
3. **Activity Feed** — Timeline stil (kao social media)
4. **Spending Insights** — Donut chart sa kategorijama
5. **Payment Interface** — Jednostavno kao SMS slanje
6. **AI Assistant** — Voice-activated (future phase)

---

## 3. Onboarding Flow

Best practices za 3-minute onboarding:

1. Phone number → SMS verification
2. Email (optional)
3. Personal info (name, DOB)
4. ID verification (Sumsub integration)
5. Selfie liveness check
6. IBAN generated → Ready!

**Target:** < 3 minute, 74% users abandon if > 5 min

---

## 4. Dashboard Layout

```
┌─────────────────────────────┐
│  [Profile]     Drop   │
├─────────────────────────────┤
│                             │
│      € 1,234.56             │
│      Main Account           │
│   ← [Card 1] [Card 2] →     │
│                             │
├─────────────────────────────┤
│  [Send] [Request] [Top-up]  │
├─────────────────────────────┤
│  Recent Activity            │
│  ─────────────────────────  │
│  ☕ Starbucks      -€4.50   │
│  🛒 Grocery        -€32.10  │
│  💰 Salary      +€2,500.00  │
│                             │
└─────────────────────────────┘
```

---

## 5. Figma Templates (FREE)

| Template | Screens | Link |
|----------|---------|------|
| Banking App (Light/Dark) | 43+ | [Figma](https://www.figma.com/community/file/1320093355098935734) |
| Digital Banking Fintech | Full | [Figma](https://www.figma.com/community/file/1221934215660892715) |
| Free Finance Banking Kit | 15+ | [Figma](https://www.figma.com/community/file/1036356407585866248) |
| Bank App iOS Kit | iOS | [Figma](https://www.figma.com/community/file/974284148399607335) |

**Preporuka:** Počni sa "Banking App (Light/Dark)" — 43 screena, light/dark mode.

---

## 6. 2025 Design Trends

- **Personalizacija** — AI-based spending insights
- **Embedded finance** — Sve na jednom mjestu (payments, savings, cards)
- **Conversational UI** — Chatbot za support
- **Biometric-first** — Password kao fallback, ne primary

---

## 7. Tech Stack za UI (VERIFIED)

| Komponenta | Tehnologija | Napomena |
|------------|-------------|----------|
| Mobile | **Flutter 3.x** | Single codebase iOS/Android |
| State | **Bloc** | Recommended by research |
| Navigation | **GoRouter** | Deep linking support |
| HTTP | **Dio** | API calls |
| Local storage | **Hive** | Encrypted local data |
| Biometrics | **local_auth** | FaceID/TouchID |

---

## 8. Backend Integration (VERIFIED)

| Service | Provider | Napomena |
|---------|----------|----------|
| BaaS | **Swan** | EU licensed, IBAN generation |
| Cards | **Stripe Issuing** | Virtual/physical cards |
| KYC | **Sumsub** | ID verification, liveness |
| Payments | **Stripe** | Payment processing |

**NAPOMENA:** NE Firebase — Swan/Stripe ekosistem per research.

---

## 9. Next Steps

1. [ ] Download Figma template (43+ screens)
2. [ ] Customize branding (Drop colors, logo)
3. [ ] Design onboarding flow (6 screens)
4. [ ] Design main dashboard
5. [ ] Design send money flow
6. [ ] Design card management screens
7. [ ] Handoff to Flutter dev

---

## Sources

- [UXDA Fintech Design Trends](https://theuxda.com/blog/ux-case-study-mobile-banking-app-design-neobank)
- [Banking App UX 2025](https://adria-bt.com/en/9-ux-ui-design-trends-in-digital-banking-what-users-expect-in-2025/)
- [Figma Banking UI Kits](https://www.figma.com/community/mobile-apps/finance)
- [Drop Tech Stack Research](./mobilebank-research/TECH-STACK.md)
- [Drop Providers Research](./mobilebank-research/PROVIDERS.md)

# UI Design Spec

# Drop — UI/UX Design Specification

**Date:** 2026-02-09
**Phase:** SDLC 3 — Design
**Sources:** Designer agent + Product agent + Edita's AI-first workflow
**Stack:** Next.js 16 + React 19 + Tailwind v4 + shadcn/ui
**Approach:** Code-first (no Figma) — v0.dev + shadcn/ui

---

## Brand

| Element | Value |
|---------|-------|
| Name | Drop |
| Tagline | "Enklere betalinger. Lavere gebyrer." |
| Primary | `#3498db` (blue — trust, finance) |
| Secondary | `#f1c40f` (yellow — warmth, home) |
| Accent | `#2ecc71` (green — success, money) |
| Headings | Montserrat Bold |
| Body | Lato Regular |
| Style | Mobile-first, clean, minimal |
| Accessibility | WCAG AA minimum |

---

## Screen Map

```
┌─────────────┐
│   Splash     │ → auto-redirect
└──────┬──────┘
       ▼
┌─────────────┐     ┌─────────────┐
│   Login      │────▶│  Register   │
└──────┬──────┘     └──────┬──────┘
       │                    ▼
       │            ┌─────────────┐
       │            │    KYC      │
       │            │ ID + Selfie │
       │            └──────┬──────┘
       │                    ▼
       │            ┌─────────────┐
       │            │ Add Payment │
       │            │   Method    │
       │            └──────┬──────┘
       ▼                    │
┌─────────────┐◀────────────┘
│    HOME      │
│  (Tab Bar)   │
├──────────────┤
│ [Send] [Scan]│
│ Balance Card │
│ Transactions │
└──┬───┬───┬──┘
   │   │   │
   ▼   ▼   ▼
 Send  QR  Profile
 Flow  Flow Settings
```

---

## Screen 1: HomeScreen

**Route:** `/dashboard`

### Layout
```
┌──────────────────────────────┐
│ [Drop logo]    [🔔] [Avatar] │  ← Header
├──────────────────────────────┤
│                              │
│  ┌────────────────────────┐  │
│  │   Your Balance         │  │  ← Card (shadcn)
│  │   12,450.00 NOK        │  │     text-3xl font-bold
│  └────────────────────────┘  │
│                              │
│  ┌──────────┐ ┌──────────┐  │
│  │ Send     │ │ Scan QR  │  │  ← Button x2 (shadcn)
│  │ Money 💸 │ │ 📱       │  │     primary / accent
│  └──────────┘ └──────────┘  │
│                              │
│  Recent Transactions         │  ← ScrollArea (shadcn)
│  ┌────────────────────────┐  │
│  │ Mama Jasmina  -2,000   │  │  ← Each: Avatar + name + amount
│  │ 🇷🇸 RSD    ✅ Completed │  │     + country flag + Badge status
│  ├────────────────────────┤  │
│  │ Ahmetov Kebab  -129    │  │
│  │ 🏪 QR     ✅ Completed │  │
│  └────────────────────────┘  │
│                              │
├──────────────────────────────┤
│  [Home]  [Activity]  [More]  │  ← Bottom nav (3 tabs)
└──────────────────────────────┘
```

### Components
- `Card` — balance display
- `Button` variant="default" — Send Money (bg: #3498db)
- `Button` variant="outline" — Scan QR (border: #2ecc71)
- `ScrollArea` — transaction list
- `Badge` — transaction status (completed/pending/failed)
- `Avatar` — user + recipient avatars

### States
- **Loading:** Skeleton components for balance + transactions
- **Empty:** "No transactions yet. Send your first remittance!" + illustration
- **Error:** Toast notification with retry

---

## Screen 2: SendMoneyFlow (4-step wizard)

**Route:** `/send`

### Step Indicator
`Tabs` or custom stepper: Select → Amount → Review → Done

### Step 1: Select Recipient (`/send/recipient`)
```
┌──────────────────────────────┐
│ ← Back     Send Money   1/4  │
├──────────────────────────────┤
│                              │
│  🔍 Search recipients...     │  ← Input (shadcn)
│                              │
│  Recent                      │
│  ┌────────────────────────┐  │
│  │ 👤 Mama Jasmina        │  │  ← List items, clickable
│  │    Serbia • *****1234  │  │
│  ├────────────────────────┤  │
│  │ 👤 Brat Edin           │  │
│  │    Bosnia • *****5678  │  │
│  └────────────────────────┘  │
│                              │
│  ┌────────────────────────┐  │
│  │  + New Recipient       │  │  ← Button variant="outline"
│  └────────────────────────┘  │
└──────────────────────────────┘
```

### Step 2: Amount (`/send/amount`)
```
┌──────────────────────────────┐
│ ← Back     Send Money   2/4  │
├──────────────────────────────┤
│                              │
│  To: Mama Jasmina 🇷🇸         │
│                              │
│  You send:                   │
│  ┌──────────────────┬─────┐  │
│  │         2,000    │ NOK │  │  ← Input + Select (currency)
│  └──────────────────┴─────┘  │
│                              │
│  They receive:               │
│  ┌────────────────────────┐  │
│  │    23,400 RSD           │  │  ← Computed, read-only
│  └────────────────────────┘  │
│                              │
│  ┌────────────────────────┐  │
│  │ Rate: 1 NOK = 11.70 RSD│  │  ← Exchange rate info
│  │ Fee: 10.00 NOK (0.5%)  │  │
│  │ Total: 2,010.00 NOK    │  │
│  └────────────────────────┘  │
│                              │
│  ┌────────────────────────┐  │
│  │      Continue →         │  │  ← Button primary
│  └────────────────────────┘  │
└──────────────────────────────┘
```

### Step 3: Review (`/send/review`)
```
┌──────────────────────────────┐
│ ← Back     Send Money   3/4  │
├──────────────────────────────┤
│                              │
│  Review Transfer             │
│  ┌────────────────────────┐  │
│  │ To:     Mama Jasmina   │  │  ← Card with all details
│  │ Country: Serbia 🇷🇸     │  │
│  │ Send:   2,000.00 NOK   │  │
│  │ Receive: 23,400 RSD    │  │
│  │ Fee:    10.00 NOK      │  │
│  │ Total:  2,010.00 NOK   │  │
│  │ ETA:    1-2 business d. │  │
│  └────────────────────────┘  │
│                              │
│  ┌────────────────────────┐  │
│  │   Confirm & Send ✓     │  │  ← Button primary, large
│  └────────────────────────┘  │
└──────────────────────────────┘
```

### Step 4: Success (`/send/success`)
```
┌──────────────────────────────┐
│                         4/4  │
├──────────────────────────────┤
│                              │
│           ✅                  │  ← CheckCircle icon, green
│                              │
│     Money on the way!        │  ← Montserrat Bold 20px
│                              │
│   2,000 NOK → 23,400 RSD    │
│   To: Mama Jasmina           │
│   ETA: 1-2 business days     │
│                              │
│  ┌────────────────────────┐  │
│  │       Done              │  │  ← Button, back to home
│  └────────────────────────┘  │
│  ┌────────────────────────┐  │
│  │    Send Another         │  │  ← Button variant="ghost"
│  └────────────────────────┘  │
└──────────────────────────────┘
```

### Error States
- **Insufficient funds:** Alert dialog — "Not enough balance. Top up?"
- **KYC incomplete:** Alert — "Complete verification first" + link to KYC
- **Country not supported:** Alert — "This corridor coming soon!"
- **Network error:** Toast — "Connection lost. Tap to retry."

---

## Screen 3: ScanQRFlow

**Route:** `/scan`

### Camera View
```
┌──────────────────────────────┐
│ ← Back        Scan QR        │
├──────────────────────────────┤
│                              │
│  ┌────────────────────────┐  │
│  │                        │  │
│  │    ┌──────────────┐    │  │  ← Camera viewfinder
│  │    │              │    │  │     with QR frame overlay
│  │    │   QR FRAME   │    │  │
│  │    │              │    │  │
│  │    └──────────────┘    │  │
│  │                        │  │
│  └────────────────────────┘  │
│                              │
│  Point camera at merchant QR │  ← Helper text
└──────────────────────────────┘
```

### After Scan — Bottom Sheet
```
┌──────────────────────────────┐
│        (camera dimmed)       │
├──────────────────────────────┤
│ ══════════════════════════   │  ← Sheet (shadcn) slides up
│                              │
│  🏪 Ahmetov Kebab            │  ← Merchant name
│     Grønland 12, Oslo        │  ← Address
│                              │
│  Amount:                     │
│  ┌──────────────────┬─────┐  │
│  │         129      │ NOK │  │  ← Input
│  └──────────────────┴─────┘  │
│                              │
│  Fee: 1.29 NOK (1%)         │
│                              │
│  ┌────────────────────────┐  │
│  │     Pay 130.29 NOK ✓   │  │  ← Button accent (#2ecc71)
│  └────────────────────────┘  │
└──────────────────────────────┘
```

### Success
```
┌──────────────────────────────┐
│                              │
│          🎉                   │  ← Confetti / success animation
│                              │
│      Payment Complete!       │
│                              │
│   129.00 NOK                 │
│   Ahmetov Kebab              │
│                              │
│  ┌────────────────────────┐  │
│  │        Done             │  │
│  └────────────────────────┘  │
└──────────────────────────────┘
```

### Error States
- **Invalid QR:** Alert — "This QR code is not a Drop merchant"
- **Camera denied:** Alert — "Camera access needed to scan QR" + settings link
- **Payment failed:** Alert — "Payment failed. Try again?" + retry button

---

## Screen 4: MerchantDashboard

**Route:** `/merchant`

```
┌──────────────────────────────┐
│ Ahmetov Kebab         [⚙️]   │  ← Header + settings
├──────────────────────────────┤
│                              │
│  Revenue                     │
│  [Today] [Week] [Month]      │  ← Tabs (shadcn)
│  ┌────────────────────────┐  │
│  │   12,300 NOK            │  │  ← Card, large text
│  │   47 transactions       │  │
│  │   Fee paid: 123 NOK     │  │
│  └────────────────────────┘  │
│                              │
│  ┌────────────────────────┐  │
│  │  📱 Show My QR Code    │  │  ← Button, opens dialog
│  └────────────────────────┘  │
│                              │
│  Today's Transactions        │
│  ┌────────────────────────┐  │
│  │ Amir K.    129 NOK  ✅  │  │  ← Transaction list
│  │ Sara M.     89 NOK  ✅  │  │
│  │ Edin B.    245 NOK  ⏳  │  │
│  └────────────────────────┘  │
│                              │
│  Settlement: Daily 17:00     │  ← Info text
│  Next payout: 12,177 NOK    │
└──────────────────────────────┘
```

---

## User Flows

### Flow 1: Remittance (New User)
```
Download → Register (email + phone + password)
  → KYC (upload ID + selfie)
    → Add Payment Method (Norwegian bank/card)
      → Home → "Send Money"
        → Select Recipient (or add new: name + country + bank account)
          → Enter Amount (see live conversion + fee)
            → Review Details
              → Confirm & Send
                → Success (ETA 1-2 days)

ERROR PATHS:
  KYC incomplete → redirect to /kyc
  Insufficient funds → "Top up" dialog
  Country not supported → "Coming soon" message
  Network error → retry toast
```

### Flow 2: QR Payment (Customer)
```
Home → "Scan QR"
  → Camera opens (request permission if needed)
    → Scan merchant QR
      → Bottom sheet: merchant info + amount input
        → Confirm payment
          → Success + confetti

ERROR PATHS:
  Camera denied → settings redirect
  Invalid QR → "Not a Drop merchant" alert
  Payment failed → retry option
```

### Flow 3: Merchant Onboarding
```
Download → "Register as Merchant"
  → Business info (name + org.nummer + address)
    → Bank account for settlement
      → KYC (owner ID + selfie)
        → QR Code generated!
          → Print QR or display on screen
            → Start receiving payments

ERROR PATHS:
  Invalid org.nummer → "Check your business number"
  KYC failed → "Contact support"
```

---

## Design Tokens (Tailwind config)

```js
// tailwind.config.js extension
colors: {
  drop: {
    primary: '#3498db',    // blue - trust
    secondary: '#f1c40f',  // yellow - warmth
    accent: '#2ecc71',     // green - success
    dark: '#2c3e50',       // text
    light: '#ecf0f1',      // backgrounds
    error: '#e74c3c',      // errors
    warning: '#f39c12',    // warnings
  }
}
fontFamily: {
  heading: ['Montserrat', 'sans-serif'],
  body: ['Lato', 'sans-serif'],
}
```

---

## Responsive Breakpoints

| Breakpoint | Width | Target |
|-----------|-------|--------|
| default | 0-639px | Mobile (primary) |
| sm | 640px+ | Large phones |
| md | 768px+ | Tablets |
| lg | 1024px+ | Desktop |

Mobile-first: all layouts designed for 375px width, scale up.

---

*Generated: 2026-02-09 by Designer + Product agents (Ollama) + John (orchestration)*
*Next: Builder agent implements in Next.js 16 + shadcn/ui*