Skip to content

Improve Platform website (#12876) - #12880

Merged
msynk merged 9 commits into
bitfoundation:developfrom
msynk:12876-websites-platform-improvements
Aug 11, 2026
Merged

Improve Platform website (#12876)#12880
msynk merged 9 commits into
bitfoundation:developfrom
msynk:12876-websites-platform-improvements

Conversation

@msynk

@msynk msynk commented Aug 11, 2026

Copy link
Copy Markdown
Member

closes #12876

Summary by CodeRabbit

  • New Features
    • Added Brouter and Bmotion links to product menus and the footer.
    • Added refreshed homepage calls to action, platform statistics, and template links.
  • Changes
    • Moved Butil and Bswup documentation to external sites and removed in-app pages and shortcuts.
    • Improved responsive product navigation, accessibility, theme handling, and page metadata.
    • Updated low-code/no-code and template routes and content.
  • Bug Fixes
    • Contact and pricing forms now show success only after successful submission.
    • Added redirects for moved documentation sections and protection against repeated submissions.

@msynk
msynk requested a review from yasmoradi August 11, 2026 03:00
@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

Auto incremental reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 6730044b-7dba-4b9a-a855-0ed9e69b51c0

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Walkthrough

The Platform website removes Bswup and Butil documentation pages. Product links now target external websites. Brouter and Bmotion were added to product navigation. The change also updates site presentation, metadata, themes, builds, and server behavior.

Changes

Platform website improvements

Layer / File(s) Summary
Product documentation and navigation
src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Bswup/*, src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Butil/*, src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/*, src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Home/Products.*
Bswup and Butil documentation routes, styles, shortcuts, and local navigation were removed. Product links now use external websites. Brouter and Bmotion were added.
Website presentation and content
src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/*, src/Websites/Platform/src/Bit.Websites.Platform.Client/Styles/*, README.md, src/Templates/Boilerplate/*
The site updates page content, headings, accessibility attributes, lazy loading, theme styles, product accordions, calls to action, and download counts.
Navigation, metadata, and theme handling
src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/Header.*, src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/PageOutlet.*, src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/SiteMapUrls.cs, src/Websites/Platform/src/Bit.Websites.Platform.Server/Components/App.razor
Navigation state is centralized in NavMenuService. Page metadata, sitemap exclusions, theme preferences, theme attributes, and structured metadata are updated.
Build and server behavior
src/Websites/Platform/src/Bit.Websites.Platform.Client/Bit.Websites.Platform.Client.csproj, src/Websites/Platform/src/Bit.Websites.Platform.Server/Services/ScssCompilerService.cs, src/Websites/Platform/src/Bit.Websites.Platform.Server/Startup/*, src/Websites/Platform/src/Bit.Websites.Platform.Server/Program.cs
Release build settings, Sass watching, redirects, sitemap caching, rate limiting, request handling, and application shutdown behavior are updated.

Estimated code review effort: 5 (Critical) | ~120 minutes

Suggested reviewers: yasmoradi

Poem

A rabbit checks each page and link,
Then watches themes shift as colors blink.
Old docs hop to websites new,
Brouter and Bmotion join the crew.
Sass and menus settle bright,
While metadata takes flight.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 10.53% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title identifies the Platform website as the subject of the changes, but it is broad rather than specific.
Linked Issues check ✅ Passed The changes remove BSWUP and BUtil documentation, update their links, add BRouter and BMotion, and apply related website updates [#12876].
Out of Scope Changes check ✅ Passed The changes support the stated website improvements, including navigation, SEO, accessibility, styling, performance, and supporting infrastructure.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-apps Bot commented Aug 11, 2026

Copy link
Copy Markdown

Too many files changed for review (221 files, 100 file limit).

Bypass the limit by tagging @greptile-apps to review.

@msynk

msynk commented Aug 11, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai full-review

@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown

@msynk I will perform a complete review of all changes in this pull request.

⚠️ Action not completed

Review skipped: 207 files exceed the limit of 150.

@msynk

msynk commented Aug 11, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai re-review

@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown

@msynk I will review the updated pull request changes.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 14

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/DemosPage.razor`:
- Around line 147-148: Replace the unavailable Android and iOS–macOS anchor
elements in DemosPage with non-interactive elements, removing the role="link"
and aria-disabled attributes while preserving their disabled styling, titles,
icons, and labels until store URLs are available.

In
`@src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Home/HomePage.razor.scss`:
- Line 3: Update the imports in HomePage.razor.scss
(src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Home/HomePage.razor.scss,
lines 3-3) and Products.razor.scss
(src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Home/Products.razor.scss,
lines 1-1) to use partial names without leading underscores or the .scss
extension: import mixins and vars respectively.

In
`@src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates02GettingStartedPage.razor.cs`:
- Around line 45-46: Update the copied script text in the
Templates02GettingStartedPage content so the displayed NuGet URL uses the same
Bit.Boilerplate package identifier as the adjacent dotnet new install command,
replacing the outdated Boilerplate.Templates URL while preserving the command.

In
`@src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates03ProjectStructurePage.razor.scss`:
- Around line 37-39: Update .row-section-container to use flex-direction: column
within the existing `@include` sm breakpoint, so the project-structure columns
stack below 600px while preserving the current horizontal layout above that
breakpoint.

In
`@src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates04CreateProjectPage.razor.scss`:
- Around line 30-32: The .image rule currently inherits the Image mixin’s fixed
height and can distort API diagrams. Update .image to use automatic height
scaling and cap its width at the available container width; if the fixed 350px
container requires it, also constrain image height to account for vertical
margins while preserving the intrinsic aspect ratio.

In
`@src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates05RunProjectPage.razor.scss`:
- Around line 1-4: Update the imports in Templates05RunProjectPage.razor.scss
(lines 1-4) and Templates06Wiki.razor.scss (lines 1-3) to use configured partial
import paths without leading underscores or explicit .scss extensions; preserve
the existing imported styles and order.
- Around line 45-60: Configure Stylelint to recognize deep as an allowed
pseudo-element so the Blazor CSS-isolation selectors lint successfully. Preserve
the existing ::deep selectors in
src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates05RunProjectPage.razor.scss
lines 45-60, Templates06Wiki.razor.scss lines 46-48, and
Shared/NavigationButtons.razor.scss lines 39-41; only update the shared linter
configuration.

In
`@src/Websites/Platform/src/Bit.Websites.Platform.Client/Services/NavMenuService.cs`:
- Around line 10-15: Update NavMenuService.ToggleMenu to return Task, safely
return Task.CompletedTask when OnToggleMenu has no subscribers, and await the
subscribed handler result when present. Update Header.ToggleMenu to be
asynchronous and await NavMenuService.ToggleMenu.

In `@src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/Header.razor`:
- Around line 91-104: Update the mobile Products disclosure around
ToggleMobileProducts so the aria-controls target remains in the DOM when
collapsed, hiding it while closed, or conditionally omit aria-controls whenever
the target is not rendered. Preserve the existing open-state behavior and
identifier consistency.

In
`@src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/Header.razor.scss`:
- Line 339: Insert a blank line immediately before the comment describing the
180ms fade-out delay in Header.razor.scss, preserving the existing comment and
styles.

In
`@src/Websites/Platform/src/Bit.Websites.Platform.Client/Styles/abstracts/_mixins.scss`:
- Around line 93-96: Update the .primary mixin’s background gradient in the
visible CTA styles, replacing the light-blue `#1878fd` stop with the specified
darker `#0D71BF` value while preserving the existing gradient direction and other
styles.

In `@src/Websites/Platform/src/Bit.Websites.Platform.Client/Styles/app.scss`:
- Around line 285-298: Update the active theme selectors under
:root[bit-theme="dark"] and :root[bit-theme="light"] to use display: revert
instead of display: unset for the dark-theme, dark-image, light-theme, and
light-image classes, preserving each element’s native display type.

In
`@src/Websites/Platform/src/Bit.Websites.Platform.Server/Startup/Middlewares.cs`:
- Around line 160-174: Update the siteMapPerHost caching used by the sitemap.xml
handler so entries are restricted to configured trusted canonical hosts rather
than arbitrary values from context.Request.GetBaseUrl(). Reuse the application’s
existing host configuration symbols to validate or select the base URL before
caching, and preserve sitemap generation for approved hosts without retaining
unbounded entries for attacker-controlled hosts.

In `@src/Websites/Platform/src/Bit.Websites.Platform.Server/Startup/Services.cs`:
- Around line 76-81: Replace the unrestricted KnownNetworks.Clear and
KnownProxies.Clear configuration in UseForwardedHeaders with the CDN’s trusted
ranges via KnownIPNetworks or fixed proxy addresses via KnownProxies. Ensure
direct origin access is blocked so untrusted clients cannot supply
X-Forwarded-For and bypass the MessageSubmit rate limiter.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 599a7221-3f1b-4ea0-94b8-2c0b3aeeab6b

📥 Commits

Reviewing files that changed from the base of the PR and between 867d509 and ea3c051.

⛔ Files ignored due to path filters (10)
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/fonts/Consolas/woff2/Consolas.woff2 is excluded by !**/*.woff2
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/fonts/OpenSans/woff2/OpenSansBold.woff2 is excluded by !**/*.woff2
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/fonts/OpenSans/woff2/OpenSansRegular.woff2 is excluded by !**/*.woff2
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/fonts/OpenSans/woff2/OpenSansSemiBold.woff2 is excluded by !**/*.woff2
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/fast-forward.svg is excluded by !**/*.svg
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/home/hero-image-dark.svg is excluded by !**/*.svg
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/home/hero-image-light.svg is excluded by !**/*.svg
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/home/twitter-icon.svg is excluded by !**/*.svg
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/og-image.svg is excluded by !**/*.svg
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/sun.png is excluded by !**/*.png
📒 Files selected for processing (106)
  • README.md
  • src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/Home/HomePage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Bit.Websites.Platform.Client.csproj
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Extensions/IJSRuntimeExtension.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Extensions/IServiceCollectionExtensions.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/AboutUsPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Besql/Besql01OverviewPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Besql/Besql02InstallPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Besql/Besql03UsagePage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/ContactUsPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/ContactUsPage.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/CustomerCarousel.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/CustomerCarousel.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/DemosPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/DemosPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Home/HomePage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Home/HomePage.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Home/HomePage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Home/Products.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Home/Products.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Home/Products.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc01OverviewPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc01OverviewPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc02BenefitsPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc02BenefitsPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc03SpecsPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc03SpecsPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc04CustomizationsPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc04CustomizationsPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc05ComparisonPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc05ComparisonPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc06StatsPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc06StatsPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/LcncPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/NotFoundPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/PricingPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/PricingPage.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/PricingPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates01OverviewPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates02GettingStartedPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates02GettingStartedPage.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates02GettingStartedPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates02SamplesPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates02SamplesPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates03ProjectStructurePage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates03ProjectStructurePage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates04CreateProjectPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates04CreateProjectPage.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates04CreateProjectPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates05RunProjectPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates05RunProjectPage.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates05RunProjectPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates06RunProjectPage.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates06Wiki.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates06Wiki.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates06Wiki.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates07Wiki.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Program.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Scripts/app.ts
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Services/HttpMessageHandlers/RetryDelegatingHandler.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Services/NavManuService.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Services/NavMenuService.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/AppAiChatPanel.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/AppErrorBoundary.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/Footer.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/Footer.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/Header.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/Header.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/Header.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/MainLayout.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/MainLayout.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/NavMenu.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/NavigationButtons.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/NavigationButtons.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/PageOutlet.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/PageOutlet.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/SiteMapUrls.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/Urls.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Styles/abstracts/_mixins.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Styles/abstracts/_vars.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Styles/app.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/compilerconfig.json
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/home/adminpanel.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/home/balzorui-bg.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/home/banner.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/home/tech/dotnet-logo.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/home/todotemplate.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/home/twitter/1.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/home/twitter/2.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/home/twitter/3.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/home/twitter/4.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/home/twitter/5.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/templates/blazor-wasm-target.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/templates/debug-target.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/templates/multi-startup.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/templates/render-mode.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/templates/swagger-todo.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/robots.txt
  • src/Websites/Platform/src/Bit.Websites.Platform.Server/Bit.Websites.Platform.Server.csproj
  • src/Websites/Platform/src/Bit.Websites.Platform.Server/Components/App.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Server/Controllers/ContactUsController.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Server/Controllers/SupportPackageController.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Server/Program.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Server/Services/ScssCompilerService.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Server/Startup/Middlewares.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Server/Startup/Services.cs
💤 Files with no reviewable changes (13)
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc02BenefitsPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc06StatsPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc03SpecsPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates06RunProjectPage.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Services/NavManuService.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc05ComparisonPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates07Wiki.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates02SamplesPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates02SamplesPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc04CustomizationsPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc01OverviewPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/compilerconfig.json
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/Urls.cs

Comment thread src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/DemosPage.razor Outdated
Comment thread src/Websites/Platform/src/Bit.Websites.Platform.Client/Services/NavMenuService.cs Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Caution

Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.

Actionable comments posted: 14

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/DemosPage.razor`:
- Around line 147-148: Replace the unavailable Android and iOS–macOS anchor
elements in DemosPage with non-interactive elements, removing the role="link"
and aria-disabled attributes while preserving their disabled styling, titles,
icons, and labels until store URLs are available.

In
`@src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Home/HomePage.razor.scss`:
- Line 3: Update the imports in HomePage.razor.scss
(src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Home/HomePage.razor.scss,
lines 3-3) and Products.razor.scss
(src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Home/Products.razor.scss,
lines 1-1) to use partial names without leading underscores or the .scss
extension: import mixins and vars respectively.

In
`@src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates02GettingStartedPage.razor.cs`:
- Around line 45-46: Update the copied script text in the
Templates02GettingStartedPage content so the displayed NuGet URL uses the same
Bit.Boilerplate package identifier as the adjacent dotnet new install command,
replacing the outdated Boilerplate.Templates URL while preserving the command.

In
`@src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates03ProjectStructurePage.razor.scss`:
- Around line 37-39: Update .row-section-container to use flex-direction: column
within the existing `@include` sm breakpoint, so the project-structure columns
stack below 600px while preserving the current horizontal layout above that
breakpoint.

In
`@src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates04CreateProjectPage.razor.scss`:
- Around line 30-32: The .image rule currently inherits the Image mixin’s fixed
height and can distort API diagrams. Update .image to use automatic height
scaling and cap its width at the available container width; if the fixed 350px
container requires it, also constrain image height to account for vertical
margins while preserving the intrinsic aspect ratio.

In
`@src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates05RunProjectPage.razor.scss`:
- Around line 1-4: Update the imports in Templates05RunProjectPage.razor.scss
(lines 1-4) and Templates06Wiki.razor.scss (lines 1-3) to use configured partial
import paths without leading underscores or explicit .scss extensions; preserve
the existing imported styles and order.
- Around line 45-60: Configure Stylelint to recognize deep as an allowed
pseudo-element so the Blazor CSS-isolation selectors lint successfully. Preserve
the existing ::deep selectors in
src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates05RunProjectPage.razor.scss
lines 45-60, Templates06Wiki.razor.scss lines 46-48, and
Shared/NavigationButtons.razor.scss lines 39-41; only update the shared linter
configuration.

In
`@src/Websites/Platform/src/Bit.Websites.Platform.Client/Services/NavMenuService.cs`:
- Around line 10-15: Update NavMenuService.ToggleMenu to return Task, safely
return Task.CompletedTask when OnToggleMenu has no subscribers, and await the
subscribed handler result when present. Update Header.ToggleMenu to be
asynchronous and await NavMenuService.ToggleMenu.

In `@src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/Header.razor`:
- Around line 91-104: Update the mobile Products disclosure around
ToggleMobileProducts so the aria-controls target remains in the DOM when
collapsed, hiding it while closed, or conditionally omit aria-controls whenever
the target is not rendered. Preserve the existing open-state behavior and
identifier consistency.

In
`@src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/Header.razor.scss`:
- Line 339: Insert a blank line immediately before the comment describing the
180ms fade-out delay in Header.razor.scss, preserving the existing comment and
styles.

In
`@src/Websites/Platform/src/Bit.Websites.Platform.Client/Styles/abstracts/_mixins.scss`:
- Around line 93-96: Update the .primary mixin’s background gradient in the
visible CTA styles, replacing the light-blue `#1878fd` stop with the specified
darker `#0D71BF` value while preserving the existing gradient direction and other
styles.

In `@src/Websites/Platform/src/Bit.Websites.Platform.Client/Styles/app.scss`:
- Around line 285-298: Update the active theme selectors under
:root[bit-theme="dark"] and :root[bit-theme="light"] to use display: revert
instead of display: unset for the dark-theme, dark-image, light-theme, and
light-image classes, preserving each element’s native display type.

In
`@src/Websites/Platform/src/Bit.Websites.Platform.Server/Startup/Middlewares.cs`:
- Around line 160-174: Update the siteMapPerHost caching used by the sitemap.xml
handler so entries are restricted to configured trusted canonical hosts rather
than arbitrary values from context.Request.GetBaseUrl(). Reuse the application’s
existing host configuration symbols to validate or select the base URL before
caching, and preserve sitemap generation for approved hosts without retaining
unbounded entries for attacker-controlled hosts.

In `@src/Websites/Platform/src/Bit.Websites.Platform.Server/Startup/Services.cs`:
- Around line 76-81: Replace the unrestricted KnownNetworks.Clear and
KnownProxies.Clear configuration in UseForwardedHeaders with the CDN’s trusted
ranges via KnownIPNetworks or fixed proxy addresses via KnownProxies. Ensure
direct origin access is blocked so untrusted clients cannot supply
X-Forwarded-For and bypass the MessageSubmit rate limiter.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 599a7221-3f1b-4ea0-94b8-2c0b3aeeab6b

📥 Commits

Reviewing files that changed from the base of the PR and between 867d509 and ea3c051.

⛔ Files ignored due to path filters (10)
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/fonts/Consolas/woff2/Consolas.woff2 is excluded by !**/*.woff2
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/fonts/OpenSans/woff2/OpenSansBold.woff2 is excluded by !**/*.woff2
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/fonts/OpenSans/woff2/OpenSansRegular.woff2 is excluded by !**/*.woff2
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/fonts/OpenSans/woff2/OpenSansSemiBold.woff2 is excluded by !**/*.woff2
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/fast-forward.svg is excluded by !**/*.svg
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/home/hero-image-dark.svg is excluded by !**/*.svg
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/home/hero-image-light.svg is excluded by !**/*.svg
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/home/twitter-icon.svg is excluded by !**/*.svg
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/og-image.svg is excluded by !**/*.svg
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/sun.png is excluded by !**/*.png
📒 Files selected for processing (106)
  • README.md
  • src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/Home/HomePage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Bit.Websites.Platform.Client.csproj
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Extensions/IJSRuntimeExtension.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Extensions/IServiceCollectionExtensions.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/AboutUsPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Besql/Besql01OverviewPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Besql/Besql02InstallPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Besql/Besql03UsagePage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/ContactUsPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/ContactUsPage.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/CustomerCarousel.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/CustomerCarousel.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/DemosPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/DemosPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Home/HomePage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Home/HomePage.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Home/HomePage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Home/Products.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Home/Products.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Home/Products.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc01OverviewPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc01OverviewPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc02BenefitsPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc02BenefitsPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc03SpecsPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc03SpecsPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc04CustomizationsPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc04CustomizationsPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc05ComparisonPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc05ComparisonPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc06StatsPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc06StatsPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/LcncPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/NotFoundPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/PricingPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/PricingPage.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/PricingPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates01OverviewPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates02GettingStartedPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates02GettingStartedPage.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates02GettingStartedPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates02SamplesPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates02SamplesPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates03ProjectStructurePage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates03ProjectStructurePage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates04CreateProjectPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates04CreateProjectPage.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates04CreateProjectPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates05RunProjectPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates05RunProjectPage.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates05RunProjectPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates06RunProjectPage.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates06Wiki.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates06Wiki.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates06Wiki.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates07Wiki.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Program.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Scripts/app.ts
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Services/HttpMessageHandlers/RetryDelegatingHandler.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Services/NavManuService.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Services/NavMenuService.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/AppAiChatPanel.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/AppErrorBoundary.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/Footer.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/Footer.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/Header.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/Header.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/Header.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/MainLayout.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/MainLayout.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/NavMenu.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/NavigationButtons.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/NavigationButtons.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/PageOutlet.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/PageOutlet.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/SiteMapUrls.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/Urls.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Styles/abstracts/_mixins.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Styles/abstracts/_vars.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Styles/app.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/compilerconfig.json
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/home/adminpanel.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/home/balzorui-bg.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/home/banner.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/home/tech/dotnet-logo.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/home/todotemplate.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/home/twitter/1.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/home/twitter/2.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/home/twitter/3.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/home/twitter/4.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/home/twitter/5.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/templates/blazor-wasm-target.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/templates/debug-target.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/templates/multi-startup.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/templates/render-mode.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/images/templates/swagger-todo.webp
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/wwwroot/robots.txt
  • src/Websites/Platform/src/Bit.Websites.Platform.Server/Bit.Websites.Platform.Server.csproj
  • src/Websites/Platform/src/Bit.Websites.Platform.Server/Components/App.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Server/Controllers/ContactUsController.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Server/Controllers/SupportPackageController.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Server/Program.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Server/Services/ScssCompilerService.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Server/Startup/Middlewares.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Server/Startup/Services.cs
💤 Files with no reviewable changes (13)
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc02BenefitsPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc06StatsPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc03SpecsPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates06RunProjectPage.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Services/NavManuService.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc05ComparisonPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates07Wiki.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates02SamplesPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates02SamplesPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc04CustomizationsPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Lcnc/Lcnc01OverviewPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/compilerconfig.json
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/Urls.cs
🛑 Comments failed to post (4)
src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates03ProjectStructurePage.razor.scss (1)

37-39: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -e
file='src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates03ProjectStructurePage.razor.scss'
printf '%s\n' '--- target file ---'
cat -n "$file"
printf '%s\n' '--- related markup and styles ---'
base="${file%.razor.scss}"
for candidate in "${base}.razor" "${base}.razor.cs"; do
  if [ -f "$candidate" ]; then
    printf '\n--- %s ---\n' "$candidate"
    cat -n "$candidate"
  fi
done
printf '%s\n' '--- selector references ---'
rg -n -C 3 'row-section-container|Templates03ProjectStructurePage' src/Websites/Platform/src/Bit.Websites.Platform.Client

Repository: bitfoundation/bitplatform

Length of output: 17600


🏁 Script executed:

#!/bin/bash
set -e
printf '%s\n' '--- referenced mixins and media queries ---'
rg -n -C 8 '(`@mixin`[[:space:]]+(SectionCard|SectionCardText|Image|PageContainer)|\$.*(break|mobile|tablet)|`@media`)' \
  src/Websites/Platform/src/Bit.Websites.Platform.Client/Styles \
  src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates \
  | head -n 240
printf '%s\n' '--- analogous responsive page styles ---'
rg -l '`@media`|MediaQuery|flex-direction:[[:space:]]*column' \
  src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates \
  | head -n 40

Repository: bitfoundation/bitplatform

Length of output: 17794


🏁 Script executed:

#!/bin/bash
set -e
media='src/Websites/Platform/src/Bit.Websites.Platform.Client/Styles/abstracts/_media-queries.scss'
mixins='src/Websites/Platform/src/Bit.Websites.Platform.Client/Styles/abstracts/_mixins.scss'
printf '%s\n' '--- breakpoint definitions ---'
cat -n "$media" | sed -n '1,105p'
printf '%s\n' '--- relevant mixins ---'
cat -n "$mixins" | sed -n '34,75p;129,145p'
printf '%s\n' '--- box-sizing and section-card overrides ---'
rg -n -C 3 'box-sizing|section-card|row-section-container|\\.image[[:space:]]*\\{' \
  src/Websites/Platform/src/Bit.Websites.Platform.Client \
  -g '*.scss' -g '*.css' | head -n 240

Repository: bitfoundation/bitplatform

Length of output: 4471


Stack the project-structure columns below 600px.

The fixed 300px image and text column can exceed the card width while .row-section-container remains horizontal. Use the existing @include sm breakpoint to set flex-direction: column.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates03ProjectStructurePage.razor.scss`
around lines 37 - 39, Update .row-section-container to use flex-direction:
column within the existing `@include` sm breakpoint, so the project-structure
columns stack below 600px while preserving the current horizontal layout above
that breakpoint.
src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates04CreateProjectPage.razor.scss (1)

30-32: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -eu
printf '%s\n' '--- target files ---'
git ls-files | rg 'Templates04CreateProjectPage\.razor\.scss$|.*\.scss$' | head -80
printf '%s\n' '--- target file ---'
target='src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates04CreateProjectPage.razor.scss'
if [ -f "$target" ]; then
  cat -n "$target"
else
  printf 'target not found\n'
fi
printf '%s\n' '--- Image mixin definitions and uses ---'
rg -n -C 5 '`@mixin`[[:space:]]+Image|`@include`[[:space:]]+Image|api-image-container|Templates04CreateProjectPage' src

Repository: bitfoundation/bitplatform

Length of output: 25912


🏁 Script executed:

#!/bin/bash
set -eu
target='src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates04CreateProjectPage.razor.scss'
printf '%s\n' '--- mixin and relevant selectors ---'
cat -n src/Websites/Platform/src/Bit.Websites.Platform.Client/Styles/abstracts/_mixins.scss | sed -n '125,145p'
cat -n "$target" | sed -n '24,60p'
printf '%s\n' '--- API image assets ---'
rg --files src/Websites/Platform/src/Bit.Websites.Platform.Client | rg 'api-(integrated|standalone)\.webp$' | while IFS= read -r f; do
  file "$f"
done
printf '%s\n' '--- all references to the API container and image class ---'
rg -n -C 3 'api-image-container|class="image"|api-(integrated|standalone)\.webp' src/Websites/Platform/src/Bit.Websites.Platform.Client
printf '%s\n' '--- deterministic WebP dimension probe ---'
python3 - <<'PY'
from pathlib import Path
import struct

def dimensions(path):
    data = Path(path).read_bytes()
    assert data[:4] == b'RIFF' and data[8:12] == b'WEBP'
    kind = data[12:16]
    if kind == b'VP8 ':
        # VP8 frame header starts at chunk payload offset 10.
        if data[23:26] != b'\x9d\x01\x2a':
            raise ValueError(f'unsupported VP8 header in {path}')
        return struct.unpack_from('<HH', data, 26)
    if kind == b'VP8X':
        w = 1 + int.from_bytes(data[24:27], 'little')
        h = 1 + int.from_bytes(data[27:30], 'little')
        return w, h
    if kind == b'VP8L':
        b0, b1, b2, b3, b4 = data[21:26]
        if b0 != 0x2f:
            raise ValueError(f'unsupported VP8L header in {path}')
        w = 1 + (((b2 & 0x3f) << 16) | (b1 << 8) | b0)  # not used unless this branch is hit
        raise ValueError(f'VP8L parser not needed for {path}')
    raise ValueError(f'unsupported WebP chunk {kind!r} in {path}')

for name in ('api-integrated.webp', 'api-standalone.webp'):
    matches = list(Path('src').rglob(name))
    for path in matches:
        try:
            print(path, dimensions(path))
        except Exception as e:
            print(path, e)
PY

Repository: bitfoundation/bitplatform

Length of output: 1350


🏁 Script executed:

#!/bin/bash
set -eu
printf '%s\n' '--- API image references and assets ---'
rg -n -C 3 'api-image-container|class="image"|api-(integrated|standalone)\.webp' src/Websites/Platform/src/Bit.Websites.Platform.Client
printf '%s\n' '--- asset paths ---'
rg --files src/Websites/Platform/src/Bit.Websites.Platform.Client | rg 'api-(integrated|standalone)\.webp$'
printf '%s\n' '--- deterministic WebP dimension and aspect-ratio probe ---'
python3 - <<'PY'
from pathlib import Path
import struct

def dimensions(path):
    data = Path(path).read_bytes()
    if data[:4] != b'RIFF' or data[8:12] != b'WEBP':
        raise ValueError('not a WebP file')
    kind = data[12:16]
    if kind == b'VP8 ':
        if data[23:26] != b'\x9d\x01\x2a':
            raise ValueError('unsupported VP8 header')
        return struct.unpack_from('<HH', data, 26)
    if kind == b'VP8X':
        return (
            1 + int.from_bytes(data[24:27], 'little'),
            1 + int.from_bytes(data[27:30], 'little'),
        )
    raise ValueError(f'unsupported WebP chunk {kind!r}')

for path in sorted(Path('src/Websites/Platform/src/Bit.Websites.Platform.Client').rglob('api-*.webp')):
    w, h = dimensions(path)
    print(f'{path}: {w}x{h}, intrinsic ratio={w/h:.6f}, box ratio at 600x297={600/297:.6f}')
PY

Repository: bitfoundation/bitplatform

Length of output: 10192


Preserve the API diagram aspect ratio.

Image sets height: 85%, while .image overrides only the width. The API assets have intrinsic ratios of 1.79 and 2.21, so the resulting 600px × 297px boxes distort both diagrams. Set height: auto and add max-width: 100%. If the 350px container remains fixed, also constrain the image height after accounting for its vertical margins.

🧰 Tools
🪛 Stylelint (17.14.0)

[error] 32-32: Expected empty line before declaration (declaration-empty-line-before)

(declaration-empty-line-before)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates04CreateProjectPage.razor.scss`
around lines 30 - 32, The .image rule currently inherits the Image mixin’s fixed
height and can distort API diagrams. Update .image to use automatic height
scaling and cap its width at the available container width; if the fixed 350px
container requires it, also constrain image height to account for vertical
margins while preserving the intrinsic aspect ratio.
src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates05RunProjectPage.razor.scss (2)

1-4: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Fix the new SCSS import lint errors.

Stylelint rejects partial filenames with leading underscores and explicit .scss extensions. Use the configured import form so these new files pass linting.

  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates05RunProjectPage.razor.scss#L1-L4: Remove the leading underscores and .scss extensions from each import.
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates06Wiki.razor.scss#L1-L3: Remove the leading underscores and .scss extensions from each import.
🧰 Tools
🪛 Stylelint (17.14.0)

[error] 1-1: Unexpected leading underscore in imported partial name (scss/load-no-partial-leading-underscore)

(scss/load-no-partial-leading-underscore)


[error] 2-2: Unexpected leading underscore in imported partial name (scss/load-no-partial-leading-underscore)

(scss/load-no-partial-leading-underscore)


[error] 3-3: Unexpected leading underscore in imported partial name (scss/load-no-partial-leading-underscore)

(scss/load-no-partial-leading-underscore)


[error] 4-4: Unexpected leading underscore in imported partial name (scss/load-no-partial-leading-underscore)

(scss/load-no-partial-leading-underscore)


[error] 1-1: Unexpected extension ".scss" in @import (scss/load-partial-extension)

(scss/load-partial-extension)


[error] 2-2: Unexpected extension ".scss" in @import (scss/load-partial-extension)

(scss/load-partial-extension)


[error] 3-3: Unexpected extension ".scss" in @import (scss/load-partial-extension)

(scss/load-partial-extension)


[error] 4-4: Unexpected extension ".scss" in @import (scss/load-partial-extension)

(scss/load-partial-extension)

📍 Affects 2 files
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates05RunProjectPage.razor.scss#L1-L4 (this comment)
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates06Wiki.razor.scss#L1-L3
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates05RunProjectPage.razor.scss`
around lines 1 - 4, Update the imports in Templates05RunProjectPage.razor.scss
(lines 1-4) and Templates06Wiki.razor.scss (lines 1-3) to use configured partial
import paths without leading underscores or explicit .scss extensions; preserve
the existing imported styles and order.

Source: Linters/SAST tools


45-60: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Configure Stylelint for Blazor ::deep selectors.

The added CSS-isolation selectors produce Stylelint errors. Allow deep as a pseudo-element in the Stylelint configuration. Do not replace these selectors with standard CSS selectors because Blazor CSS isolation requires ::deep for descendant styling.

  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates05RunProjectPage.razor.scss#L45-L60: Keep the CSS-isolation selectors after updating the linter configuration.
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates06Wiki.razor.scss#L46-L48: Keep the CSS-isolation selector after updating the linter configuration.
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/NavigationButtons.razor.scss#L39-L41: Keep the CSS-isolation selector after updating the linter configuration.
🧰 Tools
🪛 Stylelint (17.14.0)

[error] 45-45: Unknown pseudo-element selector "::deep" (selector-pseudo-element-no-unknown)

(selector-pseudo-element-no-unknown)


[error] 50-50: Unknown pseudo-element selector "::deep" (selector-pseudo-element-no-unknown)

(selector-pseudo-element-no-unknown)

📍 Affects 3 files
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates05RunProjectPage.razor.scss#L45-L60 (this comment)
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates06Wiki.razor.scss#L46-L48
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/NavigationButtons.razor.scss#L39-L41
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates05RunProjectPage.razor.scss`
around lines 45 - 60, Configure Stylelint to recognize deep as an allowed
pseudo-element so the Blazor CSS-isolation selectors lint successfully. Preserve
the existing ::deep selectors in
src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates05RunProjectPage.razor.scss
lines 45-60, Templates06Wiki.razor.scss lines 46-48, and
Shared/NavigationButtons.razor.scss lines 39-41; only update the shared linter
configuration.

Source: Linters/SAST tools

@msynk

msynk commented Aug 11, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai full-review

@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown

@msynk I will perform a complete review of all changes in this pull request.

⚠️ Action not completed

Review skipped: 211 files exceed the limit of 150.

@msynk

msynk commented Aug 11, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai re-review

@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown

@msynk I will review the updated pull request changes.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates04CreateProjectPage.razor.scss`:
- Line 32: Insert an empty line immediately after the `@include` Image;
declaration and before the explanatory comment in the relevant SCSS rule.

In
`@src/Websites/Platform/src/Bit.Websites.Platform.Server/Startup/Middlewares.cs`:
- Around line 176-179: Make sitemap cache admission atomic in the code
surrounding siteMapPerHost by synchronizing the Count check and TryAdd operation
with a single shared lock, ensuring concurrent requests cannot exceed
maxCachedHosts. Keep the existing admission condition and siteMapPerHost entries
unchanged.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 35239238-c2ba-47fe-bc0c-6d8726ce9fa7

📥 Commits

Reviewing files that changed from the base of the PR and between ea3c051 and 1764c08.

📒 Files selected for processing (16)
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/DemosPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Home/HomePage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Home/HomePage.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Home/HomePage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates02GettingStartedPage.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates03ProjectStructurePage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates04CreateProjectPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates04CreateProjectPage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Services/NavMenuService.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/Header.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/Header.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/Header.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Styles/abstracts/_mixins.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Styles/app.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Server/Startup/Middlewares.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Server/Startup/Services.cs
🚧 Files skipped from review as they are similar to previous changes (12)
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Styles/abstracts/_mixins.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Server/Startup/Services.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/Header.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/DemosPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Home/HomePage.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Styles/app.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates04CreateProjectPage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Home/HomePage.razor
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/Header.razor.scss
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Services/NavMenuService.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Shared/Header.razor.cs
  • src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates03ProjectStructurePage.razor.scss

Comment thread src/Websites/Platform/src/Bit.Websites.Platform.Server/Startup/Middlewares.cs Outdated
@msynk
msynk merged commit 880d1a3 into bitfoundation:develop Aug 11, 2026
4 checks passed
@msynk
msynk deleted the 12876-websites-platform-improvements branch August 11, 2026 18:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

The Platform website improvements

1 participant