149 lines
5.9 KiB
Plaintext
149 lines
5.9 KiB
Plaintext
---
|
|
description:
|
|
globs:
|
|
alwaysApply: true
|
|
---
|
|
# Tianji Project Cursor Rules
|
|
|
|
IMPORTANT: Do not operate my git to add or rm files at any time.
|
|
|
|
## Project Overview
|
|
|
|
**Tianji** is the project name - a proprietary monitoring and analytics platform. Always use "Tianji" (not "tianji" or other variations) when referring to the project in documentation, comments, and user-facing text.
|
|
|
|
## Project Structure (Monorepo)
|
|
|
|
This is a monorepo with the following structure:
|
|
|
|
```
|
|
tianji/
|
|
├── apps/ # Application packages
|
|
│ ├── appstore-review/ # App store review automation
|
|
│ ├── daily-ai-trigger/ # Daily AI trigger service
|
|
│ └── mcp-server/ # MCP server implementation
|
|
├── packages/ # Shared packages
|
|
│ ├── client-sdk/ # Client SDK for external integration
|
|
│ ├── react/ # React components sdk library
|
|
│ └── react-native/ # React Native sdk library
|
|
├── src/
|
|
│ ├── client/ # Frontend application (React)
|
|
│ │ ├── components/ # React components
|
|
│ │ │ └── ui/ # Shadcn/ui components
|
|
│ │ ├── routes/ # Application routes
|
|
│ │ ├── hooks/ # Custom React hooks
|
|
│ │ ├── store/ # State management
|
|
│ │ └── utils/ # Client utilities
|
|
│ ├── server/ # Backend application (Node.js)
|
|
│ │ ├── model/ # Database models and business logic
|
|
│ │ ├── router/ # Express routes
|
|
│ │ ├── trpc/ # tRPC API definitions
|
|
│ │ ├── middleware/ # Express middleware
|
|
│ │ └── utils/ # Server utilities
|
|
│ ├── shared/ # Shared code between client/server
|
|
│ └── tracker/ # Tracking library
|
|
├── website/ # Documentation website (Docusaurus)
|
|
├── geo/ # Geographic data
|
|
├── docker/ # Docker configurations
|
|
└── example/ # Example applications
|
|
├── expo/ # React Native example
|
|
└── web/ # Web example
|
|
```
|
|
|
|
## Component Usage Rules
|
|
|
|
### Priority Order for Components
|
|
|
|
1. **Shadcn/ui Components (Highest Priority)**
|
|
- Located in `src/client/components/ui/`
|
|
- Import as: `import { Button } from '@/components/ui/button'`
|
|
- These are the preferred components for new development
|
|
- Modern, accessible, and customizable
|
|
- Built with Radix UI primitives and Tailwind CSS
|
|
|
|
2. **Antd Components (Secondary)**
|
|
- Use only when Shadcn/ui doesn't provide equivalent functionality
|
|
- Import as: `import { Form, Input } from 'antd'`
|
|
- Good for complex form components and data display
|
|
|
|
### Available Shadcn/ui Components
|
|
|
|
Always check `src/client/components/ui/` directory first. Available components include:
|
|
|
|
- `alert`, `alert-dialog`, `avatar`, `badge`, `button`, `calendar`, `card`, `chart`
|
|
- `checkbox`, `collapsible`, `command`, `dialog`, `drawer`, `dropdown-menu`
|
|
- `form`, `input`, `label`, `menubar`, `popover`, `progress`, `radio-group`
|
|
- `resizable`, `scroll-area`, `select`, `separator`, `sheet`, `sonner`, `spinner`
|
|
- `switch`, `table`, `tabs`, `textarea`, `tooltip`
|
|
|
|
### Component Development Guidelines
|
|
|
|
1. **Use existing components** - Always check if a component already exists before creating new ones
|
|
2. **Shadcn/ui first** - Prefer Shadcn/ui components over Antd when possible
|
|
3. **Consistent styling** - Follow Tailwind CSS patterns used in existing components
|
|
4. **Accessibility** - Ensure all components are accessible (Shadcn/ui components include this by default)
|
|
5. **TypeScript** - All components must be properly typed
|
|
|
|
### Example Component Usage
|
|
|
|
```tsx
|
|
// ✅ Preferred - Using Shadcn/ui
|
|
import { Button } from '@/components/ui/button';
|
|
import { Dialog, DialogContent, DialogHeader } from '@/components/ui/dialog';
|
|
import { Form } from '@/components/ui/form';
|
|
|
|
// ✅ Acceptable - When Shadcn/ui doesn't have equivalent
|
|
import { Form, Input } from 'antd';
|
|
|
|
// ❌ Avoid - Don't mix when Shadcn/ui alternative exists
|
|
import { Button } from 'antd'; // Use Shadcn/ui Button instead
|
|
```
|
|
|
|
## Code Style Guidelines
|
|
|
|
### Naming Conventions
|
|
|
|
- **Project name**: Always use "Tianji" (capitalized)
|
|
- **Components**: PascalCase (e.g., `MonitorProvider`, `PushTokenForm`)
|
|
- **Files**: kebab-case for components (e.g., `push-monitor.tsx`)
|
|
- **Functions**: camelCase (e.g., `handleSubmit`, `validateForm`)
|
|
- **Constants**: SCREAMING_SNAKE_CASE (e.g., `API_BASE_URL`)
|
|
|
|
### Import Order
|
|
|
|
1. React and external libraries
|
|
2. Internal utilities and hooks
|
|
3. UI components (Shadcn/ui first, then Antd)
|
|
4. Types and interfaces
|
|
5. Relative imports
|
|
|
|
```tsx
|
|
import React from 'react';
|
|
import { useQuery } from '@tanstack/react-query';
|
|
|
|
import { useCurrentWorkspaceId } from '@/store/user';
|
|
import { trpc } from '@/api/trpc';
|
|
|
|
import { Button } from '@/components/ui/button';
|
|
import { Dialog } from '@/components/ui/dialog';
|
|
import { Form, Input } from 'antd';
|
|
|
|
import type { MonitorInfo } from './types';
|
|
```
|
|
|
|
### Language Usage
|
|
|
|
- **Comments**: Always in English
|
|
- **User-facing text**: Use i18n translation keys
|
|
- **Documentation**: English preferred
|
|
- **Console logs**: English for development messages
|
|
|
|
## API and Backend Guidelines
|
|
|
|
- Use **tRPC** for type-safe API calls
|
|
- Follow **Prisma** patterns for database operations
|
|
- Implement proper **error handling** and **validation**
|
|
- Use **zod** for schema validation
|
|
- Follow **OpenAPI** standards for public endpoints
|
|
|
|
This is a sophisticated, production-grade application with high standards for code quality, type safety, and user experience.
|