Spaces:
Runtime error
Runtime error
| title: GuestPostSuggester | |
| emoji: π» | |
| colorFrom: blue | |
| colorTo: red | |
| sdk: gradio | |
| sdk_version: 6.19.0 | |
| python_version: '3.13' | |
| app_file: app.py | |
| pinned: false | |
| license: mit | |
| short_description: Find live guest-post sites, ranked by authority | |
| # GuestPostSuggester | |
| Search a catalog of ~32,000 guest-post-accepting websites for sites relevant to your topic. | |
| Search is free and local (TF-IDF text matching, no AI call). Results are live-checked for | |
| reachability and ranked by OpenPageRank domain authority. Click "Analyze" on any result to | |
| crawl its blog and get ~5 AI-suggested guest-post topic ideas that fit its niche but aren't | |
| already covered β this step calls an LLM billed to your own Hugging Face token. | |
| ## How it works | |
| 1. **Search** β enter a topic. A local TF-IDF text match (no LLM, no cost) shortlists | |
| relevant sites from the catalog by their title/domain/niche. | |
| 2. **Availability check** β before any site is shown, its root domain is checked for live | |
| reachability (httpx), so dead/parked/unreachable sites never appear in results. | |
| 3. **Ranking** β surviving sites are sorted by precomputed OpenPageRank domain authority and | |
| shown 10 at a time; "More" reveals the next 10 below. | |
| 4. **Analyze** (per result, needs your HF token) β crawls the site's blog for its existing | |
| post titles (RSS β WordPress REST API β sitemap β keyword-based blog-page discovery β | |
| AI-assisted HTML discovery, cheapest method first, AI only as a last resort), then an | |
| LLM suggests ~5 guest-post topics that fit the site but aren't already covered. | |
| ## Configuration (Space owner) | |
| - **Secret `OPR_API_KEY`** β a free [OpenPageRank](https://www.domcop.com/openpagerank/auth/signup) | |
| API key. Only needed to re-run/refresh the authority-score precompute later β the Space | |
| ships with `data/opr_scores.json` prebuilt, so this isn't required for normal operation. | |
| - **Persistent storage** *(optional)* β if enabled, `/data` caches domain-availability checks, | |
| crawled title libraries, and suggestions across restarts. Without it the app still works; | |
| caches just don't persist between restarts. | |
| ## Billing | |
| The search and ranking steps are entirely free and local. The Analyze step's LLM calls run | |
| through **Hugging Face Inference Providers using the token you enter in the UI**, so they are | |
| billed to **you**. The token is used only for that request and is not stored. | |