doc-fetch-cli 2.0.4 → 2.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/bin/doc-fetch_darwin_amd64 +0 -0
- package/bin/doc-fetch_windows_amd64.exe +0 -0
- package/doc-fetch +0 -0
- package/doc-fetch_darwin_amd64 +0 -0
- package/doc-fetch_darwin_arm64 +0 -0
- package/doc-fetch_linux_amd64 +0 -0
- package/doc-fetch_windows_amd64.exe +0 -0
- package/package.json +1 -1
- package/website/BLOG-SETUP-SUMMARY.md +385 -0
- package/website/DEPLOYMENT.md +189 -0
- package/website/LAUNCH-CHECKLIST.md +134 -0
- package/website/README.md +75 -0
- package/website/SEO-STRATEGY.md +347 -0
- package/website/URL-STRUCTURE.md +334 -0
- package/website/WEBSITE-SUMMARY.md +246 -0
- package/website/package-lock.json +1628 -0
- package/website/package.json +39 -0
- package/website/pnpm-lock.yaml +1061 -0
- package/website/src/app.d.ts +13 -0
- package/website/src/app.html +11 -0
- package/website/src/lib/actions/addCopyButtons.ts +73 -0
- package/website/src/lib/assets/favicon.svg +1 -0
- package/website/src/lib/components/CopyCodeButton.svelte +97 -0
- package/website/src/lib/components/DarkModeToggle.svelte +140 -0
- package/website/src/lib/components/ReadingProgress.svelte +36 -0
- package/website/src/lib/components/RelatedPosts.svelte +151 -0
- package/website/src/lib/components/TableOfContents.svelte +184 -0
- package/website/src/lib/index.ts +1 -0
- package/website/src/lib/posts/convert-docs-to-markdown.md +506 -0
- package/website/src/routes/+layout.svelte +59 -0
- package/website/src/routes/+page.svelte +1033 -0
- package/website/src/routes/about/+page.svelte +607 -0
- package/website/src/routes/blog/+page.svelte +486 -0
- package/website/src/routes/blog/[slug]/+page.svelte +988 -0
- package/website/src/routes/blog/[slug]/+page.ts +53 -0
- package/website/src/routes/sitemap.xml/+server.ts +62 -0
- package/website/static/favicon.svg +10 -0
- package/website/static/og.png +2 -0
- package/website/static/og.svg +26 -0
- package/website/static/robots.txt +43 -0
- package/website/svelte.config.js +13 -0
- package/website/tsconfig.json +20 -0
- package/website/vite.config.ts +6 -0
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
# DocFetch URL Structure & Information Architecture
|
|
2
|
+
|
|
3
|
+
## 2026 SEO Best Practices for URL Hierarchy
|
|
4
|
+
|
|
5
|
+
Google uses URL structure to understand:
|
|
6
|
+
1. **Topical hierarchy** - How content relates
|
|
7
|
+
2. **Site architecture** - Content organization
|
|
8
|
+
3. **Context signals** - What the page is about
|
|
9
|
+
|
|
10
|
+
## Current Structure (❌ Bad)
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
/blog/convert-docs-to-markdown-for-llm
|
|
14
|
+
/blog/llm-txt-index-guide
|
|
15
|
+
/blog/ai-agent-documentation-problem
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**Problems:**
|
|
19
|
+
- Flat structure (no hierarchy)
|
|
20
|
+
- No topical clustering
|
|
21
|
+
- Missed semantic signals
|
|
22
|
+
|
|
23
|
+
## Target Structure (✅ Good)
|
|
24
|
+
|
|
25
|
+
### Tier 1: Category Pages (Broad Topics)
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
/web3/ - Web3 + AI integration
|
|
29
|
+
/ai-infra/ - AI infrastructure
|
|
30
|
+
/rag/ - RAG systems
|
|
31
|
+
/llm-tools/ - LLM developer tools
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Tier 2: Subcategory Pages (Specific Topics)
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
/web3/vector-databases/
|
|
38
|
+
/web3/agent-economics/
|
|
39
|
+
/ai-infra/cost-optimization/
|
|
40
|
+
/ai-infra/security/
|
|
41
|
+
/rag/context-preparation/
|
|
42
|
+
/rag/retrieval-strategies/
|
|
43
|
+
/llm-tools/documentation/
|
|
44
|
+
/llm-tools/token-efficiency/
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Tier 3: Individual Articles (Long-tail)
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
/web3/vector-databases/hollowdb-review
|
|
51
|
+
/web3/agent-economics/instant-rag-analysis
|
|
52
|
+
/ai-infra/cost-optimization/multi-provider-routing
|
|
53
|
+
/rag/context-preparation/convert-docs-to-markdown
|
|
54
|
+
/rag/context-preparation/llm-txt-guide
|
|
55
|
+
/llm-tools/documentation/docfetch-tutorial
|
|
56
|
+
/llm-tools/token-efficiency/compression-techniques
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Implementation Plan
|
|
60
|
+
|
|
61
|
+
### Phase 1: Restructure Existing Content
|
|
62
|
+
|
|
63
|
+
**Current:** `/blog/convert-docs-to-markdown-for-llm`
|
|
64
|
+
**New:** `/rag/context-preparation/convert-docs-to-markdown`
|
|
65
|
+
|
|
66
|
+
**Current:** `/blog/llm-txt-index-guide`
|
|
67
|
+
**New:** `/rag/context-preparation/llm-txt-guide`
|
|
68
|
+
|
|
69
|
+
**Current:** `/blog/ai-agent-documentation-problem`
|
|
70
|
+
**New:** `/llm-tools/documentation/ai-agents-cant-read-docs`
|
|
71
|
+
|
|
72
|
+
### Phase 2: Create Category Landing Pages
|
|
73
|
+
|
|
74
|
+
Each category gets a landing page that:
|
|
75
|
+
1. Introduces the topic
|
|
76
|
+
2. Lists all articles in that category
|
|
77
|
+
3. Links to subcategories
|
|
78
|
+
4. Targets broad keywords
|
|
79
|
+
|
|
80
|
+
Example: `/rag/context-preparation/`
|
|
81
|
+
```markdown
|
|
82
|
+
# RAG Context Preparation
|
|
83
|
+
|
|
84
|
+
Complete guide to preparing, cleaning, and structuring context for Retrieval Augmented Generation systems.
|
|
85
|
+
|
|
86
|
+
## Topics Covered
|
|
87
|
+
|
|
88
|
+
### Documentation Conversion
|
|
89
|
+
- [Convert Docs to Markdown for LLMs](/rag/context-preparation/convert-docs-to-markdown)
|
|
90
|
+
- [LLM.txt Explained](/rag/context-preparation/llm-txt-guide)
|
|
91
|
+
|
|
92
|
+
### Chunking Strategies
|
|
93
|
+
- [Optimal Chunk Sizes for RAG](/rag/context-preparation/chunk-sizes)
|
|
94
|
+
- [Semantic vs Fixed-Size Chunking](/rag/context-preparation/semantic-chunking)
|
|
95
|
+
|
|
96
|
+
### Cleaning Techniques
|
|
97
|
+
- [Remove HTML Noise from Documents](/rag/context-preparation/remove-html-noise)
|
|
98
|
+
- [Code Block Preservation](/rag/context-preparation/preserve-code-blocks)
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Phase 3: Implement in SvelteKit
|
|
102
|
+
|
|
103
|
+
#### File Structure
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
src/routes/
|
|
107
|
+
├── rag/
|
|
108
|
+
│ ├── +page.svelte # /rag/ category page
|
|
109
|
+
│ └── context-preparation/
|
|
110
|
+
│ ├── +page.svelte # /rag/context-preparation/ subcategory
|
|
111
|
+
│ └── [slug]/
|
|
112
|
+
│ └── +page.svelte # /rag/context-preparation/[slug]
|
|
113
|
+
├── llm-tools/
|
|
114
|
+
│ ├── +page.svelte
|
|
115
|
+
│ └── documentation/
|
|
116
|
+
│ ├── +page.svelte
|
|
117
|
+
│ └── [slug]/
|
|
118
|
+
│ └── +page.svelte
|
|
119
|
+
└── web3/
|
|
120
|
+
├── +page.svelte
|
|
121
|
+
└── [subcategory]/
|
|
122
|
+
└── [slug]/
|
|
123
|
+
└── +page.svelte
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
#### Load Function Updates
|
|
127
|
+
|
|
128
|
+
```typescript
|
|
129
|
+
// src/routes/rag/context-preparation/[slug]/+page.ts
|
|
130
|
+
export const load: PageLoad = async ({ params }) => {
|
|
131
|
+
const post = getPost(params.slug);
|
|
132
|
+
|
|
133
|
+
return {
|
|
134
|
+
post,
|
|
135
|
+
category: 'RAG',
|
|
136
|
+
subcategory: 'Context Preparation',
|
|
137
|
+
breadcrumb: [
|
|
138
|
+
{ label: 'Home', href: '/' },
|
|
139
|
+
{ label: 'RAG', href: '/rag' },
|
|
140
|
+
{ label: 'Context Preparation', href: '/rag/context-preparation' },
|
|
141
|
+
{ label: post.title, href: `/rag/context-preparation/${post.slug}` }
|
|
142
|
+
]
|
|
143
|
+
};
|
|
144
|
+
};
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
#### Breadcrumb Navigation
|
|
148
|
+
|
|
149
|
+
Add structured breadcrumbs for UX + SEO:
|
|
150
|
+
|
|
151
|
+
```svelte
|
|
152
|
+
<nav class="breadcrumb" aria-label="Breadcrumb">
|
|
153
|
+
<ol>
|
|
154
|
+
{#each data.breadcrumb as crumb}
|
|
155
|
+
<li>
|
|
156
|
+
<a href={crumb.href}>{crumb.label}</a>
|
|
157
|
+
</li>
|
|
158
|
+
{/each}
|
|
159
|
+
</ol>
|
|
160
|
+
</nav>
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
With Schema.org markup:
|
|
164
|
+
|
|
165
|
+
```json
|
|
166
|
+
{
|
|
167
|
+
"@context": "https://schema.org",
|
|
168
|
+
"@type": "BreadcrumbList",
|
|
169
|
+
"itemListElement": [
|
|
170
|
+
{
|
|
171
|
+
"@type": "ListItem",
|
|
172
|
+
"position": 1,
|
|
173
|
+
"name": "Home",
|
|
174
|
+
"item": "https://docfetch.dev"
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"@type": "ListItem",
|
|
178
|
+
"position": 2,
|
|
179
|
+
"name": "RAG",
|
|
180
|
+
"item": "https://docfetch.dev/rag"
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"@type": "ListItem",
|
|
184
|
+
"position": 3,
|
|
185
|
+
"name": "Context Preparation",
|
|
186
|
+
"item": "https://docfetch.dev/rag/context-preparation"
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"@type": "ListItem",
|
|
190
|
+
"position": 4,
|
|
191
|
+
"name": "How to Convert Documentation",
|
|
192
|
+
"item": "https://docfetch.dev/rag/context-preparation/convert-docs-to-markdown"
|
|
193
|
+
}
|
|
194
|
+
]
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## Internal Linking Strategy
|
|
199
|
+
|
|
200
|
+
### Automated Contextual Linking
|
|
201
|
+
|
|
202
|
+
Create a utility that auto-links keywords:
|
|
203
|
+
|
|
204
|
+
```typescript
|
|
205
|
+
// lib/auto-link.ts
|
|
206
|
+
const keywordLinks = {
|
|
207
|
+
'llm.txt': '/rag/context-preparation/llm-txt-guide',
|
|
208
|
+
'RAG': '/rag',
|
|
209
|
+
'documentation conversion': '/rag/context-preparation/convert-docs-to-markdown',
|
|
210
|
+
'token efficiency': '/llm-tools/token-efficiency'
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
export function autoLinkContent(content: string): string {
|
|
214
|
+
let linked = content;
|
|
215
|
+
|
|
216
|
+
for (const [keyword, url] of Object.entries(keywordLinks)) {
|
|
217
|
+
const regex = new RegExp(`\\b(${keyword})\\b`, 'gi');
|
|
218
|
+
// Don't link inside existing <a> tags
|
|
219
|
+
linked = linked.replace(regex, `<a href="${url}">$1</a>`);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
return linked;
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Related Posts Algorithm
|
|
227
|
+
|
|
228
|
+
Instead of hardcoded related posts, use tag-based matching:
|
|
229
|
+
|
|
230
|
+
```typescript
|
|
231
|
+
function findRelatedPosts(currentPost: Post, allPosts: Post[]): Post[] {
|
|
232
|
+
return allPosts
|
|
233
|
+
.filter(post => post.slug !== currentPost.slug)
|
|
234
|
+
.map(post => ({
|
|
235
|
+
...post,
|
|
236
|
+
relevanceScore: calculateRelevance(currentPost, post)
|
|
237
|
+
}))
|
|
238
|
+
.sort((a, b) => b.relevanceScore - a.relevanceScore)
|
|
239
|
+
.slice(0, 3);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
function calculateRelevance(post1: Post, post2: Post): number {
|
|
243
|
+
let score = 0;
|
|
244
|
+
|
|
245
|
+
// Same category: +3 points
|
|
246
|
+
if (post1.category === post2.category) score += 3;
|
|
247
|
+
|
|
248
|
+
// Same subcategory: +5 points
|
|
249
|
+
if (post1.subcategory === post2.subcategory) score += 5;
|
|
250
|
+
|
|
251
|
+
// Shared tags: +1 per tag
|
|
252
|
+
const sharedTags = post1.tags.filter(tag => post2.tags.includes(tag));
|
|
253
|
+
score += sharedTags.length;
|
|
254
|
+
|
|
255
|
+
return score;
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
## Redirect Strategy (Preserve SEO)
|
|
260
|
+
|
|
261
|
+
When restructuring URLs, set up 301 redirects:
|
|
262
|
+
|
|
263
|
+
```javascript
|
|
264
|
+
// vercel.json or netlify.toml
|
|
265
|
+
{
|
|
266
|
+
"redirects": [
|
|
267
|
+
{
|
|
268
|
+
"source": "/blog/convert-docs-to-markdown-for-llm",
|
|
269
|
+
"destination": "/rag/context-preparation/convert-docs-to-markdown",
|
|
270
|
+
"permanent": true
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
"source": "/blog/llm-txt-index-guide",
|
|
274
|
+
"destination": "/rag/context-preparation/llm-txt-guide",
|
|
275
|
+
"permanent": true
|
|
276
|
+
}
|
|
277
|
+
]
|
|
278
|
+
}
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
## URL Naming Conventions
|
|
282
|
+
|
|
283
|
+
### ✅ DO
|
|
284
|
+
|
|
285
|
+
- Use hyphens: `/context-preparation`
|
|
286
|
+
- Lowercase only: `/llm-tools` not `/LLM-Tools`
|
|
287
|
+
- Descriptive slugs: `/convert-docs-to-markdown`
|
|
288
|
+
- Hierarchical: `/category/subcategory/article`
|
|
289
|
+
- Remove stop words: `/rag/context-preparation` not `/rag/how-to-do-context-preparation`
|
|
290
|
+
|
|
291
|
+
### ❌ DON'T
|
|
292
|
+
|
|
293
|
+
- Underscores: `/context_preparation` (hard to read)
|
|
294
|
+
- Uppercase: `/RAG/Context-Preparation` (case sensitivity issues)
|
|
295
|
+
- Vague slugs: `/guide-1`, `/article-2`
|
|
296
|
+
- Dates in URL: `/2026/02/21/...` (dates age, content doesn't)
|
|
297
|
+
- Overly long: `/rag/context-preparation/how-to-convert-documentation-to-markdown-for-llms-complete-guide`
|
|
298
|
+
|
|
299
|
+
## Target Keyword Mapping
|
|
300
|
+
|
|
301
|
+
Map URLs to target keywords:
|
|
302
|
+
|
|
303
|
+
| URL | Target Keyword | Search Volume |
|
|
304
|
+
|-----|----------------|---------------|
|
|
305
|
+
| `/rag/context-preparation/convert-docs-to-markdown` | convert documentation to markdown | 2,400/mo |
|
|
306
|
+
| `/rag/context-preparation/llm-txt-guide` | llm.txt generator | 90/mo |
|
|
307
|
+
| `/llm-tools/token-efficiency` | reduce LLM token costs | 720/mo |
|
|
308
|
+
| `/web3/vector-databases/hollowdb-review` | hollowdb vector database | 320/mo |
|
|
309
|
+
| `/ai-infra/cost-optimization` | AI infrastructure cost optimization | 1,200/mo |
|
|
310
|
+
|
|
311
|
+
## Migration Checklist
|
|
312
|
+
|
|
313
|
+
- [ ] Create new directory structure in `src/routes/`
|
|
314
|
+
- [ ] Move existing blog posts to new locations
|
|
315
|
+
- [ ] Update all internal links
|
|
316
|
+
- [ ] Set up 301 redirects in `vercel.json`
|
|
317
|
+
- [ ] Update sitemap.xml
|
|
318
|
+
- [ ] Submit new sitemap to Google Search Console
|
|
319
|
+
- [ ] Monitor 404 errors in Search Console
|
|
320
|
+
- [ ] Update social sharing URLs
|
|
321
|
+
- [ ] Test breadcrumb navigation
|
|
322
|
+
- [ ] Verify canonical URLs point to new structure
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
**Why This Matters for SEO:**
|
|
327
|
+
|
|
328
|
+
1. **Topical Authority** - Google sees deep coverage of each topic
|
|
329
|
+
2. **Semantic Signals** - URL structure reinforces content themes
|
|
330
|
+
3. **Internal Linking** - Natural link flow from category → article
|
|
331
|
+
4. **User Experience** - Clear navigation, users understand where they are
|
|
332
|
+
5. **Crawl Efficiency** - Googlebot understands site structure
|
|
333
|
+
|
|
334
|
+
This is how you build a **content empire**, not just a blog.
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
# DocFetch Website - Build Summary
|
|
2
|
+
|
|
3
|
+
## What We Built
|
|
4
|
+
|
|
5
|
+
A **classic, high-signal landing page** for DocFetch using SvelteKit - no AI-generated visual noise, just clean documentation-era aesthetics with god-like SEO.
|
|
6
|
+
|
|
7
|
+
## Design Philosophy
|
|
8
|
+
|
|
9
|
+
**Inspired by:**
|
|
10
|
+
- Early GitHub pages (2010-2015 era)
|
|
11
|
+
- Stripe documentation simplicity
|
|
12
|
+
- Vercel's clean aesthetic
|
|
13
|
+
- Classic technical documentation
|
|
14
|
+
|
|
15
|
+
**Principles:**
|
|
16
|
+
- Content-first layout
|
|
17
|
+
- Clean typography over visual effects
|
|
18
|
+
- Semantic HTML structure
|
|
19
|
+
- Minimal dependencies (no CSS frameworks)
|
|
20
|
+
- Fast load times (<1s on 3G)
|
|
21
|
+
- Accessible by default
|
|
22
|
+
|
|
23
|
+
## Technical Stack
|
|
24
|
+
|
|
25
|
+
- **Framework**: SvelteKit 2.x
|
|
26
|
+
- **Language**: TypeScript
|
|
27
|
+
- **Styling**: Vanilla CSS (custom, no Tailwind/Bootstrap)
|
|
28
|
+
- **Build Tool**: Vite
|
|
29
|
+
- **Hosting**: Vercel-ready (also works on Netlify, static hosts)
|
|
30
|
+
|
|
31
|
+
## Features Implemented
|
|
32
|
+
|
|
33
|
+
### ✅ Core Pages
|
|
34
|
+
- Single-page landing site with anchor navigation
|
|
35
|
+
- Smooth scroll to sections
|
|
36
|
+
- Sticky header with scroll state
|
|
37
|
+
|
|
38
|
+
### ✅ Sections
|
|
39
|
+
1. **Hero** - Value prop + command example + CTA buttons
|
|
40
|
+
2. **Features** - 6 feature cards (AI/LLM optimized, LLM.txt, etc.)
|
|
41
|
+
3. **Installation** - 4 install options (Python, Node.js, Go, Binary)
|
|
42
|
+
4. **Usage** - Basic + advanced examples + options table
|
|
43
|
+
5. **Examples** - Real-world use cases (Go, React, custom projects)
|
|
44
|
+
6. **How It Works** - 6-step process visualization
|
|
45
|
+
7. **LLM.txt Section** - Before/after comparison
|
|
46
|
+
8. **Final CTA** - Conversion-focused close
|
|
47
|
+
|
|
48
|
+
### ✅ SEO Optimization
|
|
49
|
+
- Meta title & description
|
|
50
|
+
- Open Graph tags (Twitter/Facebook/LinkedIn)
|
|
51
|
+
- Twitter Card markup
|
|
52
|
+
- JSON-LD structured data (SoftwareApplication schema)
|
|
53
|
+
- Canonical URL
|
|
54
|
+
- Semantic heading hierarchy
|
|
55
|
+
- Mobile-responsive design
|
|
56
|
+
- Fast first paint
|
|
57
|
+
|
|
58
|
+
### ✅ Social Proof
|
|
59
|
+
- NPM version badge
|
|
60
|
+
- PyPI version badge
|
|
61
|
+
- Go module badge
|
|
62
|
+
- License badge
|
|
63
|
+
- All from shields.io (auto-updating)
|
|
64
|
+
|
|
65
|
+
### ✅ Developer Experience
|
|
66
|
+
- Syntax-highlighted code blocks
|
|
67
|
+
- Terminal-style command display
|
|
68
|
+
- Copy-paste ready examples
|
|
69
|
+
- Clear installation paths
|
|
70
|
+
|
|
71
|
+
### ✅ Performance
|
|
72
|
+
- Zero external CSS frameworks
|
|
73
|
+
- No JavaScript animation libraries
|
|
74
|
+
- Minimal bundle size
|
|
75
|
+
- No web fonts (system fonts only)
|
|
76
|
+
- SVG favicon (tiny, scalable)
|
|
77
|
+
|
|
78
|
+
## File Structure
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
website/
|
|
82
|
+
├── src/
|
|
83
|
+
│ ├── routes/
|
|
84
|
+
│ │ ├── +layout.svelte # Root layout
|
|
85
|
+
│ │ └── +page.svelte # Main landing page
|
|
86
|
+
├── static/
|
|
87
|
+
│ ├── favicon.svg # App icon
|
|
88
|
+
│ ├── og.svg # Social sharing image
|
|
89
|
+
│ └── og.png # Placeholder for PNG version
|
|
90
|
+
├── package.json # Dependencies + metadata
|
|
91
|
+
├── svelte.config.js # SvelteKit config
|
|
92
|
+
├── vite.config.ts # Vite config
|
|
93
|
+
├── tsconfig.json # TypeScript config
|
|
94
|
+
├── README.md # Dev instructions
|
|
95
|
+
├── DEPLOYMENT.md # Deployment guide
|
|
96
|
+
├── LAUNCH-CHECKLIST.md # Pre-launch checklist
|
|
97
|
+
└── WEBSITE-SUMMARY.md # This file
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Color Palette
|
|
101
|
+
|
|
102
|
+
- **Primary**: `#0066cc` (Blue - trust, professionalism)
|
|
103
|
+
- **Primary Hover**: `#0052a3` (Darker blue)
|
|
104
|
+
- **Background**: `#ffffff` (White - clean, classic)
|
|
105
|
+
- **Secondary Background**: `#f8f9fa` (Light gray - section separation)
|
|
106
|
+
- **Text Primary**: `#1a1a1a` (Near black - readability)
|
|
107
|
+
- **Text Secondary**: `#4a4a4a` (Dark gray - supporting text)
|
|
108
|
+
- **Text Muted**: `#6b7280` (Gray - tertiary info)
|
|
109
|
+
- **Border**: `#e5e7eb` (Light gray - subtle dividers)
|
|
110
|
+
- **Code Background**: `#1e1e1e` (Dark - VS Code style)
|
|
111
|
+
- **Code Text**: `#d4d4d4` (Light gray - readable on dark)
|
|
112
|
+
|
|
113
|
+
## Typography
|
|
114
|
+
|
|
115
|
+
**Font Stack** (system fonts for speed):
|
|
116
|
+
```css
|
|
117
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
|
|
118
|
+
Oxygen, Ubuntu, Cantarell, sans-serif;
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**Monospace Stack**:
|
|
122
|
+
```css
|
|
123
|
+
font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Responsive Breakpoints
|
|
127
|
+
|
|
128
|
+
- **Desktop**: >768px (default)
|
|
129
|
+
- **Mobile**: ≤768px (single column layouts, adjusted font sizes)
|
|
130
|
+
|
|
131
|
+
## Accessibility Features
|
|
132
|
+
|
|
133
|
+
- ✅ Proper heading hierarchy (h1 → h2 → h3)
|
|
134
|
+
- ✅ Alt text on all images/badges
|
|
135
|
+
- ✅ Color contrast meets WCAG AA
|
|
136
|
+
- ✅ Keyboard navigable
|
|
137
|
+
- ✅ Focus states visible
|
|
138
|
+
- ✅ Semantic HTML elements
|
|
139
|
+
- ✅ ARIA labels where needed
|
|
140
|
+
|
|
141
|
+
## SEO Strategy
|
|
142
|
+
|
|
143
|
+
### Target Keywords
|
|
144
|
+
- "documentation fetcher"
|
|
145
|
+
- "markdown converter"
|
|
146
|
+
- "AI documentation tools"
|
|
147
|
+
- "LLM context preparation"
|
|
148
|
+
- "web scraper for docs"
|
|
149
|
+
- "developer CLI tools"
|
|
150
|
+
|
|
151
|
+
### Structured Data
|
|
152
|
+
JSON-LD markup includes:
|
|
153
|
+
- Software application type
|
|
154
|
+
- Author information
|
|
155
|
+
- Download URLs
|
|
156
|
+
- Feature list
|
|
157
|
+
- Aggregate rating (placeholder for reviews)
|
|
158
|
+
- Programming languages supported
|
|
159
|
+
|
|
160
|
+
### Social Sharing
|
|
161
|
+
- Open Graph for Facebook/LinkedIn
|
|
162
|
+
- Twitter Card for X/Twitter
|
|
163
|
+
- Custom OG image (1200x630 SVG)
|
|
164
|
+
|
|
165
|
+
## Deployment Options
|
|
166
|
+
|
|
167
|
+
### Recommended: Vercel
|
|
168
|
+
- Zero config deployment
|
|
169
|
+
- Automatic HTTPS
|
|
170
|
+
- Global CDN
|
|
171
|
+
- Instant rollbacks
|
|
172
|
+
- Preview deployments
|
|
173
|
+
|
|
174
|
+
### Alternative: Netlify
|
|
175
|
+
- Similar features to Vercel
|
|
176
|
+
- Drag-and-drop deploys
|
|
177
|
+
- Form handling (if needed later)
|
|
178
|
+
|
|
179
|
+
### Self-Hosted
|
|
180
|
+
- Static files only
|
|
181
|
+
- Works with any HTTP server
|
|
182
|
+
- nginx, Apache, Caddy, etc.
|
|
183
|
+
|
|
184
|
+
## Performance Metrics (Expected)
|
|
185
|
+
|
|
186
|
+
- **Lighthouse Performance**: 95-100
|
|
187
|
+
- **First Contentful Paint**: <0.8s
|
|
188
|
+
- **Time to Interactive**: <1.2s
|
|
189
|
+
- **Total Bundle Size**: <100KB (gzipped)
|
|
190
|
+
- **Requests**: <10
|
|
191
|
+
|
|
192
|
+
## Next Steps
|
|
193
|
+
|
|
194
|
+
### Immediate
|
|
195
|
+
1. Test locally: `npm run dev`
|
|
196
|
+
2. Build: `npm run build`
|
|
197
|
+
3. Deploy to staging
|
|
198
|
+
4. Review on multiple devices
|
|
199
|
+
5. Fix any issues
|
|
200
|
+
|
|
201
|
+
### Launch
|
|
202
|
+
1. Deploy to production
|
|
203
|
+
2. Configure custom domain
|
|
204
|
+
3. Update main README with website link
|
|
205
|
+
4. Announce launch
|
|
206
|
+
|
|
207
|
+
### Post-Launch
|
|
208
|
+
1. Add analytics (optional)
|
|
209
|
+
2. Submit to search engines
|
|
210
|
+
3. Monitor performance
|
|
211
|
+
4. Gather user feedback
|
|
212
|
+
|
|
213
|
+
## Maintenance
|
|
214
|
+
|
|
215
|
+
### Monthly
|
|
216
|
+
- Dependency updates
|
|
217
|
+
- Broken link checks
|
|
218
|
+
- Analytics review
|
|
219
|
+
|
|
220
|
+
### Quarterly
|
|
221
|
+
- Content refresh
|
|
222
|
+
- Design audit
|
|
223
|
+
- Competitor analysis
|
|
224
|
+
|
|
225
|
+
## Credits
|
|
226
|
+
|
|
227
|
+
**Built by**: AlphaTechini
|
|
228
|
+
**License**: MIT
|
|
229
|
+
**Repository**: https://github.com/AlphaTechini/doc-fetch
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## Key Differentiators
|
|
234
|
+
|
|
235
|
+
What makes this landing page special:
|
|
236
|
+
|
|
237
|
+
1. **No AI Slop** - Clean, classic design without generic AI-generated visual noise
|
|
238
|
+
2. **Developer-First** - Built by a developer, for developers
|
|
239
|
+
3. **Performance Obsessed** - Every byte matters, no unnecessary dependencies
|
|
240
|
+
4. **SEO Optimized** - God-like SEO with proper meta tags and structured data
|
|
241
|
+
5. **Accessible** - Works for everyone, regardless of ability
|
|
242
|
+
6. **Timeless** - Won't look dated in 6 months
|
|
243
|
+
7. **Maintainable** - Simple codebase, easy to update
|
|
244
|
+
8. **Fast** - Loads instantly even on slow connections
|
|
245
|
+
|
|
246
|
+
This is what happens when you prioritize **substance over style** and **function over flash**.
|