# Easy RFP — Social Setup Playbook (Free, Day 1)

**Goal:** turn 4 fresh handles into properly-configured business accounts that can be auto-posted to via API at $0/month.

**Time required:** 90 min total, all 4 networks.
**Cost:** €0.
**Prerequisite:** corporate email on a domain you control (`contact@easyhotelrfp.com` already exists).

---

## 0. Naming convention (apply identically across all 4)

| Field | Value |
|---|---|
| Public name | `Easy RFP` |
| Handle | `@easyhotelrfp` (fallback `@easyrfp`) |
| Category | Business / Software / SaaS |
| Industry | Hospitality Technology |
| Website | `https://easyhotelrfp.com` |
| Email | `contact@easyhotelrfp.com` |
| Country | Estonia (OÜ) |
| Founded | 2025 |

**Do NOT use** `@easy_rfp`, `@easyhotel`, or any underscore/dot variant. Single canonical handle prevents impersonation and makes UTM-based attribution clean.

**Profile pic:** 3C logo on solid `#0F172A` background (1080×1080 PNG, exists at `/site/assets/logo-square-dark.png`).
**Cover image:** gradient `purple→pink` with tagline "Get your hotel quotes in hours, not weeks." (1500×500 PNG, generate from Handoff v5 tokens).

---

## 1. Facebook Page (15 min)

Order matters: Facebook unlocks Instagram. Always create Facebook first.

1. Login to a personal Facebook account (yours). Go to `facebook.com/pages/create`.
2. **Page name:** `Easy RFP`
3. **Category:** `Software` (primary), `Business Service` (secondary)
4. **Bio:**
   > Hotel quotes for events, conferences, weddings — in hours, not weeks. Free for hotels. GDPR-first. Made in Estonia. 🇪🇪
5. **Profile pic + cover** as above.
6. **About → Page Settings:**
   - Add website `https://easyhotelrfp.com`
   - Add email `contact@easyhotelrfp.com`
   - Add country/timezone (Estonia / Europe/Tallinn)
   - Toggle ON "Show 'Send Email' button" (CTA on profile)
7. **Roles → Page Roles:** add a backup admin (your personal account stays as primary, add `gustavo.belfiore@gmail.com` as Editor).
8. **Settings → Linked Accounts:** leave for now, we'll link Instagram in step 2.

**Validation:** profile loads cleanly on mobile, no missing-info banner, page is public.

---

## 2. Instagram Business (15 min)

**Critical:** Instagram MUST be a Business or Creator account, not Personal. Personal accounts can NOT auto-post via API. Period.

1. Install Instagram app on phone (or use web). Sign up with `contact@easyhotelrfp.com`.
2. **Username:** `easyhotelrfp`. **Display name:** `Easy RFP`.
3. **Profile pic:** same 3C logo.
4. **Bio (max 150 chars):**
   ```
   Hotel quotes for events in hours, not weeks.
   Free for hotels. 🇪🇪 Estonia.
   ↓ Get a quote in 2 min
   ```
5. **Bio link:** `https://easyhotelrfp.com/?utm_source=instagram&utm_medium=bio&utm_campaign=profile`
6. **Convert to Business account:**
   - Settings → Account → Switch to Professional Account
   - Choose **Business** (not Creator — Business gets full API access; Creator is gated)
   - Category: `Software`
   - Connect to the Facebook Page you created in step 1 (this is what unlocks the API)
7. **Verify Facebook link:** Settings → Linked Accounts → Facebook → confirm `Easy RFP` page is shown.
8. **Privacy:** keep account public.

**Validation:** profile shows "Business" badge in settings; "View Insights" appears on every post option.

---

## 3. LinkedIn Company Page (20 min)

LinkedIn is the highest-quality channel for Easy RFP (B2B event organizers live here). Do this carefully.

1. Login to your personal LinkedIn account. Go to `linkedin.com/company/setup/new/`.
2. Pick **Small business** (under 200 employees).
3. **Company name:** `Easy RFP`
4. **LinkedIn public URL:** `linkedin.com/company/easy-hotel-rfp` (claim now, hard to change later).
5. **Website:** `https://easyhotelrfp.com`
6. **Industry:** `Software Development`
7. **Company size:** `1-10 employees`
8. **Company type:** `Privately Held`
9. **Tagline:**
   > Hotel quotes for events in hours, not weeks. Free for hotels.
10. **About (max 2000 chars):**
    ```
    Easy RFP is a marketplace where event organizers post a brief once and get qualified quotes from matching hotels in 24-72 hours — instead of emailing 30 hotels manually and waiting two weeks.

    Free for hotels (forever). Free for organizers (Pro starts at €45/mo when you upgrade). GDPR-first by design. Built in Estonia.

    Use cases:
    • Corporate offsites & conferences
    • Wedding venue sourcing
    • Sports team accommodation
    • MICE (Meetings, Incentives, Conferences, Exhibitions)

    Pro €45/mo · Team €175/mo · Free plan available (LIVE on Stripe).
    ```
11. **Logo + cover:** same as FB.
12. **Specialties:** add `RFP automation`, `Hotel sourcing`, `MICE`, `Event planning`, `Hospitality tech`, `Group bookings`.
13. **Founded:** 2025. **HQ:** Tallinn, Estonia.
14. **Verify the page:** LinkedIn now requires domain verification for Company Pages. Add the meta tag they give you to the `<head>` of `easyhotelrfp.com` (15 min — paste in `_layouts/default.html` or via Cloudflare). Without verification you can't run ads or use API for some endpoints.

**Validation:** page is publicly visible, "Verified" badge appears within 24h of meta tag deploy.

---

## 4. TikTok Business (10 min) — caveat below

1. Download TikTok app. Sign up with `contact@easyhotelrfp.com`.
2. **Username:** `easyhotelrfp`. **Display name:** `Easy RFP`.
3. Profile pic: same 3C logo.
4. **Bio (max 80 chars):**
   ```
   Hotel quotes for events in 48h, not 2 weeks. Free for hotels. 🇪🇪
   ```
5. **Bio link:** `https://easyhotelrfp.com/?utm_source=tiktok&utm_medium=bio&utm_campaign=profile` (TikTok requires 1k+ followers to add a clickable bio link on personal accounts; Business accounts get it from day 1).
6. **Switch to Business Account:**
   - Profile → Settings → Manage account → Switch to Business Account
   - Category: `Software & App` (closest fit)
7. **Connect to TikTok for Business:** `business.tiktok.com` → register with the same email. This is REQUIRED for the Content Posting API.

**Caveat about auto-posting on TikTok:**

TikTok's Content Posting API has two modes:

- **DIRECT_POST** = posts immediately, no manual click. Requires app review & approval by TikTok (4-8 weeks, often denied for small devs).
- **UPLOAD** (default for new apps) = uploads to your Drafts inbox. You still tap "Post" in the app.

**Plan:**
1. Submit your TikTok Developer App for `video.publish` scope review **today** (5 min, async).
2. Until approved, TikTok runs in UPLOAD/reminder mode — Easy RFP edge function uploads the video, sends you a push via Resend email, you tap Post in the TikTok app.
3. Once approved, flip the `social_accounts.tiktok.mode` flag from `upload` to `direct_post`. Zero code change needed (the publisher fn handles both).

**This is the only "manual" piece. FB + IG + LinkedIn are fully automatic from day 1.**

---

## 5. Cross-linking (5 min)

After all 4 are live:

- **FB Page → About:** add Instagram + LinkedIn + TikTok URLs in "Other Pages and Profiles".
- **Instagram → Edit Profile:** add LinkedIn URL in bio (only 1 link allowed; use `https://easyhotelrfp.com/links` as a hub OR use Linktree-clone we'll build at `/links` later).
- **LinkedIn → Edit Page → Locations:** add IG + TikTok handles in "Featured" section.
- **TikTok → Edit Profile:** Instagram + YouTube fields are native; fill them in.

---

## 6. Get the API tokens (15 min)

You'll need 4 tokens for the social-publisher edge function. All free.

### 6.1 Meta Graph API (covers FB + Instagram together)

1. Go to `developers.facebook.com/apps/create/`.
2. App type: **Business**. App name: `Easy RFP Publisher`.
3. Add product: **Instagram** + **Pages**.
4. App Settings → Basic → fill privacy policy URL `https://easyhotelrfp.com/privacy` and ToS URL.
5. Tools → Graph API Explorer:
   - Get a User Access Token with permissions: `pages_show_list`, `pages_read_engagement`, `pages_manage_posts`, `instagram_basic`, `instagram_content_publish`, `business_management`.
   - This token is short-lived (1h). Exchange it for a long-lived (60-day) token via:
     ```
     GET https://graph.facebook.com/v19.0/oauth/access_token
       ?grant_type=fb_exchange_token
       &client_id={app-id}
       &client_secret={app-secret}
       &fb_exchange_token={short-lived-token}
     ```
   - Then exchange THAT for a Page Access Token (NEVER expires) via:
     ```
     GET https://graph.facebook.com/v19.0/{page-id}?fields=access_token&access_token={long-lived-user-token}
     ```
6. Save the **Page Access Token** as Supabase secret `META_GRAPH_PAGE_TOKEN`.
7. Save the **Page ID** as `META_FB_PAGE_ID`.
8. Save the **Instagram Business ID** (find via `GET /{page-id}?fields=instagram_business_account`) as `META_IG_BUSINESS_ID`.

### 6.2 LinkedIn API

1. Go to `linkedin.com/developers/apps/new`.
2. App name: `Easy RFP Publisher`. Company Page: select Easy RFP.
3. Products → request access to **Share on LinkedIn** + **Sign In with LinkedIn using OpenID Connect**. Auto-approved.
4. Auth → 3-legged OAuth flow. Redirect URI: `https://easyhotelrfp.com/oauth/linkedin/callback` (we'll create this stub page).
5. Scopes: `w_organization_social`, `r_organization_social`, `r_basic_profile`.
6. Run the auth flow once manually (URL: `https://www.linkedin.com/oauth/v2/authorization?response_type=code&client_id={id}&redirect_uri={uri}&scope=w_organization_social%20r_organization_social`), exchange the code for an access token, save as Supabase secret `LINKEDIN_TOKEN`.
7. Get your Organization URN: `GET https://api.linkedin.com/v2/organizationalEntityAcls?q=roleAssignee&role=ADMINISTRATOR&projection=(elements*(organizationalTarget~(localizedName)))` → save the URN (`urn:li:organization:XXXXXXX`) as `LINKEDIN_ORG_URN`.
8. Token lasts 60 days; re-auth flow is in `social-publisher` README.

### 6.3 TikTok API

1. Go to `developers.tiktok.com/apps/`.
2. Create app: `Easy RFP Publisher`. Category: Tools & Productivity.
3. Add scopes: `user.info.basic`, `video.upload`, `video.publish` (the last one triggers manual review — submit and wait 4-8 weeks).
4. Run OAuth flow → save access token as `TIKTOK_ACCESS_TOKEN` and refresh token as `TIKTOK_REFRESH_TOKEN`.
5. While waiting for `video.publish` approval, the publisher uses `video.upload` only (UPLOAD mode = drafts inbox).

---

## 7. Final checklist before deploying the edge function

- [ ] FB Page live with bio, logo, cover, website, email
- [ ] IG Business account converted, linked to FB Page, public
- [ ] LinkedIn Company Page verified (domain meta tag deployed)
- [ ] TikTok Business account active, TikTok for Business registered
- [ ] All 4 cross-linked
- [ ] Supabase secrets saved: `META_GRAPH_PAGE_TOKEN`, `META_FB_PAGE_ID`, `META_IG_BUSINESS_ID`, `LINKEDIN_TOKEN`, `LINKEDIN_ORG_URN`, `TIKTOK_ACCESS_TOKEN`, `TIKTOK_REFRESH_TOKEN`
- [ ] TikTok `video.publish` review submitted (async wait)
- [ ] Apply Mig 66 (next doc)
- [ ] Deploy `social-publisher` edge fn
- [ ] Run smoke test (1 post per network, manual trigger)

When all boxes are ticked, flip `social_accounts.publish_enabled = true` and the cron starts posting.
