Skip to content

Reorganize site with modern landing page and interactive SQL demo#59

Open
sdanyliv wants to merge 8 commits into
masterfrom
refactor/site-reorganization
Open

Reorganize site with modern landing page and interactive SQL demo#59
sdanyliv wants to merge 8 commits into
masterfrom
refactor/site-reorganization

Conversation

@sdanyliv

Copy link
Copy Markdown
Member

Summary

  • Reorganize site into three main sections: Documentation, Articles, API
  • Modern landing page with gradient hero, .NET Foundation badge, and interactive SQL demo
  • 7 tabbed demo examples showing real SQL generated by linq2db: Query, Associations, ExpressionMethod, CTE, Window Functions, Merge, Temp Table
  • Edit this page links enabled for documentation pages (disabled for auto-generated API docs)
  • Maintenance guide for rebuilding/extending demo tabs at tools/sql-demo/README.md

Screenshots

Dark Mode

Dark Mode

Light Mode

Light Mode

Test plan

  • Verify all 7 demo tabs switch correctly
  • Check Documentation, Articles, API navigation links work
  • Verify edit links appear on documentation pages but not API pages
  • Test responsive layout on mobile/tablet viewports
  • Verify dark/light mode theme switching

🤖 Generated with Claude Code

sdanyliv and others added 8 commits April 10, 2026 13:56
- 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 &#10; 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>
@sdanyliv sdanyliv moved this from Todo to In Review in PR Review Queue Jun 14, 2026
@sdanyliv sdanyliv self-assigned this Jun 14, 2026
@sdanyliv sdanyliv requested a review from MaceWindu June 14, 2026 21:10

@MaceWindu MaceWindu left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.
  • Order entity and Product.CreatedAt in SqlDemoGenerator.cs are unused.

@MaceWindu MaceWindu moved this from In Review to Waiting For Review in PR Review Queue Jun 21, 2026
@MaceWindu MaceWindu moved this from Waiting For Review to Done in PR Review Queue Jun 21, 2026
@MaceWindu MaceWindu moved this from Done to Waiting For Review in PR Review Queue Jun 21, 2026
@MaceWindu MaceWindu moved this from Waiting For Review to In Review in PR Review Queue Jun 21, 2026
@MaceWindu MaceWindu moved this from In Review to Waiting For Review in PR Review Queue Jun 22, 2026

@igor-tkachev igor-tkachev left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.html

Include 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": true

The 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Waiting For Review

Development

Successfully merging this pull request may close these issues.

3 participants