Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
363 commits
Select commit Hold shift + click to select a range
c8b4e53
update identity pages
iammukeshm Dec 17, 2025
2451bca
cleanup terraform
iammukeshm Dec 18, 2025
47150d1
minor blazor updates
iammukeshm Dec 18, 2025
f6eb6b2
Terraform Fixes
iammukeshm Dec 18, 2025
a9c9f42
Fix BFF Routes for ALB
iammukeshm Dec 18, 2025
7b4f366
Login Layout Fix
iammukeshm Dec 18, 2025
1d2c9f9
Fix Blazor Warnings
iammukeshm Dec 18, 2025
f93a2d8
Cleanup Blazor Warnings
iammukeshm Dec 18, 2025
d1afc67
Publish Nuget Workflow
iammukeshm Dec 18, 2025
7703619
Fix Publish Nuget + Container Flow
iammukeshm Dec 18, 2025
7b3f5be
Remved Modules.Multitenancy.Web
iammukeshm Dec 18, 2025
2d34677
Add PackageId
iammukeshm Dec 18, 2025
0cd5698
Fix quotes in container image tag parameters in publish-nuget.yml
iammukeshm Dec 18, 2025
69e3a20
Fix quotes in container image tag parameters in publish-nuget.yml
iammukeshm Dec 18, 2025
8fc3e96
Refactor container image tag handling in publish-nuget.yml
iammukeshm Dec 18, 2025
5023e93
Fix container image tag handling in publish-nuget.yml
iammukeshm Dec 18, 2025
0a5bc74
Add container push option to publish-nuget.yml for API and Blazor con…
iammukeshm Dec 18, 2025
4e84375
Refactor container publishing steps in publish-nuget.yml to separate …
iammukeshm Dec 18, 2025
a0611f1
Fixed over 300+ Warning on Project Build.
iammukeshm Dec 18, 2025
3ba9899
Update FSH package references to FullStackHero prefix
iammukeshm Dec 18, 2025
4f4a924
Enhance CLI: version selection, git init, UX, templates
iammukeshm Dec 18, 2025
593df12
Add PasswordHistory (#1156)
kallievz Dec 22, 2025
5971125
Squash Identity migrations, update health UI & templates
iammukeshm Dec 22, 2025
2289c08
Add user session management to Identity & Blazor UI
iammukeshm Dec 23, 2025
bf30e81
Add User Groups feature to Identity & Blazor UI
iammukeshm Dec 23, 2025
6b9bf43
Add full test suite & CI/CD with coverage for all modules
iammukeshm Jan 8, 2026
187c838
Optimize CI: add NuGet caching and build artifact sharing
iammukeshm Jan 8, 2026
7f52ef2
Refactor CI pipeline: remove coverage steps and upload test results
iammukeshm Jan 8, 2026
d96a295
Add GitHub Actions workflows for Blazor, WebAPI, NuGet publishing, an…
iammukeshm Jan 8, 2026
ecaec94
Add RabbitMQ event bus, outbox service, and storage APIs
iammukeshm Jan 9, 2026
4a7b93f
Add user auth pages & improve multitenancy/test infra
iammukeshm Jan 15, 2026
2df0c67
Fix Multitenancy.Tests path typo in CI workflow
iammukeshm Jan 16, 2026
38d49dd
Add architecture tests and fix namespace/dependency violations
iammukeshm Jan 16, 2026
6345bd5
Reduce Auditing.Contracts dependencies for lighter contracts
iammukeshm Jan 16, 2026
d09dd12
Move service interfaces from implementation to Contracts project
iammukeshm Jan 16, 2026
872c151
Add shared PagedQueryValidator to reduce code duplication
iammukeshm Jan 16, 2026
b0014be
Remove unnecessary Persistence dependency from Eventing
iammukeshm Jan 16, 2026
bdf8920
Separate domain entities into dedicated Domain folder in Identity module
iammukeshm Jan 16, 2026
5a59aae
Fix all compiler and analyzer warnings across the solution
iammukeshm Jan 16, 2026
337cec8
Update NuGet packages and fix all build warnings
iammukeshm Jan 16, 2026
12577c3
Add configurable SSL option for Redis caching
iammukeshm Jan 17, 2026
9f55007
Add multitenancy and OpenTelemetry config options
iammukeshm Jan 17, 2026
c3acc10
Fix Blazor Server token refresh for expired JWT tokens
iammukeshm Jan 17, 2026
73a7d0a
Add shared Blazor components and reduce module coupling
iammukeshm Jan 17, 2026
b26d2d6
Include .ico in theme favicon upload. (#1161)
kallievz Jan 20, 2026
9bc7d44
Add send grid as alternative mailing option (#1162)
kallievz Jan 20, 2026
a5846b4
feat: Add Claude Code agents, skills, and rules (#1166)
iammukeshm Jan 25, 2026
18d44ce
feat: Add domain events to Identity module (#1167)
iammukeshm Jan 25, 2026
86ab580
fix: Standardize Identity endpoints to use TypedResults (#1168)
iammukeshm Jan 25, 2026
496350f
fix: Add CancellationToken to Identity handlers (#1169)
iammukeshm Jan 25, 2026
99a11e0
fix: Add missing authorization to Identity endpoints (#1170)
iammukeshm Jan 25, 2026
7611a7b
fix: Add missing validators to Identity module commands (#1171)
iammukeshm Jan 25, 2026
66390d6
refactor: Add DDD patterns to Identity domain entities (#1172)
iammukeshm Jan 25, 2026
ddb2b4f
fix: Add logging to session creation exception in GenerateTokenComman…
iammukeshm Jan 25, 2026
4dfadf9
fix: resolve all build warnings (#1183)
iammukeshm Jan 25, 2026
19acf7a
refactor: standardize endpoints to use TypedResults (#1184)
iammukeshm Jan 25, 2026
fb16d34
feat(identity): wire up domain events for user lifecycle (#1185)
iammukeshm Jan 25, 2026
b85dc86
refactor(identity): split UserService into focused partial files (#1186)
iammukeshm Jan 25, 2026
de81c6f
refactor: reduce cyclomatic complexity in Identity module (#1187)
iammukeshm Jan 26, 2026
ec25dbb
refactor: reduce cyclomatic complexity across multiple modules (#1188)
iammukeshm Jan 26, 2026
eac87b3
refactor: reduce cyclomatic complexity of 12 high-complexity methods …
iammukeshm Jan 26, 2026
42b977a
feat: add CancellationToken to async methods (#1175) (#1191)
iammukeshm Jan 26, 2026
447481a
refactor(identity): split UserService into single-responsibility serv…
iammukeshm Jan 26, 2026
b95efe9
feat(identity): add ICurrentUserService and IRequestContextService in…
iammukeshm Jan 26, 2026
a3f29e7
feat(cli): add upgrade system foundation (Sprint 1) (#1195)
iammukeshm Jan 27, 2026
c813c7e
feat(cli): implement upgrade check (Sprint 2) (#1196)
iammukeshm Jan 27, 2026
2887f64
fix(identity): reduce SessionService complexity (#1194)
iammukeshm Jan 27, 2026
744fda9
feat(cli): implement upgrade apply (Sprint 3) (#1197)
iammukeshm Jan 27, 2026
6b44e1c
fix(multitenancy): update migrations assembly configuration in Tenant…
danieltharris Jan 30, 2026
464a4d9
docs: Add XML documentation to BuildingBlocks APIs (#1201)
iammukeshm Jan 31, 2026
039bd18
feat: refactor TemplateEngine into focused single-responsibility clas…
iammukeshm Feb 2, 2026
db28636
chore: add MIT license (#1203)
iammukeshm Feb 2, 2026
713a0f2
test(identity): add handler tests for auth-critical flows (#1204)
iammukeshm Feb 2, 2026
fb68ec4
chore: update SonarAnalyzer.CSharp from 10.18.0 to 10.19.0 (#1206)
iammukeshm Feb 9, 2026
b188977
chore: update all outdated NuGet packages (#1207)
iammukeshm Feb 9, 2026
a3ddf6e
Docs/claude ai ready (#1208)
iammukeshm Feb 9, 2026
c727de8
fix: remove dead code, fix anti-patterns, resolve all code warnings
iammukeshm Mar 23, 2026
8b01e0c
chore: update all NuGet packages and improve CI workflow
iammukeshm Mar 23, 2026
4553b2e
fix: resolve CI build errors with -warnaserror flag
iammukeshm Mar 23, 2026
dce5adf
Remove .claude directory and add src-specific Claude settings
iammukeshm Mar 23, 2026
2993065
ci: opt into Node.js 24 for GitHub Actions runners
iammukeshm Mar 23, 2026
8e0c3f2
ci: pin all GitHub Actions to latest versions with Node.js 24 support
iammukeshm Mar 23, 2026
a0d5eaa
ci: upgrade all GitHub Actions to latest major versions (Node.js 24)
iammukeshm Mar 23, 2026
708a23a
fix: resolve DI runtime bugs, harden security, add infrastructure
iammukeshm Mar 24, 2026
1110950
fix: resolve CodeQL security alerts for log injection and PII exposure
iammukeshm Mar 24, 2026
5bfe3a6
ci: remove push trigger from CodeQL to reduce duplicate workflow runs
iammukeshm Mar 24, 2026
9f97a45
fix: standardize API endpoints with TypedResults and correct HTTP sem…
cesarcastrocuba Mar 24, 2026
d964bcd
fix(identity): align Group entity with IAuditableEntity and encapsula…
iammukeshm Mar 24, 2026
be2cc05
fix(auditing): add missing base.OnModelCreating() call in AuditDbContext
iammukeshm Mar 26, 2026
b4fa0fe
Merge pull request #1228 from fullstackhero/fix/audit-dbcontext-base-…
iammukeshm Mar 26, 2026
4c5081e
feat(persistence): add AuditableEntitySaveChangesInterceptor with rec…
Mar 16, 2026
2546d0a
fix: resolve CA1873 by using LoggerMessage source generators for high…
iammukeshm Mar 26, 2026
33a3282
Merge pull request #1229 from fullstackhero/fix/identity-dbcontext-in…
iammukeshm Mar 26, 2026
b706207
fix: resolve technical debt — sync-over-async, DateTime.UtcNow, and e…
iammukeshm Mar 26, 2026
32a10f4
feat(docs): add Astro documentation site with landing page, 15 doc pa…
iammukeshm Mar 26, 2026
05e5b6e
fix(docs): rename package to valid Cloudflare Worker name
iammukeshm Mar 26, 2026
c9f0160
fix(docs): rename package to fullstackhero
iammukeshm Mar 26, 2026
bb715a4
fix(docs): move font imports to frontmatter to resolve Vite build war…
iammukeshm Mar 26, 2026
21658ce
fix(docs): force sharp image service to prevent broken images on Clou…
iammukeshm Mar 26, 2026
0096217
fix(docs): use Cloudflare adapter with compile-time image optimizatio…
iammukeshm Mar 26, 2026
2e82d47
fix(docs): prevent nav overflow on mobile viewports
iammukeshm Mar 26, 2026
a845d43
fix(docs): prevent horizontal overflow on mobile — clip hero glow and…
iammukeshm Mar 26, 2026
778094e
fix(docs): improve Steps component and content padding on mobile
iammukeshm Mar 26, 2026
d2ac544
feat(docs): redesign Steps component — filled circles, gradient conne…
iammukeshm Mar 26, 2026
f132540
fix(docs): Steps component — single continuous line through all numbe…
iammukeshm Mar 26, 2026
60eef8b
feat(docs): modernize Steps — rounded-square numbers, mono font, grad…
iammukeshm Mar 26, 2026
6b90cc3
ci: skip workflows for docs-only changes — only trigger on src/ paths
iammukeshm Mar 26, 2026
c3a5e95
feat(docs): comprehensive documentation rewrite — 45 pages across 8 s…
iammukeshm Mar 26, 2026
f74203a
fix(docs): prevent horizontal overflow on mobile
iammukeshm Mar 26, 2026
c46de0a
fix(docs): lighten FileTree component — outline icons, thinner text, …
iammukeshm Mar 26, 2026
3263665
feat(docs): GEO/SEO optimization — structured data, AI crawlers, llms…
iammukeshm Mar 26, 2026
94a82d1
feat(docs): nested sidebar for Modules — Identity, Multitenancy, Audi…
iammukeshm Mar 26, 2026
b2a8483
feat(docs): polish Badge and FileTree components — borders, spacing, …
iammukeshm Mar 26, 2026
74cdbd8
fix(security): correct Hangfire dashboard auth filter logic inversion
iammukeshm Mar 26, 2026
aa2648f
fix(identity): wire ForgotPassword endpoint in IdentityModule
iammukeshm Mar 26, 2026
87e060c
fix: health check status, audit masking, validator, sealed classes, C…
iammukeshm Mar 26, 2026
bfbce89
chore: remove unnecessary using directives across solution
iammukeshm Mar 26, 2026
c7ec796
fix(identity): resolve access token subject mismatch check using corr…
iammukeshm Mar 26, 2026
1b37167
feat(docs): change URL structure from /docs/ to /dotnet-starter-kit/
iammukeshm Mar 26, 2026
dc438f8
feat: add HTTP resilience infrastructure (Polly v8)
iammukeshm Mar 26, 2026
a120a61
feat: add feature flags with tenant-specific overrides
iammukeshm Mar 26, 2026
132ae5c
feat: add idempotency middleware for HTTP request deduplication
iammukeshm Mar 26, 2026
00cdcab
feat: add Webhooks module with tenant-scoped subscriptions and delivery
iammukeshm Mar 26, 2026
6485eb2
feat: add Server-Sent Events (SSE) infrastructure for real-time push
iammukeshm Mar 26, 2026
6bac3da
fix(docs): fix all broken internal links after URL restructure
iammukeshm Mar 26, 2026
8f007df
docs: add Phase 2 enterprise features documentation
iammukeshm Mar 26, 2026
6e04eff
feat(docs): flatten all URLs to 2 levels with keyword-rich slugs
iammukeshm Mar 26, 2026
6a30a4b
feat(terraform): comprehensive security hardening, scalability, and v…
iammukeshm Mar 26, 2026
7a3c3db
fix(security): resolve CodeQL log injection and private data exposure…
iammukeshm Mar 26, 2026
b517c0e
docs: add webhooks module references and comprehensive Terraform depl…
iammukeshm Mar 27, 2026
e25234b
feat(docs): replace em dashes, add landing page animations and conste…
iammukeshm Mar 27, 2026
f05507a
fix(docs): mobile font sizes, author image fill, hero-to-stats gap
iammukeshm Mar 27, 2026
a2dd020
feat(docs): upgrade hero eyebrow to interactive pill badge
iammukeshm Mar 27, 2026
c4c3b43
fix(docs): constrain author card width for better proportions
iammukeshm Mar 27, 2026
e0b031a
fix(docs): widen author image column to 340px, card to 56rem max
iammukeshm Mar 27, 2026
6dee763
fix(docs): force author image to fill cover with absolute positioning
iammukeshm Mar 27, 2026
afbb9e7
fix(docs): force author image fill with fixed grid column and absolut…
iammukeshm Mar 27, 2026
5e5b21e
fix(docs): force author image fill via inline style attribute
iammukeshm Mar 27, 2026
4b35e2c
fix(docs): disable Astro dev toolbar to suppress aria-query audit error
iammukeshm Mar 27, 2026
fcbe305
fix(build): update slnx to reference renamed FSH.Api project
iammukeshm Mar 27, 2026
f3bc238
feat(infra): move terraform to deploy/, fix bugs, production-grade ha…
iammukeshm Mar 27, 2026
4f41531
refactor: rename Playground.Api to FSH.Api, modernize Aspire setup
iammukeshm Mar 27, 2026
ff88424
fix(build): remove uncommitted Integration.Tests from slnx
iammukeshm Mar 27, 2026
a631f8b
feat(tests): add production-grade integration tests with Testcontainers
iammukeshm Apr 3, 2026
e12336b
fix(blazor): prevent token refresh loop with proactive JWT renewal (#…
iammukeshm Apr 3, 2026
b6627e2
fix(build): add domain event handlers to satisfy Mediator source gene…
iammukeshm Apr 3, 2026
aee5943
test(auth): add token expiry and refresh rotation tests
iammukeshm Apr 3, 2026
12c47a5
fix: move Hangfire stale lock cleanup to hosted service, harden tenan…
iammukeshm Apr 3, 2026
836b1c1
fix(build): suppress CA1812 on DI-instantiated HangfireStaleLockClean…
iammukeshm Apr 3, 2026
6054e02
fix(build): add domain event handlers to satisfy Mediator source gene…
iammukeshm Apr 3, 2026
f8a4c39
fix(tests): fix Hangfire job timing race in integration tests
iammukeshm Apr 3, 2026
e3adee4
fix(eventing): make inbox idempotent, use no-op mail in integration t…
iammukeshm Apr 3, 2026
5807b9f
fix(tests): fix startup race conditions and Hangfire dual-server in i…
iammukeshm Apr 3, 2026
8a0d508
fix(tests): fix CI integration test failures — add missing migrations…
iammukeshm Apr 3, 2026
83228df
fix: suppress expected shutdown and startup errors in tests
iammukeshm Apr 3, 2026
bf49011
feat: add response compression, health checks, traceId in errors, tag…
iammukeshm Apr 3, 2026
e25511f
fix: resolve remaining antipatterns from Roslyn architecture audit
iammukeshm Apr 3, 2026
3cc479a
fix: move catch-block comments inside body to resolve S125 in CI
iammukeshm Apr 3, 2026
f44e07f
fix: distribution gaps — pack Webhooks in CI, fix template version, a…
iammukeshm Apr 3, 2026
375674c
feat: remove Blazor UI and fix Redis TLS for Aspire 13.x
iammukeshm Apr 4, 2026
9b9734f
fix: suppress analyzer noise in EF migrations and integration tests t…
iammukeshm Apr 8, 2026
1afe7dd
feat: restructure admin app as pnpm monorepo and wire into Aspire via…
iammukeshm Apr 8, 2026
a858970
refactor: migrate caching to Microsoft.Extensions.Caching.Hybrid
iammukeshm Apr 8, 2026
cd00e1e
perf(caching): exploit HybridCache fast paths — ImmutableObject, stat…
iammukeshm Apr 8, 2026
cb9aa41
chore: remove Next.js admin app and lock frontend/platform requirements
iammukeshm Apr 20, 2026
a431324
feat(rate-limiting): enforce per-tenant + per-user + per-IP simultane…
iammukeshm Apr 20, 2026
46f1466
feat(storage): enable MinIO via S3-compatible endpoint and wire Aspir…
iammukeshm Apr 20, 2026
fba6ee8
feat(identity): add user impersonation with actor claims and audit trail
iammukeshm Apr 20, 2026
cd67cb9
feat(quota): meter tenant API calls with Redis counters and 429 rejec…
iammukeshm Apr 20, 2026
72e6728
feat(quota): add user-count gauge for Users quota
iammukeshm Apr 20, 2026
ee96df2
feat(quota): meter tenant storage bytes on upload and delete
iammukeshm Apr 20, 2026
a616b50
feat(billing): add internal billing module with usage-based invoicing
iammukeshm Apr 20, 2026
6e2e853
feat(sse): enable realtime stream with single-use token auth
iammukeshm Apr 20, 2026
459a6f4
feat(admin): scaffold React + Vite admin console
iammukeshm Apr 20, 2026
0d2166a
feat(apphost): wire admin app into Aspire via JavaScript hosting
iammukeshm Apr 20, 2026
fd11440
feat(dashboard): scaffold tenant dashboard with SSE live feed and usa…
iammukeshm Apr 20, 2026
e4d9c3f
fix(identity): remove silent permission requirement on self-register …
iammukeshm Apr 24, 2026
808365e
fix(webhooks): enforce tenant isolation on subscriptions and deliveries
iammukeshm Apr 24, 2026
8589e31
fix(auditing): remove misleading query.TenantId filter; add isolation…
iammukeshm Apr 24, 2026
442de62
test(jobs): lock in Hangfire dashboard BasicAuth behavior with regres…
iammukeshm Apr 24, 2026
e8da0e3
test(multitenancy): assert all provisioning steps transition to Compl…
iammukeshm Apr 24, 2026
d598f34
fix(identity): apply auth rate limit policy to reset-password and sel…
iammukeshm Apr 24, 2026
c3dd9b9
Merge Phase 1 of API Hardening Sprint into develop
iammukeshm Apr 24, 2026
45512ed
feat(billing): add ops endpoint for manual usage snapshot capture
iammukeshm Apr 24, 2026
b6bf460
feat(webhooks): add production dispatcher with Hangfire retry on tran…
iammukeshm Apr 24, 2026
faf2eea
feat(idempotency): wire .WithIdempotency() on high-value mutating end…
iammukeshm Apr 24, 2026
e7d7934
test(multitenancy): explicit regression test for tenant seed data on …
iammukeshm Apr 24, 2026
1566da6
Merge Phase 2 of API Hardening Sprint into develop
iammukeshm Apr 24, 2026
18db49c
feat(identity): enforce account lockout after consecutive failed logins
iammukeshm Apr 24, 2026
104da4e
feat(identity): add TOTP two-factor authentication (enroll, verify, d…
iammukeshm Apr 24, 2026
b5b5016
Merge Phase 3 of API Hardening Sprint into develop
iammukeshm Apr 24, 2026
f5f2703
feat(jobs): harden HangfireOptions; lock in health probes with tests
iammukeshm Apr 24, 2026
9b020a0
Merge Phase 4 of API Hardening Sprint into develop — SPRINT COMPLETE
iammukeshm Apr 24, 2026
4e7e4d3
fix(ui): remove hardcoded test credentials from login forms
iammukeshm Apr 24, 2026
b2cb81d
feat(ui): eslint config, route-level error boundary, permission-aware…
iammukeshm Apr 24, 2026
dda46e3
feat(ui): add sonner toast surface; document SSE token refresh invariant
iammukeshm Apr 24, 2026
b54d417
Merge Phase 1 of UI Hardening Sprint — correctness + shared infrastru…
iammukeshm Apr 24, 2026
d403f2f
feat(admin-ui): tenant create + detail page with live provisioning st…
iammukeshm Apr 24, 2026
47d93b9
feat(dashboard-ui): add dev-only one-click login as default seeded admin
iammukeshm Apr 24, 2026
af5ada1
fix(web): run CORS before HTTPS redirection so preflights aren't redi…
iammukeshm Apr 24, 2026
462e96e
chore: pre-upgrade checkpoint — dashboard https default + audit recur…
iammukeshm Apr 29, 2026
6e91786
chore(deps): bump NuGet packages to latest patch + minor
iammukeshm Apr 29, 2026
cd3bd54
test: fix pre-existing failures uncovered during package upgrade
iammukeshm Apr 29, 2026
fe8b265
chore(deps): bump coverlet.collector 8.0.1 -> 10.0.0
iammukeshm Apr 29, 2026
7bd86d4
chore(deps): bump Asp.Versioning.* 8.1.1 -> 10.0.0
iammukeshm Apr 29, 2026
06f0802
chore(deps): drop unused Mapster dependency
iammukeshm Apr 29, 2026
3d85683
fix(identity): emit RFC 7519 'sub' claim in JWT alongside NameIdentifier
iammukeshm Apr 29, 2026
a9412dd
fix(identity): make access Token optional on RefreshTokenCommand
iammukeshm Apr 29, 2026
31331fb
fix(dashboard): align refresh request and response shapes with server…
iammukeshm Apr 29, 2026
a699555
feat(dashboard): modern design-token system, theme switcher, login re…
iammukeshm Apr 29, 2026
7723599
feat(dashboard/overview): redesign overview page with KPI strip + ani…
iammukeshm Apr 29, 2026
3332fa1
feat(dashboard): require confirmation dialog before sign-out
iammukeshm Apr 29, 2026
6b322ed
fix(identity+dashboard): resolve username 'Unknown' by emitting RFC s…
iammukeshm Apr 29, 2026
70071ba
feat(dashboard): collapsible sidebar with persisted state, refreshed …
iammukeshm Apr 29, 2026
3680ea5
feat(dashboard): add Settings page with deep-linkable pill tabs
iammukeshm Apr 29, 2026
9b04dc1
feat(dashboard): selectable accent palettes + 12 fonts in Appearance
iammukeshm Apr 29, 2026
be766c5
feat(dashboard): redesign topbar as profile dropdown
iammukeshm Apr 29, 2026
3ba4395
feat(dashboard/invoices): refresh into KPI + token-driven list vocabu…
iammukeshm Apr 29, 2026
f50812e
feat(dashboard): command palette (⌘K) with five action groups
iammukeshm Apr 29, 2026
1f420de
feat(dashboard/security): wire active sessions to the real backend
iammukeshm Apr 29, 2026
79713eb
feat(dashboard): wire density mode (compact spacing across pages)
iammukeshm Apr 29, 2026
7ec45b3
feat(dashboard): catalog pages + frontend-design polish
iammukeshm Apr 30, 2026
d304380
feat(dashboard): polish dialogs, skeletons, settings + lazy-load routes
iammukeshm Apr 30, 2026
aa9eaa1
feat(tickets): add Tickets module — second demo vertical
iammukeshm Apr 30, 2026
600f124
feat(catalog,tickets): soft delete + restore for all entities
iammukeshm Apr 30, 2026
d4202ed
test(catalog,tickets): coverage for soft-delete + Tickets endpoints
iammukeshm Apr 30, 2026
607f566
feat(dashboard): tickets pages + unified trash view
iammukeshm Apr 30, 2026
69b59e0
feat(auditing): production-grade hardening + named query filters
iammukeshm Apr 30, 2026
a338847
feat(dashboard/health): rack-unit faceplate styling for check cards
iammukeshm Apr 30, 2026
e1a450e
feat(identity,dashboard): tenant-wide sessions admin console
iammukeshm Apr 30, 2026
f73627b
feat(admin): user management console (Phase 2.2 UI)
iammukeshm May 6, 2026
d8d5656
feat(identity): system role/group protection + last-admin guards
iammukeshm May 6, 2026
672121f
fix(dashboard): eliminate double scrollbar from sidebar overflow
iammukeshm May 6, 2026
8c6d1ca
Merge feature/ui-admin-management into develop
iammukeshm May 6, 2026
fa91023
chore: in-flight WIP sweep — Playground→Starter rename, dev seeding, …
iammukeshm May 6, 2026
f7f5300
Merge feature/ui-admin-management — WIP sweep (Playground→Starter, de…
iammukeshm May 6, 2026
754f1af
fix(apphost): normalize minio-init script line endings to LF
iammukeshm May 6, 2026
06c1e97
fix(api): ensure wwwroot/ exists so the API can boot
iammukeshm May 6, 2026
0df9f8f
fix(dashboard): rebuild toast layout in flex; modernise the chrome
iammukeshm May 6, 2026
025339a
feat(dashboard): mirror server-side system-role guards in role-detail UI
iammukeshm May 6, 2026
5f2118e
feat(dashboard/overview): cockpit hero + first-run panel + recent ope…
iammukeshm May 6, 2026
85a8b0e
feat(dashboard/appearance): custom-accent picker — pick any brand hue
iammukeshm May 6, 2026
5d6e8a5
feat(dashboard/audits): related-events timeline in the detail drawer
iammukeshm May 6, 2026
395d821
feat(dashboard): unified PageHero across non-list surfaces
iammukeshm May 6, 2026
55eb23f
feat(dashboard/sidebar): single-select accordion sections + top-level…
iammukeshm May 6, 2026
a5548ec
feat(dashboard/sidebar): subtle accordion animations + matched typogr…
iammukeshm May 6, 2026
7f74102
fix(dashboard/hero): stop clipping descenders on Settings, Audit trai…
iammukeshm May 6, 2026
e40187c
feat(dashboard/login): brand-story column on wide viewports
iammukeshm May 6, 2026
93b05fd
feat(dashboard/login): editorial product-page redesign
iammukeshm May 6, 2026
5b33117
feat(dashboard/login): blueprint-style centered redesign + demo popup
iammukeshm May 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
65 changes: 65 additions & 0 deletions .agents/rules/api-conventions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
---
paths:
- "src/Modules/**/Features/**/*"
- "src/Modules/**/*Endpoint*.cs"
---

# API Conventions

Rules for API endpoints in FSH.

## Endpoint Requirements

Every endpoint MUST have:

```csharp
endpoints.MapPost("/", handler)
.WithName(nameof(CommandOrQuery)) // Required: Unique name
.WithSummary("Description") // Required: OpenAPI description
.RequirePermission(Permission) // Required: Or .AllowAnonymous()
```

## HTTP Method Mapping

| Operation | Method | Return |
|-----------|--------|--------|
| Create | `MapPost` | `TypedResults.Created(...)` |
| Read single | `MapGet` | `TypedResults.Ok(...)` |
| Read list | `MapGet` | `TypedResults.Ok(...)` |
| Update | `MapPut` | `TypedResults.Ok(...)` or `NoContent()` |
| Delete | `MapDelete` | `TypedResults.NoContent()` |

## Route Patterns

```
/api/v1/{module}/{entities} # Collection
/api/v1/{module}/{entities}/{id} # Single item
/api/v1/{module}/{entities}/{id}/sub # Sub-resource
```

## Response Types

Always use `TypedResults`:
- `TypedResults.Ok(data)`
- `TypedResults.Created($"/path/{id}", data)`
- `TypedResults.NoContent()`
- `TypedResults.NotFound()`
- `TypedResults.BadRequest(errors)`

Never return raw objects or use `Results.Ok()`.

## Permission Format

```csharp
.RequirePermission({Module}Permissions.{Entity}.{Action})
```

Actions: `View`, `Create`, `Update`, `Delete`

## Query Parameters

Use `[AsParameters]` for complex queries:

```csharp
endpoints.MapGet("/", async ([AsParameters] GetProductsQuery query, ...) => ...)
```
246 changes: 246 additions & 0 deletions .agents/rules/architecture.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,246 @@
---
paths:
- "src/**"
---

# Architecture Rules

FSH is a **Modular Monolith** — NOT microservices, NOT a traditional layered architecture.

## Core Principles

### 1. Modular Monolith

```
Single deployment unit
Multiple bounded contexts (modules)
Each module is self-contained
Communication via Contracts (interfaces/DTOs)
```

**Modules:**
- Identity (users, roles, permissions)
- Multitenancy (tenants, subscriptions)
- Auditing (audit trails)
- Your business modules (e.g., Catalog, Orders)

**Rules:**
- Modules CANNOT reference other module internals
- Modules CAN reference other module Contracts
- Modules share BuildingBlocks (framework code)

### 2. CQRS (Mediator Library)

**Commands** (write operations):
```csharp
public record CreateUserCommand(string Email) : ICommand<Guid>;

public class CreateUserHandler : ICommandHandler<CreateUserCommand, Guid>
{
public async ValueTask<Guid> Handle(CreateUserCommand cmd, CancellationToken ct)
{
// Write to database
return user.Id;
}
}
```

**Queries** (read operations):
```csharp
public record GetUserQuery(Guid Id) : IQuery<UserDto>;

public class GetUserHandler : IQueryHandler<GetUserQuery, UserDto>
{
public async ValueTask<UserDto> Handle(GetUserQuery query, CancellationToken ct)
{
// Read from database
return userDto;
}
}
```

⚠️ **NOT MediatR:** FSH uses `Mediator` library (different interfaces!)

### 3. Domain-Driven Design

**Entities** inherit `BaseEntity`:
```csharp
public class Product : BaseEntity, IAuditable
{
public string Name { get; private set; } = default!;
public Money Price { get; private set; } = default!;

public static Product Create(string name, Money price)
{
// Factory method, enforce invariants
return new Product { Name = name, Price = price };
}
}
```

**Value Objects** (immutable):
```csharp
public record Money(decimal Amount, string Currency);
```

**Aggregates:**
- Root entity controls access to child entities
- Enforce business rules
- Transaction boundary

### 4. Multi-Tenancy

**Finbuckle.MultiTenant:**
- Shared database, tenant isolation via TenantId
- Automatic query filtering
- Tenant resolution from HTTP header or claim

```csharp
// Tenant-aware entity
public class Order : BaseEntity, IMustHaveTenant
{
public Guid TenantId { get; set; } // Auto-filtered
}
```

**Tenant Resolution Order:**
1. HTTP header: `X-Tenant`
2. JWT claim: `tenant`
3. Host/route strategy (optional)

### 5. Vertical Slice Architecture

Each feature = complete slice (command/handler/validator/endpoint in one folder).

```
Features/v1/CreateProduct/
├── CreateProductCommand.cs
├── CreateProductHandler.cs
├── CreateProductValidator.cs
└── CreateProductEndpoint.cs
```

**Benefits:**
- High cohesion (related code together)
- Low coupling (features don't depend on each other)
- Easy to find/modify

### 6. BuildingBlocks (Shared Kernel)

11 packages providing cross-cutting concerns:

| Package | Purpose |
|---------|---------|
| Core | Base entities, interfaces, exceptions |
| Persistence | EF Core, repositories, specifications |
| Caching | Redis/memory caching |
| Mailing | Email templates, MailKit integration |
| Jobs | Hangfire background jobs |
| Storage | File storage (AWS S3, local) |
| Web | API conventions, filters, middleware |
| Eventing | Domain events, message bus |

| Shared | DTOs, constants |
| Eventing.Abstractions | Event contracts |

**Protected:** BuildingBlocks should NOT be modified without approval. See `.claude/rules/buildingblocks-protection.md`.

### 7. Dependency Flow

```
API Layer (Minimal APIs)
Application Layer (Commands/Queries/Handlers)
Domain Layer (Entities/Value Objects)
Infrastructure Layer (Persistence/External Services)
```

**Rules:**
- Domain CANNOT depend on infrastructure
- Application CANNOT depend on infrastructure directly
- Infrastructure implements domain interfaces

### 8. Persistence Strategy

**DbContext per Module:**
- IdentityDbContext
- MultitenancyDbContext
- AuditingDbContext
- Your module DbContexts

**Repository Pattern:**
```csharp
public interface IRepository<T> where T : BaseEntity
{
Task<T?> GetByIdAsync(Guid id, CancellationToken ct);
Task<List<T>> ListAsync(Specification<T> spec, CancellationToken ct);
Task<T> AddAsync(T entity, CancellationToken ct);
Task UpdateAsync(T entity, CancellationToken ct);
Task DeleteAsync(T entity, CancellationToken ct);
}
```

**Specification Pattern** (queries):
```csharp
public class ActiveProductsSpec : Specification<Product>
{
public ActiveProductsSpec()
{
Query.Where(p => !p.IsDeleted && p.IsActive);
}
}
```

## Architectural Tests

`Architecture.Tests` project enforces rules:

```csharp
[Fact]
public void Modules_Should_Not_Reference_Other_Modules()
{
// Fails if Module A references Module B directly
}

[Fact]
public void Domain_Should_Not_Depend_On_Infrastructure()
{
// Fails if domain entities reference EF Core
}
```

## Technology Stack

- **.NET 10** (latest LTS)
- **EF Core 10** (PostgreSQL provider)
- **Mediator** (CQRS)
- **FluentValidation** (input validation)
- **Hangfire** (background jobs)
- **Finbuckle.MultiTenant** (multi-tenancy)
- **MailKit** (email)
- **Scalar** (OpenAPI docs)
- **Serilog** (logging)
- **OpenTelemetry** (observability)
- **Aspire** (orchestration)

## Key Takeaways

1. **Modular Monolith** ≠ Microservices. Modules share process, database, infrastructure.
2. **CQRS** separates reads/writes. Use `ICommand`/`IQuery`, not `IRequest`.
3. **DDD** enforces business rules in domain. Entities control their state.
4. **Multi-Tenancy** is built-in. Every entity is either tenant-aware or shared.
5. **Vertical Slices** keep features independent. No shared "services" layer.
6. **BuildingBlocks** provide infrastructure. Don't reinvent, reuse.
7. **Tests enforce architecture**. Violate rules → build fails.

---

For implementation details, see:
- `ARCHITECTURE_ANALYSIS.md` (deep dive)
- `.claude/rules/modules.md` (module patterns)
- `.claude/rules/persistence.md` (data access patterns)
36 changes: 36 additions & 0 deletions .agents/rules/buildingblocks-protection.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
paths:
- "src/BuildingBlocks/**/*"
---

# ⚠️ BuildingBlocks Protection

**STOP. You are modifying BuildingBlocks.**

Changes to BuildingBlocks affect ALL modules across the entire framework. These are core abstractions that many projects depend on.

## Before Proceeding

1. **Confirm explicit approval** - Has the user specifically approved this change?
2. **Consider alternatives** - Can this be done in the module instead?
3. **Assess impact** - What modules will this affect?

## If Approved

- Make minimal, focused changes
- Ensure backward compatibility
- Update all affected modules
- Run full test suite: `dotnet test src/FSH.Starter.slnx`
- Document the change

## Alternatives to Consider

| Instead of... | Consider... |
|---------------|-------------|
| Modifying Core | Extension method in module |
| Changing Persistence | Custom repository in module |
| Updating Web | Module-specific middleware |

## If Not Approved

Do not proceed. Suggest alternatives that don't require BuildingBlocks modifications.
Loading