Ho Ngoc Hai 0fdc11de0f
All checks were successful
Build & Deploy to K8s / build-and-deploy (push) Successful in 8m39s
fix(blazor): resolve Lucide DOM conflict causing unhandled error banner on login
Root cause: Lucide JS replaces <i data-lucide> with <svg>, breaking
Blazor's virtual DOM diffing (insertBefore/removeChild on null).
23 components + 2 MutationObservers were calling lucide.createIcons()
concurrently, amplifying the race condition.

Changes:
- Remove all 23 direct lucide.createIcons() JS interop calls from
  layouts and components (AdminLayout, AuthLayout, StaffLayout, etc.)
- Replace dual MutationObserver with single requestIdleCallback poller
  that only runs when browser is idle (after Blazor finishes rendering)
- Auto-suppress Blazor error banner for known harmless Lucide DOM
  mismatch errors (insertBefore/removeChild on null)
- Change login NavigateTo from forceLoad:true to forceLoad:false
  to avoid full WASM runtime reload after successful login
- Simplify launch.json to pos-web only for Claude Code preview

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 13:04:34 +07:00

GoodGo Platform

Monorepo platform with microservices architecture for the merchant/customer ecosystem — POS, F&B, retail, spa, karaoke, and more.

Domain: goodgo.vn | Staging: api.staging.goodgo.vn

Tech Stack

Layer Technologies
Backend .NET 10.0 (C# 14), MediatR/CQRS, EF Core 10, FluentValidation, Serilog, Dapper, Polly
Web Blazor WASM + MudBlazor 8.15 (Material Design)
Mobile .NET MAUI (cross-platform), SwiftUI (iOS)
Database PostgreSQL 16 (local) / Neon PostgreSQL (cloud), Redis 7
Messaging RabbitMQ 3 (AMQP)
Storage MinIO (S3-compatible)
Gateway Traefik v3
Infra Docker Compose (local), Kubernetes RKE2 (staging/prod)
CI/CD GitHub Actions, Docker Hub
Observability Prometheus + Grafana + Loki + Promtail
Auth Duende IdentityServer, JWT Bearer, OAuth2
Monorepo pnpm 8 workspaces, Turborepo

Project Structure

services/                    # 26 .NET microservices (Clean Architecture + CQRS)
apps/                        # Frontend applications
packages/                    # Shared Node.js packages (@goodgo/*)
deployments/                 # Environment configs (local, staging, production)
infra/                       # Infrastructure (Traefik, databases, observability)
scripts/                     # Automation scripts (dev, db, deploy, build)

Services

Core Platform

  • iam-service-net — Identity & Access Management (JWT, RBAC, MFA, Sessions)
  • merchant-service-net — Merchant & Shop management
  • catalog-service-net — Product catalog
  • order-service-net — Order processing
  • inventory-service-net — Inventory management
  • wallet-service-net — Wallet & payments
  • fnb-engine-net — F&B engine
  • booking-service-net — Booking & reservations

Engagement

  • promotion-service-net — Promotions & discounts
  • membership-service-net — Membership & loyalty
  • chat-service-net — Chat & messaging (SignalR + Redis)
  • social-service-net — Social features
  • mission-service-net — Gamification missions

Advertising

  • ads-manager-service-net — Campaign management
  • ads-serving-service-net — Ad delivery
  • ads-billing-service-net — Ad billing
  • ads-tracking-service-net — Event tracking
  • ads-analytics-service-net — Analytics

Marketing Integrations

  • mkt-facebook-service-net — Facebook
  • mkt-whatsapp-service-net — WhatsApp
  • mkt-x-service-net — X (Twitter)
  • mkt-zalo-service-net — Zalo

Utilities

  • storage-service-net — File storage (MinIO)
  • mining-service-net — Data mining

Frontend Apps

App Stack Description
web-client-tpos-net Blazor WASM + MudBlazor POS system (multi-vertical: karaoke, restaurant, cafe, spa, retail)
web-client-base-net Blazor WASM + MudBlazor Enterprise portal
app-client-base-net .NET MAUI Cross-platform mobile app
app-client-base-swift SwiftUI iOS app
web-docs VitePress Documentation site

Quick Start

Prerequisites

  • Docker & Docker Compose
  • .NET 10.0 SDK
  • Node.js 25+
  • pnpm 8+

Run Locally

# Start infrastructure (PostgreSQL, Redis, RabbitMQ, MinIO, Traefik) + all services
cd deployments/local
docker compose up -d

# Run database migrations (per service)
./scripts/db/migrate.sh

# Start a specific service for development
./scripts/dev/start-service.sh iam-service-net

Architecture

Each .NET service follows Clean Architecture + CQRS:

ServiceName/
  src/
    ServiceName.API/              # Controllers + MediatR Commands/Queries
    ServiceName.Domain/           # Entities, aggregates, domain events (no dependencies)
    ServiceName.Infrastructure/   # EF Core, repositories, migrations
  tests/
    ServiceName.UnitTests/        # xUnit + FluentAssertions
    ServiceName.FunctionalTests/  # WebApplicationFactory integration tests

Documentation

  • ROADMAP.md — Development roadmap and phase tracking
  • CLAUDE.md — Full architecture reference and agent configuration

Maintainer

Built by VelikHo (@hongochai10)

Description
GoodGo POS Platform
Readme 39 MiB
Languages
C# 62.8%
HTML 22.7%
TypeScript 7.5%
CSS 3%
Swift 2%
Other 1.9%