Files
trackgo-fe/.agents/skills/project-guidelines-example/SKILL.md
T
shancheas 9e710a92b2 feat: introduce index layout skill for FULL_PAGE index/list tables
- Added a new skill for managing index and list table layouts in the ERP project, detailing layout and data contracts.
- Updated project guidelines to reference the new index layout skill.
- Introduced rules for page composition, column definitions, audit fields, action column width, and toolbar functionality.
- Created utility functions for computing action column width and formatting audit fields, along with corresponding unit tests to ensure reliability.

These changes enhance the application by providing a structured approach to index layouts, improving consistency and usability across the ERP project.
2026-08-27 11:06:00 +07:00

183 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: project-guidelines-example
description: Frontend monorepo guidelines for this pnpm + Turborepo React/Vite/Electron workspace. Use when scaffolding features, reviewing structure, or aligning code with this repo's conventions.
---
# Project Guidelines
Project skill for this frontend monorepo. Architecture, file layout, patterns, testing, and scripts as they exist in the repo today.
## When to Use
Reference this skill when working on this project. It contains:
- Architecture overview
- File structure
- Code patterns
- Testing requirements
- Related skills
---
## Architecture Overview
**Stack:**
- **Apps**: React 19 + Vite (`apps/web`, `apps/showcase`, `apps/landing`) + Electron (`apps/desktop`) + VitePress (`apps/docs-dev`)
- **Packages**: `@repo/ui` (Mantine), `@repo/core-api`, `@repo/core-storage`, `@repo/core-i18n`, `@repo/core-events`, `@repo/utils`, `@repo/brand`, `packages/configs`
- **Testing**: Vitest; Testing Library in `packages/ui` and `packages/core-events`
- **Package manager**: pnpm 8.15.6 + Turbo
**Where to work:** product in `apps/web`; copy UI/API usage from `apps/showcase`; concepts from `apps/docs-dev`. Do not invent a parallel UI kit.
---
## File Structure
```
.
├── apps/
│ ├── web/ # Product app
│ ├── showcase/ # Living cookbook for @repo/*
│ ├── docs-dev/ # VitePress
│ ├── desktop/ # Electron wrapper of apps/web
│ └── landing/ # Marketing SPA
├── packages/
│ ├── ui/ # @repo/ui — components, form, foundations
│ ├── core-api/ # HTTP client + remote data services
│ ├── core-storage/
│ ├── core-i18n/
│ ├── core-events/
│ ├── utils/
│ ├── brand/
│ └── configs/
└── package.json # Root scripts
```
### Web module (copy `example/full-page`)
```
apps/web/src/apps/main/modules/<group>/<feature>/
data/ # *RemoteDataServices
domain/
constants/ # ModuleConfigEntity
entities/
factories/ # apiClient + service + transformer
transformers/
validators/ # Zod factories
presentation/
factory/ # registerModuleNamespace + EnterpriseModuleProvider + routes
pages/ # index | form | detail
components/
store/ # optional zustand
languages/{en,id}/
```
Auth lives under `src/apps/auth/`. Shared-across-modules code lives in `src/core/`.
---
## Code Patterns
### Module config + factory
```typescript
import { ModuleConfigEntity } from '@repo/ui/foundations';
export const fullPageModuleConfig: ModuleConfigEntity = {
moduleKey: 'EXAMPLE_FULL_PAGE',
translationNamespace: 'EXAMPLE_FULL_PAGE',
apiUrl: '/full-page',
webUrl: '/app/example/full-page',
moduleCategory: 'FULL_PAGE',
moduleType: 'MASTER_DATA',
};
```
```tsx
import { EnterpriseModuleProvider } from '@repo/ui/foundations';
import { registerModuleNamespace } from '@repo/core-i18n';
import { apiClient } from '../../../../../../../core/lib/api-client';
registerModuleNamespace(fullPageModuleConfig.translationNamespace, { id, en });
```
### Validators (Zod)
```typescript
import { z } from 'zod';
import { compose, required, rangeLength } from '@repo/ui/validators';
export const createFullPageSchema = (t: (key: string) => string) =>
z.object({
code: compose(z.string(), required(t('common:fields.code'))),
name: compose(z.string(), required(t('common:fields.name')), rangeLength(3, 50, t('common:fields.name'))),
});
```
### Forms and HTTP
- Form fields: `FieldTextInput` and other `Field*` from `@repo/ui/form`
- HTTP: `apiClient` from `src/core/lib/api-client` (built with `createHttpClient`). Never raw axios.
- Env: `ENV` from `src/core/environment`. Files only in `apps/web/.env*`.
---
## Testing Requirements
```bash
pnpm test
pnpm --filter web test
pnpm --filter @repo/ui test
pnpm typecheck:web
pnpm check:all
```
- Unit tests colocated as `*.test.ts(x)`
- Component tests with Testing Library in packages that already have it
- App journeys: browser-verify login and FULL_PAGE index / form / detail
- Minimum 80% coverage; TDD (red → green → refactor)
---
## Scripts
```bash
pnpm dev:web
pnpm dev:showcase
pnpm dev:docs-dev
pnpm lint
pnpm typecheck:web
pnpm test
pnpm check:all
```
### Env (apps/web)
See `apps/web/.env.example`. Typical `VITE_*` keys: `VITE_APP_ENV`, `VITE_API_BASE_URL`, telemetry URLs. All `VITE_*` values are public to the client.
---
## Critical Rules
1. **No emojis** in code, comments, or documentation
2. **Immutability** — never mutate objects or arrays
3. **TDD** — tests before implementation
4. **80% coverage** minimum
5. **Many small files** — 200400 lines typical, 800 max
6. **No console.log** in production code
7. **No raw Mantine/axios** — use `@repo/ui` and `apiClient`
8. **Input validation** with Zod + `@repo/ui/validators`
9. Copy `example/full-page`; do not invent a third layout
---
## Related Skills
- `.agents/skills/coding-standards/` — TypeScript/React practices
- `.agents/skills/form-layout/` — form layout
- `.agents/skills/detail-layout/` — detail page layout
- `.agents/skills/index-layout/` — index / list table layout
- `.agents/skills/tdd-workflow/` — TDD
- `.agents/skills/security-review/` — frontend/Electron security