Platform Foundations is the shared foundation for PlainConcepts Platform apps. It keeps many independent apps consistent and easy for developers and AI agents to work in, without becoming a heavy in-house framework.
It covers the frontend (a shared theme, conventions, docs, and a themed showcase) and
backend/.NET conventions (recommended skills and a reference architecture in
ai/ARCHITECTURE.md).
It is not a component library, an app framework, or a design system to be maintained by hand.
ai/ ARCHITECTURE (incl. Stack) + DESIGN + AGENTS + .agents/ (skills, agents)
apps/docs Fumadocs (Next.js), docs + live themed component previews
packages/theme @plainconceptsplatform/ui-theme, design tokens (CSS only)
packages/ui-components @plainconceptsplatform/ui-components, shared React components (Plain logo, ...)
- Prefer established open-source libraries over custom code.
- Use shadcn/ui components directly; don't wrap them or build a proprietary library.
- App-specific components live in the app. Share a component only after the same need appears in multiple apps.
- The foundation owns the theme, conventions, docs, and showcase, nothing more.
- Keep the scope small. Add a directory/package only when it has a clear job today.
Next.js (App Router) + React + TypeScript, shadcn/ui on Radix + Tailwind v4, themed by
@plainconceptsplatform/ui-theme, icons from Lucide. DI via inversify-hooks (mandatory).
Biome, Vitest + Playwright, pnpm. See ai/ARCHITECTURE.md.
pnpm install
pnpm dev # run the docs/showcase site (Fumadocs)
pnpm lint # Biome
pnpm test # VitestThe Platform theme and shared components are private packages on GitHub Packages.
Create a user-level .npmrc, not one in your app repository:
# Windows: %USERPROFILE%\.npmrc
# macOS/Linux: ~/.npmrc
@plainconceptsplatform:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=${NPM_REGISTRY_TOKEN}
Create and authorize a personal access token as follows:
-
Open GitHub token settings and select Generate new token (classic).
-
Give the token the
read:packagespermission and generate it. -
On the token list, select Configure SSO next to the new token and authorize PlainConceptsPlatform. This step is required by the organization’s SAML SSO policy.
-
Store the token in the
NPM_REGISTRY_TOKENuser environment variable. For PowerShell on Windows:[Environment]::SetEnvironmentVariable('NPM_REGISTRY_TOKEN', 'YOUR_TOKEN', 'User')
Open a new terminal before installing packages. Never add the token to a repository file. CI must inject
NPM_REGISTRY_TOKENfrom its secret store.
pnpm add @plainconceptsplatform/ui-theme @plainconceptsplatform/ui-components tailwindcssnpx @plainconceptsplatform/ui-theme@latest initThis copies components.json, adds the theme import to your global stylesheet, and shows you how
to wire the Outfit font in your root layout.
npx shadcn@latest add button card dialog ...Full details in packages/theme/README.md.
Start with AGENTS.md. It points to the ai/ folder, which has conventions,
architecture, design rules, bundled skills, and agent definitions.
ai/ARCHITECTURE.md: reference architecture + stack (frontend and backend/.NET)ai/DESIGN.md: design tokens & UI rulespackages/theme/README.md: theme package setup and conventionspackages/ui-components/README.md: shared components (Plain logo)apps/docs/README.md: docs/showcase site structure