Ad Tritonکتاب برند
Phase 1 — Brand System & Frontend Foundation

کتاب برند

مرجع بصری زنده برای همه ماژول‌ها.

Ad TritonTagline provisionalLogo conceptNo backend in this phase
01 — Identity

Brand overview

A digital-first operating system for offline advertising — connecting inventory discovery, planning, booking, campaign execution, measurement, reporting, finance and settlement in one operational platform.

Ad Triton

Ad Triton

Offline advertising, connected.Provisional

A digital-first operating system for offline advertising — connecting inventory discovery, planning, booking, campaign execution, measurement, reporting, finance and settlement in one operational platform.

Positioning

A digital-first operating system for offline advertising.

Lifecycle covered
  1. Discovery
  2. Planning
  3. Proposal
  4. Booking
  5. Campaign
  6. Execution
  7. Proof
  8. Measurement
  9. Reporting
  10. Finance
  11. Settlement

Product name, tagline, description and lifecycle text on this page are read fromsrc/config/brand.ts. No component hardcodes them.

02 — Identity

Mission

Digitize the offline advertising value chain and make OOH operations more transparent, traceable and manageable.

The brand speaks about operational capability, not market rank. Avoid superlatives and unverifiable leadership claims in product copy.

03 — Identity

Brand attributes

Every interface decision should be defensible against these attributes.

01

Technological

02

Transparent

03

Trustworthy

04

Structured

05

Intelligent

06

Operational

07

Scalable

08

Enterprise-ready

04 — Identity

Brand values

  • Transparency
  • Traceability
  • Operational reliability
  • Financial correctness
  • Trust
  • Simplicity where complexity can be removed
  • Connectivity between advertisers and media owners
05 — Identity

Audiences

Four audiences share one visual system; tone and density stay consistent across them.

Merchant / Advertiser

Plans and books offline campaigns, and needs proof that they ran.

Publisher / Media Owner

Publishes inventory, manages availability and fulfils bookings.

Agency

Coordinates plans and proposals across multiple advertisers.

System Operator

Oversees operations, data integrity and settlement.

07 — Foundations

Color system

Primitives feed brand tokens, brand tokens feed semantic roles, and only semantic roles reach components. Values shown are read live from the active theme.

Provisional brand blue is #3B82F6 (--blue-500), exposed to the product as --brand-primary. Raw Tailwind blue utilities are not part of the product API.

Brand blue

Primary identity scale. Provisional brand blue is --blue-500 (reference #3B82F6) and is surfaced to the product as --brand-primary.

  • --blue-50Lightest blue surfaceSelected rows, subtle callouts—
  • --blue-100Subtle blue surfaceBadge backgrounds—
  • --blue-200Blue borderEmphasised borders, chart lightest—
  • --blue-300Blue accentDark-mode links, secondary series—
  • --blue-400Bright blueDark-mode hover, focus ring—
  • --blue-500Primary brand bluePrimary actions, selected state—
  • --blue-600HoverPrimary action hover, links (light)—
  • --blue-700PressedPrimary action active—
  • --blue-800Deep blueChart emphasis, deep accents—
  • --blue-900Navy blueInverse blue surfaces—
  • --blue-950Deepest navyBrand-deep panels—

Midnight / navy

Dark-theme surfaces. Deep navy, never generic black.

  • --midnight-600Raised dividerDark chart comparison—
  • --midnight-700Strong borderDark inputs, dividers—
  • --midnight-800Border / subtle fillDark borders, subtle badges—
  • --midnight-900Tertiary surfaceDark hovered rows—
  • --midnight-950Secondary surfaceDark sidebars and panels—
  • --midnight-1000CanvasDark application background—

Neutral

Dominant interface scale. Neutral surfaces carry the UI, not blue.

  • --neutral-0Canvas / cardLight background, cards—
  • --neutral-50Secondary surfaceSidebar, page wash—
  • --neutral-100Tertiary surfaceTable headers, hover—
  • --neutral-200Primary borderCrisp thin borders—
  • --neutral-300Secondary borderInputs, stronger dividers—
  • --neutral-400Tertiary textPlaceholders, disabled—
  • --neutral-500Muted textMeta labels—
  • --neutral-600Secondary textBody support text—
  • --neutral-700Strong textDense data text—
  • --neutral-800Heading textHeadings on light—
  • --neutral-900Primary textDefault foreground—
  • --neutral-950Inverse textText on light inverse surfaces—

Semantic roles

Feature code consumes these, never primitives. Theme switching only remaps this layer.

  • --surface-primaryCanvas / cardPage and card background—
  • --surface-secondaryWashSidebars, page background—
  • --surface-tertiarySubtle fillTable head, hover rows—
  • --text-primaryPrimary textHeadings, key values—
  • --text-secondarySecondary textDescriptions, labels—
  • --text-tertiaryTertiary textPlaceholder, disabled—
  • --border-primaryDefault borderCards, tables, dividers—
  • --border-secondaryStrong borderInputs, controls—
  • --brand-primaryBrand actionPrimary buttons, selected nav—
  • --brand-hoverBrand hoverHover state of brand action—
  • --brand-activeBrand pressedActive/pressed state—
  • --brand-subtleBrand tintSelected background, accent chips—

Status

Status is never expressed with brand blue. Info is the only blue semantic role, and status is always paired with a label or icon.

  • --successSuccessCompleted, approved, delivered—
  • --warningWarningAttention, risk, pending review—
  • --errorErrorFailure, rejected, destructive—
  • --infoInfoNeutral information, in-progress—

Data visualization

Constrained palette: brand blue, lighter blue, one cyan accent, and neutral comparison. No rainbow series.

  • --viz-1Primary seriesMain metric—
  • --viz-2Secondary seriesComparison metric—
  • --viz-3Accent seriesThird series (sky/cyan)—
  • --viz-4Neutral seriesBaseline / previous period—
  • --viz-5Emphasis seriesHighlighted segment—
08 — Foundations

Color usage

Neutral surfaces dominate. Blue is reserved for intent and interaction, never for decoration.

Blue

Primary actions, selected navigation, links, focus, meaningful highlights

Neutral

Dominant surfaces, borders, text and structure — most of the interface

Success

Operation succeeded, approved, delivered

Warning

Attention or operational risk

Error

Failure and destructive intent

Brand blue never substitutes for a semantic state. A successful booking is --success, not brand blue; a failed sync is --error.

09 — Foundations

Typography

Inter for Latin, a Persian-capable family for fa-IR. Regular weight carries the interface; semibold is reserved for hierarchy.

The approved licensed Persian product font is not available in this project. Persian text currently falls back to Vazirmatn and then to system Persian faces. Switch it centrally via --font-persian insrc/styles.css.

  • Offline advertising, connected

    تبلیغات محیطی، متصل

    Style
    Display
    Utility
    .type-display
    Size / LH
    36–48px fluid / 1.08
    Weight
    600
    Use
    Marketing and brand statements only
  • Media operations dashboard

    داشبورد عملیات رسانه

    Style
    H1
    Utility
    .type-h1
    Size / LH
    30px / 1.2
    Weight
    600
    Use
    Page title
  • Inventory and availability

    موجودی و دسترس‌پذیری

    Style
    H2
    Utility
    .type-h2
    Size / LH
    22px / 1.3
    Weight
    600
    Use
    Section heading
  • Active campaigns

    کمپین‌های فعال

    Style
    H3
    Utility
    .type-h3
    Size / LH
    17px / 1.4
    Weight
    600
    Use
    Panel / card heading
  • Inventory discovery, planning and booking in a single operational surface.

    کشف موجودی، برنامه‌ریزی و رزرو در یک بستر عملیاتی یکپارچه.

    Style
    Body
    Utility
    .type-body
    Size / LH
    15px / 1.6
    Weight
    400
    Use
    Default interface text
  • Last synchronised 12 minutes ago

    آخرین به‌روزرسانی ۱۲ دقیقه پیش

    Style
    Small
    Utility
    .type-small
    Size / LH
    13px / 1.5
    Weight
    400
    Use
    Dense tables, helper text
  • Media status

    وضعیت رسانه

    Style
    Caption
    Utility
    .type-caption
    Size / LH
    11px / 1.45
    Weight
    500
    Use
    Column and metric labels
  • 124.8

    ۱۲٤٫۸

    Style
    Metric
    Utility
    .numeric
    Size / LH
    inherits / inherits
    Weight
    500–600
    Use
    Tabular numbers, KPIs, prices
10 — Foundations

Spacing

A 4px base scale, matching the Tailwind step system. Arbitrary spacing values are not allowed in feature code.

  • p-14pxIcon / label gap
  • p-28pxCompact control padding
  • p-312pxInput padding, table cell
  • p-416pxCard padding (compact)
  • p-520pxCard padding
  • p-624pxPanel padding, grid gap
  • p-832pxSection spacing (inner)
  • p-1040pxSection spacing
  • p-1248pxMajor section spacing
  • p-1664pxPage-level rhythm
11 — Foundations

Radius

Modern, not soft. Cards stay at 8px; pills are limited to badges, filters and compact controls.

None

0px

Tables, data grids

Small

4px

Inputs, badges, small controls

Medium

6px

Buttons, menu items

Large

8px

Cards and panels

Pill

999px

Badges, filters only

No oversized pill cards. Large radii signal consumer apps, not an operations platform.

12 — Foundations

Shadows / elevation

Borders and surface hierarchy do the structural work. Elevation only communicates layering.

None

--elevation-none

Default: borders do the work

Subtle

--elevation-subtle

Cards, sticky headers

Raised

--elevation-raised

Hover cards, dropdown triggers

Overlay

--elevation-overlay

Dialogs, popovers, sheets

13 — Foundations

Icons

Lucide is the single icon system: 16px in dense UI, 20px in headers, consistent 1.5px stroke.

Icon + label (preferred for any action that is not self-evident)
  • Location
  • Digital media
  • Availability
  • Measurement
  • Filter
  • Search
  • Upload proof
  • Export
  • Settings
Sizes
14px
16px
20px
24px
Rules
  • One icon per action; never stack decorative icons.
  • Icon-only buttons always carry an accessible label.
  • Do not mirror icons for RTL unless the glyph is directional.
  • Status never relies on an icon alone — pair it with text, as in the status badges.

Icon rules

14 — Components

Buttons

Live shadcn components wired to brand tokens. One primary action per view.

Variants
States
Sizes and composition
15 — Components

Form controls

React Hook Form plus Zod validation, with labelled controls and explicit error and helper text.

Validated form (submit to see messages)

Shown to publishers in the booking request.

Input states

Campaign name needs at least 3 characters

Name is available

Selection, search and date trigger
16 — Components

Badges & status

A shared status vocabulary for operational records. Presentation only — no business rules attached.

Operational statuses
AvailableReservedPendingApprovedRejectedActivePausedCompletedFailed
Badge variants
defaultsecondaryoutlineneutralinfosuccesswarningerror
Square vs pill
Table cellFilter chipAvailableAvailable

Every status pairs colour with a label and an icon, so state never depends on colour alone.

17 — Components

Data tables

The densest surface in the product: compact rows, crisp borders, sortable headers, selection and pagination. Sample fixture data only.

Availability: October
1 selected
LocationFormatAvailabilityCampaignStatus
Airport Arrivals WallSAMPLE-0203Mashhad — Terminal 2Backlit 6×2 mNov 01 – Nov 30Winter TravelPending‎$۲۴٬۲۰۰
Highway Bridge BannerSAMPLE-0219Isfahan — Ring RoadBanner 20×4 mSep 20 – Oct 04Q3 TelecomActive‎$۱۵٬۷۵۰
Mall Atrium TotemSAMPLE-0244Shiraz — Persian Gulf MallDigital totem 75″Oct 10 – Oct 24Footwear LaunchCompleted‎$۷٬۳۰۰
Metro Concourse Screen ASAMPLE-0187Tehran — Tajrish StationDigital 1920×1080Oct 05 – Oct 31—Available‎$۹٬۶۰۰
Stadium Perimeter LEDSAMPLE-0271Tabriz — City StadiumLED 90×1 mUnavailable—Paused‎$۳۱٬۰۰۰
Valiasr Gateway BillboardSAMPLE-0142Tehran — Valiasr St.Billboard 12×3 mOct 01 – Oct 14Autumn Retail PushReserved‎$۱۸٬۴۰۰
Showing 1–6 of 6 sample records

Table notes

Fixture data lives in src/features/brandbook/fixtures.ts and is prefixed SAMPLE-. No backend, query or data provider is wired to this table.

18 — Patterns

Dashboard UI language

A specimen of the future application surface: KPI blocks, restrained charts, progress and activity. Not the real dashboard — sample content only.

Media operations

Sample specimen — fixture data, no backend

Active campaigns
38
+4 vs last month
Media availability
72%
−6% vs last month
Upcoming bookings
17
No change
Delivery progress
84%
+9% this week

Booked vs delivered

Weekly, last six weeks

Format mix

Share of booked inventory

Execution progress

  • Autumn Retail PushActive86%
  • Winter TravelPending34%
  • Q3 TelecomCompleted100%
  • Footwear LaunchPaused12%

Recent activity

  1. Proof of posting uploaded for SAMPLE-0219

    09:12Completed

  2. Booking request submitted for SAMPLE-0203

    08:47Pending

  3. Proposal approved — Autumn Retail Push

    YesterdayApproved

  4. Availability sync failed for one publisher feed

    YesterdayFailed

This composition demonstrates density, hierarchy and restraint. It is not the production dashboard and contains no business logic.

19 — Patterns

Data visualization

A deliberately narrow palette: brand blue, lighter blue, one cyan accent and a neutral baseline. Series colours come from tokens, so charts follow the active theme.

Trend (area)
Comparison (bar)
Series palette
  • --viz-1Main metric
  • --viz-2Comparison metric
  • --viz-3Third series (sky/cyan)
  • --viz-4Baseline / previous period
  • --viz-5Highlighted segment

Maximum of three data series per chart by default. Semantic colours appear in charts only when the data itself is a status.

21 — Patterns

Empty, loading and error states

Operational clarity over optimism: when data is missing or stale, say so instead of rendering plausible numbers.

No bookings yet

Bookings appear here once a proposal is approved.

رسانه‌ای با این فیلترها یافت نشد

Try widening the date range or clearing the format filter.

در حال بارگذاری داده

Measurement data unavailable

This publisher has not delivered proof for the selected period. Figures are intentionally blank rather than estimated.

22 — Patterns

Accessibility & responsive behaviour

Foundational rules that apply to every future module.

Foundations
  • Text and interactive colours are chosen for WCAG-conscious contrast in both themes.
  • Focus is always visible: a 2px brand ring with an offset, never removed.
  • Every control has a label; icon-only buttons use an accessible name.
  • Status is conveyed by label plus icon, never by colour alone.
  • Semantic HTML: landmarks, headings in order, lists for lists, real buttons.
  • Tap targets stay at or above 32px in dense UI and 36px elsewhere.
  • Reduced-motion preference disables transitions and animation.
Responsive rules
  • Desktop-first for data-heavy operations, but no horizontal page breakage.
  • Tables scroll horizontally inside their own container by design.
  • KPI grids collapse 4 → 2 → 1; panels stack before they shrink.
  • Section navigation becomes a horizontal scroller below the large breakpoint.

Checked manually at 390px, 820px and 1440px in both directions.