mirror of
https://github.com/elisiariocouto/leggen.git
synced 2025-12-13 09:02:23 +00:00
142 lines
6.2 KiB
Markdown
142 lines
6.2 KiB
Markdown
# Agent Guidelines for Leggen
|
|
|
|
## Quick Setup for Development
|
|
|
|
### Prerequisites
|
|
- **uv** must be installed for Python dependency management (can be installed via `pip install uv`)
|
|
- **Configuration file**: Copy `config.example.toml` to `config.toml` before running any commands:
|
|
```bash
|
|
cp config.example.toml config.toml
|
|
```
|
|
|
|
### Generate Mock Database
|
|
The leggen CLI provides a command to generate a mock database for testing:
|
|
|
|
```bash
|
|
# Generate sample database with default settings (3 accounts, 50 transactions each)
|
|
uv run leggen --config config.toml generate_sample_db --database /path/to/test.db --force
|
|
|
|
# Custom configuration
|
|
uv run leggen --config config.toml generate_sample_db --database ./test-data.db --accounts 5 --transactions 100 --force
|
|
```
|
|
|
|
The command outputs instructions for setting the required environment variable to use the generated database.
|
|
|
|
### Start the API Server
|
|
1. Install uv if not already installed: `pip install uv`
|
|
2. Set the database environment variable to point to your generated mock database:
|
|
```bash
|
|
export LEGGEN_DATABASE_PATH=/path/to/your/generated/database.db
|
|
```
|
|
3. Ensure the API can find the configuration file (choose one):
|
|
```bash
|
|
# Option 1: Copy config to the expected location
|
|
mkdir -p ~/.config/leggen && cp config.toml ~/.config/leggen/config.toml
|
|
|
|
# Option 2: Set environment variable to current config file
|
|
export LEGGEN_CONFIG_FILE=./config.toml
|
|
```
|
|
4. Start the API server:
|
|
```bash
|
|
uv run leggen server
|
|
```
|
|
- For development mode with auto-reload: `uv run leggen server --reload`
|
|
- API will be available at `http://localhost:8000` with docs at `http://localhost:8000/api/v1/docs`
|
|
|
|
### Start the Frontend
|
|
1. Navigate to the frontend directory: `cd frontend`
|
|
2. Install npm dependencies: `npm install`
|
|
3. Start the development server: `npm run dev`
|
|
- Frontend will be available at `http://localhost:3000`
|
|
- The frontend is configured to connect to the API at `http://localhost:8000/api/v1`
|
|
|
|
## Build/Lint/Test Commands
|
|
|
|
### Frontend (React/TypeScript)
|
|
- **Dev server**: `cd frontend && npm run dev`
|
|
- **Build**: `cd frontend && npm run build`
|
|
- **Lint**: `cd frontend && npm run lint`
|
|
|
|
### Backend (Python)
|
|
- **Lint**: `uv run ruff check .`
|
|
- **Format**: `uv run ruff format .`
|
|
- **Type check**: `uv run mypy leggen --check-untyped-defs`
|
|
- **All checks**: `uv run pre-commit run --all-files`
|
|
- **Run all tests**: `uv run pytest`
|
|
- **Run single test**: `uv run pytest tests/unit/test_api_accounts.py::TestAccountsAPI::test_get_all_accounts_success -v`
|
|
- **Run tests by marker**: `uv run pytest -m "api"` or `uv run pytest -m "unit"`
|
|
|
|
## Code Style Guidelines
|
|
|
|
### Python
|
|
- **Imports**: Standard library → Third-party → Local (blank lines between groups)
|
|
- **Naming**: snake_case for variables/functions, PascalCase for classes
|
|
- **Types**: Use type hints for all function parameters and return values
|
|
- **Error handling**: Use specific exceptions, loguru for logging
|
|
- **Path handling**: Use `pathlib.Path` instead of `os.path`
|
|
- **CLI**: Use Click framework with proper option decorators
|
|
|
|
### TypeScript/React
|
|
- **Imports**: React hooks first, then third-party, then local components/types
|
|
- **Naming**: PascalCase for components, camelCase for variables/functions
|
|
- **Types**: Use `import type` for type-only imports, define interfaces/types
|
|
- **Styling**: Tailwind CSS with `clsx` utility for conditional classes
|
|
- **UI Components**: shadcn/ui components for consistent design system
|
|
- **Icons**: lucide-react with consistent naming
|
|
- **Data fetching**: @tanstack/react-query with proper error handling
|
|
- **Components**: Functional components with hooks, proper TypeScript typing
|
|
|
|
## Frontend Structure
|
|
|
|
### Layout Architecture
|
|
- **Root Layout**: `frontend/src/routes/__root.tsx` - Contains main app structure with Sidebar and Header
|
|
- **Header/Navbar**: `frontend/src/components/Header.tsx` - Top navigation bar (sticky on mobile only)
|
|
- **Sidebar**: `frontend/src/components/Sidebar.tsx` - Left navigation sidebar
|
|
- **Routes**: `frontend/src/routes/` - TanStack Router file-based routing
|
|
|
|
### Key Components Location
|
|
- **UI Components**: `frontend/src/components/ui/` - shadcn/ui components and reusable UI primitives
|
|
- **Feature Components**: `frontend/src/components/` - Main app components
|
|
- **Pages**: `frontend/src/routes/` - Route components (index.tsx, transactions.tsx, etc.)
|
|
- **Hooks**: `frontend/src/hooks/` - Custom React hooks
|
|
- **API**: `frontend/src/lib/api.ts` - API client configuration
|
|
- **Context**: `frontend/src/contexts/` - React contexts (ThemeContext, etc.)
|
|
|
|
### Routing Structure
|
|
- `/` - Overview/Dashboard (TransactionsTable component)
|
|
- `/transactions` - Transactions page
|
|
- `/analytics` - Analytics page
|
|
- `/notifications` - Notifications page
|
|
- `/settings` - Settings page
|
|
|
|
### General
|
|
- **Formatting**: ruff for Python, ESLint for TypeScript
|
|
- **Commits**: Use conventional commits with optional scopes, run pre-commit hooks before pushing
|
|
- Format: `type(scope): Description starting with uppercase and ending with period.`
|
|
- Scopes: `cli`, `api`, `frontend` (optional)
|
|
- Types: `feat`, `fix`, `refactor` (avoid too many different types)
|
|
- Examples:
|
|
- `feat(frontend): Add support for S3 backups.`
|
|
- `fix(api): Resolve authentication timeout issues.`
|
|
- `refactor(cli): Improve error handling for missing config.`
|
|
- Avoid including specific numbers, counts, or data-dependent information that may become outdated
|
|
- **Security**: Never log sensitive data, use environment variables for secrets
|
|
|
|
## AI Development Support
|
|
|
|
### shadcn/ui Integration
|
|
This project uses shadcn/ui for consistent UI components. The MCP server is configured for AI agents to:
|
|
- Search and browse available shadcn/ui components
|
|
- View component implementation details and examples
|
|
- Generate proper installation commands for new components
|
|
|
|
Use the shadcn MCP tools when working with UI components to ensure consistency with the existing design system.
|
|
|
|
## Contributing Guidelines
|
|
|
|
This repository follows conventional changelog practices. Refer to `CONTRIBUTING.md` for detailed contribution guidelines including:
|
|
- Commit message format and scoping
|
|
- Release process using `scripts/release.sh`
|
|
- Pre-commit hooks setup with `pre-commit install`
|
|
- When the pre-commit fails, the commit is canceled
|