feat(ui): add web UI with Jinja2 templates and Gitea themes
- Add Jinja2 templates with data-testid attributes for testing - Create light/dark themes based on Gitea color scheme - Add theme switching with localStorage persistence - Create base CSS, components, and layout styles - Add mock web routes for UI demonstration - Register web router and static files in main.py - Add data-testid requirements to AGENTS.md - Install jinja2 dependency
This commit is contained in:
50
AGENTS.md
50
AGENTS.md
@@ -186,7 +186,55 @@ Use the following sections as appropriate:
|
||||
- `Attributes` - For class attributes
|
||||
- `See Also` - References to related code
|
||||
|
||||
## DDD Concepts Used
|
||||
## UI Development Requirements
|
||||
|
||||
### HTML Templates (Jinja2)
|
||||
- All HTML templates use **Jinja2** templating engine
|
||||
- Templates are located in `app/presentation/templates/`
|
||||
- Base template: `base.html` with theme support (light/dark)
|
||||
|
||||
### data-testid Attributes (REQUIRED)
|
||||
**Every interactive and significant HTML element MUST have a `data-testid` attribute** for automated testing.
|
||||
|
||||
#### Required Elements:
|
||||
- **Navigation**: `data-testid="nav-link-{name}"`, `data-testid="nav-logo"`
|
||||
- **Buttons**: `data-testid="btn-{action}"` (e.g., `btn-create`, `btn-save`, `btn-delete`)
|
||||
- **Forms**: `data-testid="form-{name}"`, `data-testid="input-{field}"`, `data-testid="submit-{action}"`
|
||||
- **Cards/Posts**: `data-testid="post-card-{id}"`, `data-testid="post-title"`, `data-testid="post-content"`
|
||||
- **Lists**: `data-testid="list-{name}"`, `data-testid="list-item-{index}"`
|
||||
- **Theme Switcher**: `data-testid="theme-toggle"`, `data-testid="theme-{light|dark}"`
|
||||
- **Messages/Alerts**: `data-testid="alert-{type}"`, `data-testid="alert-message"
|
||||
|
||||
#### Example:
|
||||
```html
|
||||
<button data-testid="btn-create-post" class="btn btn-primary">
|
||||
Create Post
|
||||
</button>
|
||||
|
||||
<article data-testid="post-card-{{ post.id }}" class="card">
|
||||
<h2 data-testid="post-title">{{ post.title }}</h2>
|
||||
<p data-testid="post-content">{{ post.content }}</p>
|
||||
</article>
|
||||
```
|
||||
|
||||
### CSS Architecture (Gitea-inspired)
|
||||
- **Theme files**: `static/css/themes/theme-{light|dark}.css` with CSS variables
|
||||
- **Base styles**: `static/css/base.css` - reset, typography, CSS variables usage
|
||||
- **Components**: `static/css/components.css` - buttons, cards, forms, inputs
|
||||
- **Layout**: `static/css/layout.css` - grid, navigation, containers
|
||||
|
||||
### Theme Support
|
||||
- Light and dark themes based on Gitea color scheme
|
||||
- Theme switching via `data-theme` attribute on `<html>` element
|
||||
- LocalStorage persistence for user preference
|
||||
- All colors use CSS custom properties (variables)
|
||||
|
||||
### Static Assets
|
||||
- **All assets are local** - no external CDN dependencies
|
||||
- Location: `static/` directory at project root
|
||||
- Served via FastAPI `StaticFiles` middleware
|
||||
|
||||
### DDD Concepts Used
|
||||
|
||||
### Entities
|
||||
- Have identity (UUID)
|
||||
|
||||
Reference in New Issue
Block a user