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.
Files changed (44) hide show
  1. package/README.md +2 -0
  2. package/bin/doc-fetch_darwin_amd64 +0 -0
  3. package/bin/doc-fetch_windows_amd64.exe +0 -0
  4. package/doc-fetch +0 -0
  5. package/doc-fetch_darwin_amd64 +0 -0
  6. package/doc-fetch_darwin_arm64 +0 -0
  7. package/doc-fetch_linux_amd64 +0 -0
  8. package/doc-fetch_windows_amd64.exe +0 -0
  9. package/package.json +1 -1
  10. package/website/BLOG-SETUP-SUMMARY.md +385 -0
  11. package/website/DEPLOYMENT.md +189 -0
  12. package/website/LAUNCH-CHECKLIST.md +134 -0
  13. package/website/README.md +75 -0
  14. package/website/SEO-STRATEGY.md +347 -0
  15. package/website/URL-STRUCTURE.md +334 -0
  16. package/website/WEBSITE-SUMMARY.md +246 -0
  17. package/website/package-lock.json +1628 -0
  18. package/website/package.json +39 -0
  19. package/website/pnpm-lock.yaml +1061 -0
  20. package/website/src/app.d.ts +13 -0
  21. package/website/src/app.html +11 -0
  22. package/website/src/lib/actions/addCopyButtons.ts +73 -0
  23. package/website/src/lib/assets/favicon.svg +1 -0
  24. package/website/src/lib/components/CopyCodeButton.svelte +97 -0
  25. package/website/src/lib/components/DarkModeToggle.svelte +140 -0
  26. package/website/src/lib/components/ReadingProgress.svelte +36 -0
  27. package/website/src/lib/components/RelatedPosts.svelte +151 -0
  28. package/website/src/lib/components/TableOfContents.svelte +184 -0
  29. package/website/src/lib/index.ts +1 -0
  30. package/website/src/lib/posts/convert-docs-to-markdown.md +506 -0
  31. package/website/src/routes/+layout.svelte +59 -0
  32. package/website/src/routes/+page.svelte +1033 -0
  33. package/website/src/routes/about/+page.svelte +607 -0
  34. package/website/src/routes/blog/+page.svelte +486 -0
  35. package/website/src/routes/blog/[slug]/+page.svelte +988 -0
  36. package/website/src/routes/blog/[slug]/+page.ts +53 -0
  37. package/website/src/routes/sitemap.xml/+server.ts +62 -0
  38. package/website/static/favicon.svg +10 -0
  39. package/website/static/og.png +2 -0
  40. package/website/static/og.svg +26 -0
  41. package/website/static/robots.txt +43 -0
  42. package/website/svelte.config.js +13 -0
  43. package/website/tsconfig.json +20 -0
  44. package/website/vite.config.ts +6 -0
@@ -0,0 +1,607 @@
1
+ <script lang="ts">
2
+ import { onMount } from 'svelte';
3
+
4
+ let scrolled = false;
5
+
6
+ onMount(() => {
7
+ const handleScroll = () => {
8
+ scrolled = window.scrollY > 50;
9
+ };
10
+ window.addEventListener('scroll', handleScroll);
11
+ return () => window.removeEventListener('scroll', handleScroll);
12
+ });
13
+ </script>
14
+
15
+ <svelte:head>
16
+ <title>About DocFetch - Built by AlphaTechini</title>
17
+ <meta name="description" content="DocFetch is built by AlphaTechini, a senior infrastructure engineer specializing in Web2+Web3 systems and AI orchestration." />
18
+ <meta name="author" content="AlphaTechini" />
19
+
20
+ <!-- Open Graph -->
21
+ <meta property="og:type" content="profile" />
22
+ <meta property="og:title" content="About DocFetch" />
23
+ <meta property="og:description" content="Built by a senior infrastructure engineer with deep expertise in distributed systems" />
24
+
25
+ <!-- Structured Data: Person Schema -->
26
+ <script type="application/ld+json">
27
+ {
28
+ "@context": "https://schema.org",
29
+ "@type": "Person",
30
+ "name": "AlphaTechini",
31
+ "url": "https://github.com/AlphaTechini",
32
+ "sameAs": [
33
+ "https://github.com/AlphaTechini",
34
+ "https://www.npmjs.com/~alphatechini",
35
+ "https://pypi.org/user/alphatechini/"
36
+ ],
37
+ "jobTitle": "Senior Infrastructure Engineer",
38
+ "worksFor": {
39
+ "@type": "Organization",
40
+ "name": "Open Source"
41
+ },
42
+ "knowsAbout": [
43
+ "Backend Engineering",
44
+ "Web3 Infrastructure",
45
+ "AI Orchestration",
46
+ "Distributed Systems",
47
+ "Developer Tools"
48
+ ]
49
+ }
50
+ </script>
51
+
52
+ <!-- Structured Data: SoftwareApplication -->
53
+ <script type="application/ld+json">
54
+ {
55
+ "@context": "https://schema.org",
56
+ "@type": "SoftwareApplication",
57
+ "name": "DocFetch",
58
+ "applicationCategory": "DeveloperApplication",
59
+ "author": {
60
+ "@type": "Person",
61
+ "name": "AlphaTechini"
62
+ },
63
+ "description": "Transform documentation sites into AI-ready markdown",
64
+ "url": "https://docfetch.dev",
65
+ "dateCreated": "2026-02-20",
66
+ "version": "2.0.4"
67
+ }
68
+ </script>
69
+ </svelte:head>
70
+
71
+ <div class="container">
72
+ <header class={scrolled ? 'scrolled' : ''}>
73
+ <nav>
74
+ <div class="logo">
75
+ <a href="/">
76
+ <span class="logo-icon">📚</span>
77
+ <span class="logo-text">DocFetch</span>
78
+ </a>
79
+ </div>
80
+ <div class="nav-links">
81
+ <a href="/#features">Features</a>
82
+ <a href="/#installation">Installation</a>
83
+ <a href="/blog">Blog</a>
84
+ <a href="/about" class="active">About</a>
85
+ <a href="https://github.com/AlphaTechini/doc-fetch" target="_blank" rel="noopener noreferrer">GitHub →</a>
86
+ </div>
87
+ </nav>
88
+ </header>
89
+
90
+ <main>
91
+ <section class="hero">
92
+ <h1>About DocFetch</h1>
93
+ <p class="subtitle">
94
+ Built by a senior infrastructure engineer to solve a real problem in AI development.
95
+ </p>
96
+ </section>
97
+
98
+ <section class="content">
99
+ <article>
100
+ <h2>The Problem</h2>
101
+ <p>
102
+ When building AI agents and RAG systems, I constantly hit the same wall:
103
+ <strong>LLMs can't navigate documentation websites like humans do.</strong>
104
+ </p>
105
+ <p>
106
+ They can't click through sidebars, jump between related sections, or understand
107
+ the information architecture of documentation sites. This meant manually
108
+ copy-pasting dozens of pages to give my AI agents complete context.
109
+ </p>
110
+ <p>
111
+ This is unsustainable and error-prone. There had to be a better way.
112
+ </p>
113
+
114
+ <h2>The Solution</h2>
115
+ <p>
116
+ DocFetch automates the entire process. One command converts an entire
117
+ documentation website into clean, structured markdown with semantic indexing
118
+ (llm.txt) that helps AI agents navigate efficiently.
119
+ </p>
120
+ <p>
121
+ It's not just a scraper—it's purpose-built for AI/LLM workflows with features like:
122
+ </p>
123
+ <ul>
124
+ <li>Intelligent page classification (API, GUIDE, TUTORIAL, EXAMPLE)</li>
125
+ <li>Semantic descriptions for each section</li>
126
+ <li>Token-efficient output (no HTML bloat)</li>
127
+ <li>Respectful crawling (robots.txt, rate limiting)</li>
128
+ <li>Cross-platform support (Python, Node.js, Go, binaries)</li>
129
+ </ul>
130
+
131
+ <h2>About the Author</h2>
132
+ <div class="author-box">
133
+ <div class="author-info">
134
+ <h3>AlphaTechini</h3>
135
+ <p class="role">Senior Infrastructure Engineer</p>
136
+ <p>
137
+ Specializing in Web2 + Web3 systems integration, AI orchestration,
138
+ and distributed automation. Deep expertise in building fault-tolerant
139
+ event systems and developer tools.
140
+ </p>
141
+ <p>
142
+ <strong>Current focus:</strong> Building infrastructure-level AI
143
+ integrations that reduce human dependency and create strategic leverage.
144
+ </p>
145
+
146
+ <div class="links">
147
+ <a href="https://github.com/AlphaTechini" target="_blank" rel="noopener noreferrer" class="link">
148
+ <span class="icon">🐙</span> GitHub
149
+ </a>
150
+ <a href="https://www.npmjs.com/~alphatechini" target="_blank" rel="noopener noreferrer" class="link">
151
+ <span class="icon">📦</span> NPM
152
+ </a>
153
+ <a href="https://pypi.org/user/alphatechini/" target="_blank" rel="noopener noreferrer" class="link">
154
+ <span class="icon">🐍</span> PyPI
155
+ </a>
156
+ </div>
157
+ </div>
158
+ </div>
159
+
160
+ <h2>Expertise &amp; Technologies</h2>
161
+ <div class="tech-grid">
162
+ <div class="tech-category">
163
+ <h3>Backend</h3>
164
+ <ul>
165
+ <li>Node.js + Fastify</li>
166
+ <li>Go (systems programming)</li>
167
+ <li>Python</li>
168
+ <li>MongoDB</li>
169
+ </ul>
170
+ </div>
171
+
172
+ <div class="tech-category">
173
+ <h3>Frontend</h3>
174
+ <ul>
175
+ <li>Svelte + SvelteKit</li>
176
+ <li>Tailwind CSS</li>
177
+ <li>Plotly.js</li>
178
+ </ul>
179
+ </div>
180
+
181
+ <div class="tech-category">
182
+ <h3>Web3</h3>
183
+ <ul>
184
+ <li>Solidity</li>
185
+ <li>ERC-20, ERC-721</li>
186
+ <li>Uniswap Integration</li>
187
+ <li>On-chain Event Systems</li>
188
+ </ul>
189
+ </div>
190
+
191
+ <div class="tech-category">
192
+ <h3>AI/ML</h3>
193
+ <ul>
194
+ <li>LLM Orchestration</li>
195
+ <li>RAG Systems</li>
196
+ <li>Agent Architecture</li>
197
+ <li>Prompt Engineering</li>
198
+ </ul>
199
+ </div>
200
+ </div>
201
+
202
+ <h2>Philosophy</h2>
203
+ <blockquote>
204
+ "Build control layers, not features. Own infrastructure where possible.
205
+ Prefer composability over abstraction. Operate as startup founder +
206
+ systems engineer + security auditor simultaneously."
207
+ </blockquote>
208
+
209
+ <p>
210
+ This philosophy shapes every aspect of DocFetch:
211
+ </p>
212
+ <ul>
213
+ <li><strong>No vendor lock-in:</strong> Works with any LLM provider</li>
214
+ <li><strong>Own your infra:</strong> Self-hosted, open source</li>
215
+ <li><strong>Composable:</strong> CLI tool that integrates with existing workflows</li>
216
+ <li><strong>Security-aware:</strong> Respects robots.txt, rate limiting, SSRF protection</li>
217
+ </ul>
218
+
219
+ <h2>Projects</h2>
220
+ <div class="projects">
221
+ <div class="project">
222
+ <h3>DocFetch</h3>
223
+ <p>
224
+ Transform documentation sites into AI-ready markdown with intelligent
225
+ LLM.txt indexing. Published on NPM, PyPI, and Go modules.
226
+ </p>
227
+ <a href="https://github.com/AlphaTechini/doc-fetch" target="_blank" rel="noopener noreferrer">View on GitHub →</a>
228
+ </div>
229
+
230
+ <div class="project">
231
+ <h3>Reactive Network Trading Portfolio dApp</h3>
232
+ <p>
233
+ ERC-20 limited universe trading platform with stop-loss, auto-sell,
234
+ and RCS automation triggers. Built with Svelte + Fastify.
235
+ </p>
236
+ <a href="https://github.com/AlphaTechini/Reactive" target="_blank" rel="noopener noreferrer">View on GitHub →</a>
237
+ </div>
238
+
239
+ <div class="project">
240
+ <h3>Fault-Tolerant On-Chain Event Webhook Service</h3>
241
+ <p>
242
+ At-least-once delivery system for blockchain events with replayability,
243
+ ABI-only decoding, and operational reliability focus.
244
+ </p>
245
+ <a href="https://github.com/AlphaTechini/Fault-Tolerant-On-Chain-Event-Webhook-Service" target="_blank" rel="noopener noreferrer">View on GitHub →</a>
246
+ </div>
247
+
248
+ <div class="project">
249
+ <h3>xCreator (AI Social Post Engine)</h3>
250
+ <p>
251
+ Algorithm-aware social post generation with strict prompt template
252
+ injection and cost-controlled AI usage.
253
+ </p>
254
+ <a href="https://github.com/AlphaTechini/xCreator" target="_blank" rel="noopener noreferrer">View on GitHub →</a>
255
+ </div>
256
+ </div>
257
+
258
+ <h2>Contact &amp; Contributions</h2>
259
+ <p>
260
+ DocFetch is open source and community-driven. Contributions, issues, and
261
+ feature requests are welcome!
262
+ </p>
263
+ <div class="cta-buttons">
264
+ <a href="https://github.com/AlphaTechini/doc-fetch" target="_blank" rel="noopener noreferrer" class="btn primary">
265
+ Contribute on GitHub
266
+ </a>
267
+ <a href="https://github.com/AlphaTechini/doc-fetch/issues" target="_blank" rel="noopener noreferrer" class="btn secondary">
268
+ Report Issue
269
+ </a>
270
+ </div>
271
+ </article>
272
+ </section>
273
+ </main>
274
+
275
+ <footer>
276
+ <div class="footer-content">
277
+ <div class="footer-left">
278
+ <p>Built with ❤️ for AI developers who deserve better documentation access</p>
279
+ <p class="copyright">&copy; 2026 AlphaTechini. MIT License.</p>
280
+ </div>
281
+ <div class="footer-right">
282
+ <a href="https://github.com/AlphaTechini/doc-fetch" target="_blank" rel="noopener noreferrer">GitHub</a>
283
+ <a href="/blog">Blog</a>
284
+ <a href="/about">About</a>
285
+ </div>
286
+ </div>
287
+ </footer>
288
+ </div>
289
+
290
+ <style>
291
+ :global(:root) {
292
+ --bg-primary: #ffffff;
293
+ --bg-secondary: #f8f9fa;
294
+ --text-primary: #1a1a1a;
295
+ --text-secondary: #4a4a4a;
296
+ --text-muted: #6b7280;
297
+ --accent: #0066cc;
298
+ --accent-hover: #0052a3;
299
+ --border: #e5e7eb;
300
+ --max-width: 800px;
301
+ }
302
+
303
+ :global(body) {
304
+ margin: 0;
305
+ padding: 0;
306
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
307
+ background: var(--bg-primary);
308
+ color: var(--text-primary);
309
+ line-height: 1.7;
310
+ }
311
+
312
+ .container {
313
+ max-width: var(--max-width);
314
+ margin: 0 auto;
315
+ padding: 0 2rem;
316
+ }
317
+
318
+ header {
319
+ position: fixed;
320
+ top: 0;
321
+ left: 0;
322
+ right: 0;
323
+ background: rgba(255, 255, 255, 0.95);
324
+ backdrop-filter: blur(10px);
325
+ border-bottom: 1px solid transparent;
326
+ z-index: 1000;
327
+ transition: all 0.3s ease;
328
+ }
329
+
330
+ header.scrolled {
331
+ border-bottom-color: var(--border);
332
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
333
+ }
334
+
335
+ nav {
336
+ display: flex;
337
+ justify-content: space-between;
338
+ align-items: center;
339
+ padding: 1rem 2rem;
340
+ max-width: 1200px;
341
+ margin: 0 auto;
342
+ }
343
+
344
+ .logo a {
345
+ display: flex;
346
+ align-items: center;
347
+ gap: 0.5rem;
348
+ font-weight: 700;
349
+ font-size: 1.25rem;
350
+ text-decoration: none;
351
+ color: var(--text-primary);
352
+ }
353
+
354
+ .logo-icon {
355
+ font-size: 1.5rem;
356
+ }
357
+
358
+ .nav-links {
359
+ display: flex;
360
+ gap: 2rem;
361
+ }
362
+
363
+ .nav-links a {
364
+ color: var(--text-secondary);
365
+ text-decoration: none;
366
+ font-size: 0.95rem;
367
+ transition: color 0.2s;
368
+ }
369
+
370
+ .nav-links a:hover,
371
+ .nav-links a.active {
372
+ color: var(--accent);
373
+ }
374
+
375
+ .hero {
376
+ padding: 8rem 0 3rem;
377
+ text-align: center;
378
+ }
379
+
380
+ h1 {
381
+ font-size: 3rem;
382
+ font-weight: 800;
383
+ margin: 0 0 1rem;
384
+ letter-spacing: -0.02em;
385
+ }
386
+
387
+ .subtitle {
388
+ font-size: 1.25rem;
389
+ color: var(--text-secondary);
390
+ max-width: 700px;
391
+ margin: 0 auto;
392
+ line-height: 1.7;
393
+ }
394
+
395
+ .content {
396
+ padding: 3rem 0 5rem;
397
+ border-top: 1px solid var(--border);
398
+ }
399
+
400
+ h2 {
401
+ font-size: 2rem;
402
+ margin-top: 3rem;
403
+ margin-bottom: 1.5rem;
404
+ }
405
+
406
+ h3 {
407
+ font-size: 1.4rem;
408
+ margin-top: 2rem;
409
+ margin-bottom: 1rem;
410
+ }
411
+
412
+ p {
413
+ margin-bottom: 1.5rem;
414
+ color: var(--text-secondary);
415
+ }
416
+
417
+ ul {
418
+ margin-bottom: 1.5rem;
419
+ padding-left: 2rem;
420
+ }
421
+
422
+ li {
423
+ margin-bottom: 0.75rem;
424
+ color: var(--text-secondary);
425
+ }
426
+
427
+ blockquote {
428
+ border-left: 3px solid var(--accent);
429
+ padding-left: 1.5rem;
430
+ margin: 2rem 0;
431
+ font-style: italic;
432
+ background: var(--bg-secondary);
433
+ padding: 1.5rem;
434
+ border-radius: 0 6px 6px 0;
435
+ }
436
+
437
+ .author-box {
438
+ background: var(--bg-secondary);
439
+ padding: 2rem;
440
+ border-radius: 8px;
441
+ margin: 2rem 0;
442
+ }
443
+
444
+ .author-info h3 {
445
+ margin: 0 0 0.5rem;
446
+ }
447
+
448
+ .role {
449
+ color: var(--accent);
450
+ font-weight: 600;
451
+ margin: 0 0 1rem;
452
+ }
453
+
454
+ .links {
455
+ display: flex;
456
+ gap: 1.5rem;
457
+ margin-top: 1.5rem;
458
+ flex-wrap: wrap;
459
+ }
460
+
461
+ .link {
462
+ display: flex;
463
+ align-items: center;
464
+ gap: 0.5rem;
465
+ color: var(--accent);
466
+ text-decoration: none;
467
+ font-weight: 500;
468
+ }
469
+
470
+ .link:hover {
471
+ text-decoration: underline;
472
+ }
473
+
474
+ .icon {
475
+ font-size: 1.2rem;
476
+ }
477
+
478
+ .tech-grid {
479
+ display: grid;
480
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
481
+ gap: 1.5rem;
482
+ margin: 2rem 0;
483
+ }
484
+
485
+ .tech-category {
486
+ background: var(--bg-secondary);
487
+ padding: 1.5rem;
488
+ border-radius: 6px;
489
+ }
490
+
491
+ .tech-category h3 {
492
+ margin: 0 0 1rem;
493
+ font-size: 1.1rem;
494
+ }
495
+
496
+ .tech-category ul {
497
+ margin: 0;
498
+ padding-left: 1.25rem;
499
+ }
500
+
501
+ .projects {
502
+ display: grid;
503
+ gap: 1.5rem;
504
+ margin: 2rem 0;
505
+ }
506
+
507
+ .project {
508
+ background: var(--bg-secondary);
509
+ padding: 1.5rem;
510
+ border-radius: 6px;
511
+ }
512
+
513
+ .project h3 {
514
+ margin: 0 0 0.75rem;
515
+ }
516
+
517
+ .project p {
518
+ margin: 0 0 1rem;
519
+ }
520
+
521
+ .cta-buttons {
522
+ display: flex;
523
+ gap: 1rem;
524
+ margin-top: 2rem;
525
+ }
526
+
527
+ .btn {
528
+ display: inline-block;
529
+ padding: 0.875rem 2rem;
530
+ border-radius: 6px;
531
+ font-weight: 600;
532
+ text-decoration: none;
533
+ transition: all 0.2s;
534
+ }
535
+
536
+ .btn.primary {
537
+ background: var(--accent);
538
+ color: white;
539
+ }
540
+
541
+ .btn.primary:hover {
542
+ background: var(--accent-hover);
543
+ }
544
+
545
+ .btn.secondary {
546
+ background: transparent;
547
+ color: var(--text-secondary);
548
+ border: 1px solid var(--border);
549
+ }
550
+
551
+ .btn.secondary:hover {
552
+ border-color: var(--text-secondary);
553
+ }
554
+
555
+ footer {
556
+ border-top: 1px solid var(--border);
557
+ padding: 3rem 0;
558
+ margin-top: 4rem;
559
+ }
560
+
561
+ .footer-content {
562
+ display: flex;
563
+ justify-content: space-between;
564
+ align-items: center;
565
+ }
566
+
567
+ .footer-left p {
568
+ margin: 0;
569
+ color: var(--text-secondary);
570
+ }
571
+
572
+ .copyright {
573
+ font-size: 0.875rem;
574
+ margin-top: 0.5rem !important;
575
+ }
576
+
577
+ .footer-right {
578
+ display: flex;
579
+ gap: 2rem;
580
+ }
581
+
582
+ .footer-right a {
583
+ color: var(--text-secondary);
584
+ text-decoration: none;
585
+ transition: color 0.2s;
586
+ }
587
+
588
+ .footer-right a:hover {
589
+ color: var(--accent);
590
+ }
591
+
592
+ @media (max-width: 768px) {
593
+ h1 {
594
+ font-size: 2.5rem;
595
+ }
596
+
597
+ .cta-buttons {
598
+ flex-direction: column;
599
+ }
600
+
601
+ .footer-content {
602
+ flex-direction: column;
603
+ gap: 2rem;
604
+ text-align: center;
605
+ }
606
+ }
607
+ </style>