# Easy RFP — Social Brand Kit

**Goal:** every post looks like Easy RFP within 0.4 seconds of scroll. Consistency beats novelty in early-stage B2B social.

**Source of truth:** Design Handoff v5 (`/sessions/.../handoff-v5/`). This kit is a tight subset of v5 adapted for square + vertical formats.

**Cost:** €0 — all assets buildable in Canva Free + the brand assets you already own.

---

## 1. Color tokens

| Token | Hex | Usage |
|---|---|---|
| `--bg-primary` | `#0F172A` | Default background (dark theme) |
| `--bg-secondary` | `#1E293B` | Card surfaces |
| `--text-primary` | `#F8FAFC` | Headlines |
| `--text-secondary` | `#CBD5E1` | Body text |
| `--accent-purple` | `#8B5CF6` | Primary brand |
| `--accent-pink` | `#EC4899` | Secondary brand |
| `--accent-gradient` | `linear-gradient(135deg, #8B5CF6 0%, #EC4899 100%)` | CTA buttons, headline highlights, logo background |
| `--accent-mint` | `#34D399` | Success / "Free" badges |
| `--accent-amber` | `#FBBF24` | Warnings / urgency |

**Rule:** every post uses `--bg-primary` background + the gradient on max ONE element (logo OR headline OR CTA — never two gradients in same frame).

---

## 2. Typography

| Element | Font | Weight | Size (square 1080×1080) |
|---|---|---|---|
| Headline | Inter | 700 (Bold) | 72-96px |
| Sub-headline | Inter | 500 (Medium) | 36-48px |
| Body | Inter | 400 (Regular) | 28-32px |
| Caption / footer | Inter | 400 | 20-24px |
| Numerals & stats | JetBrains Mono | 700 | 96-128px |

**Inter and JetBrains Mono are both free on Google Fonts.** Match what's already on the site.

**Rule:** every post has exactly ONE headline (max 8 words). If you need more text, it's a carousel.

---

## 3. Logo system

You have 3 logo variants:
- `logo-3c-gradient.svg` — the 3C mark on gradient background (use on solid `--bg-primary` posts)
- `logo-wordmark-white.svg` — "Easy RFP" wordmark in white (use when 3C mark is already visible)
- `logo-favicon.svg` — favicon (32×32, app only — don't use in social)

**Placement on every post:** bottom-left or top-right corner, 12% of canvas width. Never centered, never giant.

**Safe area:** 64px padding from edges on 1080×1080. Never crop the logo.

---

## 4. Post formats per network

| Network | Format | Dimensions | Max text | Notes |
|---|---|---|---|---|
| Instagram Feed | Square | 1080×1080 | 8-word headline | 3 posts per week min |
| Instagram Reel | Vertical 9:16 | 1080×1920 | 5-word hook | 2 reels/week, 7-15s |
| Instagram Story | Vertical 9:16 | 1080×1920 | "Swipe up" stickers | Daily |
| Facebook Page | Square or 16:9 | 1200×630 (link previews) or 1080×1080 | 12-word headline | Crossposts from IG |
| LinkedIn Post | Square | 1080×1080 | 12-word headline | Best converting on LI |
| LinkedIn Carousel | PDF, 1080×1080, 3-10 slides | per slide: 8-word headline | Highest engagement format on LI right now |
| TikTok | Vertical 9:16 | 1080×1920 | 5-word hook in first 1.5s | 7-21s, captions baked in |

---

## 5. Post template library (5 templates cover 95% of cases)

### Template A — "Stat hero" (highest conversion for B2B)
- Background: `--bg-primary`
- Center: a single huge number in JetBrains Mono with gradient fill (e.g., "48h" / "€0" / "106,167")
- Below: one-line context in 36px Inter Medium ("hotel quotes back" / "for hotels, forever" / "venues in Europe")
- Bottom-right: logo
- Use case: stat-driven content, Layer 1 of awareness funnel

### Template B — "Quote card" (testimonial / pain point)
- Background: `--bg-secondary` card on `--bg-primary` page
- Big quote marks `"` in `--accent-purple`
- Quote in 48px Inter Medium, max 20 words
- Attribution: small caps, `--text-secondary`, e.g., "— Event organizer, Berlin · Easy RFP user"
- Logo bottom-left
- Use case: real organizer quotes (anonymize until you have permission), pain point validation

### Template C — "Before / After"
- Two halves, vertical or horizontal split
- Left/top: dimmed photo or icon labeled "Before: emailing 30 hotels manually"
- Right/bottom: bright gradient background labeled "After: 1 brief, 5 quotes, 48h"
- CTA bar at bottom: "easyhotelrfp.com →"
- Use case: classic comparison, very high engagement

### Template D — "Carousel — listicle"
- Slide 1: hook headline + "→ swipe" indicator
- Slides 2-N: one tip per slide, big number circle in `--accent-mint` ("01", "02"...) + 1-line tip
- Last slide: gradient background, white text "Built Easy RFP to fix this — easyhotelrfp.com"
- Use case: educational content, "5 things RFP processes get wrong", LinkedIn killer format

### Template E — "Reel/TikTok hook"
- 0.0-1.5s: pattern interrupt (face zoom, surprising stat, contrarian claim)
- 1.5-5s: problem statement
- 5-12s: tease the solution
- 12-15s: CTA — "link in bio" + logo flash
- Background music: trending audio (TikTok > IG Reels > FB Reels)
- Captions: ALWAYS baked in (80% watch muted)

**Each template lives as a Canva Free design** at `canva.com/design/EasyRFP-Template-{A,B,C,D,E}` — duplicate when creating, don't edit master.

---

## 6. Captions (text under the post)

### Length
- **Instagram:** first 125 chars are the "preview" — make them count. Total cap 2200 but optimal is 200-400.
- **LinkedIn:** 1300 chars max in feed, but cut at 200-300 for "see more" hook.
- **Facebook:** 80 chars before "see more" — front-load.
- **TikTok:** 150 chars in caption + speech is the real "caption".

### Structure (universal)
```
[Hook line — 1 sentence, conflict or question]
[Empty line]
[Context — 2-3 lines max]
[Empty line]
[CTA — 1 line, never "click the link" — use "DM us 'rfp'" or "comment your city"]
[Empty line]
[Hashtags — 5-15 max, network-appropriate]
```

### Hashtag pools (curated, free, low-spam)

**Instagram + TikTok (more is OK, max 15):**
```
#EventPlanning #MICE #Hospitality #HotelSourcing #VenueSourcing
#CorporateEvents #EventProfs #EventTech #RFP #GroupTravel
#Conferences #Weddings #StartupLife #EstoniaTech #SaaS
```

**LinkedIn (use 3-5 max, more = penalty):**
```
#EventManagement #MICEIndustry #B2BTech #HospitalityTech #Procurement
```

**Facebook (skip — they barely move the needle, use 0-3):**
```
#EventPlanning #HotelBooking
```

### Localization rules

When a post has EN/ES/DE variants:
- English: post to LinkedIn (global) + Instagram + Facebook
- Spanish: post to Instagram (audience LATAM/ES) + Facebook (es-ES Page section)
- German: post to LinkedIn (DACH professional audience) + Instagram

Never auto-translate. Use the human translations from `/site/_data/i18n/{en,es,de}/social.json`.

---

## 7. What NOT to post (Google spam policies + Easy RFP coherence)

- ❌ Stock photos of generic "businesspeople in suits". Use real screenshots of the product.
- ❌ "Limited time offer!!!" / "Act now!" / fake urgency. Easy RFP runs against this.
- ❌ AI-generated faces. Always real or 3C logo or product UI.
- ❌ Anything implying hotels pay for the platform. **Hotels never pay** — planner is the only customer. Hotels FREE FOREVER. (Memory rule, May 3.)
- ❌ Made-up testimonials. We have real ones from Martina; use them with permission only.
- ❌ Trending audio/dances unrelated to message. B2B credibility lost in 2 seconds.
- ❌ Cross-post raw with no adaptation. Each network has its native rhythm.

---

## 8. Asset library structure

In Supabase Storage, bucket `social-assets`:

```
/social-assets/
  /templates/
    template-A-stat.canva.url
    template-B-quote.canva.url
    template-C-beforeafter.canva.url
    template-D-carousel.canva.url
    template-E-reel.canva.url
  /logos/
    logo-3c-gradient-1080.png
    logo-wordmark-white-1080.png
  /backgrounds/
    bg-primary-1080.png
    bg-primary-1920x1080.png
    bg-gradient-1080.png
  /posts/
    /2026-05/
      post-001-en-{platform}.png
      post-001-es-{platform}.png
      post-001-de-{platform}.png
      ...
```

The publisher edge function references these paths via `social_posts.media_path`.

---

## 9. Emergency QA — pre-publish checklist (10 sec per post)

Before any post leaves Drafts:
- [ ] Logo present and not cropped
- [ ] Max 1 gradient element
- [ ] Headline ≤ 8 words (or appropriate per format)
- [ ] No claim that hotels pay — canonical: **hotels never pay**, planner is the only customer
- [ ] No fake urgency / scammy language
- [ ] CTA matches network norms (no "link in bio" on LinkedIn — they hate it)
- [ ] Captions baked into video posts (TikTok/Reels)
- [ ] UTMs correct on every link (use the helper in `social-publisher`)
- [ ] Language tag matches caption language
- [ ] Coherence check: no "€45" / "€120" / old hotel count / "Coming soon" / "Beta" markers

The `social-publisher` edge function automates checks 8-10. The first 7 are human-eye.
