Skip to content

Commit a683638

Browse files
authored
docs: reshape hero path into Getting Started funnel (#1254)
Point readers through Docker auto-source quickstart → deployment → advanced feeds; fold MCP/CLI/skill docs onto the same path and redirect legacy /web-application/getting-started/.
1 parent bc378ed commit a683638

26 files changed

Lines changed: 431 additions & 695 deletions

‎AGENTS.md‎

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -86,18 +86,18 @@ Preferred verification flow for docs/content changes:
8686

8787
### User Journey Funnel
8888

89-
Maintain a directed "funnel" for documentation to maximize user success and conversion:
89+
Keep docs pointed along one success path:
9090

91-
1. **Phase 1: Quickstart (Local Demo)** — The primary entry point. Run `html2rss-web` with Docker and generate a feed from a page URL in minutes.
92-
2. **Phase 2: Production (Deployment)** — The goal for invested users. Move to a stable, production-ready instance.
93-
3. **Phase 3: Refinement (Custom Configs)** — Secondary optimization. Author custom YAML configs only when automatic generation needs precise control.
91+
1. **Getting Started** — Run `html2rss-web` with Docker; paste a page URL; open the generated feed.
92+
2. **Deployment** — Production compose, tokens, LAN HTTP vs HTTPS reverse proxy.
93+
3. **Advanced Feeds** — Custom YAML only when auto-source needs precise control (escape hatch).
9494

95-
**Rules for Funnel Maintenance:**
95+
**Rules:**
9696

97-
- Avoid branching paths in introductory pages; always point toward the next phase in the funnel.
98-
- Define "html2rss-web" as the primary interface and "page-to-RSS" as the primary workflow.
99-
- Use "Feed Directory" consistently to refer to the pre-built feed catalog; avoid terms like "catalog", "included feeds", or "packaged configs" in user-facing docs.
100-
- Do not introduce new terminology (e.g., "toolkit") or unrelated infrastructure concepts (e.g., "custom domains") unless they are essential to a specific guide.
97+
- Introductory pages hand off to the next step; do not fork the reader into parallel “primary” paths.
98+
- `html2rss-web` is the primary interface; page-URL auto-source is the primary workflow.
99+
- Say **Feed Directory** for the curated feed list; avoid “catalog”, “included feeds”, or “packaged configs” in user-facing copy.
100+
- Do not invent product terms or infrastructure side quests unless a specific operator guide needs them.
101101

102102
### Code Snippets
103103

‎astro.config.mjs‎

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export default defineConfig({
1313
"/components/html2rss": "/ruby-gem/",
1414
"/components/html2rss-configs": "/creating-custom-feeds/",
1515
"/components": "/",
16+
"/web-application/getting-started/": "/getting-started/",
1617
"/web-application/how-to/deployment": "/web-application/deployment/",
1718
"/web-application/how-to/automatic-updates": "/web-application/deployment/",
1819
"/web-application/how-to/use-automatic-feed-generation":
@@ -267,15 +268,10 @@ export default defineConfig({
267268
link: "/feed-directory/",
268269
},
269270
{
270-
label: "Create Custom Feeds",
271-
link: "/creating-custom-feeds/",
272-
},
273-
{
274-
label: "Web Application",
275-
collapsed: true,
271+
label: "Self-Hosting & Deployment",
272+
collapsed: false,
276273
items: [
277274
"web-application",
278-
"web-application/getting-started",
279275
"web-application/deployment",
280276
{
281277
label: "Guides",
@@ -288,7 +284,20 @@ export default defineConfig({
288284
],
289285
},
290286
{
291-
label: "Ruby Gem",
287+
label: "How It Works",
288+
link: "/web-application/concepts/",
289+
},
290+
{
291+
label: "AI Agent Workflows & MCP",
292+
collapsed: false,
293+
items: ["ruby-gem/guides/ai-agent-workflows", "ruby-gem/reference/mcp-server"],
294+
},
295+
{
296+
label: "Advanced Feeds",
297+
link: "/creating-custom-feeds/",
298+
},
299+
{
300+
label: "Ruby Gem & CLI",
292301
collapsed: true,
293302
items: [
294303
"ruby-gem",

‎src/components/docs/DockerComposeSnippet.astro‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,10 @@ const snippets: Record<Props["variant"], string> = {
1313
html2rss-web:
1414
image: ${webImage}
1515
ports:
16-
- "127.0.0.1:4000:4000"
16+
- "4000:4000"
1717
environment:
1818
RACK_ENV: development
19+
AUTO_SOURCE_ENABLED: "true"
1920
HTML2RSS_ACCESS_TOKEN: CHANGE_ME_ADMIN_TOKEN
2021
BOTASAURUS_SCRAPER_URL: http://botasaurus:4010
2122

‎src/content/docs/common-use-cases.mdx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,6 @@ Follow multiple open source projects and their updates.
9191

9292
## Next Steps
9393

94-
- **[Run html2rss-web with Docker](/web-application/getting-started/)** to verify your own instance.
94+
- **[Run html2rss-web with Docker](/getting-started/)** to verify your own instance.
9595
- **[Use automatic feed generation](/web-application/guides/use-automatic-feed-generation/)** when you want direct page-URL conversion.
9696
- **[Create custom feeds](/creating-custom-feeds/)** when you need stable, reviewable extraction rules.
Lines changed: 47 additions & 189 deletions
Original file line numberDiff line numberDiff line change
@@ -1,81 +1,38 @@
11
---
2-
title: "Creating Custom Feeds"
3-
description: "Learn to write custom YAML configurations for RSS feeds when auto-sourcing isn't enough."
2+
title: "Advanced Feeds (Escape Hatch)"
3+
description: "Write YAML configs when auto-source is not enough; mount feeds.yml; contribute to html2rss-configs."
44
sidebar:
55
order: 2
66
---
77

88
import { Aside, Code } from "@astrojs/starlight/components";
99

10-
When existing feeds or auto-sourcing are not enough, write a YAML config for the site you want to follow.
10+
Prefer [Getting Started](/getting-started/) (URL paste) and the [Feed Directory](/feed-directory/) first. Use a custom YAML config when auto-source misses items you care about, or when you need reviewable selectors.
1111

12-
**Prerequisites:** You should be familiar with the [Getting Started](/getting-started/) guide before diving into custom configurations.
13-
14-
<Aside type="tip" title="Use this guide when you need more control">
15-
Reach for a custom config when you need stable, reviewable extraction rules or generated output misses
16-
important content.
12+
<Aside type="tip" title="Escape hatch">
13+
Agents can draft configs via MCP (`capture` → `test` → `apply`) or the
14+
[`html2rss-config`](https://github.com/html2rss/html2rss-configs/tree/master/.agents/skills/html2rss-config)
15+
skill. You still mount or publish the YAML yourself.
1716
</Aside>
1817

19-
---
20-
21-
## When to Use Custom Configs
22-
23-
**Use custom configs when:**
24-
25-
- **Auto-sourcing doesn't work** for the website you want to follow
26-
- **Existing feeds are incomplete** or missing important content
27-
- **You need specific formatting** or data extraction
28-
- **The website has complex structure** that requires custom selectors
29-
- **You want to combine data** from multiple sources
30-
31-
## Recommended Workflow
32-
33-
1. **Inspect the live page** in your browser developer tools
34-
2. **Optionally draft with capture** — `html2rss capture https://example.com/articles > your-config.yml` (see [Capturing Feed Configs](/ruby-gem/guides/capturing-feed-configs/))
35-
3. **Write or refine the smallest useful config** that extracts items, titles, and links
36-
4. **Validate the config** with `html2rss validate your-config.yml`
37-
5. **Render the feed** with `html2rss feed your-config.yml`
38-
6. **Add it to `html2rss-web`** so you can use it through your normal instance
39-
7. **Escalate request strategy when needed**: use Botasaurus (`strategy: botasaurus` or `auto` with `BOTASAURUS_SCRAPER_URL`) only when troubleshooting requires browser rendering
40-
41-
This order keeps iteration fast and makes it easier to see whether the problem is the page structure, your
42-
selectors, or the fetch strategy.
43-
44-
---
45-
46-
## How It Works
18+
## Recommended workflow
4719

48-
A config file is a simple "recipe" that tells html2rss:
20+
1. Inspect the live page (browser DevTools).
21+
2. Optionally draft: `html2rss capture https://example.com/articles > your-config.yml`
22+
3. Validate: `html2rss validate your-config.yml`
23+
4. Live-check: `html2rss test your-config.yml`, then ship with `html2rss apply your-config.yml`
24+
5. Mount into `html2rss-web` or contribute to html2rss-configs
25+
6. Escalate to `strategy: botasaurus` (or `auto` with `BOTASAURUS_SCRAPER_URL`) only when Faraday is not enough
4926

50-
1. **Which website** to look at
51-
2. **What content** to find
52-
3. **How to organize** it into an RSS feed
27+
`html2rss feed` is a Thor alias for `apply`. `html2rss auto` aliases `scrape` (one-shot, no YAML).
5328

54-
### The `channel` Block
55-
56-
This tells html2rss basic information about your feed - like giving it a name and telling it which website to look at.
57-
58-
**Example:**
29+
## Minimal config
5930

6031
<Code
6132
code={`
6233
channel:
6334
url: https://example.com/blog
64-
title: My Awesome Blog
65-
`}
66-
lang="yaml"
67-
/>
68-
69-
This says: "Look at this website and call the feed 'My Awesome Blog'"
70-
71-
### The `selectors` Block
72-
73-
This is where you tell the html2rss engine exactly what to find on the page. You use CSS selectors (like you might use in web design) to point to specific parts of the webpage.
74-
75-
**Example:**
76-
77-
<Code
78-
code={`
35+
title: My Blog
7936
selectors:
8037
items:
8138
selector: "article.post"
@@ -84,123 +41,56 @@ This is where you tell the html2rss engine exactly what to find on the page. You
8441
url:
8542
selector: "h2 a"
8643
extractor: "href"
87-
`}
44+
`}
8845
lang="yaml"
8946
/>
9047

91-
This says: "Find each article, get the title from the h2 anchor, and get the link from the same h2 anchor's href attribute"
92-
93-
**Need more details?** Check our [complete guide to selectors](/ruby-gem/reference/selectors/) for all the options.
94-
95-
---
96-
97-
## Your First Config
48+
Details: [Selectors](/ruby-gem/reference/selectors/), [Strategy](/ruby-gem/reference/strategy/).
9849

99-
**Step 1:** Inspect the website you want to create a feed for. Start with your browser's developer tools to inspect the live DOM. "View Page Source" can still help, but it may miss JavaScript-rendered content.
100-
101-
**Step 2:** Create a file called `example.com.yml` with this basic structure:
50+
## Test locally
10251

10352
<Code
10453
code={`
105-
channel:
106-
url: https://example.com/blog
107-
title: My Blog
108-
selectors:
109-
items:
110-
selector: "article.post"
111-
title:
112-
selector: "h2 a"
113-
url:
114-
selector: "h2 a"
115-
extractor: "href"
116-
`}
117-
lang="yaml"
54+
html2rss validate your-config.yml && \\
55+
html2rss apply your-config.yml && \\
56+
html2rss apply your-config.yml --input sample.html
57+
`}
58+
lang="bash"
11859
/>
11960

120-
**Step 3:** Test it with your html2rss-web instance or the [Ruby gem](/ruby-gem/installation/).
61+
Raise `--max-redirects` / `--max-requests` only when the site needs more budget.
12162

122-
**Need help?** See our [troubleshooting guide](/troubleshooting/troubleshooting/) for common issues.
63+
## Mount on html2rss-web
12364

124-
---
125-
126-
## Configuration Options
127-
128-
html2rss supports many configuration options:
129-
130-
- **Basic selectors** for title, description, and links
131-
- **Advanced features** like custom headers and dynamic parameters
132-
- **Multiple strategies** for different types of websites
133-
- **Post-processing** to clean up extracted content
134-
135-
**See our [Ruby Gem Reference](/ruby-gem/reference/)** for complete documentation.
136-
137-
---
138-
139-
## Testing Your Config
140-
141-
**Before sharing your config, test it:**
142-
143-
1. **Validate the config first:**
144-
145-
<Code code={`html2rss validate your-config.yml`} lang="bash" />
146-
147-
2. **Then render the feed with the Ruby gem:**
148-
149-
<Code code={`html2rss feed your-config.yml`} lang="bash" />
150-
151-
3. **Or test against a locally saved HTML file without network requests:**
152-
153-
<Code code={`html2rss feed your-config.yml --input sample.html`} lang="bash" />
154-
155-
4. **Test with `html2rss-web`:** Add your config to the `feeds.yml` file and restart your instance
156-
157-
5. **Check the output:** Make sure all items have titles, links, and descriptions
158-
159-
### Useful CLI flags when a site is difficult
160-
161-
Some sites need a little more request budget than the defaults.
162-
163-
- Use `--max-redirects` when the site bounces through several canonicalization or tracking redirects before the real page loads.
164-
- Use `--max-requests` when your config needs more than one request, for example pagination or other follow-up fetches.
165-
- Use `--input` to supply a local HTML file to inspect extraction offline.
65+
Bind-mount a feeds file (see production Compose comments):
16666

16767
<Code
16868
code={`
169-
html2rss feed your-config.yml --max-redirects 10 && \
170-
html2rss feed your-config.yml --max-requests 5 && \
171-
html2rss feed your-config.yml --input /path/to/page.html && \
172-
html2rss auto https://example.com/blog --max-redirects 10 --max-requests 5
69+
volumes:
70+
- type: bind
71+
source: ./config/feeds.yml
72+
target: /app/config/feeds.yml
73+
read_only: true
17374
`}
174-
lang="bash"
75+
lang="yaml"
17576
/>
17677

177-
Keep these values tight. Raise them only when the site proves it needs more.
178-
179-
## Add It To html2rss-web
180-
181-
Once the config works locally, add it to your `feeds.yml` or shared config repository and restart your
182-
instance. Then open the feed through your normal `html2rss-web` URL and confirm it behaves the same way
183-
there.
184-
185-
---
186-
187-
## Sharing Your Config
78+
Feeds are served as `.rss` / `.json` paths on your instance (for example `/example.com/blog.rss`).
18879

189-
**Help the community by sharing your config:**
80+
## Contribute to the Feed Directory
19081

191-
1. Go to [html2rss-configs on GitHub](https://github.com/html2rss/html2rss-configs)
192-
2. Click "Fork" → "Add file" → Create `domain.com/name.yml` under `lib/html2rss/configs/`
193-
3. Include top-level `directory.topics`, `directory.title`, and mirror `channel.title` (required for Feed Directory configs). Optional `directory.summary` (max 160 characters).
194-
4. Paste your config → "Commit new file" → "Open pull request"
82+
1. Fork [html2rss-configs](https://github.com/html2rss/html2rss-configs)
83+
2. Add `lib/html2rss/configs/<domain>/<name>.yml`
84+
3. Include `directory.topics`, `directory.title`, and matching `channel.title`
85+
4. Open a pull request
19586

196-
Example catalog metadata:
87+
Example metadata:
19788

19889
<Code
19990
code={`
20091
directory:
20192
topics:
20293
- tech
203-
- research
20494
title: Example — News
20595
summary: Short description of what this feed covers.
20696
channel:
@@ -219,43 +109,11 @@ Example catalog metadata:
219109
lang="yaml"
220110
/>
221111

222-
Allowed `directory.topics` values (prefer 1–2 primary topics): `sports`, `energy`, `tech`, `science`, `news`, `entertainment`, `jobs`, `finance`, `security`, `travel`, `environment`, `consumer`, `civic`, `product`, `research`.
223-
224-
Use `{Organization} — {Feed surface}` for `directory.title` (for example, `Anthropic — News`). The [Feed Directory](/feed-directory/) lists configs from a running `html2rss-web` instance.
225-
226-
**Need help?** See our [contribution guide](/get-involved/contributing/) for detailed instructions.
227-
228-
---
229-
230-
## Troubleshooting
231-
232-
**Common issues when writing configs:**
233-
234-
- **No items found?** Check your selectors with browser tools (F12) - the `items.selector` might not match the page structure
235-
- **Invalid YAML?** Use spaces, not tabs, and ensure proper indentation
236-
- **Website not loading?** Check the URL and try accessing it in your browser
237-
- **Missing content?** Try a browser-based rendering strategy during troubleshooting
238-
- **Wrong data extracted?** Verify your selectors are pointing to the right elements
239-
240-
**Need more help?** See our [comprehensive troubleshooting guide](/troubleshooting/troubleshooting/) or ask in [GitHub Discussions](https://github.com/orgs/html2rss/discussions).
241-
242-
---
243-
244-
## Next Steps
245-
246-
**🎉 Congratulations!** You've learned the basics of creating html2rss configuration files.
247-
248-
### What's Next?
249-
250-
**For Beginners:**
251-
252-
- **[Run html2rss-web with Docker](/web-application/getting-started/)** - Use the newest integrated behavior
253-
- **[Learn more about selectors](/ruby-gem/reference/selectors/)** - Master CSS selectors
254-
- **[Submit your config via GitHub Web](https://github.com/html2rss/html2rss-configs)** - No Git knowledge required!
112+
Allowed topics: `sports`, `energy`, `tech`, `science`, `news`, `entertainment`, `jobs`, `finance`, `security`, `travel`, `environment`, `consumer`, `civic`, `product`, `research`.
255113

256-
**For Contributors:**
114+
## Next
257115

258-
- **[Browse existing configs](https://github.com/html2rss/html2rss-configs/tree/master/lib/html2rss/configs)** - See real examples
259-
- **[Join discussions](https://github.com/orgs/html2rss/discussions)** - Connect with other users
260-
- **[Learn about strategies](/ruby-gem/reference/strategy/)** - Decide when to use static vs JavaScript/browser-based extraction
261-
- **[Learn advanced features](/ruby-gem/guides/advanced-features/)** - Take your configs to the next level
116+
- [Getting Started](/getting-started/)
117+
- [MCP / AI workflows](/ruby-gem/guides/ai-agent-workflows/)
118+
- [Contributing](/get-involved/contributing/)
119+
- [Troubleshooting](/troubleshooting/troubleshooting/)

0 commit comments

Comments
 (0)