@knowcode/doc-builder 1.9.30 → 1.9.31
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/package.json +12 -2
- package/.claude/settings.local.json +0 -56
- package/CACHE-BUSTING-GUIDE.md +0 -82
- package/CLAUDE.md +0 -86
- package/CONTRIBUTING.md +0 -148
- package/GITHUB_SETUP.md +0 -203
- package/RELEASE-NOTES-1.7.5.md +0 -64
- package/Screenshot 2025-07-22 at 19.51.21.png +0 -0
- package/Screenshot 2025-07-26 at 17.06.49.png +0 -0
- package/add-user-clive.sql +0 -35
- package/add-user-lindsay-fixed.sql +0 -85
- package/add-user-lindsay.sql +0 -68
- package/add-user-pmorgan.sql +0 -35
- package/add-user-robbie.sql +0 -35
- package/add-wru-users.sql +0 -105
- package/debug-login.sql +0 -30
- package/doc-builder.config.js +0 -126
- package/doc-builder.config.js.backup.1753793768283 +0 -47
- package/doc-builder.config.js.backup.1753803964423 +0 -114
- package/doc-builder.config.js.backup.1753945707032 +0 -115
- package/doc-builder.config.js.backup.1754059241330 +0 -115
- package/doc-builder.config.js.backup.1754119567787 +0 -123
- package/doc-builder.config.js.backup.1754120048862 +0 -124
- package/doc-builder.config.js.backup.1754120529913 +0 -124
- package/doc-builder.config.js.backup.1754218469785 +0 -124
- package/doc-builder.config.js.backup.1754384764054 +0 -124
- package/doc-builder.config.js.backup.1754567425847 +0 -124
- package/doc-builder.config.js.backup.1754568137859 +0 -126
- package/doc-builder.config.js.backup.1754569388252 +0 -126
- package/doc-builder.config.js.backup.1754576694123 +0 -126
- package/doc-builder.config.js.backup.1755031374829 +0 -126
- package/doc-builder.config.js.backup.1755034500990 +0 -126
- package/doc-builder.config.js.backup.1755034809236 +0 -126
- package/grant-access.sql +0 -15
- package/html/11.png +0 -0
- package/html/404.html +0 -115
- package/html/README.html +0 -522
- package/html/Screenshot 2025-08-12 at 21.35.07.png +0 -0
- package/html/about-doc-builder.html +0 -491
- package/html/auth.js +0 -157
- package/html/claude-workflow-guide.html +0 -525
- package/html/css/notion-style.css +0 -2502
- package/html/documentation-index.html +0 -471
- package/html/guides/authentication-default-change.html +0 -370
- package/html/guides/authentication-guide.html +0 -509
- package/html/guides/cache-control-anti-pattern.html +0 -361
- package/html/guides/claude-workflow-guide.html +0 -1074
- package/html/guides/configuration-guide.html +0 -472
- package/html/guides/document-standards.html +0 -518
- package/html/guides/documentation-standards.html +0 -694
- package/html/guides/html-embedding-guide.html +0 -461
- package/html/guides/image-modal-guide.html +0 -515
- package/html/guides/next-steps-walkthrough.html +0 -638
- package/html/guides/phosphor-icons-guide.html +0 -584
- package/html/guides/private-directory-authentication-troubleshooting.html +0 -555
- package/html/guides/private-directory-authentication.html +0 -541
- package/html/guides/public-site-deployment.html +0 -431
- package/html/guides/search-engine-verification-guide.html +0 -542
- package/html/guides/seo-guide.html +0 -661
- package/html/guides/seo-optimization-guide.html +0 -887
- package/html/guides/supabase-auth-implementation-plan.html +0 -543
- package/html/guides/supabase-auth-integration-plan.html +0 -671
- package/html/guides/supabase-auth-setup-guide.html +0 -498
- package/html/guides/supabase-authentication-complete-guide.html +0 -866
- package/html/guides/troubleshooting-guide.html +0 -633
- package/html/guides/vercel-deployment-auth-setup.html +0 -337
- package/html/guides/windows-setup-guide.html +0 -859
- package/html/image-modal-test.html +0 -318
- package/html/index.html +0 -522
- package/html/js/auth.js +0 -157
- package/html/js/main.js +0 -1754
- package/html/launch/README.html +0 -297
- package/html/launch/bubble-plugin-specification.html +0 -933
- package/html/launch/go-to-market-strategy.html +0 -663
- package/html/launch/launch-announcements.html +0 -593
- package/html/login.html +0 -102
- package/html/logout.html +0 -18
- package/html/private/cache-control-anti-pattern.html +0 -429
- package/html/private/launch/README.html +0 -371
- package/html/private/launch/auth-cleanup-summary.html +0 -361
- package/html/private/launch/bubble-plugin-specification.html +0 -1007
- package/html/private/launch/go-to-market-strategy.html +0 -737
- package/html/private/launch/launch-announcements.html +0 -667
- package/html/private/launch/vercel-deployment-auth-setup.html +0 -417
- package/html/private/next-steps-walkthrough.html +0 -679
- package/html/private/supabase-auth-implementation-completed.html +0 -454
- package/html/private/supabase-auth-implementation-plan.html +0 -594
- package/html/private/supabase-auth-integration-plan.html +0 -704
- package/html/private/supabase-auth-setup-guide.html +0 -555
- package/html/private/test-private-doc.html +0 -302
- package/html/private/user-management-tooling.html +0 -601
- package/html/prompts/Screenshot 2025-08-02 at 08.49.55.png +0 -0
- package/html/prompts/beautiful-documentation-design.html +0 -784
- package/html/prompts/markdown-document-standards.html +0 -422
- package/html/prompts/project-rename-strategy-sasha-publish.html +0 -530
- package/html/robots.txt +0 -9
- package/html/sitemap.xml +0 -357
- package/html/test-questions/how-does-it-work%3F.html +0 -294
- package/html/test-questions/step-1%3A%20getting-started.html +0 -289
- package/html/test-questions/what-is-the-purpose.html +0 -293
- package/html/test-status.html +0 -281
- package/html/vercel-cli-setup-guide.html +0 -495
- package/html/vercel-first-time-setup-guide.html +0 -454
- package/html/vercel.json +0 -29
- package/html-static/11.png +0 -0
- package/html-static/404.html +0 -115
- package/html-static/README.html +0 -609
- package/html-static/Screenshot 2025-08-12 at 21.35.07.png +0 -0
- package/html-static/about-doc-builder.html +0 -578
- package/html-static/css/notion-style.css +0 -2502
- package/html-static/documentation-index.html +0 -558
- package/html-static/guides/authentication-default-change.html +0 -457
- package/html-static/guides/authentication-guide.html +0 -596
- package/html-static/guides/claude-workflow-guide.html +0 -1161
- package/html-static/guides/configuration-guide.html +0 -559
- package/html-static/guides/documentation-standards.html +0 -781
- package/html-static/guides/html-embedding-guide.html +0 -548
- package/html-static/guides/image-modal-guide.html +0 -602
- package/html-static/guides/phosphor-icons-guide.html +0 -671
- package/html-static/guides/private-directory-authentication-troubleshooting.html +0 -642
- package/html-static/guides/private-directory-authentication.html +0 -628
- package/html-static/guides/public-site-deployment.html +0 -518
- package/html-static/guides/search-engine-verification-guide.html +0 -629
- package/html-static/guides/seo-guide.html +0 -748
- package/html-static/guides/seo-optimization-guide.html +0 -974
- package/html-static/guides/supabase-authentication-complete-guide.html +0 -953
- package/html-static/guides/troubleshooting-guide.html +0 -720
- package/html-static/guides/windows-setup-guide.html +0 -946
- package/html-static/image-modal-test.html +0 -405
- package/html-static/index.html +0 -609
- package/html-static/js/main.js +0 -1754
- package/html-static/prompts/Screenshot 2025-08-02 at 08.49.55.png +0 -0
- package/html-static/prompts/beautiful-documentation-design.html +0 -871
- package/html-static/prompts/markdown-document-standards.html +0 -509
- package/html-static/prompts/project-rename-strategy-sasha-publish.html +0 -617
- package/html-static/robots.txt +0 -5
- package/html-static/sitemap.xml +0 -195
- package/html-static/test-questions/how-does-it-work%3F.html +0 -381
- package/html-static/test-questions/step-1%3A%20getting-started.html +0 -376
- package/html-static/test-questions/what-is-the-purpose.html +0 -380
- package/html-static/vercel-cli-setup-guide.html +0 -582
- package/html-static/vercel-first-time-setup-guide.html +0 -541
- package/manage-users.sql +0 -191
- package/migrate-to-domain-auth.sql +0 -47
- package/package/CACHE-BUSTING-GUIDE.md +0 -82
- package/package/CHANGELOG.md +0 -902
- package/package/README.md +0 -248
- package/package/assets/css/notion-style.css +0 -2211
- package/package/assets/js/auth.js +0 -67
- package/package/assets/js/main.js +0 -1565
- package/package/cli.js +0 -764
- package/package/index.js +0 -38
- package/package/knowcode-doc-builder-1.3.15.tgz +0 -0
- package/package/lib/builder.js +0 -32
- package/package/lib/config.js +0 -278
- package/package/lib/core-builder.js +0 -957
- package/package/lib/deploy.js +0 -497
- package/package/lib/dev-server.js +0 -96
- package/package/package.json +0 -34
- package/package/scripts/npx-runner.js +0 -27
- package/package/scripts/setup.js +0 -56
- package/package/test-cache-bust.sh +0 -43
- package/public-config.js +0 -22
- package/public-html/404.html +0 -115
- package/public-html/README.html +0 -149
- package/public-html/css/notion-style.css +0 -2036
- package/public-html/index.html +0 -149
- package/public-html/js/auth.js +0 -67
- package/public-html/js/main.js +0 -1485
- package/quick-test-commands.md +0 -40
- package/recordings/Screenshot 2025-07-24 at 18.22.01.png +0 -0
- package/recordings/mh-ls-22jul.txt +0 -2305
- package/screenshot.png +0 -0
- package/scripts/Screenshot 2025-07-23 at 15.39.41.png +0 -0
- package/setup-database-v2.sql +0 -53
- package/setup-database.sql +0 -41
- package/test-auth-config.js +0 -17
- package/test-cache-bust.sh +0 -43
- package/test-docs/README.md +0 -39
- package/test-html/404.html +0 -115
- package/test-html/README.html +0 -172
- package/test-html/auth.js +0 -97
- package/test-html/css/notion-style.css +0 -2036
- package/test-html/index.html +0 -172
- package/test-html/js/auth.js +0 -97
- package/test-html/js/main.js +0 -1485
- package/test-html/login.html +0 -102
- package/test-html/logout.html +0 -18
- package/update-domain.sql +0 -9
- package/user-access-view.sql +0 -49
- package/user-management/README.md +0 -301
- package/user-management/add-users.sh +0 -776
- package/user-management/create-user.js +0 -65
- package/user-management/users.txt +0 -15
- package/view-all-users.sql +0 -40
- package/wru-auth-config.js +0 -17
package/html/login.html
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
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>Login - @knowcode/doc-builder</title>
|
|
7
|
-
<link rel="stylesheet" href="css/notion-style.css">
|
|
8
|
-
<script src="https://unpkg.com/@supabase/supabase-js@2"></script>
|
|
9
|
-
</head>
|
|
10
|
-
<body class="auth-page">
|
|
11
|
-
<div class="auth-container">
|
|
12
|
-
<div class="auth-box">
|
|
13
|
-
<h1>Login to @knowcode/doc-builder</h1>
|
|
14
|
-
<form id="login-form">
|
|
15
|
-
<div class="form-group">
|
|
16
|
-
<label for="email">Email</label>
|
|
17
|
-
<input type="email" id="email" name="email" required>
|
|
18
|
-
</div>
|
|
19
|
-
<div class="form-group">
|
|
20
|
-
<label for="password">Password</label>
|
|
21
|
-
<input type="password" id="password" name="password" required>
|
|
22
|
-
</div>
|
|
23
|
-
<button type="submit" class="auth-button">Login</button>
|
|
24
|
-
</form>
|
|
25
|
-
<div id="error-message" class="error-message"></div>
|
|
26
|
-
<div class="auth-links">
|
|
27
|
-
<a href="#" id="forgot-password">Forgot Password?</a>
|
|
28
|
-
</div>
|
|
29
|
-
</div>
|
|
30
|
-
</div>
|
|
31
|
-
|
|
32
|
-
<script>
|
|
33
|
-
// Initialize Supabase
|
|
34
|
-
const { createClient } = supabase;
|
|
35
|
-
const supabaseClient = createClient('https://xcihhnfcitjrwbynxmka.supabase.co', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InhjaWhobmZjaXRqcndieW54bWthIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTM0Mzc2MzcsImV4cCI6MjA2OTAxMzYzN30.zvWp3JFIR8fBIiwuFF5gqOR_Kxb42baZS5fsBz60XOY');
|
|
36
|
-
|
|
37
|
-
// Handle login form
|
|
38
|
-
document.getElementById('login-form').addEventListener('submit', async function(e) {
|
|
39
|
-
e.preventDefault();
|
|
40
|
-
|
|
41
|
-
const email = document.getElementById('email').value;
|
|
42
|
-
const password = document.getElementById('password').value;
|
|
43
|
-
const errorDiv = document.getElementById('error-message');
|
|
44
|
-
|
|
45
|
-
try {
|
|
46
|
-
// Sign in with Supabase
|
|
47
|
-
const { data, error } = await supabaseClient.auth.signInWithPassword({
|
|
48
|
-
email: email,
|
|
49
|
-
password: password
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
if (error) throw error;
|
|
53
|
-
|
|
54
|
-
// Check if user has access to this site (using domain)
|
|
55
|
-
const { data: access, error: accessError } = await supabaseClient
|
|
56
|
-
.from('docbuilder_access')
|
|
57
|
-
.select('*')
|
|
58
|
-
.eq('user_id', data.user.id)
|
|
59
|
-
.eq('domain', window.location.host)
|
|
60
|
-
.single();
|
|
61
|
-
|
|
62
|
-
if (accessError || !access) {
|
|
63
|
-
await supabaseClient.auth.signOut();
|
|
64
|
-
throw new Error('You do not have access to this documentation site');
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// Redirect to requested page
|
|
68
|
-
const params = new URLSearchParams(window.location.search);
|
|
69
|
-
const redirect = params.get('redirect') || '/';
|
|
70
|
-
window.location.href = redirect;
|
|
71
|
-
|
|
72
|
-
} catch (error) {
|
|
73
|
-
errorDiv.textContent = error.message;
|
|
74
|
-
errorDiv.style.display = 'block';
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
// Handle forgot password
|
|
79
|
-
document.getElementById('forgot-password').addEventListener('click', async function(e) {
|
|
80
|
-
e.preventDefault();
|
|
81
|
-
|
|
82
|
-
const email = document.getElementById('email').value;
|
|
83
|
-
if (!email) {
|
|
84
|
-
alert('Please enter your email address first');
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
try {
|
|
89
|
-
const { error } = await supabaseClient.auth.resetPasswordForEmail(email, {
|
|
90
|
-
redirectTo: window.location.origin + '/login.html'
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
if (error) throw error;
|
|
94
|
-
|
|
95
|
-
alert('Password reset email sent! Check your inbox.');
|
|
96
|
-
} catch (error) {
|
|
97
|
-
alert('Error sending reset email: ' + error.message);
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
</script>
|
|
101
|
-
</body>
|
|
102
|
-
</html>
|
package/html/logout.html
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
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>Logged Out - @knowcode/doc-builder</title>
|
|
7
|
-
<link rel="stylesheet" href="css/notion-style.css">
|
|
8
|
-
</head>
|
|
9
|
-
<body class="auth-page">
|
|
10
|
-
<div class="auth-container">
|
|
11
|
-
<div class="auth-box">
|
|
12
|
-
<h1>You have been logged out</h1>
|
|
13
|
-
<p>Thank you for using @knowcode/doc-builder.</p>
|
|
14
|
-
<a href="login.html" class="auth-button">Login Again</a>
|
|
15
|
-
</div>
|
|
16
|
-
</div>
|
|
17
|
-
</body>
|
|
18
|
-
</html>
|
|
@@ -1,429 +0,0 @@
|
|
|
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
|
-
<meta name="description" content="This guide documents how to implement aggressive cache-busting headers in doc-builder, but we strongly recommend against using this approach. This...">
|
|
7
|
-
<title>Cache Control Anti-Pattern: Why Aggressive Cach...</title>
|
|
8
|
-
|
|
9
|
-
<meta name="generator" content="@knowcode/doc-builder by Knowcode Ltd">
|
|
10
|
-
<meta name="author" content="Lindsay Smith">
|
|
11
|
-
<meta name="keywords" content="documentation, markdown, static site generator, vercel, notion-style, cache, caching">
|
|
12
|
-
<meta name="robots" content="index, follow">
|
|
13
|
-
<link rel="canonical" href="https://doc-builder-delta.vercel.app/private/cache-control-anti-pattern.html">
|
|
14
|
-
|
|
15
|
-
<!-- Open Graph / Facebook -->
|
|
16
|
-
<meta property="og:type" content="article">
|
|
17
|
-
<meta property="og:url" content="https://doc-builder-delta.vercel.app/private/cache-control-anti-pattern.html">
|
|
18
|
-
<meta property="og:title" content="Cache Control Anti-Pattern: Why Aggressive Cach...">
|
|
19
|
-
<meta property="og:description" content="This guide documents how to implement aggressive cache-busting headers in doc-builder, but we strongly recommend against using this approach. This...">
|
|
20
|
-
<meta property="og:image" content="https://doc-builder-delta.vercel.app/og-default.png">
|
|
21
|
-
<meta property="og:site_name" content="@knowcode/doc-builder">
|
|
22
|
-
<meta property="og:locale" content="en_US">
|
|
23
|
-
|
|
24
|
-
<!-- Twitter Card -->
|
|
25
|
-
<meta name="twitter:card" content="summary_large_image">
|
|
26
|
-
<meta name="twitter:site" content="@planbbackups">
|
|
27
|
-
<meta name="twitter:creator" content="@planbbackups">
|
|
28
|
-
<meta name="twitter:title" content="Cache Control Anti-Pattern: Why Aggressive Cach...">
|
|
29
|
-
<meta name="twitter:description" content="This guide documents how to implement aggressive cache-busting headers in doc-builder, but we strongly recommend against using this approach. This...">
|
|
30
|
-
<meta name="twitter:image" content="https://doc-builder-delta.vercel.app/og-default.png">
|
|
31
|
-
|
|
32
|
-
<!-- Custom Meta Tags -->
|
|
33
|
-
<meta name="google-site-verification" content="FtzcDTf5BQ9K5EfnGazQkgU2U4FiN3ITzM7gHwqUAqQ">
|
|
34
|
-
<meta name="msvalidate.01" content="B2D8C4C12C530D47AA962B24CAA09630">
|
|
35
|
-
|
|
36
|
-
<!-- Fonts -->
|
|
37
|
-
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
|
|
38
|
-
|
|
39
|
-
<!-- Icons -->
|
|
40
|
-
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
|
|
41
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@phosphor-icons/web@2.1.1/src/regular/style.css">
|
|
42
|
-
|
|
43
|
-
<!-- Mermaid -->
|
|
44
|
-
<script src="https://cdn.jsdelivr.net/npm/mermaid@10.6.1/dist/mermaid.min.js"></script>
|
|
45
|
-
|
|
46
|
-
<!-- Styles -->
|
|
47
|
-
<link rel="stylesheet" href="/css/notion-style.css">
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
<!-- Hide content until auth check -->
|
|
53
|
-
<style>
|
|
54
|
-
body {
|
|
55
|
-
visibility: hidden;
|
|
56
|
-
opacity: 0;
|
|
57
|
-
transition: opacity 0.3s ease;
|
|
58
|
-
}
|
|
59
|
-
body.authenticated {
|
|
60
|
-
visibility: visible;
|
|
61
|
-
opacity: 1;
|
|
62
|
-
}
|
|
63
|
-
/* Show login/logout pages immediately */
|
|
64
|
-
body.auth-page {
|
|
65
|
-
visibility: visible;
|
|
66
|
-
opacity: 1;
|
|
67
|
-
}
|
|
68
|
-
/* Style auth button consistently */
|
|
69
|
-
.auth-btn {
|
|
70
|
-
background: none;
|
|
71
|
-
border: none;
|
|
72
|
-
color: var(--text-secondary);
|
|
73
|
-
cursor: pointer;
|
|
74
|
-
padding: 0.5rem;
|
|
75
|
-
border-radius: 0.5rem;
|
|
76
|
-
transition: all 0.2s;
|
|
77
|
-
font-size: 1.1rem;
|
|
78
|
-
}
|
|
79
|
-
.auth-btn:hover {
|
|
80
|
-
background: var(--bg-secondary);
|
|
81
|
-
color: var(--text-primary);
|
|
82
|
-
}
|
|
83
|
-
</style>
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
<!-- Favicon -->
|
|
87
|
-
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>✨</text></svg>">
|
|
88
|
-
|
|
89
|
-
<script type="application/ld+json">
|
|
90
|
-
{
|
|
91
|
-
"@context": "https://schema.org",
|
|
92
|
-
"@type": "TechArticle",
|
|
93
|
-
"headline": "Cache Control Anti-Pattern: Why Aggressive Cache-Busting is Bad for Documentation Sites",
|
|
94
|
-
"description": "This guide documents how to implement aggressive cache-busting headers in doc-builder, but we strongly recommend against using this approach. This...",
|
|
95
|
-
"author": {
|
|
96
|
-
"@type": "Person",
|
|
97
|
-
"name": "Lindsay Smith"
|
|
98
|
-
},
|
|
99
|
-
"publisher": {
|
|
100
|
-
"@type": "Organization",
|
|
101
|
-
"name": "Knowcode Ltd",
|
|
102
|
-
"url": "https://knowcode.tech"
|
|
103
|
-
},
|
|
104
|
-
"datePublished": "2025-08-12T21:40:09.409Z",
|
|
105
|
-
"dateModified": "2025-08-12T21:40:09.409Z",
|
|
106
|
-
"mainEntityOfPage": {
|
|
107
|
-
"@type": "WebPage",
|
|
108
|
-
"@id": "https://doc-builder-delta.vercel.app/private/cache-control-anti-pattern.html"
|
|
109
|
-
},
|
|
110
|
-
"breadcrumb": {
|
|
111
|
-
"@type": "BreadcrumbList",
|
|
112
|
-
"itemListElement": [
|
|
113
|
-
{
|
|
114
|
-
"@type": "ListItem",
|
|
115
|
-
"position": 1,
|
|
116
|
-
"name": "@knowcode/doc-builder",
|
|
117
|
-
"item": "https://doc-builder-delta.vercel.app"
|
|
118
|
-
},
|
|
119
|
-
{
|
|
120
|
-
"@type": "ListItem",
|
|
121
|
-
"position": 2,
|
|
122
|
-
"name": "Private",
|
|
123
|
-
"item": "https://doc-builder-delta.vercel.app/private/"
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
"@type": "ListItem",
|
|
127
|
-
"position": 3,
|
|
128
|
-
"name": "Cache Control Anti Pattern",
|
|
129
|
-
"item": "https://doc-builder-delta.vercel.app/private/cache-control-anti-pattern.html"
|
|
130
|
-
}
|
|
131
|
-
]
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
</script>
|
|
135
|
-
</head>
|
|
136
|
-
<body>
|
|
137
|
-
|
|
138
|
-
<!-- Header -->
|
|
139
|
-
<header class="header">
|
|
140
|
-
<div class="header-content">
|
|
141
|
-
<a href="/index.html" class="logo">@knowcode/doc-builder</a>
|
|
142
|
-
|
|
143
|
-
<div class="header-actions">
|
|
144
|
-
<div class="deployment-info">
|
|
145
|
-
<span class="deployment-date" title="Built with doc-builder v1.9.29">Last updated: Aug 12, 2025, 09:40 PM UTC</span>
|
|
146
|
-
</div>
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
<a href="../../login.html" class="auth-btn" title="Login/Logout">
|
|
150
|
-
<i class="fas fa-sign-in-alt"></i>
|
|
151
|
-
</a>
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
<button id="theme-toggle" class="theme-toggle" aria-label="Toggle theme">
|
|
155
|
-
<i class="fas fa-moon"></i>
|
|
156
|
-
</button>
|
|
157
|
-
|
|
158
|
-
<button id="menu-toggle" class="menu-toggle" aria-label="Toggle menu">
|
|
159
|
-
<i class="fas fa-bars"></i>
|
|
160
|
-
</button>
|
|
161
|
-
</div>
|
|
162
|
-
</div>
|
|
163
|
-
</header>
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
<!-- Breadcrumbs -->
|
|
169
|
-
<nav class="breadcrumbs " id="breadcrumbs" >
|
|
170
|
-
<!-- Breadcrumbs will be generated by JavaScript -->
|
|
171
|
-
</nav>
|
|
172
|
-
|
|
173
|
-
<!-- Main Content -->
|
|
174
|
-
<div class="main-wrapper">
|
|
175
|
-
<!-- Sidebar -->
|
|
176
|
-
<aside class="sidebar">
|
|
177
|
-
<div class="sidebar-header">
|
|
178
|
-
<div class="filter-box">
|
|
179
|
-
<input type="text" placeholder="Search menu..." class="filter-input" id="nav-filter">
|
|
180
|
-
<i class="fas fa-search filter-icon"></i>
|
|
181
|
-
</div>
|
|
182
|
-
</div>
|
|
183
|
-
<nav class="navigation">
|
|
184
|
-
|
|
185
|
-
<div class="nav-section" data-level="0">
|
|
186
|
-
<a class="nav-title toggle-all-nav expanded" href="#" id="nav-toggle-all" title="Collapse/Expand All">
|
|
187
|
-
<i class="ph ph-caret-down" id="toggle-all-icon"></i> Documentation
|
|
188
|
-
</a>
|
|
189
|
-
<div class="nav-content">
|
|
190
|
-
<a href="/README.html" class="nav-item" data-tooltip="@knowcode/doc-builder."><i class="ph ph-file-text"></i> Overview</a>
|
|
191
|
-
<a href="/about-doc-builder.html" class="nav-item" data-tooltip="About @knowcode/doc-builder."><i class="ph ph-check-circle" style="color: #059669;"></i> About Doc Builder</a>
|
|
192
|
-
<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="ph ph-pencil-simple" style="color: #d97706;"></i> Documentation Index</a>
|
|
193
|
-
<a href="/image-modal-test.html" class="nav-item" data-tooltip="This document tests the new image modal functionality in doc-builder."><i class="ph ph-file-text"></i> Image Modal Test</a>
|
|
194
|
-
<a href="/vercel-cli-setup-guide.html" class="nav-item" data-tooltip="This guide provides comprehensive instructions for installing the Vercel CLI across different operating systems."><i class="ph ph-check-circle" style="color: #059669;"></i> Vercel Cli Setup Guide</a>
|
|
195
|
-
<a href="/vercel-first-time-setup-guide.html" class="nav-item" data-tooltip="This guide walks you through the Vercel deployment process when using ."><i class="ph ph-check-circle" style="color: #059669;"></i> Vercel First Time Setup Guide</a></div></div>
|
|
196
|
-
<div class="nav-section" data-level="1">
|
|
197
|
-
<a class="nav-title collapsible" href="#" data-target="nav-guides-1" >
|
|
198
|
-
<i class="ph ph-caret-right collapse-icon"></i><i class="ph ph-book"></i> Guides
|
|
199
|
-
</a>
|
|
200
|
-
<div class="nav-content collapsed" id="nav-guides-1">
|
|
201
|
-
<a href="/guides/authentication-default-change.html" class="nav-item" data-tooltip="Starting from version 1.7.4, @knowcode/doc-builder now defaults to no authentication for all documentation sites."><i class="ph ph-file-text"></i> Authentication Default Change</a>
|
|
202
|
-
<a href="/guides/authentication-guide.html" class="nav-item" data-tooltip="@knowcode/doc-builder supports enterprise-grade authentication through Supabase - a secure, scalable authentication platform."><i class="ph ph-check-circle" style="color: #059669;"></i> Authentication Guide</a>
|
|
203
|
-
<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="ph ph-pencil-simple" style="color: #d97706;"></i> Claude Workflow Guide</a>
|
|
204
|
-
<a href="/guides/configuration-guide.html" class="nav-item" data-tooltip="This guide explains how @knowcode/doc-builder handles configuration files and settings."><i class="ph ph-check-circle" style="color: #059669;"></i> Configuration Guide</a>
|
|
205
|
-
<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="ph ph-pencil-simple" style="color: #d97706;"></i> Documentation Standards</a>
|
|
206
|
-
<a href="/guides/html-embedding-guide.html" class="nav-item" data-tooltip="Starting from version 1.9.2, doc-builder treats HTML files ( and ) as attachments that are automatically copied to your output directory during the..."><i class="ph ph-check-circle" style="color: #059669;"></i> Html Embedding Guide</a>
|
|
207
|
-
<a href="/guides/image-modal-guide.html" class="nav-item" data-tooltip="When users click on any image in your generated documentation, it opens in a professional modal overlay with: Full-screen viewing experience Smooth..."><i class="ph ph-check-circle" style="color: #059669;"></i> Image Modal Guide</a>
|
|
208
|
-
<a href="/guides/phosphor-icons-guide.html" class="nav-item" data-tooltip="@knowcode/doc-builder automatically converts Unicode emojis in your markdown files to beautiful Phosphor icons in the generated HTML."><i class="ph ph-pencil-simple" style="color: #d97706;"></i> Phosphor Icons Guide</a>
|
|
209
|
-
<a href="/guides/private-directory-authentication.html" class="nav-item" data-tooltip="The @knowcode/doc-builder provides flexible authentication options to protect your documentation."><i class="ph ph-check-circle" style="color: #059669;"></i> Private Directory Authentication</a>
|
|
210
|
-
<a href="/guides/private-directory-authentication-troubleshooting.html" class="nav-item" data-tooltip="Private Directory Authentication Troubleshooting."><i class="ph ph-check-circle" style="color: #059669;"></i> Private Directory Authentication Troubleshooting</a>
|
|
211
|
-
<a href="/guides/public-site-deployment.html" class="nav-item" data-tooltip="The @knowcode/doc-builder now supports deploying public documentation sites without authentication."><i class="ph ph-check-circle" style="color: #059669;"></i> Public Site Deployment</a>
|
|
212
|
-
<a href="/guides/search-engine-verification-guide.html" class="nav-item" data-tooltip="Search engine verification provides access to powerful webmaster tools:."><i class="ph ph-check-circle" style="color: #059669;"></i> Search Engine Verification Guide</a>
|
|
213
|
-
<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="ph ph-check-circle" style="color: #059669;"></i> Seo Guide</a>
|
|
214
|
-
<a href="/guides/seo-optimization-guide.html" class="nav-item" data-tooltip="Comprehensive guide to optimizing documentation for search engines. Learn SEO best practices, use built-in features, and improve your rankings."><i class="ph ph-check-circle" style="color: #059669;"></i> SEO Optimization Guide for @knowcode/doc-builder</a>
|
|
215
|
-
<a href="/guides/supabase-authentication-complete-guide.html" class="nav-item" data-tooltip="@knowcode/doc-builder includes built-in Supabase authentication that provides enterprise-grade security with zero configuration."><i class="ph ph-check-circle" style="color: #059669;"></i> Supabase Authentication Complete Guide</a>
|
|
216
|
-
<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="ph ph-check-circle" style="color: #059669;"></i> Troubleshooting Guide</a>
|
|
217
|
-
<a href="/guides/windows-setup-guide.html" class="nav-item" data-tooltip="This guide helps Windows users set up the complete AI-powered documentation workflow using Claude Code, @knowcode/doc-builder, and Vercel."><i class="ph ph-check-circle" style="color: #059669;"></i> Windows Setup Guide</a></div></div>
|
|
218
|
-
<div class="nav-section private-nav" data-level="1">
|
|
219
|
-
<a class="nav-title collapsible expanded" href="#" data-target="nav-private-1" >
|
|
220
|
-
<i class="ph ph-caret-right collapse-icon"></i><i class="ph ph-lock"></i> Private
|
|
221
|
-
</a>
|
|
222
|
-
<div class="nav-content" id="nav-private-1">
|
|
223
|
-
<a href="/private/cache-control-anti-pattern.html" class="nav-item active" data-tooltip="Cache Control Anti-Pattern: Why Aggressive Cache-Busting is Bad for Documentation Sites."><i class="ph ph-check-circle" style="color: #059669;"></i> Cache Control Anti Pattern</a>
|
|
224
|
-
<a href="/private/next-steps-walkthrough.html" class="nav-item" data-tooltip="Now that we've implemented Supabase authentication, let's walk through testing the implementation and preparing for deployment."><i class="ph ph-check-circle" style="color: #059669;"></i> Next Steps Walkthrough</a>
|
|
225
|
-
<a href="/private/supabase-auth-implementation-completed.html" class="nav-item" data-tooltip="This document records the successful implementation of Supabase authentication in @knowcode/doc-builder v1.7.5+."><i class="ph ph-check-circle" style="color: #059669;"></i> Supabase Auth Implementation Completed</a>
|
|
226
|
-
<a href="/private/supabase-auth-implementation-plan.html" class="nav-item" data-tooltip="Supabase Auth Implementation Plan for @knowcode/doc-builder."><i class="ph ph-check-circle" style="color: #059669;"></i> Supabase Auth Implementation Plan</a>
|
|
227
|
-
<a href="/private/supabase-auth-integration-plan.html" class="nav-item" data-tooltip="Supabase Authentication Integration Plan for @knowcode/doc-builder."><i class="ph ph-check-circle" style="color: #059669;"></i> Supabase Auth Integration Plan</a>
|
|
228
|
-
<a href="/private/supabase-auth-setup-guide.html" class="nav-item" data-tooltip="@knowcode/doc-builder supports enterprise-grade authentication through Supabase."><i class="ph ph-check-circle" style="color: #059669;"></i> Supabase Auth Setup Guide</a>
|
|
229
|
-
<a href="/private/test-private-doc.html" class="nav-item" data-tooltip="Test Private Document."><i class="ph ph-file-text"></i> Test Private Doc</a>
|
|
230
|
-
<a href="/private/user-management-tooling.html" class="nav-item" data-tooltip="The user management system is a set of tools designed to manage user access to Supabase-authenticated documentation sites built with."><i class="ph ph-check-circle" style="color: #059669;"></i> User Management Tooling</a></div></div>
|
|
231
|
-
<div class="nav-section private-nav" data-level="2">
|
|
232
|
-
<a class="nav-title collapsible" href="/private/launch/README.html" data-target="nav-private-launch-2" >
|
|
233
|
-
<i class="ph ph-caret-right collapse-icon"></i><i class="ph ph-rocket-launch"></i> Launch
|
|
234
|
-
</a>
|
|
235
|
-
<div class="nav-content collapsed" id="nav-private-launch-2">
|
|
236
|
-
<a href="/private/launch/README.html" class="nav-item" data-tooltip="This directory contains all documentation related to the commercial launch of @knowcode/doc-builder, including go-to-market strategy, platform..."><i class="ph ph-check-circle" style="color: #059669;"></i> Launch Overview</a>
|
|
237
|
-
<a href="/private/launch/auth-cleanup-summary.html" class="nav-item" data-tooltip="All references to the old client-side authentication system have been removed from @knowcode/doc-builder."><i class="ph ph-check-circle" style="color: #059669;"></i> Auth Cleanup Summary</a>
|
|
238
|
-
<a href="/private/launch/bubble-plugin-specification.html" class="nav-item" data-tooltip="This document outlines the technical specification for creating a Bubble.io plugin that integrates @knowcode/doc-builder, enabling Bubble developers..."><i class="ph ph-x-circle" style="color: #dc2626;"></i> Bubble Plugin Specification</a>
|
|
239
|
-
<a href="/private/launch/go-to-market-strategy.html" class="nav-item" data-tooltip="Go-to-Market Strategy & Product Launch Plan."><i class="ph ph-pencil-simple" style="color: #d97706;"></i> Go To Market Strategy</a>
|
|
240
|
-
<a href="/private/launch/launch-announcements.html" class="nav-item" data-tooltip="This document contains ready-to-use announcement templates for launching @knowcode/doc-builder across various platforms and channels."><i class="ph ph-check-circle" style="color: #059669;"></i> Launch Announcements</a>
|
|
241
|
-
<a href="/private/launch/vercel-deployment-auth-setup.html" class="nav-item" data-tooltip="Vercel Deployment Authentication Setup Guide."><i class="ph ph-check-circle" style="color: #059669;"></i> Vercel Deployment Auth Setup</a></div></div>
|
|
242
|
-
<div class="nav-section" data-level="1">
|
|
243
|
-
<a class="nav-title collapsible" href="#" data-target="nav-prompts-1" >
|
|
244
|
-
<i class="ph ph-caret-right collapse-icon"></i><i class="ph ph-chat-circle-dots"></i> Prompts
|
|
245
|
-
</a>
|
|
246
|
-
<div class="nav-content collapsed" id="nav-prompts-1">
|
|
247
|
-
<a href="/prompts/beautiful-documentation-design.html" class="nav-item" data-tooltip="🎨 Beautiful Documentation Design Guide."><i class="ph ph-check-circle" style="color: #059669;"></i> Beautiful Documentation Design</a>
|
|
248
|
-
<a href="/prompts/markdown-document-standards.html" class="nav-item" data-tooltip="Detailed introduction to the topic..."><i class="ph ph-pencil-simple" style="color: #d97706;"></i> Markdown Document Standards</a>
|
|
249
|
-
<a href="/prompts/project-rename-strategy-sasha-publish.html" class="nav-item" data-tooltip="This document outlines the comprehensive strategy for renaming the @knowcode/doc-builder project to "sasha-publish", including all package references,..."><i class="ph ph-x-circle" style="color: #dc2626;"></i> Project Rename Strategy Sasha Publish</a></div></div>
|
|
250
|
-
<div class="nav-section" data-level="1">
|
|
251
|
-
<a class="nav-title collapsible" href="#" data-target="nav-test-questions-1" >
|
|
252
|
-
<i class="ph ph-caret-right collapse-icon"></i><i class="ph ph-folder"></i> Test Questions
|
|
253
|
-
</a>
|
|
254
|
-
<div class="nav-content collapsed" id="nav-test-questions-1">
|
|
255
|
-
<a href="/test-questions/how-does-it-work%3F.html" class="nav-item" data-tooltip="This is a test file to verify that question marks work properly in filenames."><i class="ph ph-file-text"></i> How Does It Work?</a>
|
|
256
|
-
<a href="/test-questions/step-1%3A%20getting-started.html" class="nav-item" data-tooltip="Step 1: Getting Started."><i class="ph ph-file-text"></i> Step 1: Getting Started</a>
|
|
257
|
-
<a href="/test-questions/what-is-the-purpose.html" class="nav-item" data-tooltip="Understanding the purpose of our documentation system"><i class="ph ph-file-text"></i> What Is The Purpose?</a></div></div>
|
|
258
|
-
</nav>
|
|
259
|
-
<div class="resize-handle"></div>
|
|
260
|
-
</aside>
|
|
261
|
-
|
|
262
|
-
<!-- Content Area -->
|
|
263
|
-
<main class="content">
|
|
264
|
-
<div class="content-inner">
|
|
265
|
-
<h1>Cache Control Anti-Pattern: Why Aggressive Cache-Busting is Bad for Documentation Sites</h1>
|
|
266
|
-
<h2><i style="font-size: 1.2em" class="ph ph-warning-circle" aria-label="warning"></i> Important Notice</h2>
|
|
267
|
-
<p>This guide documents how to implement aggressive cache-busting headers in doc-builder, but <strong>we strongly recommend against using this approach</strong>. This documentation exists for educational purposes and to explain why this is considered an anti-pattern for static documentation sites.</p>
|
|
268
|
-
<h2>Why Cache-Busting is a Bad Idea for Documentation</h2>
|
|
269
|
-
<h3>1. Performance Degradation</h3>
|
|
270
|
-
<ul>
|
|
271
|
-
<li><strong>Increased Load Times</strong>: Every page visit requires a full server round-trip</li>
|
|
272
|
-
<li><strong>No Offline Access</strong>: Users can't view previously visited pages without internet</li>
|
|
273
|
-
<li><strong>Bandwidth Waste</strong>: Repeatedly downloading unchanged content</li>
|
|
274
|
-
<li><strong>Server Load</strong>: Unnecessary strain on your hosting infrastructure</li>
|
|
275
|
-
</ul>
|
|
276
|
-
<h3>2. Poor User Experience</h3>
|
|
277
|
-
<ul>
|
|
278
|
-
<li>Documentation is typically static content that changes infrequently</li>
|
|
279
|
-
<li>Users expect fast page loads when navigating documentation</li>
|
|
280
|
-
<li>Browser back/forward navigation becomes sluggish</li>
|
|
281
|
-
<li>Search engines may penalize sites with poor performance</li>
|
|
282
|
-
</ul>
|
|
283
|
-
<h3>3. Cost Implications</h3>
|
|
284
|
-
<ul>
|
|
285
|
-
<li>Higher bandwidth costs on platforms like Vercel</li>
|
|
286
|
-
<li>Increased CDN usage without benefits</li>
|
|
287
|
-
<li>More compute resources needed to serve requests</li>
|
|
288
|
-
</ul>
|
|
289
|
-
<h3>4. Against Web Best Practices</h3>
|
|
290
|
-
<ul>
|
|
291
|
-
<li>Static documentation should leverage browser caching</li>
|
|
292
|
-
<li>CDNs exist specifically to cache and serve static content efficiently</li>
|
|
293
|
-
<li>Modern web performance relies on intelligent caching strategies</li>
|
|
294
|
-
</ul>
|
|
295
|
-
<h2>How to Implement No-Cache Headers (Not Recommended)</h2>
|
|
296
|
-
<p>Despite the downsides, here's how you would implement aggressive cache-busting if absolutely necessary:</p>
|
|
297
|
-
<h3>Option 1: HTML Meta Tags</h3>
|
|
298
|
-
<p>Add these meta tags to the HTML template in <code>lib/core-builder.js</code>:</p>
|
|
299
|
-
<pre><code class="language-javascript">// In the generateHTML function, add to the <head> section:
|
|
300
|
-
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
|
|
301
|
-
<meta http-equiv="Pragma" content="no-cache">
|
|
302
|
-
<meta http-equiv="Expires" content="0">
|
|
303
|
-
</code></pre>
|
|
304
|
-
<h3>Option 2: Vercel Configuration</h3>
|
|
305
|
-
<p>Create or modify <code>vercel.json</code> in your output directory:</p>
|
|
306
|
-
<pre><code class="language-json">{
|
|
307
|
-
"headers": [
|
|
308
|
-
{
|
|
309
|
-
"source": "/(.*)",
|
|
310
|
-
"headers": [
|
|
311
|
-
{
|
|
312
|
-
"key": "Cache-Control",
|
|
313
|
-
"value": "no-cache, no-store, must-revalidate"
|
|
314
|
-
},
|
|
315
|
-
{
|
|
316
|
-
"key": "Pragma",
|
|
317
|
-
"value": "no-cache"
|
|
318
|
-
},
|
|
319
|
-
{
|
|
320
|
-
"key": "Expires",
|
|
321
|
-
"value": "0"
|
|
322
|
-
}
|
|
323
|
-
]
|
|
324
|
-
}
|
|
325
|
-
]
|
|
326
|
-
}
|
|
327
|
-
</code></pre>
|
|
328
|
-
<h3>Option 3: Modified Core Builder</h3>
|
|
329
|
-
<p>To add cache-busting query parameters to all internal links:</p>
|
|
330
|
-
<pre><code class="language-javascript">// In core-builder.js, modify link generation:
|
|
331
|
-
function addCacheBuster(url) {
|
|
332
|
-
const timestamp = Date.now();
|
|
333
|
-
const separator = url.includes('?') ? '&' : '?';
|
|
334
|
-
return `${url}${separator}v=${timestamp}`;
|
|
335
|
-
}
|
|
336
|
-
</code></pre>
|
|
337
|
-
<h2>Better Alternatives (Recommended)</h2>
|
|
338
|
-
<h3>1. Intelligent Cache Headers</h3>
|
|
339
|
-
<p>Instead of no-cache, use smart caching:</p>
|
|
340
|
-
<pre><code class="language-json">{
|
|
341
|
-
"headers": [
|
|
342
|
-
{
|
|
343
|
-
"source": "/(.*).html",
|
|
344
|
-
"headers": [{
|
|
345
|
-
"key": "Cache-Control",
|
|
346
|
-
"value": "public, max-age=3600, stale-while-revalidate=86400"
|
|
347
|
-
}]
|
|
348
|
-
},
|
|
349
|
-
{
|
|
350
|
-
"source": "/css/(.*)",
|
|
351
|
-
"headers": [{
|
|
352
|
-
"key": "Cache-Control",
|
|
353
|
-
"value": "public, max-age=31536000, immutable"
|
|
354
|
-
}]
|
|
355
|
-
}
|
|
356
|
-
]
|
|
357
|
-
}
|
|
358
|
-
</code></pre>
|
|
359
|
-
<h3>2. Version-Based Cache Busting</h3>
|
|
360
|
-
<p>Only bust cache when content actually changes:</p>
|
|
361
|
-
<pre><code class="language-javascript">// In doc-builder.config.js
|
|
362
|
-
module.exports = {
|
|
363
|
-
// ... other config
|
|
364
|
-
buildVersion: require('./package.json').version,
|
|
365
|
-
// Assets will be served as: style.css?v=1.4.3
|
|
366
|
-
};
|
|
367
|
-
</code></pre>
|
|
368
|
-
<h3>3. Content-Based Hashing</h3>
|
|
369
|
-
<p>Use build tools to generate hashed filenames:</p>
|
|
370
|
-
<ul>
|
|
371
|
-
<li><code>style.css</code> → <code>style.a8f7c2.css</code></li>
|
|
372
|
-
<li>Cache forever with new filename on changes</li>
|
|
373
|
-
</ul>
|
|
374
|
-
<h3>4. Service Worker Strategy</h3>
|
|
375
|
-
<p>Implement a service worker for intelligent caching:</p>
|
|
376
|
-
<ul>
|
|
377
|
-
<li>Cache static assets aggressively</li>
|
|
378
|
-
<li>Network-first for HTML content</li>
|
|
379
|
-
<li>Offline fallback for better UX</li>
|
|
380
|
-
</ul>
|
|
381
|
-
<h2>The Real Solution to Browser Title Issues</h2>
|
|
382
|
-
<p>The "Quarterly Sales Report" issue mentioned is likely due to:</p>
|
|
383
|
-
<ol>
|
|
384
|
-
<li><strong>Browser Session Restore</strong>: Browser remembering old tab titles</li>
|
|
385
|
-
<li><strong>History Cache</strong>: Browser's back/forward cache</li>
|
|
386
|
-
<li><strong>Tab Suspension</strong>: Browser saving memory by caching tab state</li>
|
|
387
|
-
</ol>
|
|
388
|
-
<h3>Simple Fixes:</h3>
|
|
389
|
-
<ul>
|
|
390
|
-
<li>Hard refresh: <code>Ctrl+Shift+R</code> (Windows/Linux) or <code>Cmd+Shift+R</code> (Mac)</li>
|
|
391
|
-
<li>Clear browser cache for the specific site</li>
|
|
392
|
-
<li>Open the page in an incognito/private window</li>
|
|
393
|
-
</ul>
|
|
394
|
-
<h2>Conclusion</h2>
|
|
395
|
-
<p>Aggressive cache-busting is an anti-pattern for documentation sites. The performance and user experience costs far outweigh any benefits. Instead:</p>
|
|
396
|
-
<ol>
|
|
397
|
-
<li><i style="font-size: 1.2em" class="ph ph-check-circle" aria-label="checked"></i> Use intelligent caching strategies</li>
|
|
398
|
-
<li><i style="font-size: 1.2em" class="ph ph-check-circle" aria-label="checked"></i> Implement version-based cache busting for assets</li>
|
|
399
|
-
<li><i style="font-size: 1.2em" class="ph ph-check-circle" aria-label="checked"></i> Trust browsers to handle HTML caching appropriately</li>
|
|
400
|
-
<li><i style="font-size: 1.2em" class="ph ph-x-circle" aria-label="error"></i> Don't disable caching entirely</li>
|
|
401
|
-
</ol>
|
|
402
|
-
<p>Remember: Documentation sites are meant to be fast, reliable, and accessible. Proper caching is essential to achieving these goals.</p>
|
|
403
|
-
<h2>See Also</h2>
|
|
404
|
-
<ul>
|
|
405
|
-
<li><a href="./seo-optimization-guide.md">SEO Optimization Guide</a> - Proper meta tag configuration</li>
|
|
406
|
-
<li><a href="https://web.dev/fast/">Performance Best Practices</a> - Google's web performance guidelines</li>
|
|
407
|
-
<li><a href="https://vercel.com/docs/concepts/edge-network/caching">Vercel Caching Documentation</a> - Platform-specific caching strategies</li>
|
|
408
|
-
</ul>
|
|
409
|
-
|
|
410
|
-
</div>
|
|
411
|
-
</main>
|
|
412
|
-
</div>
|
|
413
|
-
|
|
414
|
-
<!-- Scripts -->
|
|
415
|
-
<script>
|
|
416
|
-
// Pass configuration to frontend
|
|
417
|
-
window.docBuilderConfig = {
|
|
418
|
-
features: {
|
|
419
|
-
showPdfDownload: true,
|
|
420
|
-
menuDefaultOpen: false,
|
|
421
|
-
mermaidEnhanced: true
|
|
422
|
-
}
|
|
423
|
-
};
|
|
424
|
-
</script>
|
|
425
|
-
<script src="/js/main.js"></script>
|
|
426
|
-
<script src="https://unpkg.com/@supabase/supabase-js@2"></script>
|
|
427
|
-
<script src="/js/auth.js"></script>
|
|
428
|
-
</body>
|
|
429
|
-
</html>
|