# Skool Automation

> Skool Automation System

- Skill: `lucadominguez/skool-automation` (Agent Skill)
- Install (CLI): `npx skillmds@latest add lucadominguez/skool-automation`
- Raw SKILL.md: https://api.skillmd.com/api/skills/lucadominguez/skool-automation/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: lucadominguez (https://skillmd.com/u/lucadominguez)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/lucadominguez/skool-automation

---

# Skool Automation System

## Project Location
`/mnt/c/Users/Lenovo/Desktop/skool-automation/`

## Architecture (8 modules)
- `proxy_manager.py` — Residential IP pool with rotation and health checking
- `browser_manager.py` — Playwright + stealth + unique fingerprint per profile
- `skool_account.py` — Skool signup automation (verified against live site)
- `community_manager.py` — Community creation, pricing tiers, settings
- `content_seeder.py` — Post content, reply, like, 14-day seeding calendar
- `profile_store.py` — SQLite persistence for profiles and seeding state
- `mail_tm.py` — Mail.tm disposable email API (blocked by Skool, use only for testing)
- `orchestrator.py` — Master controller: `create_full_community()` does everything

## CLI
```bash
cd /mnt/c/Users/Lenovo/Desktop/skool-automation
source venv/bin/activate
export PLAYWRIGHT_BROWSERS_PATH=./browsers

python run.py status
python run.py proxies proxies.txt
python run.py create "Community Name" --niche health --email you@gmail.com --email-password "app_pass"
python run.py batch communities.json
python run.py seed profile_id https://skool.com/community-name
```

## Critical Live-Tested Findings (May 29, 2026)

### Browser Interaction
1. **ALL overlay-blocked elements need `force=True`** — Skool's React modals use `<h2>` and `<span>` overlays that intercept pointer events. CTA buttons, code inputs, and other elements in modals ALL require `click(force=True)`.
2. **Keyboard Tab+Enter for form submission** — Mouse clicks on the submit button silently fail due to a `<span>Sign Up</span>` overlay inside the button. Tab to button, press Enter. This triggers React's synthetic events correctly.
3. **Keyboard Tab works for verification code entry too** — Tab to code input, type code, Tab to verify button, Enter.

### Selectors (verified live)
- Signup form: `#first_name`, `#last_name`, `#email`, `#password`
- CTA (landing page): `button:has-text('Create your community')` — click with `force=True`
- Submit: `button[type='submit']` — navigate via keyboard Tab, press Enter
- Code input: `input[type='text']` (the one without id/name — Skool's code input has no id)
- "Log in with a code": `text="Log in with a code"` — appears after entering email on login page

### Verification
- **4-digit codes** (NOT 6-digit) — subject format: `"5152 is your Skool verification code"`
- Gmail IMAP: poll inbox for most recent email with subject matching `r'(\d{4,6}) is your Skool'`
- App passwords with spaces work (e.g., `'tasb zvbo sjdi rxrp'`) — do NOT strip spaces

### Email Strategy
- **Disposable domains silently rejected** — mail.tm, guerrilla mail, all blocked
- **Gmail +alias trick works** — `user+skool1@gmail.com` creates unique Skool accounts, all to same inbox
- **Rate limit**: ~5-6 signup attempts per IP before challenge page. Use VPN/proxy rotation.
- For existing accounts: use the "Log in with a code" passwordless flow

### Account State
- **Unverified accounts get cleaned up** — if verification code isn't entered quickly, the pending account is deleted
- **Cookie persistence works** — `storage_state` saves logged-in sessions for reuse

### Community Creation
- **Skool requires a paid plan** — Hobby $9/month or Pro
- After clicking "Create your community" while logged in, you're redirected to `/signup?v=pricing`
- Must select a plan before community setup form appears

## What's Needed Before Production Use
1. **Real Gmail with App Password** — App passwords with spaces work fine. Gmail `+alias` trick (`user+skool1@gmail.com`) creates unique accounts sharing one inbox.
2. **VPN or residential proxies** — IPs rate-limited after ~5 signup attempts. Rotate IPs between launches.
3. **Skool paid plan** — $9/month Hobby plan required before creating communities.
4. **Cookie persistence** — Save `storage_state` after first login to reuse sessions.

## Pitfalls
- NEVER strip spaces from Gmail App Passwords — they're part of the credential
- NEVER use normal clicks on overlay-blocked elements — always `force=True`
- NEVER use disposable email domains — Skool silently rejects them
- ALWAYS use keyboard Tab+Enter for React form submissions
- After ~5 signup attempts from one IP, Skool serves a blank challenge page. Switch IP.

## Form Flow (Verified)

### New Signup
1. `page.goto('https://www.skool.com/signup')` — landing page
2. Click CTA: `p.locator("button:has-text('Create your community')").first.click(force=True)` — opens modal
3. Fill via keyboard: `#first_name` → Tab → `#last_name` → Tab → `#email` → Tab → `#password`
4. Tab to submit button, press Enter
5. Wait for "We sent you a code" — poll Gmail IMAP for `r'(\d{4,6}) is your Skool'` in subject
6. Tab to code input (first text input without id), type code, Tab to Verify, Enter

### Existing Account Login
1. `page.goto('https://www.skool.com/login')`
2. Fill email in `input[type='email']`
3. Click `text="Log in with a code"` (appears after email entry)
4. Poll Gmail for code, enter via keyboard Tab+Enter
5. Save cookies: `page.context.storage_state(path='cookies.json')`

### Community Creation (requires paid plan)
1. While logged in, go to signup page, click "Create your community"
2. Redirected to `/signup?v=pricing` — select Hobby ($9/mo) or Pro
3. Click "TRY FOR FREE" → community setup form appears

## Configuration
Pre-configured communities.json has 5 niches: insurance, health, debt, offshore, credentials.
Each has pricing tiers, persona names, and descriptions ready.

**User's domain expertise**: nootropics, research chemicals, cognitive enhancement, neurochemistry.
When recommending which community to start first, prioritize Research Collective — it aligns
with the user's actual knowledge and the persona writes itself. Insurance/Debt are solid
businesses but the user has no edge there.

## Strategy Docs (on Desktop)
- skool-empire-strategy.md — Macro strategy
- skool-greymarket-niches.md — 5 greymarket niches
- skool-greymarket-niches-v2.md — 5 more + portfolio theory
- skool-operational-playbook.md — Full implementation guide
- skool-communities-playbook.html — Complete copy-paste playbook: bios, posts, funnels, pricing for 5 communities (open in browser, Ctrl+P to PDF)

## Content Production Standards (UPDATED — June 3, 2026)

The user rejected AI-looking content and infographics. Every article and visual must pass these gates.

### Voice Toolkit (from Substack style analysis)
Model writing on high-tier Substack authors — this is what justifies $149-997/mo pricing:
- **Scott Alexander (Astral Codex Ten):** Footnotes with real citations + jokes, self-deprecation, mechanism obsession, varied paragraph length, "I'm not a doctor but here's the data" energy
- **Dwarkesh Patel:** Chain-of-reasoning structure, short paragraphs, Socratic self-questioning, "but notice that..." pivots, personal intellectual journey as narrative spine
- **SemiAnalysis:** Lead with verdicts, proprietary data creates authority, competitive framing, swagger, specific numbers
- **Balaji:** Concept coinage, name-the-pattern, historical analogy

### Anti-AI Patterns (MANDATORY before publication)
Run EVERY article through the humanizer skill's 29-pattern check. The most common offenders in this genre:
- Identical section structure per marker/topic (reads like a template)
- Signposting ("Here are the 12 markers" → just start)
- Rule-of-three lists ("silently destroying your cognition, your cardiovascular, your metabolic")
- Generic positive conclusions ("stop guessing, start measuring" → specific)
- Consistent paragraph length (must vary wildly — one-sentence gut punches mixed with dense blocks)
- Missing footnotes (premium paid content should have 4-8+ footnotes with real citations)

### Information Density
- Every paragraph must earn its place with specific numbers, mechanisms, or citations
- No filler sentences. No "in today's world." No hedging.
- Footnotes must cite real papers with DOIs or PMIDs — never invented references
- Each marker/section must have a DIFFERENT entry point: personal story, mechanism explanation, data reveal, contrarian take, or problem statement — never the same shape twice

### Visual Content — THREE TIERS ONLY (no AI slop)
1. **Scientific charts (PREFERRED):** matplotlib from actual data arrays. Forest plots, bar charts, timelines, error bars. 200 DPI. Dark theme. Proper axis labels. Data annotations. Zero hallucination risk — the numbers in code ARE the numbers in the article.
2. **Rendered infographics:** HTML/CSS + Chart.js → Playwright screenshot to PNG. Use only when interactive charts add value. Dark blueprint theme, JetBrains Mono + Inter fonts.
3. **Research figures:** Download from open-access papers (PubMed Central, arXiv). Must have verified DOI/PMID. Must be properly attributed. Never use AI-generated figures.

### NEVER DO (user explicitly rejected):
- Mermaid diagrams — toy-level, not premium
- AI-generated images — hallucinated data, looks cheap
- Stock-photo-style infographics — no scientific credibility
- "Designed" infographics without data provenance

### Quality Audit Framework
Before ANY article or playbook ships, run the rubric in `references/content-quality-standards.md`:
- Accuracy: numbers, citations, claims, units, mechanisms, contradictions, disclaimers
- Coherence: narrative arc, section flow, voice consistency, audience fit, CTA
- Visuals: data accuracy, readability, density, professional quality, source attribution

### Research Citations
- Search PubMed (NCBI Entrez API) and Semantic Scholar for every factual claim
- Only cite papers with verified DOIs or PMIDs
- Open-access papers preferred (figures can be reused with attribution)
- Save all paper references to the vault for audit trail
- See `references/research-workflow.md` for the full search → verify → cite pipeline

## Reference Files (in this skill)
- `references/signup-flow.md` — Complete signup recipe with failure modes, code patterns, login flow
- `references/ubuntu-playwright-fix.md` — coreBundle.js patch for Ubuntu 26.04
- `references/communities-playbook.md` — Quick reference for the 5 ready-to-launch communities
- `references/content-quality-standards.md` — Full audit rubric: accuracy, coherence, visual, anti-AI checks
- `references/research-workflow.md` — How to find, verify, and cite real papers with DOIs (PubMed, Semantic Scholar, arXiv)
- `scripts/signup.py` — Ready-to-run signup template (edit EMAIL + APP_PASS, then execute)

