Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,9 @@ <h3 id="sqlbuild-name">SQLBuild</h3>
<img class="product-icon" src="assets/icons/sqltide.png" width="52" height="52" alt="">
<div class="product-content">
<h3 id="sqltide-name">SQLTide</h3>
<p>ClickHouse streaming pipelines with change-aware backfills and bounded replay.</p>
<p>Streaming pipelines for ClickHouse. Build and check new versions before promotion.</p>
<div class="product-links">
<a href="https://docs.streambuild.dev" aria-label="SQLTide docs">Docs <span aria-hidden="true">↗</span></a>
<a href="https://sqltide.io/" aria-label="SQLTide website">Website <span aria-hidden="true">↗</span></a>
<a href="https://github.com/sqlstack-io/sqltide" aria-label="SQLTide on GitHub">GitHub <span aria-hidden="true">↗</span></a>
</div>
</div>
Expand All @@ -106,7 +106,7 @@ <h2 id="check-title">Keep it sound.</h2>
<img class="product-icon logo-for-dark" src="assets/icons/sqlclean-dark.png" width="52" height="52" alt="">
<div class="product-content">
<h3 id="sqlclean-name">SQLClean</h3>
<p><span class="text-line">SQL linting and formatting.</span> Lint 10,000 files in <a href="https://sqlclean.io/docs/benchmarks/">under a second.</a><sup><a href="#benchmark" aria-label="Benchmark conditions">*</a></sup></p>
<p><span class="text-line">SQL linting and formatting.</span> Lint 10,000 files in <a href="https://sqlclean.io/docs/benchmarks/">under a second.</a></p>
<div class="product-links">
<a href="https://sqlclean.io" aria-label="SQLClean website">Website <span aria-hidden="true">↗</span></a>
<a href="https://github.com/sqlstack-io/sqlclean" aria-label="SQLClean on GitHub">GitHub <span aria-hidden="true">↗</span></a>
Expand Down Expand Up @@ -152,7 +152,6 @@ <h3 id="sqlload-name">SQLLoad</h3>
</div>
</section>
</div>
<p class="benchmark" id="benchmark" tabindex="-1">* Published benchmark: 10,282 files, default lint rules, 4 CPUs, 0.81 s.</p>
</main>

<footer class="shell site-footer">
Expand Down
6 changes: 1 addition & 5 deletions styles.css
Original file line number Diff line number Diff line change
Expand Up @@ -106,8 +106,6 @@ h3 { margin: 0; font-family: "Space Grotesk", sans-serif; font-size: 24.94308px;
.fensu h3 { font-size: 25.5px; }
.product-content > p { margin: 4px 0 12px; min-height: 42px; font-size: 15px; line-height: 1.4; color: var(--muted); }
.text-line { display: block; }
sup { font-size: 11px; line-height: 0; }
sup a { color: var(--muted); text-decoration: none; padding-inline: 2px; }
.product-links { display: flex; gap: 28px; margin-top: auto; padding-top: 10px; border-top: 1px solid var(--line); font-size: 14px; line-height: 20px; }
.product-links a { display: inline-flex; align-items: center; gap: 8px; text-decoration: none; }
.product-links a:hover { text-decoration: underline; }
Expand All @@ -121,10 +119,9 @@ sup a { color: var(--muted); text-decoration: none; padding-inline: 2px; }
.upcoming-name { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; }
.badge { display: inline-block; padding: 6px 10px; border-radius: 4px; font-size: 12px; line-height: 16px; color: var(--gold-ink); background: var(--gold-bg); white-space: nowrap; }
.sqlload .badge { color: var(--pink-ink); background: var(--pink-bg); }
.benchmark { margin: 0 0 12px; color: var(--muted); font-size: 12px; line-height: 1.5; }
.site-footer { display: flex; justify-content: space-between; gap: 16px; padding: 12px 0 24px; border-top: 1px solid var(--line); font-size: 12px; line-height: 1.5; }
.site-footer span:last-child { color: var(--muted); }
#tools, #benchmark { scroll-margin-top: 20px; }
#tools { scroll-margin-top: 20px; }

@media (max-width: 1200px) {
.tool-row { grid-template-columns: 250px minmax(0, 1fr); }
Expand Down Expand Up @@ -154,6 +151,5 @@ sup a { color: var(--muted); text-decoration: none; padding-inline: 2px; }
.upcoming .product { min-height: 116px; }
.upcoming-name { gap: 8px; }
.badge { padding-inline: 8px; }
.benchmark { margin-bottom: 16px; }
.site-footer { flex-wrap: wrap; }
}
8 changes: 8 additions & 0 deletions tests/website.spec.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,13 @@ test('approved products, sharing assets and responsive navigation work in both t
await expect(page.getByRole('link', { name: 'SQLStack on GitHub', exact: true })).toHaveAttribute('href', 'https://github.com/sqlstack-io');
await expect(page.getByText('Compile-time checks, tested behaviour and enforceable architecture.', { exact: true })).toBeVisible();
await expect(page.locator('footer')).toContainText('Independent tools. Shared foundations. 100% open source.');
const sqltideWebsite = page.getByRole('article', { name: 'SQLTide', exact: true }).getByRole('link', { name: 'SQLTide website', exact: true });
await expect(sqltideWebsite).toHaveAttribute('href', 'https://sqltide.io/');
await expect(sqltideWebsite).toHaveText('Website ↗');
const sqlclean = page.getByRole('article', { name: 'SQLClean', exact: true });
await expect(sqlclean.locator('p')).toHaveText('SQL linting and formatting. Lint 10,000 files in under a second.');
await expect(sqlclean.getByRole('link', { name: 'under a second.', exact: true })).toHaveAttribute('href', 'https://sqlclean.io/docs/benchmarks/');
await expect(page.getByText('Published benchmark:', { exact: false })).toHaveCount(0);
for (const name of names.slice(4)) {
const card = page.getByRole('article', { name, exact: true });
await expect(card.getByText('Coming soon', { exact: true })).toBeVisible();
Expand All @@ -60,6 +67,7 @@ test('approved products, sharing assets and responsive navigation work in both t
for (const width of [320, 390, 768, 1536]) {
await page.setViewportSize({ width, height: 900 });
expect(await page.evaluate(() => document.documentElement.scrollWidth <= innerWidth)).toBe(true);
await expect(sqltideWebsite).toBeVisible();
await expect(page.getByRole('button', { name: 'Dark mode', exact: true })).toBeInViewport();
}
await expect(page.locator('.hero').getByRole('link')).toHaveCount(1);
Expand Down
Loading