Skip to content

Commit 0b8ccfd

Browse files
Feature/website v2 (#161)
* Add design spec for RCommon documentation website Captures requirements and architecture decisions for the new Docusaurus 3 documentation site at rcommon.com, forked from Hasura's ddn-docs template. * Fix spec review issues: map ApplicationServices, Stateless, and SMTP - Place RCommon.ApplicationServices under CQRS & Mediator > Command & Query Bus - Add State Machines section for RCommon.Stateless integration - Clarify SMTP is built into RCommon.Emailing, not a separate package * Add implementation plan for RCommon documentation website 35-task plan covering site infrastructure (fork Hasura ddn-docs, strip/adapt, components, landing page, deployment) and comprehensive content generation for all 37+ packages organized across 19 documentation sections. * chore: clone Hasura ddn-docs as website/ base * chore: convert website from Yarn to pnpm, strip Hasura deps * chore: strip all Hasura content, components, and assets * feat: configure docusaurus.config.ts for RCommon * feat: configure RCommon sidebar navigation structure * feat: set up RCommon theme, branding, and CNAME * feat: adapt Hasura components for RCommon use - OverviewIconCard: added generic icon/title/description/link props, kept iconName for backward compat - OverviewTopSection: made youtubeVideoId optional, video block only renders when provided - OverviewPlainCard: removed missing chevron-right.svg icon, replaced with HTML entity - CustomFooter: replaced Hasura links/copyright/localStorage with RCommon GitHub and NuGet links - Feedback: removed Hasura-specific customFields (docsServerURL, hasuraVersion, DEV_TOKEN), replaced with no-op submit, updated GitHub issue link to RCommon repo, fixed JSX attribute casing - Thumbnail: removed react-transition-group dependency (not installed), replaced CSSTransition with simple conditional render * fix: clean Hasura references from theme overrides - DocItem/Layout: removed HasuraBanner and CanonicalUrl imports (components deleted), kept CustomFooter - DocRoot/Layout: removed AiChatBot, OpenReplay, posthog analytics; simplified to structural layout only - DocRoot/Layout/FetchUser: replaced Hasura GraphQL user-fetch with no-op stub - DocRoot/Layout/Main: removed DDN-specific login_button URL manipulation logic - Navbar/Content: removed AiChatBot, CopyLLM, and Hasura console login button - Navbar/MobileSidebar/Header: removed missing docs-logo-light.svg import - Navbar/MobileSidebar/PrimaryMenu: removed Hasura cloud login link - DocSidebarItem/utils: replaced missing Hasura SVG icon imports with no-op label renderer - AnnouncementBar: removed missing x-close.svg icon imports, replaced with HTML entity close button - pages/index.tsx: replaced Hasura homepage content with generic RCommon placeholder * feat: add NuGetInstall and ProviderComparison components * feat: build marketing landing page with hero, features, and code sections * feat: create docs directory structure with stub pages for all documentation pages * ci: add GitHub Actions workflow for website deployment to GitHub Pages * feat: add local search plugin as Algolia fallback * fix: resolve build issues from initial integration - Add @docusaurus/theme-common as direct dependency (required by swizzled theme components) - Replace invalid 'xml' Prism language with 'markup' (xml is not a standalone Prism language) - Add generated-index links to sidebar sub-categories (Providers, Persistence Caching) to prevent broken SSR fallback hrefs - Fix homepage and footer links pointing to non-existent category root paths; update to use /docs/category/* and specific doc paths * docs: write Getting Started section (5 pages) Replaced stubs in website/docs/getting-started/ with complete documentation covering the overview and philosophy, installation (all NuGet packages by category), a quick-start walkthrough with EF Core, full configuration and bootstrapping reference, and a dependency injection guide explaining service lifetimes and injection patterns. All content is based on reading the actual source code. * docs: write Core Concepts section (5 pages) * docs: write Domain-Driven Design section (5 pages) Replace all five stub pages under website/docs/domain-driven-design/ with full documentation sourced from actual source code in RCommon.Entities and RCommon.Core/EventHandling. Each page covers the real class and interface hierarchy, working C# examples, and an API summary table. * docs: write CQRS & Mediator section (5 pages) * docs: write Event Handling section (7 pages) * docs: write Persistence section (8 pages) Replaces all 8 stubs under website/docs/persistence/ with comprehensive documentation sourced directly from the production C# interfaces and concrete implementations. Each page covers overview, installation, configuration, usage with code examples, and an API summary table. * docs: write Blob Storage section (3 pages) * docs: write Multi-Tenancy section (2 pages) * docs: write Security & Web section (2 pages) * docs: write Serialization section (3 pages) * docs: write Validation section (1 page) * docs: write Messaging section (5 pages) * docs: write State Machines section (2 pages) * docs: write Caching section (3 pages) * docs: write Email section (2 pages) * docs: write Architecture Guides section (3 pages) * docs: write Examples & Recipes section (4 pages) * docs: write Testing section (2 pages) * docs: write API Reference section (3 pages) * docs: snapshot version 1.0 of documentation * feat: use rcommon-logo.png as site logo * fix: restore footer layout, remove test placeholder * feat: add sidebar icons, flatten nav, switch to Hasura-style footer with SVG icons * fix: distinguish navbar and sidebar colors, add navbar border * fix: match Hasura dark theme — same navbar/sidebar color, uppercase labels, content area contrast * feat: use separate logo variants for light/dark modes * fix: remove RCommon text from navbar, logo only * fix: center-align main content area * Created new RCommon website on Github pages --------- Co-authored-by: jasonmwebb-lv <jason.webb@leadventure.com>
1 parent 7d73611 commit 0b8ccfd

460 files changed

Lines changed: 56943 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
name: Deploy Website to GitHub Pages
2+
3+
on:
4+
push:
5+
branches: [main]
6+
paths:
7+
- 'website/**'
8+
workflow_dispatch:
9+
10+
permissions:
11+
contents: read
12+
pages: write
13+
id-token: write
14+
15+
concurrency:
16+
group: "pages"
17+
cancel-in-progress: false
18+
19+
jobs:
20+
build:
21+
runs-on: ubuntu-latest
22+
defaults:
23+
run:
24+
working-directory: website
25+
steps:
26+
- uses: actions/checkout@v4
27+
28+
- uses: pnpm/action-setup@v4
29+
with:
30+
version: 9
31+
32+
- uses: actions/setup-node@v4
33+
with:
34+
node-version: 20
35+
cache: pnpm
36+
cache-dependency-path: website/pnpm-lock.yaml
37+
38+
- name: Install dependencies
39+
run: pnpm install --frozen-lockfile
40+
41+
- name: Build website
42+
run: pnpm build
43+
44+
- name: Upload artifact
45+
uses: actions/upload-pages-artifact@v3
46+
with:
47+
path: website/build
48+
49+
deploy:
50+
environment:
51+
name: github-pages
52+
url: ${{ steps.deployment.outputs.page_url }}
53+
runs-on: ubuntu-latest
54+
needs: build
55+
steps:
56+
- name: Deploy to GitHub Pages
57+
id: deployment
58+
uses: actions/deploy-pages@v4
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"reason":"idle timeout","timestamp":1774325170588}
Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
<h2>RCommon Documentation Sidebar Structure</h2>
2+
<p class="subtitle">Proposed navigation hierarchy for all 37+ packages — organized by domain, not by package name</p>
3+
4+
<div style="display: flex; gap: 24px; flex-wrap: wrap;">
5+
6+
<!-- Left column: Main docs nav -->
7+
<div style="flex: 1; min-width: 320px;">
8+
<div class="mockup">
9+
<div class="mockup-header">Sidebar Navigation</div>
10+
<div class="mockup-body" style="font-family: monospace; font-size: 13px; line-height: 2;">
11+
<div><strong>Getting Started</strong></div>
12+
<div style="padding-left: 16px;">Overview &amp; Philosophy</div>
13+
<div style="padding-left: 16px;">Installation</div>
14+
<div style="padding-left: 16px;">Quick Start Guide</div>
15+
<div style="padding-left: 16px;">Configuration &amp; Bootstrapping</div>
16+
<div style="padding-left: 16px;">Dependency Injection</div>
17+
<br/>
18+
<div><strong>Core Concepts</strong></div>
19+
<div style="padding-left: 16px;">Fluent Configuration Builder</div>
20+
<div style="padding-left: 16px;">Guards &amp; Validation</div>
21+
<div style="padding-left: 16px;">GUID Generation</div>
22+
<div style="padding-left: 16px;">System Time Abstraction</div>
23+
<div style="padding-left: 16px;">Execution Results &amp; Models</div>
24+
<br/>
25+
<div><strong>Domain-Driven Design</strong></div>
26+
<div style="padding-left: 16px;">Entities &amp; Aggregate Roots</div>
27+
<div style="padding-left: 16px;">Domain Events</div>
28+
<div style="padding-left: 16px;">Value Objects</div>
29+
<div style="padding-left: 16px;">Auditing (Created, Updated)</div>
30+
<div style="padding-left: 16px;">Soft Delete</div>
31+
<br/>
32+
<div><strong>Persistence</strong></div>
33+
<div style="padding-left: 16px;">Repository Pattern</div>
34+
<div style="padding-left: 16px;">Specifications</div>
35+
<div style="padding-left: 16px;">Unit of Work</div>
36+
<div style="padding-left: 16px; color: #888;">Providers:</div>
37+
<div style="padding-left: 32px;">Entity Framework Core</div>
38+
<div style="padding-left: 32px;">Dapper</div>
39+
<div style="padding-left: 32px;">Linq2Db</div>
40+
<div style="padding-left: 16px;">Persistence Caching</div>
41+
<div style="padding-left: 32px;">Memory Cache</div>
42+
<div style="padding-left: 32px;">Redis Cache</div>
43+
<br/>
44+
<div><strong>CQRS &amp; Mediator</strong></div>
45+
<div style="padding-left: 16px;">Command &amp; Query Bus</div>
46+
<div style="padding-left: 16px;">Commands &amp; Handlers</div>
47+
<div style="padding-left: 16px;">Queries &amp; Handlers</div>
48+
<div style="padding-left: 16px; color: #888;">Providers:</div>
49+
<div style="padding-left: 32px;">MediatR</div>
50+
<div style="padding-left: 32px;">Wolverine</div>
51+
</div>
52+
</div>
53+
</div>
54+
55+
<!-- Right column: continued -->
56+
<div style="flex: 1; min-width: 320px;">
57+
<div class="mockup">
58+
<div class="mockup-header">Sidebar Navigation (continued)</div>
59+
<div class="mockup-body" style="font-family: monospace; font-size: 13px; line-height: 2;">
60+
<div><strong>Event Handling</strong></div>
61+
<div style="padding-left: 16px;">Event Bus Overview</div>
62+
<div style="padding-left: 16px;">In-Memory Events</div>
63+
<div style="padding-left: 16px;">Distributed Events</div>
64+
<div style="padding-left: 16px;">Transactional Outbox</div>
65+
<div style="padding-left: 16px; color: #888;">Providers:</div>
66+
<div style="padding-left: 32px;">MediatR</div>
67+
<div style="padding-left: 32px;">MassTransit</div>
68+
<div style="padding-left: 32px;">Wolverine</div>
69+
<br/>
70+
<div><strong>Messaging</strong></div>
71+
<div style="padding-left: 16px;">Message Bus Overview</div>
72+
<div style="padding-left: 16px;">Transactional Outbox</div>
73+
<div style="padding-left: 16px;">State Machines</div>
74+
<div style="padding-left: 16px; color: #888;">Providers:</div>
75+
<div style="padding-left: 32px;">MassTransit</div>
76+
<div style="padding-left: 32px;">Wolverine</div>
77+
<br/>
78+
<div><strong>Caching</strong></div>
79+
<div style="padding-left: 16px;">Caching Overview</div>
80+
<div style="padding-left: 16px;">Memory Cache</div>
81+
<div style="padding-left: 16px;">Redis Cache</div>
82+
<br/>
83+
<div><strong>Blob Storage</strong></div>
84+
<div style="padding-left: 16px;">Blob Storage Overview</div>
85+
<div style="padding-left: 16px;">Azure Blob Storage</div>
86+
<div style="padding-left: 16px;">Amazon S3</div>
87+
<br/>
88+
<div><strong>Serialization</strong></div>
89+
<div style="padding-left: 16px;">JSON Abstraction</div>
90+
<div style="padding-left: 16px;">Newtonsoft.Json</div>
91+
<div style="padding-left: 16px;">System.Text.Json</div>
92+
<br/>
93+
<div><strong>Validation</strong></div>
94+
<div style="padding-left: 16px;">FluentValidation Integration</div>
95+
<br/>
96+
<div><strong>Email</strong></div>
97+
<div style="padding-left: 16px;">Email Abstraction</div>
98+
<div style="padding-left: 16px;">SMTP</div>
99+
<div style="padding-left: 16px;">SendGrid</div>
100+
<br/>
101+
<div><strong>Multi-Tenancy</strong></div>
102+
<div style="padding-left: 16px;">Multi-Tenancy Overview</div>
103+
<div style="padding-left: 16px;">Finbuckle Integration</div>
104+
<br/>
105+
<div><strong>Security &amp; Web</strong></div>
106+
<div style="padding-left: 16px;">Authorization</div>
107+
<div style="padding-left: 16px;">Web Utilities</div>
108+
<br/>
109+
<div><strong>Architecture Guides</strong></div>
110+
<div style="padding-left: 16px;">Clean Architecture</div>
111+
<div style="padding-left: 16px;">Microservices</div>
112+
<div style="padding-left: 16px;">Event-Driven Architecture</div>
113+
<br/>
114+
<div><strong>Examples &amp; Recipes</strong></div>
115+
<div style="padding-left: 16px;">HR Leave Management (Clean + CQRS)</div>
116+
<div style="padding-left: 16px;">Event Handling Examples</div>
117+
<div style="padding-left: 16px;">Caching Examples</div>
118+
<div style="padding-left: 16px;">Messaging Examples</div>
119+
<br/>
120+
<div><strong>Testing</strong></div>
121+
<div style="padding-left: 16px;">Testing with RCommon</div>
122+
<div style="padding-left: 16px;">Test Base Classes</div>
123+
<br/>
124+
<div><strong>API Reference</strong></div>
125+
<div style="padding-left: 16px;">NuGet Packages</div>
126+
<div style="padding-left: 16px;">Changelog</div>
127+
<div style="padding-left: 16px;">Migration Guide</div>
128+
</div>
129+
</div>
130+
</div>
131+
132+
</div>
133+
134+
<div style="margin-top: 24px; padding: 16px; background: rgba(255,255,255,0.05); border-radius: 8px;">
135+
<h3 style="margin-top: 0;">Key Design Decisions</h3>
136+
<ul style="line-height: 2;">
137+
<li><strong>Domain-organized, not package-organized</strong> — users think in terms of "persistence" or "events", not "RCommon.EfCore"</li>
138+
<li><strong>Abstraction → Provider pattern</strong> — each section explains the abstraction first, then shows provider-specific setup</li>
139+
<li><strong>Progressive complexity</strong> — Getting Started → Core Concepts → Domain features → Architecture → Examples</li>
140+
<li><strong>Recipes section</strong> — real-world patterns combining multiple features together</li>
141+
<li><strong>Every page includes</strong>: concept overview, NuGet install, configuration, usage examples, provider comparison (where applicable)</li>
142+
</ul>
143+
</div>

0 commit comments

Comments
 (0)