Admin console
—Submissions awaiting review
Add a listing PUBLISHES IMMEDIATELY
All listings
Domains here are permanently barred from re-entering the directory. The reject_blocked_domain BEFORE INSERT trigger raises on any attempt to insert a domain that matches. Add sparingly — this is the "never again" list, not the "not right now" list.
The two-way referral network from /partner.html. Partners keep 20% on referrals to Miss Pepper; Miss Pepper takes 10% on referrals out. Track partner enrollment, log referrals, and record payments.
Pending applications
Partner ledger
Add partner
Referrals
Payments
Contact-email coverage from the Apify enrichment passes. Rows without contact_email either haven't been enriched yet or failed strict-verified matching. Suppressed rows are excluded from any outbound campaign.
Coverage by category
Coverage by source
Suppressed listings
Composition by category
Top 15 US states
Hourly-rate distribution
Most recent additions (last 20)
Editorial briefings and the monthly state-of-the-index cadence. Briefings themselves live in build-news.mjs; this surface tracks pipeline state and lists what's published. Drafts (from generate-monthly-briefing.mjs) are gitignored and only exist on the operator's local machine.
Cadence snapshot
How to publish next month's briefing
- Locally:
node generate-monthly-briefing.mjs - Review
data/draft-briefing-YYYY-MM.txt— fill in the editorial paragraph - Paste into
build-updates.mjsUPDATES array node build-updates.mjs && node build-pages.mjs --pages-only- Commit + push. Live on the next Pages deploy.
Published briefings
Read-only viewer for the audit and reference reports committed to the repository. Files load from GitHub raw content on click.
AI-agent visits to HTML pages, captured client-side by nav.js. Covers browsing agents that execute JS (ChatGPT search, Perplexity, Claude web, GPTBot/PerplexityBot when interactive). Direct fetches to /llms.txt or /llms/*.txt are static GETs and don't appear here — see docs/agent-layer-notes.md for the Cloudflare path.