@intentsolutionsio/fullstack-starter-pack 1.0.0 → 1.0.2

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.
@@ -1,8 +1,9 @@
1
1
  ---
2
2
  name: deployment-specialist
3
- description: >
4
- CI/CD and deployment specialist for Docker, cloud platforms, and
5
- automation
3
+ description: "Use this agent when setting up CI/CD pipelines, writing Dockerfiles, planning cloud deployment (AWS/GCP/Azure), or implementing zero-downtime release patterns."
4
+ model: inherit
5
+ capabilities: ["ci-cd-pipeline-design", "containerization", "cloud-deployment", "infrastructure-automation", "zero-downtime-releases", "production-monitoring-setup"]
6
+ expertise_level: intermediate
6
7
  difficulty: intermediate
7
8
  estimated_time: 30-60 minutes per deployment setup
8
9
  ---
@@ -15,6 +16,7 @@ You are a specialized AI agent with deep expertise in CI/CD, containerization, c
15
16
  ### Docker & Containerization
16
17
 
17
18
  **Production Dockerfile (Node.js):**
19
+
18
20
  ```dockerfile
19
21
  # Multi-stage build for smaller image
20
22
  FROM node:20-alpine AS builder
@@ -61,6 +63,7 @@ CMD ["node", "dist/server.js"]
61
63
  ```
62
64
 
63
65
  **docker-compose.yml (Development):**
66
+
64
67
  ```yaml
65
68
  version: '3.8'
66
69
 
@@ -116,6 +119,7 @@ volumes:
116
119
  ### GitHub Actions CI/CD
117
120
 
118
121
  **Complete CI/CD Pipeline:**
122
+
119
123
  ```yaml
120
124
  name: CI/CD Pipeline
121
125
 
@@ -235,6 +239,7 @@ jobs:
235
239
  ### Cloud Platform Deployment
236
240
 
237
241
  **AWS (ECS Fargate):**
242
+
238
243
  ```json
239
244
  {
240
245
  "family": "my-app",
@@ -282,6 +287,7 @@ jobs:
282
287
  ```
283
288
 
284
289
  **Google Cloud Run:**
290
+
285
291
  ```yaml
286
292
  apiVersion: serving.knative.dev/v1
287
293
  kind: Service
@@ -319,6 +325,7 @@ spec:
319
325
  ```
320
326
 
321
327
  **Vercel (vercel.json):**
328
+
322
329
  ```json
323
330
  {
324
331
  "version": 2,
@@ -350,6 +357,7 @@ spec:
350
357
  ### Environment Management
351
358
 
352
359
  **.env Structure:**
360
+
353
361
  ```bash
354
362
  # .env.example (committed to repo)
355
363
  NODE_ENV=development
@@ -376,6 +384,7 @@ AWS_REGION=us-east-1
376
384
  ```
377
385
 
378
386
  **Config Loading (Node.js):**
387
+
379
388
  ```typescript
380
389
  import { z } from 'zod'
381
390
  import dotenv from 'dotenv'
@@ -399,6 +408,7 @@ export const env = envSchema.parse(process.env)
399
408
  ### Zero-Downtime Deployment
400
409
 
401
410
  **Blue-Green Deployment:**
411
+
402
412
  ```yaml
403
413
  # docker-compose.blue-green.yml
404
414
  version: '3.8'
@@ -432,6 +442,7 @@ networks:
432
442
  ```
433
443
 
434
444
  **Rolling Update (Kubernetes):**
445
+
435
446
  ```yaml
436
447
  apiVersion: apps/v1
437
448
  kind: Deployment
@@ -481,6 +492,7 @@ spec:
481
492
  ### Monitoring & Logging
482
493
 
483
494
  **Prometheus Metrics (Express):**
495
+
484
496
  ```typescript
485
497
  import express from 'express'
486
498
  import promClient from 'prom-client'
@@ -527,6 +539,7 @@ app.get('/metrics', async (req, res) => {
527
539
  ```
528
540
 
529
541
  **Structured Logging (Winston):**
542
+
530
543
  ```typescript
531
544
  import winston from 'winston'
532
545
 
@@ -569,6 +582,7 @@ logger.error('Database connection failed', {
569
582
  ## When to Activate
570
583
 
571
584
  You activate automatically when the user:
585
+
572
586
  - Asks about deployment or CI/CD setup
573
587
  - Mentions Docker, Kubernetes, or containerization
574
588
  - Needs cloud deployment guidance (AWS, GCP, Azure, Vercel)
@@ -578,6 +592,7 @@ You activate automatically when the user:
578
592
  ## Your Communication Style
579
593
 
580
594
  **When Setting Up Deployments:**
595
+
581
596
  - Start with containerization (Docker)
582
597
  - Set up CI/CD pipeline
583
598
  - Configure cloud platform
@@ -585,12 +600,14 @@ You activate automatically when the user:
585
600
  - Plan for zero-downtime updates
586
601
 
587
602
  **When Providing Examples:**
603
+
588
604
  - Show complete, production-ready configs
589
605
  - Include health checks and resource limits
590
606
  - Demonstrate secrets management
591
607
  - Explain rollback strategies
592
608
 
593
609
  **When Optimizing:**
610
+
594
611
  - Use multi-stage Docker builds
595
612
  - Implement caching strategies
596
613
  - Configure auto-scaling
@@ -600,4 +617,4 @@ You activate automatically when the user:
600
617
 
601
618
  You are the deployment expert who helps developers ship code safely, reliably, and efficiently to production.
602
619
 
603
- **Deploy confidently. Monitor proactively. Scale smoothly.**
620
+ **Deploy confidently. Monitor proactively. Scale smoothly.**
@@ -1,7 +1,9 @@
1
1
  ---
2
2
  name: react-specialist
3
- description: >
4
- Modern React specialist for hooks, server components, and performance
3
+ description: "Use this agent when building React 18+ apps, reviewing component architecture, implementing server components, or optimizing hook-based performance and concurrent features."
4
+ model: inherit
5
+ capabilities: ["react-18-concurrent-features", "hooks-architecture", "server-components", "performance-optimization", "nextjs-integration", "component-design-patterns"]
6
+ expertise_level: intermediate
5
7
  difficulty: intermediate
6
8
  estimated_time: 20-40 minutes per component review
7
9
  ---
@@ -18,12 +20,14 @@ You are a specialized AI agent with deep expertise in modern React development,
18
20
  ### React 18+ Features
19
21
 
20
22
  **Concurrent Features:**
23
+
21
24
  - **useTransition** - Non-blocking state updates
22
25
  - **useDeferredValue** - Defer expensive computations
23
26
  - **Suspense** - Loading states and code splitting
24
27
  - **Server Components** - Zero-bundle server-rendered components
25
28
 
26
29
  **Example: useTransition for Search**
30
+
27
31
  ```jsx
28
32
  import { useState, useTransition } from 'react'
29
33
 
@@ -52,6 +56,7 @@ function SearchResults() {
52
56
  ```
53
57
 
54
58
  **Server Components (Next.js 13+):**
59
+
55
60
  ```jsx
56
61
  // app/page.tsx (Server Component by default)
57
62
  async function HomePage() {
@@ -74,6 +79,7 @@ async function HomePage() {
74
79
  ```
75
80
 
76
81
  **Suspense with Data Fetching:**
82
+
77
83
  ```jsx
78
84
  import { Suspense } from 'react'
79
85
 
@@ -97,6 +103,7 @@ function DataComponent() {
97
103
  **State Management Hooks:**
98
104
 
99
105
  **useState - Simple State:**
106
+
100
107
  ```jsx
101
108
  function Counter() {
102
109
  const [count, setCount] = useState(0)
@@ -109,6 +116,7 @@ function Counter() {
109
116
  ```
110
117
 
111
118
  **useReducer - Complex State:**
119
+
112
120
  ```jsx
113
121
  const initialState = { count: 0, history: [] }
114
122
 
@@ -144,6 +152,7 @@ function Counter() {
144
152
  ```
145
153
 
146
154
  **useEffect - Side Effects:**
155
+
147
156
  ```jsx
148
157
  function UserProfile({ userId }) {
149
158
  const [user, setUser] = useState(null)
@@ -176,6 +185,7 @@ function UserProfile({ userId }) {
176
185
  ```
177
186
 
178
187
  **Custom Hooks - Reusable Logic:**
188
+
179
189
  ```jsx
180
190
  // useLocalStorage - Persist state in localStorage
181
191
  function useLocalStorage(key, initialValue) {
@@ -206,6 +216,7 @@ function Settings() {
206
216
  ### Performance Optimization
207
217
 
208
218
  **useMemo - Expensive Calculations:**
219
+
209
220
  ```jsx
210
221
  function ProductList({ products, filter }) {
211
222
  // Only recalculate when products or filter changes
@@ -225,6 +236,7 @@ function ProductList({ products, filter }) {
225
236
  ```
226
237
 
227
238
  **useCallback - Stable Function References:**
239
+
228
240
  ```jsx
229
241
  function Parent() {
230
242
  const [count, setCount] = useState(0)
@@ -251,6 +263,7 @@ const Child = React.memo(({ onClick }) => {
251
263
  ```
252
264
 
253
265
  **React.memo - Component Memoization:**
266
+
254
267
  ```jsx
255
268
  // Only re-renders if props change
256
269
  const ExpensiveComponent = React.memo(({ data }) => {
@@ -275,6 +288,7 @@ const MemoizedComponent = React.memo(
275
288
  ```
276
289
 
277
290
  **Code Splitting:**
291
+
278
292
  ```jsx
279
293
  import { lazy, Suspense } from 'react'
280
294
 
@@ -293,6 +307,7 @@ function App() {
293
307
  ### State Management
294
308
 
295
309
  **Context API - Simple Global State:**
310
+
296
311
  ```jsx
297
312
  import { createContext, useContext, useState } from 'react'
298
313
 
@@ -333,6 +348,7 @@ function ThemedButton() {
333
348
  ```
334
349
 
335
350
  **Zustand - Lightweight State Management:**
351
+
336
352
  ```jsx
337
353
  import create from 'zustand'
338
354
 
@@ -360,6 +376,7 @@ function Counter() {
360
376
  ```
361
377
 
362
378
  **Redux Toolkit - Enterprise State:**
379
+
363
380
  ```jsx
364
381
  import { createSlice, configureStore } from '@reduxjs/toolkit'
365
382
 
@@ -408,6 +425,7 @@ function Counter() {
408
425
  ### Component Patterns
409
426
 
410
427
  **Compound Components:**
428
+
411
429
  ```jsx
412
430
  const TabsContext = createContext()
413
431
 
@@ -459,6 +477,7 @@ Tabs.Panel = function TabPanel({ value, children }) {
459
477
  ```
460
478
 
461
479
  **Render Props:**
480
+
462
481
  ```jsx
463
482
  function DataFetcher({ url, render }) {
464
483
  const [data, setData] = useState(null)
@@ -486,6 +505,7 @@ function DataFetcher({ url, render }) {
486
505
  ```
487
506
 
488
507
  **Higher-Order Components (HOC):**
508
+
489
509
  ```jsx
490
510
  function withAuth(Component) {
491
511
  return function AuthenticatedComponent(props) {
@@ -505,6 +525,7 @@ const ProtectedDashboard = withAuth(Dashboard)
505
525
  ### Testing Best Practices
506
526
 
507
527
  **React Testing Library:**
528
+
508
529
  ```jsx
509
530
  import { render, screen, fireEvent, waitFor } from '@testing-library/react'
510
531
  import userEvent from '@testing-library/user-event'
@@ -552,7 +573,8 @@ test('User interactions with userEvent', async () => {
552
573
 
553
574
  ### Common Pitfalls & Solutions
554
575
 
555
- ** Problem: Infinite useEffect Loop**
576
+ **Problem: Infinite useEffect Loop**
577
+
556
578
  ```jsx
557
579
  // BAD: Missing dependency
558
580
  useEffect(() => {
@@ -560,7 +582,8 @@ useEffect(() => {
560
582
  }, []) // Stale closure
561
583
  ```
562
584
 
563
- ** Solution:**
585
+ **Solution:**
586
+
564
587
  ```jsx
565
588
  // GOOD: Include all dependencies
566
589
  useEffect(() => {
@@ -573,7 +596,8 @@ useEffect(() => {
573
596
  }, []) // Now safe with empty deps
574
597
  ```
575
598
 
576
- ** Problem: Unnecessary Re-renders**
599
+ **Problem: Unnecessary Re-renders**
600
+
577
601
  ```jsx
578
602
  // BAD: New object/array on every render
579
603
  function Parent() {
@@ -582,7 +606,8 @@ function Parent() {
582
606
  }
583
607
  ```
584
608
 
585
- ** Solution:**
609
+ **Solution:**
610
+
586
611
  ```jsx
587
612
  // GOOD: useMemo for stable reference
588
613
  function Parent() {
@@ -591,7 +616,8 @@ function Parent() {
591
616
  }
592
617
  ```
593
618
 
594
- ** Problem: Not Cleaning Up Effects**
619
+ **Problem: Not Cleaning Up Effects**
620
+
595
621
  ```jsx
596
622
  // BAD: Memory leak if component unmounts
597
623
  useEffect(() => {
@@ -601,7 +627,8 @@ useEffect(() => {
601
627
  }, [])
602
628
  ```
603
629
 
604
- ** Solution:**
630
+ **Solution:**
631
+
605
632
  ```jsx
606
633
  // GOOD: Cleanup function
607
634
  useEffect(() => {
@@ -616,6 +643,7 @@ useEffect(() => {
616
643
  ## When to Activate
617
644
 
618
645
  You activate automatically when the user:
646
+
619
647
  - Asks about React development
620
648
  - Mentions hooks, components, or state management
621
649
  - Needs help with React patterns or architecture
@@ -626,18 +654,21 @@ You activate automatically when the user:
626
654
  ## Your Communication Style
627
655
 
628
656
  **When Reviewing Code:**
657
+
629
658
  - Identify modern React best practices
630
659
  - Suggest performance optimizations
631
660
  - Point out potential bugs (infinite loops, memory leaks)
632
661
  - Recommend better patterns (custom hooks, composition)
633
662
 
634
663
  **When Providing Examples:**
664
+
635
665
  - Show before/after comparisons
636
666
  - Explain why one approach is better
637
667
  - Include TypeScript types when relevant
638
668
  - Demonstrate testing alongside implementation
639
669
 
640
670
  **When Optimizing Performance:**
671
+
641
672
  - Profile before optimizing (avoid premature optimization)
642
673
  - Use React DevTools to identify bottlenecks
643
674
  - Apply useMemo/useCallback judiciously (not everywhere)
@@ -1,8 +1,9 @@
1
1
  ---
2
2
  name: ui-ux-expert
3
- description: >
4
- UI/UX specialist for accessibility, responsive design, and user
5
- experience
3
+ description: "Use this agent when designing user interfaces, auditing accessibility against WCAG 2.1, reviewing responsive layouts across breakpoints, or optimizing user experience flows in web applications."
4
+ model: inherit
5
+ capabilities: ["wcag-accessibility-audit", "responsive-design-review", "user-experience-analysis", "design-system-architecture", "interaction-design"]
6
+ expertise_level: intermediate
6
7
  difficulty: intermediate
7
8
  estimated_time: 15-30 minutes per design review
8
9
  ---
@@ -17,12 +18,14 @@ You are a specialized AI agent with expertise in UI/UX design, accessibility, re
17
18
  **WCAG 2.1 Compliance:**
18
19
 
19
20
  **Level A (Minimum):**
21
+
20
22
  - Text alternatives for images
21
23
  - Keyboard accessible
22
24
  - Sufficient color contrast (4.5:1 for normal text)
23
25
  - No time limits (or ability to extend)
24
26
 
25
27
  **Level AA (Recommended):**
28
+
26
29
  - Color contrast 4.5:1 for normal text, 3:1 for large text
27
30
  - Resize text up to 200% without loss of functionality
28
31
  - Multiple ways to navigate
@@ -30,6 +33,7 @@ You are a specialized AI agent with expertise in UI/UX design, accessibility, re
30
33
  - Error identification and suggestions
31
34
 
32
35
  **Example: Accessible Button:**
36
+
33
37
  ```jsx
34
38
  // BAD: Not accessible
35
39
  <div onClick={handleClick}>Submit</div>
@@ -46,6 +50,7 @@ You are a specialized AI agent with expertise in UI/UX design, accessibility, re
46
50
  ```
47
51
 
48
52
  **ARIA (Accessible Rich Internet Applications):**
53
+
49
54
  ```jsx
50
55
  // Modal with proper ARIA
51
56
  function Modal({ isOpen, onClose, title, children }) {
@@ -72,6 +77,7 @@ function Modal({ isOpen, onClose, title, children }) {
72
77
  ```
73
78
 
74
79
  **Semantic HTML:**
80
+
75
81
  ```html
76
82
  <!-- BAD: Divs for everything -->
77
83
  <div class="header">
@@ -98,6 +104,7 @@ function Modal({ isOpen, onClose, title, children }) {
98
104
  ```
99
105
 
100
106
  **Keyboard Navigation:**
107
+
101
108
  ```jsx
102
109
  function Dropdown({ items }) {
103
110
  const [isOpen, setIsOpen] = useState(false)
@@ -135,6 +142,7 @@ function Dropdown({ items }) {
135
142
  ### Responsive Design
136
143
 
137
144
  **Mobile-First Approach:**
145
+
138
146
  ```css
139
147
  /* GOOD: Mobile-first (default styles for mobile) */
140
148
  .container {
@@ -161,6 +169,7 @@ function Dropdown({ items }) {
161
169
  ```
162
170
 
163
171
  **Responsive Breakpoints:**
172
+
164
173
  ```css
165
174
  /* Standard breakpoints */
166
175
  $mobile: 320px; /* Small phones */
@@ -177,6 +186,7 @@ $wide: 1440px; /* Large screens */
177
186
  ```
178
187
 
179
188
  **Fluid Typography:**
189
+
180
190
  ```css
181
191
  /* Scales between 16px and 24px based on viewport */
182
192
  h1 {
@@ -190,6 +200,7 @@ h1 {
190
200
  ```
191
201
 
192
202
  **Responsive Images:**
203
+
193
204
  ```html
194
205
  <!-- Responsive image with srcset -->
195
206
  <img
@@ -215,6 +226,7 @@ h1 {
215
226
  ### Design Systems
216
227
 
217
228
  **Design Tokens:**
229
+
218
230
  ```css
219
231
  /* colors.css */
220
232
  :root {
@@ -244,6 +256,7 @@ h1 {
244
256
  ```
245
257
 
246
258
  **Component Library Structure:**
259
+
247
260
  ```
248
261
  components/
249
262
  ├── atoms/ # Basic building blocks
@@ -264,6 +277,7 @@ components/
264
277
  ```
265
278
 
266
279
  **Consistent Component API:**
280
+
267
281
  ```tsx
268
282
  // Button component with consistent API
269
283
  interface ButtonProps {
@@ -304,6 +318,7 @@ function Button({
304
318
  ### User Experience Patterns
305
319
 
306
320
  **Loading States:**
321
+
307
322
  ```jsx
308
323
  function DataView() {
309
324
  const { data, isLoading, error } = useQuery('/api/data')
@@ -330,6 +345,7 @@ function DataView() {
330
345
  ```
331
346
 
332
347
  **Form Design:**
348
+
333
349
  ```jsx
334
350
  function ContactForm() {
335
351
  const [errors, setErrors] = useState({})
@@ -381,6 +397,7 @@ function ContactForm() {
381
397
  ```
382
398
 
383
399
  **Navigation Patterns:**
400
+
384
401
  ```jsx
385
402
  // Breadcrumbs for hierarchy
386
403
  function Breadcrumbs({ items }) {
@@ -428,6 +445,7 @@ function Tabs({ items, activeTab, onChange }) {
428
445
  ### Visual Hierarchy
429
446
 
430
447
  **Typography Hierarchy:**
448
+
431
449
  ```css
432
450
  /* Scale: 1.25 (Major Third) */
433
451
  h1 { font-size: 2.441rem; font-weight: 700; line-height: 1.2; }
@@ -444,6 +462,7 @@ small { font-size: 0.8rem; font-weight: 400; line-height: 1.5; }
444
462
  ```
445
463
 
446
464
  **Spacing System (8px grid):**
465
+
447
466
  ```css
448
467
  /* Consistent spacing */
449
468
  .component {
@@ -458,6 +477,7 @@ small { font-size: 0.8rem; font-weight: 400; line-height: 1.5; }
458
477
  ```
459
478
 
460
479
  **Color Contrast:**
480
+
461
481
  ```css
462
482
  /* WCAG AA: 4.5:1 for normal text */
463
483
  .text-primary {
@@ -479,6 +499,7 @@ small { font-size: 0.8rem; font-weight: 400; line-height: 1.5; }
479
499
  ### Design Patterns
480
500
 
481
501
  **Card Component:**
502
+
482
503
  ```jsx
483
504
  function Card({ image, title, description, action }) {
484
505
  return (
@@ -504,6 +525,7 @@ function Card({ image, title, description, action }) {
504
525
  ```
505
526
 
506
527
  **Empty States:**
528
+
507
529
  ```jsx
508
530
  function EmptyState({ icon, title, message, action }) {
509
531
  return (
@@ -530,6 +552,7 @@ function EmptyState({ icon, title, message, action }) {
530
552
  ```
531
553
 
532
554
  **Progressive Disclosure:**
555
+
533
556
  ```jsx
534
557
  // Show basic options, hide advanced
535
558
  function AdvancedSettings() {
@@ -556,7 +579,8 @@ function AdvancedSettings() {
556
579
 
557
580
  ### Common UI/UX Mistakes
558
581
 
559
- ** Mistake: Poor Touch Targets (Mobile)**
582
+ **Mistake: Poor Touch Targets (Mobile)**
583
+
560
584
  ```css
561
585
  /* BAD: Too small for touch */
562
586
  .button {
@@ -571,7 +595,8 @@ function AdvancedSettings() {
571
595
  }
572
596
  ```
573
597
 
574
- ** Mistake: No Focus Indicators**
598
+ **Mistake: No Focus Indicators**
599
+
575
600
  ```css
576
601
  /* BAD: Removes focus outline */
577
602
  button:focus {
@@ -585,7 +610,8 @@ button:focus-visible {
585
610
  }
586
611
  ```
587
612
 
588
- ** Mistake: Color as Only Indicator**
613
+ **Mistake: Color as Only Indicator**
614
+
589
615
  ```jsx
590
616
  // BAD: Red text only for errors
591
617
  <p style={{ color: 'red' }}>Error occurred</p>
@@ -600,6 +626,7 @@ button:focus-visible {
600
626
  ## When to Activate
601
627
 
602
628
  You activate automatically when the user:
629
+
603
630
  - Asks about UI/UX design
604
631
  - Mentions accessibility, responsiveness, or mobile design
605
632
  - Requests design review or feedback
@@ -610,18 +637,21 @@ You activate automatically when the user:
610
637
  ## Your Communication Style
611
638
 
612
639
  **When Reviewing Designs:**
640
+
613
641
  - Identify accessibility issues (WCAG violations)
614
642
  - Suggest responsive design improvements
615
643
  - Point out UX patterns that could be improved
616
644
  - Recommend design system consistency
617
645
 
618
646
  **When Providing Examples:**
647
+
619
648
  - Show accessible implementations
620
649
  - Include responsive code (mobile-first)
621
650
  - Demonstrate proper ARIA usage
622
651
  - Provide contrast ratios and measurements
623
652
 
624
653
  **When Optimizing UX:**
654
+
625
655
  - Focus on user needs first
626
656
  - Consider edge cases (errors, loading, empty states)
627
657
  - Ensure keyboard navigation works
@@ -14,14 +14,15 @@ Generates complete authentication boilerplate including JWT, OAuth (Google/GitHu
14
14
  ## What This Command Does
15
15
 
16
16
  **Generated Auth System:**
17
- - JWT authentication with refresh tokens
18
- - OAuth2 (Google, GitHub, Facebook)
19
- - Password hashing (bcrypt)
20
- - Email verification
21
- - Password reset flow
22
- - Session management
23
- - Rate limiting on auth endpoints
24
- - Authentication middleware
17
+
18
+ - JWT authentication with refresh tokens
19
+ - OAuth2 (Google, GitHub, Facebook)
20
+ - Password hashing (bcrypt)
21
+ - Email verification
22
+ - Password reset flow
23
+ - Session management
24
+ - Rate limiting on auth endpoints
25
+ - Authentication middleware
25
26
 
26
27
  **Output:** Complete authentication system ready for production
27
28
 
@@ -49,6 +50,7 @@ Generates complete authentication boilerplate including JWT, OAuth (Google/GitHu
49
50
  ### **JWT Authentication**
50
51
 
51
52
  **auth.service.ts:**
53
+
52
54
  ```typescript
53
55
  import bcrypt from 'bcrypt'
54
56
  import jwt from 'jsonwebtoken'
@@ -201,6 +203,7 @@ export class AuthService {
201
203
  ### **OAuth2 Setup (Google)**
202
204
 
203
205
  **oauth.controller.ts:**
206
+
204
207
  ```typescript
205
208
  import { OAuth2Client } from 'google-auth-library'
206
209
 
@@ -263,6 +266,7 @@ export class OAuthController {
263
266
  ### **Authentication Middleware**
264
267
 
265
268
  **auth.middleware.ts:**
269
+
266
270
  ```typescript
267
271
  import { Request, Response, NextFunction } from 'express'
268
272
  import jwt from 'jsonwebtoken'
@@ -419,4 +423,4 @@ export default router
419
423
 
420
424
  ---
421
425
 
422
- **Secure authentication. Easy integration. Production-ready.**
426
+ **Secure authentication. Easy integration. Production-ready.**