Reorganize site with modern landing page and interactive SQL demo#59
Reorganize site with modern landing page and interactive SQL demo#59sdanyliv wants to merge 8 commits into
Conversation
- Create landing page with hero section and three main navigation cards - Move guide content from articles/ to new documentation/ section with hub page - Repurpose articles/ for blog/news content (Release Notes) - Add Documentation to top-level navigation - Update docfx.json content globs for new structure - Add custom CSS for card layouts, navbar logo sizing, and hover effects - Add CLAUDE.md with project guidance Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Redesign hero section with dark gradient background and split layout - Add syntax-highlighted C# code sample with terminal-style chrome - Replace basic Bootstrap cards with custom styled navigation cards - Add four-column feature highlights with gradient icon badges - Full-width sections breaking out of DocFX container - Dark/light mode aware via CSS variables - Responsive layout with mobile-first breakpoints - Fix code block formatting (use entities to prevent paragraph wrapping) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove global _disableContribution flag - Add _gitContribute pointing to linq2db/docs repo on master branch - Disable edit links on API pages only (auto-generated, not hand-edited) - Documentation pages now show "Edit this page" linking to GitHub source Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Query: basic WHERE + ORDER BY + SELECT - Associations: navigation properties → LEFT JOIN + subquery COUNT - ExpressionMethod: reusable [ExpressionMethod] with let keyword - CTE: named CTE reused in both join and subquery - Window Functions: ROW_NUMBER, RANK, SUM OVER with PARTITION BY - Merge: MERGE INTO with WHEN MATCHED/NOT MATCHED (SQL Server) - Temp Table: CreateTempTable with Enumerable.Range + join All SQL is real output from linq2db's ToSqlQuery() API. Tabs use pure CSS (radio inputs + :checked selectors, no JavaScript). Add tools/sql-demo/ with SqlDemoGenerator.cs test file and README.md maintenance guide for extending/rebuilding demo tabs. Update CLAUDE.md with new site structure and demo docs reference. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Replace generic badge with linked .NET Foundation member badge - Add hover effects and checkmark icon to badge - Links to https://dotnetfoundation.org/ Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Disable contribution/edit link on landing page via frontmatter - Reduce hero padding from 5rem/4rem to 3rem/2.5rem - Reduce title font size from 3.5rem to 3rem - Tighten subtitle line-height and margins - Reduce cards and features section padding Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fix CI build failure — submodule update during local development accidentally advanced LinqToDB.Identity and linq2db pointers to commits not reachable via shallow clone in Azure Pipelines. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
MaceWindu
left a comment
There was a problem hiding this comment.
Review of the site reorg + landing page. Structure is sound — pure-CSS radio/label tabs (7 inputs ↔ 7 panels ↔ 7 :checked pairs, all consistent), dark/light via Bootstrap CSS vars, clean renames (articles/ → documentation/), net-zero submodule change. Two blocking items, rest is polish.
BLOCKING · 1 — Remove the .NET Foundation Member badge
linq2db has retired from the .NET Foundation, so this hero badge in source/index.md is now a false claim (only .NET Foundation reference in the PR):
-<a href="https://dotnetfoundation.org/" class="landing-badge mb-3"><i class="bi bi-patch-check-fill"></i> .NET Foundation Member</a>Drop the anchor. The .landing-badge rules in main.css then go unused — delete them too, or repurpose the badge for something current (MIT / Open Source).
BLOCKING · 2 — SqlDemoGenerator.TempTableDemo can't reproduce the Temp Table tab
tools/sql-demo/README.md presents SqlDemoGenerator.cs as the reproducible source of the displayed SQL. But TempTableDemo() is a group-by aggregation with no temp table at all — unrelated to the tab, which shows CreateTempTable("#FilterIds", …) + BulkCopy + join. A maintainer copying it back per the guide gets wrong output. Either implement the real CreateTempTable path or remove the method and state in the guide that this tab has no generator.
MINOR · 3 — WindowFunctions generator drifts from its tab
WindowFunctions() computes three window columns (RowNum, Rank, Total); the tab shows only RowNum and Total. Align them.
MINOR · 4 — MergeDemo calls ToSqlQuery on the un-finalized builder
The tab code ends with .Merge(); the generator omits it and calls merge.ToSqlQuery(...) on the IMergeable builder. Confirm that path actually emits the displayed MERGE INTO … — otherwise it's another non-reproducing reference.
MINOR · 5 — "Real SQL" claim is fragile
The displayed SQL is hand-re-indented HTML; nothing keeps it in sync with the generator after merge. Soften the README from "real output" to "based on real output, hand-formatted."
MINOR · 6 — Edit-link suppression covers .yml only
docfx.json fileMetadata._disableContribution targets api/**/**.yml. The PR body says edit links are disabled for auto-generated API docs — confirm API output is yml-only, else any generated api/**/*.md / toc.yml still renders an edit link to uneditable content.
Nits
- A11y: radio/label tabs work with arrow keys but lack
role="tablist/tab/tabpanel"/aria-selected; screen readers announce them as radios. Orderentity andProduct.CreatedAtinSqlDemoGenerator.csare unused.
igor-tkachev
left a comment
There was a problem hiding this comment.
The new site structure and landing page are useful, but this PR should not be merged in its current state.
Blocking issues
1. Preserve redirects for all moved documentation pages
Moving the documentation tree from source/articles/ to source/documentation/ changes the public URL of nearly every existing documentation page. For example:
/articles/CLI.html
/articles/sql/Bulk-Copy.html
/articles/get-started/install/index.html
become:
/documentation/CLI.html
/documentation/sql/Bulk-Copy.html
/documentation/get-started/install/index.html
This breaks incoming links from GitHub issues, Stack Overflow, external articles, search results, package documentation, and bookmarks. Navigation can be reorganized without changing the physical paths. If the directory move is retained, redirects must be generated for every moved page.
DocFX supports a redirections.yml file. For example:
redirections:
- source_path: articles/CLI.md
redirect_url: /documentation/CLI.html
- source_path: articles/sql/Bulk-Copy.md
redirect_url: /documentation/sql/Bulk-Copy.html
- source_path: articles/get-started/install/index.md
redirect_url: /documentation/get-started/install/index.htmlInclude the file in the DocFX build content, e.g.:
{
"files": [
"api/**/*.{md,yml}",
"articles/**/*.{md,yml}",
"documentation/**/*.{md,yml}",
"redirections.yml",
"toc.yml",
"*.md"
]
}The complete redirect list can be generated mechanically from the renamed files in this PR. Please also verify the generated site locally by opening several old URLs and checking that they resolve to the corresponding new pages.
2. Remove the .NET Foundation Member badge
linq2db is no longer a .NET Foundation member, so this is now a false claim:
<a href="https://dotnetfoundation.org/" class="landing-badge mb-3">
<i class="bi bi-patch-check-fill"></i> .NET Foundation Member
</a>Remove it and remove or repurpose the now-unused .landing-badge CSS.
3. SqlDemoGenerator.TempTableDemo does not reproduce the Temp Table tab
tools/sql-demo/README.md presents SqlDemoGenerator.cs as the reproducible source for the displayed SQL, but TempTableDemo() contains a normal join/grouping query and does not create a temporary table at all. The landing-page tab instead shows CreateTempTable("#FilterIds", ...), BulkCopy, a join against the temp table, and disposal.
Implement the actual temp-table scenario in the generator, or explicitly document that this tab is maintained manually and cannot be regenerated by the provided test.
Other issues
4. The Window Functions generator already differs from the displayed example
WindowFunctions() generates RowNum, Rank, and Total, while the landing-page example contains only RowNum and Total. Align them. This existing drift also shows that manually synchronizing the generator, C# HTML, and SQL HTML is fragile.
5. Soften the “real generated SQL” claim or make synchronization enforceable
The SQL embedded in source/index.md is manually copied, reformatted, and decorated with HTML markup. Nothing verifies it against the generator during the build, and examples in this PR already differ from it. Unless generation is automated or snapshot-verified, describe these as examples based on SQL generated by linq2db rather than guaranteed current output.
6. Verify that MergeDemo generates the displayed statement
The landing-page chain ends with the final .Merge() call, but the generator stores the intermediate builder after InsertWhenNotMatched() and calls ToSqlQuery() on it. Confirm that this is a supported path and produces exactly the shown MERGE INTO statement; otherwise finalize the builder consistently.
7. API edit-link suppression appears too narrow
fileMetadata._disableContribution currently targets only:
"api/**/**.yml": trueThe PR description states that edit links are disabled for all generated API pages. Verify generated .md, API toc.yml, landing pages, and the glob behavior in the custom DocFX version. Prefer a pattern that covers the entire generated API tree if supported.
8. Improve tab accessibility
The radio/label implementation works visually, but assistive technology sees radio controls rather than tabs. The markup lacks tablist/tab/tabpanel semantics and related ARIA relationships. Please either implement accessible tab behavior or explicitly use a component whose keyboard and screen-reader behavior can be tested.
Summary
tools/sql-demo/README.mdScreenshots
Dark Mode
Light Mode
Test plan
🤖 Generated with Claude Code