Skip to content
This repository was archived by the owner on Oct 10, 2025. It is now read-only.

Commit 67b7ac2

Browse files
authored
Banner for Enterprise (#604)
# Contributor agreement - [x] I have read and agree to the [Contributor Agreement](https://github.com/kuzudb/kuzu-docs/blob/main/CLA.md).
1 parent e94f6df commit 67b7ac2

4 files changed

Lines changed: 137 additions & 15 deletions

File tree

astro.config.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ export default defineConfig({
8989
],
9090
components: {
9191
Header: './src/components/overrides/Header.astro',
92+
Banner: './src/components/overrides/Banner.astro',
9293
},
9394
sidebar: [
9495
{

scripts/update-version.cjs

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,29 @@ const fs = require('fs/promises');
33
const path = require('path');
44

55
(async () => {
6-
console.log("Fetching latest version from GitHub...");
7-
const response = await fetch(GITHUB_API_URL);
8-
const data = await response.json();
9-
let version = data.tag_name;
10-
version = version.trim();
11-
version = version.substring(1);
12-
console.log(`Latest version is ${version}`);
13-
console.log("Updating version.json...");
14-
const pathToJson = path.resolve(path.join(__dirname, "..", "src", "version.json"));
15-
console.log("Path to version.json: ", pathToJson);
16-
const json = JSON.stringify({ version }, null, 2);
17-
await fs.writeFile(pathToJson, json);
18-
console.log("version.json updated successfully.");
19-
console.log("Done.");
6+
try {
7+
console.log("Fetching latest version from GitHub...");
8+
const response = await fetch(GITHUB_API_URL);
9+
if (!response.ok) {
10+
throw new Error(`GitHub API request failed: ${response.status} ${response.statusText}`);
11+
}
12+
const data = await response.json();
13+
let version = data.tag_name;
14+
if (!version || typeof version !== 'string') {
15+
throw new Error('Failed to fetch version: tag_name is missing or not a string');
16+
}
17+
version = version.trim();
18+
version = version.startsWith('v') ? version.substring(1) : version;
19+
console.log(`Latest version is ${version}`);
20+
console.log("Updating version.json...");
21+
const pathToJson = path.resolve(path.join(__dirname, "..", "src", "version.json"));
22+
console.log("Path to version.json: ", pathToJson);
23+
const json = JSON.stringify({ version }, null, 2);
24+
await fs.writeFile(pathToJson, json);
25+
console.log("version.json updated successfully.");
26+
console.log("Done.");
27+
} catch (err) {
28+
console.error("Error updating version:", err);
29+
process.exit(1);
30+
}
2031
})();
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
---
2+
---
3+
<script>
4+
if (typeof window !== 'undefined' && localStorage.getItem('kuzuBannerClosed') === 'true') {
5+
document.write('<style>#top-banner{display:none !important;}</style>');
6+
}
7+
</script>
8+
<div class="sl-banner" id="top-banner">
9+
<div class="banner-content">
10+
<a href="https://kuzudb.com/product" target="_blank" rel="noopener noreferrer" class="banner-link">
11+
<i class="fa fa-star" aria-hidden="true"></i>
12+
<span class="enterprise-waitlist-text">
13+
⭐ Join our Enterprise Edition Waitlist →
14+
</span>
15+
</a>
16+
</div>
17+
<button id="close-banner" aria-label="Close banner">&times;</button>
18+
</div>
19+
20+
<style>
21+
.sl-banner {
22+
background-color: rgba(249, 115, 22, 0.3);
23+
display: flex;
24+
flex-direction: row;
25+
align-items: center;
26+
justify-content: space-between;
27+
padding: 0.25rem 2.5rem;
28+
position: sticky;
29+
color: white;
30+
font-size: 0.875rem;
31+
top: 0;
32+
z-index: 100;
33+
gap: 1rem;
34+
width: 100%;
35+
min-height: 2.5rem;
36+
}
37+
.banner-content {
38+
flex: 1;
39+
display: flex;
40+
justify-content: center;
41+
align-items: center;
42+
text-align: center;
43+
}
44+
.banner-link {
45+
display: flex;
46+
align-items: center;
47+
justify-content: center;
48+
color: inherit;
49+
text-decoration: none;
50+
font-weight: 500;
51+
min-width: 0;
52+
text-align: center;
53+
}
54+
.banner-link:hover {
55+
text-decoration: underline;
56+
}
57+
.enterprise-waitlist-text {
58+
color: var(--sl-color-text);
59+
font-size: 0.875rem;
60+
animation: pulse 2s cubic-bezier(0.4,0,0.6,1) infinite;
61+
white-space: nowrap;
62+
overflow: hidden;
63+
text-overflow: ellipsis;
64+
max-width: 100%;
65+
display: inline-block;
66+
margin-left: 0.5em;
67+
}
68+
@media (min-width: 768px) {
69+
.enterprise-waitlist-text {
70+
font-size: 0.875rem;
71+
}
72+
}
73+
@media (prefers-color-scheme: dark) {
74+
.enterprise-waitlist-text {
75+
color: var(--sl-color-text);
76+
}
77+
}
78+
@keyframes pulse {
79+
0%, 100% { opacity: 1; }
80+
50% { opacity: .5; }
81+
}
82+
#close-banner {
83+
background: none;
84+
border: none;
85+
color: var(--sl-color-gray-3);
86+
font-size: 1rem;
87+
cursor: pointer;
88+
align-self: center;
89+
margin-left: 0.5rem;
90+
}
91+
#close-banner:hover {
92+
color: var(--sl-color-white);
93+
}
94+
</style>
95+
96+
<script>
97+
window.addEventListener('load', () => {
98+
const banner = document.getElementById('top-banner');
99+
const closeButton = document.getElementById('close-banner');
100+
if (!banner || !closeButton) return;
101+
if (localStorage.getItem('kuzuBannerClosed') === 'true') {
102+
banner.style.display = 'none';
103+
}
104+
closeButton.addEventListener('click', () => {
105+
banner.style.display = 'none';
106+
localStorage.setItem('kuzuBannerClosed', 'true');
107+
});
108+
});
109+
</script>

src/components/overrides/Header.astro

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@ import Search from "@astrojs/starlight/components/Search.astro";
55
import SocialIcons from "@astrojs/starlight/components/SocialIcons.astro";
66
import ThemeSelect from "@astrojs/starlight/components/ThemeSelect.astro";
77
import { Icon } from "@astrojs/starlight/components";
8+
import Banner from './Banner.astro';
89
---
9-
1010
<div class="header sl-flex">
11+
1112
<div class="sl-flex">
1213
<SiteTitle {...Astro.props} />
1314
</div>

0 commit comments

Comments
 (0)