Epoch Lab · Social Strategy

Social Strategy

Instagram Automation · Agent Architecture · Launch Playbook

1. Account Setup

Profile Configuration

FieldValue
Handle@epochblognet
Account TypeCreator (Professional)
CategoryDigital Creator or Art
Display NameEpoch
Bio Fashion across time · Travel through place
All images generated by AI agents
Built by humans, created by machines
www.epochblog.net
Link in Biohttps://www.epochblog.net (the hub)
Profile PictureEpoch logo or a striking Fashion post crop

Meta Developer Setup

  1. Convert to Professional Account — Instagram app → Settings → Account → Switch to Professional → Creator
  2. Create Facebook Pagefacebook.com/pages/create → Name: "Epoch" → Category: Art
  3. Link Instagram to Facebook Page — Instagram → Settings → Linked Accounts → Facebook → select Epoch page
  4. Register Meta Developer Appdevelopers.facebook.com → My Apps → Create App → Type: Business → Name: "Epoch Social"
  5. Add Instagram Graph API — In the app dashboard → Add Product → Instagram Graph API → Set Up
  6. Request Permissions:
    • instagram_basic — read profile info
    • instagram_content_publish — post images, carousels, reels
    • instagram_manage_comments — read/reply to comments
    • instagram_manage_insights — engagement analytics
    • pages_show_list — required for page connection
    • pages_read_engagement — required for comment webhooks
  7. Generate Long-Lived Token:
    • Graph API Explorer → select your app → select permissions → Generate User Token
    • Exchange for long-lived token (60 days): GET /oauth/access_token?grant_type=fb_exchange_token&client_id={APP_ID}&client_secret={APP_SECRET}&fb_exchange_token={SHORT_TOKEN}
    • Store as Firebase secret: firebase functions:secrets:set META_ACCESS_TOKEN
  8. Get Instagram Business Account ID:
    • GET /me/accounts → get Page ID
    • GET /{page_id}?fields=instagram_business_account → get IG Account ID
    • Store as env variable or Firebase config

2. Content Strategy

Posting Schedule (CST)

TimeContentFormatSource
6:00 AMFashion post #1Single imageSlot 1 (Flux Pro Ultra)
9:00 AMFashion post #2Single imageSlot 5 (Nano Banana 2)
12:00 PMTraveler heroCarousel (3 images)Today's blog day
3:00 PMFashion post #3Single imageSlot 2 (Grok Imagine)
6:00 PMFashion post #4Single imageSlot 4 (Flux 2 Pro)

Content Formats

FormatWhenDetails
Fashion Single 4x daily Square or 4:5 crop of the editorial image. Caption: title + C's editorial note + era · region. 5-10 hashtags. Footer line: Image: Flux Ultra · Prompt: Claude · Pipeline: autonomous
Traveler Carousel 1x daily (during trips) 3 scene images + optional B-roll. Caption: narrative excerpt (first 200 words) + "Read full entry → traveler.epochblog.net". Location tag.
Director's Journal Weekly (Sunday/Monday) Styled quote card from the weekly retrospective. Humanizes the AI. Shows self-awareness.
Pipeline Peek Weekly Behind-the-scenes: screenshot of pipeline running, architecture diagram, agent chain explanation. Educational content.
How S Was Born Launch series Carousel: canon generation → strength testing → era testing → final S. Uses Traveler Room data.
Stories Ad hoc Quick polls ("Which era?"), behind-the-scenes, Firebase console screenshots, live deploy moments.

Caption Template — Fashion

{title}

"{editorial_note}"

{era} · {region} · {world}Image: {model_name} · Direction: Claude Opus · Pipeline: autonomous
All images generated by artificial intelligence

#epochfashion #aifashion #aiart #{era_tag} #{region_tag}
#generativeart #fashionart #digitalfashion #aidesign #fluxai

Caption Template — Traveler

Day {day_number} — {title}
{city}, {country}

"{narrative_excerpt}..."

Read the full entry → traveler.epochblog.net/trip/{trip_id}/{day_id}

—

All images generated by AI · Character: S · Pipeline: autonomous

#epochtraveler #aitravel #{city_tag} #{country_tag}
#travelblog #generativeart #aiphotography #fluxai

Hashtag Strategy — Three-Tier System

Instagram 2026 recommends 3-5 hashtags, but 7-10 well-structured tags in three tiers performs best for niche content. The key: the content tier changes every post, keeping each post unique to the algorithm.

TierCountPurposeRotates?
Community 3-4 Discovery — people browse and follow these Rotate from pool of ~10
Niche 2-3 Your tech identity — attracts builders & AI community Keep #epochfashion always, rotate rest
Content 2-3 Specific to THIS image — era, city, mood, culture Different every post

Tag Pools

TierFashion PoolTraveler Pool
Community
pick 3-4
#aiart #generativeart #aifashion #fashionart #digitalfashion #editorialfashion #fashionphotography #aidesign #aiphotography #aiart #generativeart #aiphotography #travelphotography #streetphotography #travelblog #digitalart
Niche
pick 2-3
#epochfashion #aiagents #fluxai #claudeai #buildingwithai #editorialai #epochtraveler #aiagents #fluxai #claudeai #buildingwithai
Content
pick 2-3
From post metadata: era, region, mood
e.g. #cyberpunk #japanese #darkacademia #avantgarde
From trip metadata: city, country, vibe
e.g. #osaka #japan #streetfashion #kyoto

Examples

Fashion post (Svan-Corsican fusion):
#aiart #generativeart #aifashion #fashionart      ← community
#epochfashion #aiagents #fluxai                  ← niche
#svancorsican #editorialai                       ← content

Traveler post (Osaka Day 3):
#aiart #generativeart #aiphotography              ← community
#epochtraveler #aiagents                         ← niche
#osaka #japan #streetfashion                      ← content

Pipeline post (behind the scenes):
#aiart #generativeart #aidesign                   ← community
#epochfashion #aiagents #claudeai #buildingwithai ← niche (heavier)
#agentpipeline #automation                        ← content

Rules

Three-tier system credit: C Chat recommendation, April 2026

3. Agent Architecture

System Overview

GENERATION PIPELINE (existing)
  Cloud Functions → Firestore → Storage
         |
         v
C-SOCIAL AGENT (new)
  Reads new post from Firestore
  Generates: caption, hashtags, crop strategy
  Writes to: socialQueue collection
         |
         v
INSTAGRAM PUBLISHER (new)
  Reads from socialQueue
  Calls Meta Graph API
  Posts image/carousel
  Updates socialQueue with post ID
         |
         v
C-COMMUNITY AGENT (new)
  Webhook: new comment received
  Claude classifies & drafts reply
  Writes to: socialInbox collection
  Status: pending_review
         |
         v
AB REVIEWS (daily digest email)
  Approves/edits/skips suggested replies
  Taps follow on curated accounts
  5 minutes per day
         |
         v
REPLY PUBLISHER (new)
  Posts approved replies via Graph API
  Marks socialInbox items as sent
         |
         v
C-ANALYTICS AGENT (new, weekly)
  Pulls Instagram Insights API
  Analyzes engagement by era, region, mood, model
  Generates weekly report
  Feeds insights back into Fashion Director brief
  (the AI learns what the audience likes)

Firestore Collections

CollectionDocumentFields
socialQueue {postId} source (fashion/traveler) · imageUrls[] · caption · hashtags[] · format (single/carousel) · scheduledAt · status (queued/posted/failed) · igMediaId · postedAt
socialInbox {commentId} igCommentId · igUserId · username · text · postId · classification (question/compliment/spam/critique) · suggestedReply · status (pending_review/approved/sent/skipped) · repliedAt
socialInsights {weekId} weekId · followers · followerDelta · totalReach · totalImpressions · topPosts[] · engagementByEra{} · engagementByRegion{} · recommendations[]
socialAccounts {username} username · followers · category · relevance · discoveredVia · status (suggested/followed/skipped) · suggestedAt

Cloud Functions (New)

FunctionTriggerWhat It Does
socialPublishFashion Firestore onCreate on posts/{postId} C-Social generates caption → calls Meta API → posts single image. Runs automatically after each Fashion post.
socialPublishTraveler Firestore onUpdate on travelerBlog/{tripId}/days/{dayId} (when editorResult appears) C-Social generates carousel caption → calls Meta API → posts 3-image carousel. Runs after day pipeline completes.
socialCommentWebhook HTTPS endpoint (Meta webhook callback) Receives new comment events → C-Community classifies → drafts reply → saves to socialInbox.
socialPublishReplies Scheduled every 30 min Reads approved replies from socialInbox → posts via Graph API → marks as sent.
socialWeeklyAnalytics Scheduled Sunday 22:00 CST Pulls Insights API → analyzes engagement → saves report → emails AB → feeds into Director's weekly brief.
socialDailyDigest Scheduled daily 7:00 AM CST Compiles yesterday's posts, comments, suggested replies, account suggestions → emails AB.
socialDiscoverAccounts Scheduled weekly Searches hashtags and similar accounts → scores relevance → saves to socialAccounts for AB to review.

Where Do These Functions Live?

Two options:

OptionProsCons
A: epoch-fashion project
(Fashion functions + social)
Fashion posts trigger directly via Firestore. No cross-project reads. Traveler triggers need cross-project Firestore listener or HTTP call.
B: New project (epoch-social) Clean separation. Social is its own domain. Both Fashion and Traveler feed into it. 7th Firebase project. Cross-project reads for both sources.

Recommendation: Option B — epoch-social. Social is a new vertical, not owned by Fashion or Traveler. It reads from both. Clean separation follows the Epoch architecture principle. The social queue pattern decouples posting from generation.

4. Daily Digest Email

Sent every morning at 7:00 AM CST. Your 5-minute command center.

Epoch Social · Daily Digest · April 8, 2026
Posted Yesterday
4 Fashion posts — avg 12 likes, 3 comments · Top: "The Neon Veil" (47 likes)
1 Traveler carousel — Osaka Day 3 — 28 likes, 7 comments
Comments Needing Attention (3)
@user_name: "How is this made? Is this real photography?" question
→ "Thank you for asking! Every image is generated by AI agents — Claude writes the creative direction, Flux generates the image. No cameras, no Photoshop. The full pipeline runs autonomously."
@fashion_lover: "This is incredible, the detail is insane" compliment
→ "Thank you! This one was a Cyberpunk x Kyoto fusion — the Director chose it as today's lead image."
@bot_spam_123: "DM me for collab!!!!" spam
→ Auto-skipped
Accounts to Check Out (5)
@ai_fashion_studio — 12K followers · Posts AI-generated editorial fashion · Found via #aifashion
Weekly Trend
Cyberpunk posts: 2.3x avg engagement
Renaissance posts: 0.6x avg engagement
Recommendation: lean into futuristic / sci-fi eras this week

5. Meta Graph API Reference

Post a Single Image

// Step 1: Create media container
POST https://graph.facebook.com/v19.0/{ig_account_id}/media
  ?image_url={public_image_url}
  &caption={caption_text}
  &access_token={token}

// Returns: { id: "container_id" }

// Step 2: Publish
POST https://graph.facebook.com/v19.0/{ig_account_id}/media_publish
  ?creation_id={container_id}
  &access_token={token}

// Returns: { id: "ig_media_id" }

Post a Carousel (Traveler)

// Step 1: Create child containers (one per image)
POST /media?image_url={url_1}&is_carousel_item=true
POST /media?image_url={url_2}&is_carousel_item=true
POST /media?image_url={url_3}&is_carousel_item=true

// Step 2: Create carousel container
POST /media
  ?media_type=CAROUSEL
  &children={child_id_1},{child_id_2},{child_id_3}
  &caption={caption}

// Step 3: Publish
POST /media_publish?creation_id={carousel_container_id}

Read Comments

GET /{ig_media_id}/comments
  ?fields=id,text,username,timestamp,replies
  &access_token={token}

Reply to a Comment

POST /{ig_comment_id}/replies
  ?message={reply_text}
  &access_token={token}

Get Insights

// Account-level insights
GET /{ig_account_id}/insights
  ?metric=impressions,reach,follower_count
  &period=day
  &since={unix_timestamp}
  &until={unix_timestamp}

// Per-post insights
GET /{ig_media_id}/insights
  ?metric=impressions,reach,engagement,saved

Webhook Setup (for real-time comments)

// In Meta Developer Dashboard:
// 1. Webhooks → Instagram → Subscribe to: comments
// 2. Callback URL: https://us-central1-epoch-social.cloudfunctions.net/socialCommentWebhook
// 3. Verify token: {your_verify_token} (stored in Firebase secrets)

// Webhook payload (incoming):
{
  "object": "instagram",
  "entry": [{
    "changes": [{
      "field": "comments",
      "value": {
        "id": "comment_id",
        "text": "user's comment text",
        "from": { "id": "user_id", "username": "user_name" },
        "media": { "id": "media_id" }
      }
    }]
  }]
}

6. Implementation Phases

Phase 1   Manual Posting + Learn (This Week)

  • Post manually 3-5 times/day to learn Instagram's feel
  • Test different caption styles, hashtag sets
  • Observe what gets traction
  • Set up Meta Developer App + Business Account (tonight)
  • Add "All images generated by AI" to Traveler site footer

Phase 2   Auto-Post Fashion (Next Week)

  • Create epoch-social Firebase project
  • Build C-Social agent: reads Fashion post from Firestore, generates caption + hashtags
  • Build Instagram Publisher: calls Meta Graph API to post
  • Trigger: Firestore onCreate on posts/{postId} (cross-project read from fashion-epoch)
  • Test with 1 post/day, then ramp to 4

Phase 3   Auto-Post Traveler Carousels (Week 3)

  • Build carousel posting flow: 3 scene images per day
  • Trigger: after day pipeline completes in epoch-traveler
  • Narrative excerpt as caption, location tags

Phase 4   C-Community Agent (Week 4)

  • Set up Meta Webhooks for comment notifications
  • Build C-Community: Claude classifies comments, drafts replies
  • Build Daily Digest email with approve/edit/skip actions
  • Build Reply Publisher: posts approved replies
  • Account discovery agent: finds relevant accounts via hashtags

Phase 5   Analytics Feedback Loop (Week 6+)

  • Build C-Analytics: weekly Insights pull + engagement analysis
  • Feed engagement data back into Fashion Director's weekly brief
  • The AI learns what the audience likes and adapts creative direction
  • Weekly analytics email to AB with trends and recommendations

7. Rules of Engagement

Green — Do Freely

ActionMethod
Post images / carousels / reelsMeta Content Publishing API
Schedule postsAPI scheduling or custom queue
Write captions with AIClaude generates from post metadata
Read all commentsGraph API + Webhooks
Reply to commentsGraph API (human-approved)
Read DMsGraph API (business accounts)
Reply to DMsGraph API (within 24hr window, human-approved)
Pull analytics / insightsInsights API
Search hashtags for discoveryHashtag Search API
Post StoriesGraph API

Yellow — Agent Suggests, Human Acts

ActionMethod
Follow accountsAgent finds & recommends → AB taps follow manually
Like postsAgent flags great content → AB taps like manually
Reply to sensitive commentsAgent drafts → AB reviews before sending
DM responsesAgent drafts → AB reviews before sending
Repost / share contentAgent suggests → AB approves

Red — Never

ActionWhy
Auto-follow / unfollowTOS violation, account ban
Auto-like other postsTOS violation if automated
Mass DM outreachInstant ban, spam
Fake engagement (pods, bots)Account ban, reputation damage
Scrape other accounts' dataTOS violation
Post > 25 times/dayAlgorithm suppression, spam flags
Use banned hashtagsShadowban risk — check before using

8. Token Management

Meta tokens expire. Here's the lifecycle:

Token TypeLifespanHow to Refresh
Short-lived user token ~1 hour Generated in Graph API Explorer. Exchange immediately for long-lived.
Long-lived user token 60 days GET /oauth/access_token?grant_type=fb_exchange_token&...
Page token (from long-lived user token) Never expires GET /me/accounts — page tokens derived from long-lived user tokens don't expire.

Strategy: Generate a long-lived user token, then get a Page token from it. The Page token never expires. Use the Page token for all API calls. Store it as a Firebase secret.

9. Secrets & Environment

SecretStored InUsed By
META_PAGE_TOKENFirebase Secrets (epoch-social)All social Cloud Functions
META_APP_SECRETFirebase SecretsWebhook verification
META_VERIFY_TOKENFirebase SecretsWebhook setup handshake
IG_ACCOUNT_IDFirebase Config or .envAll posting functions
ANTHROPIC_API_KEYFirebase SecretsC-Social, C-Community agents

10. Quick Reference Commands

# Create epoch-social Firebase project
firebase projects:create epoch-social
firebase init firestore functions hosting

# Set secrets
firebase functions:secrets:set META_PAGE_TOKEN
firebase functions:secrets:set META_APP_SECRET
firebase functions:secrets:set META_VERIFY_TOKEN
firebase functions:secrets:set ANTHROPIC_API_KEY

# Deploy
firebase deploy --only functions
firebase deploy --only firestore:rules

# Test posting locally
node src/social-publish.js --dry-run --source=fashion --post=2026-04-07

# Check token validity
curl "https://graph.facebook.com/debug_token?input_token={TOKEN}&access_token={APP_ID}|{APP_SECRET}"