Status Flow
Ready
→
Processing
→
Image Done
→
Exported
Sheet Tab
You fillRow ID, Topic Title, Content Type, content, Notes, Status
Set status toReady (capital R)
Machine fillsSEO Title, Meta Desc, Slug, Image URL, Filename, Alt Text
Content Types → Image Size
Blog / Facebook / All-In-One1200 × 628
Instagram-Square1080 × 1080
Instagram-Portrait1080 × 1350
Reel1080 × 1920
Images Land At
Blogimg.fit901.com/content-images/blog/
Socialimg.fit901.com/content-images/social/
Filename formatfit901_[desc]_[WxH]_[date].jpg
Triggers
AutoEvery 5 minutes
Manual webhookPOST /webhook/lean-image-machine
✅ Active — FAL.ai key set, FTP connected, running every 5 min
When to Run
Trigger whenYou have Image Done rows ready for GHL
Manual webhookPOST /webhook/ghl-export
After It Runs
- Open Google Sheet → Blog Export tab
- File → Download → Microsoft Excel
- Import xlsx into GHL Blog Importer
- Open Google Sheet → Social Export tab
- File → Download → Microsoft Excel
- Import xlsx into GHL Social Scheduler
- CLEAR both export tabs (delete all rows below header)
Blog Export Columns
TitleSEO-sharpened, ≤60 chars
Meta Imageimg.fit901.com URL
AuthorRob Yahn
Max rows/file60
⚠️ Clear Blog Export + Social Export tabs after every GHL import or you'll get duplicates.
Sheet
TabINPUT tab
You fillTopic/Working Title, Primary Keyword (required)
OptionalAudience, Target Offer, Angle/Hook, CTA URL
Leave blankStatus (machine sets it)
Schedule
Auto runsMon / Wed / Fri at 6:00 AM CT
Manual webhookPOST /webhook/content-generator
Status Flow
(blank)→ In Progress → Generated
You set toApproved (to push to GHL)
What It Generates
Blog post700–1000 words HTML, H2/H3, CTA at ~400 words
Facebook150–300 words, 3–5 hashtags
InstagramCaption + 15–25 hashtags
AlsoSEO title, slug, meta description, image prompt
Access
SSHssh root@178.104.85.204
FTP — img.fit901.com
Hostimg.fit901.com
Port21 (explicit FTPS)
UserSkeleton13@img.fit901.com
ntfy Topics (Subscribe in App)
Content / exportsfit901-content-engine
Server healthfenrir-businessdetonator-9x7k2m
Docs Files Location (Server)
Path/opt/docs/
Edit viaSSH → nano /opt/docs/[page].html
Always
CTA linkhttps://fit901.com/start
Brand nameFit 901 / CrossFit 901
LocationMemphis, Tennessee
Reading level~3rd grade — clear, direct
VoiceGritty, real, practical. No fluff. No hype.
Never
CTA pathNever use /intro
Medical adviceNever — soft disclaimer on health posts
Robotic AI toneNever
Image Style
VibeGritty, real, natural light
Modelfal-ai/flux/schnell
NoText overlays, logos, stock photo feel
YesReal gym atmosphere, functional fitness, Memphis
Slugs
Formatlowercase-hyphens-only, max 60 chars
DedupedMachine auto-dedupes on export
n8n Workflows
Lean Image MachineyVVPS3L0JRk2sBqy — ACTIVE
GHL ExportCzeUxFHvgFEuaApv — ACTIVE
Content Generator8C4YhXIhfC4xd9k6 — ACTIVE
GHL PublisherbvDatNpXgxrsVkF9 — ACTIVE
Dashboard SynccZsM9vDh9pJolbAO — ACTIVE
n8n Credentials
FAL.ai - Fit 901arQTGzFoII9tgOYz — key set ✓
FTP - img.fit901.comTcdFUIb3knr5hmCp — complete
Google Sheets SAR0DOYrvGxdCW8coy — active
Gemini - Fit 9010cIwRrCVpR7trsk6 — active
GHL - Fit 901xubHWiX5JC1iFdRI — active
Google Sheet
ID1pAxUwMIvnGGmJFcxwhnLAf_OqU3SvvlaOIMwHsgOQSQ
TabsContent Input, Blog Export, Social Export, Image Registry, Export Log