Module Boundaries

Understanding the package structure and dependencies in the admin panel.

🔗 Dependency Graph

@monorepo/solid-admin-panel (shell app)
  ├─→ @monorepo/solid-pkg-core (business logic)
  └─→ @monorepo/solid-pkg-ui (components)
        └─→ @monorepo/solid-pkg-core (utilities)
Key Principle: Dependencies flow in one direction - no circular dependencies.

Package Responsibilities

@monorepo/solid-pkg-core

Location: admin/packages/core/ Exports:
  • api - REST API client
  • auth - Better Auth integration
  • hooks - TanStack Query hooks
  • config - Environment configuration
  • utils - Utility functions (cn, etc.)
Example Imports:
import { apiClient } from "@monorepo/solid-pkg-core/api";
import { authClient } from "@monorepo/solid-pkg-core/auth";
import { useApprovals } from "@monorepo/solid-pkg-core/hooks";
import { env } from "@monorepo/solid-pkg-core/config";
import { cn } from "@monorepo/solid-pkg-core/utils";

@monorepo/solid-pkg-ui

Location: admin/packages/ui/ Exports:
  • GlassCard - Card component with glassmorphism
  • GlassButton - Button component with variants
  • ProtectedRoute - Auth guard wrapper
  • AuthGuard - Conditional auth rendering
Example Imports:
import { GlassCard, GlassButton } from "@monorepo/solid-pkg-ui";
import { ProtectedRoute, AuthGuard } from "@monorepo/solid-pkg-ui";

@monorepo/solid-admin-panel

Location: admin/apps/panel/ Purpose: Main application that composes features Contents:
  • Routes and pages
  • App-specific components
  • Feature composition
  • Layout components

Import Rules

✅ Allowed

// Panel can import from core and ui
import { apiClient } from "@monorepo/solid-pkg-core/api";
import { GlassCard } from "@monorepo/solid-pkg-ui";

// UI can import from core
import { cn } from "@monorepo/solid-pkg-core/utils";

❌ Not Allowed

// Core cannot import from ui or panel
import { GlassCard } from "@monorepo/solid-pkg-ui"; // ❌

// UI cannot import from panel
import { Dashboard } from "@monorepo/solid-admin-panel"; // ❌

Benefits

Clear Separation

  • Business logic separate from UI
  • UI separate from app logic
  • No circular dependencies

Reusability

  • Core can be used by other apps
  • UI can be used by other admin apps
  • Easy to share code

Type Safety

  • TypeScript types work across packages
  • Full IntelliSense support
  • Compile-time error checking