@knowcode/doc-builder 1.5.0 → 1.5.2
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/.claude/settings.local.json +2 -1
- package/CHANGELOG.md +55 -0
- package/README.md +0 -8
- package/assets/404.html +115 -0
- package/assets/css/notion-style.css +56 -0
- package/assets/js/main.js +109 -0
- package/doc-builder.config.js +31 -35
- package/html/404.html +115 -0
- package/html/README.html +6 -6
- package/html/claude-workflow-guide.html +5 -5
- package/html/css/notion-style.css +56 -0
- package/html/documentation-index.html +6 -6
- package/html/guides/authentication-guide.html +6 -6
- package/html/guides/claude-workflow-guide.html +531 -0
- package/html/guides/documentation-standards.html +6 -6
- package/html/guides/seo-guide.html +6 -6
- package/html/guides/troubleshooting-guide.html +6 -6
- package/html/index.html +6 -6
- package/html/js/main.js +109 -0
- package/html/sitemap.xml +23 -11
- package/html/vercel-cli-setup-guide.html +6 -6
- package/html/vercel-first-time-setup-guide.html +6 -6
- package/lib/core-builder.js +7 -0
- package/lib/deploy.js +20 -0
- package/package.json +1 -1
- package/knowcode-doc-builder-1.4.4.tgz +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,61 @@ All notable changes to @knowcode/doc-builder will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.5.2] - 2025-07-22
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- Floating menu button for mobile devices that appears when scrolling down
|
|
12
|
+
- Scroll detection to show/hide floating menu button based on scroll position
|
|
13
|
+
- Smooth animations and transitions for floating button appearance
|
|
14
|
+
- Icon changes between hamburger and close based on sidebar state
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
- Fixed mobile menu inaccessibility when scrolled down the page
|
|
18
|
+
- Menu toggle button in header was scrolling off-screen, preventing sidebar access
|
|
19
|
+
- Mobile users can now always access the navigation menu regardless of scroll position
|
|
20
|
+
|
|
21
|
+
### Background
|
|
22
|
+
- Users reported being unable to open the sidebar menu on mobile when scrolled down
|
|
23
|
+
- Implemented floating action button (FAB) pattern common in mobile apps
|
|
24
|
+
- Button appears when user scrolls past the header and disappears when scrolling back up
|
|
25
|
+
|
|
26
|
+
## [1.5.1] - 2025-07-21
|
|
27
|
+
|
|
28
|
+
### Added
|
|
29
|
+
- Automatic redirect from .md URLs to their corresponding .html files
|
|
30
|
+
- Client-side JavaScript to intercept clicks on .md links and redirect to .html
|
|
31
|
+
- Custom 404.html page with automatic redirect logic for direct .md URL navigation
|
|
32
|
+
- Enhanced vercel.json generation to include 404 page routing
|
|
33
|
+
|
|
34
|
+
### Fixed
|
|
35
|
+
- Fixed 404 errors when clicking or navigating to .md links
|
|
36
|
+
- Links like `claude-workflow-guide.md` now automatically redirect to `claude-workflow-guide.html`
|
|
37
|
+
|
|
38
|
+
### Background
|
|
39
|
+
- Users reported that links to .md files resulted in 404 errors
|
|
40
|
+
- Implemented client-side solution to handle both link clicks and direct navigation
|
|
41
|
+
- Works seamlessly with Vercel's cleanUrls configuration
|
|
42
|
+
|
|
43
|
+
## [1.5.0] - 2025-07-21
|
|
44
|
+
|
|
45
|
+
### Added
|
|
46
|
+
- Comprehensive SEO features including meta tags, Open Graph, Twitter Cards
|
|
47
|
+
- JSON-LD structured data for better search engine understanding
|
|
48
|
+
- Automatic sitemap.xml and robots.txt generation
|
|
49
|
+
- Interactive `setup-seo` CLI command to configure SEO settings
|
|
50
|
+
- SEO configuration options in doc-builder.config.js
|
|
51
|
+
- Production URL configuration with `set-production-url` command
|
|
52
|
+
- Support for custom production URLs via config file, CLI command, or deployment flag
|
|
53
|
+
|
|
54
|
+
### Improved
|
|
55
|
+
- Better deployment URL detection with multiple fallback methods
|
|
56
|
+
- Enhanced meta tag generation with author, keywords, and canonical URLs
|
|
57
|
+
- Social media preview support with customizable images and descriptions
|
|
58
|
+
|
|
59
|
+
### Documentation
|
|
60
|
+
- Added comprehensive SEO guide explaining all features and configuration
|
|
61
|
+
- Updated troubleshooting guide with npx cache clearing instructions
|
|
62
|
+
|
|
8
63
|
## [1.4.26] - 2025-07-21
|
|
9
64
|
|
|
10
65
|
### Improved
|
package/README.md
CHANGED
|
@@ -139,14 +139,6 @@ module.exports = {
|
|
|
139
139
|
};
|
|
140
140
|
```
|
|
141
141
|
|
|
142
|
-
## Presets
|
|
143
|
-
|
|
144
|
-
Use the `notion-inspired` preset for a clean, modern documentation style:
|
|
145
|
-
|
|
146
|
-
```bash
|
|
147
|
-
npx @knowcode/doc-builder build --preset notion-inspired
|
|
148
|
-
```
|
|
149
|
-
|
|
150
142
|
## Commands
|
|
151
143
|
|
|
152
144
|
### set-production-url
|
package/assets/404.html
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Page Not Found - Redirecting...</title>
|
|
7
|
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
|
|
8
|
+
<style>
|
|
9
|
+
body {
|
|
10
|
+
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
11
|
+
margin: 0;
|
|
12
|
+
padding: 0;
|
|
13
|
+
display: flex;
|
|
14
|
+
align-items: center;
|
|
15
|
+
justify-content: center;
|
|
16
|
+
min-height: 100vh;
|
|
17
|
+
background-color: #f7f7f5;
|
|
18
|
+
color: #37352f;
|
|
19
|
+
}
|
|
20
|
+
.container {
|
|
21
|
+
text-align: center;
|
|
22
|
+
padding: 2rem;
|
|
23
|
+
max-width: 600px;
|
|
24
|
+
}
|
|
25
|
+
h1 {
|
|
26
|
+
font-size: 3rem;
|
|
27
|
+
margin: 0 0 1rem 0;
|
|
28
|
+
color: #37352f;
|
|
29
|
+
}
|
|
30
|
+
p {
|
|
31
|
+
font-size: 1.125rem;
|
|
32
|
+
line-height: 1.6;
|
|
33
|
+
color: #6b6b6b;
|
|
34
|
+
margin: 0 0 2rem 0;
|
|
35
|
+
}
|
|
36
|
+
a {
|
|
37
|
+
color: #0366d6;
|
|
38
|
+
text-decoration: none;
|
|
39
|
+
}
|
|
40
|
+
a:hover {
|
|
41
|
+
text-decoration: underline;
|
|
42
|
+
}
|
|
43
|
+
.emoji {
|
|
44
|
+
font-size: 4rem;
|
|
45
|
+
margin-bottom: 1rem;
|
|
46
|
+
}
|
|
47
|
+
.loading {
|
|
48
|
+
display: none;
|
|
49
|
+
color: #0366d6;
|
|
50
|
+
margin-top: 1rem;
|
|
51
|
+
}
|
|
52
|
+
.redirect-message {
|
|
53
|
+
display: none;
|
|
54
|
+
background-color: #e8f4fd;
|
|
55
|
+
border: 1px solid #c3e0f7;
|
|
56
|
+
padding: 1rem;
|
|
57
|
+
border-radius: 8px;
|
|
58
|
+
margin-top: 1rem;
|
|
59
|
+
}
|
|
60
|
+
</style>
|
|
61
|
+
</head>
|
|
62
|
+
<body>
|
|
63
|
+
<div class="container">
|
|
64
|
+
<div class="emoji">🔍</div>
|
|
65
|
+
<h1>404</h1>
|
|
66
|
+
<p id="message">The page you're looking for doesn't exist.</p>
|
|
67
|
+
<div id="redirect-message" class="redirect-message">
|
|
68
|
+
Redirecting to the correct page...
|
|
69
|
+
</div>
|
|
70
|
+
<p id="loading" class="loading">Redirecting...</p>
|
|
71
|
+
<p>
|
|
72
|
+
<a href="/" id="home-link">Go to Home</a>
|
|
73
|
+
</p>
|
|
74
|
+
</div>
|
|
75
|
+
|
|
76
|
+
<script>
|
|
77
|
+
// Check if the URL ends with .md
|
|
78
|
+
const pathname = window.location.pathname;
|
|
79
|
+
|
|
80
|
+
if (pathname.endsWith('.md')) {
|
|
81
|
+
// Convert .md to .html
|
|
82
|
+
const htmlPath = pathname.replace(/\.md$/, '.html');
|
|
83
|
+
|
|
84
|
+
// Show redirect message
|
|
85
|
+
document.getElementById('message').textContent = 'Found a markdown link. Redirecting to the HTML version...';
|
|
86
|
+
document.getElementById('redirect-message').style.display = 'block';
|
|
87
|
+
document.getElementById('loading').style.display = 'block';
|
|
88
|
+
|
|
89
|
+
// Redirect after a brief delay to show the message
|
|
90
|
+
setTimeout(() => {
|
|
91
|
+
window.location.replace(htmlPath);
|
|
92
|
+
}, 500);
|
|
93
|
+
} else {
|
|
94
|
+
// For true 404s, show the standard message
|
|
95
|
+
document.getElementById('message').textContent = "The page you're looking for doesn't exist.";
|
|
96
|
+
|
|
97
|
+
// Also check if we can suggest a similar page
|
|
98
|
+
// Remove common suffixes and try to find a match
|
|
99
|
+
const basePath = pathname
|
|
100
|
+
.replace(/\.(html|htm|php|asp|aspx)$/, '')
|
|
101
|
+
.replace(/\/$/, '');
|
|
102
|
+
|
|
103
|
+
if (basePath && basePath !== pathname) {
|
|
104
|
+
document.getElementById('message').innerHTML =
|
|
105
|
+
`The page you're looking for doesn't exist.<br>
|
|
106
|
+
<small>Did you mean <a href="${basePath}.html">${basePath}.html</a>?</small>`;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Update home link to use the correct base URL
|
|
111
|
+
const baseUrl = window.location.origin;
|
|
112
|
+
document.getElementById('home-link').href = baseUrl;
|
|
113
|
+
</script>
|
|
114
|
+
</body>
|
|
115
|
+
</html>
|
|
@@ -1578,6 +1578,62 @@ tr:hover {
|
|
|
1578
1578
|
|
|
1579
1579
|
/* Remove custom positioning variables - tooltips always go right */
|
|
1580
1580
|
|
|
1581
|
+
/* Floating Menu Button */
|
|
1582
|
+
.floating-menu-toggle {
|
|
1583
|
+
position: fixed;
|
|
1584
|
+
bottom: var(--space-6);
|
|
1585
|
+
right: var(--space-6);
|
|
1586
|
+
width: 56px;
|
|
1587
|
+
height: 56px;
|
|
1588
|
+
border-radius: 50%;
|
|
1589
|
+
background: var(--color-accent-blue);
|
|
1590
|
+
color: white;
|
|
1591
|
+
border: none;
|
|
1592
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15), 0 2px 4px rgba(0, 0, 0, 0.1);
|
|
1593
|
+
display: flex;
|
|
1594
|
+
align-items: center;
|
|
1595
|
+
justify-content: center;
|
|
1596
|
+
font-size: 1.25rem;
|
|
1597
|
+
cursor: pointer;
|
|
1598
|
+
z-index: 1001; /* Above sidebar */
|
|
1599
|
+
opacity: 0;
|
|
1600
|
+
transform: scale(0.8) translateY(20px);
|
|
1601
|
+
transition: all var(--duration-normal) var(--easing-out);
|
|
1602
|
+
-webkit-tap-highlight-color: transparent;
|
|
1603
|
+
}
|
|
1604
|
+
|
|
1605
|
+
.floating-menu-toggle.visible {
|
|
1606
|
+
opacity: 1;
|
|
1607
|
+
transform: scale(1) translateY(0);
|
|
1608
|
+
}
|
|
1609
|
+
|
|
1610
|
+
.floating-menu-toggle:hover {
|
|
1611
|
+
transform: scale(1.1) translateY(0);
|
|
1612
|
+
box-shadow: 0 6px 16px rgba(0, 0, 0, 0.2), 0 3px 6px rgba(0, 0, 0, 0.15);
|
|
1613
|
+
}
|
|
1614
|
+
|
|
1615
|
+
.floating-menu-toggle:active {
|
|
1616
|
+
transform: scale(0.95) translateY(0);
|
|
1617
|
+
}
|
|
1618
|
+
|
|
1619
|
+
.floating-menu-toggle i {
|
|
1620
|
+
transition: transform var(--duration-fast) var(--easing-out);
|
|
1621
|
+
}
|
|
1622
|
+
|
|
1623
|
+
.floating-menu-toggle:hover i {
|
|
1624
|
+
transform: rotate(90deg);
|
|
1625
|
+
}
|
|
1626
|
+
|
|
1627
|
+
/* Dark mode styles for floating button */
|
|
1628
|
+
.dark-mode .floating-menu-toggle {
|
|
1629
|
+
background: var(--color-accent-blue);
|
|
1630
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3), 0 2px 4px rgba(0, 0, 0, 0.2);
|
|
1631
|
+
}
|
|
1632
|
+
|
|
1633
|
+
.dark-mode .floating-menu-toggle:hover {
|
|
1634
|
+
box-shadow: 0 6px 16px rgba(0, 0, 0, 0.4), 0 3px 6px rgba(0, 0, 0, 0.3);
|
|
1635
|
+
}
|
|
1636
|
+
|
|
1581
1637
|
/* Mobile adjustments */
|
|
1582
1638
|
@media (max-width: 768px) {
|
|
1583
1639
|
/* Disable tooltips on mobile to prevent overlap issues */
|
package/assets/js/main.js
CHANGED
|
@@ -518,6 +518,92 @@ if (menuToggle) {
|
|
|
518
518
|
});
|
|
519
519
|
}
|
|
520
520
|
|
|
521
|
+
// Floating Menu Button for Mobile
|
|
522
|
+
function initFloatingMenuButton() {
|
|
523
|
+
// Only initialize on mobile
|
|
524
|
+
if (window.innerWidth > 768) return;
|
|
525
|
+
|
|
526
|
+
// Check if button already exists
|
|
527
|
+
if (document.getElementById('floating-menu-toggle')) return;
|
|
528
|
+
|
|
529
|
+
// Create floating button
|
|
530
|
+
const floatingButton = document.createElement('button');
|
|
531
|
+
floatingButton.id = 'floating-menu-toggle';
|
|
532
|
+
floatingButton.className = 'floating-menu-toggle';
|
|
533
|
+
floatingButton.setAttribute('aria-label', 'Toggle menu');
|
|
534
|
+
floatingButton.innerHTML = '<i class="fas fa-bars"></i>';
|
|
535
|
+
floatingButton.style.display = 'none'; // Hidden by default
|
|
536
|
+
|
|
537
|
+
// Add to body
|
|
538
|
+
document.body.appendChild(floatingButton);
|
|
539
|
+
|
|
540
|
+
// Toggle sidebar on click
|
|
541
|
+
floatingButton.addEventListener('click', () => {
|
|
542
|
+
sidebar.classList.toggle('open');
|
|
543
|
+
// Update icon based on state
|
|
544
|
+
const icon = floatingButton.querySelector('i');
|
|
545
|
+
if (sidebar.classList.contains('open')) {
|
|
546
|
+
icon.className = 'fas fa-times';
|
|
547
|
+
} else {
|
|
548
|
+
icon.className = 'fas fa-bars';
|
|
549
|
+
}
|
|
550
|
+
});
|
|
551
|
+
|
|
552
|
+
// Show/hide based on scroll position
|
|
553
|
+
let scrollTimeout;
|
|
554
|
+
|
|
555
|
+
window.addEventListener('scroll', () => {
|
|
556
|
+
clearTimeout(scrollTimeout);
|
|
557
|
+
scrollTimeout = setTimeout(() => {
|
|
558
|
+
const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
|
|
559
|
+
const headerHeight = document.querySelector('.header')?.offsetHeight || 64;
|
|
560
|
+
|
|
561
|
+
// Show floating button when scrolled past header
|
|
562
|
+
if (scrollTop > headerHeight + 50) {
|
|
563
|
+
floatingButton.style.display = 'flex';
|
|
564
|
+
// Add slight delay for smooth appearance
|
|
565
|
+
setTimeout(() => {
|
|
566
|
+
floatingButton.classList.add('visible');
|
|
567
|
+
}, 10);
|
|
568
|
+
} else {
|
|
569
|
+
floatingButton.classList.remove('visible');
|
|
570
|
+
// Hide after transition completes
|
|
571
|
+
setTimeout(() => {
|
|
572
|
+
if (!floatingButton.classList.contains('visible')) {
|
|
573
|
+
floatingButton.style.display = 'none';
|
|
574
|
+
}
|
|
575
|
+
}, 300);
|
|
576
|
+
}
|
|
577
|
+
}, 100);
|
|
578
|
+
});
|
|
579
|
+
|
|
580
|
+
// Update icon when sidebar state changes from other sources
|
|
581
|
+
const observer = new MutationObserver(() => {
|
|
582
|
+
const icon = floatingButton.querySelector('i');
|
|
583
|
+
if (sidebar.classList.contains('open')) {
|
|
584
|
+
icon.className = 'fas fa-times';
|
|
585
|
+
} else {
|
|
586
|
+
icon.className = 'fas fa-bars';
|
|
587
|
+
}
|
|
588
|
+
});
|
|
589
|
+
|
|
590
|
+
observer.observe(sidebar, {
|
|
591
|
+
attributes: true,
|
|
592
|
+
attributeFilter: ['class']
|
|
593
|
+
});
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
// Initialize floating button on load and resize
|
|
597
|
+
document.addEventListener('DOMContentLoaded', initFloatingMenuButton);
|
|
598
|
+
window.addEventListener('resize', () => {
|
|
599
|
+
const existingButton = document.getElementById('floating-menu-toggle');
|
|
600
|
+
if (window.innerWidth > 768 && existingButton) {
|
|
601
|
+
existingButton.remove();
|
|
602
|
+
} else if (window.innerWidth <= 768 && !existingButton) {
|
|
603
|
+
initFloatingMenuButton();
|
|
604
|
+
}
|
|
605
|
+
});
|
|
606
|
+
|
|
521
607
|
// Prevent sidebar from closing when clicking nav items
|
|
522
608
|
// Only close when clicking outside the sidebar or the close button
|
|
523
609
|
document.addEventListener('click', (e) => {
|
|
@@ -1318,8 +1404,31 @@ function initTooltips() {
|
|
|
1318
1404
|
});
|
|
1319
1405
|
}
|
|
1320
1406
|
|
|
1407
|
+
// Handle .md link redirects
|
|
1408
|
+
function initMarkdownLinkRedirects() {
|
|
1409
|
+
// Check if current URL ends with .md and redirect
|
|
1410
|
+
if (window.location.pathname.endsWith('.md')) {
|
|
1411
|
+
const htmlPath = window.location.pathname.replace(/\.md$/, '.html');
|
|
1412
|
+
console.log(`Redirecting from .md to .html: ${htmlPath}`);
|
|
1413
|
+
window.location.replace(htmlPath);
|
|
1414
|
+
return; // Stop execution as we're redirecting
|
|
1415
|
+
}
|
|
1416
|
+
|
|
1417
|
+
// Intercept clicks on .md links
|
|
1418
|
+
document.addEventListener('click', function(e) {
|
|
1419
|
+
const link = e.target.closest('a');
|
|
1420
|
+
if (link && link.href && link.href.endsWith('.md')) {
|
|
1421
|
+
e.preventDefault();
|
|
1422
|
+
const htmlUrl = link.href.replace(/\.md$/, '.html');
|
|
1423
|
+
console.log(`Converting .md link to .html: ${htmlUrl}`);
|
|
1424
|
+
window.location.href = htmlUrl;
|
|
1425
|
+
}
|
|
1426
|
+
});
|
|
1427
|
+
}
|
|
1428
|
+
|
|
1321
1429
|
// Initialize on DOM Load
|
|
1322
1430
|
document.addEventListener('DOMContentLoaded', () => {
|
|
1431
|
+
initMarkdownLinkRedirects();
|
|
1323
1432
|
highlightNavigation();
|
|
1324
1433
|
generateTableOfContents();
|
|
1325
1434
|
initSidebarResize();
|
package/doc-builder.config.js
CHANGED
|
@@ -1,38 +1,34 @@
|
|
|
1
1
|
module.exports = {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
// Features
|
|
14
|
-
features: {
|
|
15
|
-
authentication: false,
|
|
16
|
-
changelog: true,
|
|
17
|
-
mermaid: true,
|
|
18
|
-
darkMode: true
|
|
2
|
+
"siteName": "Doc Builder",
|
|
3
|
+
"siteDescription": "Beautiful documentation with the least effort possible",
|
|
4
|
+
"docsDir": "docs",
|
|
5
|
+
"outputDir": "html",
|
|
6
|
+
"productionUrl": "https://doc-builder-delta.vercel.app",
|
|
7
|
+
"features": {
|
|
8
|
+
"authentication": false,
|
|
9
|
+
"changelog": true,
|
|
10
|
+
"mermaid": true,
|
|
11
|
+
"darkMode": true
|
|
19
12
|
},
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
13
|
+
"seo": {
|
|
14
|
+
"enabled": true,
|
|
15
|
+
"siteUrl": "https://doc-builder-delta.vercel.app",
|
|
16
|
+
"author": "Lindsay Smith",
|
|
17
|
+
"twitterHandle": "@planbbackups",
|
|
18
|
+
"language": "en-US",
|
|
19
|
+
"keywords": [
|
|
20
|
+
"documentation",
|
|
21
|
+
"markdown",
|
|
22
|
+
"static site generator",
|
|
23
|
+
"vercel",
|
|
24
|
+
"notion-style"
|
|
25
|
+
],
|
|
26
|
+
"generateSitemap": true,
|
|
27
|
+
"generateRobotsTxt": true,
|
|
28
|
+
"ogImage": "/og-default.png",
|
|
29
|
+
"organization": {
|
|
30
|
+
"name": "Knowcode Ltd",
|
|
31
|
+
"url": "https://knowcode.tech"
|
|
32
|
+
}
|
|
37
33
|
}
|
|
38
|
-
};
|
|
34
|
+
};
|
package/html/404.html
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Page Not Found - Redirecting...</title>
|
|
7
|
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
|
|
8
|
+
<style>
|
|
9
|
+
body {
|
|
10
|
+
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
11
|
+
margin: 0;
|
|
12
|
+
padding: 0;
|
|
13
|
+
display: flex;
|
|
14
|
+
align-items: center;
|
|
15
|
+
justify-content: center;
|
|
16
|
+
min-height: 100vh;
|
|
17
|
+
background-color: #f7f7f5;
|
|
18
|
+
color: #37352f;
|
|
19
|
+
}
|
|
20
|
+
.container {
|
|
21
|
+
text-align: center;
|
|
22
|
+
padding: 2rem;
|
|
23
|
+
max-width: 600px;
|
|
24
|
+
}
|
|
25
|
+
h1 {
|
|
26
|
+
font-size: 3rem;
|
|
27
|
+
margin: 0 0 1rem 0;
|
|
28
|
+
color: #37352f;
|
|
29
|
+
}
|
|
30
|
+
p {
|
|
31
|
+
font-size: 1.125rem;
|
|
32
|
+
line-height: 1.6;
|
|
33
|
+
color: #6b6b6b;
|
|
34
|
+
margin: 0 0 2rem 0;
|
|
35
|
+
}
|
|
36
|
+
a {
|
|
37
|
+
color: #0366d6;
|
|
38
|
+
text-decoration: none;
|
|
39
|
+
}
|
|
40
|
+
a:hover {
|
|
41
|
+
text-decoration: underline;
|
|
42
|
+
}
|
|
43
|
+
.emoji {
|
|
44
|
+
font-size: 4rem;
|
|
45
|
+
margin-bottom: 1rem;
|
|
46
|
+
}
|
|
47
|
+
.loading {
|
|
48
|
+
display: none;
|
|
49
|
+
color: #0366d6;
|
|
50
|
+
margin-top: 1rem;
|
|
51
|
+
}
|
|
52
|
+
.redirect-message {
|
|
53
|
+
display: none;
|
|
54
|
+
background-color: #e8f4fd;
|
|
55
|
+
border: 1px solid #c3e0f7;
|
|
56
|
+
padding: 1rem;
|
|
57
|
+
border-radius: 8px;
|
|
58
|
+
margin-top: 1rem;
|
|
59
|
+
}
|
|
60
|
+
</style>
|
|
61
|
+
</head>
|
|
62
|
+
<body>
|
|
63
|
+
<div class="container">
|
|
64
|
+
<div class="emoji">🔍</div>
|
|
65
|
+
<h1>404</h1>
|
|
66
|
+
<p id="message">The page you're looking for doesn't exist.</p>
|
|
67
|
+
<div id="redirect-message" class="redirect-message">
|
|
68
|
+
Redirecting to the correct page...
|
|
69
|
+
</div>
|
|
70
|
+
<p id="loading" class="loading">Redirecting...</p>
|
|
71
|
+
<p>
|
|
72
|
+
<a href="/" id="home-link">Go to Home</a>
|
|
73
|
+
</p>
|
|
74
|
+
</div>
|
|
75
|
+
|
|
76
|
+
<script>
|
|
77
|
+
// Check if the URL ends with .md
|
|
78
|
+
const pathname = window.location.pathname;
|
|
79
|
+
|
|
80
|
+
if (pathname.endsWith('.md')) {
|
|
81
|
+
// Convert .md to .html
|
|
82
|
+
const htmlPath = pathname.replace(/\.md$/, '.html');
|
|
83
|
+
|
|
84
|
+
// Show redirect message
|
|
85
|
+
document.getElementById('message').textContent = 'Found a markdown link. Redirecting to the HTML version...';
|
|
86
|
+
document.getElementById('redirect-message').style.display = 'block';
|
|
87
|
+
document.getElementById('loading').style.display = 'block';
|
|
88
|
+
|
|
89
|
+
// Redirect after a brief delay to show the message
|
|
90
|
+
setTimeout(() => {
|
|
91
|
+
window.location.replace(htmlPath);
|
|
92
|
+
}, 500);
|
|
93
|
+
} else {
|
|
94
|
+
// For true 404s, show the standard message
|
|
95
|
+
document.getElementById('message').textContent = "The page you're looking for doesn't exist.";
|
|
96
|
+
|
|
97
|
+
// Also check if we can suggest a similar page
|
|
98
|
+
// Remove common suffixes and try to find a match
|
|
99
|
+
const basePath = pathname
|
|
100
|
+
.replace(/\.(html|htm|php|asp|aspx)$/, '')
|
|
101
|
+
.replace(/\/$/, '');
|
|
102
|
+
|
|
103
|
+
if (basePath && basePath !== pathname) {
|
|
104
|
+
document.getElementById('message').innerHTML =
|
|
105
|
+
`The page you're looking for doesn't exist.<br>
|
|
106
|
+
<small>Did you mean <a href="${basePath}.html">${basePath}.html</a>?</small>`;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Update home link to use the correct base URL
|
|
111
|
+
const baseUrl = window.location.origin;
|
|
112
|
+
document.getElementById('home-link').href = baseUrl;
|
|
113
|
+
</script>
|
|
114
|
+
</body>
|
|
115
|
+
</html>
|
package/html/README.html
CHANGED
|
@@ -55,11 +55,11 @@
|
|
|
55
55
|
},
|
|
56
56
|
"publisher": {
|
|
57
57
|
"@type": "Organization",
|
|
58
|
-
"name": "
|
|
59
|
-
"url": "https://knowcode.
|
|
58
|
+
"name": "Knowcode Ltd",
|
|
59
|
+
"url": "https://knowcode.tech"
|
|
60
60
|
},
|
|
61
|
-
"datePublished": "2025-07-
|
|
62
|
-
"dateModified": "2025-07-
|
|
61
|
+
"datePublished": "2025-07-22T05:55:46.703Z",
|
|
62
|
+
"dateModified": "2025-07-22T05:55:46.703Z",
|
|
63
63
|
"mainEntityOfPage": {
|
|
64
64
|
"@type": "WebPage",
|
|
65
65
|
"@id": "https://doc-builder-delta.vercel.app/README.html"
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
|
|
93
93
|
<div class="header-actions">
|
|
94
94
|
<div class="deployment-info">
|
|
95
|
-
<span class="deployment-date" title="Built with doc-builder v1.
|
|
95
|
+
<span class="deployment-date" title="Built with doc-builder v1.5.1">Last updated: Jul 22, 2025, 05:55 AM UTC</span>
|
|
96
96
|
</div>
|
|
97
97
|
|
|
98
98
|
|
|
@@ -142,7 +142,6 @@
|
|
|
142
142
|
</a>
|
|
143
143
|
<div class="nav-content" >
|
|
144
144
|
<a href="/README.html" class="nav-item active" data-tooltip="@knowcode/doc-builder."><i class="fas fa-file-alt"></i> Overview</a>
|
|
145
|
-
<a href="/claude-workflow-guide.html" class="nav-item" data-tooltip="This guide demonstrates an efficient workflow for using Claude Code with a refined CLAUDE.md file to create high-quality documentation and deploy it..."><i class="fas fa-file-alt"></i> Claude Workflow Guide</a>
|
|
146
145
|
<a href="/documentation-index.html" class="nav-item" data-tooltip="This directory contains additional documentation for the @knowcode/doc-builder project, organized by topic and purpose."><i class="fas fa-file-alt"></i> Documentation Index</a>
|
|
147
146
|
<a href="/vercel-cli-setup-guide.html" class="nav-item" data-tooltip="This guide provides comprehensive instructions for installing and configuring the Vercel CLI across different operating systems and environments."><i class="fas fa-file-alt"></i> Vercel Cli Setup Guide</a>
|
|
148
147
|
<a href="/vercel-first-time-setup-guide.html" class="nav-item" data-tooltip="This guide provides a detailed explanation of every prompt you'll encounter during the first-time Vercel setup process when using."><i class="fas fa-file-alt"></i> Vercel First Time Setup Guide</a></div></div>
|
|
@@ -152,6 +151,7 @@
|
|
|
152
151
|
</a>
|
|
153
152
|
<div class="nav-content" id="nav-guides-1">
|
|
154
153
|
<a href="/guides/authentication-guide.html" class="nav-item" data-tooltip="This guide explains how to configure and use the built-in authentication feature in @knowcode/doc-builder to protect your documentation with basic..."><i class="fas fa-file-alt"></i> Authentication Guide</a>
|
|
154
|
+
<a href="/guides/claude-workflow-guide.html" class="nav-item" data-tooltip="This guide demonstrates an efficient workflow for using Claude Code with a refined CLAUDE.md file to create high-quality documentation and deploy it..."><i class="fas fa-file-alt"></i> Claude Workflow Guide</a>
|
|
155
155
|
<a href="/guides/documentation-standards.html" class="nav-item" data-tooltip="This document defines the documentation standards and conventions for the @knowcode/doc-builder project."><i class="fas fa-file-alt"></i> Documentation Standards</a>
|
|
156
156
|
<a href="/guides/seo-guide.html" class="nav-item" data-tooltip="@knowcode/doc-builder includes comprehensive SEO (Search Engine Optimization) features to help your documentation rank better in search results and..."><i class="fas fa-file-alt"></i> Seo Guide</a>
|
|
157
157
|
<a href="/guides/troubleshooting-guide.html" class="nav-item" data-tooltip="This guide helps you resolve common issues when using @knowcode/doc-builder."><i class="fas fa-file-alt"></i> Troubleshooting Guide</a></div></div>
|
|
@@ -55,11 +55,11 @@
|
|
|
55
55
|
},
|
|
56
56
|
"publisher": {
|
|
57
57
|
"@type": "Organization",
|
|
58
|
-
"name": "
|
|
59
|
-
"url": "https://knowcode.
|
|
58
|
+
"name": "Knowcode Ltd",
|
|
59
|
+
"url": "https://knowcode.tech"
|
|
60
60
|
},
|
|
61
|
-
"datePublished": "2025-07-21T20:
|
|
62
|
-
"dateModified": "2025-07-21T20:
|
|
61
|
+
"datePublished": "2025-07-21T20:43:20.146Z",
|
|
62
|
+
"dateModified": "2025-07-21T20:43:20.146Z",
|
|
63
63
|
"mainEntityOfPage": {
|
|
64
64
|
"@type": "WebPage",
|
|
65
65
|
"@id": "https://doc-builder-delta.vercel.app/claude-workflow-guide.html"
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
|
|
93
93
|
<div class="header-actions">
|
|
94
94
|
<div class="deployment-info">
|
|
95
|
-
<span class="deployment-date" title="Built with doc-builder v1.
|
|
95
|
+
<span class="deployment-date" title="Built with doc-builder v1.5.1">Last updated: Jul 21, 2025, 08:43 PM UTC</span>
|
|
96
96
|
</div>
|
|
97
97
|
|
|
98
98
|
|