forked from cardosofelipe/pragma-stack
Add coverage ignore comments to defensive fallbacks and EventSource handlers that cannot be properly tested in JSDOM environment: - AgentTypeForm.tsx: Radix UI Select/Checkbox handlers, defensive fallbacks - AgentTypeDetail.tsx: Model name fallbacks, model params fallbacks - AgentTypeList.tsx: Short model ID fallback - StatusBadge.tsx: Invalid status/level fallbacks - useProjectEvents.ts: SSE reconnection logic, EventSource handlers These are all edge cases that are difficult to test in the JSDOM environment due to lack of proper EventSource and Radix UI portal support.
Syndarix - Frontend
Production-ready Next.js 16 frontend with TypeScript, authentication, admin panel, and internationalization.
Features
Core
- ⚡ Next.js 16 - App Router with React Server Components
- 📘 TypeScript - Full type safety
- 🎨 Tailwind CSS - Utility-first styling
- 🧩 shadcn/ui - High-quality component library
- 🌙 Dark Mode - System-aware theme switching
Authentication & Security
- 🔐 JWT Authentication - Access & refresh token flow
- 🔒 Protected Routes - Client-side route guards
- 👤 User Management - Profile settings, password change
- 📱 Session Management - Multi-device session tracking
Internationalization (i18n)
- 🌍 Multi-language Support - English & Italian (easily extensible)
- 🔗 Locale Routing - SEO-friendly URLs (
/en/login,/it/login) - 🎯 Type-safe Translations - TypeScript autocomplete for keys
- 📄 Localized Metadata - SEO-optimized meta tags per locale
- 🗺️ Multilingual Sitemap - Automatic sitemap generation with hreflang
Admin Panel
- 👥 User Administration - CRUD operations, search, filters
- 🏢 Organization Management - Multi-tenant support with roles
- 📊 Dashboard - Statistics and quick actions
- 🔍 Advanced Filtering - Status, search, pagination
Developer Experience
- ✅ Comprehensive Testing - 1,142+ unit tests, 178+ E2E tests
- 🎭 Playwright - End-to-end testing with fixtures
- 🧪 Jest - Fast unit testing with coverage
- 📝 ESLint & Prettier - Code quality enforcement
- 🔍 TypeScript - Strict mode enabled
Getting Started
Prerequisites
- Node.js 18+
- npm, yarn, or pnpm
Installation
# Install dependencies
npm install
# Run development server
npm run dev
Open http://localhost:3000 to view the app.
Environment Variables
Create a .env.local file:
NEXT_PUBLIC_API_URL=http://localhost:8000/api/v1
NEXT_PUBLIC_SITE_URL=http://localhost:3000
Scripts
# Development
npm run dev # Start dev server
npm run build # Production build
npm run start # Start production server
# Code Quality
npm run lint # Run ESLint
npm run format # Format with Prettier
npm run format:check # Check formatting
npm run type-check # TypeScript type checking
npm run validate # Run all checks (lint + format + type-check)
# Testing
npm test # Run unit tests
npm run test:watch # Watch mode
npm run test:coverage # Coverage report
npm run test:e2e # Run E2E tests
npm run test:e2e:ui # Playwright UI mode
# API Client
npm run generate:api # Generate TypeScript client from OpenAPI spec
Project Structure
frontend/
├── src/
│ ├── app/ # Next.js App Router
│ │ ├── [locale]/ # Locale-specific routes
│ │ │ ├── (auth)/ # Auth pages (login, register)
│ │ │ ├── (authenticated)/ # Protected pages
│ │ │ ├── admin/ # Admin panel
│ │ │ └── layout.tsx # Locale layout
│ │ ├── sitemap.ts # Multilingual sitemap
│ │ └── robots.ts # SEO robots.txt
│ ├── components/ # React components
│ │ ├── auth/ # Auth components
│ │ ├── admin/ # Admin components
│ │ ├── forms/ # Form utilities
│ │ ├── navigation/ # Navigation (Header, LocaleSwitcher)
│ │ └── ui/ # shadcn/ui components
│ ├── lib/ # Utilities & configuration
│ │ ├── api/ # API client (auto-generated)
│ │ ├── auth/ # Auth utilities & storage
│ │ ├── i18n/ # Internationalization
│ │ │ ├── routing.ts # Locale routing config
│ │ │ ├── utils.ts # Locale utilities
│ │ │ └── metadata.ts # SEO metadata helpers
│ │ └── stores/ # Zustand state management
│ └── hooks/ # Custom React hooks
├── messages/ # Translation files
│ ├── en.json # English
│ └── it.json # Italian
├── e2e/ # Playwright E2E tests
├── tests/ # Jest unit tests
├── docs/ # Documentation
│ ├── I18N.md # i18n guide
│ └── design-system/ # Design system docs
└── types/ # TypeScript type definitions
Internationalization (i18n)
The app supports multiple languages with SEO-optimized routing.
Supported Languages
- 🇬🇧 English (default)
- 🇮🇹 Italian
Usage
// Client components
import { useTranslations } from 'next-intl';
export function MyComponent() {
const t = useTranslations('namespace');
return <h1>{t('title')}</h1>;
}
// Server components
import { getTranslations } from 'next-intl/server';
export default async function Page() {
const t = await getTranslations('namespace');
return <h1>{t('title')}</h1>;
}
// Navigation (always use locale-aware routing)
import { Link, useRouter } from '@/lib/i18n/routing';
<Link href="/dashboard">Dashboard</Link> // → /en/dashboard
Adding New Languages
- Create translation file:
messages/fr.json - Update
src/lib/i18n/routing.ts: Add'fr'to locales - Update
src/lib/i18n/metadata.ts: Add'fr'to Locale type - Update
LocaleSwitchercomponent with locale name
See docs/I18N.md for complete guide.
Testing
Unit Tests (Jest)
# Run all tests
npm test
# Watch mode
npm run test:watch
# Coverage
npm run test:coverage
Coverage: 1,142+ tests covering components, hooks, utilities, and pages.
E2E Tests (Playwright)
# Run E2E tests
npm run test:e2e
# UI mode (recommended for debugging)
npm run test:e2e:ui
# Debug mode
npm run test:e2e:debug
Coverage: 178+ tests covering authentication, navigation, admin panel, and user flows.
Documentation
- Internationalization Guide - Complete i18n implementation guide
- Design System - Component library and patterns
- Implementation Plan - i18n implementation details
Tech Stack
- Framework: Next.js 16 (App Router)
- Language: TypeScript 5
- Styling: Tailwind CSS 3 + shadcn/ui
- State Management: Zustand + TanStack Query
- Forms: React Hook Form + Zod
- i18n: next-intl 4.5.3
- Testing: Jest + Playwright
- Code Quality: ESLint + Prettier
Performance
- ⚡ Server Components for optimal loading
- 🎨 Font optimization with
display: 'swap' - 📦 Code splitting with dynamic imports
- 🗜️ Automatic bundle optimization
- 🌐 Lazy loading of locale messages
- 🖼️ Image optimization with next/image
Browser Support
- Chrome (latest)
- Firefox (latest)
- Safari (latest)
- Edge (latest)
Contributing
- Follow existing code patterns
- Write tests for new features
- Run
npm run validatebefore committing - Keep translations in sync (en.json & it.json)
License
MIT License - see LICENSE file for details