@jeffrey2423/coding-standards 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,400 @@
1
+ # Technical Preferences - UX Configuration
2
+
3
+ ## Project Setup Configuration
4
+ Based on Frontend Development Standards and Clean Architecture Implementation
5
+
6
+ ### Technology Stack
7
+ - **Framework**: Vite 7+ with TanStack Router
8
+ - **Language**: TypeScript (strict mode)
9
+ - **Styling**: TailwindCSS + Shadcn/ui + Radix UI
10
+ - **State Management**: Zustand + TanStack Query
11
+ - **Testing**: Vitest + React Testing Library
12
+ - **Architecture**: Clean Architecture with DDD patterns
13
+ - **Loading States**: React Loading Skeleton (for placeholders/preloading)
14
+
15
+ ### Resources
16
+ Project assets are centralized in the [resources/](../../../resources/) directory at the root level:
17
+
18
+ ```
19
+ resources/
20
+ ├── fonts/ # Inter font family files
21
+ └── images/ # Brand assets, logos, and graphics
22
+ ```
23
+
24
+ **Usage**:
25
+ - Reference fonts from `@/resources/fonts/`
26
+ - Reference images from `@/resources/images/`
27
+ - Logo assets available in `resources/images/logos/`
28
+
29
+ ---
30
+
31
+
32
+ ## Design System Foundation
33
+
34
+ ### Color Palette
35
+
36
+ #### Primary Colors (Brand)
37
+ ```css
38
+ :root {
39
+ /* Primary Color: #0E79FD */
40
+ --color-primary-50: #eff8ff;
41
+ --color-primary-100: #dbf0ff;
42
+ --color-primary-200: #bfe3ff;
43
+ --color-primary-300: #93d2ff;
44
+ --color-primary-400: #60b6ff;
45
+ --color-primary-500: #0E79FD; /* Main Primary Color */
46
+ --color-primary-600: #0b6ae6;
47
+ --color-primary-700: #0959c2;
48
+ --color-primary-800: #0e4a9e;
49
+ --color-primary-900: #123f80;
50
+ --color-primary-950: #11274d;
51
+ }
52
+ ```
53
+
54
+ #### Secondary Colors (Brand)
55
+ ```css
56
+ :root {
57
+ /* Secondary Color: #000000 (Black) - Brand Secondary, NOT for grays/backgrounds */
58
+ --color-secondary-50: #f8f8f8;
59
+ --color-secondary-100: #f0f0f0;
60
+ --color-secondary-200: #e4e4e4;
61
+ --color-secondary-300: #d1d1d1;
62
+ --color-secondary-400: #b4b4b4;
63
+ --color-secondary-500: #9a9a9a;
64
+ --color-secondary-600: #818181;
65
+ --color-secondary-700: #6a6a6a;
66
+ --color-secondary-800: #5a5a5a;
67
+ --color-secondary-900: #4e4e4e;
68
+ --color-secondary-950: #000000; /* Main Secondary Color */
69
+ }
70
+ ```
71
+
72
+ #### Tertiary Colors (Brand)
73
+ ```css
74
+ :root {
75
+ /* Tertiary Color: #154ca9 */
76
+ --color-tertiary-50: #eff6ff;
77
+ --color-tertiary-100: #dbeafe;
78
+ --color-tertiary-200: #bfdbfe;
79
+ --color-tertiary-300: #93c5fd;
80
+ --color-tertiary-400: #60a5fa;
81
+ --color-tertiary-500: #3b82f6;
82
+ --color-tertiary-600: #2563eb;
83
+ --color-tertiary-700: #154ca9; /* Main Tertiary Color */
84
+ --color-tertiary-800: #1e3a8a;
85
+ --color-tertiary-900: #1e3a8a;
86
+ --color-tertiary-950: #172554;
87
+ }
88
+ ```
89
+
90
+ #### Semantic Colors & Usage Guidelines
91
+ ```css
92
+ :root {
93
+ /* Use Tailwind default semantic colors */
94
+ /* Success: theme('colors.green.500') | Warning: theme('colors.amber.500') */
95
+ /* Error: theme('colors.red.500') | Info: theme('colors.cyan.500') */
96
+ /* Neutrals: theme('colors.slate.*') - NOT secondary brand colors */
97
+ }
98
+ ```
99
+
100
+ ```yaml
101
+ color_rules:
102
+ tailwind_first: "Use theme() for system colors"
103
+ brand_only: "Hex codes for brand colors (#0E79FD, #154ca9, #000000)"
104
+ css: "theme() in custom properties"
105
+ classes: "Direct utility classes (bg-slate-200)"
106
+ ```
107
+
108
+ #### Background & Surface Colors
109
+ ```css
110
+ :root {
111
+ /* Light Theme - Using Tailwind variables */
112
+ --color-background: theme('colors.white'); /* white */
113
+ --color-surface: theme('colors.slate.50'); /* slate-50 */
114
+ --color-surface-secondary: theme('colors.slate.100'); /* slate-100 */
115
+ --color-border: theme('colors.slate.200'); /* slate-200 */
116
+ --color-border-secondary: theme('colors.slate.300'); /* slate-300 */
117
+
118
+ /* Dark Theme Support - Using Tailwind variables */
119
+ --color-background-dark: theme('colors.slate.950'); /* slate-950 */
120
+ --color-surface-dark: theme('colors.slate.900'); /* slate-900 */
121
+ --color-surface-secondary-dark: theme('colors.slate.800'); /* slate-800 */
122
+ --color-border-dark: theme('colors.slate.700'); /* slate-700 */
123
+ --color-border-secondary-dark: theme('colors.slate.600'); /* slate-600 */
124
+
125
+ /* Note: Secondary brand color (#000000) is for brand elements, not backgrounds */
126
+ }
127
+ ```
128
+
129
+ ### Dark Mode Implementation
130
+
131
+ #### Configuration
132
+ ```yaml
133
+ dark_mode:
134
+ method: "class" # Tailwind class-based
135
+ selector: "html" # Root element
136
+ framework: "next-themes" # SSR-safe theme switching
137
+ default: "system" # Follow system preference
138
+ ```
139
+
140
+ #### Brand Colors Dark Mode Adaptation
141
+ ```css
142
+ .dark {
143
+ /* Primary - Enhanced contrast for dark backgrounds */
144
+ --color-primary-400: #60b6ff;
145
+ --color-primary-500: #3b9eff;
146
+ --color-primary-600: #0E79FD;
147
+
148
+ /* Secondary alternatives for dark mode visibility */
149
+ --color-secondary-alt-50: theme('colors.slate.50');
150
+ --color-secondary-alt-100: theme('colors.slate.200');
151
+ --color-secondary-alt-200: theme('colors.slate.300');
152
+
153
+ /* Tertiary - Optimized for dark mode */
154
+ --color-tertiary-400: #60a5fa;
155
+ --color-tertiary-500: #3b82f6;
156
+ --color-tertiary-600: #154ca9;
157
+ }
158
+ ```
159
+
160
+ #### Tailwind Classes for Dark Mode
161
+ ```yaml
162
+ text_colors:
163
+ primary: "text-gray-900 dark:text-gray-50"
164
+ secondary: "text-gray-700 dark:text-gray-300"
165
+ muted: "text-gray-500 dark:text-gray-400"
166
+ disabled: "text-gray-400 dark:text-gray-600"
167
+
168
+ brand_colors:
169
+ primary: "text-primary-600 dark:text-primary-400"
170
+ secondary: "text-secondary-950 dark:text-slate-50"
171
+ tertiary: "text-tertiary-700 dark:text-tertiary-400"
172
+
173
+ surfaces:
174
+ page: "bg-white dark:bg-slate-950"
175
+ card: "bg-slate-50 dark:bg-slate-900"
176
+ elevated: "bg-white dark:bg-slate-800"
177
+ input: "bg-white dark:bg-slate-900"
178
+
179
+ borders:
180
+ subtle: "border-slate-200 dark:border-slate-700"
181
+ prominent: "border-slate-300 dark:border-slate-600"
182
+ focus: "ring-primary-500 dark:ring-primary-400"
183
+
184
+ buttons:
185
+ primary: "bg-primary-500 text-white hover:bg-primary-600 dark:bg-primary-600 dark:hover:bg-primary-500"
186
+ secondary: "bg-slate-200 text-slate-900 hover:bg-slate-300 dark:bg-slate-700 dark:text-slate-100 dark:hover:bg-slate-600"
187
+ ghost: "text-slate-700 hover:bg-slate-100 dark:text-slate-300 dark:hover:bg-slate-800"
188
+
189
+ navigation:
190
+ navbar: "bg-white border-slate-200 dark:bg-slate-900 dark:border-slate-700"
191
+ sidebar: "bg-slate-50 border-slate-200 dark:bg-slate-900 dark:border-slate-700"
192
+ active: "bg-primary-50 text-primary-700 border-primary-200 dark:bg-primary-950 dark:text-primary-300 dark:border-primary-800"
193
+
194
+ feedback:
195
+ success: "bg-green-50 text-green-800 border-green-200 dark:bg-green-950 dark:text-green-300 dark:border-green-800"
196
+ warning: "bg-amber-50 text-amber-800 border-amber-200 dark:bg-amber-950 dark:text-amber-300 dark:border-amber-800"
197
+ error: "bg-red-50 text-red-800 border-red-200 dark:bg-red-950 dark:text-red-300 dark:border-red-800"
198
+ ```
199
+
200
+ #### Tailwind Configuration
201
+ ```javascript
202
+ // tailwind.config.js
203
+ module.exports = {
204
+ darkMode: 'class',
205
+ theme: {
206
+ extend: {
207
+ colors: {
208
+ primary: {
209
+ 50: '#eff8ff',
210
+ 100: '#dbf0ff',
211
+ 200: '#bfe3ff',
212
+ 300: '#93d2ff',
213
+ 400: '#60b6ff', // Enhanced for dark mode
214
+ 500: '#0E79FD', // Main brand color
215
+ 600: '#0b6ae6',
216
+ 700: '#0959c2',
217
+ 800: '#0e4a9e',
218
+ 900: '#123f80',
219
+ 950: '#11274d',
220
+ },
221
+ secondary: {
222
+ // Custom neutral scale for brand secondary
223
+ 50: '#f8f8f8',
224
+ 100: '#f0f0f0',
225
+ 200: '#e4e4e4',
226
+ 300: '#d1d1d1',
227
+ 400: '#b4b4b4',
228
+ 500: '#9a9a9a',
229
+ 600: '#818181',
230
+ 700: '#6a6a6a',
231
+ 800: '#5a5a5a',
232
+ 900: '#4e4e4e',
233
+ 950: '#000000', // Main secondary color
234
+ },
235
+ tertiary: {
236
+ // Keep original tertiary color scale as defined
237
+ 50: '#eff6ff',
238
+ 100: '#dbeafe',
239
+ 200: '#bfdbfe',
240
+ 300: '#93c5fd',
241
+ 400: '#60a5fa',
242
+ 500: '#3b82f6',
243
+ 600: '#2563eb',
244
+ 700: '#154ca9', // Main tertiary color (custom)
245
+ 800: '#1e3a8a',
246
+ 900: '#1e3a8a',
247
+ 950: '#172554',
248
+ }
249
+ }
250
+ }
251
+ }
252
+ }
253
+ ```
254
+
255
+ ### Typography System
256
+
257
+ #### Font Configuration
258
+ ```css
259
+ :root {
260
+ /* Brand Fonts - 3 weights available */
261
+ --font-primary: 'Inter_18pt-Regular', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
262
+ --font-light: 'Inter_18pt-Light', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
263
+ --font-bold: 'Inter_18pt-Bold', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
264
+ --font-mono: 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, 'Courier New', monospace;
265
+
266
+ /* Tailwind font weight mapping */
267
+ --font-weight-light: 300; /* Inter_18pt-Light */
268
+ --font-weight-normal: 400; /* Inter_18pt-Regular */
269
+ --font-weight-medium: 400; /* Inter_18pt-Regular */
270
+ --font-weight-semibold: 700; /* Inter_18pt-Bold */
271
+ --font-weight-bold: 700; /* Inter_18pt-Bold */
272
+ --font-weight-extrabold: 700; /* Inter_18pt-Bold */
273
+ --font-weight-black: 700; /* Inter_18pt-Bold */
274
+ }
275
+ ```
276
+
277
+ #### Typography Scale
278
+ ```yaml
279
+ typography:
280
+ headings:
281
+ h1: "text-4xl font-bold leading-tight"
282
+ h2: "text-3xl font-bold leading-tight"
283
+ h3: "text-2xl font-semibold leading-snug"
284
+ h4: "text-xl font-semibold leading-snug"
285
+ h5: "text-lg font-medium leading-normal"
286
+ h6: "text-base font-medium leading-normal"
287
+
288
+ body:
289
+ paragraph: "text-base font-normal leading-relaxed"
290
+ large: "text-lg font-normal leading-relaxed"
291
+ small: "text-sm font-normal leading-normal"
292
+ caption: "text-xs font-light leading-normal"
293
+
294
+ interactive:
295
+ label: "text-sm font-medium leading-normal"
296
+ button_primary: "text-base font-semibold leading-none"
297
+ button_secondary: "text-sm font-medium leading-none"
298
+ link: "text-base font-normal leading-normal"
299
+ link_emphasis: "text-base font-semibold leading-normal"
300
+
301
+ utility:
302
+ code: "text-sm font-normal leading-normal font-mono"
303
+ badge: "text-xs font-semibold leading-none"
304
+ tooltip: "text-sm font-normal leading-snug"
305
+ ```
306
+
307
+ ### Assets & Systems Configuration
308
+
309
+ #### Logo Assets
310
+
311
+ #### Icons
312
+ ```yaml
313
+ icons:
314
+ primary: "Heroicons"
315
+ secondary: "Font Awesome 6.5+"
316
+
317
+ sizes:
318
+ small: "w-4 h-4"
319
+ default: "w-5 h-5"
320
+ medium: "w-6 h-6"
321
+ large: "w-8 h-8"
322
+
323
+ colors:
324
+ inherit: "text-current"
325
+ primary: "text-primary-500"
326
+ secondary: "text-secondary-600"
327
+ neutral: "text-gray-500"
328
+ ```
329
+
330
+ #### Loading States
331
+ ```yaml
332
+ skeleton:
333
+ library: "react-loading-skeleton ^3.4.0"
334
+ theming:
335
+ light: "base: theme('colors.slate.200'), highlight: theme('colors.slate.100')"
336
+ dark: "base: theme('colors.slate.700'), highlight: theme('colors.slate.600')"
337
+ radius: "rounded-md"
338
+ duration: "1.5s"
339
+ ```
340
+
341
+ ---
342
+
343
+ ## Standards & Guidelines
344
+
345
+ ### Accessibility
346
+ ```yaml
347
+ accessibility:
348
+ color_contrast: "4.5:1 minimum (WCAG 2.1 AA)"
349
+ large_text_contrast: "3.1:1 minimum"
350
+ focus_indicators: "2px solid var(--color-primary-500)"
351
+ touch_targets: "44px minimum"
352
+ font_size_minimum: "16px"
353
+ line_length_maximum: "75ch"
354
+
355
+ requirements:
356
+ landmarks: true
357
+ headings: true
358
+ labels: true
359
+ alt_text: true
360
+ skip_links: true
361
+ ```
362
+
363
+ ### Performance Targets
364
+ ```yaml
365
+ bundle_limits:
366
+ initial: "< 500KB gzipped"
367
+ routes: "< 200KB gzipped"
368
+ components: "< 100KB gzipped"
369
+
370
+ metrics:
371
+ fcp: "< 1.5s"
372
+ lcp: "< 2.5s"
373
+ cls: "< 0.1"
374
+ tti: "< 3s"
375
+ ```
376
+
377
+ ### Architecture
378
+ ```yaml
379
+ components:
380
+ base: "Shadcn/ui from MCP registry"
381
+ composite: "Feature-specific compositions"
382
+ layout: "Page and section layouts"
383
+ utility: "Helpers and wrappers"
384
+
385
+ state_management:
386
+ global: "Authentication, theme, app settings"
387
+ feature: "Domain-specific data and UI state"
388
+ local: "Component-specific temporary state"
389
+ server: "API data with caching"
390
+
391
+ naming:
392
+ components: "PascalCase"
393
+ files: "kebab-case"
394
+ directories: "kebab-case"
395
+ assets: "kebab-case"
396
+ ```
397
+
398
+ ---
399
+
400
+ ## This configuration serves as the foundation for all UX decisions and component implementation.
@@ -0,0 +1,294 @@
1
+ # Technology Stack
2
+
3
+ ## Frontend Stack
4
+
5
+ ### Bundler & Dev Server
6
+ - **Vite 7+** with TypeScript
7
+ - Default bundler for all frontend projects
8
+ - Native ES modules for fast development
9
+ - Optimized for Module Federation (microfrontends)
10
+ - HMR (Hot Module Replacement) instantáneo
11
+
12
+ ### Router
13
+ - **TanStack Router 1+** (file-based routing)
14
+ - Type-safe routing with auto-generated route tree
15
+ - File-based routing with special prefixes (`_`, `.`, `-`, `$`)
16
+ - Automatic code-splitting per route
17
+ - Integrated with TanStack Query
18
+
19
+ ### State Management
20
+ - **Zustand 5+** (client state)
21
+ - Feature-based stores following DDD patterns
22
+ - Prepared for microfrontends (singleton stores)
23
+ - **TanStack Query 5+** (server state)
24
+ - Cache and synchronization
25
+ - Optimistic updates
26
+
27
+ ### UI Framework & Styling
28
+ - **shadcn/ui** (component library)
29
+ - **Radix UI** (primitives)
30
+ - **TailwindCSS v4** (styling)
31
+
32
+ ### Architecture
33
+ - **Clean Architecture** + **Domain-Driven Design (DDD)**
34
+ - **Module/Domain/Feature** structure for enterprise scale
35
+
36
+ ### Testing
37
+ - **Vitest** (test runner - native Vite integration)
38
+ - **React Testing Library** (component testing)
39
+ - **MSW** (Mock Service Worker - API mocking)
40
+
41
+ ### Forms & Validation
42
+ - **React Hook Form** (form management)
43
+ - **Zod** (schema validation)
44
+
45
+ ### HTTP Client
46
+ - **Axios** with interceptors
47
+
48
+ ### Progressive Web App (PWA)
49
+ - **vite-plugin-pwa** (PWA plugin for Vite)
50
+ - **Workbox** (service worker library)
51
+
52
+ ## Microfrontends Configuration
53
+
54
+ ### Module Federation Shared Dependencies
55
+
56
+ Para evitar dependencias duplicadas entre microfrontends:
57
+
58
+ ```typescript
59
+ // vite.config.ts - Host y cada Remote
60
+ import { federation } from '@module-federation/vite';
61
+
62
+ federation({
63
+ shared: {
64
+ react: { singleton: true, requiredVersion: '^18.3.0' },
65
+ 'react-dom': { singleton: true, requiredVersion: '^18.3.0' },
66
+ '@tanstack/react-router': { singleton: true, requiredVersion: '^1.95.0' },
67
+ '@tanstack/react-query': { singleton: true, requiredVersion: '^5.62.0' },
68
+ zustand: { singleton: true, requiredVersion: '^5.0.0' },
69
+ },
70
+ })
71
+ ```
72
+
73
+ | Configuración | Propósito |
74
+ |---------------|-----------|
75
+ | `singleton: true` | Garantiza una sola instancia en runtime |
76
+ | `requiredVersion: '^x.x.0'` | Rango semver para flexibilidad sin romper compatibilidad |
77
+
78
+ ## Core Principles
79
+
80
+ ### Clean Architecture First
81
+ Strict separation of:
82
+ - Domain layer
83
+ - Application layer
84
+ - Infrastructure layer
85
+ - Presentation layer
86
+
87
+ ### Domain-Driven Design
88
+ Business logic drives architecture decisions
89
+
90
+ ### Component Composition
91
+ Build complex UIs from simple, reusable components
92
+
93
+ ### Type Safety
94
+ Leverage TypeScript for compile-time safety and developer experience
95
+
96
+ ### Performance by Design
97
+ - Lazy loading (automatic with TanStack Router)
98
+ - Memoization
99
+ - Bundle optimization
100
+ - Singleton shared dependencies for microfrontends
101
+
102
+ ### Accessibility as Standard
103
+ WCAG 2.1 AA compliance in all components
104
+
105
+ ### Test-Driven Development
106
+ Unit tests for all use cases and components
107
+
108
+ ### Progressive Web App
109
+ Offline-first approach with service workers
110
+
111
+ ### Minimal and Functional
112
+ Only build what's explicitly requested, nothing more
113
+
114
+ ### User-Centered Design
115
+ Start with user needs and work backward to implementation
116
+
117
+ ### MCP Shadcn Available
118
+ Use MCP to install Shadcn components instead of creating manually
119
+
120
+ ## Backend Stack
121
+
122
+ ### Core Framework & Language
123
+ - **.NET 10**
124
+ - **C# Minimal API** - Lightweight and modern API approach
125
+ - **Entity Framework Core 10** - ORM for data access (matches .NET 10 version)
126
+ - **FluentValidation** - Validation for models and DTOs
127
+ - **linq2db** - Ultra-lightweight, high-performance ORM for complex optimized queries
128
+ - **DynamicLinq** - Dynamic query construction from strings (runtime filters)
129
+ - **LinqKit** - Composable and reusable LINQ expressions with type safety
130
+
131
+ ### ORM Strategy & When to Use Each Tool
132
+
133
+ #### Entity Framework Core 10 (Primary ORM)
134
+ **Use for:**
135
+ - Standard CRUD operations
136
+ - DDD entities with tracking (Aggregate Roots, Domain Events)
137
+ - Simple to moderate queries
138
+ - Queries that participate in aggregate lifecycle
139
+ - Navigation properties and relationships
140
+ - Change tracking scenarios
141
+
142
+ #### linq2db
143
+ **Ultra-lightweight ORM for maximum performance and SQL control**
144
+
145
+ ✔ **Use when:**
146
+ - Need highly optimized complex queries
147
+ - Advanced subqueries and complex projections
148
+ - Multiple joins with dynamic conditions
149
+ - Queries that EF Core cannot translate efficiently
150
+ - Endpoints require extreme performance:
151
+ - Dashboards
152
+ - Analytics
153
+ - Fast transactional reports
154
+ - High data volumes
155
+ - Microservice requires pure queries without tracking (linq2db operates naturally without tracking → faster)
156
+ - EF Core generates inefficient SQL and you need alternatives without changing stack
157
+ - Want SQL nearly as efficient as hand-written, but without explicit SQL
158
+
159
+ 🚫 **Do NOT use when:**
160
+ - Need complete DDD entities (aggregate roots, tracking, events)
161
+ - Query participates in aggregate lifecycle
162
+ - Only need simple filters or trivial pagination
163
+
164
+ #### DynamicLinq
165
+ **Dynamic query generation from strings for runtime filters**
166
+
167
+ ✔ **Use when:**
168
+ - Microservice offers dynamic filter system:
169
+ - Example: `?filter=Age > 30 AND Country == "CO"`
170
+ - Example: `?sort=Name desc`
171
+ - Building simplified OData-style API without using OData
172
+ - Generic queries over tables
173
+ - Variable column searches
174
+ - Data explorers or configurable grids
175
+ - Want to avoid manually generating Expression Trees (DynamicLinq is much simpler)
176
+
177
+ 🚫 **Do NOT use when:**
178
+ - Filters are fully controlled in code
179
+ - Don't want to interpret expressions at runtime
180
+ - Require strict security (DynamicLinq requires sanitization)
181
+ - Need maximum performance (use LinqKit or linq2db instead)
182
+
183
+ #### LinqKit
184
+ **Composable dynamic predicates with type safety**
185
+
186
+ ✔ **Use when:**
187
+ - Have complex business rules in queries
188
+ - Composable predicates example:
189
+ ```csharp
190
+ IsActive
191
+ RequiresApproval
192
+ BelongsToOrganization(user.OrgId)
193
+ ```
194
+ - Want dynamic filters with type safety (no strings → expressions)
195
+ - Combine multiple expressions in a single `Where()`:
196
+ - Especially useful in DDD repositories with:
197
+ - Multiple criteria
198
+ - Conditional searches
199
+ - Reusable queries
200
+ - Need EF Core to translate the resulting expression (LinqKit is 100% compatible with EF Core)
201
+ - Want to enhance EF Core when it fails to compose complex expressions
202
+
203
+ 🚫 **Do NOT use when:**
204
+ - Filters are extremely simple
205
+ - Query is highly dynamic and text-based (use DynamicLinq)
206
+ - Need maximum performance (use linq2db)
207
+
208
+ ### Architecture & Design Patterns
209
+ - **TDD (Test-Driven Development)** - Test-driven development approach
210
+ - **DDD (Domain-Driven Design)** - Domain-oriented design
211
+ - **Clean Architecture** - Clean architecture with layer separation
212
+ - **Microservices** - Distributed services architecture
213
+ - **REST API** - Primary communication protocol
214
+
215
+ ### Database & Data Management
216
+ - **PostgreSQL 18+** - Primary relational database (mandatory)
217
+ - **Database per Microservice** - Each microservice has its own isolated database
218
+ - **Primary Keys UUID** - Universal unique identifiers for all entities
219
+ - **EF Core 10 Migrations** - Entity Framework migrations package for schema version control
220
+
221
+ ### Testing
222
+ - **xUnit** - Unit and integration testing framework
223
+ - **EF Core 10 InMemory** - In-memory database for fast tests
224
+ - **PostgreSQL 18+ Test Containers** - PostgreSQL containers for real integration tests
225
+
226
+ ### Additional Libraries
227
+ - **QuestPDF** - PDF document generation
228
+ - **DynamicLinq** - Dynamic LINQ query construction
229
+ - **LinqKit** - LINQ expression composition
230
+
231
+ ### API Documentation
232
+ - **Scalar** - Modern API documentation (DO NOT use Swagger)
233
+
234
+ ### Infrastructure & DevOps
235
+ - **Docker Ready** - Containerized applications ready for deployment (production only)
236
+ - **Local Development** - Without Docker, direct execution with dotnet CLI
237
+ - **Multiculture** - Support for internationalization (i18n) and localization (l10n)
238
+
239
+ ## Backend Core Principles
240
+
241
+ ### Clean Architecture First
242
+ Strict separation of:
243
+ - Domain layer (Entities, Value Objects, Aggregates, Domain Services)
244
+ - Application layer (Commands, Queries, DTOs, Interfaces)
245
+ - Infrastructure layer (Repositories, EF Core, External Services)
246
+ - Presentation layer (Minimal API Endpoints)
247
+
248
+ ### Domain-Driven Design
249
+ Business logic drives architecture decisions
250
+
251
+ ### Test-Driven Development
252
+ - Write tests before or alongside implementation
253
+ - xUnit for all backend tests
254
+ - High test coverage requirement
255
+
256
+ ### Microservices Isolation
257
+ - Each service is independent
258
+ - Own PostgreSQL 18+ database per service
259
+ - No shared databases between services
260
+
261
+ ### UUID Primary Keys
262
+ All entities must use UUIDs (Guid in C#) as primary keys for distributed system compatibility
263
+
264
+ ### Type Safety
265
+ Leverage C# strong typing for compile-time safety
266
+
267
+ ### Security by Design
268
+ Implement security at every layer
269
+
270
+ ### Docker for Production Only
271
+ - Development: dotnet run locally
272
+ - Production: Docker containers
273
+
274
+ ## Version Summary
275
+
276
+ ### Frontend
277
+ | Technology | Version | Notes |
278
+ |------------|---------|-------|
279
+ | Vite | 6+ | Bundler, optimized for Module Federation |
280
+ | React | 18+ | Functional components, hooks |
281
+ | TypeScript | 5+ | Strict mode enabled |
282
+ | TanStack Router | 1+ | File-based, type-safe routing |
283
+ | TanStack Query | 5+ | Server state management |
284
+ | Zustand | 5+ | Client state management |
285
+ | TailwindCSS | 4+ | Utility-first CSS |
286
+ | Vitest | Latest | Native Vite test runner |
287
+
288
+ ### Backend
289
+ | Technology | Version | Notes |
290
+ |------------|---------|-------|
291
+ | .NET | 10 | LTS |
292
+ | Entity Framework Core | 10 | Matches .NET version |
293
+ | PostgreSQL | 18+ | Mandatory, one per microservice |
294
+ | xUnit | Latest | Testing framework |