Latest commit

History

History
248 lines (204 loc) · 8.85 KB

File metadata and controls

248 lines (204 loc) · 8.85 KB

Architecture Documentation

This document describes the architectural decisions and patterns used in this TanStack Start example application.

🏗️ Overall Architecture

Technology Stack

  • Framework: TanStack Start (Full-stack React framework)
  • Routing: TanStack Router (File-based routing)
  • Data Management: TanStack Query (Server state management)
  • Build Tool: Vite (Fast build tool)
  • Styling: Tailwind CSS (Utility-first CSS)
  • Language: TypeScript (Type-safe JavaScript)

Architecture Pattern

The application follows a client-first, full-stack architecture where:

  • Routes are defined using file-based routing
  • Server-side rendering (SSR) is enabled by default
  • API routes are co-located with page routes
  • Type safety is maintained across client-server boundary

📁 File Structure Architecture

Route-Based Architecture

src/routes/
├── __root.tsx # Root layout and global providers
├── index.tsx # Home page route
├── dashboard.tsx # Dashboard layout with nested routes
├── dashboard.*.tsx # Dashboard sub-pages
├── posts/ # Posts feature routes
│ ├── posts.tsx # Posts layout
│ ├── posts.index.tsx # Posts listing
│ ├── posts.$postId.tsx # Individual post
│ └── posts.infinite.tsx # Infinite scroll example
├── users/ # Users feature routes
│ ├── users.tsx # Users layout
│ ├── users.index.tsx # Users listing
│ ├── users.$userId.tsx # User detail
│ └── users.$userId.edit.tsx # User editing
└── api/ # API routes
├── users.ts # Users API
└── users.$userId.ts # Individual user API

Component Architecture

src/components/
├── ui/ # Reusable UI components
├── DefaultCatchBoundary.tsx # Global error boundary
├── NotFound.tsx # 404 page component
├── auth-header.tsx # Authentication header
└── protected.tsx # Protected route wrapper

Utility Architecture

src/utils/
├── auth-context.tsx # Authentication context
├── auth.server.ts # Server-side auth utilities
├── *.server.ts # Server-only utilities
├── middleware.ts # Custom middleware
└── seo.ts # SEO utilities

🔒 Authentication Architecture

Context-Based Authentication

  • AuthProvider: React context providing authentication state
  • useAuth Hook: Custom hook for accessing auth state
  • Protected Routes: Routes wrapped with authentication checks
  • Server-Side Auth: Server utilities for authentication logic

Authentication Flow

  1. User attempts to access protected route
  2. RequireAuth component checks authentication status
  3. If not authenticated, redirect to login page
  4. After successful login, redirect to intended destination
  5. Auth state managed globally through React Context

🔄 Data Management Architecture

TanStack Query Integration

  • Query Client: Centralized query client for data management
  • Server State: External data managed by TanStack Query
  • Cache Management: Intelligent caching and invalidation
  • Optimistic Updates: Immediate UI feedback for mutations

Data Flow Pattern

  1. Route Loaders: Fetch data on route navigation
  2. Components: Consume data through TanStack Query hooks
  3. Mutations: Update data with optimistic updates
  4. Cache Invalidation: Automatic cache updates after mutations

🌐 Routing Architecture

File-Based Routing

  • Routes defined by file structure in src/routes/
  • Dynamic segments using $ prefix (e.g., $postId.tsx)
  • Layout routes using underscore prefix (e.g., _layout.tsx)
  • API routes co-located with page routes

Route Configuration

// Route creation with contextexportconstRoute=createFileRoute('/posts/$postId')({loader: async({ params, context })=>{// Access to params and contextconstpost=awaitfetchPost(params.postId);return{ post };},component: PostComponent,errorComponent: PostErrorComponent,});

🖥️ Server-Side Architecture

SSR Implementation

  • Server-Side Rendering: Pages rendered on server
  • Hydration: Client-side JavaScript takes over after initial load
  • Data Prefetching: Data fetched on server for initial render
  • Streaming: Support for streaming responses

API Route Architecture

  • Co-location: API routes alongside page routes
  • Type Safety: Shared TypeScript types between client and server
  • Error Handling: Consistent error handling patterns
  • Validation: Request/response validation

Server Utilities

  • Server-only Code: Files with .server.ts suffix
  • Database Access: Server-side data access utilities
  • External APIs: Server-side API integration
  • Authentication: Server-side authentication logic

🎨 Component Architecture

Component Hierarchy

RootComponent (AuthProvider)
└── RootDocument
├── Navigation Header
├── Outlet (Route Components)
└── DevTools

Layout Components

  • Root Layout: Global layout with navigation and providers
  • Feature Layouts: Layout components for specific features
  • Page Components: Individual page components
  • UI Components: Reusable UI components

State Management

  • Route State: Local state managed by TanStack Router
  • Server State: External state managed by TanStack Query
  • UI State: Local component state with React hooks
  • Auth State: Global authentication state with React Context

🚀 Build and Deployment Architecture

Vite Configuration

  • Development: Fast HMR and development server
  • Production: Optimized builds with code splitting
  • TypeScript: Full TypeScript integration
  • Path Aliases: Clean import paths with tsconfig paths

Build Process

  1. TypeScript Compilation: Type checking and compilation
  2. Bundle Creation: Optimized JavaScript bundles
  3. Asset Optimization: Image and asset optimization
  4. Code Splitting: Automatic route-based code splitting

Deployment Architecture

  • Static Assets: Pre-built static assets
  • Server Rendering: Server-side rendering support
  • API Routes: Serverless function deployment
  • Edge Deployment: CDN and edge optimization

🔧 Development Architecture

Development Tools

  • Hot Module Replacement: Fast development iteration
  • TypeScript Support: Full type checking and IntelliSense
  • ESLint Integration: Code quality and consistency
  • Prettier Integration: Code formatting

Debugging Architecture

  • Error Boundaries: Graceful error handling
  • DevTools Integration: TanStack Router and Query DevTools
  • Source Maps: Development and production source maps
  • Error Reporting: Comprehensive error reporting

📊 Performance Architecture

Performance Optimizations

  • Code Splitting: Automatic route-based splitting
  • Lazy Loading: On-demand component loading
  • Prefetching: Proactive data and component prefetching
  • Caching: Intelligent data and asset caching

Loading Strategies

  • Progressive Enhancement: Core functionality loads first
  • Streaming: Progressive content delivery
  • Skeleton Screens: Better perceived performance
  • Optimistic Updates: Immediate UI feedback

🛡️ Security Architecture

Security Measures

  • Input Validation: Server-side input validation
  • Type Safety: TypeScript prevents many security issues
  • Error Handling: Secure error messages (no sensitive data)
  • Authentication: Secure authentication implementation

Best Practices

  • Server-Side Validation: All inputs validated on server
  • Secure Headers: Security headers in responses
  • Error Boundaries: Graceful error handling
  • Dependency Updates: Regular security updates

🧪 Testing Architecture

Testing Strategy

  • Unit Tests: Component and utility testing
  • Integration Tests: Route and API testing
  • E2E Tests: End-to-end user flow testing
  • Type Testing: TypeScript compilation testing

Testing Tools

  • Jest: Unit testing framework
  • React Testing Library: Component testing
  • Playwright: E2E testing
  • TypeScript: Type checking as testing

📈 Scalability Architecture

Horizontal Scaling

  • Stateless Design: Server-side stateless architecture
  • CDN Ready: Static asset CDN optimization
  • Database Scaling: Database connection pooling
  • Microservices Ready: Service decomposition support

Vertical Scaling

  • Code Splitting: Reduced initial bundle size
  • Lazy Loading: On-demand resource loading
  • Caching: Multi-level caching strategy
  • Performance Monitoring: Application performance monitoring
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

History
248 lines (204 loc) · 8.85 KB

File metadata and controls

248 lines (204 loc) · 8.85 KB

Architecture Documentation

This document describes the architectural decisions and patterns used in this TanStack Start example application.

🏗️ Overall Architecture

Technology Stack

  • Framework: TanStack Start (Full-stack React framework)
  • Routing: TanStack Router (File-based routing)
  • Data Management: TanStack Query (Server state management)
  • Build Tool: Vite (Fast build tool)
  • Styling: Tailwind CSS (Utility-first CSS)
  • Language: TypeScript (Type-safe JavaScript)

Architecture Pattern

The application follows a client-first, full-stack architecture where:

  • Routes are defined using file-based routing
  • Server-side rendering (SSR) is enabled by default
  • API routes are co-located with page routes
  • Type safety is maintained across client-server boundary

📁 File Structure Architecture

Route-Based Architecture

src/routes/
├── __root.tsx # Root layout and global providers
├── index.tsx # Home page route
├── dashboard.tsx # Dashboard layout with nested routes
├── dashboard.*.tsx # Dashboard sub-pages
├── posts/ # Posts feature routes
│ ├── posts.tsx # Posts layout
│ ├── posts.index.tsx # Posts listing
│ ├── posts.$postId.tsx # Individual post
│ └── posts.infinite.tsx # Infinite scroll example
├── users/ # Users feature routes
│ ├── users.tsx # Users layout
│ ├── users.index.tsx # Users listing
│ ├── users.$userId.tsx # User detail
│ └── users.$userId.edit.tsx # User editing
└── api/ # API routes
├── users.ts # Users API
└── users.$userId.ts # Individual user API

Component Architecture

src/components/
├── ui/ # Reusable UI components
├── DefaultCatchBoundary.tsx # Global error boundary
├── NotFound.tsx # 404 page component
├── auth-header.tsx # Authentication header
└── protected.tsx # Protected route wrapper

Utility Architecture

src/utils/
├── auth-context.tsx # Authentication context
├── auth.server.ts # Server-side auth utilities
├── *.server.ts # Server-only utilities
├── middleware.ts # Custom middleware
└── seo.ts # SEO utilities

🔒 Authentication Architecture

Context-Based Authentication

  • AuthProvider: React context providing authentication state
  • useAuth Hook: Custom hook for accessing auth state
  • Protected Routes: Routes wrapped with authentication checks
  • Server-Side Auth: Server utilities for authentication logic

Authentication Flow

  1. User attempts to access protected route
  2. RequireAuth component checks authentication status
  3. If not authenticated, redirect to login page
  4. After successful login, redirect to intended destination
  5. Auth state managed globally through React Context

🔄 Data Management Architecture

TanStack Query Integration

  • Query Client: Centralized query client for data management
  • Server State: External data managed by TanStack Query
  • Cache Management: Intelligent caching and invalidation
  • Optimistic Updates: Immediate UI feedback for mutations

Data Flow Pattern

  1. Route Loaders: Fetch data on route navigation
  2. Components: Consume data through TanStack Query hooks
  3. Mutations: Update data with optimistic updates
  4. Cache Invalidation: Automatic cache updates after mutations

🌐 Routing Architecture

File-Based Routing

  • Routes defined by file structure in src/routes/
  • Dynamic segments using $ prefix (e.g., $postId.tsx)
  • Layout routes using underscore prefix (e.g., _layout.tsx)
  • API routes co-located with page routes

Route Configuration

// Route creation with contextexportconstRoute=createFileRoute('/posts/$postId')({loader: async({ params, context })=>{// Access to params and contextconstpost=awaitfetchPost(params.postId);return{ post };},component: PostComponent,errorComponent: PostErrorComponent,});

🖥️ Server-Side Architecture

SSR Implementation

  • Server-Side Rendering: Pages rendered on server
  • Hydration: Client-side JavaScript takes over after initial load
  • Data Prefetching: Data fetched on server for initial render
  • Streaming: Support for streaming responses

API Route Architecture

  • Co-location: API routes alongside page routes
  • Type Safety: Shared TypeScript types between client and server
  • Error Handling: Consistent error handling patterns
  • Validation: Request/response validation

Server Utilities

  • Server-only Code: Files with .server.ts suffix
  • Database Access: Server-side data access utilities
  • External APIs: Server-side API integration
  • Authentication: Server-side authentication logic

🎨 Component Architecture

Component Hierarchy

RootComponent (AuthProvider)
└── RootDocument
├── Navigation Header
├── Outlet (Route Components)
└── DevTools

Layout Components

  • Root Layout: Global layout with navigation and providers
  • Feature Layouts: Layout components for specific features
  • Page Components: Individual page components
  • UI Components: Reusable UI components

State Management

  • Route State: Local state managed by TanStack Router
  • Server State: External state managed by TanStack Query
  • UI State: Local component state with React hooks
  • Auth State: Global authentication state with React Context

🚀 Build and Deployment Architecture

Vite Configuration

  • Development: Fast HMR and development server
  • Production: Optimized builds with code splitting
  • TypeScript: Full TypeScript integration
  • Path Aliases: Clean import paths with tsconfig paths

Build Process

  1. TypeScript Compilation: Type checking and compilation
  2. Bundle Creation: Optimized JavaScript bundles
  3. Asset Optimization: Image and asset optimization
  4. Code Splitting: Automatic route-based code splitting

Deployment Architecture

  • Static Assets: Pre-built static assets
  • Server Rendering: Server-side rendering support
  • API Routes: Serverless function deployment
  • Edge Deployment: CDN and edge optimization

🔧 Development Architecture

Development Tools

  • Hot Module Replacement: Fast development iteration
  • TypeScript Support: Full type checking and IntelliSense
  • ESLint Integration: Code quality and consistency
  • Prettier Integration: Code formatting

Debugging Architecture

  • Error Boundaries: Graceful error handling
  • DevTools Integration: TanStack Router and Query DevTools
  • Source Maps: Development and production source maps
  • Error Reporting: Comprehensive error reporting

📊 Performance Architecture

Performance Optimizations

  • Code Splitting: Automatic route-based splitting
  • Lazy Loading: On-demand component loading
  • Prefetching: Proactive data and component prefetching
  • Caching: Intelligent data and asset caching

Loading Strategies

  • Progressive Enhancement: Core functionality loads first
  • Streaming: Progressive content delivery
  • Skeleton Screens: Better perceived performance
  • Optimistic Updates: Immediate UI feedback

🛡️ Security Architecture

Security Measures

  • Input Validation: Server-side input validation
  • Type Safety: TypeScript prevents many security issues
  • Error Handling: Secure error messages (no sensitive data)
  • Authentication: Secure authentication implementation

Best Practices

  • Server-Side Validation: All inputs validated on server
  • Secure Headers: Security headers in responses
  • Error Boundaries: Graceful error handling
  • Dependency Updates: Regular security updates

🧪 Testing Architecture

Testing Strategy

  • Unit Tests: Component and utility testing
  • Integration Tests: Route and API testing
  • E2E Tests: End-to-end user flow testing
  • Type Testing: TypeScript compilation testing

Testing Tools

  • Jest: Unit testing framework
  • React Testing Library: Component testing
  • Playwright: E2E testing
  • TypeScript: Type checking as testing

📈 Scalability Architecture

Horizontal Scaling

  • Stateless Design: Server-side stateless architecture
  • CDN Ready: Static asset CDN optimization
  • Database Scaling: Database connection pooling
  • Microservices Ready: Service decomposition support

Vertical Scaling

  • Code Splitting: Reduced initial bundle size
  • Lazy Loading: On-demand resource loading
  • Caching: Multi-level caching strategy
  • Performance Monitoring: Application performance monitoring
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History
248 lines (204 loc) · 8.85 KB

File metadata and controls

248 lines (204 loc) · 8.85 KB

Architecture Documentation

This document describes the architectural decisions and patterns used in this TanStack Start example application.

🏗️ Overall Architecture

Technology Stack

  • Framework: TanStack Start (Full-stack React framework)
  • Routing: TanStack Router (File-based routing)
  • Data Management: TanStack Query (Server state management)
  • Build Tool: Vite (Fast build tool)
  • Styling: Tailwind CSS (Utility-first CSS)
  • Language: TypeScript (Type-safe JavaScript)

Architecture Pattern

The application follows a client-first, full-stack architecture where:

  • Routes are defined using file-based routing
  • Server-side rendering (SSR) is enabled by default
  • API routes are co-located with page routes
  • Type safety is maintained across client-server boundary

📁 File Structure Architecture

Route-Based Architecture

src/routes/
├── __root.tsx # Root layout and global providers
├── index.tsx # Home page route
├── dashboard.tsx # Dashboard layout with nested routes
├── dashboard.*.tsx # Dashboard sub-pages
├── posts/ # Posts feature routes
│ ├── posts.tsx # Posts layout
│ ├── posts.index.tsx # Posts listing
│ ├── posts.$postId.tsx # Individual post
│ └── posts.infinite.tsx # Infinite scroll example
├── users/ # Users feature routes
│ ├── users.tsx # Users layout
│ ├── users.index.tsx # Users listing
│ ├── users.$userId.tsx # User detail
│ └── users.$userId.edit.tsx # User editing
└── api/ # API routes
├── users.ts # Users API
└── users.$userId.ts # Individual user API

Component Architecture

src/components/
├── ui/ # Reusable UI components
├── DefaultCatchBoundary.tsx # Global error boundary
├── NotFound.tsx # 404 page component
├── auth-header.tsx # Authentication header
└── protected.tsx # Protected route wrapper

Utility Architecture

src/utils/
├── auth-context.tsx # Authentication context
├── auth.server.ts # Server-side auth utilities
├── *.server.ts # Server-only utilities
├── middleware.ts # Custom middleware
└── seo.ts # SEO utilities

🔒 Authentication Architecture

Context-Based Authentication

  • AuthProvider: React context providing authentication state
  • useAuth Hook: Custom hook for accessing auth state
  • Protected Routes: Routes wrapped with authentication checks
  • Server-Side Auth: Server utilities for authentication logic

Authentication Flow

  1. User attempts to access protected route
  2. RequireAuth component checks authentication status
  3. If not authenticated, redirect to login page
  4. After successful login, redirect to intended destination
  5. Auth state managed globally through React Context

🔄 Data Management Architecture

TanStack Query Integration

  • Query Client: Centralized query client for data management
  • Server State: External data managed by TanStack Query
  • Cache Management: Intelligent caching and invalidation
  • Optimistic Updates: Immediate UI feedback for mutations

Data Flow Pattern

  1. Route Loaders: Fetch data on route navigation
  2. Components: Consume data through TanStack Query hooks
  3. Mutations: Update data with optimistic updates
  4. Cache Invalidation: Automatic cache updates after mutations

🌐 Routing Architecture

File-Based Routing

  • Routes defined by file structure in src/routes/
  • Dynamic segments using $ prefix (e.g., $postId.tsx)
  • Layout routes using underscore prefix (e.g., _layout.tsx)
  • API routes co-located with page routes

Route Configuration

// Route creation with contextexportconstRoute=createFileRoute('/posts/$postId')({loader: async({ params, context })=>{// Access to params and contextconstpost=awaitfetchPost(params.postId);return{ post };},component: PostComponent,errorComponent: PostErrorComponent,});

🖥️ Server-Side Architecture

SSR Implementation

  • Server-Side Rendering: Pages rendered on server
  • Hydration: Client-side JavaScript takes over after initial load
  • Data Prefetching: Data fetched on server for initial render
  • Streaming: Support for streaming responses

API Route Architecture

  • Co-location: API routes alongside page routes
  • Type Safety: Shared TypeScript types between client and server
  • Error Handling: Consistent error handling patterns
  • Validation: Request/response validation

Server Utilities

  • Server-only Code: Files with .server.ts suffix
  • Database Access: Server-side data access utilities
  • External APIs: Server-side API integration
  • Authentication: Server-side authentication logic

🎨 Component Architecture

Component Hierarchy

RootComponent (AuthProvider)
└── RootDocument
├── Navigation Header
├── Outlet (Route Components)
└── DevTools

Layout Components

  • Root Layout: Global layout with navigation and providers
  • Feature Layouts: Layout components for specific features
  • Page Components: Individual page components
  • UI Components: Reusable UI components

State Management

  • Route State: Local state managed by TanStack Router
  • Server State: External state managed by TanStack Query
  • UI State: Local component state with React hooks
  • Auth State: Global authentication state with React Context

🚀 Build and Deployment Architecture

Vite Configuration

  • Development: Fast HMR and development server
  • Production: Optimized builds with code splitting
  • TypeScript: Full TypeScript integration
  • Path Aliases: Clean import paths with tsconfig paths

Build Process

  1. TypeScript Compilation: Type checking and compilation
  2. Bundle Creation: Optimized JavaScript bundles
  3. Asset Optimization: Image and asset optimization
  4. Code Splitting: Automatic route-based code splitting

Deployment Architecture

  • Static Assets: Pre-built static assets
  • Server Rendering: Server-side rendering support
  • API Routes: Serverless function deployment
  • Edge Deployment: CDN and edge optimization

🔧 Development Architecture

Development Tools

  • Hot Module Replacement: Fast development iteration
  • TypeScript Support: Full type checking and IntelliSense
  • ESLint Integration: Code quality and consistency
  • Prettier Integration: Code formatting

Debugging Architecture

  • Error Boundaries: Graceful error handling
  • DevTools Integration: TanStack Router and Query DevTools
  • Source Maps: Development and production source maps
  • Error Reporting: Comprehensive error reporting

📊 Performance Architecture

Performance Optimizations

  • Code Splitting: Automatic route-based splitting
  • Lazy Loading: On-demand component loading
  • Prefetching: Proactive data and component prefetching
  • Caching: Intelligent data and asset caching

Loading Strategies

  • Progressive Enhancement: Core functionality loads first
  • Streaming: Progressive content delivery
  • Skeleton Screens: Better perceived performance
  • Optimistic Updates: Immediate UI feedback

🛡️ Security Architecture

Security Measures

  • Input Validation: Server-side input validation
  • Type Safety: TypeScript prevents many security issues
  • Error Handling: Secure error messages (no sensitive data)
  • Authentication: Secure authentication implementation

Best Practices

  • Server-Side Validation: All inputs validated on server
  • Secure Headers: Security headers in responses
  • Error Boundaries: Graceful error handling
  • Dependency Updates: Regular security updates

🧪 Testing Architecture

Testing Strategy

  • Unit Tests: Component and utility testing
  • Integration Tests: Route and API testing
  • E2E Tests: End-to-end user flow testing
  • Type Testing: TypeScript compilation testing

Testing Tools

  • Jest: Unit testing framework
  • React Testing Library: Component testing
  • Playwright: E2E testing
  • TypeScript: Type checking as testing

📈 Scalability Architecture

Horizontal Scaling

  • Stateless Design: Server-side stateless architecture
  • CDN Ready: Static asset CDN optimization
  • Database Scaling: Database connection pooling
  • Microservices Ready: Service decomposition support

Vertical Scaling

  • Code Splitting: Reduced initial bundle size
  • Lazy Loading: On-demand resource loading
  • Caching: Multi-level caching strategy
  • Performance Monitoring: Application performance monitoring
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History
248 lines (204 loc) · 8.85 KB

File metadata and controls

248 lines (204 loc) · 8.85 KB

Architecture Documentation

This document describes the architectural decisions and patterns used in this TanStack Start example application.

🏗️ Overall Architecture

Technology Stack

  • Framework: TanStack Start (Full-stack React framework)
  • Routing: TanStack Router (File-based routing)
  • Data Management: TanStack Query (Server state management)
  • Build Tool: Vite (Fast build tool)
  • Styling: Tailwind CSS (Utility-first CSS)
  • Language: TypeScript (Type-safe JavaScript)

Architecture Pattern

The application follows a client-first, full-stack architecture where:

  • Routes are defined using file-based routing
  • Server-side rendering (SSR) is enabled by default
  • API routes are co-located with page routes
  • Type safety is maintained across client-server boundary

📁 File Structure Architecture

Route-Based Architecture

src/routes/
├── __root.tsx # Root layout and global providers
├── index.tsx # Home page route
├── dashboard.tsx # Dashboard layout with nested routes
├── dashboard.*.tsx # Dashboard sub-pages
├── posts/ # Posts feature routes
│ ├── posts.tsx # Posts layout
│ ├── posts.index.tsx # Posts listing
│ ├── posts.$postId.tsx # Individual post
│ └── posts.infinite.tsx # Infinite scroll example
├── users/ # Users feature routes
│ ├── users.tsx # Users layout
│ ├── users.index.tsx # Users listing
│ ├── users.$userId.tsx # User detail
│ └── users.$userId.edit.tsx # User editing
└── api/ # API routes
├── users.ts # Users API
└── users.$userId.ts # Individual user API

Component Architecture

src/components/
├── ui/ # Reusable UI components
├── DefaultCatchBoundary.tsx # Global error boundary
├── NotFound.tsx # 404 page component
├── auth-header.tsx # Authentication header
└── protected.tsx # Protected route wrapper

Utility Architecture

src/utils/
├── auth-context.tsx # Authentication context
├── auth.server.ts # Server-side auth utilities
├── *.server.ts # Server-only utilities
├── middleware.ts # Custom middleware
└── seo.ts # SEO utilities

🔒 Authentication Architecture

Context-Based Authentication

  • AuthProvider: React context providing authentication state
  • useAuth Hook: Custom hook for accessing auth state
  • Protected Routes: Routes wrapped with authentication checks
  • Server-Side Auth: Server utilities for authentication logic

Authentication Flow

  1. User attempts to access protected route
  2. RequireAuth component checks authentication status
  3. If not authenticated, redirect to login page
  4. After successful login, redirect to intended destination
  5. Auth state managed globally through React Context

🔄 Data Management Architecture

TanStack Query Integration

  • Query Client: Centralized query client for data management
  • Server State: External data managed by TanStack Query
  • Cache Management: Intelligent caching and invalidation
  • Optimistic Updates: Immediate UI feedback for mutations

Data Flow Pattern

  1. Route Loaders: Fetch data on route navigation
  2. Components: Consume data through TanStack Query hooks
  3. Mutations: Update data with optimistic updates
  4. Cache Invalidation: Automatic cache updates after mutations

🌐 Routing Architecture

File-Based Routing

  • Routes defined by file structure in src/routes/
  • Dynamic segments using $ prefix (e.g., $postId.tsx)
  • Layout routes using underscore prefix (e.g., _layout.tsx)
  • API routes co-located with page routes

Route Configuration

// Route creation with contextexportconstRoute=createFileRoute('/posts/$postId')({loader: async({ params, context })=>{// Access to params and contextconstpost=awaitfetchPost(params.postId);return{ post };},component: PostComponent,errorComponent: PostErrorComponent,});

🖥️ Server-Side Architecture

SSR Implementation

  • Server-Side Rendering: Pages rendered on server
  • Hydration: Client-side JavaScript takes over after initial load
  • Data Prefetching: Data fetched on server for initial render
  • Streaming: Support for streaming responses

API Route Architecture

  • Co-location: API routes alongside page routes
  • Type Safety: Shared TypeScript types between client and server
  • Error Handling: Consistent error handling patterns
  • Validation: Request/response validation

Server Utilities

  • Server-only Code: Files with .server.ts suffix
  • Database Access: Server-side data access utilities
  • External APIs: Server-side API integration
  • Authentication: Server-side authentication logic

🎨 Component Architecture

Component Hierarchy

RootComponent (AuthProvider)
└── RootDocument
├── Navigation Header
├── Outlet (Route Components)
└── DevTools

Layout Components

  • Root Layout: Global layout with navigation and providers
  • Feature Layouts: Layout components for specific features
  • Page Components: Individual page components
  • UI Components: Reusable UI components

State Management

  • Route State: Local state managed by TanStack Router
  • Server State: External state managed by TanStack Query
  • UI State: Local component state with React hooks
  • Auth State: Global authentication state with React Context

🚀 Build and Deployment Architecture

Vite Configuration

  • Development: Fast HMR and development server
  • Production: Optimized builds with code splitting
  • TypeScript: Full TypeScript integration
  • Path Aliases: Clean import paths with tsconfig paths

Build Process

  1. TypeScript Compilation: Type checking and compilation
  2. Bundle Creation: Optimized JavaScript bundles
  3. Asset Optimization: Image and asset optimization
  4. Code Splitting: Automatic route-based code splitting

Deployment Architecture

  • Static Assets: Pre-built static assets
  • Server Rendering: Server-side rendering support
  • API Routes: Serverless function deployment
  • Edge Deployment: CDN and edge optimization

🔧 Development Architecture

Development Tools

  • Hot Module Replacement: Fast development iteration
  • TypeScript Support: Full type checking and IntelliSense
  • ESLint Integration: Code quality and consistency
  • Prettier Integration: Code formatting

Debugging Architecture

  • Error Boundaries: Graceful error handling
  • DevTools Integration: TanStack Router and Query DevTools
  • Source Maps: Development and production source maps
  • Error Reporting: Comprehensive error reporting

📊 Performance Architecture

Performance Optimizations

  • Code Splitting: Automatic route-based splitting
  • Lazy Loading: On-demand component loading
  • Prefetching: Proactive data and component prefetching
  • Caching: Intelligent data and asset caching

Loading Strategies

  • Progressive Enhancement: Core functionality loads first
  • Streaming: Progressive content delivery
  • Skeleton Screens: Better perceived performance
  • Optimistic Updates: Immediate UI feedback

🛡️ Security Architecture

Security Measures

  • Input Validation: Server-side input validation
  • Type Safety: TypeScript prevents many security issues
  • Error Handling: Secure error messages (no sensitive data)
  • Authentication: Secure authentication implementation

Best Practices

  • Server-Side Validation: All inputs validated on server
  • Secure Headers: Security headers in responses
  • Error Boundaries: Graceful error handling
  • Dependency Updates: Regular security updates

🧪 Testing Architecture

Testing Strategy

  • Unit Tests: Component and utility testing
  • Integration Tests: Route and API testing
  • E2E Tests: End-to-end user flow testing
  • Type Testing: TypeScript compilation testing

Testing Tools

  • Jest: Unit testing framework
  • React Testing Library: Component testing
  • Playwright: E2E testing
  • TypeScript: Type checking as testing

📈 Scalability Architecture

Horizontal Scaling

  • Stateless Design: Server-side stateless architecture
  • CDN Ready: Static asset CDN optimization
  • Database Scaling: Database connection pooling
  • Microservices Ready: Service decomposition support

Vertical Scaling

  • Code Splitting: Reduced initial bundle size
  • Lazy Loading: On-demand resource loading
  • Caching: Multi-level caching strategy
  • Performance Monitoring: Application performance monitoring
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

History
248 lines (204 loc) · 8.85 KB

File metadata and controls

248 lines (204 loc) · 8.85 KB

Architecture Documentation

This document describes the architectural decisions and patterns used in this TanStack Start example application.

🏗️ Overall Architecture

Technology Stack

  • Framework: TanStack Start (Full-stack React framework)
  • Routing: TanStack Router (File-based routing)
  • Data Management: TanStack Query (Server state management)
  • Build Tool: Vite (Fast build tool)
  • Styling: Tailwind CSS (Utility-first CSS)
  • Language: TypeScript (Type-safe JavaScript)

Architecture Pattern

The application follows a client-first, full-stack architecture where:

  • Routes are defined using file-based routing
  • Server-side rendering (SSR) is enabled by default
  • API routes are co-located with page routes
  • Type safety is maintained across client-server boundary

📁 File Structure Architecture

Route-Based Architecture

src/routes/
├── __root.tsx # Root layout and global providers
├── index.tsx # Home page route
├── dashboard.tsx # Dashboard layout with nested routes
├── dashboard.*.tsx # Dashboard sub-pages
├── posts/ # Posts feature routes
│ ├── posts.tsx # Posts layout
│ ├── posts.index.tsx # Posts listing
│ ├── posts.$postId.tsx # Individual post
│ └── posts.infinite.tsx # Infinite scroll example
├── users/ # Users feature routes
│ ├── users.tsx # Users layout
│ ├── users.index.tsx # Users listing
│ ├── users.$userId.tsx # User detail
│ └── users.$userId.edit.tsx # User editing
└── api/ # API routes
├── users.ts # Users API
└── users.$userId.ts # Individual user API

Component Architecture

src/components/
├── ui/ # Reusable UI components
├── DefaultCatchBoundary.tsx # Global error boundary
├── NotFound.tsx # 404 page component
├── auth-header.tsx # Authentication header
└── protected.tsx # Protected route wrapper

Utility Architecture

src/utils/
├── auth-context.tsx # Authentication context
├── auth.server.ts # Server-side auth utilities
├── *.server.ts # Server-only utilities
├── middleware.ts # Custom middleware
└── seo.ts # SEO utilities

🔒 Authentication Architecture

Context-Based Authentication

  • AuthProvider: React context providing authentication state
  • useAuth Hook: Custom hook for accessing auth state
  • Protected Routes: Routes wrapped with authentication checks
  • Server-Side Auth: Server utilities for authentication logic

Authentication Flow

  1. User attempts to access protected route
  2. RequireAuth component checks authentication status
  3. If not authenticated, redirect to login page
  4. After successful login, redirect to intended destination
  5. Auth state managed globally through React Context

🔄 Data Management Architecture

TanStack Query Integration

  • Query Client: Centralized query client for data management
  • Server State: External data managed by TanStack Query
  • Cache Management: Intelligent caching and invalidation
  • Optimistic Updates: Immediate UI feedback for mutations

Data Flow Pattern

  1. Route Loaders: Fetch data on route navigation
  2. Components: Consume data through TanStack Query hooks
  3. Mutations: Update data with optimistic updates
  4. Cache Invalidation: Automatic cache updates after mutations

🌐 Routing Architecture

File-Based Routing

  • Routes defined by file structure in src/routes/
  • Dynamic segments using $ prefix (e.g., $postId.tsx)
  • Layout routes using underscore prefix (e.g., _layout.tsx)
  • API routes co-located with page routes

Route Configuration

// Route creation with contextexportconstRoute=createFileRoute('/posts/$postId')({loader: async({ params, context })=>{// Access to params and contextconstpost=awaitfetchPost(params.postId);return{ post };},component: PostComponent,errorComponent: PostErrorComponent,});

🖥️ Server-Side Architecture

SSR Implementation

  • Server-Side Rendering: Pages rendered on server
  • Hydration: Client-side JavaScript takes over after initial load
  • Data Prefetching: Data fetched on server for initial render
  • Streaming: Support for streaming responses

API Route Architecture

  • Co-location: API routes alongside page routes
  • Type Safety: Shared TypeScript types between client and server
  • Error Handling: Consistent error handling patterns
  • Validation: Request/response validation

Server Utilities

  • Server-only Code: Files with .server.ts suffix
  • Database Access: Server-side data access utilities
  • External APIs: Server-side API integration
  • Authentication: Server-side authentication logic

🎨 Component Architecture

Component Hierarchy

RootComponent (AuthProvider)
└── RootDocument
├── Navigation Header
├── Outlet (Route Components)
└── DevTools

Layout Components

  • Root Layout: Global layout with navigation and providers
  • Feature Layouts: Layout components for specific features
  • Page Components: Individual page components
  • UI Components: Reusable UI components

State Management

  • Route State: Local state managed by TanStack Router
  • Server State: External state managed by TanStack Query
  • UI State: Local component state with React hooks
  • Auth State: Global authentication state with React Context

🚀 Build and Deployment Architecture

Vite Configuration

  • Development: Fast HMR and development server
  • Production: Optimized builds with code splitting
  • TypeScript: Full TypeScript integration
  • Path Aliases: Clean import paths with tsconfig paths

Build Process

  1. TypeScript Compilation: Type checking and compilation
  2. Bundle Creation: Optimized JavaScript bundles
  3. Asset Optimization: Image and asset optimization
  4. Code Splitting: Automatic route-based code splitting

Deployment Architecture

  • Static Assets: Pre-built static assets
  • Server Rendering: Server-side rendering support
  • API Routes: Serverless function deployment
  • Edge Deployment: CDN and edge optimization

🔧 Development Architecture

Development Tools

  • Hot Module Replacement: Fast development iteration
  • TypeScript Support: Full type checking and IntelliSense
  • ESLint Integration: Code quality and consistency
  • Prettier Integration: Code formatting

Debugging Architecture

  • Error Boundaries: Graceful error handling
  • DevTools Integration: TanStack Router and Query DevTools
  • Source Maps: Development and production source maps
  • Error Reporting: Comprehensive error reporting

📊 Performance Architecture

Performance Optimizations

  • Code Splitting: Automatic route-based splitting
  • Lazy Loading: On-demand component loading
  • Prefetching: Proactive data and component prefetching
  • Caching: Intelligent data and asset caching

Loading Strategies

  • Progressive Enhancement: Core functionality loads first
  • Streaming: Progressive content delivery
  • Skeleton Screens: Better perceived performance
  • Optimistic Updates: Immediate UI feedback

🛡️ Security Architecture

Security Measures

  • Input Validation: Server-side input validation
  • Type Safety: TypeScript prevents many security issues
  • Error Handling: Secure error messages (no sensitive data)
  • Authentication: Secure authentication implementation

Best Practices

  • Server-Side Validation: All inputs validated on server
  • Secure Headers: Security headers in responses
  • Error Boundaries: Graceful error handling
  • Dependency Updates: Regular security updates

🧪 Testing Architecture

Testing Strategy

  • Unit Tests: Component and utility testing
  • Integration Tests: Route and API testing
  • E2E Tests: End-to-end user flow testing
  • Type Testing: TypeScript compilation testing

Testing Tools

  • Jest: Unit testing framework
  • React Testing Library: Component testing
  • Playwright: E2E testing
  • TypeScript: Type checking as testing

📈 Scalability Architecture

Horizontal Scaling

  • Stateless Design: Server-side stateless architecture
  • CDN Ready: Static asset CDN optimization
  • Database Scaling: Database connection pooling
  • Microservices Ready: Service decomposition support

Vertical Scaling

  • Code Splitting: Reduced initial bundle size
  • Lazy Loading: On-demand resource loading
  • Caching: Multi-level caching strategy
  • Performance Monitoring: Application performance monitoring
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History
248 lines (204 loc) · 8.85 KB

File metadata and controls

248 lines (204 loc) · 8.85 KB

Architecture Documentation

This document describes the architectural decisions and patterns used in this TanStack Start example application.

🏗️ Overall Architecture

Technology Stack

  • Framework: TanStack Start (Full-stack React framework)
  • Routing: TanStack Router (File-based routing)
  • Data Management: TanStack Query (Server state management)
  • Build Tool: Vite (Fast build tool)
  • Styling: Tailwind CSS (Utility-first CSS)
  • Language: TypeScript (Type-safe JavaScript)

Architecture Pattern

The application follows a client-first, full-stack architecture where:

  • Routes are defined using file-based routing
  • Server-side rendering (SSR) is enabled by default
  • API routes are co-located with page routes
  • Type safety is maintained across client-server boundary

📁 File Structure Architecture

Route-Based Architecture

src/routes/
├── __root.tsx # Root layout and global providers
├── index.tsx # Home page route
├── dashboard.tsx # Dashboard layout with nested routes
├── dashboard.*.tsx # Dashboard sub-pages
├── posts/ # Posts feature routes
│ ├── posts.tsx # Posts layout
│ ├── posts.index.tsx # Posts listing
│ ├── posts.$postId.tsx # Individual post
│ └── posts.infinite.tsx # Infinite scroll example
├── users/ # Users feature routes
│ ├── users.tsx # Users layout
│ ├── users.index.tsx # Users listing
│ ├── users.$userId.tsx # User detail
│ └── users.$userId.edit.tsx # User editing
└── api/ # API routes
├── users.ts # Users API
└── users.$userId.ts # Individual user API

Component Architecture

src/components/
├── ui/ # Reusable UI components
├── DefaultCatchBoundary.tsx # Global error boundary
├── NotFound.tsx # 404 page component
├── auth-header.tsx # Authentication header
└── protected.tsx # Protected route wrapper

Utility Architecture

src/utils/
├── auth-context.tsx # Authentication context
├── auth.server.ts # Server-side auth utilities
├── *.server.ts # Server-only utilities
├── middleware.ts # Custom middleware
└── seo.ts # SEO utilities

🔒 Authentication Architecture

Context-Based Authentication

  • AuthProvider: React context providing authentication state
  • useAuth Hook: Custom hook for accessing auth state
  • Protected Routes: Routes wrapped with authentication checks
  • Server-Side Auth: Server utilities for authentication logic

Authentication Flow

  1. User attempts to access protected route
  2. RequireAuth component checks authentication status
  3. If not authenticated, redirect to login page
  4. After successful login, redirect to intended destination
  5. Auth state managed globally through React Context

🔄 Data Management Architecture

TanStack Query Integration

  • Query Client: Centralized query client for data management
  • Server State: External data managed by TanStack Query
  • Cache Management: Intelligent caching and invalidation
  • Optimistic Updates: Immediate UI feedback for mutations

Data Flow Pattern

  1. Route Loaders: Fetch data on route navigation
  2. Components: Consume data through TanStack Query hooks
  3. Mutations: Update data with optimistic updates
  4. Cache Invalidation: Automatic cache updates after mutations

🌐 Routing Architecture

File-Based Routing

  • Routes defined by file structure in src/routes/
  • Dynamic segments using $ prefix (e.g., $postId.tsx)
  • Layout routes using underscore prefix (e.g., _layout.tsx)
  • API routes co-located with page routes

Route Configuration

// Route creation with contextexportconstRoute=createFileRoute('/posts/$postId')({loader: async({ params, context })=>{// Access to params and contextconstpost=awaitfetchPost(params.postId);return{ post };},component: PostComponent,errorComponent: PostErrorComponent,});

🖥️ Server-Side Architecture

SSR Implementation

  • Server-Side Rendering: Pages rendered on server
  • Hydration: Client-side JavaScript takes over after initial load
  • Data Prefetching: Data fetched on server for initial render
  • Streaming: Support for streaming responses

API Route Architecture

  • Co-location: API routes alongside page routes
  • Type Safety: Shared TypeScript types between client and server
  • Error Handling: Consistent error handling patterns
  • Validation: Request/response validation

Server Utilities

  • Server-only Code: Files with .server.ts suffix
  • Database Access: Server-side data access utilities
  • External APIs: Server-side API integration
  • Authentication: Server-side authentication logic

🎨 Component Architecture

Component Hierarchy

RootComponent (AuthProvider)
└── RootDocument
├── Navigation Header
├── Outlet (Route Components)
└── DevTools

Layout Components

  • Root Layout: Global layout with navigation and providers
  • Feature Layouts: Layout components for specific features
  • Page Components: Individual page components
  • UI Components: Reusable UI components

State Management

  • Route State: Local state managed by TanStack Router
  • Server State: External state managed by TanStack Query
  • UI State: Local component state with React hooks
  • Auth State: Global authentication state with React Context

🚀 Build and Deployment Architecture

Vite Configuration

  • Development: Fast HMR and development server
  • Production: Optimized builds with code splitting
  • TypeScript: Full TypeScript integration
  • Path Aliases: Clean import paths with tsconfig paths

Build Process

  1. TypeScript Compilation: Type checking and compilation
  2. Bundle Creation: Optimized JavaScript bundles
  3. Asset Optimization: Image and asset optimization
  4. Code Splitting: Automatic route-based code splitting

Deployment Architecture

  • Static Assets: Pre-built static assets
  • Server Rendering: Server-side rendering support
  • API Routes: Serverless function deployment
  • Edge Deployment: CDN and edge optimization

🔧 Development Architecture

Development Tools

  • Hot Module Replacement: Fast development iteration
  • TypeScript Support: Full type checking and IntelliSense
  • ESLint Integration: Code quality and consistency
  • Prettier Integration: Code formatting

Debugging Architecture

  • Error Boundaries: Graceful error handling
  • DevTools Integration: TanStack Router and Query DevTools
  • Source Maps: Development and production source maps
  • Error Reporting: Comprehensive error reporting

📊 Performance Architecture

Performance Optimizations

  • Code Splitting: Automatic route-based splitting
  • Lazy Loading: On-demand component loading
  • Prefetching: Proactive data and component prefetching
  • Caching: Intelligent data and asset caching

Loading Strategies

  • Progressive Enhancement: Core functionality loads first
  • Streaming: Progressive content delivery
  • Skeleton Screens: Better perceived performance
  • Optimistic Updates: Immediate UI feedback

🛡️ Security Architecture

Security Measures

  • Input Validation: Server-side input validation
  • Type Safety: TypeScript prevents many security issues
  • Error Handling: Secure error messages (no sensitive data)
  • Authentication: Secure authentication implementation

Best Practices

  • Server-Side Validation: All inputs validated on server
  • Secure Headers: Security headers in responses
  • Error Boundaries: Graceful error handling
  • Dependency Updates: Regular security updates

🧪 Testing Architecture

Testing Strategy

  • Unit Tests: Component and utility testing
  • Integration Tests: Route and API testing
  • E2E Tests: End-to-end user flow testing
  • Type Testing: TypeScript compilation testing

Testing Tools

  • Jest: Unit testing framework
  • React Testing Library: Component testing
  • Playwright: E2E testing
  • TypeScript: Type checking as testing

📈 Scalability Architecture

Horizontal Scaling

  • Stateless Design: Server-side stateless architecture
  • CDN Ready: Static asset CDN optimization
  • Database Scaling: Database connection pooling
  • Microservices Ready: Service decomposition support

Vertical Scaling

  • Code Splitting: Reduced initial bundle size
  • Lazy Loading: On-demand resource loading
  • Caching: Multi-level caching strategy
  • Performance Monitoring: Application performance monitoring
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History
248 lines (204 loc) · 8.85 KB

File metadata and controls

248 lines (204 loc) · 8.85 KB

Architecture Documentation

This document describes the architectural decisions and patterns used in this TanStack Start example application.

🏗️ Overall Architecture

Technology Stack

  • Framework: TanStack Start (Full-stack React framework)
  • Routing: TanStack Router (File-based routing)
  • Data Management: TanStack Query (Server state management)
  • Build Tool: Vite (Fast build tool)
  • Styling: Tailwind CSS (Utility-first CSS)
  • Language: TypeScript (Type-safe JavaScript)

Architecture Pattern

The application follows a client-first, full-stack architecture where:

  • Routes are defined using file-based routing
  • Server-side rendering (SSR) is enabled by default
  • API routes are co-located with page routes
  • Type safety is maintained across client-server boundary

📁 File Structure Architecture

Route-Based Architecture

src/routes/
├── __root.tsx # Root layout and global providers
├── index.tsx # Home page route
├── dashboard.tsx # Dashboard layout with nested routes
├── dashboard.*.tsx # Dashboard sub-pages
├── posts/ # Posts feature routes
│ ├── posts.tsx # Posts layout
│ ├── posts.index.tsx # Posts listing
│ ├── posts.$postId.tsx # Individual post
│ └── posts.infinite.tsx # Infinite scroll example
├── users/ # Users feature routes
│ ├── users.tsx # Users layout
│ ├── users.index.tsx # Users listing
│ ├── users.$userId.tsx # User detail
│ └── users.$userId.edit.tsx # User editing
└── api/ # API routes
├── users.ts # Users API
└── users.$userId.ts # Individual user API

Component Architecture

src/components/
├── ui/ # Reusable UI components
├── DefaultCatchBoundary.tsx # Global error boundary
├── NotFound.tsx # 404 page component
├── auth-header.tsx # Authentication header
└── protected.tsx # Protected route wrapper

Utility Architecture

src/utils/
├── auth-context.tsx # Authentication context
├── auth.server.ts # Server-side auth utilities
├── *.server.ts # Server-only utilities
├── middleware.ts # Custom middleware
└── seo.ts # SEO utilities

🔒 Authentication Architecture

Context-Based Authentication

  • AuthProvider: React context providing authentication state
  • useAuth Hook: Custom hook for accessing auth state
  • Protected Routes: Routes wrapped with authentication checks
  • Server-Side Auth: Server utilities for authentication logic

Authentication Flow

  1. User attempts to access protected route
  2. RequireAuth component checks authentication status
  3. If not authenticated, redirect to login page
  4. After successful login, redirect to intended destination
  5. Auth state managed globally through React Context

🔄 Data Management Architecture

TanStack Query Integration

  • Query Client: Centralized query client for data management
  • Server State: External data managed by TanStack Query
  • Cache Management: Intelligent caching and invalidation
  • Optimistic Updates: Immediate UI feedback for mutations

Data Flow Pattern

  1. Route Loaders: Fetch data on route navigation
  2. Components: Consume data through TanStack Query hooks
  3. Mutations: Update data with optimistic updates
  4. Cache Invalidation: Automatic cache updates after mutations

🌐 Routing Architecture

File-Based Routing

  • Routes defined by file structure in src/routes/
  • Dynamic segments using $ prefix (e.g., $postId.tsx)
  • Layout routes using underscore prefix (e.g., _layout.tsx)
  • API routes co-located with page routes

Route Configuration

// Route creation with contextexportconstRoute=createFileRoute('/posts/$postId')({loader: async({ params, context })=>{// Access to params and contextconstpost=awaitfetchPost(params.postId);return{ post };},component: PostComponent,errorComponent: PostErrorComponent,});

🖥️ Server-Side Architecture

SSR Implementation

  • Server-Side Rendering: Pages rendered on server
  • Hydration: Client-side JavaScript takes over after initial load
  • Data Prefetching: Data fetched on server for initial render
  • Streaming: Support for streaming responses

API Route Architecture

  • Co-location: API routes alongside page routes
  • Type Safety: Shared TypeScript types between client and server
  • Error Handling: Consistent error handling patterns
  • Validation: Request/response validation

Server Utilities

  • Server-only Code: Files with .server.ts suffix
  • Database Access: Server-side data access utilities
  • External APIs: Server-side API integration
  • Authentication: Server-side authentication logic

🎨 Component Architecture

Component Hierarchy

RootComponent (AuthProvider)
└── RootDocument
├── Navigation Header
├── Outlet (Route Components)
└── DevTools

Layout Components

  • Root Layout: Global layout with navigation and providers
  • Feature Layouts: Layout components for specific features
  • Page Components: Individual page components
  • UI Components: Reusable UI components

State Management

  • Route State: Local state managed by TanStack Router
  • Server State: External state managed by TanStack Query
  • UI State: Local component state with React hooks
  • Auth State: Global authentication state with React Context

🚀 Build and Deployment Architecture

Vite Configuration

  • Development: Fast HMR and development server
  • Production: Optimized builds with code splitting
  • TypeScript: Full TypeScript integration
  • Path Aliases: Clean import paths with tsconfig paths

Build Process

  1. TypeScript Compilation: Type checking and compilation
  2. Bundle Creation: Optimized JavaScript bundles
  3. Asset Optimization: Image and asset optimization
  4. Code Splitting: Automatic route-based code splitting

Deployment Architecture

  • Static Assets: Pre-built static assets
  • Server Rendering: Server-side rendering support
  • API Routes: Serverless function deployment
  • Edge Deployment: CDN and edge optimization

🔧 Development Architecture

Development Tools

  • Hot Module Replacement: Fast development iteration
  • TypeScript Support: Full type checking and IntelliSense
  • ESLint Integration: Code quality and consistency
  • Prettier Integration: Code formatting

Debugging Architecture

  • Error Boundaries: Graceful error handling
  • DevTools Integration: TanStack Router and Query DevTools
  • Source Maps: Development and production source maps
  • Error Reporting: Comprehensive error reporting

📊 Performance Architecture

Performance Optimizations

  • Code Splitting: Automatic route-based splitting
  • Lazy Loading: On-demand component loading
  • Prefetching: Proactive data and component prefetching
  • Caching: Intelligent data and asset caching

Loading Strategies

  • Progressive Enhancement: Core functionality loads first
  • Streaming: Progressive content delivery
  • Skeleton Screens: Better perceived performance
  • Optimistic Updates: Immediate UI feedback

🛡️ Security Architecture

Security Measures

  • Input Validation: Server-side input validation
  • Type Safety: TypeScript prevents many security issues
  • Error Handling: Secure error messages (no sensitive data)
  • Authentication: Secure authentication implementation

Best Practices

  • Server-Side Validation: All inputs validated on server
  • Secure Headers: Security headers in responses
  • Error Boundaries: Graceful error handling
  • Dependency Updates: Regular security updates

🧪 Testing Architecture

Testing Strategy

  • Unit Tests: Component and utility testing
  • Integration Tests: Route and API testing
  • E2E Tests: End-to-end user flow testing
  • Type Testing: TypeScript compilation testing

Testing Tools

  • Jest: Unit testing framework
  • React Testing Library: Component testing
  • Playwright: E2E testing
  • TypeScript: Type checking as testing

📈 Scalability Architecture

Horizontal Scaling

  • Stateless Design: Server-side stateless architecture
  • CDN Ready: Static asset CDN optimization
  • Database Scaling: Database connection pooling
  • Microservices Ready: Service decomposition support

Vertical Scaling

  • Code Splitting: Reduced initial bundle size
  • Lazy Loading: On-demand resource loading
  • Caching: Multi-level caching strategy
  • Performance Monitoring: Application performance monitoring
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

History
248 lines (204 loc) · 8.85 KB

File metadata and controls

248 lines (204 loc) · 8.85 KB

Architecture Documentation

This document describes the architectural decisions and patterns used in this TanStack Start example application.

🏗️ Overall Architecture

Technology Stack

  • Framework: TanStack Start (Full-stack React framework)
  • Routing: TanStack Router (File-based routing)
  • Data Management: TanStack Query (Server state management)
  • Build Tool: Vite (Fast build tool)
  • Styling: Tailwind CSS (Utility-first CSS)
  • Language: TypeScript (Type-safe JavaScript)

Architecture Pattern

The application follows a client-first, full-stack architecture where:

  • Routes are defined using file-based routing
  • Server-side rendering (SSR) is enabled by default
  • API routes are co-located with page routes
  • Type safety is maintained across client-server boundary

📁 File Structure Architecture

Route-Based Architecture

src/routes/
├── __root.tsx # Root layout and global providers
├── index.tsx # Home page route
├── dashboard.tsx # Dashboard layout with nested routes
├── dashboard.*.tsx # Dashboard sub-pages
├── posts/ # Posts feature routes
│ ├── posts.tsx # Posts layout
│ ├── posts.index.tsx # Posts listing
│ ├── posts.$postId.tsx # Individual post
│ └── posts.infinite.tsx # Infinite scroll example
├── users/ # Users feature routes
│ ├── users.tsx # Users layout
│ ├── users.index.tsx # Users listing
│ ├── users.$userId.tsx # User detail
│ └── users.$userId.edit.tsx # User editing
└── api/ # API routes
├── users.ts # Users API
└── users.$userId.ts # Individual user API

Component Architecture

src/components/
├── ui/ # Reusable UI components
├── DefaultCatchBoundary.tsx # Global error boundary
├── NotFound.tsx # 404 page component
├── auth-header.tsx # Authentication header
└── protected.tsx # Protected route wrapper

Utility Architecture

src/utils/
├── auth-context.tsx # Authentication context
├── auth.server.ts # Server-side auth utilities
├── *.server.ts # Server-only utilities
├── middleware.ts # Custom middleware
└── seo.ts # SEO utilities

🔒 Authentication Architecture

Context-Based Authentication

  • AuthProvider: React context providing authentication state
  • useAuth Hook: Custom hook for accessing auth state
  • Protected Routes: Routes wrapped with authentication checks
  • Server-Side Auth: Server utilities for authentication logic

Authentication Flow

  1. User attempts to access protected route
  2. RequireAuth component checks authentication status
  3. If not authenticated, redirect to login page
  4. After successful login, redirect to intended destination
  5. Auth state managed globally through React Context

🔄 Data Management Architecture

TanStack Query Integration

  • Query Client: Centralized query client for data management
  • Server State: External data managed by TanStack Query
  • Cache Management: Intelligent caching and invalidation
  • Optimistic Updates: Immediate UI feedback for mutations

Data Flow Pattern

  1. Route Loaders: Fetch data on route navigation
  2. Components: Consume data through TanStack Query hooks
  3. Mutations: Update data with optimistic updates
  4. Cache Invalidation: Automatic cache updates after mutations

🌐 Routing Architecture

File-Based Routing

  • Routes defined by file structure in src/routes/
  • Dynamic segments using $ prefix (e.g., $postId.tsx)
  • Layout routes using underscore prefix (e.g., _layout.tsx)
  • API routes co-located with page routes

Route Configuration

// Route creation with contextexportconstRoute=createFileRoute('/posts/$postId')({loader: async({ params, context })=>{// Access to params and contextconstpost=awaitfetchPost(params.postId);return{ post };},component: PostComponent,errorComponent: PostErrorComponent,});

🖥️ Server-Side Architecture

SSR Implementation

  • Server-Side Rendering: Pages rendered on server
  • Hydration: Client-side JavaScript takes over after initial load
  • Data Prefetching: Data fetched on server for initial render
  • Streaming: Support for streaming responses

API Route Architecture

  • Co-location: API routes alongside page routes
  • Type Safety: Shared TypeScript types between client and server
  • Error Handling: Consistent error handling patterns
  • Validation: Request/response validation

Server Utilities

  • Server-only Code: Files with .server.ts suffix
  • Database Access: Server-side data access utilities
  • External APIs: Server-side API integration
  • Authentication: Server-side authentication logic

🎨 Component Architecture

Component Hierarchy

RootComponent (AuthProvider)
└── RootDocument
├── Navigation Header
├── Outlet (Route Components)
└── DevTools

Layout Components

  • Root Layout: Global layout with navigation and providers
  • Feature Layouts: Layout components for specific features
  • Page Components: Individual page components
  • UI Components: Reusable UI components

State Management

  • Route State: Local state managed by TanStack Router
  • Server State: External state managed by TanStack Query
  • UI State: Local component state with React hooks
  • Auth State: Global authentication state with React Context

🚀 Build and Deployment Architecture

Vite Configuration

  • Development: Fast HMR and development server
  • Production: Optimized builds with code splitting
  • TypeScript: Full TypeScript integration
  • Path Aliases: Clean import paths with tsconfig paths

Build Process

  1. TypeScript Compilation: Type checking and compilation
  2. Bundle Creation: Optimized JavaScript bundles
  3. Asset Optimization: Image and asset optimization
  4. Code Splitting: Automatic route-based code splitting

Deployment Architecture

  • Static Assets: Pre-built static assets
  • Server Rendering: Server-side rendering support
  • API Routes: Serverless function deployment
  • Edge Deployment: CDN and edge optimization

🔧 Development Architecture

Development Tools

  • Hot Module Replacement: Fast development iteration
  • TypeScript Support: Full type checking and IntelliSense
  • ESLint Integration: Code quality and consistency
  • Prettier Integration: Code formatting

Debugging Architecture

  • Error Boundaries: Graceful error handling
  • DevTools Integration: TanStack Router and Query DevTools
  • Source Maps: Development and production source maps
  • Error Reporting: Comprehensive error reporting

📊 Performance Architecture

Performance Optimizations

  • Code Splitting: Automatic route-based splitting
  • Lazy Loading: On-demand component loading
  • Prefetching: Proactive data and component prefetching
  • Caching: Intelligent data and asset caching

Loading Strategies

  • Progressive Enhancement: Core functionality loads first
  • Streaming: Progressive content delivery
  • Skeleton Screens: Better perceived performance
  • Optimistic Updates: Immediate UI feedback

🛡️ Security Architecture

Security Measures

  • Input Validation: Server-side input validation
  • Type Safety: TypeScript prevents many security issues
  • Error Handling: Secure error messages (no sensitive data)
  • Authentication: Secure authentication implementation

Best Practices

  • Server-Side Validation: All inputs validated on server
  • Secure Headers: Security headers in responses
  • Error Boundaries: Graceful error handling
  • Dependency Updates: Regular security updates

🧪 Testing Architecture

Testing Strategy

  • Unit Tests: Component and utility testing
  • Integration Tests: Route and API testing
  • E2E Tests: End-to-end user flow testing
  • Type Testing: TypeScript compilation testing

Testing Tools

  • Jest: Unit testing framework
  • React Testing Library: Component testing
  • Playwright: E2E testing
  • TypeScript: Type checking as testing

📈 Scalability Architecture

Horizontal Scaling

  • Stateless Design: Server-side stateless architecture
  • CDN Ready: Static asset CDN optimization
  • Database Scaling: Database connection pooling
  • Microservices Ready: Service decomposition support

Vertical Scaling

  • Code Splitting: Reduced initial bundle size
  • Lazy Loading: On-demand resource loading
  • Caching: Multi-level caching strategy
  • Performance Monitoring: Application performance monitoring