/dashboard
Use this skill when contributing to InsForge's shared dashboard package. This is for maintainers editing `packages/dashboard`, which ships in `self-hosting` and `cloud-hosting` modes, and the local `frontend/` shell used for `self-hosting` in this repo.
$ npx -y skills add InsForge/InsForge --skill dashboard --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/dashboard
Context preview
The summary Claude sees to decide when to auto-load this skill.
Use this skill when contributing to InsForge's shared dashboard package. This is for maintainers editing `packages/dashboard`, which ships in `self-hosting` and `cloud-hosting` modes, and the local `frontend/` shell used for `self-hosting` in this repo.
SKILL.md
dashboard.SKILL.mdname: dashboard
description: Use this skill when contributing to InsForge's shared dashboard package. This is for maintainers editing `packages/dashboard`, which ships in `self-hosting` and `cloud-hosting` modes, and the local `frontend/` shell used for `self-hosting` in this repo.
InsForge Dev Dashboard
Use this skill for dashboard work in the InsForge repository.
Scope
- `packages/dashboard/src/**`
- `packages/dashboard/package.json`
- `packages/dashboard/README.md`
- `packages/dashboard/*.config.*`
- `frontend/src/**`
- `frontend/package.json`
Working Rules
1. Respect the shared-package versus host-app boundary.
- This dashboard is built with React and TypeScript.
- `packages/dashboard/` is the source of truth for the dashboard product.
- The package must support both `self-hosting` and `cloud-hosting` modes.
- Keep self-hosting-only bootstrap, local env defaults, and shell styling in `frontend/`.
- Do not let `packages/dashboard/` depend on `frontend/`.
- If both modes need a capability, define it in the package API first.
2. Preserve dashboard data-flow conventions.
- Follow the flow `service -> hook -> UI`.
- Use `apiClient` for HTTP calls so auth refresh and error handling stay consistent.
- Put request logic in services, data fetching and mutation state in hooks, and rendering/orchestration in UI components and pages.
- Reuse existing contexts, host abstractions, and hooks before creating new global state.
3. Reuse the existing component layers.
- Use `@insforge/ui` for generic primitives.
- Use shared dashboard components when the pattern is already present.
- Keep reusable dashboard UI in `packages/dashboard/`.
- Only add UI to `frontend/` when it is specific to the local self-hosting shell.
- Keep package styles scoped to the dashboard container.
4. Keep the package surface aligned with shared contracts.
- Import cross-package types and Zod-derived shapes from `@insforge/shared-schemas`.
- When backend payloads change, update the related services, hooks, UI, and exported types together.
- Keep `packages/dashboard/src/index.ts` and `packages/dashboard/src/types` aligned with the public package API.
- Never use the TypeScript `any` type. Prefer precise prop, state, API, and hook result types.
Frontend Testing
Use the lowest test layer that covers the risk. Add one focused regression test for bug fixes when practical.
| Change type | Test layer | Location | Command | | --- | --- | --- | --- | | Pure helper, parser, formatter, state reducer | Unit | `packages/dashboard/src/**/__tests__/*.test.ts` | `npm --workspace @insforge/dashboard run test:unit` | | React component behavior, forms, dialogs, conditional rendering | Component | `packages/dashboard/src/**/__tests__/*.test.tsx` | `npm --workspace @insforge/dashboard run test:component` | | Routing, auth redirects, host-mode integration, browser-only behavior | UI smoke | `packages/dashboard/tests/ui/*.spec.ts` | `npm --workspace @insforge/dashboard run test:ui` |
Conventions:
- `npm --workspace @insforge/dashboard run test` runs the full Vitest suite: unit plus component.
- GitHub Actions splits dashboard checks into unit, component, and UI jobs in `.github/workflows/frontend-tests.yml`. Update the workflow when adding or renaming test scripts.
- Unit tests should avoid React rendering and network mocking. Test data transformations directly.
- Component tests use Testing Library with `packages/dashboard/src/test/setup.ts`. Mock hooks, services, and host context at the package boundary; assert user-visible behavior and callback effects, not implementation details or CSS class strings.
- UI smoke tests use Playwright against the local `frontend/` shell. Mock backend API routes in `packages/dashboard/tests/ui/fixtures/`; every mocked route must either fulfill, fallback, or abort. Do not leave requests pending after a test branch.
- Prefer one clear test per user-observable behavior over broad snapshot tests. Avoid brittle assertions tied to copy that is not part of the behavior being protected.
Local debug: viewing cloud-hosting-only UI in self-hosting
**Use when** previewing UI gated on `useIsCloudHostingMode()`, `isInsForgeCloudProject()`, or a PostHog feature flag (e.g. the CTest dashboard variant, `dashboard-v3-experiment === 'c_test'`, the CLI connect panel) while running the local `frontend/` self-hosting shell.
The lowest-friction approach is to **temporarily hardcode** the three gates below to `true`/the new branch, then restart the Vite dev server. These edits bypass real host/project detection and MUST be fully reverted before committing — landing them breaks both self-hosting and cloud-hosting users.
Hardcodes
1. `packages/dashboard/src/lib/config/DashboardHostContext.tsx` — `useIsCloudHostingMode()` → `return true;` (was `useDashboardHost().mode === 'cloud-hosting'`). 2. `packages/dashboard/src/lib/utils/utils.ts` — `isInsForgeCloudProject()` → `return true;` (was the `.insforge.app` hostname check). 3. If the UI is also feature-flag-gated, hardcode the consumer. For CTest: `AppRoutes.tsx` → `const DashboardHomePage = CTestDashboardPage;` and, if relevant, the matching branch in `AppLayout.tsx` for `<ConnectDialogV2>`.
Mark every hardcode with a trailing `// LOCAL DEBUG: <original expression>` comment so revert is a mechanical search.
Revert checklist — run all before committing
1. `git grep -n "LOCAL DEBUG" packages/dashboard/src/` returns zero matches. 2. Each gate is restored to its **original expression**, not just an equivalent value (the `mode === 'cloud-hosting'` comparison, the hostname check, the `getFeatureFlag(...)` call must all be back). 3. Any imports deleted during debug (commonly `DashboardPage`, `getFeatureFlag`, `ConnectDialog`) are restored. 4. `cd packages/dashboard && npm run lint && npm run typecheck` both pass. 5. `git diff` of the four files above shows only intended changes — no `return tru
Read more
name: dashboard description: Use this skill when contributing to InsForge's shared dashboard package. This is for maintainers editing `packages/dashboard`, which ships in `self-hosting` and `cloud-hosting` modes, and the local `frontend/` shell used for `self-hosting` in this repo.
InsForge Dev Dashboard
Use this skill for dashboard work in the InsForge repository.
Scope
- `packages/dashboard/src/**`
- `packages/dashboard/package.json`
- `packages/dashboard/README.md`
- `packages/dashboard/*.config.*`
- `frontend/src/**`
- `frontend/package.json`
Working Rules
1. Respect the shared-package versus host-app boundary.
- This dashboard is built with React and TypeScript.
- `packages/dashboard/` is the source of truth for the dashboard product.
- The package must support both `self-hosting` and `cloud-hosting` modes.
- Keep self-hosting-only bootstrap, local env defaults, and shell styling in `frontend/`.
- Do not let `packages/dashboard/` depend on `frontend/`.
- If both modes need a capability, define it in the package API first.
2. Preserve dashboard data-flow conventions.
- Follow the flow `service -> hook -> UI`.
- Use `apiClient` for HTTP calls so auth refresh and error handling stay consistent.
- Put request logic in services, data fetching and mutation state in hooks, and rendering/orchestration in UI components and pages.
- Reuse existing contexts, host abstractions, and hooks before creating new global state.
3. Reuse the existing component layers.
- Use `@insforge/ui` for generic primitives.
- Use shared dashboard components when the pattern is already present.
- Keep reusable dashboard UI in `packages/dashboard/`.
- Only add UI to `frontend/` when it is specific to the local self-hosting shell.
- Keep package styles scoped to the dashboard container.
4. Keep the package surface aligned with shared contracts.
- Import cross-package types and Zod-derived shapes from `@insforge/shared-schemas`.
- When backend payloads change, update the related services, hooks, UI, and exported types together.
- Keep `packages/dashboard/src/index.ts` and `packages/dashboard/src/types` aligned with the public package API.
- Never use the TypeScript `any` type. Prefer precise prop, state, API, and hook result types.
Frontend Testing
Use the lowest test layer that covers the risk. Add one focused regression test for bug fixes when practical.
| Change type | Test layer | Location | Command | | --- | --- | --- | --- | | Pure helper, parser, formatter, state reducer | Unit | `packages/dashboard/src/**/__tests__/*.test.ts` | `npm --workspace @insforge/dashboard run test:unit` | | React component behavior, forms, dialogs, conditional rendering | Component | `packages/dashboard/src/**/__tests__/*.test.tsx` | `npm --workspace @insforge/dashboard run test:component` | | Routing, auth redirects, host-mode integration, browser-only behavior | UI smoke | `packages/dashboard/tests/ui/*.spec.ts` | `npm --workspace @insforge/dashboard run test:ui` |
Conventions:
- `npm --workspace @insforge/dashboard run test` runs the full Vitest suite: unit plus component.
- GitHub Actions splits dashboard checks into unit, component, and UI jobs in `.github/workflows/frontend-tests.yml`. Update the workflow when adding or renaming test scripts.
- Unit tests should avoid React rendering and network mocking. Test data transformations directly.
- Component tests use Testing Library with `packages/dashboard/src/test/setup.ts`. Mock hooks, services, and host context at the package boundary; assert user-visible behavior and callback effects, not implementation details or CSS class strings.
- UI smoke tests use Playwright against the local `frontend/` shell. Mock backend API routes in `packages/dashboard/tests/ui/fixtures/`; every mocked route must either fulfill, fallback, or abort. Do not leave requests pending after a test branch.
- Prefer one clear test per user-observable behavior over broad snapshot tests. Avoid brittle assertions tied to copy that is not part of the behavior being protected.
Local debug: viewing cloud-hosting-only UI in self-hosting
**Use when** previewing UI gated on `useIsCloudHostingMode()`, `isInsForgeCloudProject()`, or a PostHog feature flag (e.g. the CTest dashboard variant, `dashboard-v3-experiment === 'c_test'`, the CLI connect panel) while running the local `frontend/` self-hosting shell.
The lowest-friction approach is to **temporarily hardcode** the three gates below to `true`/the new branch, then restart the Vite dev server. These edits bypass real host/project detection and MUST be fully reverted before committing — landing them breaks both self-hosting and cloud-hosting users.
Hardcodes
1. `packages/dashboard/src/lib/config/DashboardHostContext.tsx` — `useIsCloudHostingMode()` → `return true;` (was `useDashboardHost().mode === 'cloud-hosting'`). 2. `packages/dashboard/src/lib/utils/utils.ts` — `isInsForgeCloudProject()` → `return true;` (was the `.insforge.app` hostname check). 3. If the UI is also feature-flag-gated, hardcode the consumer. For CTest: `AppRoutes.tsx` → `const DashboardHomePage = CTestDashboardPage;` and, if relevant, the matching branch in `AppLayout.tsx` for `<ConnectDialogV2>`.
Mark every hardcode with a trailing `// LOCAL DEBUG: <original expression>` comment so revert is a mechanical search.
Revert checklist — run all before committing
1. `git grep -n "LOCAL DEBUG" packages/dashboard/src/` returns zero matches. 2. Each gate is restored to its **original expression**, not just an equivalent value (the `mode === 'cloud-hosting'` comparison, the hostname check, the `getFeatureFlag(...)` call must all be back). 3. Any imports deleted during debug (commonly `DashboardPage`, `getFeatureFlag`, `ConnectDialog`) are restored. 4. `cd packages/dashboard && npm run lint && npm run typecheck` both pass. 5. `git diff` of the four files above shows only intended changes — no `return tru
The all-in-one, open-source backend platform for agentic coding. InsForge gives your coding agent database, auth, storage, compute, hosting, and AI gateway to ship full-stack apps end-to-end.
Repo: InsForge/InsForge
Other skills on insforge.
- /doc-author
Write, edit, and maintain documentation. Use for collaborative drafting, autonomous writing, or improving existing docs. Defaults to collaborative mode where the human makes final decisions. Built by Mintlify.
Open skill - /insforge-dev
Use this skill set when contributing to the InsForge monorepo itself. This is for InsForge maintainers and contributors editing the platform, the shared dashboard package, the self-hosting shell, the UI library, shared schemas, tests, or docs.
Open skill - /backend
Use this skill when contributing to InsForge's backend package. This is for maintainers editing backend routes, services, providers, auth, database logic (including RLS-enforced surfaces like storage and realtime), schedules, or backend tests in the InsForge monorepo.
Open skill - /docs
Use this skill when contributing to InsForge's product documentation in this repository. This is for maintainers editing public docs in `docs/core-concepts`, agent docs in `.agents/docs`, SDK integration guides in `docs/sdks`, and OpenAPI specs in `openapi`.
Open skill - /e2e-testing
Use this skill when an InsForge maintainer has finished an OSS repo change and is ready to open, update, or submit the InsForge PR. Runs the release-quality deterministic E2E gate by building a package.json-derived InsForge test image tag, deciding whether sibling agent-e2e
Open skill - /shared-schemas
Use this skill when contributing to InsForge's shared schema package. This is for maintainers editing published Zod contracts, exported types, and shared API payload definitions consumed by InsForge packages in this repo and other InsForge tooling.
Open skill

