📖 Brand Guidelines v1.0 · 2026

The CityBites
Brand Identity

This document defines the visual language, personality, and communication standards that make CityBites recognizable, trustworthy, and irresistible across every touchpoint — from the app to the streets of Europe.

🏙️ Premium Food-Tech 🇪🇺 European Market 💼 Professionals & Travelers 📱 Flutter · Firebase
🎯 Purpose

Mission & Vision

What drives every decision we make.

🎯

Mission

To give every professional and traveler in Europe access to a premium, stress-free lunch — at a price that respects their wallet — by connecting them with the best local restaurants in their city, one subscription at a time.

🌍

Vision

A world where lunch is the best part of your workday. Where tasting a new restaurant is effortless, affordable, and joyful — and where local restaurants thrive because modern professionals choose them every day.

Core Values

Effortless

One tap. Done. No decision fatigue.

💚
Trustworthy

Honest pricing. No hidden fees. Ever.

🌆
Local-First

We champion neighbourhood gems, not chains.

Premium

Better experience for less cost — always.

💎 Character

Brand Personality

CityBites is a brand you'd want to grab lunch with.

🧠

Smart, Not Snobby

We know our stuff about food and cities, but we never talk down to our users. We're the well-traveled friend who gives genuine recommendations.

🤝

Human & Warm

Behind our sleek UI is a human heart. We celebrate local culture, cheer for small restaurants, and genuinely care about the people we serve.

🚀

Confident & Direct

We know our value. We don't hedge. When we say you'll save money and eat better, we mean it — and we can prove it with the savings calculator.

Brand Archetype: The Explorer × The Sage

🧭 The Explorer

We push boundaries, discover new restaurants, and encourage curiosity. Every lunchtime is an adventure through the city.

📚 The Sage

We're the expert. We know which restaurants are worth it, what meals are freshest, and exactly how much you'll save — we guide with knowledge.

🎨 Visual

Color System

Our palette is inspired by city nights — vibrant neon energy over deep urban darkness.

Primary Palette

Mint Green
#1DE9B6
Primary CTA · Highlights · Success
Deep Violet
#5E2CA5
Secondary · Accent · Featured Cards
Electric Cyan
#00B0FF
Gradient Partner · Links · Info
Violet Bright
#7B45D9
Hover state · Elevation

Neutral / Background Palette

Dark BG
#0B0717
Page background
Surface 1
#12092A
Hero sections · Sidebars
Card BG
#1E1635
Cards · Elevated surfaces
Text Light
#F3F0FC
Primary body text
Text Muted
#A59FB6
Secondary text · Descriptions
Error / Warning
#FF6B8A
Alerts · No-show · Cancel

Gradients

Primary Gradient
Mint → Cyan (135°)
CTAs · Buttons · Progress bars
Brand Gradient
Mint → Violet (135°)
Logo text · Featured badges · Hero accents
Dark Gradient
Card BG → Dark BG (180°)
Sections · Hero backgrounds

Light Mode Adaptations

Mint (Light)
#00A77D
Darker for contrast on white
BG Light
#F9F8FC
Page background (light mode)
Text Dark
#1B1627
Primary text on light bg
✏️ Type

Typography

Two typefaces work in tandem — Outfit for impact, Inter for clarity.

Display / Headings — Outfit
Dine Better.
Spend Less.
ExtraBold 800
The City Is Yours
Bold 700
Lunch Subscription
SemiBold 600
Berlin · Paris · Rome
Regular 400
€7 per lunch
Body / UI — Inter
Body Large (16px / 600)
Choose from 50+ curated restaurants
Body Medium (15px / 400)
Premium lunches delivered Monday–Friday, from the best local restaurants in your city, for less than you'd pay at the counter.
Caption (13px / 500)
MOST POPULAR · LOCAL PLAN
Mono (DM Mono)
#1DE9B6 · OTP: 483 201

Type Scale

Display 1 56px Outfit 800 · Hero headlines
Display 2 40px Outfit 800 · Section titles
H1 28px Outfit 700 · Screen titles
H2 20px Outfit 600 · Card titles
Body 16px Inter 400 · General body copy
Caption 13px Inter 500 Uppercase · Labels · Tags
🔷 Icons

Iconography Style

Icons follow a consistent rounded-stroke style at 24dp with 2px strokes. Use mint green for active states, muted for inactive.

🍽️
restaurant
📍
location
⏱️
timer_grace
💳
subscription
🔖
bookmark
⚙️
settings
check_in
📊
analytics

Icon library: Material Symbols Rounded — weight 300, optical size 24, grade 0. Active tint: var(--mint). Inactive: var(--text-muted).

🗣️ Language

Voice & Tone

How we talk matters as much as what we say. CityBites speaks like a smart, local friend — not a corporate app.

🧠
Smart & Knowledgeable

We know food. We know cities. We back our claims with data (savings calculator, MRR tracker). We're confident without being condescending.

✅ SAY THIS
"You saved €84 last month on lunches."
❌ NOT THIS
"Our algorithmically optimized meal-selection paradigm offers cost-efficient dining solutions."
🤝
Human & Warm

We celebrate people and places. We're the app that remembers you prefer vegetarian, notices when you've skipped lunch, and genuinely celebrates your savings milestone.

✅ SAY THIS
"Looks like you haven't eaten yet. Ready for something good?"
❌ NOT THIS
"No bookings detected for today's date."
🚀
Confident & Direct

No wishy-washy hedging. We say what we mean. Action-oriented language. Short sentences. Strong verbs.

✅ SAY THIS
"Book your lunch. Pick it up. You're done."
❌ NOT THIS
"You may want to consider selecting a meal option if you would like to proceed with a reservation at this time."
😄
Lightly Playful

We can be a little cheeky. Not every message needs to be serious. Micro-copy is a chance to delight. But we know when to be professional.

✅ SAY THIS
"Your table won't wait forever — 8 minutes left! 🕐"
❌ NOT THIS
"Warning: Grace period expiration imminent."

Writing Principles

Be Concise

Every word earns its place. Cut fluff. If you can say it in 5 words, don't use 10.

Use Active Voice

"Book your meal" beats "A meal can be booked." People do things — make them the subject.

Celebrate Progress

When users hit milestones (10 lunches, €100 saved), acknowledge it. Make them feel good about choosing CityBites.

Localize Authentically

German users get German warmth. French users get French elegance. Translations go beyond words — adapt the voice too.

Never Guilt-Trip

The "Sad Cancellation Screen" should feel understanding, not manipulative. People have lives. We respect that.

Error = Opportunity

Errors are moments to be human, helpful, and fast to resolve. Never blame the user. Always offer a next step.

⚡ Copy

Taglines & Key Copy

Our core messages, ready to deploy across marketing, App Store listings, and social media.

01 Dine Out Daily for €7. Primary hero tagline · Landing page
02 Your City. Your Table. Every Day. Brand manifesto line · App onboarding
03 Premium Lunches. Pocket-Friendly Prices. App Store subtitle · Social ads
04 Europe's Best Restaurants. One Subscription. General brand positioning
05 Eat Like a Local. Pay Less Than a Tourist. Traveler Bundle targeting
06 Less Time Deciding. More Time Enjoying. Professional audience · productivity angle
07 The Lunch Hour, Reclaimed. Punchy alternative · editorial use
📦 Assets

Brand Assets Gallery

All visual assets created for CityBites, ready for use across platforms.

Logo Mark (City Skyline Burger)

CityBites logo mark
assets/logo_new.png · Transparent background · Use on dark surfaces

App Icon (iOS / Android)

CityBites app icon
assets/app_icon.png · 1024×1024 · Dark gradient + City burger mark
CityBites social media banner
assets/social_banner.png · Social Media Banner · 16:9 · Twitter / LinkedIn / Instagram landscape
CityBites brand style tile
assets/brand_tile.png · Brand Style Tile · Reference for designers and collaborators
🔢 Dev

Design Tokens

Copy-paste ready values for Flutter (app_theme.dart), CSS, and Figma.

Flutter / Dart

// lib/core/theme/app_theme.dart — Brand Color Tokens
static const Color mintGreen       = Color(0xFF1DE9B6); // Primary
static const Color mintDark        = Color(0xFF00A77D); // Light mode primary
static const Color deepViolet      = Color(0xFF5E2CA5); // Secondary
static const Color violetBright    = Color(0xFF7B45D9); // Hover / Elevation
static const Color electricCyan    = Color(0xFF00B0FF); // Gradient partner
static const Color darkBackground  = Color(0xFF0B0717); // BG
static const Color surface1        = Color(0xFF12092A); // Surface level 1
static const Color cardBackground  = Color(0xFF1E1635); // Cards
static const Color textLight       = Color(0xFFF3F0FC); // Primary text
static const Color textMuted       = Color(0xFFA59FB6); // Secondary text
static const Color textSubtle      = Color(0xFF6B6579); // Tertiary text
static const Color errorColor      = Color(0xFFFF6B8A); // Error / Cancel

// Gradients
static const Gradient primaryGradient = LinearGradient(
  colors: [mintGreen, electricCyan],
  begin: Alignment.topLeft,
  end: Alignment.bottomRight,
);
static const Gradient brandGradient = LinearGradient(
  colors: [mintGreen, deepViolet],
  begin: Alignment.topLeft,
  end: Alignment.bottomRight,
);

CSS Custom Properties

:root {
  /* Colors */
  --mint:          #1DE9B6;
  --mint-dark:     #00A77D;
  --violet:        #5E2CA5;
  --violet-bright: #7B45D9;
  --cyan:          #00B0FF;
  --dark-bg:       #0B0717;
  --surface-1:     #12092A;
  --card-bg:       #1E1635;
  --text:          #F3F0FC;
  --text-muted:    #A59FB6;
  --text-subtle:   #6B6579;
  --error:         #FF6B8A;

  /* Typography */
  --font-display: 'Outfit', sans-serif;
  --font-body:    'Inter', sans-serif;
  --font-mono:    'DM Mono', monospace;

  /* Gradients */
  --grad-primary: linear-gradient(135deg, #1DE9B6 0%, #00B0FF 100%);
  --grad-brand:   linear-gradient(135deg, #1DE9B6 0%, #5E2CA5 100%);

  /* Border radius */
  --r-sm: 8px;
  --r-md: 16px;
  --r-lg: 24px;
  --r-xl: 32px;
}