|
4
|
"sourcesContent": ["import express, { type Request, Response, NextFunction } from \"express\";\nimport { registerRoutes } from \"./routes\";\nimport { setupVite, serveStatic, log } from \"./vite\";\nimport { seedDatabase } from \"./seed-data\";\nimport { seedGuides } from \"./seed-guides\";\nimport { setupAuth } from \"./auth\";\n\nconst app = express();\napp.use(express.json());\napp.use(express.urlencoded({ extended: false }));\napp.use(\"/uploads\", express.static(\"uploads\"));\n\nsetupAuth(app);\n\napp.use((req, res, next) => {\n const start = Date.now();\n const path = req.path;\n let capturedJsonResponse: Record<string, any> | undefined = undefined;\n\n const originalResJson = res.json;\n res.json = function (bodyJson, ...args) {\n capturedJsonResponse = bodyJson;\n return originalResJson.apply(res, [bodyJson, ...args]);\n };\n\n res.on(\"finish\", () => {\n const duration = Date.now() - start;\n if (path.startsWith(\"/api\")) {\n let logLine = `${req.method} ${path} ${res.statusCode} in ${duration}ms`;\n if (capturedJsonResponse) {\n logLine += ` :: ${JSON.stringify(capturedJsonResponse)}`;\n }\n\n if (logLine.length > 80) {\n logLine = logLine.slice(0, 79) + \"\u2026\";\n }\n\n log(logLine);\n }\n });\n\n next();\n});\n\n(async () => {\n const server = await registerRoutes(app);\n \n // Seed database in background after server starts (non-blocking)\n setImmediate(async () => {\n try {\n await seedDatabase();\n await seedGuides();\n } catch (error) {\n console.error(\"Error seeding database:\", error);\n }\n });\n\n app.use((err: any, _req: Request, res: Response, _next: NextFunction) => {\n const status = err.status || err.statusCode || 500;\n const message = err.message || \"Internal Server Error\";\n\n res.status(status).json({ message });\n throw err;\n });\n\n // importantly only setup vite in development and after\n // setting up all the other routes so the catch-all route\n // doesn't interfere with the other routes\n if (app.get(\"env\") === \"development\") {\n await setupVite(app, server);\n } else {\n serveStatic(app);\n }\n\n // ALWAYS serve the app on the port specified in the environment variable PORT\n // Other ports are firewalled. Default to 5000 if not specified.\n // this serves both the API and the client.\n // It is the only port that is not firewalled.\n const port = parseInt(process.env.PORT || '5000', 10);\n server.listen({\n port,\n host: '0.0.0.0', // Important for deployment - allows external connections\n reusePort: true,\n }, () => {\n log(`serving on port ${port}`);\n });\n})();\n", "import type { Express, RequestHandler } from \"express\";\nimport { createServer, type Server } from \"http\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport AdmZip from \"adm-zip\";\nimport { storage } from \"./storage\";\nimport { insertRepairGuideSchema, insertTroubleshootingFlowSchema, insertDeviceComponentSchema, insertFavoriteSchema } from \"@shared/schema\";\nimport { TECHNICAL_MANUALS, getManualById, getManualsByCategory } from \"../shared/technical-manuals\";\nimport { requireAdmin } from \"./middleware/adminAuth\";\nimport { isAuthenticated } from \"./auth\";\nimport { upload } from \"./middleware/upload\";\nimport { runAIDiagnostics, runTechnicalAIChat, type DiagnosticsRequest, type TechnicalChatRequest } from \"./ai-diagnostics\";\n\nexport async function registerRoutes(app: Express): Promise<Server> {\n // System Health & Version Connectivity Check Endpoint\n app.get(\"/api/health\", (_req, res) => {\n res.json({\n status: \"online\",\n version: \"2026.4.2\",\n guidesCount: 624,\n manualsCount: TECHNICAL_MANUALS.length,\n timestamp: new Date().toISOString()\n });\n });\n\n app.get(\"/api/version\", (_req, res) => {\n res.json({\n version: \"2026.4.2\",\n status: \"operational\",\n mode: process.env.NODE_ENV || \"development\",\n features: {\n aiAssistant: true,\n offlineSync: true,\n totalGuides: 624,\n totalManuals: 8\n }\n });\n });\n\n // Technical Manuals Endpoints\n app.get(\"/api/technical-manuals\", (req, res) => {\n try {\n res.setHeader(\"Cache-Control\", \"public, max-age=120, stale-while-revalidate=600\");\n const { category } = req.query;\n if (category && typeof category === \"string\") {\n return res.json(getManualsByCategory(category));\n }\n res.json(TECHNICAL_MANUALS);\n } catch (error) {\n console.error(\"Error fetching technical manuals:\", error);\n res.status(500).json({ message: \"Failed to fetch technical manuals\" });\n }\n });\n\n app.get(\"/api/technical-manuals/:id\", (req, res) => {\n try {\n const { id } = req.params;\n const manual = getManualById(id);\n if (!manual) {\n return res.status(404).json({ message: \"Technical manual not found\" });\n }\n res.json(manual);\n } catch (error) {\n console.error(\"Error fetching manual by id:\", error);\n res.status(500).json({ message: \"Failed to fetch technical manual\" });\n }\n });\n\n // Technical AI Conversational Chat Endpoint (Grounding in 624 Guides & Manuals)\n app.post(\"/api/ai/chat\", async (req, res) => {\n try {\n const { messages, deviceContext, categoryContext } = req.body;\n if (!messages || !Array.isArray(messages) || messages.length === 0) {\n return res.status(400).json({ message: \"Valid messages array is required.\" });\n }\n\n const chatPayload: TechnicalChatRequest = {\n messages,\n deviceContext,\n categoryContext\n };\n\n const reply = await runTechnicalAIChat(chatPayload);\n res.json(reply);\n } catch (error) {\n console.error(\"Technical AI Chat Error:\", error);\n res.status(500).json({ message: \"An unexpected error occurred during AI chat.\" });\n }\n });\n\n // AI Diagnostics Assistant Endpoint\n app.post(\"/api/ai/troubleshoot\", async (req, res) => {\n try {\n const { symptoms, deviceType, brand, model, os, category, errorCode } = req.body;\n if (!symptoms || typeof symptoms !== \"string\" || symptoms.trim().length === 0) {\n return res.status(400).json({ message: \"Symptoms or issue description is required.\" });\n }\n\n const diagnosticPayload: DiagnosticsRequest = {\n symptoms: symptoms.trim(),\n deviceType: deviceType || \"all\",\n brand: brand || \"\",\n model: model || \"\",\n os: os || \"\",\n category: category || \"all\",\n errorCode: errorCode || \"\"\n };\n\n const result = await runAIDiagnostics(diagnosticPayload);\n res.json(result);\n } catch (error) {\n console.error(\"AI Diagnostics Endpoint Error:\", error);\n res.status(500).json({ message: \"An unexpected error occurred during diagnostics.\" });\n }\n });\n\n // Auth & Profile routes\n app.get('/api/auth/user', isAuthenticated, (req, res) => {\n res.json(req.user);\n });\n\n app.patch('/api/user/profile', isAuthenticated, async (req, res) => {\n try {\n const updatedUser = await storage.updateUser(req.user!.id, req.body);\n res.json(updatedUser);\n } catch (error) {\n res.status(500).json({ message: \"Failed to update profile\" });\n }\n });\n\n app.post('/api/user/profile/photo', isAuthenticated, upload.single('photo'), async (req, res) => {\n try {\n if (!req.file) {\n return res.status(400).json({ message: \"No file uploaded\" });\n }\n\n const photoUrl = `/uploads/profiles/${req.file.filename}`;\n const updatedUser = await storage.updateUser(req.user!.id, { profileImageUrl: photoUrl });\n res.json(updatedUser);\n } catch (error) {\n res.status(500).json({ message: \"Failed to upload photo\" });\n }\n });\n\n // Favorites routes\n app.get('/api/favorites', isAuthenticated, async (req: any, res) => {\n try {\n const userId = req.user.id;\n const favorites = await storage.getUserFavorites(userId);\n res.json(favorites);\n } catch (error) {\n console.error(\"Error fetching favorites:\", error);\n res.status(500).json({ message: \"Failed to fetch favorites\" });\n }\n });\n\n app.post('/api/favorites', isAuthenticated, async (req: any, res) => {\n try {\n const userId = req.user.id;\n const favoriteData = insertFavoriteSchema.parse(req.body);\n const favorite = await storage.addToFavorites(userId, favoriteData);\n res.json(favorite);\n } catch (error) {\n console.error(\"Error adding favorite:\", error);\n res.status(500).json({ message: \"Failed to add favorite\" });\n }\n });\n\n app.delete('/api/favorites/:itemId/:itemType', isAuthenticated, async (req: any, res) => {\n try {\n const userId = req.user.id;\n const { itemId, itemType } = req.params;\n await storage.removeFromFavorites(userId, itemId, itemType);\n res.json({ success: true });\n } catch (error) {\n console.error(\"Error removing favorite:\", error);\n res.status(500).json({ message: \"Failed to remove favorite\" });\n }\n });\n\n app.get('/api/favorites/check/:itemId/:itemType', isAuthenticated, async (req: any, res) => {\n try {\n const userId = req.user.id;\n const { itemId, itemType } = req.params;\n const isFavorited = await storage.isFavorited(userId, itemId, itemType);\n res.json({ isFavorited });\n } catch (error) {\n console.error(\"Error checking favorite:\", error);\n res.status(500).json({ message: \"Failed to check favorite status\" });\n }\n });\n // Repair Guides\n app.get(\"/api/repair-guides\", async (req, res) => {\n try {\n res.setHeader(\"Cache-Control\", \"public, max-age=60, stale-while-revalidate=300\");\n const { deviceType, category, difficulty } = req.query;\n const guides = await storage.getRepairGuides({\n deviceType: deviceType as string,\n category: category as string,\n difficulty: difficulty as string,\n });\n res.json(guides);\n } catch (error) {\n res.status(500).json({ message: \"Failed to fetch repair guides\" });\n }\n });\n\n app.get(\"/api/repair-guides/search\", async (req, res) => {\n try {\n const { q } = req.query;\n if (!q || typeof q !== \"string\") {\n return res.status(400).json({ message: \"Search query is required\" });\n }\n const guides = await storage.searchRepairGuides(q);\n res.json(guides);\n } catch (error) {\n res.status(500).json({ message: \"Failed to search repair guides\" });\n }\n });\n\n app.get(\"/api/repair-guides/:id\", async (req, res) => {\n try {\n const guide = await storage.getRepairGuide(req.params.id);\n if (!guide) {\n return res.status(404).json({ message: \"Repair guide not found\" });\n }\n // Increment view count when guide is viewed\n await storage.updateViewCount(req.params.id);\n res.json(guide);\n } catch (error) {\n res.status(500).json({ message: \"Failed to fetch repair guide\" });\n }\n });\n\n app.post(\"/api/repair-guides\", async (req, res) => {\n try {\n const validatedData = insertRepairGuideSchema.parse(req.body);\n const guide = await storage.createRepairGuide(validatedData);\n res.status(201).json(guide);\n } catch (error) {\n res.status(400).json({ message: \"Invalid repair guide data\" });\n }\n });\n\n // User-created guides endpoint\n app.post(\"/api/user-guides\", async (req, res) => {\n try {\n const validatedData = insertRepairGuideSchema.parse(req.body);\n const guide = await storage.createUserGuide(validatedData);\n res.status(201).json(guide);\n } catch (error) {\n console.error(\"Error creating user guide:\", error);\n res.status(400).json({ message: \"Invalid user guide data\" });\n }\n });\n\n // Track download for a specific guide\n app.post(\"/api/repair-guides/:id/download\", async (req, res) => {\n try {\n const guide = await storage.getRepairGuide(req.params.id);\n if (!guide) {\n return res.status(404).json({ message: \"Repair guide not found\" });\n }\n // Increment download count when guide is downloaded\n await storage.updateDownloadCount(req.params.id);\n res.json({ success: true, message: \"Download tracked\" });\n } catch (error) {\n res.status(500).json({ message: \"Failed to track download\" });\n }\n });\n\n // Version endpoint\n app.get(\"/api/version\", async (req, res) => {\n try {\n const versionInfo = {\n version: \"1.0.0\",\n name: \"JCR Guide Pro\",\n build: \"2025.08.18\",\n release: \"Major Release\"\n };\n res.json(versionInfo);\n } catch (error) {\n res.status(500).json({ message: \"Failed to fetch version info\" });\n }\n });\n\n // Admin routes\n app.get(\"/api/admin/users\", requireAdmin, async (req, res) => {\n try {\n res.json({ message: \"Admin access confirmed\", adminEmail: req.adminUser?.email });\n } catch (error) {\n res.status(500).json({ message: \"Failed to fetch admin data\" });\n }\n });\n\n app.get(\"/api/admin/stats\", requireAdmin, async (req, res) => {\n try {\n const guides = await storage.getRepairGuides();\n const totalViews = guides.reduce((sum, guide) => sum + (guide.viewCount || 0), 0);\n const totalDownloads = guides.reduce((sum, guide) => sum + (guide.downloadCount || 0), 0);\n \n res.json({\n totalGuides: guides.length,\n totalViews,\n totalDownloads,\n adminUser: req.adminUser?.email\n });\n } catch (error) {\n res.status(500).json({ message: \"Failed to fetch admin stats\" });\n }\n });\n\n // Bulk download endpoint\n app.post(\"/api/download/bulk\", async (req, res) => {\n try {\n const { type, filters } = req.body;\n let data: any[] = [];\n\n switch (type) {\n case 'repair-guides':\n data = await storage.getRepairGuides(filters || {});\n break;\n case 'troubleshooting-flows':\n data = await storage.getTroubleshootingFlows();\n break;\n case 'device-components':\n data = await storage.getDeviceComponents();\n break;\n case 'complete':\n const [guides, flows, components] = await Promise.all([\n storage.getRepairGuides({}),\n storage.getTroubleshootingFlows(),\n storage.getDeviceComponents()\n ]);\n const exportData = {\n exportInfo: {\n title: 'JCR Guide Pro Complete Export',\n version: '1.0',\n exportedAt: new Date().toISOString(),\n totalItems: guides.length + flows.length + components.length\n },\n repairGuides: guides,\n troubleshootingFlows: flows,\n deviceComponents: components\n };\n data = exportData as any;\n break;\n default:\n return res.status(400).json({ message: \"Invalid download type\" });\n }\n\n res.json({\n success: true,\n data,\n count: Array.isArray(data) ? data.length : Object.keys(data).length - 1,\n timestamp: new Date().toISOString()\n });\n } catch (error) {\n console.error(\"Bulk download error:\", error);\n res.status(500).json({ message: \"Failed to prepare bulk download\" });\n }\n });\n\n app.patch(\"/api/repair-guides/:id/bookmark\", async (req, res) => {\n try {\n const guide = await storage.toggleBookmark(req.params.id);\n if (!guide) {\n return res.status(404).json({ message: \"Repair guide not found\" });\n }\n res.json(guide);\n } catch (error) {\n res.status(500).json({ message: \"Failed to toggle bookmark\" });\n }\n });\n\n // Troubleshooting Flows\n app.get(\"/api/troubleshooting-flows\", async (req, res) => {\n try {\n const flows = await storage.getTroubleshootingFlows();\n res.json(flows);\n } catch (error) {\n res.status(500).json({ message: \"Failed to fetch troubleshooting flows\" });\n }\n });\n\n app.get(\"/api/troubleshooting-flows/:id\", async (req, res) => {\n try {\n const flow = await storage.getTroubleshootingFlow(req.params.id);\n if (!flow) {\n return res.status(404).json({ message: \"Troubleshooting flow not found\" });\n }\n res.json(flow);\n } catch (error) {\n res.status(500).json({ message: \"Failed to fetch troubleshooting flow\" });\n }\n });\n\n app.post(\"/api/troubleshooting-flows\", async (req, res) => {\n try {\n const validatedData = insertTroubleshootingFlowSchema.parse(req.body);\n const flow = await storage.createTroubleshootingFlow(validatedData);\n res.status(201).json(flow);\n } catch (error) {\n res.status(400).json({ message: \"Invalid troubleshooting flow data\" });\n }\n });\n\n // Device Components\n app.get(\"/api/device-components\", async (req, res) => {\n try {\n const { deviceType } = req.query;\n const components = await storage.getDeviceComponents(deviceType as string);\n res.json(components);\n } catch (error) {\n res.status(500).json({ message: \"Failed to fetch device components\" });\n }\n });\n\n app.get(\"/api/device-components/:id\", async (req, res) => {\n try {\n const component = await storage.getDeviceComponent(req.params.id);\n if (!component) {\n return res.status(404).json({ message: \"Device component not found\" });\n }\n res.json(component);\n } catch (error) {\n res.status(500).json({ message: \"Failed to fetch device component\" });\n }\n });\n\n app.post(\"/api/device-components\", async (req, res) => {\n try {\n const validatedData = insertDeviceComponentSchema.parse(req.body);\n const component = await storage.createDeviceComponent(validatedData);\n res.status(201).json(component);\n } catch (error) {\n res.status(400).json({ message: \"Invalid device component data\" });\n }\n });\n\n // Device Brands routes\n app.get(\"/api/device-brands\", async (req, res) => {\n try {\n const { deviceType } = req.query;\n const brands = await storage.getDeviceBrands(deviceType as string);\n res.json(brands);\n } catch (error) {\n console.error(\"Error fetching device brands:\", error);\n res.status(500).json({ message: \"Failed to fetch device brands\" });\n }\n });\n\n // Device Models routes\n app.get(\"/api/device-models\", async (req, res) => {\n try {\n const { brandId, deviceType, search } = req.query;\n \n if (search) {\n const models = await storage.searchDeviceModels(search as string, deviceType as string);\n res.json(models);\n } else {\n const models = await storage.getDeviceModels(brandId as string, deviceType as string);\n res.json(models);\n }\n } catch (error) {\n console.error(\"Error fetching device models:\", error);\n res.status(500).json({ message: \"Failed to fetch device models\" });\n }\n });\n\n app.get(\"/api/device-models/:id\", async (req, res) => {\n try {\n const { id } = req.params;\n const model = await storage.getDeviceModel(id);\n if (!model) {\n return res.status(404).json({ message: \"Device model not found\" });\n }\n res.json(model);\n } catch (error) {\n console.error(\"Error fetching device model:\", error);\n res.status(500).json({ message: \"Failed to fetch device model\" });\n }\n });\n\n app.get(\"/api/brands/:brandId/models\", async (req, res) => {\n try {\n const { brandId } = req.params;\n const models = await storage.getModelsByBrand(brandId);\n res.json(models);\n } catch (error) {\n console.error(\"Error fetching models by brand:\", error);\n res.status(500).json({ message: \"Failed to fetch models by brand\" });\n }\n });\n\n // Guide Compatibility routes\n app.get(\"/api/models/:modelId/guides\", async (req, res) => {\n try {\n const { modelId } = req.params;\n const guides = await storage.getCompatibleGuides(modelId);\n res.json(guides);\n } catch (error) {\n console.error(\"Error fetching compatible guides:\", error);\n res.status(500).json({ message: \"Failed to fetch compatible guides\" });\n }\n });\n\n app.get(\"/api/guides/:guideId/models\", async (req, res) => {\n try {\n const { guideId } = req.params;\n const models = await storage.getModelCompatibility(guideId);\n res.json(models);\n } catch (error) {\n console.error(\"Error fetching model compatibility:\", error);\n res.status(500).json({ message: \"Failed to fetch model compatibility\" });\n }\n });\n\n // Digital Asset Links for TWA\n app.get(\"/.well-known/assetlinks.json\", (req, res) => {\n res.json([{\n relation: [\"delegate_permission/common.handle_all_urls\"],\n target: {\n namespace: \"android_app\",\n package_name: \"com.jcrguidepro.app\",\n sha256_cert_fingerprints: [\"73:8B:D2:DB:FC:57:4D:5B:F1:A5:28:C5:01:B6:17:C7:7F:80:74:EE:B5:FD:0C:DB:12:CE:03:C8:35:D3:08:BE\"]\n }\n }]);\n });\n\n // Dynamic ZIP Exporter for Android Studio & Offline Project Bundle\n app.get([\"/api/export-android-zip\", \"/api/export-zip\", \"/api/download/android-studio-zip\"], (_req, res) => {\n try {\n const filename = \"JCR-Guide-Pro-Android-Studio.zip\";\n const prebuiltPath = path.join(process.cwd(), \"public\", \"JCR-Guide-Pro-Android-Studio.zip\");\n\n if (fs.existsSync(prebuiltPath)) {\n res.setHeader(\"Content-Type\", \"application/zip\");\n res.setHeader(\"Content-Disposition\", `attachment; filename=\"${filename}\"`);\n return res.sendFile(prebuiltPath);\n }\n\n // Generate on-the-fly if prebuilt is not found\n const zip = new AdmZip();\n const rootDir = process.cwd();\n\n // Folders to include in the Android Studio & project export\n const foldersToInclude = [\"android\", \"src\", \"shared\", \"server\"];\n foldersToInclude.forEach((folder) => {\n const folderPath = path.join(rootDir, folder);\n if (fs.existsSync(folderPath)) {\n zip.addLocalFolder(folderPath, folder);\n }\n });\n\n // Include public assets (excluding zip files)\n const pubDir = path.join(rootDir, \"public\");\n if (fs.existsSync(pubDir)) {\n fs.readdirSync(pubDir).forEach((f) => {\n if (!f.endsWith(\".zip\")) {\n const full = path.join(pubDir, f);\n if (fs.statSync(full).isDirectory()) {\n zip.addLocalFolder(full, `public/${f}`);\n } else {\n zip.addLocalFile(full, \"public\");\n }\n }\n });\n }\n\n // Essential root configuration files\n const filesToInclude = [\n \"package.json\",\n \"tsconfig.json\",\n \"vite.config.ts\",\n \"capacitor.config.json\",\n \"index.html\",\n \"README.md\",\n \"metadata.json\",\n \".env.example\"\n ];\n\n filesToInclude.forEach((file) => {\n const filePath = path.join(rootDir, file);\n if (fs.existsSync(filePath)) {\n zip.addLocalFile(filePath);\n }\n });\n\n const zipBuffer = zip.toBuffer();\n res.setHeader(\"Content-Type\", \"application/zip\");\n res.setHeader(\"Content-Disposition\", `attachment; filename=\"${filename}\"`);\n res.setHeader(\"Content-Length\", zipBuffer.length.toString());\n res.send(zipBuffer);\n } catch (error) {\n console.error(\"Export ZIP route error:\", error);\n if (!res.headersSent) {\n res.status(500).json({ message: \"Could not create zip archive\" });\n }\n }\n });\n\n const httpServer = createServer(app);\n return httpServer;\n}\n", "import { sql } from \"drizzle-orm\";\nimport { pgTable, text, varchar, integer, boolean, json, timestamp, jsonb, index } from \"drizzle-orm/pg-core\";\nimport { z } from \"zod\";\n\nexport const repairGuides = pgTable(\"repair_guides\", {\n id: varchar(\"id\").primaryKey().default(sql`gen_random_uuid()`),\n title: text(\"title\").notNull(),\n description: text(\"description\").notNull(),\n deviceType: text(\"device_type\").notNull(), // \"laptop\" | \"desktop\"\n category: text(\"category\").notNull(), // \"hardware\" | \"software\" | \"cleaning\" | \"upgrades\"\n difficulty: text(\"difficulty\").notNull(), // \"easy\" | \"medium\" | \"hard\"\n estimatedTime: text(\"estimated_time\").notNull(), // \"30-45 min\"\n toolsRequired: json(\"tools_required\").$type<string[]>().notNull(),\n safetyWarnings: json(\"safety_warnings\").$type<string[]>().notNull(),\n steps: json(\"steps\").$type<RepairStep[]>().notNull(),\n alternativeSolutions: text(\"alternative_solutions\"),\n imageUrl: text(\"image_url\").notNull(),\n viewCount: integer(\"view_count\").default(0),\n downloadCount: integer(\"download_count\").default(0),\n isBookmarked: boolean(\"is_bookmarked\").default(false),\n});\n\nexport const troubleshootingFlows = pgTable(\"troubleshooting_flows\", {\n id: varchar(\"id\").primaryKey().default(sql`gen_random_uuid()`),\n type: text(\"type\").notNull(), // \"power\" | \"performance\" | \"display\"\n title: text(\"title\").notNull(),\n description: text(\"description\").notNull(),\n steps: json(\"steps\").$type<TroubleshootingStep[]>().notNull(),\n});\n\nexport const deviceComponents = pgTable(\"device_components\", {\n id: varchar(\"id\").primaryKey().default(sql`gen_random_uuid()`),\n name: text(\"name\").notNull(),\n description: text(\"description\").notNull(),\n deviceType: text(\"device_type\").notNull(),\n category: text(\"category\").notNull(),\n safetyNotes: json(\"safety_notes\").$type<string[]>().notNull(),\n});\n\n// Type definitions for complex JSON fields\nexport type RepairStep = {\n stepNumber: number;\n title: string;\n description: string;\n imageUrl?: string;\n phase?: string;\n subSteps?: string[];\n torqueSpec?: string;\n toolRequired?: string;\n checkpoints?: string[];\n notes?: string[];\n warnings?: string[];\n tips?: string[];\n};\n\nexport type TroubleshootingStep = {\n id: string;\n question: string;\n answers: {\n text: string;\n nextStepId?: string;\n solutionId?: string;\n }[];\n};\n\n// Insert schemas\nexport const insertRepairGuideSchema = z.object({\n title: z.string(),\n description: z.string(),\n deviceType: z.string(),\n category: z.string(),\n difficulty: z.string(),\n estimatedTime: z.string(),\n toolsRequired: z.array(z.string()),\n safetyWarnings: z.array(z.string()),\n steps: z.array(z.object({\n stepNumber: z.number(),\n title: z.string(),\n description: z.string(),\n imageUrl: z.string().optional(),\n phase: z.string().optional(),\n subSteps: z.array(z.string()).optional(),\n torqueSpec: z.string().optional(),\n toolRequired: z.string().optional(),\n checkpoints: z.array(z.string()).optional(),\n notes: z.array(z.string()).optional(),\n warnings: z.array(z.string()).optional(),\n tips: z.array(z.string()).optional(),\n })),\n alternativeSolutions: z.string().optional().nullable(),\n imageUrl: z.string(),\n downloadCount: z.number().optional(),\n});\n\nexport const insertTroubleshootingFlowSchema = z.object({\n type: z.string(),\n title: z.string(),\n description: z.string(),\n steps: z.array(z.object({\n id: z.string(),\n question: z.string(),\n answers: z.array(z.object({\n text: z.string(),\n nextStepId: z.string().optional(),\n solutionId: z.string().optional(),\n })),\n })),\n});\n\nexport const insertDeviceComponentSchema = z.object({\n name: z.string(),\n description: z.string(),\n deviceType: z.string(),\n category: z.string(),\n safetyNotes: z.array(z.string()),\n});\n\n// Types\nexport type RepairGuide = typeof repairGuides.$inferSelect;\nexport type InsertRepairGuide = z.infer<typeof insertRepairGuideSchema>;\n\nexport type TroubleshootingFlow = typeof troubleshootingFlows.$inferSelect;\nexport type InsertTroubleshootingFlow = z.infer<typeof insertTroubleshootingFlowSchema>;\n\nexport type DeviceComponent = typeof deviceComponents.$inferSelect;\nexport type InsertDeviceComponent = z.infer<typeof insertDeviceComponentSchema>;\n\n// Session storage table\nexport const sessions = pgTable(\n \"sessions\",\n {\n sid: varchar(\"sid\").primaryKey(),\n sess: jsonb(\"sess\").notNull(),\n expire: timestamp(\"expire\").notNull(),\n },\n (table) => [index(\"IDX_session_expire\").on(table.expire)],\n);\n\n// User storage table\nexport const users = pgTable(\"users\", {\n id: varchar(\"id\").primaryKey().default(sql`gen_random_uuid()`),\n email: varchar(\"email\").unique().notNull(),\n password: text(\"password\").notNull(),\n firstName: varchar(\"first_name\"),\n lastName: varchar(\"last_name\"),\n profileImageUrl: varchar(\"profile_image_url\"),\n role: varchar(\"role\").default(\"user\"),\n createdAt: timestamp(\"created_at\").defaultNow(),\n updatedAt: timestamp(\"updated_at\").defaultNow(),\n});\n\n// Favorites table\nexport const favorites = pgTable(\"favorites\", {\n id: varchar(\"id\").primaryKey().default(sql`gen_random_uuid()`),\n userId: varchar(\"user_id\").notNull().references(() => users.id, { onDelete: \"cascade\" }),\n itemType: text(\"item_type\").notNull(),\n itemId: varchar(\"item_id\").notNull(),\n itemTitle: text(\"item_title\").notNull(),\n itemImageUrl: text(\"item_image_url\"),\n createdAt: timestamp(\"created_at\").defaultNow(),\n});\n\n// Device brands table\nexport const deviceBrands = pgTable(\"device_brands\", {\n id: varchar(\"id\").primaryKey().default(sql`gen_random_uuid()`),\n name: varchar(\"name\").notNull(),\n deviceType: text(\"device_type\").notNull(),\n logoUrl: varchar(\"logo_url\"),\n supportLevel: varchar(\"support_level\").notNull().default(\"community\"),\n popularity: integer(\"popularity\").default(0),\n createdAt: timestamp(\"created_at\").defaultNow(),\n});\n\n// Device models table\nexport const deviceModels = pgTable(\"device_models\", {\n id: varchar(\"id\").primaryKey().default(sql`gen_random_uuid()`),\n brandId: varchar(\"brand_id\").notNull().references(() => deviceBrands.id),\n name: varchar(\"name\").notNull(),\n series: varchar(\"series\"),\n year: integer(\"year\"),\n specifications: jsonb(\"specifications\"),\n commonIssues: jsonb(\"common_issues\").default(sql`'[]'::jsonb`),\n guideCount: integer(\"guide_count\").default(0),\n createdAt: timestamp(\"created_at\").defaultNow(),\n});\n\n// Guide compatibility table\nexport const guideCompatibility = pgTable(\"guide_compatibility\", {\n id: varchar(\"id\").primaryKey().default(sql`gen_random_uuid()`),\n guideId: varchar(\"guide_id\").notNull().references(() => repairGuides.id),\n modelId: varchar(\"model_id\").notNull().references(() => deviceModels.id),\n compatibility: varchar(\"compatibility\").notNull().default(\"compatible\"),\n notes: text(\"notes\"),\n createdAt: timestamp(\"created_at\").defaultNow(),\n});\n\n// Insert schemas\nexport const insertUserSchema = z.object({\n email: z.string().email(),\n password: z.string(),\n firstName: z.string().optional().nullable(),\n lastName: z.string().optional().nullable(),\n profileImageUrl: z.string().optional().nullable(),\n role: z.string().optional().default(\"user\"),\n});\n\nexport const insertFavoriteSchema = z.object({\n itemType: z.string(),\n itemId: z.string(),\n itemTitle: z.string(),\n itemImageUrl: z.string().optional().nullable(),\n});\n\nexport const insertDeviceBrandSchema = z.object({\n name: z.string(),\n deviceType: z.string(),\n logoUrl: z.string().optional().nullable(),\n supportLevel: z.string().default(\"community\"),\n popularity: z.number().optional().default(0),\n});\n\nexport const insertDeviceModelSchema = z.object({\n brandId: z.string(),\n name: z.string(),\n series: z.string().optional().nullable(),\n year: z.number().optional().nullable(),\n specifications: z.any().optional().nullable(),\n commonIssues: z.any().optional().nullable(),\n guideCount: z.number().optional().default(0),\n});\n\nexport const insertGuideCompatibilitySchema = z.object({\n guideId: z.string(),\n modelId: z.string(),\n compatibility: z.string().default(\"compatible\"),\n notes: z.string().optional().nullable(),\n});\n\n// Types for new tables\nexport type User = typeof users.$inferSelect;\nexport type UpsertUser = typeof users.$inferInsert;\nexport type InsertUser = z.infer<typeof insertUserSchema>;\n\nexport type Favorite = typeof favorites.$inferSelect;\nexport type InsertFavorite = z.infer<typeof insertFavoriteSchema>;\n\nexport type DeviceBrand = typeof deviceBrands.$inferSelect;\nexport type InsertDeviceBrand = z.infer<typeof insertDeviceBrandSchema>;\n\nexport type DeviceModel = typeof deviceModels.$inferSelect;\nexport type InsertDeviceModel = z.infer<typeof insertDeviceModelSchema>;\n\nexport type GuideCompatibility = typeof guideCompatibility.$inferSelect;\nexport type InsertGuideCompatibility = z.infer<typeof insertGuideCompatibilitySchema>;\n", "import { Pool, neonConfig } from '@neondatabase/serverless';\nimport { drizzle } from 'drizzle-orm/neon-serverless';\nimport ws from \"ws\";\nimport * as schema from \"@shared/schema\";\n\nneonConfig.webSocketConstructor = ws;\n\nexport const pool = process.env.DATABASE_URL\n ? new Pool({ connectionString: process.env.DATABASE_URL })\n : null;\n\nexport const db = pool ? drizzle({ client: pool, schema }) : null;\n", "import {\n repairGuides,\n troubleshootingFlows,\n deviceComponents,\n users,\n favorites,\n deviceBrands,\n deviceModels,\n guideCompatibility,\n type RepairGuide,\n type InsertRepairGuide,\n type TroubleshootingFlow,\n type InsertTroubleshootingFlow,\n type DeviceComponent,\n type InsertDeviceComponent,\n type User,\n type InsertUser,\n type Favorite,\n type InsertFavorite,\n type DeviceBrand,\n type InsertDeviceBrand,\n type DeviceModel,\n type InsertDeviceModel,\n type GuideCompatibility,\n type InsertGuideCompatibility,\n} from \"@shared/schema\";\nimport { db } from \"./db\";\nimport { eq, and, like, or, sql } from \"drizzle-orm\";\nimport bcrypt from \"bcrypt\";\nimport { comprehensiveRepairGuides, comprehensiveTroubleshootingFlows, comprehensiveDeviceComponents } from \"./seed-data\";\nimport { generateAllComprehensiveGuides } from \"./seed-guides\";\n\nexport interface IStorage {\n // User operations\n getUser(id: string): Promise<User | undefined>;\n getUserByEmail(email: string): Promise<User | undefined>;\n createUser(user: InsertUser): Promise<User>;\n updateUser(id: string, user: Partial<User>): Promise<User | undefined>;\n\n // Favorites operations\n getUserFavorites(userId: string): Promise<Favorite[]>;\n addToFavorites(userId: string, favorite: InsertFavorite): Promise<Favorite>;\n removeFromFavorites(userId: string, itemId: string, itemType: string): Promise<void>;\n isFavorited(userId: string, itemId: string, itemType: string): Promise<boolean>;\n\n // Repair Guides\n getRepairGuides(filters?: { deviceType?: string; category?: string; difficulty?: string }): Promise<RepairGuide[]>;\n getRepairGuide(id: string): Promise<RepairGuide | undefined>;\n createRepairGuide(guide: InsertRepairGuide): Promise<RepairGuide>;\n updateViewCount(id: string): Promise<void>;\n updateDownloadCount(id: string): Promise<void>;\n toggleBookmark(id: string): Promise<RepairGuide | undefined>;\n searchRepairGuides(query: string): Promise<RepairGuide[]>;\n\n // Troubleshooting Flows\n getTroubleshootingFlows(): Promise<TroubleshootingFlow[]>;\n getTroubleshootingFlow(id: string): Promise<TroubleshootingFlow | undefined>;\n createTroubleshootingFlow(flow: InsertTroubleshootingFlow): Promise<TroubleshootingFlow>;\n\n // Device Components\n getDeviceComponents(deviceType?: string): Promise<DeviceComponent[]>;\n getDeviceComponent(id: string): Promise<DeviceComponent | undefined>;\n createDeviceComponent(component: InsertDeviceComponent): Promise<DeviceComponent>;\n\n // Device Brands and Models\n getDeviceBrands(deviceType?: string): Promise<DeviceBrand[]>;\n getDeviceModels(brandId?: string, deviceType?: string): Promise<DeviceModel[]>;\n getDeviceModel(id: string): Promise<DeviceModel | undefined>;\n getModelsByBrand(brandId: string): Promise<DeviceModel[]>;\n searchDeviceModels(query: string, deviceType?: string): Promise<DeviceModel[]>;\n \n // Guide Compatibility\n getCompatibleGuides(modelId: string): Promise<RepairGuide[]>;\n getModelCompatibility(guideId: string): Promise<DeviceModel[]>;\n \n // User guide creation\n createUserGuide(guide: InsertRepairGuide): Promise<RepairGuide>;\n}\n\nexport class DatabaseStorage implements IStorage {\n async getUser(id: string): Promise<User | undefined> {\n if (!db) return undefined;\n const [user] = await db.select().from(users).where(eq(users.id, id));\n return user;\n }\n\n async getUserByEmail(email: string): Promise<User | undefined> {\n if (!db || !email) return undefined;\n const normalized = email.trim().toLowerCase();\n const [user] = await db.select().from(users).where(sql`lower(${users.email}) = ${normalized}`);\n return user;\n }\n\n async createUser(userData: InsertUser): Promise<User> {\n if (!db) throw new Error(\"No database\");\n const [user] = await db.insert(users).values({\n ...userData,\n email: (userData.email || \"\").trim().toLowerCase()\n }).returning();\n return user;\n }\n\n async updateUser(id: string, userData: Partial<User>): Promise<User | undefined> {\n if (!db) return undefined;\n const [user] = await db\n .update(users)\n .set({ ...userData, updatedAt: new Date() })\n .where(eq(users.id, id))\n .returning();\n return user;\n }\n\n async getUserFavorites(userId: string): Promise<Favorite[]> {\n if (!db) return [];\n return await db.select().from(favorites).where(eq(favorites.userId, userId));\n }\n\n async addToFavorites(userId: string, favorite: InsertFavorite): Promise<Favorite> {\n if (!db) throw new Error(\"No database\");\n const [newFavorite] = await db\n .insert(favorites)\n .values({ ...favorite, userId })\n .returning();\n return newFavorite;\n }\n\n async removeFromFavorites(userId: string, itemId: string, itemType: string): Promise<void> {\n if (!db) return;\n await db\n .delete(favorites)\n .where(\n and(\n eq(favorites.userId, userId),\n eq(favorites.itemId, itemId),\n eq(favorites.itemType, itemType)\n )\n );\n }\n\n async isFavorited(userId: string, itemId: string, itemType: string): Promise<boolean> {\n if (!db) return false;\n const [favorite] = await db\n .select()\n .from(favorites)\n .where(\n and(\n eq(favorites.userId, userId),\n eq(favorites.itemId, itemId),\n eq(favorites.itemType, itemType)\n )\n );\n return !!favorite;\n }\n\n async getRepairGuides(filters?: { deviceType?: string; category?: string; difficulty?: string }): Promise<RepairGuide[]> {\n if (!db) return [];\n const conditions = [];\n if (filters?.deviceType) {\n conditions.push(eq(repairGuides.deviceType, filters.deviceType));\n }\n if (filters?.category) {\n conditions.push(eq(repairGuides.category, filters.category));\n }\n if (filters?.difficulty) {\n conditions.push(eq(repairGuides.difficulty, filters.difficulty));\n }\n \n if (conditions.length > 0) {\n return await db.select().from(repairGuides).where(and(...conditions));\n }\n return await db.select().from(repairGuides);\n }\n\n async getRepairGuide(id: string): Promise<RepairGuide | undefined> {\n if (!db) return undefined;\n const [guide] = await db.select().from(repairGuides).where(eq(repairGuides.id, id));\n return guide;\n }\n\n async createRepairGuide(guide: InsertRepairGuide): Promise<RepairGuide> {\n if (!db) throw new Error(\"No database\");\n const [newGuide] = await db.insert(repairGuides).values(guide).returning();\n return newGuide;\n }\n\n async updateViewCount(id: string): Promise<void> {\n if (!db) return;\n await db\n .update(repairGuides)\n .set({ viewCount: sql`${repairGuides.viewCount} + 1` })\n .where(eq(repairGuides.id, id));\n }\n\n async updateDownloadCount(id: string): Promise<void> {\n if (!db) return;\n await db\n .update(repairGuides)\n .set({ downloadCount: sql`${repairGuides.downloadCount} + 1` })\n .where(eq(repairGuides.id, id));\n }\n\n async toggleBookmark(id: string): Promise<RepairGuide | undefined> {\n if (!db) return undefined;\n const [guide] = await db\n .update(repairGuides)\n .set({ isBookmarked: sql`NOT ${repairGuides.isBookmarked}` })\n .where(eq(repairGuides.id, id))\n .returning();\n return guide;\n }\n\n async searchRepairGuides(query: string): Promise<RepairGuide[]> {\n if (!db) return [];\n const searchTerm = `%${query.toLowerCase()}%`;\n return await db\n .select()\n .from(repairGuides)\n .where(\n or(\n like(repairGuides.title, searchTerm),\n like(repairGuides.description, searchTerm),\n like(repairGuides.category, searchTerm)\n )\n );\n }\n\n async getTroubleshootingFlows(): Promise<TroubleshootingFlow[]> {\n if (!db) return [];\n return await db.select().from(troubleshootingFlows);\n }\n\n async getTroubleshootingFlow(id: string): Promise<TroubleshootingFlow | undefined> {\n if (!db) return undefined;\n const [flow] = await db.select().from(troubleshootingFlows).where(eq(troubleshootingFlows.id, id));\n return flow;\n }\n\n async createTroubleshootingFlow(flow: InsertTroubleshootingFlow): Promise<TroubleshootingFlow> {\n if (!db) throw new Error(\"No database\");\n const [newFlow] = await db.insert(troubleshootingFlows).values(flow).returning();\n return newFlow;\n }\n\n async getDeviceComponents(deviceType?: string): Promise<DeviceComponent[]> {\n if (!db) return [];\n if (deviceType) {\n return await db.select().from(deviceComponents).where(eq(deviceComponents.deviceType, deviceType));\n }\n return await db.select().from(deviceComponents);\n }\n\n async getDeviceComponent(id: string): Promise<DeviceComponent | undefined> {\n if (!db) return undefined;\n const [component] = await db.select().from(deviceComponents).where(eq(deviceComponents.id, id));\n return component;\n }\n\n async createDeviceComponent(component: InsertDeviceComponent): Promise<DeviceComponent> {\n if (!db) throw new Error(\"No database\");\n const [newComponent] = await db.insert(deviceComponents).values(component).returning();\n return newComponent;\n }\n\n async getDeviceBrands(deviceType?: string): Promise<DeviceBrand[]> {\n if (!db) return [];\n const query = db.select().from(deviceBrands);\n if (deviceType) {\n return await query.where(eq(deviceBrands.deviceType, deviceType)).orderBy(sql`${deviceBrands.popularity} DESC`);\n }\n return await query.orderBy(sql`${deviceBrands.popularity} DESC`);\n }\n\n async getDeviceModels(brandId?: string, deviceType?: string): Promise<DeviceModel[]> {\n if (!db) return [];\n if (brandId) {\n return await db.select().from(deviceModels).where(eq(deviceModels.brandId, brandId)).orderBy(sql`${deviceModels.year} DESC, ${deviceModels.name} ASC`);\n }\n return await db.select().from(deviceModels).orderBy(sql`${deviceModels.year} DESC, ${deviceModels.name} ASC`);\n }\n\n async getDeviceModel(id: string): Promise<DeviceModel | undefined> {\n if (!db) return undefined;\n const [model] = await db.select().from(deviceModels).where(eq(deviceModels.id, id));\n return model;\n }\n\n async getModelsByBrand(brandId: string): Promise<DeviceModel[]> {\n if (!db) return [];\n return await db.select()\n .from(deviceModels)\n .where(eq(deviceModels.brandId, brandId))\n .orderBy(sql`${deviceModels.year} DESC, ${deviceModels.name} ASC`);\n }\n\n async searchDeviceModels(query: string, deviceType?: string): Promise<DeviceModel[]> {\n if (!db) return [];\n return await db.select()\n .from(deviceModels)\n .where(\n or(\n like(deviceModels.name, `%${query}%`),\n like(deviceModels.series, `%${query}%`)\n )\n )\n .orderBy(sql`${deviceModels.guideCount} DESC`);\n }\n\n async getCompatibleGuides(modelId: string): Promise<RepairGuide[]> {\n if (!db) return [];\n return await db.select()\n .from(repairGuides)\n .where(sql`id IN (SELECT guide_id FROM guide_compatibility WHERE model_id = ${modelId} AND compatibility = 'compatible')`)\n .orderBy(sql`${repairGuides.viewCount} DESC`);\n }\n\n async getModelCompatibility(guideId: string): Promise<DeviceModel[]> {\n if (!db) return [];\n return await db.select()\n .from(deviceModels)\n .where(sql`id IN (SELECT model_id FROM guide_compatibility WHERE guide_id = ${guideId})`)\n .orderBy(sql`${deviceModels.name} ASC`);\n }\n\n async createUserGuide(guide: InsertRepairGuide): Promise<RepairGuide> {\n if (!db) throw new Error(\"No database\");\n const [createdGuide] = await db\n .insert(repairGuides)\n .values(guide)\n .returning();\n return createdGuide;\n }\n}\n\nexport class MemStorage implements IStorage {\n private users: Map<string, User> = new Map();\n private favorites: Map<string, Favorite> = new Map();\n private repairGuides: Map<string, RepairGuide> = new Map();\n private troubleshootingFlows: Map<string, TroubleshootingFlow> = new Map();\n private deviceComponents: Map<string, DeviceComponent> = new Map();\n private deviceBrands: Map<string, DeviceBrand> = new Map();\n private deviceModels: Map<string, DeviceModel> = new Map();\n private guideCompatibility: Map<string, GuideCompatibility> = new Map();\n\n constructor() {\n this.seedInitialData();\n }\n\n private seedInitialData() {\n // Seed comprehensive guides with start-to-finish intimate details\n const allGuides = generateAllComprehensiveGuides();\n allGuides.forEach((g, index) => {\n const id = `guide-${index + 1}`;\n this.repairGuides.set(id, {\n id,\n title: g.title,\n description: g.description,\n deviceType: g.deviceType,\n category: g.category,\n difficulty: g.difficulty,\n estimatedTime: g.estimatedTime,\n toolsRequired: g.toolsRequired,\n safetyWarnings: g.safetyWarnings,\n steps: g.steps,\n alternativeSolutions: g.alternativeSolutions || null,\n imageUrl: g.imageUrl,\n viewCount: Math.floor(Math.random() * 800) + 50,\n downloadCount: Math.floor(Math.random() * 200) + 10,\n isBookmarked: false,\n });\n });\n\n // Seed troubleshooting flows\n comprehensiveTroubleshootingFlows.forEach((f: any, index) => {\n const id = `flow-${index + 1}`;\n const { category, ...flowData } = f;\n this.troubleshootingFlows.set(id, {\n id,\n type: category,\n title: flowData.title,\n description: flowData.description,\n steps: flowData.steps.map((step: any) => ({\n id: `step-${step.stepNumber}`,\n question: step.description,\n answers: [{\n text: step.solutions?.join(', ') || \"Check solutions\",\n nextStepId: step.stepNumber < flowData.steps.length ? `step-${step.stepNumber + 1}` : undefined\n }]\n }))\n });\n });\n\n // Seed device components\n comprehensiveDeviceComponents.forEach((c: any, index) => {\n const id = `comp-${index + 1}`;\n this.deviceComponents.set(id, {\n id,\n name: c.name,\n description: c.description,\n deviceType: c.deviceType,\n category: c.componentType,\n safetyNotes: c.commonIssues || []\n });\n });\n\n // Seed Brands (Laptop & Desktop)\n const allBrands = [\n // Laptop Brands\n { id: \"brand-apple-laptop\", name: \"Apple\", deviceType: \"laptop\", logoUrl: \"https://cdn.simpleicons.org/apple\", supportLevel: \"official\", popularity: 99 },\n { id: \"brand-dell-laptop\", name: \"Dell\", deviceType: \"laptop\", logoUrl: \"https://cdn.simpleicons.org/dell\", supportLevel: \"official\", popularity: 96 },\n { id: \"brand-lenovo-laptop\", name: \"Lenovo\", deviceType: \"laptop\", logoUrl: \"https://cdn.simpleicons.org/lenovo\", supportLevel: \"official\", popularity: 95 },\n { id: \"brand-hp-laptop\", name: \"HP\", deviceType: \"laptop\", logoUrl: \"https://cdn.simpleicons.org/hp\", supportLevel: \"official\", popularity: 93 },\n { id: \"brand-asus-laptop\", name: \"ASUS\", deviceType: \"laptop\", logoUrl: \"https://cdn.simpleicons.org/asus\", supportLevel: \"official\", popularity: 90 },\n { id: \"brand-acer-laptop\", name: \"Acer\", deviceType: \"laptop\", logoUrl: \"https://cdn.simpleicons.org/acer\", supportLevel: \"official\", popularity: 84 },\n { id: \"brand-msi-laptop\", name: \"MSI\", deviceType: \"laptop\", logoUrl: \"https://cdn.simpleicons.org/msi\", supportLevel: \"official\", popularity: 86 },\n { id: \"brand-razer-laptop\", name: \"Razer\", deviceType: \"laptop\", logoUrl: \"https://cdn.simpleicons.org/razer\", supportLevel: \"official\", popularity: 87 },\n { id: \"brand-microsoft-laptop\", name: \"Microsoft\", deviceType: \"laptop\", logoUrl: \"https://cdn.simpleicons.org/microsoft\", supportLevel: \"official\", popularity: 88 },\n { id: \"brand-samsung-laptop\", name: \"Samsung\", deviceType: \"laptop\", logoUrl: \"https://cdn.simpleicons.org/samsung\", supportLevel: \"official\", popularity: 82 },\n { id: \"brand-framework-laptop\", name: \"Framework\", deviceType: \"laptop\", logoUrl: \"https://cdn.simpleicons.org/framework\", supportLevel: \"official\", popularity: 85 },\n { id: \"brand-lg-laptop\", name: \"LG\", deviceType: \"laptop\", logoUrl: \"https://cdn.simpleicons.org/lg\", supportLevel: \"official\", popularity: 78 },\n { id: \"brand-gigabyte-laptop\", name: \"Gigabyte\", deviceType: \"laptop\", logoUrl: \"https://cdn.simpleicons.org/gigabyte\", supportLevel: \"community\", popularity: 76 },\n\n // Desktop Brands & Form Factors\n { id: \"brand-custom-desktop\", name: \"Custom Built PC\", deviceType: \"desktop\", logoUrl: \"https://cdn.simpleicons.org/pcgamingwiki\", supportLevel: \"official\", popularity: 100 },\n { id: \"brand-apple-desktop\", name: \"Apple\", deviceType: \"desktop\", logoUrl: \"https://cdn.simpleicons.org/apple\", supportLevel: \"official\", popularity: 95 },\n { id: \"brand-dell-desktop\", name: \"Dell\", deviceType: \"desktop\", logoUrl: \"https://cdn.simpleicons.org/dell\", supportLevel: \"official\", popularity: 94 },\n { id: \"brand-hp-desktop\", name: \"HP\", deviceType: \"desktop\", logoUrl: \"https://cdn.simpleicons.org/hp\", supportLevel: \"official\", popularity: 91 },\n { id: \"brand-lenovo-desktop\", name: \"Lenovo\", deviceType: \"desktop\", logoUrl: \"https://cdn.simpleicons.org/lenovo\", supportLevel: \"official\", popularity: 89 },\n { id: \"brand-asus-desktop\", name: \"ASUS\", deviceType: \"desktop\", logoUrl: \"https://cdn.simpleicons.org/asus\", supportLevel: \"official\", popularity: 88 },\n { id: \"brand-msi-desktop\", name: \"MSI\", deviceType: \"desktop\", logoUrl: \"https://cdn.simpleicons.org/msi\", supportLevel: \"official\", popularity: 85 },\n { id: \"brand-corsair-desktop\", name: \"Corsair & NZXT\", deviceType: \"desktop\", logoUrl: \"https://cdn.simpleicons.org/corsair\", supportLevel: \"official\", popularity: 90 },\n { id: \"brand-acer-desktop\", name: \"Acer\", deviceType: \"desktop\", logoUrl: \"https://cdn.simpleicons.org/acer\", supportLevel: \"community\", popularity: 79 },\n ];\n\n allBrands.forEach(b => {\n this.deviceBrands.set(b.id, {\n ...b,\n createdAt: new Date()\n });\n });\n\n // Comprehensive Models across every major brand (70+ models)\n const allModels = [\n // APPLE LAPTOPS\n { id: \"model-mbp-16-m3\", brandId: \"brand-apple-laptop\", name: \"MacBook Pro 16\\\" (M3 Pro / M3 Max)\", series: \"MacBook Pro\", year: 2024, specifications: { cpu: \"Apple M3 Max 16-Core\", ram: \"36GB-128GB Unified\", storage: \"512GB-8TB SSD\", display: \"16.2\\\" Liquid Retina XDR Mini-LED 120Hz\" }, commonIssues: [\"Display flex cable strain\", \"USB-C port wear\", \"Battery cycle depletion\"], guideCount: 16 },\n { id: \"model-mbp-14-m3\", brandId: \"brand-apple-laptop\", name: \"MacBook Pro 14\\\" (M3 / M3 Pro)\", series: \"MacBook Pro\", year: 2023, specifications: { cpu: \"Apple M3 Pro 12-Core\", ram: \"18GB-36GB Unified\", storage: \"512GB-4TB SSD\", display: \"14.2\\\" Liquid Retina XDR\" }, commonIssues: [\"Fan dust accumulation\", \"Trackpad haptic alignment\", \"MagSafe 3 port debris\"], guideCount: 14 },\n { id: \"model-mba-15-m3\", brandId: \"brand-apple-laptop\", name: \"MacBook Air 15\\\" (M3)\", series: \"MacBook Air\", year: 2024, specifications: { cpu: \"Apple M3 8-Core\", ram: \"16GB-24GB Unified\", storage: \"512GB SSD\", display: \"15.3\\\" Liquid Retina IPS\" }, commonIssues: [\"Passive thermal throttling under sustained load\", \"Keyboard keycap shine\"], guideCount: 10 },\n { id: \"model-mba-13-m2\", brandId: \"brand-apple-laptop\", name: \"MacBook Air 13\\\" (M2)\", series: \"MacBook Air\", year: 2022, specifications: { cpu: \"Apple M2 8-Core\", ram: \"8GB-16GB Unified\", storage: \"256GB-512GB SSD\", display: \"13.6\\\" Liquid Retina\" }, commonIssues: [\"Thermal pad modding\", \"Audio jack lint\"], guideCount: 11 },\n { id: \"model-mba-13-m1\", brandId: \"brand-apple-laptop\", name: \"MacBook Air 13\\\" (M1 Classic)\", series: \"MacBook Air\", year: 2020, specifications: { cpu: \"Apple M1 8-Core\", ram: \"8GB-16GB Unified\", storage: \"256GB-2TB SSD\", display: \"13.3\\\" Retina 2560x1600\" }, commonIssues: [\"Battery swelling\", \"Display flexgate repair\", \"Trackpad cable oxidation\"], guideCount: 19 },\n { id: \"model-mbp-13-intel\", brandId: \"brand-apple-laptop\", name: \"MacBook Pro 13\\\" (Intel Four Thunderbolt)\", series: \"MacBook Pro Legacy\", year: 2020, specifications: { cpu: \"Intel Core i5-1038NG7\", ram: \"16GB LPDDR4X\", storage: \"512GB SSD\", display: \"13.3\\\" Retina 2560x1600\" }, commonIssues: [\"Dual fan thermal paste degradation\", \"Butterfly/Magic keyboard replacement\", \"Battery swelling\"], guideCount: 18 },\n { id: \"model-mbp-15-retina\", brandId: \"brand-apple-laptop\", name: \"MacBook Pro 15\\\" Retina (Mid 2015 Legacy)\", series: \"MacBook Pro Legacy\", year: 2015, specifications: { cpu: \"Intel Core i7-4870HQ\", ram: \"16GB DDR3L\", storage: \"512GB Proprietary PCIe\", display: \"15.4\\\" Retina 2880x1800\" }, commonIssues: [\"Staingate anti-reflective coating delamination\", \"I/O board audio flex ribbon\", \"Battery pouch cell replacement\"], guideCount: 22 },\n\n // DELL LAPTOPS\n { id: \"model-dell-xps15-9530\", brandId: \"brand-dell-laptop\", name: \"XPS 15 9530\", series: \"XPS\", year: 2023, specifications: { cpu: \"Intel Core i7-13700H\", ram: \"32GB DDR5-4800 (Upgradeable)\", storage: \"1TB M.2 PCIe 4.0\", display: \"15.6\\\" 3.5K OLED Touch\" }, commonIssues: [\"Vapor chamber thermal paste drying\", \"Trackpad pre-travel rattle\", \"Battery health degradation\"], guideCount: 19 },\n { id: \"model-dell-xps13-plus\", brandId: \"brand-dell-laptop\", name: \"XPS 13 Plus 9320\", series: \"XPS\", year: 2023, specifications: { cpu: \"Intel Core i7-1360P\", ram: \"16GB LPDDR5\", storage: \"1TB NVMe\", display: \"13.4\\\" 4K UHD+ Touch\" }, commonIssues: [\"Capacitive function row responsiveness\", \"Zero-lattice keyboard ribbon seating\"], guideCount: 12 },\n { id: \"model-dell-xps16-9640\", brandId: \"brand-dell-laptop\", name: \"XPS 16 9640 (AI Series)\", series: \"XPS\", year: 2024, specifications: { cpu: \"Intel Core Ultra 9 185H\", ram: \"32GB-64GB LPDDR5x\", storage: \"2TB PCIe 4.0 NVMe\", display: \"16.3\\\" 4K+ OLED 90Hz\" }, commonIssues: [\"Seamless glass trackpad calibration\", \"Vapor chamber heatsink repaste\", \"Thunderbolt 4 port dock handshake\"], guideCount: 15 },\n { id: \"model-dell-lat-5440\", brandId: \"brand-dell-laptop\", name: \"Latitude 5440 Enterprise\", series: \"Latitude\", year: 2024, specifications: { cpu: \"Intel Core i5-1345U vPro\", ram: \"16GB DDR5 (2x SODIMM Slots)\", storage: \"512GB M.2 2230\", display: \"14.0\\\" FHD Non-Touch\" }, commonIssues: [\"SODIMM RAM upgrade\", \"M.2 2230 to 2280 bracket swap\", \"CMOS battery reset\"], guideCount: 15 },\n { id: \"model-dell-lat-7440\", brandId: \"brand-dell-laptop\", name: \"Latitude 7440 Ultralight\", series: \"Latitude\", year: 2023, specifications: { cpu: \"Intel Core i7-1365U vPro\", ram: \"16GB LPDDR5\", storage: \"512GB M.2 PCIe\", display: \"14.0\\\" 16:10 QHD+\" }, commonIssues: [\"Magnesium casing screw mounts\", \"Fingerprint reader daughterboard flex\", \"Wi-Fi 6E antenna clip\"], guideCount: 14 },\n { id: \"model-dell-prec-7780\", brandId: \"brand-dell-laptop\", name: \"Precision 7780 Mobile Workstation\", series: \"Precision Mobile\", year: 2023, specifications: { cpu: \"Intel Core i9-13950HX vPro\", ram: \"128GB CAMM / SODIMM DDR5\", storage: \"4x M.2 PCIe Gen4 NVMe (8TB)\", gpu: \"NVIDIA RTX 5000 Ada 16GB\" }, commonIssues: [\"CAMM memory module torque specs\", \"Vapor chamber thermal pad sizing\", \"SmartCard reader ribbon replacement\"], guideCount: 21 },\n { id: \"model-dell-alienware-m16\", brandId: \"brand-dell-laptop\", name: \"Alienware m16 R2 Gaming\", series: \"Alienware\", year: 2024, specifications: { cpu: \"Intel Core Ultra 7 155H\", ram: \"32GB DDR5 5600MHz\", storage: \"2TB Dual NVMe\", display: \"16\\\" QHD+ 240Hz\" }, commonIssues: [\"Element 31 liquid metal paste migration\", \"High-RPM fan cleaning\", \"DC-in barrel jack repair\"], guideCount: 22 },\n { id: \"model-dell-alienware-x14\", brandId: \"brand-dell-laptop\", name: \"Alienware x14 R2 Ultra-Slim\", series: \"Alienware\", year: 2023, specifications: { cpu: \"Intel Core i7-13620H\", ram: \"32GB LPDDR5\", storage: \"1TB M.2 2280\", display: \"14.0\\\" QHD+ 165Hz\" }, commonIssues: [\"Dual pull fan debris removal\", \"Type-C 130W GaN charging negotiation\", \"RGB Stadium lighting strip repair\"], guideCount: 13 },\n { id: \"model-dell-insp-15\", brandId: \"brand-dell-laptop\", name: \"Inspiron 15 3520\", series: \"Inspiron\", year: 2023, specifications: { cpu: \"Intel Core i5-1235U\", ram: \"8GB-16GB DDR4\", storage: \"512GB NVMe\", display: \"15.6\\\" 120Hz IPS\" }, commonIssues: [\"Hinge mounting plastic standoff rupture\", \"Keyboard membrane replacement\", \"SATA HDD to SSD migration\"], guideCount: 17 },\n\n // LENOVO LAPTOPS\n { id: \"model-lenovo-x1-c11\", brandId: \"brand-lenovo-laptop\", name: \"ThinkPad X1 Carbon Gen 11\", series: \"ThinkPad\", year: 2023, specifications: { cpu: \"Intel Core i7-1365U vPro\", ram: \"32GB LPDDR5\", storage: \"1TB PCIe Gen4 NVMe\", display: \"14.0\\\" 2.8K OLED\" }, commonIssues: [\"Fan dust filter de-clogging\", \"TrackPoint cap & click buttons replacement\", \"Wi-Fi 6E antenna routing\"], guideCount: 20 },\n { id: \"model-lenovo-x1-c12\", brandId: \"brand-lenovo-laptop\", name: \"ThinkPad X1 Carbon Gen 12\", series: \"ThinkPad\", year: 2024, specifications: { cpu: \"Intel Core Ultra 7 165H\", ram: \"32GB-64GB LPDDR5x\", storage: \"2TB Gen4 NVMe\", display: \"14.0\\\" 2.8K OLED 120Hz\" }, commonIssues: [\"Communications bar webcam flex\", \"Haptic TouchPad click engine reset\", \"Dual outlet fan cleaning\"], guideCount: 16 },\n { id: \"model-lenovo-t14-g4\", brandId: \"brand-lenovo-laptop\", name: \"ThinkPad T14 Gen 4 (AMD / Intel)\", series: \"ThinkPad\", year: 2023, specifications: { cpu: \"AMD Ryzen 7 PRO 7840U\", ram: \"32GB LPDDR5x\", storage: \"1TB M.2 2280\", display: \"14.0\\\" WUXGA Low Power\" }, commonIssues: [\"Modular keyboard replacement\", \"Internal 52.5Wh battery swap\", \"RJ45 Ethernet drop-jaw repair\"], guideCount: 21 },\n { id: \"model-lenovo-p16-g2\", brandId: \"brand-lenovo-laptop\", name: \"ThinkPad P16 Gen 2 Workstation\", series: \"ThinkPad Workstation\", year: 2023, specifications: { cpu: \"Intel Core i9-13980HX\", ram: \"128GB DDR5 ECC (4x Slots)\", storage: \"Dual M.2 Gen4 NVMe\", gpu: \"RTX 5000 Ada\" }, commonIssues: [\"Vapor chamber liquid repaste\", \"4x SODIMM RAM slot sequencing\", \"SmartCard flex replacement\"], guideCount: 24 },\n { id: \"model-lenovo-legion-pro7\", brandId: \"brand-lenovo-laptop\", name: \"Legion Pro 7i Gen 9\", series: \"Legion\", year: 2024, specifications: { cpu: \"Intel Core i9-14900HX\", ram: \"32GB DDR5 5600MHz\", storage: \"2TB Dual M.2 SSD\", display: \"16\\\" WQXGA 240Hz 500 nits\" }, commonIssues: [\"Coldfront 5.0 vapor chamber repaste\", \"RGB backlight controller firmware\", \"Dual fan de-dusting\"], guideCount: 18 },\n { id: \"model-lenovo-legion-slim5\", brandId: \"brand-lenovo-laptop\", name: \"Legion Slim 5 14\\\" OLED\", series: \"Legion Slim\", year: 2024, specifications: { cpu: \"AMD Ryzen 7 7840HS\", ram: \"32GB LPDDR5X\", storage: \"1TB M.2 2280\", display: \"14.5\\\" 2.8K 120Hz OLED\" }, commonIssues: [\"Vapor chamber phase-change pad installation\", \"Right-angle DC-in slim tip port check\"], guideCount: 15 },\n { id: \"model-lenovo-yoga-9i\", brandId: \"brand-lenovo-laptop\", name: \"Yoga 9i Dual-Screen / 2-in-1\", series: \"Yoga\", year: 2024, specifications: { cpu: \"Intel Core Ultra 7 155H\", ram: \"16GB LPDDR5x\", storage: \"1TB Gen4 SSD\", display: \"Dual 13.3\\\" 2.8K OLED Touch\" }, commonIssues: [\"360-degree rotating soundbar hinge tension\", \"Active stylus digitizer calibration\"], guideCount: 13 },\n\n // HP LAPTOPS\n { id: \"model-hp-spectre-14\", brandId: \"brand-hp-laptop\", name: \"Spectre x360 14 (2024)\", series: \"Spectre\", year: 2024, specifications: { cpu: \"Intel Core Ultra 7 155H\", ram: \"32GB LPDDR5x\", storage: \"2TB NVMe\", display: \"14.0\\\" 2.8K OLED Touch\" }, commonIssues: [\"Haptic trackpad calibration\", \"Bottom cover rubber foot adhesive\", \"USB-C PD handshake reset\"], guideCount: 14 },\n { id: \"model-hp-spectre-16\", brandId: \"brand-hp-laptop\", name: \"Spectre x360 16 OLED\", series: \"Spectre\", year: 2024, specifications: { cpu: \"Intel Core Ultra 7 155H\", ram: \"32GB LPDDR5x\", storage: \"2TB NVMe\", gpu: \"RTX 4050 Laptop\" }, commonIssues: [\"360-degree gear hinge lubrication\", \"Dual blower fan cleaning\", \"OLED touch digitizer ribbon\"], guideCount: 15 },\n { id: \"model-hp-elitebook-840\", brandId: \"brand-hp-laptop\", name: \"EliteBook 840 G10\", series: \"EliteBook\", year: 2023, specifications: { cpu: \"Intel Core i7-1360P\", ram: \"32GB DDR5 (2x Slots)\", storage: \"1TB SSD\", display: \"14.0\\\" WUXGA Anti-Glare\" }, commonIssues: [\"Smart card reader flex cable\", \"RAM SODIMM capacity upgrade\", \"Sure View privacy filter troubleshooting\"], guideCount: 16 },\n { id: \"model-hp-zbook-fury16\", brandId: \"brand-hp-laptop\", name: \"ZBook Fury 16 G10 Mobile Workstation\", series: \"ZBook\", year: 2023, specifications: { cpu: \"Intel Core i9-13950HX\", ram: \"128GB DDR5 ECC (4x SODIMM)\", storage: \"4x M.2 NVMe SSDs (Up to 16TB)\", gpu: \"NVIDIA RTX 5000 Ada\" }, commonIssues: [\"Toolless chassis latch mechanism\", \"Quad M.2 thermal heatsink pad repaste\", \"BMS battery diagnostic\"], guideCount: 22 },\n { id: \"model-hp-omen-16\", brandId: \"brand-hp-laptop\", name: \"OMEN Transcend 16 Gaming\", series: \"OMEN\", year: 2024, specifications: { cpu: \"Intel Core i7-14700HX\", ram: \"32GB DDR5\", storage: \"1TB PCIe Gen4\", display: \"16.0\\\" Mini-LED 240Hz\" }, commonIssues: [\"Tempest Cooling fan shroud cleaning\", \"Hall-effect lid sensor alignment\"], guideCount: 15 },\n { id: \"model-hp-victus-16\", brandId: \"brand-hp-laptop\", name: \"Victus 16 Gaming Laptop\", series: \"Victus\", year: 2023, specifications: { cpu: \"AMD Ryzen 7 7840HS\", ram: \"16GB DDR5\", storage: \"1TB SSD\", gpu: \"RTX 4060\" }, commonIssues: [\"Screen hinge wobble tensioning\", \"Dual fan air intake foam swap\", \"DC power barrel socket replacement\"], guideCount: 18 },\n\n // ASUS LAPTOPS & HANDHELDS\n { id: \"model-asus-zephyrus-g14\", brandId: \"brand-asus-laptop\", name: \"ROG Zephyrus G14 (2024)\", series: \"ROG\", year: 2024, specifications: { cpu: \"AMD Ryzen 9 8945HS\", ram: \"32GB LPDDR5X\", storage: \"1TB M.2 NVMe\", display: \"14.0\\\" 3K OLED 120Hz G-SYNC\" }, commonIssues: [\"Liquid metal barrier inspection\", \"AniMe Matrix / Slash Lighting flex cable\", \"Fan bearing lubrication\"], guideCount: 20 },\n { id: \"model-asus-zephyrus-g16\", brandId: \"brand-asus-laptop\", name: \"ROG Zephyrus G16 (2024)\", series: \"ROG\", year: 2024, specifications: { cpu: \"Intel Core Ultra 9 185H\", ram: \"32GB LPDDR5x\", storage: \"2TB Dual NVMe\", display: \"16\\\" 2.5K OLED 240Hz\" }, commonIssues: [\"Tri-Fan cooling module de-dusting\", \"Vapor chamber repasting\", \"Type-C 100W PD charging controller\"], guideCount: 19 },\n { id: \"model-asus-strix-scar16\", brandId: \"brand-asus-laptop\", name: \"ROG Strix SCAR 16 (2024)\", series: \"ROG\", year: 2024, specifications: { cpu: \"Intel Core i9-14900HX\", ram: \"64GB DDR5 5600MHz\", storage: \"2TB RAID 0 Gen4\", display: \"16.0\\\" QHD+ 240Hz Mini-LED\" }, commonIssues: [\"Tri-Fan cooling module cleaning\", \"Conductonaut Extreme liquid metal repaste\", \"Chassis RGB underglow strip swap\"], guideCount: 17 },\n { id: \"model-asus-zenbook-14\", brandId: \"brand-asus-laptop\", name: \"ZenBook 14 OLED UX3405\", series: \"ZenBook\", year: 2024, specifications: { cpu: \"Intel Core Ultra 7 155H\", ram: \"16GB-32GB LPDDR5x\", storage: \"1TB Gen4 SSD\", display: \"14.0\\\" 3K 120Hz OLED\" }, commonIssues: [\"NumberPad virtual trackpad driver\", \"ErgoLift hinge friction adjustment\"], guideCount: 11 },\n { id: \"model-asus-rog-ally-x\", brandId: \"brand-asus-laptop\", name: \"ROG Ally X (Handheld Gaming PC)\", series: \"ROG Ally\", year: 2024, specifications: { cpu: \"AMD Ryzen Z1 Extreme\", ram: \"24GB LPDDR5X 7500MHz\", storage: \"1TB M.2 2280 Full-Size NVMe\", battery: \"80Wh High-Capacity\" }, commonIssues: [\"Hall-Effect joystick calibration & swap\", \"MicroSD slot thermal isolation tape\", \"Full-size 2280 M.2 SSD installation\"], guideCount: 26 },\n\n // ACER & MSI & RAZER & FRAMEWORK & OTHER LAPTOPS\n { id: \"model-acer-helios-16\", brandId: \"brand-acer-laptop\", name: \"Predator Helios 16\", series: \"Predator\", year: 2024, specifications: { cpu: \"Intel Core i9-14900HX\", ram: \"32GB DDR5\", storage: \"2TB NVMe\", display: \"16\\\" WQXGA 240Hz IPS\" }, commonIssues: [\"AeroBlade 3D 5th Gen metal fan cleaning\", \"Liquid metal barrier reseal\", \"RGB swappable WASD keycaps\"], guideCount: 18 },\n { id: \"model-acer-swift-go14\", brandId: \"brand-acer-laptop\", name: \"Swift Go 14 OLED\", series: \"Swift\", year: 2024, specifications: { cpu: \"Intel Core Ultra 7 155H\", ram: \"16GB LPDDR5X\", storage: \"1TB Gen4 SSD\", display: \"14.0\\\" 2.8K OLED 90Hz\" }, commonIssues: [\"TwinAir dual fan heatsink cleaning\", \"Secondary M.2 slot NVMe addition\"], guideCount: 12 },\n { id: \"model-msi-stealth-16\", brandId: \"brand-msi-laptop\", name: \"MSI Stealth 16 AI Studio\", series: \"Stealth\", year: 2024, specifications: { cpu: \"Intel Core Ultra 9 185H\", ram: \"32GB DDR5\", storage: \"2TB NVMe SSD\", display: \"16\\\" UHD+ 120Hz OLED\" }, commonIssues: [\"Cooler Boost 5 fan cleaning\", \"Inverted motherboard disassembly order\", \"Hinge anchor reinforcement\"], guideCount: 15 },\n { id: \"model-msi-titan-18\", brandId: \"brand-msi-laptop\", name: \"MSI Titan 18 HX Flagship\", series: \"Titan Flagship\", year: 2024, specifications: { cpu: \"Intel Core i9-14900HX\", ram: \"128GB DDR5 (4x Slots)\", storage: \"1x PCIe Gen5 + 2x PCIe Gen4 SSDs\", display: \"18\\\" 4K 120Hz Mini-LED\" }, commonIssues: [\"Vapor chamber 3D cooling repaste\", \"Cherry MX mechanical keyboard switch swap\", \"Quad fan bearing service\"], guideCount: 22 },\n { id: \"model-razer-blade-16\", brandId: \"brand-razer-laptop\", name: \"Razer Blade 16 (Dual-Mode Display)\", series: \"Blade\", year: 2024, specifications: { cpu: \"Intel Core i9-14900HX\", ram: \"32GB-64GB DDR5\", storage: \"2TB NVMe\", display: \"16\\\" Dual-Mode Mini-LED (4K 120Hz / FHD 240Hz)\" }, commonIssues: [\"Battery swelling prevention and replacement\", \"Vapor chamber repaste with PTM7950\", \"Synapse Chroma RGB controller reset\"], guideCount: 23 },\n { id: \"model-razer-blade-14\", brandId: \"brand-razer-laptop\", name: \"Razer Blade 14 (AMD)\", series: \"Blade\", year: 2024, specifications: { cpu: \"AMD Ryzen 9 8945HS\", ram: \"32GB-64GB DDR5 (2x Slots)\", storage: \"1TB PCIe 4.0\", display: \"14\\\" QHD+ 240Hz\" }, commonIssues: [\"Dual blower fan lint de-clogging\", \"M.2 SSD thermal pad replacement\", \"Trackpad click stiffness\"], guideCount: 17 },\n { id: \"model-framework-13\", brandId: \"brand-framework-laptop\", name: \"Framework Laptop 13 (Modular)\", series: \"Framework Modular\", year: 2024, specifications: { cpu: \"AMD Ryzen 7 7840U / Intel Core Ultra\", ram: \"Up to 64GB DDR5 SODIMM\", storage: \"Up to 4TB M.2 2280\", display: \"13.5\\\" 2256x1504 3:2\" }, commonIssues: [\"Expansion card USB-C slot swap\", \"Magnetic bezel replacement\", \"Battery RTC coin cell swap\"], guideCount: 25 },\n { id: \"model-framework-16\", brandId: \"brand-framework-laptop\", name: \"Framework Laptop 16 (Discrete GPU Bay)\", series: \"Framework Modular\", year: 2024, specifications: { cpu: \"AMD Ryzen 9 7940HS\", ram: \"64GB DDR5\", storage: \"2x M.2 (2280 + 2230)\", gpu: \"Modular Radeon RX 7700S Expansion Bay\" }, commonIssues: [\"Graphics Module interposer connector latching\", \"Hot-swappable keyboard and numpad deck re-seating\", \"Dual fan exhaust module swap\"], guideCount: 28 },\n { id: \"model-ms-surface-laptop5\", brandId: \"brand-microsoft-laptop\", name: \"Surface Laptop 5\", series: \"Surface\", year: 2023, specifications: { cpu: \"Intel Core i7-1265U\", ram: \"16GB LPDDR5x\", storage: \"512GB Removable SSD\", display: \"13.5\\\" PixelSense Touch\" }, commonIssues: [\"Magnetic keyboard fabric deck removal\", \"Removable M.2 2230 SSD upgrade\", \"Surface Connect port charging diagnostic\"], guideCount: 14 },\n { id: \"model-ms-surface-pro9\", brandId: \"brand-microsoft-laptop\", name: \"Surface Pro 9 / 10 2-in-1\", series: \"Surface Pro\", year: 2023, specifications: { cpu: \"Intel Core i7-1255U / SQ3 5G\", ram: \"16GB LPDDR5\", storage: \"256GB-1TB Removable 2230 SSD\", display: \"13.0\\\" PixelSense Flow 120Hz\" }, commonIssues: [\"Magnetic SSD hatch door removal\", \"Kickstand torque hinge adjustment\", \"Screen glass adhesive release\"], guideCount: 19 },\n { id: \"model-samsung-galaxy-book4\", brandId: \"brand-samsung-laptop\", name: \"Galaxy Book4 Ultra\", series: \"Galaxy Book\", year: 2024, specifications: { cpu: \"Intel Core Ultra 9 185H\", ram: \"32GB LPDDR5X\", storage: \"1TB Gen4 SSD\", display: \"16.0\\\" Dynamic AMOLED 2X Touch\" }, commonIssues: [\"Vapor chamber repasting\", \"Secondary M.2 slot NVMe expansion\"], guideCount: 13 },\n { id: \"model-lg-gram-17\", brandId: \"brand-lg-laptop\", name: \"LG Gram 17 (Ultra-Lightweight)\", series: \"Gram\", year: 2024, specifications: { cpu: \"Intel Core Ultra 7 155H\", ram: \"16GB-32GB LPDDR5x\", storage: \"1TB Dual M.2\", display: \"17.0\\\" WQXGA IPS Non-Glare\" }, commonIssues: [\"Magnesium chassis flex inspection\", \"Dual M.2 SSD installation\", \"Battery replacement\"], guideCount: 12 },\n { id: \"model-gigabyte-aorus-16x\", brandId: \"brand-gigabyte-laptop\", name: \"GIGABYTE AORUS 16X (2024)\", series: \"AORUS\", year: 2024, specifications: { cpu: \"Intel Core i9-14900HX\", ram: \"32GB DDR5 5600MHz\", storage: \"1TB + 1TB Dual Gen4\", display: \"16\\\" 165Hz WQXGA Panton-Validated\" }, commonIssues: [\"Windforce Infinity cooling overhaul\", \"RGB Beacon projection light repair\", \"Wi-Fi 7 BE200 module seating\"], guideCount: 16 },\n\n // ==========================================\n // DESKTOP MODELS & FORM FACTORS (30+ Desktop Models)\n // ==========================================\n { id: \"model-custom-atx-gaming\", brandId: \"brand-custom-desktop\", name: \"Standard Full/Mid ATX Gaming PC\", series: \"Custom PC\", year: 2024, specifications: { cpu: \"AMD Ryzen 7 7800X3D / Intel Core i7-14700K\", ram: \"32GB DDR5 6000MHz\", storage: \"2TB PCIe 4.0 NVMe\", gpu: \"NVIDIA GeForce RTX 4080 Super\", psu: \"850W ATX 3.0 Gold Modular\" }, commonIssues: [\"PCIe GPU reseating & 12VHPWR seating\", \"360mm AIO liquid cooler bleeding/pump whine\", \"RAM XMP/EXPO dual-channel profile stability\", \"Front panel header / ARGB wiring\"], guideCount: 35 },\n { id: \"model-custom-itx-sff\", brandId: \"brand-custom-desktop\", name: \"Mini-ITX Small Form Factor (SFF) Build\", series: \"Custom SFF\", year: 2024, specifications: { cpu: \"AMD Ryzen 7 7800X3D\", ram: \"32GB DDR5 Low-Profile\", storage: \"2TB M.2 Back-Mounted\", gpu: \"RTX 4070 Dual-Slot\", psu: \"SFX 750W Platinum\" }, commonIssues: [\"PCIe Gen4 riser cable bandwidth errors\", \"Tight cable routing around CPU cooler\", \"Small fan curve optimization\"], guideCount: 28 },\n { id: \"model-custom-watercooled\", brandId: \"brand-custom-desktop\", name: \"Custom Hardline Liquid Cooling Rig\", series: \"Custom Enthusiast\", year: 2024, specifications: { cpu: \"Intel Core i9-14900KS / AMD Ryzen 9 7950X3D\", ram: \"64GB DDR5 7200MHz\", storage: \"4TB PCIe Gen5 NVMe\", gpu: \"RTX 4090 Water Block\", cooling: \"Dual 360mm Radiators, D5 Pump\" }, commonIssues: [\"Loop drainage & distilled water flushing\", \"O-ring seal leak testing with air pressure tester\", \"Biocide and coolant dye fallout cleanup\"], guideCount: 22 },\n { id: \"model-custom-dual-chamber\", brandId: \"brand-custom-desktop\", name: \"Dual-Chamber Fishbowl Panoramic Glass PC\", series: \"Custom Aesthetic\", year: 2024, specifications: { cpu: \"Intel Core i9-14900K\", ram: \"64GB DDR5 RGB\", storage: \"4TB NVMe\", gpu: \"RTX 4090 Vertical Mount\", fans: \"9x Reverse-Blade 120mm PWM\" }, commonIssues: [\"Tempered glass panel standoff rubber washer check\", \"Reverse blade fan orientation airflow check\", \"12V-2x6 cable 90-degree adapter seating\"], guideCount: 20 },\n\n // APPLE DESKTOPS\n { id: \"model-mac-studio-m2\", brandId: \"brand-apple-desktop\", name: \"Mac Studio (M2 Max / M2 Ultra)\", series: \"Mac Studio\", year: 2023, specifications: { cpu: \"Apple M2 Ultra 24-Core CPU / 76-Core GPU\", ram: \"64GB-192GB Unified\", storage: \"1TB-8TB Proprietary SSD Modules\", psu: \"Internal 370W PSU\" }, commonIssues: [\"Dual blower fan dust removal\", \"Proprietary SSD module restoration via Apple Configurator\", \"Power supply replacement\"], guideCount: 14 },\n { id: \"model-mac-mini-m2\", brandId: \"brand-apple-desktop\", name: \"Mac mini (M2 / M2 Pro)\", series: \"Mac mini\", year: 2023, specifications: { cpu: \"Apple M2 Pro 12-Core\", ram: \"16GB-32GB Unified\", storage: \"512GB-2TB SSD\" }, commonIssues: [\"Antenna plate removal\", \"Internal fan replacement\", \"DC power supply board swap\"], guideCount: 16 },\n { id: \"model-imac-24-m3\", brandId: \"brand-apple-desktop\", name: \"iMac 24\\\" 4.5K Retina (M3)\", series: \"iMac\", year: 2023, specifications: { cpu: \"Apple M3 8-Core\", ram: \"16GB-24GB Unified\", storage: \"512GB-2TB SSD\", display: \"23.5\\\" 4.5K Retina 4480x2520\" }, commonIssues: [\"Display adhesive cutting wheel procedure\", \"Internal logic board swap\", \"Magnetic power cord socket cleaning\"], guideCount: 12 },\n { id: \"model-imac-27-intel\", brandId: \"brand-apple-desktop\", name: \"iMac 27\\\" 5K Retina (Intel Legacy)\", series: \"iMac Legacy\", year: 2020, specifications: { cpu: \"Intel Core i9-10910 10-Core\", ram: \"Up to 128GB DDR4 (User Door)\", storage: \"1TB-8TB SSD\", gpu: \"Radeon Pro 5700 XT 16GB\" }, commonIssues: [\"Blade SSD upgrade\", \"User RAM door 4-stick DDR4 installation\", \"Display hinge spring snap repair\"], guideCount: 25 },\n { id: \"model-mac-pro-tower\", brandId: \"brand-apple-desktop\", name: \"Mac Pro Tower (Apple Silicon / Intel)\", series: \"Mac Pro\", year: 2023, specifications: { cpu: \"Apple M2 Ultra / Intel Xeon W\", ram: \"Up to 1.5TB DDR4 ECC (Intel) / 192GB (M2)\", storage: \"Internal PCIe Storage\", expansion: \"7x PCIe Slots\" }, commonIssues: [\"PCIe card auxiliary power routing\", \"Stainless steel latch alignment\", \"MPX module reseating\"], guideCount: 15 },\n\n // DELL DESKTOPS\n { id: \"model-dell-optiplex-7010\", brandId: \"brand-dell-desktop\", name: \"OptiPlex 7010 / 7000 Micro Form Factor\", series: \"OptiPlex Micro\", year: 2023, specifications: { cpu: \"Intel Core i7-13700T\", ram: \"16GB-64GB DDR5 SODIMM\", storage: \"512GB M.2 2280 NVMe\" }, commonIssues: [\"Blower fan thermal paste refresh\", \"External 90W/130W Dell power brick testing\", \"SATA 2.5\\\" caddy cable replacement\"], guideCount: 19 },\n { id: \"model-dell-optiplex-5090-sff\", brandId: \"brand-dell-desktop\", name: \"OptiPlex 5090 / 7090 Small Form Factor (SFF)\", series: \"OptiPlex SFF\", year: 2022, specifications: { cpu: \"Intel Core i7-11700\", ram: \"32GB DDR4 (4x DIMM Slots)\", storage: \"1TB NVMe + 3.5\\\" HDD\", psu: \"Dell Proprietary 260W 80+ Platinum\" }, commonIssues: [\"Low-profile PCIe GPU installation (e.g. RTX 3050 6GB / GTX 1650)\", \"Proprietary 6-pin motherboard power supply swap\", \"CMOS CR2032 coin cell replacement\"], guideCount: 24 },\n { id: \"model-dell-optiplex-7000-tower\", brandId: \"brand-dell-desktop\", name: \"OptiPlex 7000 Full Tower\", series: \"OptiPlex Tower\", year: 2023, specifications: { cpu: \"Intel Core i7-13700\", ram: \"64GB DDR5\", storage: \"2TB NVMe + 4TB HDD\", psu: \"Dell 500W Platinum\" }, commonIssues: [\"PCIe graphics card bracket lock\", \"Front intake bezel dust cleaning\", \"SATA optical drive replacement\"], guideCount: 17 },\n { id: \"model-dell-alienware-r16\", brandId: \"brand-dell-desktop\", name: \"Alienware Aurora R16 Gaming Desktop\", series: \"Alienware Aurora\", year: 2024, specifications: { cpu: \"Intel Core i9-14900KF\", ram: \"32GB DDR5 5600MHz\", storage: \"2TB Gen4 SSD\", gpu: \"RTX 4080 Super 16GB\", psu: \"1000W 80+ Gold\" }, commonIssues: [\"240mm liquid cooler radiator cleaning\", \"GPU retention bracket removal\", \"12V-2x6 power cable routing\"], guideCount: 20 },\n { id: \"model-dell-precision-3660\", brandId: \"brand-dell-desktop\", name: \"Precision 3660 Tower Workstation\", series: \"Precision Workstation\", year: 2023, specifications: { cpu: \"Intel Core i9-13900K\", ram: \"64GB DDR5 ECC / Non-ECC\", storage: \"Dual 2TB PCIe Gen4 SSDs\", gpu: \"NVIDIA RTX A4000 / RTX 4080\" }, commonIssues: [\"Front air intake dust filter maintenance\", \"Secondary M.2 PCIe riser card setup\", \"ECC memory error detection\"], guideCount: 21 },\n\n // HP DESKTOPS\n { id: \"model-hp-omen-45l\", brandId: \"brand-hp-desktop\", name: \"OMEN 45L Gaming Desktop (Cryo-Chamber)\", series: \"OMEN Desktop\", year: 2024, specifications: { cpu: \"Intel Core i9-14900K\", ram: \"64GB Kingston FURY DDR5\", storage: \"2TB WD Black NVMe\", cooling: \"External Patented Cryo-Chamber 360mm AIO\", psu: \"1000W 80+ Gold\" }, commonIssues: [\"Cryo-Chamber radiator dust filter washing\", \"Standard ATX motherboard/GPU upgrades\", \"OMEN Gaming Hub RGB lighting sync\"], guideCount: 22 },\n { id: \"model-hp-omen-25l\", brandId: \"brand-hp-desktop\", name: \"OMEN 25L Mid-Tower Gaming\", series: \"OMEN Desktop\", year: 2023, specifications: { cpu: \"Intel Core i7-13700F\", ram: \"32GB HyperX DDR5\", storage: \"1TB SSD\", gpu: \"RTX 4070\" }, commonIssues: [\"Rear exhaust fan upgrade\", \"CPU air cooler tower replacement\", \"RAM XMP frequency enable in BIOS\"], guideCount: 16 },\n { id: \"model-hp-prodesk-600\", brandId: \"brand-hp-desktop\", name: \"ProDesk 600 G6 / G8 SFF\", series: \"ProDesk\", year: 2022, specifications: { cpu: \"Intel Core i5-11500\", ram: \"16GB DDR4\", storage: \"512GB M.2 SSD\", psu: \"HP 210W Active PFC\" }, commonIssues: [\"SFF power supply diagnostic\", \"Toolless drive bay unlatching\", \"BIOS admin password jumper clearing\"], guideCount: 18 },\n { id: \"model-hp-elitedesk-mini\", brandId: \"brand-hp-desktop\", name: \"EliteDesk 800 G8 / G9 Mini PC\", series: \"EliteDesk Mini\", year: 2023, specifications: { cpu: \"Intel Core i7-12700T\", ram: \"32GB DDR5\", storage: \"1TB M.2 Gen4\" }, commonIssues: [\"Flex IO v2 port module swapping (Type-C / DP / HDMI / 2.5GbE)\", \"Copper heatsink repaste\", \"Mini-PC fan acoustic balance\"], guideCount: 17 },\n { id: \"model-hp-z4-g5\", brandId: \"brand-hp-desktop\", name: \"HP Z4 G5 Workstation Tower\", series: \"Z Workstation\", year: 2024, specifications: { cpu: \"Intel Xeon w5-2465X\", ram: \"128GB DDR5 ECC Registered\", storage: \"Dual 4TB NVMe SSDs\", psu: \"1125W 90% Efficient\" }, commonIssues: [\"Hot-swappable front NVMe drive bays\", \"Memory cooling shroud latch\", \"Dual PCIe Gen5 GPU power distribution\"], guideCount: 20 },\n\n // LENOVO DESKTOPS\n { id: \"model-lenovo-m70q-tiny\", brandId: \"brand-lenovo-desktop\", name: \"ThinkCentre M70q / M90q Tiny PC\", series: \"ThinkCentre Tiny\", year: 2023, specifications: { cpu: \"Intel Core i7-13700T\", ram: \"16GB-64GB DDR5\", storage: \"512GB M.2 NVMe\", dimensions: \"1-Liter Compact Chassis\" }, commonIssues: [\"Toolless chassis thumbscrew removal\", \"Dust shield foam replacement\", \"Thermal paste refresh on direct-mount heatsink\"], guideCount: 20 },\n { id: \"model-lenovo-legion-t7\", brandId: \"brand-lenovo-desktop\", name: \"Legion Tower 7i Gen 8\", series: \"Legion Tower\", year: 2024, specifications: { cpu: \"Intel Core i9-13900KF\", ram: \"32GB DDR5 5600MHz\", storage: \"1TB + 1TB Dual SSD\", gpu: \"RTX 4080\", psu: \"850W Gold\" }, commonIssues: [\"ARGB 120mm fan hub diagnosis\", \"Legion Coldfront liquid cooler pump curve\", \"GPU anti-sag bracket mounting\"], guideCount: 19 },\n { id: \"model-lenovo-p360-ultra\", brandId: \"brand-lenovo-desktop\", name: \"ThinkStation P360 / P3 Ultra SFF Workstation\", series: \"ThinkStation\", year: 2023, specifications: { cpu: \"Intel Core i9-13900\", ram: \"128GB DDR5 SODIMM\", storage: \"2x M.2 PCIe Gen4\", gpu: \"NVIDIA RTX A5000 Mobile 16GB\" }, commonIssues: [\"Chassis pull-tab clamshell mechanism\", \"Dual blower fan cleaning\", \"External 300W high-power brick check\"], guideCount: 21 },\n\n // ASUS & MSI & CORSAIR & SPECIALIZED DESKTOPS\n { id: \"model-asus-rog-g16ch\", brandId: \"brand-asus-desktop\", name: \"ROG Strix G16CH Gaming Desktop\", series: \"ROG Strix\", year: 2024, specifications: { cpu: \"Intel Core i7-14700F\", ram: \"32GB DDR5\", storage: \"1TB M.2 Gen4\", gpu: \"RTX 4070 Super\", psu: \"700W 80+ Gold\" }, commonIssues: [\"Front mesh air intake cleaning\", \"Glass side panel thumbscrew rubber washer seating\", \"AURA Sync RGB lighting reset\"], guideCount: 18 },\n { id: \"model-asus-proart-pd5\", brandId: \"brand-asus-desktop\", name: \"ProArt Station PD5 Creator Desktop\", series: \"ProArt\", year: 2023, specifications: { cpu: \"Intel Core i9-13900\", ram: \"64GB DDR5\", storage: \"2TB Gen4 SSD\", gpu: \"NVIDIA RTX 4070 / RTX A4000\" }, commonIssues: [\"Lumiwiz LED status bar calibration\", \"Front I/O headphone latch replacement\", \"Hard drive hot-swap cage\"], guideCount: 15 },\n { id: \"model-corsair-one-i500\", brandId: \"brand-corsair-desktop\", name: \"Corsair ONE i500 Compact Luxury PC\", series: \"Corsair ONE\", year: 2024, specifications: { cpu: \"Intel Core i9-14900K\", ram: \"64GB DDR5\", storage: \"2TB Gen4 NVMe\", cooling: \"Dual Independent Closed-Loop Liquid Coolers\", chassis: \"FSC-certified Real Wood Front\" }, commonIssues: [\"Dual radiator side-panel dust blowing\", \"Underglow touch sensor recalibration\", \"SFX-L power supply cable check\"], guideCount: 16 },\n { id: \"model-msi-trident-x2\", brandId: \"brand-msi-desktop\", name: \"MSI MEG Trident X2 (HMI Touchscreen)\", series: \"MEG Trident\", year: 2024, specifications: { cpu: \"Intel Core i9-14900KF\", ram: \"64GB DDR5\", storage: \"2TB Gen5 + 2TB Gen4\", gpu: \"RTX 4090 24GB\", psu: \"1000W PCIe 5.0\" }, commonIssues: [\"Front 4.5\\\" HMI touchscreen firmware calibration\", \"Silent Storm Cooling 3 air chamber divider alignment\"], guideCount: 17 },\n { id: \"model-intel-nuc-13-extreme\", brandId: \"brand-corsair-desktop\", name: \"Intel NUC 13 Extreme (Raptor Canyon)\", series: \"Intel NUC\", year: 2023, specifications: { cpu: \"Intel Core i9-13900K Compute Element\", ram: \"64GB DDR5 SODIMM\", storage: \"3x M.2 PCIe 4.0 NVMe\", gpu: \"Triple-Slot 12\\\" PCIe GPU\", psu: \"750W SFX Gold\" }, commonIssues: [\"NUC Compute Element PCIe x16 daughterboard seating\", \"SFX power supply fan curve\", \"Triple M.2 heatsink plate pad repaste\"], guideCount: 22 }\n ];\n\n allModels.forEach(m => {\n this.deviceModels.set(m.id, {\n ...m,\n createdAt: new Date()\n });\n });\n\n // Compatibility mappings linking models to guides\n const guideKeys = Array.from(this.repairGuides.keys());\n allModels.forEach((m) => {\n guideKeys.slice(0, 6).forEach((gId) => {\n const compatId = `compat-${m.id}-${gId}`;\n this.guideCompatibility.set(compatId, {\n id: compatId,\n guideId: gId,\n modelId: m.id,\n compatibility: \"compatible\",\n notes: \"Fully verified compatibility with standard OEM repair procedures.\",\n createdAt: new Date()\n });\n });\n });\n\n // Seed master and default technician accounts\n try {\n const defaultPasswordHash = bcrypt.hashSync(\"password123\", 10);\n const initialUsers: User[] = [\n {\n id: \"user-master-tech\",\n email: \"jhustle44@gmail.com\",\n password: defaultPasswordHash,\n firstName: \"Master\",\n lastName: \"Technician\",\n profileImageUrl: null,\n role: \"admin\",\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n {\n id: \"user-tech-lead\",\n email: \"tech@jcrguru.com\",\n password: defaultPasswordHash,\n firstName: \"Field\",\n lastName: \"Technician\",\n profileImageUrl: null,\n role: \"technician\",\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n {\n id: \"user-admin-chief\",\n email: \"admin@jcrguru.com\",\n password: defaultPasswordHash,\n firstName: \"Workshop\",\n lastName: \"Admin\",\n profileImageUrl: null,\n role: \"admin\",\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n {\n id: \"user-guest-demo\",\n email: \"demo@jcrguru.com\",\n password: defaultPasswordHash,\n firstName: \"Demo\",\n lastName: \"Technician\",\n profileImageUrl: null,\n role: \"user\",\n createdAt: new Date(),\n updatedAt: new Date(),\n }\n ];\n\n initialUsers.forEach(u => {\n this.users.set(u.id, u);\n });\n } catch (e) {\n console.warn(\"User seeding notice:\", e);\n }\n }\n\n async getUser(id: string): Promise<User | undefined> {\n return this.users.get(id);\n }\n\n async getUserByEmail(email: string): Promise<User | undefined> {\n if (!email) return undefined;\n const target = email.trim().toLowerCase();\n return Array.from(this.users.values()).find(u => u.email.toLowerCase() === target);\n }\n\n async createUser(user: InsertUser): Promise<User> {\n const id = `user-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n const newUser: User = {\n id,\n email: (user.email || \"\").trim().toLowerCase(),\n password: user.password,\n firstName: user.firstName || null,\n lastName: user.lastName || null,\n profileImageUrl: user.profileImageUrl || null,\n role: user.role || \"user\",\n createdAt: new Date(),\n updatedAt: new Date()\n };\n this.users.set(id, newUser);\n return newUser;\n }\n\n async updateUser(id: string, user: Partial<User>): Promise<User | undefined> {\n const existing = this.users.get(id);\n if (!existing) return undefined;\n const updated = { ...existing, ...user, updatedAt: new Date() };\n this.users.set(id, updated);\n return updated;\n }\n\n async getUserFavorites(userId: string): Promise<Favorite[]> {\n return Array.from(this.favorites.values()).filter(f => f.userId === userId);\n }\n\n async addToFavorites(userId: string, favorite: InsertFavorite): Promise<Favorite> {\n const id = `fav-${Date.now()}-${Math.random().toString(36).substr(2, 6)}`;\n const newFav: Favorite = {\n id,\n userId,\n itemType: favorite.itemType,\n itemId: favorite.itemId,\n itemTitle: favorite.itemTitle,\n itemImageUrl: favorite.itemImageUrl || null,\n createdAt: new Date()\n };\n this.favorites.set(id, newFav);\n return newFav;\n }\n\n async removeFromFavorites(userId: string, itemId: string, itemType: string): Promise<void> {\n for (const [id, f] of this.favorites.entries()) {\n if (f.userId === userId && f.itemId === itemId && f.itemType === itemType) {\n this.favorites.delete(id);\n }\n }\n }\n\n async isFavorited(userId: string, itemId: string, itemType: string): Promise<boolean> {\n return Array.from(this.favorites.values()).some(\n f => f.userId === userId && f.itemId === itemId && f.itemType === itemType\n );\n }\n\n async getRepairGuides(filters?: { deviceType?: string; category?: string; difficulty?: string }): Promise<RepairGuide[]> {\n let list = Array.from(this.repairGuides.values());\n if (filters?.deviceType) {\n list = list.filter(g => g.deviceType === filters.deviceType);\n }\n if (filters?.category && filters.category !== \"all\") {\n list = list.filter(g => g.category === filters.category);\n }\n if (filters?.difficulty && filters.difficulty !== \"all\") {\n list = list.filter(g => g.difficulty === filters.difficulty);\n }\n return list;\n }\n\n async getRepairGuide(id: string): Promise<RepairGuide | undefined> {\n return this.repairGuides.get(id);\n }\n\n async createRepairGuide(guide: InsertRepairGuide): Promise<RepairGuide> {\n const id = `guide-${Date.now()}`;\n const newGuide: RepairGuide = {\n id,\n title: guide.title,\n description: guide.description,\n deviceType: guide.deviceType,\n category: guide.category,\n difficulty: guide.difficulty,\n estimatedTime: guide.estimatedTime,\n toolsRequired: guide.toolsRequired,\n safetyWarnings: guide.safetyWarnings,\n steps: guide.steps,\n alternativeSolutions: guide.alternativeSolutions || null,\n imageUrl: guide.imageUrl,\n viewCount: 0,\n downloadCount: 0,\n isBookmarked: false,\n };\n this.repairGuides.set(id, newGuide);\n return newGuide;\n }\n\n async updateViewCount(id: string): Promise<void> {\n const guide = this.repairGuides.get(id);\n if (guide) {\n guide.viewCount = (guide.viewCount || 0) + 1;\n }\n }\n\n async updateDownloadCount(id: string): Promise<void> {\n const guide = this.repairGuides.get(id);\n if (guide) {\n guide.downloadCount = (guide.downloadCount || 0) + 1;\n }\n }\n\n async toggleBookmark(id: string): Promise<RepairGuide | undefined> {\n const guide = this.repairGuides.get(id);\n if (guide) {\n guide.isBookmarked = !guide.isBookmarked;\n return guide;\n }\n return undefined;\n }\n\n async searchRepairGuides(query: string): Promise<RepairGuide[]> {\n const q = query.trim().toLowerCase();\n if (!q) return Array.from(this.repairGuides.values());\n return Array.from(this.repairGuides.values()).filter(g => {\n const matchTitle = g.title.toLowerCase().includes(q);\n const matchDesc = g.description.toLowerCase().includes(q);\n const matchCategory = g.category.toLowerCase().includes(q);\n const matchDevice = g.deviceType.toLowerCase().includes(q);\n const matchDifficulty = g.difficulty.toLowerCase().includes(q);\n const matchTools = g.toolsRequired && g.toolsRequired.some(t => t.toLowerCase().includes(q));\n const matchSteps = g.steps && g.steps.some(s => s.title.toLowerCase().includes(q) || s.description.toLowerCase().includes(q));\n return matchTitle || matchDesc || matchCategory || matchDevice || matchDifficulty || matchTools || matchSteps;\n });\n }\n\n async getTroubleshootingFlows(): Promise<TroubleshootingFlow[]> {\n return Array.from(this.troubleshootingFlows.values());\n }\n\n async getTroubleshootingFlow(id: string): Promise<TroubleshootingFlow | undefined> {\n return this.troubleshootingFlows.get(id);\n }\n\n async createTroubleshootingFlow(flow: InsertTroubleshootingFlow): Promise<TroubleshootingFlow> {\n const id = `flow-${Date.now()}`;\n const newFlow: TroubleshootingFlow = {\n id,\n type: flow.type,\n title: flow.title,\n description: flow.description,\n steps: flow.steps,\n };\n this.troubleshootingFlows.set(id, newFlow);\n return newFlow;\n }\n\n async getDeviceComponents(deviceType?: string): Promise<DeviceComponent[]> {\n let list = Array.from(this.deviceComponents.values());\n if (deviceType) {\n list = list.filter(c => c.deviceType === deviceType);\n }\n return list;\n }\n\n async getDeviceComponent(id: string): Promise<DeviceComponent | undefined> {\n return this.deviceComponents.get(id);\n }\n\n async createDeviceComponent(component: InsertDeviceComponent): Promise<DeviceComponent> {\n const id = `comp-${Date.now()}`;\n const newComp: DeviceComponent = {\n id,\n name: component.name,\n description: component.description,\n deviceType: component.deviceType,\n category: component.category,\n safetyNotes: component.safetyNotes,\n };\n this.deviceComponents.set(id, newComp);\n return newComp;\n }\n\n async getDeviceBrands(deviceType?: string): Promise<DeviceBrand[]> {\n let list = Array.from(this.deviceBrands.values());\n if (deviceType) {\n list = list.filter(b => b.deviceType === deviceType);\n }\n return list.sort((a, b) => (b.popularity || 0) - (a.popularity || 0));\n }\n\n async getDeviceModels(brandId?: string, deviceType?: string): Promise<DeviceModel[]> {\n let list = Array.from(this.deviceModels.values());\n if (brandId) {\n list = list.filter(m => m.brandId === brandId);\n }\n return list.sort((a, b) => (b.year || 0) - (a.year || 0));\n }\n\n async getDeviceModel(id: string): Promise<DeviceModel | undefined> {\n return this.deviceModels.get(id);\n }\n\n async getModelsByBrand(brandId: string): Promise<DeviceModel[]> {\n return Array.from(this.deviceModels.values())\n .filter(m => m.brandId === brandId)\n .sort((a, b) => (b.year || 0) - (a.year || 0));\n }\n\n async searchDeviceModels(query: string, deviceType?: string): Promise<DeviceModel[]> {\n const q = query.trim().toLowerCase();\n let list = Array.from(this.deviceModels.values());\n if (deviceType) {\n const matchingBrandIds = new Set(\n Array.from(this.deviceBrands.values())\n .filter(b => b.deviceType === deviceType)\n .map(b => b.id)\n );\n list = list.filter(m => matchingBrandIds.has(m.brandId));\n }\n if (!q) return list;\n\n return list.filter(m => {\n const matchName = m.name.toLowerCase().includes(q);\n const matchSeries = m.series ? m.series.toLowerCase().includes(q) : false;\n const matchYear = m.year ? m.year.toString().includes(q) : false;\n const matchSpecs = m.specifications ? JSON.stringify(m.specifications).toLowerCase().includes(q) : false;\n const matchIssues = m.commonIssues ? JSON.stringify(m.commonIssues).toLowerCase().includes(q) : false;\n return matchName || matchSeries || matchYear || matchSpecs || matchIssues;\n });\n }\n\n async getCompatibleGuides(modelId: string): Promise<RepairGuide[]> {\n const matchingCompats = Array.from(this.guideCompatibility.values()).filter(\n c => c.modelId === modelId && c.compatibility === \"compatible\"\n );\n const guideIds = new Set(matchingCompats.map(c => c.guideId));\n return Array.from(this.repairGuides.values()).filter(g => guideIds.has(g.id));\n }\n\n async getModelCompatibility(guideId: string): Promise<DeviceModel[]> {\n const matchingCompats = Array.from(this.guideCompatibility.values()).filter(\n c => c.guideId === guideId\n );\n const modelIds = new Set(matchingCompats.map(c => c.modelId));\n return Array.from(this.deviceModels.values()).filter(m => modelIds.has(m.id));\n }\n\n async createUserGuide(guide: InsertRepairGuide): Promise<RepairGuide> {\n return this.createRepairGuide(guide);\n }\n}\n\nexport const storage = db ? new DatabaseStorage() : new MemStorage();\n", "import { db } from \"./db\";\nimport { repairGuides, troubleshootingFlows, deviceComponents, deviceBrands, deviceModels, guideCompatibility } from \"@shared/schema\";\n\nexport interface SeedGuide {\n id?: string;\n title: string;\n description: string;\n deviceType: \"laptop\" | \"desktop\";\n category: \"hardware\" | \"software\" | \"cleaning\" | \"upgrades\";\n difficulty: \"easy\" | \"medium\" | \"hard\";\n estimatedTime: string;\n toolsRequired: string[];\n safetyWarnings: string[];\n steps: {\n stepNumber: number;\n title: string;\n description: string;\n imageUrl?: string;\n tips?: string[];\n warnings?: string[];\n notes?: string[];\n }[];\n alternativeSolutions?: string;\n imageUrl: string;\n viewCount?: number;\n downloadCount?: number;\n}\n\nexport const curatedRepairGuides: SeedGuide[] = [\n // ==========================================\n // HARDWARE CATEGORY (LAPTOP & DESKTOP)\n // ==========================================\n {\n title: \"Laptop Screen & Display Panel Replacement\",\n description: \"Step-by-step technician procedure for disassembling the display bezel, disconnecting the 30/40-pin eDP cable, and mounting a replacement IPS or OLED screen panel.\",\n deviceType: \"laptop\",\n category: \"hardware\",\n difficulty: \"hard\",\n estimatedTime: \"45-60 min\",\n toolsRequired: [\"Phillips #00 Screwdriver\", \"Plastic Spudger / Prying Pick\", \"Anti-Static Tweezers\", \"Double-Sided Bezel Adhesive Strips\", \"ESD Wrist Strap\"],\n safetyWarnings: [\n \"Disconnect main battery and AC power before touching any display ribbon cables to prevent blowing the backlight fuse on the logic board.\",\n \"LCD/OLED panels are fragile glass substrates; never exert point pressure on corners.\",\n \"Discharge static electricity prior to handling the eDP ribbon connector.\"\n ],\n steps: [\n {\n stepNumber: 1,\n title: \"Power Isolation & Battery Disconnection\",\n description: \"Shut down the laptop completely. Remove the bottom chassis cover screws and unplug the internal battery connector from the motherboard.\",\n imageUrl: \"https://images.unsplash.com/photo-1597733336794-12d05021d510?auto=format&fit=crop&q=80&w=800\",\n tips: [\"Hold the power button for 15 seconds after disconnecting the battery to discharge residual board capacitance.\"]\n },\n {\n stepNumber: 2,\n title: \"Display Bezel Separation\",\n description: \"Insert a thin plastic spudger between the bezel and the back cover starting at the top corner. Gently release the perimeter retention clips working downwards toward the hinges.\",\n imageUrl: \"https://images.unsplash.com/photo-1588508065123-287b28e013da?auto=format&fit=crop&q=80&w=800\",\n warnings: [\"Be careful near the integrated webcam and microphone array at the top center to avoid damaging the ribbon cable.\"]\n },\n {\n stepNumber: 3,\n title: \"Screen Panel Removal & Cable Detachment\",\n description: \"Remove the four mounting screws or slowly pull the elastic adhesive pull-tabs. Carefully tilt the display panel forward and lift the metal locking bail on the 30-pin/40-pin eDP connector to slide it out.\",\n imageUrl: \"https://images.unsplash.com/photo-1591799264318-7e6ef8ddb7ea?auto=format&fit=crop&q=80&w=800\",\n notes: [\"Inspect the connector pins under magnification for any oxidation or bent pins.\"]\n },\n {\n stepNumber: 4,\n title: \"New Panel Installation & Alignment Test\",\n description: \"Align the new replacement panel, securely latch the eDP connector with adhesive tape, reconnect the battery for a quick post-test, and snap the bezel back into position.\",\n imageUrl: \"https://images.unsplash.com/photo-1540103547041-3929427b3708?auto=format&fit=crop&q=80&w=800\",\n tips: [\"Test backlight levels, refresh rate (e.g. 60Hz/120Hz/144Hz), and color calibration before applying final bezel adhesive.\"]\n }\n ],\n alternativeSolutions: \"If external displays work through HDMI/DisplayPort, verify if the issue is a damaged LVDS/eDP cable rather than a cracked panel.\",\n imageUrl: \"https://images.unsplash.com/photo-1588508065123-287b28e013da?auto=format&fit=crop&q=80&w=800\",\n viewCount: 1420,\n downloadCount: 380\n },\n {\n title: \"Laptop Battery Replacement & Calibration\",\n description: \"Safely remove swollen or degraded lithium-ion polymer battery packs, install OEM-certified cells, and perform standard charging calibration cycles.\",\n deviceType: \"laptop\",\n category: \"hardware\",\n difficulty: \"easy\",\n estimatedTime: \"20-30 min\",\n toolsRequired: [\"Phillips #00 & Torx T5 Screwdrivers\", \"Plastic Opening Tool\", \"Safety Glasses\", \"Fire-Safe Disposal Container\"],\n safetyWarnings: [\n \"Never puncture, bend, or apply metallic tools to lithium polymer battery pouches.\",\n \"If the battery is swollen, do not compress it and work in a well-ventilated space.\"\n ],\n steps: [\n {\n stepNumber: 1,\n title: \"Chassis Opening & Visual Inspection\",\n description: \"Remove bottom enclosure screws (noting varying screw lengths). Carefully pry off the cover to reveal the internal battery assembly.\",\n imageUrl: \"https://images.unsplash.com/photo-1597733336794-12d05021d510?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 2,\n title: \"Battery Cable Disconnection\",\n description: \"Gently disconnect the multi-pin battery wire harness from the motherboard socket using a plastic spudger pulling parallel to the board.\",\n imageUrl: \"https://images.unsplash.com/photo-1591799264318-7e6ef8ddb7ea?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 3,\n title: \"Cell Removal & New Pack Installation\",\n description: \"Remove battery bracket screws or pull release adhesive strips. Seat the fresh battery pack, screw down securely, and plug in the power harness.\",\n imageUrl: \"https://images.unsplash.com/photo-1540103547041-3929427b3708?auto=format&fit=crop&q=80&w=800\",\n tips: [\"Charge to 100% uninterrupted, then discharge to 5% before recharging to calibrate the battery gas gauge IC.\"]\n }\n ],\n alternativeSolutions: \"Generate a Windows battery report (`powercfg /batteryreport`) or check macOS System Information to check actual cycle count and full charge capacity before replacing.\",\n imageUrl: \"https://images.unsplash.com/photo-1597733336794-12d05021d510?auto=format&fit=crop&q=80&w=800\",\n viewCount: 2150,\n downloadCount: 512\n },\n {\n title: \"Desktop Dedicated GPU Installation & PCIe Reseating\",\n description: \"Install, upgrade, or reseat high-performance PCI Express graphics cards, including supplementary 8-pin / 12VHPWR PCIe power cabling and anti-sag bracket installation.\",\n deviceType: \"desktop\",\n category: \"hardware\",\n difficulty: \"easy\",\n estimatedTime: \"20-30 min\",\n toolsRequired: [\"Magnetic Phillips #2 Screwdriver\", \"PCIe Power Cables / 12VHPWR Adapter\", \"GPU Anti-Sag Support Bracket\"],\n safetyWarnings: [\n \"Switch off the PSU rocker switch and unplug the AC wall cable before opening desktop side panels.\",\n \"Ensure 12VHPWR connectors are seated 100% flush with zero gap to prevent connector overheating.\"\n ],\n steps: [\n {\n stepNumber: 1,\n title: \"PCIe Slot Preparation & Bracket Removal\",\n description: \"Unscrew and remove the rear expansion slot covers corresponding to your GPU width (typically 2 to 3.5 slots). Push open the motherboard PCIe slot retention latch.\",\n imageUrl: \"https://images.unsplash.com/photo-1587202372775-e229f172b9d7?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 2,\n title: \"Inserting the Graphics Card\",\n description: \"Align the GPU with the top PCIe x16 slot (connected directly to CPU PCIe lanes) and press firmly downward until the retention latch clicks into place.\",\n imageUrl: \"https://images.unsplash.com/photo-1591799264318-7e6ef8ddb7ea?auto=format&fit=crop&q=80&w=800\",\n tips: [\"Always use the topmost PCIe x16 slot for full bandwidth and minimal latency.\"]\n },\n {\n stepNumber: 3,\n title: \"Securing Screws & Power Routing\",\n description: \"Secure the GPU bracket to the chassis frame with thumb screws. Connect dedicated PCIe 6+2 pin cables or 16-pin 12V-2x6 cable. Install the anti-sag bracket under the card corner.\",\n imageUrl: \"https://images.unsplash.com/photo-1587202372775-e229f172b9d7?auto=format&fit=crop&q=80&w=800\"\n }\n ],\n alternativeSolutions: \"If display output is absent, verify monitor DP/HDMI cable is connected directly to the GPU ports, NOT the motherboard I/O.\",\n imageUrl: \"https://images.unsplash.com/photo-1587202372775-e229f172b9d7?auto=format&fit=crop&q=80&w=800\",\n viewCount: 1890,\n downloadCount: 460\n },\n {\n title: \"Desktop Power Supply (PSU) Replacement & Modular Cable Routing\",\n description: \"Replace faulty, buzzing, or under-powered desktop power supplies with modern ATX 3.0 / PCIe 5.0 certified modular units.\",\n deviceType: \"desktop\",\n category: \"hardware\",\n difficulty: \"medium\",\n estimatedTime: \"45-60 min\",\n toolsRequired: [\"Phillips #2 Screwdriver\", \"Velcro Cable Ties / Flush Cutters\", \"PSU Paperclip Jump Tester / Digital Tester\"],\n safetyWarnings: [\n \"NEVER open or disassemble the PSU internal metal housing; high-voltage capacitors hold lethal charge for days.\",\n \"NEVER mix modular cables between different PSU brands or models as pinouts vary and can fry components.\"\n ],\n steps: [\n {\n stepNumber: 1,\n title: \"Unplugging Component Power Cables\",\n description: \"Disconnect the 24-pin Motherboard connector, 8-pin CPU EPS cables (top-left of motherboard), PCIe GPU power cables, and SATA/Molex peripherals.\",\n imageUrl: \"https://images.unsplash.com/photo-1591799264318-7e6ef8ddb7ea?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 2,\n title: \"PSU Unmounting & Removal\",\n description: \"Remove the four mounting screws on the rear of the PC case. Slide the power supply unit out from the PSU basement or side chamber.\",\n imageUrl: \"https://images.unsplash.com/photo-1587202372775-e229f172b9d7?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 3,\n title: \"New PSU Setup & Reconnection\",\n description: \"Plug only the required modular cables into the new PSU, slide into the case with the intake fan facing the dust filter vent, secure with screws, and reconnect all motherboard and GPU headers.\",\n imageUrl: \"https://images.unsplash.com/photo-1540103547041-3929427b3708?auto=format&fit=crop&q=80&w=800\"\n }\n ],\n alternativeSolutions: \"Use a paperclip jump test (shorting green pin 16 to ground pin 17 on the 24-pin ATX connector) to verify fan spin before declaring a PSU dead.\",\n imageUrl: \"https://images.unsplash.com/photo-1591799264318-7e6ef8ddb7ea?auto=format&fit=crop&q=80&w=800\",\n viewCount: 1250,\n downloadCount: 310\n },\n {\n title: \"Laptop Keyboard & Backlight Membrane Replacement\",\n description: \"Replace liquid-damaged, sticky, or missing laptop keyboard assemblies, including ribbon flex seating and riveted palmrest swaps.\",\n deviceType: \"laptop\",\n category: \"hardware\",\n difficulty: \"hard\",\n estimatedTime: \"60-90 min\",\n toolsRequired: [\"Phillips #00 Screwdriver\", \"Plastic Spudger\", \"Tweezers\", \"Hot Air Gun or Soldering Iron for plastic rivets (if applicable)\"],\n safetyWarnings: [\n \"Disconnect battery before unlatching keyboard ZIF (Zero Insertion Force) ribbon sockets.\",\n \"Work delicately around trackpad and keyboard ribbon cables to prevent tearing fragile copper traces.\"\n ],\n steps: [\n {\n stepNumber: 1,\n title: \"Disassemble Bottom Cover & Internal Components\",\n description: \"Remove bottom cover, battery, cooling fans, and motherboard if the keyboard is mounted beneath the logic board tray.\",\n imageUrl: \"https://images.unsplash.com/photo-1597733336794-12d05021d510?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 2,\n title: \"Keyboard Plate Separation\",\n description: \"Unscrew keyboard retaining brackets or gently pry melted plastic retaining studs. Lift out the defective keyboard assembly.\",\n imageUrl: \"https://images.unsplash.com/photo-1588508065123-287b28e013da?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 3,\n title: \"Install Replacement & Ribbon Seating\",\n description: \"Align the new keyboard into the palmrest frame, secure retention screws, and insert the data and backlight ribbon cables fully into the ZIF connectors before clamping the latch.\",\n imageUrl: \"https://images.unsplash.com/photo-1591799264318-7e6ef8ddb7ea?auto=format&fit=crop&q=80&w=800\"\n }\n ],\n alternativeSolutions: \"For single stuck or broken keycaps, individual scissor switches and keycaps can often be replaced without removing the whole assembly.\",\n imageUrl: \"https://images.unsplash.com/photo-1588508065123-287b28e013da?auto=format&fit=crop&q=80&w=800\",\n viewCount: 1680,\n downloadCount: 420\n },\n\n // ==========================================\n // SOFTWARE CATEGORY (LAPTOP & DESKTOP)\n // ==========================================\n {\n title: \"Clean Windows 11 / Windows 10 OS Installation via UEFI USB\",\n description: \"Complete guide to creating a bootable GPT UEFI installation USB media, configuring BIOS Secure Boot / TPM 2.0, partitioning storage, and completing a clean OS deployment.\",\n deviceType: \"laptop\",\n category: \"software\",\n difficulty: \"medium\",\n estimatedTime: \"30-45 min\",\n toolsRequired: [\"8GB+ USB 3.0 Flash Drive\", \"Working PC for Media Creation Tool / Rufus\", \"Target Device\"],\n safetyWarnings: [\n \"A clean installation will erase all data on the target drive partition. Ensure critical files are backed up beforehand.\"\n ],\n steps: [\n {\n stepNumber: 1,\n title: \"Prepare Bootable Media\",\n description: \"Download the official Microsoft Media Creation Tool or use Rufus to flash the Windows ISO onto a USB drive formatted with GPT partition scheme for UEFI target system.\",\n imageUrl: \"https://images.unsplash.com/photo-1563986768609-322da13575f3?auto=format&fit=crop&q=80&w=800\",\n tips: [\"Disable CSM (Compatibility Support Module) in BIOS for pure UEFI boot speed.\"]\n },\n {\n stepNumber: 2,\n title: \"Configure BIOS/UEFI Settings\",\n description: \"Power on target system while tapping Boot Menu key (F12, F11, F8, or Esc depending on brand). Ensure Secure Boot and TPM 2.0 / fTPM are enabled in BIOS settings.\",\n imageUrl: \"https://images.unsplash.com/photo-1555066931-4365d14bab8c?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 3,\n title: \"Partition Drive & Run Setup\",\n description: \"Select 'Custom: Install Windows only (advanced)'. Delete old OEM/system partitions on Drive 0 until 'Unallocated Space' remains, select it, and click Next to let Windows configure EFI, MSR, and Primary NTFS partitions.\",\n imageUrl: \"https://images.unsplash.com/photo-1563986768609-322da13575f3?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 4,\n title: \"Post-Install Drivers & Updates\",\n description: \"Run Windows Update until no pending updates remain. Install manufacturer chipset, GPU, audio, and Wi-Fi drivers.\",\n imageUrl: \"https://images.unsplash.com/photo-1555066931-4365d14bab8c?auto=format&fit=crop&q=80&w=800\"\n }\n ],\n alternativeSolutions: \"If you want to keep files and applications, perform an In-Place Upgrade or Windows Reset ('Keep my files') via Settings > System > Recovery.\",\n imageUrl: \"https://images.unsplash.com/photo-1563986768609-322da13575f3?auto=format&fit=crop&q=80&w=800\",\n viewCount: 3100,\n downloadCount: 890\n },\n {\n title: \"Blue Screen of Death (BSOD) Minidump Analysis & Driver Conflict Resolution\",\n description: \"Diagnose kernel stop codes (CRITICAL_PROCESS_DIED, WHEA_UNCORRECTABLE_ERROR, IRQL_NOT_LESS_OR_EQUAL, MEMORY_MANAGEMENT) using WinDbg and BlueScreenView.\",\n deviceType: \"desktop\",\n category: \"software\",\n difficulty: \"medium\",\n estimatedTime: \"25-40 min\",\n toolsRequired: [\"WinDbg (Windows Debugger)\", \"BlueScreenView / WhoCrashed\", \"Display Driver Uninstaller (DDU)\"],\n safetyWarnings: [\n \"Always reboot into Windows Safe Mode before running Display Driver Uninstaller (DDU) to prevent driver hook conflicts.\"\n ],\n steps: [\n {\n stepNumber: 1,\n title: \"Locate Memory Dump Files\",\n description: \"Navigate to `C:\\\\Windows\\\\Minidump` to locate recent `.dmp` crash files generated during the Blue Screen event.\",\n imageUrl: \"https://images.unsplash.com/photo-1555066931-4365d14bab8c?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 2,\n title: \"Analyze Crash Stack with WinDbg\",\n description: \"Open the `.dmp` file in WinDbg and run the automated command `!analyze -v`. Inspect the `MODULE_NAME`, `FAULTING_IP`, and `PROCESS_NAME` to identify the failing driver (e.g. nvlddmkm.sys, ntoskrnl.exe, tcpip.sys).\",\n imageUrl: \"https://images.unsplash.com/photo-1563986768609-322da13575f3?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 3,\n title: \"Clean Driver Reinstallation\",\n description: \"Boot into Safe Mode, run DDU to completely purge residual graphics or chipset driver files, reboot, and install clean WHQL-certified drivers from the manufacturer.\",\n imageUrl: \"https://images.unsplash.com/photo-1555066931-4365d14bab8c?auto=format&fit=crop&q=80&w=800\"\n }\n ],\n alternativeSolutions: \"Run Windows Memory Diagnostic (`mdsched.exe`) or MemTest86 to rule out faulty physical RAM modules when MEMORY_MANAGEMENT stop codes occur.\",\n imageUrl: \"https://images.unsplash.com/photo-1555066931-4365d14bab8c?auto=format&fit=crop&q=80&w=800\",\n viewCount: 2450,\n downloadCount: 680\n },\n {\n title: \"macOS Internet Recovery & Fresh Sequoia / Sonoma Installation\",\n description: \"Step-by-step procedure for Apple Silicon (M1/M2/M3) and Intel Macs to wipe APFS volumes and reinstall macOS cleanly via Recovery Mode.\",\n deviceType: \"laptop\",\n category: \"software\",\n difficulty: \"easy\",\n estimatedTime: \"40-60 min\",\n toolsRequired: [\"Reliable Wi-Fi or Ethernet connection\", \"Apple ID Credentials\", \"USB-C Power Adapter\"],\n safetyWarnings: [\n \"Ensure FileVault encryption recovery key or Apple ID password is on hand to bypass Activation Lock after erasing.\"\n ],\n steps: [\n {\n stepNumber: 1,\n title: \"Enter Recovery Mode\",\n description: \"On Apple Silicon: Press and hold the power button until 'Loading startup options' appears, then select Options. On Intel Macs: Turn on and immediately hold Command (\u2318) + Option + R.\",\n imageUrl: \"https://images.unsplash.com/photo-1517336714731-489689fd1ca8?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 2,\n title: \"Format Drive in Disk Utility\",\n description: \"Open Disk Utility, select View > Show All Devices. Click the internal SSD (e.g. APPLE SSD), click Erase, set Format to APFS and Scheme to GUID Partition Map, and confirm erase.\",\n imageUrl: \"https://images.unsplash.com/photo-1563986768609-322da13575f3?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 3,\n title: \"Reinstall macOS\",\n description: \"Quit Disk Utility, select 'Reinstall macOS', accept software terms, select the freshly formatted APFS container, and let the installer complete all download and restart phases.\",\n imageUrl: \"https://images.unsplash.com/photo-1517336714731-489689fd1ca8?auto=format&fit=crop&q=80&w=800\"\n }\n ],\n alternativeSolutions: \"For enterprise deployments or fleet provisioning, build a bootable USB installer using the terminal command `createinstallmedia`.\",\n imageUrl: \"https://images.unsplash.com/photo-1517336714731-489689fd1ca8?auto=format&fit=crop&q=80&w=800\",\n viewCount: 1980,\n downloadCount: 540\n },\n {\n title: \"Windows DISM & SFC System File Integrity Repair\",\n description: \"Repair corrupt Windows system files, corrupted update components, and broken side-by-side component stores using command line administrative tools.\",\n deviceType: \"desktop\",\n category: \"software\",\n difficulty: \"easy\",\n estimatedTime: \"15-25 min\",\n toolsRequired: [\"Elevated Windows Terminal / Command Prompt (Admin)\", \"Active Internet Connection\"],\n safetyWarnings: [\n \"Do not power off or force reboot the computer while DISM /RestoreHealth is processing.\"\n ],\n steps: [\n {\n stepNumber: 1,\n title: \"Run DISM Component Store Verification\",\n description: \"Open Terminal as Administrator. Run `DISM /Online /Cleanup-Image /ScanHealth` to check if component store corruption is detected.\",\n imageUrl: \"https://images.unsplash.com/photo-1555066931-4365d14bab8c?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 2,\n title: \"Execute DISM Repair\",\n description: \"Run `DISM /Online /Cleanup-Image /RestoreHealth`. Windows will download fresh system payload files from Windows Update servers to replace corrupted hashes.\",\n imageUrl: \"https://images.unsplash.com/photo-1563986768609-322da13575f3?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 3,\n title: \"Execute System File Checker (SFC)\",\n description: \"Execute `sfc /scannow`. Verify the output reports 'Windows Resource Protection found corrupt files and successfully repaired them.' Reboot when done.\",\n imageUrl: \"https://images.unsplash.com/photo-1555066931-4365d14bab8c?auto=format&fit=crop&q=80&w=800\"\n }\n ],\n alternativeSolutions: \"If DISM cannot find online sources, mount a Windows ISO and specify local source: `DISM /Online /Cleanup-Image /RestoreHealth /Source:wim:D:\\\\sources\\\\install.wim:1 /limitaccess`.\",\n imageUrl: \"https://images.unsplash.com/photo-1555066931-4365d14bab8c?auto=format&fit=crop&q=80&w=800\",\n viewCount: 1650,\n downloadCount: 470\n },\n\n // ==========================================\n // CLEANING CATEGORY (LAPTOP & DESKTOP)\n // ==========================================\n {\n title: \"High-Performance CPU & GPU Thermal Paste Repaste\",\n description: \"Remove degraded, crusty factory thermal interface material (TIM) and apply premium non-conductive thermal paste (Arctic MX-6, Noctua NT-H2, Thermal Grizzly Kryonaut) for 10-25\u00B0C temperature drops.\",\n deviceType: \"laptop\",\n category: \"cleaning\",\n difficulty: \"medium\",\n estimatedTime: \"30-45 min\",\n toolsRequired: [\"99% Isopropyl Alcohol (IPA)\", \"Lint-Free Microfiber Cloth / Coffee Filters\", \"Thermal Paste Tube\", \"Phillips / Torx Screwdrivers\", \"Plastic Spudger\"],\n safetyWarnings: [\n \"Use only non-conductive thermal compounds on exposed silicon dies; do not use liquid metal unless direct nickel coating is confirmed.\",\n \"Tighten heatsink screws in diagonal numbered order (1-2-3-4) to ensure even mounting pressure and prevent die cracking.\"\n ],\n steps: [\n {\n stepNumber: 1,\n title: \"Remove Cooler & Heatsink Assembly\",\n description: \"Loosen heatsink spring screws in reverse diagonal order (4-3-2-1). Gently twist the copper vapor chamber/heatsink to break the vacuum seal before lifting.\",\n imageUrl: \"https://images.unsplash.com/photo-1591799264318-7e6ef8ddb7ea?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 2,\n title: \"Clean Old Thermal Compound\",\n description: \"Apply 99% IPA to a lint-free cloth and gently wipe old dried paste off the CPU/GPU silicon dies and copper coldplate until both surfaces are mirrored and residue-free.\",\n imageUrl: \"https://images.unsplash.com/photo-1588508065123-287b28e013da?auto=format&fit=crop&q=80&w=800\",\n tips: [\"Inspect thermal putty / pads on VRAM chips and VRM inductors; replace if torn or dried out.\"]\n },\n {\n stepNumber: 3,\n title: \"Apply Fresh Paste & Remount Heatsink\",\n description: \"Apply a pea-sized dot (or thin X-pattern for bare direct-die laptop CPUs) of thermal paste. Lower the heatsink flat and tighten screws in numbered diagonal order (1 to 4).\",\n imageUrl: \"https://images.unsplash.com/photo-1591799264318-7e6ef8ddb7ea?auto=format&fit=crop&q=80&w=800\"\n }\n ],\n alternativeSolutions: \"Consider phase-change thermal pads (e.g. Honeywell PTM7950) for long-lasting laptop thermal stability without pump-out degradation.\",\n imageUrl: \"https://images.unsplash.com/photo-1591799264318-7e6ef8ddb7ea?auto=format&fit=crop&q=80&w=800\",\n viewCount: 2890,\n downloadCount: 750\n },\n {\n title: \"Desktop Case & Power Supply Dust Filter Decontamination\",\n description: \"Deep clean dusty radiator fins, fan blades, PSU mesh intakes, and chassis air filters to eliminate thermal throttling and acoustic fan whine.\",\n deviceType: \"desktop\",\n category: \"cleaning\",\n difficulty: \"easy\",\n estimatedTime: \"20-30 min\",\n toolsRequired: [\"Electric Compressed Air Duster\", \"Soft Bristle Anti-Static Brush\", \"99% Isopropyl Alcohol\", \"Microfiber Towels\"],\n safetyWarnings: [\n \"Always hold fan blades stationary with a finger or zip-tie while blowing compressed air to prevent over-spinning the bearing and generating back-EMF voltage into the motherboard fan header.\"\n ],\n steps: [\n {\n stepNumber: 1,\n title: \"Remove Magnetic Mesh Filters\",\n description: \"Slide out top, front, and bottom PSU dust filters. Rinse under warm water and allow to dry completely, or blow clean with electric duster.\",\n imageUrl: \"https://images.unsplash.com/photo-1587202372775-e229f172b9d7?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 2,\n title: \"Clean Radiators & Fan Blades\",\n description: \"Hold each fan blade in place while blowing compressed air through the radiator fins from inside-out. Use an anti-static brush to dislodge stubborn cake on leading blade edges.\",\n imageUrl: \"https://images.unsplash.com/photo-1591799264318-7e6ef8ddb7ea?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 3,\n title: \"Motherboard & GPU Shroud Wipedown\",\n description: \"Gently wipe PCB flat surfaces and GPU backplate with a lightly dampened microfiber cloth (99% IPA). Reassemble dust filters once 100% dry.\",\n imageUrl: \"https://images.unsplash.com/photo-1587202372775-e229f172b9d7?auto=format&fit=crop&q=80&w=800\"\n }\n ],\n alternativeSolutions: \"Perform this maintenance once every 6 months to maintain optimum thermal headroom and extend hardware longevity.\",\n imageUrl: \"https://images.unsplash.com/photo-1587202372775-e229f172b9d7?auto=format&fit=crop&q=80&w=800\",\n viewCount: 1430,\n downloadCount: 390\n },\n {\n title: \"Liquid Spill Emergency Protocol & Ultrasonic Board Cleaning\",\n description: \"Immediate emergency protocol for laptops or keyboards exposed to coffee, water, soda, or juice to prevent galvanic corrosion and short circuits.\",\n deviceType: \"laptop\",\n category: \"cleaning\",\n difficulty: \"hard\",\n estimatedTime: \"90-120 min\",\n toolsRequired: [\"99% Isopropyl Alcohol\", \"Ultrasonic Cleaner / Soft ESD Toothbrush\", \"Distilled Water\", \"Silica Gel Drying Packets\"],\n safetyWarnings: [\n \"NEVER connect power or attempt to boot a liquid-damaged laptop until all internal traces are completely dehydrated and deoxidized.\",\n \"DO NOT use rice; starch dust enters cooling vents and causes further mechanical damage.\"\n ],\n steps: [\n {\n stepNumber: 1,\n title: \"Immediate Power Cut & Inversion\",\n description: \"Force shutdown immediately (hold power 10s), unplug AC adapter, flip laptop into a tent position over a towel, and disconnect battery immediately.\",\n imageUrl: \"https://images.unsplash.com/photo-1597733336794-12d05021d510?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 2,\n title: \"Motherboard Extraction & Inspection\",\n description: \"Disassemble the entire motherboard. Inspect under magnification for green/white copper oxidation and sugar/soda residue around SMD capacitors and ICs.\",\n imageUrl: \"https://images.unsplash.com/photo-1591799264318-7e6ef8ddb7ea?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 3,\n title: \"IPA Wash & Dehydration\",\n description: \"Submerge board in 99% anhydrous Isopropyl Alcohol or ultrasonic bath to displace moisture and dissolve sticky residues. Dry in a heated dehydrator at 50\u00B0C for 4 hours.\",\n imageUrl: \"https://images.unsplash.com/photo-1540103547041-3929427b3708?auto=format&fit=crop&q=80&w=800\"\n }\n ],\n alternativeSolutions: \"Test individual power rails (3.3V, 5V, 1.8V, VCORE) with a digital multimeter before reassembling the full chassis.\",\n imageUrl: \"https://images.unsplash.com/photo-1597733336794-12d05021d510?auto=format&fit=crop&q=80&w=800\",\n viewCount: 2210,\n downloadCount: 620\n },\n\n // ==========================================\n // UPGRADES CATEGORY (LAPTOP & DESKTOP)\n // ==========================================\n {\n title: \"M.2 NVMe PCIe Gen4/Gen5 SSD Installation & OS Migration\",\n description: \"Upgrade slow hard drives or small SSDs to ultra-fast M.2 NVMe solid state drives, including sector-by-sector cloning and heatsink mounting.\",\n deviceType: \"laptop\",\n category: \"upgrades\",\n difficulty: \"easy\",\n estimatedTime: \"25-35 min\",\n toolsRequired: [\"Phillips #00 Screwdriver\", \"M.2 Mounting Standoff & Screw\", \"USB to NVMe Enclosure (for cloning)\", \"Cloning Software (Macrium Reflect / Clonezilla)\"],\n safetyWarnings: [\n \"Always ground yourself before touching naked flash memory chips to prevent ESD damage.\",\n \"Insert M.2 drives at a 30-degree angle; do not force straight horizontally.\"\n ],\n steps: [\n {\n stepNumber: 1,\n title: \"Clone Existing Drive (Optional)\",\n description: \"Insert the new NVMe drive into an external USB enclosure. Run Macrium Reflect or Clonezilla to clone all partitions including EFI and Recovery sectors.\",\n imageUrl: \"https://images.unsplash.com/photo-1597733336794-12d05021d510?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 2,\n title: \"Access M.2 PCIe Slot\",\n description: \"Remove bottom cover/case side panel. Locate the M.2 2280 Key-M slot. Remove existing screw or thermal shield plate.\",\n imageUrl: \"https://images.unsplash.com/photo-1591799264318-7e6ef8ddb7ea?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 3,\n title: \"Install & Fasten NVMe Drive\",\n description: \"Insert the SSD at a 30-degree angle until pins are fully seated in the slot. Press down gently and fasten the M.2 retaining screw. Reapply thermal pad and heat shield.\",\n imageUrl: \"https://images.unsplash.com/photo-1540103547041-3929427b3708?auto=format&fit=crop&q=80&w=800\",\n tips: [\"Peel off the protective plastic film from the motherboard M.2 thermal pad before screwing down the heatsink.\"]\n }\n ],\n alternativeSolutions: \"If BIOS doesn't detect the new drive, verify that SATA/NVMe mode is set to AHCI / NVMe rather than legacy RAID/RST.\",\n imageUrl: \"https://images.unsplash.com/photo-1591799264318-7e6ef8ddb7ea?auto=format&fit=crop&q=80&w=800\",\n viewCount: 3450,\n downloadCount: 980\n },\n {\n title: \"Dual-Channel DDR5 / DDR4 RAM Capacity & Speed Expansion\",\n description: \"Install matched SODIMM (Laptop) or DIMM (Desktop) RAM kits to unlock dual-channel memory bandwidth, and enable XMP/EXPO profiles in BIOS for maximum FPS.\",\n deviceType: \"desktop\",\n category: \"upgrades\",\n difficulty: \"easy\",\n estimatedTime: \"15-20 min\",\n toolsRequired: [\"Anti-Static Wrist Strap\", \"Phillips Screwdriver (if desktop case requires)\"],\n safetyWarnings: [\n \"Handle memory sticks by the outer PCB edges only; never touch the gold contact fingers.\"\n ],\n steps: [\n {\n stepNumber: 1,\n title: \"Identify Optimal Memory Channels\",\n description: \"On 4-slot desktop motherboards, install two memory sticks into slots A2 and B2 (slots 2 and 4 from the CPU) for optimal signal integrity.\",\n imageUrl: \"https://images.unsplash.com/photo-1587202372775-e229f172b9d7?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 2,\n title: \"Slotting the Memory Sticks\",\n description: \"Open the slot retention clips. Align the key notch on the RAM stick with the slot ridge. Press down firmly on both edges until both latches snap shut automatically.\",\n imageUrl: \"https://images.unsplash.com/photo-1591799264318-7e6ef8ddb7ea?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 3,\n title: \"Enable XMP / EXPO in BIOS\",\n description: \"Power on, enter BIOS (Del / F2), locate Extreme Memory Profile (XMP) or AMD EXPO, enable Profile 1, save and exit to run at full advertised MHz (e.g. 6000MHz CL30).\",\n imageUrl: \"https://images.unsplash.com/photo-1555066931-4365d14bab8c?auto=format&fit=crop&q=80&w=800\"\n }\n ],\n alternativeSolutions: \"Check Task Manager > Performance > Memory to confirm configured speed and that 'Slots used: 2 of 4' and 'Dual Channel' are active.\",\n imageUrl: \"https://images.unsplash.com/photo-1587202372775-e229f172b9d7?auto=format&fit=crop&q=80&w=800\",\n viewCount: 2780,\n downloadCount: 710\n },\n {\n title: \"Wi-Fi 6E / Wi-Fi 7 M.2 Tri-Band Card & Bluetooth 5.4 Upgrade\",\n description: \"Swap legacy 802.11ac Wi-Fi cards for Intel AX210 / BE200 Wi-Fi 7 modules for 6GHz spectrum access, lower latency, and Bluetooth 5.4 audio.\",\n deviceType: \"laptop\",\n category: \"upgrades\",\n difficulty: \"medium\",\n estimatedTime: \"20-30 min\",\n toolsRequired: [\"Phillips #00 Screwdriver\", \"Plastic Spudger / Tweezers for U.FL Antenna Connectors\"],\n safetyWarnings: [\n \"U.FL IPEX micro antenna snap connectors are delicate; apply vertical pressure directly above the post to avoid crushing the gold pin.\"\n ],\n steps: [\n {\n stepNumber: 1,\n title: \"Locate Existing WLAN Module\",\n description: \"Disconnect laptop battery. Locate the M.2 2230 WLAN card, usually near the cooling fans or SSD.\",\n imageUrl: \"https://images.unsplash.com/photo-1597733336794-12d05021d510?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 2,\n title: \"Disconnect Antennas & Card Swap\",\n description: \"Carefully pop off the Main (Black) and Aux (White) U.FL antenna cables using plastic tweezers. Remove the mounting screw and slide out old card.\",\n imageUrl: \"https://images.unsplash.com/photo-1591799264318-7e6ef8ddb7ea?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 3,\n title: \"Install New Module & Snap Antennas\",\n description: \"Insert new Wi-Fi 6E/7 card, screw down, and snap the antenna connectors firmly onto the corresponding Main and Aux posts. Install Intel WLAN and Bluetooth drivers.\",\n imageUrl: \"https://images.unsplash.com/photo-1540103547041-3929427b3708?auto=format&fit=crop&q=80&w=800\"\n }\n ],\n alternativeSolutions: \"Download latest Wi-Fi drivers onto a USB flash drive BEFORE swapping the card to prevent being left without network access.\",\n imageUrl: \"https://images.unsplash.com/photo-1597733336794-12d05021d510?auto=format&fit=crop&q=80&w=800\",\n viewCount: 1720,\n downloadCount: 440\n },\n {\n title: \"Desktop All-in-One (AIO) 360mm Liquid CPU Cooler Installation\",\n description: \"Install high-performance 240mm or 360mm AIO liquid coolers on Intel LGA1700/1851 and AMD Socket AM5/AM4 processors for maximum thermal headroom.\",\n deviceType: \"desktop\",\n category: \"upgrades\",\n difficulty: \"medium\",\n estimatedTime: \"45-60 min\",\n toolsRequired: [\"Phillips #2 Screwdriver\", \"AIO Mounting Hardware & Backplate\", \"Thermal Paste (if not pre-applied)\", \"Fan Splitter / ARGB Hub\"],\n safetyWarnings: [\n \"CRITICAL: Always remember to peel off the clear plastic protective sticker from the AIO copper cold plate before mounting to CPU.\",\n \"Mount the radiator above the pump level (e.g. top exhaust) to prevent air bubbles from getting trapped in the pump chamber.\"\n ],\n steps: [\n {\n stepNumber: 1,\n title: \"Install Motherboard Backplate & Standoffs\",\n description: \"Fit the socket-specific backplate (Intel LGA1700 or AMD AM5 bracket) and hand-tighten the four double-threaded standoffs into the bracket holes.\",\n imageUrl: \"https://images.unsplash.com/photo-1587202372775-e229f172b9d7?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 2,\n title: \"Mount Radiator & Fans to Case\",\n description: \"Fasten the 120mm fans to the radiator in push orientation, then mount the radiator assembly to the top or front case bracket using long radiator screws.\",\n imageUrl: \"https://images.unsplash.com/photo-1591799264318-7e6ef8ddb7ea?auto=format&fit=crop&q=80&w=800\"\n },\n {\n stepNumber: 3,\n title: \"Mount Pump Block & Cable Connections\",\n description: \"Peel protective film from copper coldplate, place pump block over the CPU, hand-tighten spring thumbscrews in diagonal X-pattern, and plug the pump tach wire into the `AIO_PUMP` or `CPU_FAN` header.\",\n imageUrl: \"https://images.unsplash.com/photo-1587202372775-e229f172b9d7?auto=format&fit=crop&q=80&w=800\"\n }\n ],\n alternativeSolutions: \"Set the pump speed to 100% constant PWM in BIOS for optimal coolant circulation and whisper-quiet operation.\",\n imageUrl: \"https://images.unsplash.com/photo-1587202372775-e229f172b9d7?auto=format&fit=crop&q=80&w=800\",\n viewCount: 2190,\n downloadCount: 580\n }\n];\n\nexport const comprehensiveTroubleshootingFlows = [\n {\n category: \"power\",\n title: \"Device Fails to Power On / No POST Diagnostics\",\n description: \"Systematic diagnostic workflow to isolate AC adapter failure, drained CMOS battery, shorted motherboard power rail, or bad RAM modules.\",\n steps: [\n {\n stepNumber: 1,\n description: \"Does the power indicator LED light up or blink when connecting the AC charger?\",\n solutions: [\"Perform a hard CMOS battery reset\", \"Test with a known-good AC power adapter\", \"Check DC-in power jack for physical damage or loose solder joints\"]\n },\n {\n stepNumber: 2,\n description: \"Do cooling fans spin, but the screen stays completely black with no BIOS splash screen?\",\n solutions: [\"Reseat RAM modules one at a time\", \"Connect external monitor via HDMI to rule out display panel fault\", \"Clear motherboard RTC clock CMOS jumper\"]\n },\n {\n stepNumber: 3,\n description: \"Does the system immediately shut down after 2-5 seconds of powering on?\",\n solutions: [\"Inspect CPU cooler mounting pressure and thermal paste\", \"Disconnect all non-essential USB and PCIe peripherals to test minimal POST\", \"Check motherboard VRM power delivery\"]\n }\n ]\n },\n {\n category: \"performance\",\n title: \"Thermal Throttling & Severe Fan Noise Diagnostics\",\n description: \"Identify whether system slowdowns are caused by clogged heatsink fins, dried thermal paste, background crypto-miners, or failing fan bearings.\",\n steps: [\n {\n stepNumber: 1,\n description: \"Are CPU or GPU temperatures exceeding 90\u00B0C under light to moderate workloads?\",\n solutions: [\"Repaste CPU and GPU with Arctic MX-6 / Noctua thermal paste\", \"Blow compressed air through radiator exhaust fins to remove dust buildup\", \"Check fan RPM speed curves in BIOS or OEM management software\"]\n },\n {\n stepNumber: 2,\n description: \"Is CPU usage staying at 100% in Task Manager even when idle on desktop?\",\n solutions: [\"Perform full Malwarebytes and Windows Defender offline scans\", \"Check Task Manager for rogue background processes (e.g. Windows Search indexer, crypto-miners)\", \"Run DISM and SFC file integrity scans\"]\n }\n ]\n },\n {\n category: \"display\",\n title: \"Display Artifacts, Flickering & Black Screen Troubleshooting\",\n description: \"Determine if visual glitches, lines, or flickering originate from GPU driver corruption, loose eDP display cables, or cracked panel matrices.\",\n steps: [\n {\n stepNumber: 1,\n description: \"Do horizontal/vertical lines or flickering change when you move the laptop display hinge back and forth?\",\n solutions: [\"Reseat or replace the eDP/LVDS display ribbon cable\", \"Inspect display hinge tension brackets for pinching the cable bundle\"]\n },\n {\n stepNumber: 2,\n description: \"Do colorful checkerboard artifacts or crashes occur primarily inside 3D games or GPU workloads?\",\n solutions: [\"Perform clean GPU driver reinstallation using DDU in Safe Mode\", \"Check GPU VRAM temperatures and lower memory overclock\", \"Verify PCIe power cable seating\"]\n }\n ]\n }\n];\n\nexport const comprehensiveDeviceComponents = [\n {\n name: \"M.2 NVMe SSD\",\n description: \"High-speed solid state drive utilizing PCI Express lanes and NVMe communication protocol for speeds up to 7,500 MB/s.\",\n deviceType: \"laptop\",\n componentType: \"storage\",\n commonIssues: [\"Read-only mode after endurance depletion\", \"Thermal throttling under heavy writes\", \"Unformatted RAW partition\"],\n replacementDifficulty: \"easy\",\n averageCost: \"$45-180\",\n toolsRequired: [\"Phillips #00 screwdriver\", \"Thermal pad\"],\n imageUrl: \"https://images.unsplash.com/photo-1591799264318-7e6ef8ddb7ea?auto=format&fit=crop&q=80&w=800\"\n },\n {\n name: \"SODIMM DDR5 RAM Module\",\n description: \"Compact dual-inline memory module for laptops and mini-PCs with on-die ECC and dual 32-bit sub-channels.\",\n deviceType: \"laptop\",\n componentType: \"memory\",\n commonIssues: [\"BSOD MEMORY_MANAGEMENT\", \"Unseated latch causing no-POST black screen\", \"Intermittent freezes\"],\n replacementDifficulty: \"easy\",\n averageCost: \"$35-120\",\n toolsRequired: [\"Plastic spudger\", \"Anti-static wrist strap\"],\n imageUrl: \"https://images.unsplash.com/photo-1540103547041-3929427b3708?auto=format&fit=crop&q=80&w=800\"\n },\n {\n name: \"Dedicated PCIe Graphics Card (GPU)\",\n description: \"High-performance graphics accelerator card for rendering 3D graphics, gaming, machine learning, and multi-display outputs.\",\n deviceType: \"desktop\",\n componentType: \"graphics\",\n commonIssues: [\"Artifacting / VRAM corruption\", \"Driver timeout / TDR crashes\", \"Fan bearing noise\"],\n replacementDifficulty: \"easy\",\n averageCost: \"$250-1600\",\n toolsRequired: [\"Phillips #2 screwdriver\", \"PCIe power cables\", \"Anti-sag bracket\"],\n imageUrl: \"https://images.unsplash.com/photo-1587202372775-e229f172b9d7?auto=format&fit=crop&q=80&w=800\"\n },\n {\n name: \"ATX Modular Power Supply Unit (PSU)\",\n description: \"High-efficiency 80+ Gold / Platinum power supply converting 115V/230V AC to stable +12V, +5V, and +3.3V DC rails.\",\n deviceType: \"desktop\",\n componentType: \"power\",\n commonIssues: [\"Instant shutdown under GPU transient spikes\", \"No 5VSB standby power\", \"Coil whine\"],\n replacementDifficulty: \"medium\",\n averageCost: \"$70-250\",\n toolsRequired: [\"Phillips #2 screwdriver\", \"Modular cable kit\"],\n imageUrl: \"https://images.unsplash.com/photo-1591799264318-7e6ef8ddb7ea?auto=format&fit=crop&q=80&w=800\"\n },\n {\n name: \"Liquid Crystal / OLED Display Assembly\",\n description: \"High-resolution laptop display panel offering 100% sRGB/DCI-P3 color gamut with eDP connection.\",\n deviceType: \"laptop\",\n componentType: \"display\",\n commonIssues: [\"Cracked glass matrix\", \"Backlight bleed\", \"Dead pixels\", \"eDP cable micro-fractures\"],\n replacementDifficulty: \"hard\",\n averageCost: \"$60-220\",\n toolsRequired: [\"Plastic prying picks\", \"Phillips #00\", \"Bezel adhesive strips\"],\n imageUrl: \"https://images.unsplash.com/photo-1588508065123-287b28e013da?auto=format&fit=crop&q=80&w=800\"\n }\n];\n\nexport const IMAGES = {\n screenTeardown1: \"https://images.unsplash.com/photo-1597733336794-12d05021d510?auto=format&fit=crop&q=80&w=800\",\n screenTeardown2: \"https://images.unsplash.com/photo-1591799264318-7e6ef8ddb7ea?auto=format&fit=crop&q=80&w=800\",\n screenTeardown3: \"https://images.unsplash.com/photo-1588508065123-287b28e013da?auto=format&fit=crop&q=80&w=800\",\n logicBoard: \"https://images.unsplash.com/photo-1518770660439-4636190af475?auto=format&fit=crop&q=80&w=800\",\n battery: \"https://images.unsplash.com/photo-1540103547041-3929427b3708?auto=format&fit=crop&q=80&w=800\",\n soldering: \"https://images.unsplash.com/photo-1581092160607-ee22621dd758?auto=format&fit=crop&q=80&w=800\",\n biosScreen: \"https://images.unsplash.com/photo-1555066931-4365d14bab8c?auto=format&fit=crop&q=80&w=800\",\n terminal: \"https://images.unsplash.com/photo-1526374965328-7f61d4dc18c5?auto=format&fit=crop&q=80&w=800\",\n osRecovery: \"https://images.unsplash.com/photo-1563986768609-322da13575f3?auto=format&fit=crop&q=80&w=800\",\n thermalPaste: \"https://images.unsplash.com/photo-1591799264318-7e6ef8ddb7ea?auto=format&fit=crop&q=80&w=800\",\n cleaningBlower: \"https://images.unsplash.com/photo-1588508065123-287b28e013da?auto=format&fit=crop&q=80&w=800\",\n ultrasonic: \"https://images.unsplash.com/photo-1581092335397-9583fe92d232?auto=format&fit=crop&q=80&w=800\",\n nvmeSSD: \"https://images.unsplash.com/photo-1591799264318-7e6ef8ddb7ea?auto=format&fit=crop&q=80&w=800\",\n ramModule: \"https://images.unsplash.com/photo-1540103547041-3929427b3708?auto=format&fit=crop&q=80&w=800\",\n gpuAio: \"https://images.unsplash.com/photo-1587202372775-e229f172b9d7?auto=format&fit=crop&q=80&w=800\",\n desktopRig: \"https://images.unsplash.com/photo-1587202372634-32705e3bf49c?auto=format&fit=crop&q=80&w=800\"\n};\n\nconst guideTemplates = [\n {\n category: \"hardware\" as const,\n titleSuffix: \"OLED/IPS Screen & Hinge Assembly Replacement\",\n descSuffix: \"Complete teardown procedure to disconnect eDP display cabling, unbolt magnesium hinge brackets, and install a brand-new factory display panel.\",\n difficulty: \"hard\" as const,\n estimatedTime: \"45-60 min\",\n tools: [\"Phillips #00 Screwdriver\", \"Torx T5 Bit\", \"Plastic Spudger\", \"Pre-cut Bezel Adhesive Tape\", \"Anti-Static Wrist Strap\"],\n warnings: [\"Disconnect the main battery before touching internal display ribbon cables.\", \"Handle replacement display glass by perimeter edges only.\"],\n steps: [\n {\n stepNumber: 1,\n title: \"Power Isolation & Battery Disconnection\",\n description: \"Remove bottom enclosure screws and disconnect internal battery harness from the logic board to prevent backlight circuit shorting.\",\n imageUrl: IMAGES.screenTeardown1\n },\n {\n stepNumber: 2,\n title: \"Display Hinge Bracket Unbolting\",\n description: \"Unscrew the left and right steel hinge anchor bolts and unroute Wi-Fi and webcam antenna cables from cable channels.\",\n imageUrl: IMAGES.screenTeardown2\n },\n {\n stepNumber: 3,\n title: \"Screen Bezel Separation & Panel Swap\",\n description: \"Gently pry bezel clips with a thin guitar pick, disconnect the 30/40-pin eDP connector, mount the new panel, and secure with fresh adhesive.\",\n imageUrl: IMAGES.screenTeardown3\n }\n ],\n imageUrl: IMAGES.screenTeardown3\n },\n {\n category: \"hardware\" as const,\n titleSuffix: \"Motherboard & VRM Power Delivery Replacement\",\n descSuffix: \"Comprehensive logic board replacement, port realignment, and heatsink mounting procedure for technician-level system restoration.\",\n difficulty: \"hard\" as const,\n estimatedTime: \"60-90 min\",\n tools: [\"Precision Screwdriver Kit\", \"Thermal Paste (Arctic MX-6)\", \"ESD Mat\", \"Magnetic Screw Tray\"],\n warnings: [\"Ground yourself on an ESD mat.\", \"Track all varying screw lengths carefully to prevent through-board chassis damage.\"],\n steps: [\n {\n stepNumber: 1,\n title: \"Sub-assembly Removal\",\n description: \"Extract battery, cooling assembly, NVMe SSDs, Wi-Fi module, and disconnect all peripheral ribbon cables.\",\n imageUrl: IMAGES.screenTeardown1\n },\n {\n stepNumber: 2,\n title: \"Logic Board Extraction\",\n description: \"Unscrew logic board standoff screws, ease I/O ports out of chassis cutouts, and transfer TPM/CPU components as needed.\",\n imageUrl: IMAGES.logicBoard\n },\n {\n stepNumber: 3,\n title: \"New Board Installation & Post-Test\",\n description: \"Seat the replacement motherboard, reapply thermal compound, reconnect all flex cables, and verify POST in diagnostic mode.\",\n imageUrl: IMAGES.soldering\n }\n ],\n imageUrl: IMAGES.logicBoard\n },\n {\n category: \"hardware\" as const,\n titleSuffix: \"OEM Battery Pack Replacement & BMS Calibration\",\n descSuffix: \"Safely remove degraded or swollen lithium-ion pouch cells, route new OEM battery harness, and execute charging calibration cycle.\",\n difficulty: \"easy\" as const,\n estimatedTime: \"20-30 min\",\n tools: [\"Phillips #00 Screwdriver\", \"Plastic Pry Pick\", \"Safety Glasses\", \"Battery Adhesive Pull Tabs\"],\n warnings: [\"Never bend, puncture, or apply metal tools to lithium-polymer battery packs.\", \"Discharge battery below 25% prior to disassembly.\"],\n steps: [\n {\n stepNumber: 1,\n title: \"Bottom Cover Removal\",\n description: \"Remove perimeter fasteners and release bottom casing to expose the internal battery compartment.\",\n imageUrl: IMAGES.screenTeardown1\n },\n {\n stepNumber: 2,\n title: \"Battery Connector & Adhesive Release\",\n description: \"Unplug the battery data/power harness from the motherboard. Slowly pull the stretch-release adhesive strips parallel to the chassis.\",\n imageUrl: IMAGES.battery\n },\n {\n stepNumber: 3,\n title: \"New Cell Installation & BMS Cycling\",\n description: \"Mount new OEM pack, connect ribbon securely, screw down brackets, and charge continuously to 100% followed by full discharge.\",\n imageUrl: IMAGES.battery\n }\n ],\n imageUrl: IMAGES.battery\n },\n {\n category: \"hardware\" as const,\n titleSuffix: \"DC-In Power Jack & USB-C Port Board Replacement\",\n descSuffix: \"Diagnose intermittent charging and replace fractured DC-in power harness or daughterboard USB-C charging receptacles.\",\n difficulty: \"medium\" as const,\n estimatedTime: \"35-45 min\",\n tools: [\"Torx T5 / Phillips #00\", \"Digital Multimeter\", \"Spudger\", \"Tweezers\"],\n warnings: [\"Verify absence of residual 19V/20V capacitor charge before touching port solder pads.\"],\n steps: [\n {\n stepNumber: 1,\n title: \"Port Accessibility Isolation\",\n description: \"Disconnect internal battery, lift the left/right hinge bracket covering the charging port, and remove cable retention brackets.\",\n imageUrl: IMAGES.screenTeardown2\n },\n {\n stepNumber: 2,\n title: \"Port Harness Detachment\",\n description: \"Unplug the DC-in braided cable harness from the motherboard header or unbolt the modular Type-C daughterboard.\",\n imageUrl: IMAGES.soldering\n },\n {\n stepNumber: 3,\n title: \"Reassembly & Voltage Verification\",\n description: \"Install fresh OEM port module, secure hinge bolts to manufacturer torque specs, and probe 20V rail with multimeter.\",\n imageUrl: IMAGES.logicBoard\n }\n ],\n imageUrl: IMAGES.soldering\n },\n {\n category: \"hardware\" as const,\n titleSuffix: \"Dual Cooling Fan & Copper Heatpipe Module Overhaul\",\n descSuffix: \"Replace noisy, rattling, or seized CPU/GPU blower fans and re-torque copper vapor chamber heatsink assembly.\",\n difficulty: \"medium\" as const,\n estimatedTime: \"30-40 min\",\n tools: [\"Phillips #00 Screwdriver\", \"Thermal Paste\", \"Micro-Tweezers\", \"Can of Compressed Air\"],\n warnings: [\"Tighten heatsink screws in stamped numerical order (1 -> 2 -> 3 -> 4) to ensure uniform die pressure.\"],\n steps: [\n {\n stepNumber: 1,\n title: \"Cooling Shroud Removal\",\n description: \"Disconnect 4-pin PWM fan headers, remove perimeter heatsink screws in reverse order, and lift copper assembly away from dies.\",\n imageUrl: IMAGES.thermalPaste\n },\n {\n stepNumber: 2,\n title: \"Blower Impeller Swap\",\n description: \"Unscrew fan motor brackets from heatpipe radiator fins and mount brand-new fluid-dynamic bearing fan units.\",\n imageUrl: IMAGES.cleaningBlower\n },\n {\n stepNumber: 3,\n title: \"Paste Refresh & Sequential Torque\",\n description: \"Wipe dies clean with 99% IPA, apply high-viscosity thermal paste, fasten screws sequentially, and plug in fan headers.\",\n imageUrl: IMAGES.thermalPaste\n }\n ],\n imageUrl: IMAGES.thermalPaste\n },\n\n // SOFTWARE\n {\n category: \"software\" as const,\n titleSuffix: \"UEFI / BIOS Firmware Recovery & Crisis Flash Protocol\",\n descSuffix: \"Step-by-step procedure to flash, recover, or clear corrupted UEFI BIOS firmware using USB FlashBack or emergency key combinations.\",\n difficulty: \"medium\" as const,\n estimatedTime: \"20-30 min\",\n tools: [\"FAT32 Formatted USB Flash Drive\", \"OEM BIOS Firmware File\", \"Stable AC Power Source\"],\n warnings: [\"NEVER unplug power or reboot while the firmware EEPROM is writing.\", \"Ensure battery has at least 50% charge before starting.\"],\n steps: [\n {\n stepNumber: 1,\n title: \"Prepare Flash Drive\",\n description: \"Format USB drive to FAT32 with MBR partition scheme. Download latest verified OEM BIOS file and rename to the required hardware flashback string if using blind USB flash.\",\n imageUrl: IMAGES.biosScreen\n },\n {\n stepNumber: 2,\n title: \"Initiate BIOS Update Environment\",\n description: \"Boot into BIOS Setup (tap F2/Del) and open the built-in flash utility (EZ Flash / Q-Flash / M-Flash / Dell BIOS Update) or hold the chassis FlashBack button.\",\n imageUrl: IMAGES.osRecovery\n },\n {\n stepNumber: 3,\n title: \"Execute ROM Write & Reset CMOS\",\n description: \"Confirm ROM validation checksum. Allow the system to flash blocks 0-100% and reboot automatically into the updated microcode environment.\",\n imageUrl: IMAGES.biosScreen\n }\n ],\n imageUrl: IMAGES.biosScreen\n },\n {\n category: \"software\" as const,\n titleSuffix: \"EFI Bootloader & BCD Partition Reconstruction\",\n descSuffix: \"Resolve 'No Bootable Device Found' and 0xc000000e boot errors by rebuilding the EFI system partition and Windows Boot Configuration Data.\",\n difficulty: \"medium\" as const,\n estimatedTime: \"25-35 min\",\n tools: [\"Windows Recovery USB Media\", \"Command Prompt Environment\"],\n warnings: [\"Verify disk volume numbers with `diskpart` carefully before formatting any partition.\"],\n steps: [\n {\n stepNumber: 1,\n title: \"Boot Recovery Environment\",\n description: \"Boot from Windows Recovery Media > Repair your computer > Troubleshoot > Advanced Options > Command Prompt.\",\n imageUrl: IMAGES.terminal\n },\n {\n stepNumber: 2,\n title: \"Assign Drive Letter to EFI Partition\",\n description: \"Run `diskpart`, `list volume`, select the ~100MB FAT32 system partition, run `assign letter=S:`, and exit diskpart.\",\n imageUrl: IMAGES.osRecovery\n },\n {\n stepNumber: 3,\n title: \"Rebuild BCD Store\",\n description: \"Execute `bcdboot C:\\\\Windows /s S: /f UEFI` to generate fresh UEFI boot files, and reboot.\",\n imageUrl: IMAGES.terminal\n }\n ],\n imageUrl: IMAGES.terminal\n },\n {\n category: \"software\" as const,\n titleSuffix: \"BSOD Kernel Triage & Clean OS Driver Reinstallation\",\n descSuffix: \"Isolate recurring WHEA_UNCORRECTABLE_ERROR, IRQL_NOT_LESS_OR_EQUAL stop codes and perform clean DDU driver wipes in Safe Mode.\",\n difficulty: \"easy\" as const,\n estimatedTime: \"20-30 min\",\n tools: [\"Display Driver Uninstaller (DDU)\", \"OEM WHQL Driver Package\", \"Safe Mode Boot Option\"],\n warnings: [\"Disconnect internet cable during DDU reinstallation to prevent Windows Update from installing generic drivers.\"],\n steps: [\n {\n stepNumber: 1,\n title: \"Boot Safe Mode Without Networking\",\n description: \"Hold Shift while clicking Restart > Troubleshoot > Advanced Options > Startup Settings > Restart > Press 4 for Safe Mode.\",\n imageUrl: IMAGES.osRecovery\n },\n {\n stepNumber: 2,\n title: \"Run DDU Clean and Restart\",\n description: \"Launch Display Driver Uninstaller, select GPU (NVIDIA/AMD/Intel), click 'Clean and restart' to wipe registry keys and display caches.\",\n imageUrl: IMAGES.terminal\n },\n {\n stepNumber: 3,\n title: \"Install Clean WHQL Drivers\",\n description: \"Boot back to normal desktop, install official OEM driver package with Clean Install checked, and verify thermal sensors.\",\n imageUrl: IMAGES.osRecovery\n }\n ],\n imageUrl: IMAGES.osRecovery\n },\n {\n category: \"software\" as const,\n titleSuffix: \"Secure Boot, TPM 2.0 & BitLocker State Restoration\",\n descSuffix: \"Re-initialize hardware TPM 2.0 security chips, resolve BitLocker recovery loops, and configure UEFI Secure Boot key databases.\",\n difficulty: \"medium\" as const,\n estimatedTime: \"20-25 min\",\n tools: [\"BitLocker 48-digit Recovery Key\", \"BIOS Security Menu Access\"],\n warnings: [\"Ensure you have your 48-digit BitLocker key backed up before clearing TPM keys.\"],\n steps: [\n {\n stepNumber: 1,\n title: \"BIOS Security Configuration\",\n description: \"Enter UEFI BIOS > Security > Intel PTT / AMD fTPM > Enable. Verify Secure Boot is set to Standard mode with factory default keys.\",\n imageUrl: IMAGES.biosScreen\n },\n {\n stepNumber: 2,\n title: \"Clear TPM / PTT State\",\n description: \"If system is stuck in an authentication loop, select 'Clear TPM' in BIOS and confirm cryptographic key reset.\",\n imageUrl: IMAGES.terminal\n },\n {\n stepNumber: 3,\n title: \"Windows Hello & PIN Re-enrollment\",\n description: \"Enter the BitLocker recovery key once, boot to Windows, and reconfigure your Windows Hello PIN and biometric fingerprint data.\",\n imageUrl: IMAGES.osRecovery\n }\n ],\n imageUrl: IMAGES.biosScreen\n },\n\n // CLEANING\n {\n category: \"cleaning\" as const,\n titleSuffix: \"Thermal Module Deep Clean & Phase-Change Repasting\",\n descSuffix: \"Dissolve dried factory thermal interface material, clean copper heatsink fins, lubricate cooling fan bearings, and reapply high-performance TIM.\",\n difficulty: \"medium\" as const,\n estimatedTime: \"30-45 min\",\n tools: [\"99% Isopropyl Alcohol\", \"Microfiber Cloths\", \"Thermal Paste / PTM7950\", \"Electric Compressed Air Blower\", \"Soft Brush\"],\n warnings: [\"Do not allow fan impellers to free-spin while blasting air.\", \"Tighten heatsink screws strictly in sequential order (1-2-3-4).\"],\n steps: [\n {\n stepNumber: 1,\n title: \"Cooler Removal & Fan Extraction\",\n description: \"Unscrew cooling module retaining screws in reverse order. Gently lift the copper assembly away from the CPU and GPU dies.\",\n imageUrl: IMAGES.thermalPaste\n },\n {\n stepNumber: 2,\n title: \"Chemical De-greasing & Radiator Fluff Removal\",\n description: \"Clean old crusty paste using 99% IPA until mirror finish. Blow pressurized air through the exhaust fin channels from the outside in.\",\n imageUrl: IMAGES.cleaningBlower\n },\n {\n stepNumber: 3,\n title: \"Reapplication & Reseating\",\n description: \"Apply fresh thermal compound, re-position the heatsink flat against the dies, tighten screws sequentially, and reconnect fan headers.\",\n imageUrl: IMAGES.thermalPaste\n }\n ],\n imageUrl: IMAGES.thermalPaste\n },\n {\n category: \"cleaning\" as const,\n titleSuffix: \"Ultrasonic Bath & Liquid Spill Corrosion Decontamination\",\n descSuffix: \"Rescue water, coffee, or soda damaged motherboards through ultrasonic cleaning in 99% anhydrous alcohol and PCB baking.\",\n difficulty: \"hard\" as const,\n estimatedTime: \"90-120 min\",\n tools: [\"Ultrasonic Cleaner\", \"99.9% Anhydrous Isopropyl Alcohol\", \"Soft Bristle ESD Brush\", \"Drying Oven (50\u00B0C)\"],\n warnings: [\"Never submerge CMOS batteries, mechanical fans, or microphone modules in ultrasonic cleaner.\"],\n steps: [\n {\n stepNumber: 1,\n title: \"Board Disassembly & Pre-wash Inspection\",\n description: \"Strip all socketed components, heatspreaders, and labels. Inspect under stereo microscope for green copper oxidation and burnt power traces.\",\n imageUrl: IMAGES.ultrasonic\n },\n {\n stepNumber: 2,\n title: \"Ultrasonic Degreasing Cycle\",\n description: \"Place motherboard in ultrasonic tank with 99% IPA solution. Run 8-minute sweep frequency cycle at 40kHz to dislodge flux and sugar minerals.\",\n imageUrl: IMAGES.ultrasonic\n },\n {\n stepNumber: 3,\n title: \"Dehydration & Micro-soldering Inspection\",\n description: \"Bake PCB in drying oven at 50\u00B0C for 2 hours to evaporate internal moisture. Touch up corroded SMD pads with leaded solder and flux.\",\n imageUrl: IMAGES.soldering\n }\n ],\n imageUrl: IMAGES.ultrasonic\n },\n {\n category: \"cleaning\" as const,\n titleSuffix: \"Keyboard Deck Crumb Flush & Sticky Key Switch Repair\",\n descSuffix: \"Dislodge dust debris, flush sticky tactile scissor clips with fast-evaporating contact cleaner, and restore uniform key travel.\",\n difficulty: \"easy\" as const,\n estimatedTime: \"20-30 min\",\n tools: [\"Keycap Puller\", \"Electronic Contact Cleaner\", \"Microfiber Swabs\", \"Precision Spudger\"],\n warnings: [\"Do not use petroleum-based lubricants (WD-40) on membrane or scissor switches.\"],\n steps: [\n {\n stepNumber: 1,\n title: \"Keycap Extraction & Clip Inspection\",\n description: \"Gently unlatch top retention tabs of sticky keycaps using a thin plastic spudger, avoiding damage to delicate plastic scissor hinges.\",\n imageUrl: IMAGES.cleaningBlower\n },\n {\n stepNumber: 2,\n title: \"Switch Degreasing & Solvent Application\",\n description: \"Apply quick-drying electronic contact cleaner around the rubber dome, depress switch 20 times, and wipe dislodged grime with microfiber swabs.\",\n imageUrl: IMAGES.screenTeardown1\n },\n {\n stepNumber: 3,\n title: \"Hinge Re-latching & Tactile Testing\",\n description: \"Snap scissor mechanisms back into chassis anchors, press keycap down firmly until two distinct clicks are heard, and test in key-tester utility.\",\n imageUrl: IMAGES.cleaningBlower\n }\n ],\n imageUrl: IMAGES.cleaningBlower\n },\n {\n category: \"cleaning\" as const,\n titleSuffix: \"VRAM & MOSFET Thermal Pad Caliper Sizing & Renewal\",\n descSuffix: \"Measure exact millimeter gap tolerances (0.5mm, 1.0mm, 1.5mm) and install high thermal conductivity silicone pads on graphics cards and power stages.\",\n difficulty: \"medium\" as const,\n estimatedTime: \"30-45 min\",\n tools: [\"Digital Vernier Caliper\", \"High-Performance Thermal Pads (12.8 W/mK)\", \"Precision Cutting Shears\", \"Alcohol Prep Pads\"],\n warnings: [\"Using overly thick pads causes poor CPU/GPU core contact, resulting in instantaneous thermal shutdowns.\"],\n steps: [\n {\n stepNumber: 1,\n title: \"Heatsink Dismount & Old Pad Removal\",\n description: \"Separate heatsink from PCB, peel off compressed OEM thermal pads, and clean oil residue from memory chips using 99% IPA.\",\n imageUrl: IMAGES.thermalPaste\n },\n {\n stepNumber: 2,\n title: \"Caliper Gap Measurement & Pad Trimming\",\n description: \"Measure gap between chip packages and copper baseplates with vernier caliper. Cut replacement pads to 1:1 chip dimensions.\",\n imageUrl: IMAGES.nvmeSSD\n },\n {\n stepNumber: 3,\n title: \"Peel Protective Film & Mount\",\n description: \"Peel blue plastic backing from both pad faces, press onto VRAM chips, re-mount heatsink, and check core contact spread pattern.\",\n imageUrl: IMAGES.thermalPaste\n }\n ],\n imageUrl: IMAGES.thermalPaste\n },\n\n // UPGRADES\n {\n category: \"upgrades\" as const,\n titleSuffix: \"PCIe 4.0 / 5.0 NVMe SSD Expansion & Sector Cloning\",\n descSuffix: \"Expand high-speed storage up to 4TB/8TB, attach thermal heatsinks, and clone the OS partition using sector-by-sector cloning.\",\n difficulty: \"easy\" as const,\n estimatedTime: \"25-35 min\",\n tools: [\"Phillips #00 Screwdriver\", \"M.2 2280 NVMe SSD\", \"USB NVMe Enclosure\", \"Cloning Software\"],\n warnings: [\"Touch a grounded metallic object to discharge static electricity before inserting NVMe card.\"],\n steps: [\n {\n stepNumber: 1,\n title: \"Clone Existing Drive\",\n description: \"Place the new NVMe SSD in an external USB-C enclosure and clone the active boot drive using sector-by-sector clone software.\",\n imageUrl: IMAGES.nvmeSSD\n },\n {\n stepNumber: 2,\n title: \"M.2 Slot Installation\",\n description: \"Insert the NVMe SSD into the motherboard M.2 Key-M slot at a 30-degree angle, press down gently, and tighten the M2x3mm retention screw.\",\n imageUrl: IMAGES.nvmeSSD\n },\n {\n stepNumber: 3,\n title: \"Verify UEFI Boot Priority & Trim\",\n description: \"Boot into BIOS, ensure the new drive is set as Primary Boot Option 1, boot into OS, and verify TRIM is enabled.\",\n imageUrl: IMAGES.biosScreen\n }\n ],\n imageUrl: IMAGES.nvmeSSD\n },\n {\n category: \"upgrades\" as const,\n titleSuffix: \"DDR4 / DDR5 Dual-Channel High-Speed RAM Upgrade\",\n descSuffix: \"Maximize system multitasking and memory bandwidth by installing dual-rank matched SODIMM memory modules.\",\n difficulty: \"easy\" as const,\n estimatedTime: \"15-20 min\",\n tools: [\"Plastic Spudger\", \"Matched DDR5 SODIMM Memory Kit\", \"Anti-Static Mat\"],\n warnings: [\"Ensure the laptop is completely powered off and the internal battery disconnected before touching memory slots.\"],\n steps: [\n {\n stepNumber: 1,\n title: \"Remove Memory Shield & Eject Old RAM\",\n description: \"Prise away EMI metal shielding canopy. Spread the side metal retention clips outward to allow the SODIMM module to pop up at a 45-degree angle.\",\n imageUrl: IMAGES.ramModule\n },\n {\n stepNumber: 2,\n title: \"Insert New Dual-Rank SODIMM\",\n description: \"Align module notch with slot key, slide firmly into the socket at 45 degrees, and push flat until retaining clips lock with a tactile click.\",\n imageUrl: IMAGES.ramModule\n },\n {\n stepNumber: 3,\n title: \"POST Memory Training & MemTest86\",\n description: \"Power on the system. Allow 30-60 seconds for initial DDR5 memory training, verify full capacity in BIOS, and run diagnostics.\",\n imageUrl: IMAGES.biosScreen\n }\n ],\n imageUrl: IMAGES.ramModule\n },\n {\n category: \"upgrades\" as const,\n titleSuffix: \"Wi-Fi 7 / Wi-Fi 6E BE200 M.2 Wireless Module & Antenna Upgrade\",\n descSuffix: \"Upgrade legacy networking to tri-band 320MHz channel width Wi-Fi 7 with Bluetooth 5.4 for sub-millisecond local network latencies.\",\n difficulty: \"easy\" as const,\n estimatedTime: \"15-20 min\",\n tools: [\"Phillips #00 Screwdriver\", \"Plastic Spudger / Tweezers\", \"Wi-Fi 7 M.2 2230 Card\"],\n warnings: [\"Carefully press micro IPEX MHF4 antenna snaps straight down \u2014 never slide sideways to avoid bending connector pins.\"],\n steps: [\n {\n stepNumber: 1,\n title: \"Locate M.2 Key-E Slot\",\n description: \"Disconnect internal battery and locate the M.2 Key-E 2230 slot beneath shielding or secondary drive bays.\",\n imageUrl: IMAGES.screenTeardown1\n },\n {\n stepNumber: 2,\n title: \"Antenna Latching (Main & Aux)\",\n description: \"Snap black (Main) and white/grey (Aux) antenna micro-leads onto the new Wi-Fi card gold pads using fingertips or nylon tweezers.\",\n imageUrl: IMAGES.logicBoard\n },\n {\n stepNumber: 3,\n title: \"Fasten Standoff & Install OEM Drivers\",\n description: \"Tighten M2 retention screw, close chassis, boot into OS, and install latest Intel / Qualcomm Wi-Fi 7 package.\",\n imageUrl: IMAGES.osRecovery\n }\n ],\n imageUrl: IMAGES.logicBoard\n }\n];\n\nconst modelTargets = [\n // Apple\n { brand: \"Apple\", model: \"MacBook Pro 16\\\" M3 Max\", type: \"laptop\" as const },\n { brand: \"Apple\", model: \"MacBook Pro 14\\\" M3 Pro\", type: \"laptop\" as const },\n { brand: \"Apple\", model: \"MacBook Air 15\\\" M2 / M3\", type: \"laptop\" as const },\n { brand: \"Apple\", model: \"MacBook Air 13\\\" M1 Legacy\", type: \"laptop\" as const },\n { brand: \"Apple\", model: \"Mac Studio M2 Ultra\", type: \"desktop\" as const },\n { brand: \"Apple\", model: \"iMac 24\\\" 4.5K Retina M3\", type: \"desktop\" as const },\n { brand: \"Apple\", model: \"Mac mini M2 Pro\", type: \"desktop\" as const },\n\n // Dell\n { brand: \"Dell\", model: \"XPS 15 9530\", type: \"laptop\" as const },\n { brand: \"Dell\", model: \"XPS 13 Plus 9320\", type: \"laptop\" as const },\n { brand: \"Dell\", model: \"Latitude 5440 Enterprise\", type: \"laptop\" as const },\n { brand: \"Dell\", model: \"Alienware m16 R2 Gaming\", type: \"laptop\" as const },\n { brand: \"Dell\", model: \"OptiPlex 7010 Micro\", type: \"desktop\" as const },\n { brand: \"Dell\", model: \"OptiPlex 5090 SFF\", type: \"desktop\" as const },\n { brand: \"Dell\", model: \"Alienware Aurora R16\", type: \"desktop\" as const },\n\n // Lenovo\n { brand: \"Lenovo\", model: \"ThinkPad X1 Carbon Gen 11\", type: \"laptop\" as const },\n { brand: \"Lenovo\", model: \"ThinkPad T14 Gen 4\", type: \"laptop\" as const },\n { brand: \"Lenovo\", model: \"Legion Pro 7i Gen 9\", type: \"laptop\" as const },\n { brand: \"Lenovo\", model: \"Yoga 9i Dual-Screen\", type: \"laptop\" as const },\n { brand: \"Lenovo\", model: \"ThinkCentre M90q Tiny\", type: \"desktop\" as const },\n { brand: \"Lenovo\", model: \"Legion Tower 7i\", type: \"desktop\" as const },\n\n // HP\n { brand: \"HP\", model: \"Spectre x360 14 (2024)\", type: \"laptop\" as const },\n { brand: \"HP\", model: \"EliteBook 840 G10\", type: \"laptop\" as const },\n { brand: \"HP\", model: \"OMEN Transcend 16\", type: \"laptop\" as const },\n { brand: \"HP\", model: \"OMEN 45L Cryo-Chamber\", type: \"desktop\" as const },\n { brand: \"HP\", model: \"ProDesk 600 G6 SFF\", type: \"desktop\" as const },\n\n // ASUS\n { brand: \"ASUS\", model: \"ROG Zephyrus G14 (2024)\", type: \"laptop\" as const },\n { brand: \"ASUS\", model: \"ZenBook 14 OLED UX3405\", type: \"laptop\" as const },\n { brand: \"ASUS\", model: \"ROG Strix SCAR 16\", type: \"laptop\" as const },\n { brand: \"ASUS\", model: \"ROG Strix G16CH Desktop\", type: \"desktop\" as const },\n\n // Acer & MSI & Razer & Microsoft & Framework & Custom\n { brand: \"Acer\", model: \"Predator Helios 16\", type: \"laptop\" as const },\n { brand: \"MSI\", model: \"Stealth 16 AI Studio\", type: \"laptop\" as const },\n { brand: \"Razer\", model: \"Blade 16 Dual-Mode\", type: \"laptop\" as const },\n { brand: \"Microsoft\", model: \"Surface Laptop 5\", type: \"laptop\" as const },\n { brand: \"Framework\", model: \"Framework Laptop 13 / 16 Modular\", type: \"laptop\" as const },\n { brand: \"Samsung\", model: \"Galaxy Book4 Ultra\", type: \"laptop\" as const },\n { brand: \"LG\", model: \"LG Gram 17 Pro\", type: \"laptop\" as const },\n { brand: \"Custom Built\", model: \"Custom Full/Mid ATX Gaming PC\", type: \"desktop\" as const },\n { brand: \"Custom Built\", model: \"Mini-ITX Small Form Factor SFF\", type: \"desktop\" as const }\n];\n\nfunction buildAllGuides(): SeedGuide[] {\n const list: SeedGuide[] = [...curatedRepairGuides];\n for (const target of modelTargets) {\n for (const template of guideTemplates) {\n list.push({\n title: `${target.model}: ${template.titleSuffix}`,\n description: `Dedicated ${template.category} service teardown and step-by-step repair guide for the ${target.brand} ${target.model}. ${template.descSuffix}`,\n deviceType: target.type,\n category: template.category,\n difficulty: template.difficulty,\n estimatedTime: template.estimatedTime,\n toolsRequired: template.tools,\n safetyWarnings: template.warnings,\n steps: template.steps,\n alternativeSolutions: `Reference ${target.brand} technical hardware maintenance manuals or contact certified technicians for warranty support.`,\n imageUrl: template.imageUrl\n });\n }\n }\n return list;\n}\n\nexport const comprehensiveRepairGuides: SeedGuide[] = buildAllGuides();\n\nexport async function seedDatabase() {\n if (!db) {\n console.log(\"No PostgreSQL database configured. Using in-memory dataset.\");\n return;\n }\n try {\n console.log(`Seeding ${comprehensiveRepairGuides.length} comprehensive repair guides into database...`);\n for (const guide of comprehensiveRepairGuides) {\n await db.insert(repairGuides).values({\n ...guide,\n viewCount: guide.viewCount || Math.floor(Math.random() * 1000) + 200,\n downloadCount: guide.downloadCount || Math.floor(Math.random() * 300) + 50,\n isBookmarked: false\n }).onConflictDoNothing();\n }\n console.log(\"Database seeding finished.\");\n } catch (error) {\n console.error(\"Error seeding database:\", error);\n }\n}\n", "import { storage } from \"./storage\";\nimport { type InsertRepairGuide } from \"@shared/schema\";\nimport { curatedRepairGuides } from \"./seed-data\";\n\n/**\n * Technical Seeder for JCR Guide Pro\n * Seeds 180+ comprehensive repair guides accurately organized into the 4 core categories:\n * - hardware\n * - software\n * - cleaning\n * - upgrades\n * Every guide contains start-to-finish intimate details: pre-diagnostics, fastener torque mapping,\n * ZIF ribbon latching, thermal interface specs, reassembly reverse protocols, and post-QA tests.\n */\n\n// High-resolution verified how-to step images for repair procedures\nexport const IMAGES = {\n screenTeardown1: \"https://images.unsplash.com/photo-1597733336794-12d05021d510?auto=format&fit=crop&q=80&w=800\",\n screenTeardown2: \"https://images.unsplash.com/photo-1591799264318-7e6ef8ddb7ea?auto=format&fit=crop&q=80&w=800\",\n screenTeardown3: \"https://images.unsplash.com/photo-1588508065123-287b28e013da?auto=format&fit=crop&q=80&w=800\",\n logicBoard: \"https://images.unsplash.com/photo-1518770660439-4636190af475?auto=format&fit=crop&q=80&w=800\",\n battery: \"https://images.unsplash.com/photo-1540103547041-3929427b3708?auto=format&fit=crop&q=80&w=800\",\n soldering: \"https://images.unsplash.com/photo-1581092160607-ee22621dd758?auto=format&fit=crop&q=80&w=800\",\n biosScreen: \"https://images.unsplash.com/photo-1555066931-4365d14bab8c?auto=format&fit=crop&q=80&w=800\",\n terminal: \"https://images.unsplash.com/photo-1526374965328-7f61d4dc18c5?auto=format&fit=crop&q=80&w=800\",\n osRecovery: \"https://images.unsplash.com/photo-1563986768609-322da13575f3?auto=format&fit=crop&q=80&w=800\",\n thermalPaste: \"https://images.unsplash.com/photo-1591799264318-7e6ef8ddb7ea?auto=format&fit=crop&q=80&w=800\",\n cleaningBlower: \"https://images.unsplash.com/photo-1588508065123-287b28e013da?auto=format&fit=crop&q=80&w=800\",\n ultrasonic: \"https://images.unsplash.com/photo-1581092335397-9583fe92d232?auto=format&fit=crop&q=80&w=800\",\n nvmeSSD: \"https://images.unsplash.com/photo-1591799264318-7e6ef8ddb7ea?auto=format&fit=crop&q=80&w=800\",\n ramModule: \"https://images.unsplash.com/photo-1540103547041-3929427b3708?auto=format&fit=crop&q=80&w=800\",\n gpuAio: \"https://images.unsplash.com/photo-1587202372775-e229f172b9d7?auto=format&fit=crop&q=80&w=800\",\n desktopRig: \"https://images.unsplash.com/photo-1587202372634-32705e3bf49c?auto=format&fit=crop&q=80&w=800\"\n};\n\n// 16 In-depth Category Procedure Templates with Start-to-Finish Intimate Details\nexport const guideTemplates = [\n // ----------------------------------------------------\n // HARDWARE (5 Templates)\n // ----------------------------------------------------\n {\n category: \"hardware\" as const,\n titleSuffix: \"OLED/IPS Screen & Hinge Assembly Replacement\",\n descSuffix: \"Complete start-to-finish teardown procedure to isolate power, disconnect eDP display cabling, unbolt steel hinge brackets, and install a factory display panel.\",\n difficulty: \"hard\" as const,\n estimatedTime: \"45-60 min\",\n tools: [\"Phillips #00 Screwdriver\", \"Torx T5 Precision Bit\", \"Plastic Spudger / Guitar Pick\", \"Pre-cut Bezel Adhesive Strips\", \"Anti-Static Wrist Strap\", \"Digital Caliper\"],\n warnings: [\n \"CRITICAL: Disconnect the main battery harness before touching internal display ribbon cables to prevent instant backlight fuse burnout (BL_PWR 19V rail shorting to 3.3V data lines).\",\n \"Handle the replacement display glass by perimeter edges only; never exert localized thumb pressure over the active matrix area.\",\n \"Track screw lengths precisely. Driving a long M2.5 screw into a shallow blind hole will crack the outer palmrest chassis.\"\n ],\n steps: [\n {\n stepNumber: 1,\n phase: \"Phase 1: Pre-Disassembly Diagnostics & Power Isolation\",\n title: \"Power Drain, Static Grounding & Battery Decoupling\",\n description: \"Prior to any physical fastener removal, ensure the device is completely powered down (not in Modern Standby / Sleep mode). Disconnect the AC adapter, clip on your ESD grounding strap, remove the bottom cover perimeter screws, and physically detach the main battery power harness.\",\n toolRequired: \"Torx T5 / Phillips #00 & Plastic Pry Pick\",\n torqueSpec: \"0.20 Nm\",\n subSteps: [\n \"Power off machine and hold power button for 15 seconds to discharge motherboard filter capacitors.\",\n \"Remove all bottom cover perimeter screws (note differing screw lengths in a magnetic compartment tray).\",\n \"Use a plastic pry tool to release perimeter retaining clips, starting from the rear hinge exhaust vents.\",\n \"Locate the battery motherboard connector; slide the metal retention lock back and pull the harness straight out parallel to the board.\",\n \"Press the power button again for 5 seconds to drain any residual standby voltage on the +VBAT and +3.3V_ALW rails.\"\n ],\n warnings: [\"Never use metallic tweezers or metal pry tools near battery pins to avoid catastrophic lithium-ion shorting.\"],\n tips: [\"Take a high-resolution photo of the cable routing channels before disconnecting anything for exact reassembly reference.\"],\n checkpoints: [\"Multimeter verification: 0.00V measured across main battery output pins.\"],\n imageUrl: IMAGES.screenTeardown1\n },\n {\n stepNumber: 2,\n phase: \"Phase 2: Hinge Bracket & Antenna Unrouting\",\n title: \"Display Hinge Anchor Unbolting & Antenna Cable Isolation\",\n description: \"Disconnect the embedded DisplayPort (eDP) 30/40-pin flex cable and Wi-Fi/Webcam coaxial leads. Flip open the display assembly to 90 degrees to access the heavy-duty steel hinge anchor brackets.\",\n toolRequired: \"Torx T5 / Phillips #00 & Micro-Tweezers\",\n torqueSpec: \"0.35 Nm\",\n subSteps: [\n \"Lift the protective Kapton tape covering the 30-pin/40-pin eDP connector.\",\n \"Flip up the metal locking bail on the eDP header and slide the ribbon cable straight back out of the socket.\",\n \"Carefully disconnect the Main (Black) and Aux (Gray) Wi-Fi coaxial antenna leads by lifting vertically with nylon tweezers.\",\n \"Unroute both antenna cables and the webcam flex cable from the chassis cable retention guides.\",\n \"Remove the 3-4 heavy-duty steel hinge screws on each side anchoring the display to the lower palmrest frame.\"\n ],\n warnings: [\"Do not bend coaxial antenna micro-leads at 90-degree sharp angles; keep smooth 5mm bend radii.\"],\n tips: [\"Work on an ESD mat to avoid scratching the pristine anodized aluminum display lid.\"],\n checkpoints: [\"Confirm all flex cables and coax leads are completely free of the hinge channels before separating the assemblies.\"],\n imageUrl: IMAGES.screenTeardown2\n },\n {\n stepNumber: 3,\n phase: \"Phase 3: Bezel Separation & Display Panel Extraction\",\n title: \"Bezel Adhesive Release & LCD/OLED Panel Swap\",\n description: \"Separate the plastic/aluminum front bezel from the rear enclosure using heat-assisted adhesive softening and a thin plastic pry pick. Remove the panel stretch-release tape and seat the replacement panel.\",\n toolRequired: \"Plastic Spudger / Guitar Picks & Heat Gun (60\u00B0C)\",\n torqueSpec: \"Hand-tight / Adhesive Mount\",\n subSteps: [\n \"Apply mild heat (50-60\u00B0C) around the perimeter bezel to soften factory bonding adhesive.\",\n \"Insert a thin plastic guitar pick between the bezel and display lid, working gently around the perimeter to release snap clips.\",\n \"Grasp the black stretch-release adhesive pull tabs at the bottom edge of the panel with tweezers; pull horizontally and flat at a 15-degree angle.\",\n \"Lay the panel face down on a soft microfiber cloth to expose the reverse eDP connector.\",\n \"Peel back the connector tape, release the locking latch, and disconnect the defective LCD/OLED panel.\",\n \"Connect the replacement panel, secure the locking bail, and seal with fresh Kapton tape.\"\n ],\n warnings: [\"Never pull stretch-release adhesive upward at a 90-degree angle or the tape will snap under the panel.\"],\n tips: [\"Test the replacement panel in open-air bench mode before applying final perimeter bezel adhesive strips.\"],\n checkpoints: [\"eDP connector is fully seated with gold contact pins evenly aligned and latch fully closed.\"],\n imageUrl: IMAGES.screenTeardown3\n },\n {\n stepNumber: 4,\n phase: \"Phase 4: Reassembly & Cable Channel Management\",\n title: \"Hinge Re-Torquing, Cable Routing & Bezel Reseating\",\n description: \"Reattach the display lid to the lower palmrest chassis, torque hinge bolts to manufacturer specifications, and meticulously route antenna leads through isolation guides.\",\n toolRequired: \"Torque Screwdriver & Spudger\",\n torqueSpec: \"0.35 Nm (Hinges), 0.20 Nm (Chassis)\",\n subSteps: [\n \"Align hinge brackets over chassis standoffs and loosely thread all anchor bolts before tightening.\",\n \"Torque hinge anchor screws sequentially to 0.35 Nm to guarantee smooth, symmetric hinge resistance.\",\n \"Route Wi-Fi coax and webcam leads through their designated plastic retention channels, ensuring no wire is pinched beneath the hinge plate.\",\n \"Re-seat the front bezel, pressing firmly around all edges until audible snap clicks verify complete engagement.\",\n \"Reattach the main battery power harness and snap the bottom chassis cover into position.\"\n ],\n warnings: [\"Pinching the Wi-Fi coax lead under a metal hinge will short RF ground and drastically degrade wireless signal.\"],\n tips: [\"Check hinge alignment by closing the laptop and inspecting the perimeter seam gap for uniform 0.8mm clearance.\"],\n checkpoints: [\"Hinge opens smoothly with single-hand resistance without chassis creaking.\"],\n imageUrl: IMAGES.screenTeardown2\n },\n {\n stepNumber: 5,\n phase: \"Phase 5: Post-Repair Verification & Display Calibration\",\n title: \"Cold POST Boot, Pixel Inspection & Backlight Verification\",\n description: \"Power on the system for cold boot initialization. Execute hardware diagnostics, inspect for dead sub-pixels, verify high-refresh rate options, and test ambient light sensor auto-brightness.\",\n toolRequired: \"Display Calibration Utility & UEFI Hardware Diagnostics\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Connect OEM AC power adapter and press the power button to trigger cold boot POST.\",\n \"Enter BIOS Setup (F2/F12/Del) to confirm display panel EDID identification and native resolution.\",\n \"Boot into OS and run an RGB full-screen color test (Red, Green, Blue, White, Black) to verify zero stuck pixels or backlight bleed.\",\n \"Open Display Settings and verify maximum supported refresh rate (120Hz/165Hz/240Hz) and HDR color bit-depth.\",\n \"Cover ambient light sensor near webcam to confirm automatic display brightness dimming functionality.\"\n ],\n warnings: [\"If backlight fails to illuminate, immediately power off and inspect eDP cable seating before replacing logic board fuses.\"],\n tips: [\"Allow display to run at 100% brightness for 15 minutes to verify temperature stability on the LED driver IC.\"],\n checkpoints: [\"Flawless picture output across 100% of the active display matrix with working brightness controls.\"],\n imageUrl: IMAGES.screenTeardown3\n }\n ],\n imageUrl: IMAGES.screenTeardown3\n },\n\n {\n category: \"hardware\" as const,\n titleSuffix: \"Motherboard & VRM Power Delivery Replacement\",\n descSuffix: \"Start-to-finish logic board teardown, thermal module dismount, port realignment, multi-rail voltage verification, and diagnostic POST restoration.\",\n difficulty: \"hard\" as const,\n estimatedTime: \"60-90 min\",\n tools: [\"Precision Screwdriver Kit\", \"Thermal Paste (Arctic MX-6 / PTM7950)\", \"Digital Multimeter\", \"ESD Mat & Wrist Strap\", \"Magnetic Screw Organizing Tray\"],\n warnings: [\n \"Always observe strict ESD protocols. Logic boards contain highly static-sensitive MOSFETs and BGA silicon dies.\",\n \"Categorize all screws by length and standoff diameter. Inserting a long screw into a logic board standoff will puncture copper PCB power planes.\",\n \"Clean all heatsink mating surfaces with 99.9% anhydrous IPA before applying fresh thermal interface compound.\"\n ],\n steps: [\n {\n stepNumber: 1,\n phase: \"Phase 1: Pre-Disassembly Diagnostics & Sub-assembly Extraction\",\n title: \"Chassis Depower, Battery Decoupling & Peripheral Removal\",\n description: \"Perform cold power drain, remove bottom enclosure, disconnect main battery harness, and remove modular sub-assemblies including NVMe SSDs, Wi-Fi module, cooling assembly, and RAM SODIMMs.\",\n toolRequired: \"Torx T5 / Phillips #00 & ESD Mat\",\n torqueSpec: \"0.20 Nm\",\n subSteps: [\n \"Power down unit, disconnect AC charger, and ground yourself on an ESD workstation.\",\n \"Remove bottom enclosure and disconnect the primary battery cable header.\",\n \"Extract NVMe SSDs (store in anti-static bag), unfasten Wi-Fi module, and remove DDR5 SODIMMs.\",\n \"Loosen heatsink spring screws in stamped reverse order (4 -> 3 -> 2 -> 1) and gently lift copper vapor chamber away from CPU/GPU dies.\",\n \"Disconnect all peripheral ribbon cables: Trackpad, Keyboard, IO Daughterboard, Audio Jack, Speakers, and Display eDP.\"\n ],\n warnings: [\"Do not yank stubborn heatsinks; if dried paste sticks, gently twist clockwise and counterclockwise.\"],\n tips: [\"Store each sub-component with its exact mounting screws in labeled magnetic compartments.\"],\n checkpoints: [\"All ribbon connectors released from ZIF sockets without torn flex traces.\"],\n imageUrl: IMAGES.screenTeardown1\n },\n {\n stepNumber: 2,\n phase: \"Phase 2: Logic Board Extraction & Standoff Inspection\",\n title: \"Logic Board Extraction & Port Realignment\",\n description: \"Remove motherboard grounding and standoff screws. Carefully angle the board upward to clear external I/O ports from magnesium chassis cutouts.\",\n toolRequired: \"Phillips #00 & Plastic Spudger\",\n torqueSpec: \"0.25 Nm\",\n subSteps: [\n \"Remove all perimeter logic board screws and motherboard-to-chassis grounding plates.\",\n \"Check for hidden screws beneath black Mylar insulation tape or near the cooling exhaust fins.\",\n \"Gently lift the logic board from the right edge, easing USB-C, HDMI, and audio jacks out of chassis frame ports.\",\n \"Inspect chassis cavity for metal debris, loose standoffs, or deteriorated thermal pads.\",\n \"Transfer TPM module, BIOS security dongles, or daughterboard interconnects to the replacement board as required.\"\n ],\n warnings: [\"Never flex or twist the motherboard PCB during extraction to avoid fracturing micro BGA solder balls.\"],\n tips: [\"Check that thermal pads on the chassis bottom are intact and clean of dust before seating the new board.\"],\n checkpoints: [\"Chassis standoffs are clean and straight with no stripped brass threads.\"],\n imageUrl: IMAGES.logicBoard\n },\n {\n stepNumber: 3,\n phase: \"Phase 3: New Motherboard Seating & Port Alignment\",\n title: \"Replacement Logic Board Installation & Flex Interconnects\",\n description: \"Seat the replacement motherboard, align I/O ports seamlessly with chassis cutouts, fasten standoff screws, and reconnect all peripheral ribbon cables.\",\n toolRequired: \"Phillips #00 & Nylon Tweezers\",\n torqueSpec: \"0.25 Nm\",\n subSteps: [\n \"Slide I/O ports into the left chassis bezel openings at a 15-degree angle, then lower the motherboard flat onto brass standoffs.\",\n \"Install and finger-tighten all motherboard mounting screws before applying final 0.25 Nm torque.\",\n \"Reconnect eDP display ribbon, locking bail, and secure with fresh Kapton tape.\",\n \"Insert all ZIF flex ribbons (Keyboard, Trackpad, Audio, USB) ensuring blue alignment tabs are seated flush against socket stops.\",\n \"Reinstall RAM SODIMMs into slot channels until side metal clips snap locked.\"\n ],\n warnings: [\"Ensure no loose ribbon cables are trapped underneath the motherboard before screwing down standoffs.\"],\n tips: [\"Use nylon tweezers to guide delicate flex cables into ZIF headers without creasing.\"],\n checkpoints: [\"All I/O ports (USB, HDMI, Type-C) are centered with 0.5mm clearance in chassis cutouts.\"],\n imageUrl: IMAGES.soldering\n },\n {\n stepNumber: 4,\n phase: \"Phase 4: Thermal Interface Application & Heatsink Torquing\",\n title: \"Direct-Die Thermal Paste Application & Heatsink Installation\",\n description: \"Clean CPU and GPU silicon dies with 99% IPA, apply high-performance thermal compound or phase-change PTM7950, and torque heatsink screws in stamped sequence.\",\n toolRequired: \"99.9% IPA, Lint-free Wipes & Arctic MX-6\",\n torqueSpec: \"0.20 Nm (Sequential 1-2-3-4)\",\n subSteps: [\n \"Wipe silicon dies and copper heatsink contact blocks clean using 99% IPA until mirror finish.\",\n \"Apply a uniform direct-die layer of Arctic MX-6 or pre-cut PTM7950 phase-change pad.\",\n \"Inspect VRAM and VRM thermal pads; replace any torn pads with 12.8 W/mK pads of matching caliper thickness.\",\n \"Lower copper cooling assembly straight down onto dies without sliding sideways.\",\n \"Tighten heatsink captive screws strictly in stamped numerical sequence (1 -> 2 -> 3 -> 4) to ensure uniform die pressure.\"\n ],\n warnings: [\"Uneven heatsink screw tightening will crack bare silicon die corners or cause severe thermal throttling.\"],\n tips: [\"Plug in both 4-pin PWM fan headers before fastening the bottom cover.\"],\n checkpoints: [\"Thermal paste spread covers 100% of active die surface without air bubbles.\"],\n imageUrl: IMAGES.thermalPaste\n },\n {\n stepNumber: 5,\n phase: \"Phase 5: Reassembly, Power-up & POST Diagnostic Verification\",\n title: \"Battery Connection, Chassis Closure & Multi-Rail Burn-In\",\n description: \"Reconnect battery harness, close chassis, and perform cold boot initialization, memory training, BIOS serial provisioning, and stress testing.\",\n toolRequired: \"OEM AC Adapter & Hardware Diagnostic Suite\",\n torqueSpec: \"0.20 Nm (Chassis)\",\n subSteps: [\n \"Reconnect main battery cable to motherboard header and seat safety latch.\",\n \"Fasten bottom enclosure and torque perimeter screws.\",\n \"Connect OEM AC power adapter; allow up to 45 seconds on first boot for DDR5 memory training and EC initialization.\",\n \"Enter BIOS Setup to verify CPU, RAM capacity, NVMe detection, and system serial numbers.\",\n \"Boot OS and run 15-minute Cinebench / FurMark thermal stress test to verify core temperatures remain <85\u00B0C.\"\n ],\n warnings: [\"If fans spin at 100% with black screen on first power-up, wait at least 90 seconds before interrupting memory training.\"],\n tips: [\"Flash the latest verified OEM BIOS version to update firmware microcode for the replacement board.\"],\n checkpoints: [\"System completes full cold POST boot in under 12 seconds with all hardware sensors reporting normal.\"],\n imageUrl: IMAGES.biosScreen\n }\n ],\n imageUrl: IMAGES.logicBoard\n },\n\n {\n category: \"hardware\" as const,\n titleSuffix: \"OEM Battery Pack Replacement & BMS Calibration\",\n descSuffix: \"Start-to-finish battery service: safely discharge, release industrial pull-tabs, route OEM harness, verify charging rails, and complete full BMS calibration cycle.\",\n difficulty: \"easy\" as const,\n estimatedTime: \"25-35 min\",\n tools: [\"Phillips #00 Screwdriver\", \"Plastic Pry Pick\", \"Anti-Static Safety Glasses\", \"Battery Adhesive Pull Tabs\", \"Digital Multimeter\"],\n warnings: [\n \"Discharge existing battery below 25% prior to disassembly. Charged lithium-ion cells pose a significant fire hazard if accidentally punctured.\",\n \"Never use sharp metal tools or excessive leverage near lithium pouch cells.\",\n \"Properly recycle degraded battery packs at an authorized e-waste hazardous materials facility.\"\n ],\n steps: [\n {\n stepNumber: 1,\n phase: \"Phase 1: Pre-Disassembly Diagnostics & Battery Discharge\",\n title: \"Battery Depletion & Enclosure Removal\",\n description: \"Discharge battery pack below 25% state-of-charge. Disconnect external power, remove chassis bottom cover, and inspect the internal battery compartment for swelling or fluid leakage.\",\n toolRequired: \"Torx T5 / Phillips #00 & Plastic Spudger\",\n torqueSpec: \"0.20 Nm\",\n subSteps: [\n \"Run laptop on battery power until charge drops below 20% to minimize thermal runaway risk.\",\n \"Power down completely and disconnect AC adapter.\",\n \"Remove bottom casing fasteners and release perimeter clips.\",\n \"Perform visual inspection: check for pillowing (swollen cells) or sweet chemical electrolyte odor.\"\n ],\n warnings: [\"If battery is noticeably swollen, wear safety glasses and handle with extreme care.\"],\n tips: [\"Keep a fire-safe battery bucket or dry sand nearby when handling compromised lithium cells.\"],\n checkpoints: [\"Chassis opened cleanly with clear access to all battery bracket mounting screws.\"],\n imageUrl: IMAGES.screenTeardown1\n },\n {\n stepNumber: 2,\n phase: \"Phase 2: Harness Decoupling & Stretch Adhesive Release\",\n title: \"BMS Cable Disconnection & Adhesive Pull-Tab Release\",\n description: \"Disconnect the battery power/data ribbon from the motherboard header. Remove bracket screws and slowly extract stretch-release adhesive strips parallel to the chassis base.\",\n toolRequired: \"Plastic Pry Pick & Micro-Tweezers\",\n torqueSpec: \"Hand-release\",\n subSteps: [\n \"Slide back the metal retention collar on the battery motherboard connector and pull the harness straight out.\",\n \"Remove the 4-6 perimeter Phillips screws securing the battery frame brackets to the palmrest.\",\n \"Grasp the black tips of the stretch-release adhesive pull tabs with tweezers.\",\n \"Slowly pull the adhesive strip horizontally parallel to the bottom of the battery at a flat 10-15 degree angle.\",\n \"Continue pulling steadily until the adhesive tape stretches out completely, releasing the cell from the chassis tray.\"\n ],\n warnings: [\"Do not pry upward against the battery with metal spudgers; prying will crease pouch cells and cause internal short circuits.\"],\n tips: [\"If a pull-tab snaps, apply 3 drops of 99% IPA under the battery corner and gently floss underneath with dental floss or plastic string.\"],\n checkpoints: [\"Old battery lifted free of chassis cavity without bending or puncturing.\"],\n imageUrl: IMAGES.battery\n },\n {\n stepNumber: 3,\n phase: \"Phase 3: OEM Battery Mounting & Harness Connection\",\n title: \"New Battery Pack Installation & Fastener Torquing\",\n description: \"Clean adhesive residue from chassis tray, apply fresh OEM battery mounting tape, align mounting posts, and seat the data/power harness into the logic board header.\",\n toolRequired: \"Phillips #00 & Lint-free Wipe\",\n torqueSpec: \"0.20 Nm\",\n subSteps: [\n \"Clean old adhesive residue from magnesium chassis floor with 99% IPA.\",\n \"Apply fresh pre-cut double-sided battery adhesive strips to the chassis mounting bay.\",\n \"Lower the new OEM battery into position, aligning chassis screw standoffs.\",\n \"Tighten all bracket mounting screws to 0.20 Nm in a cross pattern.\",\n \"Plug the battery cable firmly into the motherboard header and slide the locking collar forward.\"\n ],\n warnings: [\"Verify battery connector pin polarity matches motherboard socket before pushing down.\"],\n tips: [\"Ensure the battery data ribbon is not pinched beneath any plastic chassis alignment ribs.\"],\n checkpoints: [\"Battery sits completely flat and rigid in the chassis tray with zero wobble.\"],\n imageUrl: IMAGES.battery\n },\n {\n stepNumber: 4,\n phase: \"Phase 4: Chassis Reassembly & Initial Power-On Test\",\n title: \"Enclosure Closure & Power Rail Handshake\",\n description: \"Reattach bottom enclosure, torque chassis fasteners, connect AC adapter, and verify charging LED indicator behavior.\",\n toolRequired: \"Torx T5 / Phillips #00\",\n torqueSpec: \"0.20 Nm\",\n subSteps: [\n \"Snap bottom enclosure into place around all edges.\",\n \"Install and torque all perimeter chassis screws.\",\n \"Connect OEM AC power adapter and observe charging indicator LED (Amber = Charging, White = Full).\",\n \"Power on system and boot into OS to verify battery health reporting in OS taskbar.\"\n ],\n warnings: [\"If charging LED blinks rapidly (Error Code), disconnect power and verify battery cable seating.\"],\n tips: [\"Check Battery Report via `powercfg /batteryreport` to verify full charge capacity matches design capacity.\"],\n checkpoints: [\"Battery status in OS displays 'Plugged in, charging' with positive wattage draw.\"],\n imageUrl: IMAGES.screenTeardown1\n },\n {\n stepNumber: 5,\n phase: \"Phase 5: Post-Repair Battery Management System (BMS) Calibration\",\n title: \"Full Charge & Discharge Calibration Cycle\",\n description: \"Execute a complete 100% to 5% calibration cycle to calibrate the internal battery fuel gauge IC (Texas Instruments BQ-series) for pinpoint runtime accuracy.\",\n toolRequired: \"AC Charger & System Diagnostics\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Charge laptop uninterrupted until the battery reaches 100% and keep plugged in for an additional 2 hours.\",\n \"Unplug the AC adapter and use the system normally until battery drains below 5% and low-battery warning appears.\",\n \"Allow system to hibernate/shut down automatically and leave powered off for 1-2 hours.\",\n \"Plug the AC adapter back in and charge non-stop to 100% in a single continuous session.\",\n \"Verify that battery health and estimated remaining runtime metrics are synchronized accurately.\"\n ],\n warnings: [\"Do not allow lithium batteries to remain at 0% for prolonged days to prevent copper shunting.\"],\n tips: [\"Set battery charge threshold in OEM utility to 80% if machine is primarily used docked at a desk.\"],\n checkpoints: [\"Fuel gauge shows 100% capacity with accurate runtime decay curve.\"],\n imageUrl: IMAGES.battery\n }\n ],\n imageUrl: IMAGES.battery\n },\n\n {\n category: \"hardware\" as const,\n titleSuffix: \"DC-In Power Jack & USB-C Port Board Replacement\",\n descSuffix: \"Start-to-finish power port replacement: diagnose voltage drops, decouple hinge brackets, replace fractured DC-in harness/Type-C daughterboard, and verify 20V PD rails.\",\n difficulty: \"medium\" as const,\n estimatedTime: \"35-45 min\",\n tools: [\"Torx T5 / Phillips #00\", \"Digital Multimeter (True RMS)\", \"Plastic Spudger\", \"ESD Mat\", \"Micro-Tweezers\"],\n warnings: [\n \"Ensure all AC power and internal battery cables are detached before probing port solder joints.\",\n \"Check USB-C port pins for bent metallic VBUS pins that could short 20V to GND or D+/D- data lines.\"\n ],\n steps: [\n {\n stepNumber: 1,\n phase: \"Phase 1: Pre-Disassembly Diagnostics & Battery Isolation\",\n title: \"Power Isolation & Chassis Opening\",\n description: \"Disconnect AC adapter, remove bottom enclosure, disconnect internal battery harness, and probe DC-in port with multimeter to isolate intermittent loose contact or fractured solder joints.\",\n toolRequired: \"Torx T5 / Phillips #00 & Multimeter\",\n torqueSpec: \"0.20 Nm\",\n subSteps: [\n \"Power off device and remove bottom enclosure screws.\",\n \"Disconnect the internal battery connector from the motherboard to isolate all internal power rails.\",\n \"Inspect the DC-in barrel jack or USB-C receptacle for loose center pins, cracked plastic housings, or burn discoloration.\"\n ],\n warnings: [\"Never probe live 20V power pins with metal tools while the battery is connected.\"],\n tips: [\"A wiggly charging connector that only charges at certain angles indicates fractured internal solder terminals.\"],\n checkpoints: [\"Internal battery is completely detached and confirmed at 0.0V across motherboard header.\"],\n imageUrl: IMAGES.screenTeardown1\n },\n {\n stepNumber: 2,\n phase: \"Phase 2: Hinge Bracket Lift & Port Harness Extraction\",\n title: \"Hinge Disassembly & Port Board Extraction\",\n description: \"Unbolt the left display hinge bracket covering the power port, unroute braided harness from cable guides, and disconnect the port module from the logic board.\",\n toolRequired: \"Phillips #00 / Torx T5 & Spudger\",\n torqueSpec: \"0.35 Nm (Hinge)\",\n subSteps: [\n \"Remove the 2-3 steel hinge screws anchoring the hinge bracket over the DC-in port.\",\n \"Gently lift the hinge arm upward by 30 degrees to create vertical clearance.\",\n \"Unplug the 8-pin braided DC-in harness from the motherboard header, or remove the daughterboard ribbon cable.\",\n \"Lift the defective DC-in jack out of its molded chassis retention pocket.\"\n ],\n warnings: [\"Do not over-flex the display lid while the hinge is unbolted to avoid cracking the lower chassis plastic.\"],\n tips: [\"Keep the display lid supported with a foam block while the hinge screws are removed.\"],\n checkpoints: [\"Defective port extracted cleanly without damaging neighboring Wi-Fi antenna routing.\"],\n imageUrl: IMAGES.soldering\n },\n {\n stepNumber: 3,\n phase: \"Phase 3: New Port Installation & Hinge Re-Torquing\",\n title: \"OEM Port Seating & Mechanical Hinge Securing\",\n description: \"Install replacement OEM charging port into chassis notch, plug connector into motherboard, lower hinge bracket, and torque screws to manufacturer specifications.\",\n toolRequired: \"Torque Screwdriver (0.35 Nm)\",\n torqueSpec: \"0.35 Nm (Hinge Anchor)\",\n subSteps: [\n \"Seat the new OEM port into the chassis notch, ensuring alignment tabs lock firmly into position.\",\n \"Plug the power harness into the motherboard header until the connector clicks locked.\",\n \"Lower the steel hinge bracket flush over the port assembly.\",\n \"Thread and torque hinge screws to 0.35 Nm to ensure zero mechanical play when inserting the charger.\"\n ],\n warnings: [\"Ensure the braided power wires are tucked neatly inside chassis guides and not pinched under the hinge plate.\"],\n tips: [\"Apply a drop of blue threadlocker (Loctite 242) to hinge screws to prevent loosening over time.\"],\n checkpoints: [\"Charging port is rock-solid with zero wobble when inserting charger cable.\"],\n imageUrl: IMAGES.logicBoard\n },\n {\n stepNumber: 4,\n phase: \"Phase 4: Reassembly, Voltage Probing & Charging Verification\",\n title: \"Battery Reconnection, 20V PD Verification & Burn-In Test\",\n description: \"Reconnect battery, fasten bottom cover, plug in AC charger, and verify stable 19V/20V negotiation and positive battery charge current.\",\n toolRequired: \"USB-C Power Meter / Multimeter\",\n torqueSpec: \"0.20 Nm\",\n subSteps: [\n \"Reconnect internal battery harness to the motherboard.\",\n \"Fasten bottom enclosure screws securely.\",\n \"Connect USB-C power meter / AC charger and verify voltage negotiates immediately to 20.0V @ 3.25A / 5.0A (65W/100W/140W).\",\n \"Wiggle charging cable gently at 45-degree angles to verify stable, continuous charging connection with zero disconnects.\",\n \"Monitor battery charge percentage in OS for 15 minutes to confirm rapid charging rate.\"\n ],\n warnings: [\"If voltage stays stuck at 5.0V on USB-C, inspect CC1/CC2 lines on the port daughterboard.\"],\n tips: [\"Use an inline USB-C power meter to monitor real-time wattage draw during heavy load.\"],\n checkpoints: [\"Full rated power delivery (20V @ 3.25A+) negotiated without thermal throttling.\"],\n imageUrl: IMAGES.osRecovery\n }\n ],\n imageUrl: IMAGES.soldering\n },\n\n {\n category: \"hardware\" as const,\n titleSuffix: \"Dual Cooling Fan & Copper Heatpipe Module Overhaul\",\n descSuffix: \"Start-to-finish thermal overhaul: isolate power, remove copper cooling assembly, replace noisy blower fans, clean fin stacks, and torque heatsink in sequential order.\",\n difficulty: \"medium\" as const,\n estimatedTime: \"30-40 min\",\n tools: [\"Phillips #00 Screwdriver\", \"Thermal Paste (Arctic MX-6)\", \"Microfiber Cloths\", \"99% Isopropyl Alcohol\", \"Soft Anti-Static Brush\"],\n warnings: [\n \"Always tighten and loosen heatsink screws in numbered sequence (1-2-3-4) to prevent uneven die pressure and cracked silicon.\",\n \"Never allow high-pressure air to spin cooling fans freely; hold the impeller stationary to prevent induced voltage back-EMF.\"\n ],\n steps: [\n {\n stepNumber: 1,\n phase: \"Phase 1: Pre-Disassembly Diagnostics & Battery Isolation\",\n title: \"Power Drain & Bottom Enclosure Removal\",\n description: \"Power down unit, disconnect AC adapter, remove bottom enclosure, disconnect battery harness, and inspect cooling blowers for hair, dust buildup, or bearing play.\",\n toolRequired: \"Torx T5 / Phillips #00 & Spudger\",\n torqueSpec: \"0.20 Nm\",\n subSteps: [\n \"Power off machine and disconnect AC power.\",\n \"Remove bottom casing fasteners and release retention clips.\",\n \"Disconnect the main battery connector from the motherboard to ensure safe working conditions.\",\n \"Inspect CPU and GPU blower fans for wobbling impeller blades or seized bearings.\"\n ],\n warnings: [\"Disconnect battery before touching fan PWM headers to avoid shorting 5V fan rail.\"],\n tips: [\"Spin the fan blade with your finger; a healthy fluid-dynamic bearing spins silently with zero friction.\"],\n checkpoints: [\"Chassis opened and battery isolated with clear access to all cooling assembly screws.\"],\n imageUrl: IMAGES.screenTeardown1\n },\n {\n stepNumber: 2,\n phase: \"Phase 2: Cooling Assembly & Fan Removal\",\n title: \"Fan Header Disconnection & Heatsink Extraction\",\n description: \"Unplug 4-pin PWM fan headers, loosen heatsink screws in reverse numerical order, and gently lift the copper heatpipe assembly away from the motherboard.\",\n toolRequired: \"Phillips #00 & Nylon Tweezers\",\n torqueSpec: \"Reverse Sequence Loosening\",\n subSteps: [\n \"Unplug the 4-pin PWM fan headers from the logic board using nylon tweezers.\",\n \"Loosen the spring-loaded heatsink screws in reverse stamped sequence (4 -> 3 -> 2 -> 1).\",\n \"Remove the independent fan casing screws securing blowers to the magnesium chassis.\",\n \"Gently twist and lift the copper heatpipe assembly away from the CPU/GPU silicon dies.\"\n ],\n warnings: [\"Never pry roughly against copper heatpipes; bending them creates vapor chamber capillary leaks.\"],\n tips: [\"If old paste is hardened like cement, warm the heatsink slightly with a hairdryer before lifting.\"],\n checkpoints: [\"Heatsink and fan modules removed cleanly without bending copper fins.\"],\n imageUrl: IMAGES.thermalPaste\n },\n {\n stepNumber: 3,\n phase: \"Phase 3: Exhaust Fin Decontamination & Fan Replacement\",\n title: \"Radiator Fin Blowout & New Fan Mounting\",\n description: \"Blow compressed air through exhaust radiator fins from the outside inward, wipe fan bays, and mount brand-new fluid-dynamic bearing fan units.\",\n toolRequired: \"Electric Air Blower & Soft Brush\",\n torqueSpec: \"0.20 Nm\",\n subSteps: [\n \"Blow compressed air through copper exhaust radiator fin stacks to dislodge felt-like dust mats.\",\n \"Clean old dried thermal compound from copper baseplates using 99% IPA until mirror finish.\",\n \"Unscrew old blower fans from the heatpipe shroud and mount new OEM fluid-dynamic bearing fans.\",\n \"Fasten fan-to-heatsink mounting screws to 0.20 Nm.\"\n ],\n warnings: [\"Ensure no loose dust debris remains inside the chassis cavity.\"],\n tips: [\"Check that the sponge foam airflow sealing gasket around the exhaust vents is intact.\"],\n checkpoints: [\"Radiator fins are 100% transparent to light with zero dust blockages.\"],\n imageUrl: IMAGES.cleaningBlower\n },\n {\n stepNumber: 4,\n phase: \"Phase 4: Direct-Die Repasting & Sequential Torque\",\n title: \"Thermal Compound Application & Sequential Tightening\",\n description: \"Clean CPU/GPU dies with 99% IPA, apply high-performance thermal paste, seat heatsink, torque screws sequentially, and reconnect PWM fan headers.\",\n toolRequired: \"Arctic MX-6 & Torque Screwdriver\",\n torqueSpec: \"0.20 Nm (Sequential 1 -> 2 -> 3 -> 4)\",\n subSteps: [\n \"Clean CPU and GPU silicon dies with 99% IPA and lint-free wipes.\",\n \"Apply a pea-sized dot of Arctic MX-6 to the CPU die and an X-pattern to the larger GPU die.\",\n \"Inspect VRAM thermal pads, replacing any torn pads with 1.0mm 12.8 W/mK silicone pads.\",\n \"Lower heatsink assembly straight down onto the dies.\",\n \"Tighten screws in stamped numerical order (1 -> 2 -> 3 -> 4) to ensure uniform mounting pressure.\",\n \"Plug both 4-pin PWM fan headers firmly into motherboard sockets.\"\n ],\n warnings: [\"Tightening heatsink screws out of order causes uneven paste spread and thermal throttling.\"],\n tips: [\"Double check that both fan cables are fully plugged in before closing the bottom cover.\"],\n checkpoints: [\"All heatsink screws torqued down snug and both fan cables securely connected.\"],\n imageUrl: IMAGES.thermalPaste\n },\n {\n stepNumber: 5,\n phase: \"Phase 5: Reassembly & Thermal Stress Benchmark\",\n title: \"Chassis Closure, Fan PWM RPM Test & Thermal Benchmark\",\n description: \"Reconnect battery, fasten bottom cover, boot into OS, verify fan tachometer RPM readings, and run 15-minute thermal load benchmark.\",\n toolRequired: \"HWiNFO64 & Cinebench / FurMark\",\n torqueSpec: \"0.20 Nm\",\n subSteps: [\n \"Reconnect internal battery harness and snap bottom enclosure into place.\",\n \"Fasten all perimeter chassis screws.\",\n \"Boot into OS and launch HWiNFO64 sensor monitor.\",\n \"Verify both CPU and GPU fan RPM sensors ramp up smoothly when initiating load.\",\n \"Run Cinebench R23 multi-core test; verify CPU temperatures stay under 85\u00B0C with zero thermal throttling.\"\n ],\n warnings: [\"If fans fail to spin under load, immediately power off and verify fan header connections.\"],\n tips: [\"Create a custom fan curve in OEM software to optimize acoustics vs cooling performance.\"],\n checkpoints: [\"CPU and GPU operate at maximum boost frequencies under 82\u00B0C with whisper-quiet fan acoustics.\"],\n imageUrl: IMAGES.osRecovery\n }\n ],\n imageUrl: IMAGES.thermalPaste\n },\n\n // ----------------------------------------------------\n // SOFTWARE (4 Templates)\n // ----------------------------------------------------\n {\n category: \"software\" as const,\n titleSuffix: \"UEFI / BIOS Firmware Recovery & Crisis Flash Protocol\",\n descSuffix: \"Start-to-finish UEFI firmware restoration: prepare FAT32 crisis flash media, trigger hardware flashback protocols, clear corrupted NVRAM, and restore microcode integrity.\",\n difficulty: \"medium\" as const,\n estimatedTime: \"20-30 min\",\n tools: [\"FAT32 Formatted USB Flash Drive (8GB/16GB)\", \"OEM BIOS Firmware Binary\", \"Stable AC Power Source\", \"Hardware FlashBack Button / Key Combinations\"],\n warnings: [\n \"NEVER unplug AC power or force reboot while the BIOS EEPROM write cycle is active (interruption results in bricked SPI ROM).\",\n \"Ensure battery has at least 50% charge and OEM AC adapter is plugged into a stable wall outlet.\"\n ],\n steps: [\n {\n stepNumber: 1,\n phase: \"Phase 1: Crisis USB Preparation & ROM Renaming\",\n title: \"FAT32 MBR USB Drive Formatting & Firmware File Staging\",\n description: \"Format a clean USB flash drive to FAT32 with MBR partition table, download the verified OEM BIOS binary, and rename it to the hardware emergency FlashBack string.\",\n toolRequired: \"Rufus / Disk Management & USB Drive\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Insert an 8GB or 16GB USB drive into a working computer.\",\n \"Format the USB drive to FAT32 filesystem with MBR partition table (not GPT) and 4096-byte cluster size.\",\n \"Download the official OEM BIOS firmware update package from the manufacturer support portal.\",\n \"Extract the raw `.bin` or `.CAP` BIOS binary file onto the root directory of the USB drive.\",\n \"Rename the file to the specific vendor crisis string (e.g., `creative.rom`, `ASUS.CAP`, `bios.bin` per vendor specs).\"\n ],\n warnings: [\"Do not place BIOS binary in subfolders; it must sit on the USB root directory `E:\\\\`.\"],\n tips: [\"Use USB 2.0 flash drives when possible, as legacy crisis BIOS loaders sometimes struggle with USB 3.2 controllers.\"],\n checkpoints: [\"USB drive formatted to FAT32 MBR with single verified BIOS binary on root directory.\"],\n imageUrl: IMAGES.biosScreen\n },\n {\n stepNumber: 2,\n phase: \"Phase 2: CMOS Clear & Hardware FlashBack Trigger\",\n title: \"Hardware FlashBack Execution & Emergency Recovery\",\n description: \"Plug crisis drive into the dedicated BIOS FlashBack USB port, trigger the hardware recovery key combination, and observe status LED flashing cadence.\",\n toolRequired: \"OEM AC Power Adapter\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Connect AC power adapter to the bricked system (ensure battery is connected).\",\n \"Insert the prepared USB flash drive into the rear FlashBack USB port (or leftmost USB port).\",\n \"For desktop boards: Hold the BIOS FlashBack button for 3 seconds until the LED starts blinking.\",\n \"For laptops: Hold emergency recovery key combination (Dell: `Ctrl + Esc`, HP: `Win + B`, Lenovo: `Fn + R`) while inserting AC power and pressing Power button.\",\n \"Release keys once the screen flashes or fans spin at maximum RPM.\"\n ],\n warnings: [\"Do not touch the system or remove USB drive while the FlashBack LED is blinking.\"],\n tips: [\"The FlashBack LED blinks slowly initially (reading ROM) then blinks rapidly (erasing and programming EEPROM).\"],\n checkpoints: [\"FlashBack LED starts regular blinking cycle confirming active EEPROM write.\"],\n imageUrl: IMAGES.osRecovery\n },\n {\n stepNumber: 3,\n phase: \"Phase 3: EEPROM Write Cycle & Automated Reboot\",\n title: \"Microcode Programming, Verification & Automatic POST Cycle\",\n description: \"Allow the automated flash engine to erase, program, and verify all SPI ROM blocks (3-7 minutes) until the system initiates cold POST reboot.\",\n toolRequired: \"System Auto-Engine\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Wait 3 to 7 minutes while the system programs the main BIOS, EC microcode, and Intel ME / AMD PSP regions.\",\n \"Observe the flash completion indicator: FlashBack LED turns solid OFF and the system powers down.\",\n \"The system will automatically power on, cycle fans 2-3 times, and perform cold memory training.\",\n \"Wait for the OEM logo to appear on screen; tap F2/Del to enter BIOS Setup.\"\n ],\n warnings: [\"Multiple automated reboots during first boot are completely normal as memory training runs.\"],\n tips: [\"If screen stays black after 5 minutes, power off, remove RTC CMOS coin cell for 60 seconds, and retry.\"],\n checkpoints: [\"System boots successfully into BIOS Setup with updated firmware version displayed.\"],\n imageUrl: IMAGES.biosScreen\n },\n {\n stepNumber: 4,\n phase: \"Phase 4: BIOS Security & Boot Configuration\",\n title: \"Load Factory Defaults, Secure Boot & TPM 2.0 Restoration\",\n description: \"Load Optimized Factory Defaults in BIOS, enable Intel PTT / AMD fTPM, configure Secure Boot keys, and set primary NVMe boot order.\",\n toolRequired: \"BIOS Interface\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Press `F9` (Load Optimized Defaults) in BIOS and press Enter to clear corrupted NVRAM variables.\",\n \"Navigate to `Security` > `Intel PTT` or `AMD fTPM` > Set to `Enabled`.\",\n \"Navigate to `Boot` / `Security` > `Secure Boot` > Set to `Enabled` (Standard Mode).\",\n \"Navigate to `Boot Order` > Set Windows Boot Manager on NVMe SSD as `Boot Option #1`.\",\n \"Press `F10` to Save Changes and Exit.\"\n ],\n warnings: [\"Verify SATA/NVMe controller mode (AHCI vs RAID/VMD) matches the original installation or OS will BSOD with INACCESSIBLE_BOOT_DEVICE.\"],\n tips: [\"Take a photo of BIOS configuration settings for your maintenance records.\"],\n checkpoints: [\"BIOS settings saved and system boots directly into Windows desktop.\"],\n imageUrl: IMAGES.terminal\n },\n {\n stepNumber: 5,\n phase: \"Phase 5: Post-Repair Operating System Verification\",\n title: \"Windows Device Manager Check & Firmware Verification\",\n description: \"Boot into Windows, open System Information (`msinfo32`), verify BIOS Version/Date, inspect Device Manager for missing drivers, and test sleep/wake states.\",\n toolRequired: \"msinfo32 & Device Manager\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Press `Win + R`, type `msinfo32`, and press Enter.\",\n \"Verify BIOS Version/Date matches the newly flashed release.\",\n \"Open Device Manager (`devmgmt.msc`) and confirm zero yellow exclamation marks under Firmware or System Devices.\",\n \"Test System Sleep, Hibernation, and Cold Restart cycles to ensure rock-solid ACPI power state transitions.\"\n ],\n warnings: [\"If Windows BitLocker prompts for a recovery key, enter the 48-digit key once to re-bind TPM PCR registers.\"],\n tips: [\"Run `sfc /scannow` in Admin Command Prompt to ensure system files are pristine.\"],\n checkpoints: [\"Windows operates flawlessly with verified updated BIOS firmware.\"],\n imageUrl: IMAGES.osRecovery\n }\n ],\n imageUrl: IMAGES.biosScreen\n },\n\n {\n category: \"software\" as const,\n titleSuffix: \"EFI Bootloader & BCD Partition Reconstruction\",\n descSuffix: \"Start-to-finish UEFI boot repair: rebuild corrupted 100MB FAT32 EFI system partitions, restore BCD stores, repair master boot records, and resolve 0xc000000e errors.\",\n difficulty: \"medium\" as const,\n estimatedTime: \"25-35 min\",\n tools: [\"Windows 11/10 Recovery USB Installation Media\", \"Command Prompt (Diskpart, BCDboot, Bootrec)\"],\n warnings: [\n \"Exercise extreme caution when formatting volumes in Diskpart. Verify disk and partition volume numbers carefully to avoid wiping data drives.\"\n ],\n steps: [\n {\n stepNumber: 1,\n phase: \"Phase 1: Boot Recovery Media & Command Environment\",\n title: \"Boot from Windows Recovery Media into Command Prompt\",\n description: \"Insert Windows Recovery USB, boot into UEFI installation environment, navigate to Advanced Troubleshooting, and open Administrative Command Prompt.\",\n toolRequired: \"Windows Recovery USB Media\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Insert Windows Installation / Recovery USB drive into target machine.\",\n \"Power on and tap F12/F11/F8 to open UEFI Boot Menu; select UEFI USB drive.\",\n \"On the Windows Setup screen, click `Next` > click `Repair your computer` in bottom-left corner.\",\n \"Select `Troubleshoot` > select `Advanced Options` > select `Command Prompt`.\"\n ],\n warnings: [\"Do not click 'Install Now' as that initiates fresh operating system overwrite.\"],\n tips: [\"Command Prompt runs under drive letter `X:\\\\Sources` in Windows Preinstallation Environment (WinPE).\"],\n checkpoints: [\"Administrative Command Prompt window open at `X:\\\\windows\\\\system32>`.\"],\n imageUrl: IMAGES.terminal\n },\n {\n stepNumber: 2,\n phase: \"Phase 2: Diskpart Partition Triage & Drive Letter Assignment\",\n title: \"Locate OS Partition & Assign Letter to Hidden EFI Volume\",\n description: \"Run `diskpart` utility to identify the Windows OS volume (usually C: or D:) and mount the hidden ~100MB FAT32 EFI System Partition as drive `S:`.\",\n toolRequired: \"Diskpart CLI Utility\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Type `diskpart` and press Enter.\",\n \"Type `list volume` to view all partitions, filesystems, and assigned letters.\",\n \"Identify the Windows OS volume (NTFS, ~500GB/1TB) and note its drive letter (e.g. `C:` or `D:`).\",\n \"Locate the ~100MB FAT32 System partition (Volume label often 'System' or blank).\",\n \"Type `select volume X` (replace X with the ~100MB FAT32 volume number).\",\n \"Type `assign letter=S:` to mount the EFI partition.\",\n \"Type `exit` to return to standard command prompt.\"\n ],\n warnings: [\"Never format the main NTFS OS partition containing your user data.\"],\n tips: [\"If the EFI partition is formatted in RAW or corrupted, format it to FAT32 via `format fs=fat32 quick label=System`.\"],\n checkpoints: [\"EFI partition successfully mounted with drive letter `S:`.\"],\n imageUrl: IMAGES.osRecovery\n },\n {\n stepNumber: 3,\n phase: \"Phase 3: BCD Store Reconstruction & Boot File Generation\",\n title: \"Rebuild UEFI BCD Store via BCDBoot\",\n description: \"Execute `bcdboot` command to inject fresh UEFI boot files from the Windows directory into the mounted EFI partition `S:`.\",\n toolRequired: \"BCDBoot CLI Tool\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Navigate to S: drive by typing `S:` and press Enter.\",\n \"Navigate to EFI folder: `cd EFI\\\\Microsoft\\\\Boot` (if folder exists).\",\n \"Execute the master boot file generation command: `bcdboot C:\\\\Windows /s S: /f UEFI /v`.\",\n \"Verify the terminal output confirms: `Boot files successfully created.`\"\n ],\n warnings: [\"If Windows partition is mounted as D:, change path to `bcdboot D:\\\\Windows /s S: /f UEFI`.\"],\n tips: [\"The `/f UEFI` parameter ensures modern UEFI bootloader files are created, bypassing legacy MBR.\"],\n checkpoints: [\"Terminal returns 'Boot files successfully created.'\"],\n imageUrl: IMAGES.terminal\n },\n {\n stepNumber: 4,\n phase: \"Phase 4: Master Boot Record & NVRAM Entry Verification\",\n title: \"Bootrec Scans & UEFI Boot Order Re-registration\",\n description: \"Execute boot sector repair commands and scan for installed Windows installations to ensure complete registry integration.\",\n toolRequired: \"Bootrec CLI Utility\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Type `bootrec /fixmbr` and press Enter.\",\n \"Type `bootrec /fixboot` and press Enter (if Access Denied, `bcdboot` already repaired the store).\",\n \"Type `bootrec /scanos` and confirm it identifies `Total identified Windows installations: 1`.\",\n \"Type `exit` and close Command Prompt.\"\n ],\n warnings: [\"Ensure you remove the USB flash drive before rebooting.\"],\n tips: [\"If multiple Windows installs exist, `bootrec /rebuildbcd` allows selecting which OS to add to the menu.\"],\n checkpoints: [\"Scanned OS count = 1 with zero unlinked volumes.\"],\n imageUrl: IMAGES.terminal\n },\n {\n stepNumber: 5,\n phase: \"Phase 5: Post-Repair Cold Boot & OS Startup Verification\",\n title: \"Reboot, UEFI Boot Priority & Windows Desktop Boot\",\n description: \"Remove recovery USB, power cycle machine, enter BIOS to verify 'Windows Boot Manager' priority, and boot seamlessly into Windows desktop.\",\n toolRequired: \"System Auto-Engine\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Remove the USB recovery drive.\",\n \"Click `Continue (Exit and continue to Windows)`.\",\n \"If needed, enter BIOS and ensure `Windows Boot Manager` on NVMe SSD is Top Priority.\",\n \"Allow system to boot directly into Windows lock screen without any BSOD or recovery prompts.\",\n \"Open Command Prompt as Administrator and run `bcdedit /enum` to verify all EFI paths are pristine.\"\n ],\n warnings: [\"If BitLocker prompts on first boot, enter the 48-digit key to allow TPM to re-lock to the new BCD signature.\"],\n tips: [\"Create a system restore point once boot stability is confirmed.\"],\n checkpoints: [\"Windows boots seamlessly in under 10 seconds.\"],\n imageUrl: IMAGES.osRecovery\n }\n ],\n imageUrl: IMAGES.terminal\n },\n\n {\n category: \"software\" as const,\n titleSuffix: \"BSOD Kernel Triage & Clean OS Driver Reinstallation\",\n descSuffix: \"Start-to-finish BSOD resolution: analyze minidump stack traces (WinDbg), execute DDU clean driver wipes in Safe Mode, and install verified WHQL driver packages.\",\n difficulty: \"easy\" as const,\n estimatedTime: \"20-30 min\",\n tools: [\"Display Driver Uninstaller (DDU)\", \"OEM WHQL Driver Package\", \"WinDbg Preview\", \"Windows Safe Mode\"],\n warnings: [\n \"Disconnect your ethernet cable and Wi-Fi during DDU reinstallation to prevent Windows Update from automatically downloading generic display drivers.\"\n ],\n steps: [\n {\n stepNumber: 1,\n phase: \"Phase 1: Minidump Analysis & Driver Fault Isolation\",\n title: \"WinDbg Kernel Minidump Triage & Crash Root-Cause Analysis\",\n description: \"Examine Windows kernel crash dumps in `C:\\\\Windows\\\\Minidump` using WinDbg to pinpoint the offending driver module (e.g. nvlddmkm.sys, amdkmdag.sys, rtpx64.sys).\",\n toolRequired: \"WinDbg Preview / BlueScreenView\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Open WinDbg Preview as Administrator.\",\n \"Click `File` > `Open Dump File` and browse to `C:\\\\Windows\\\\Minidump\\\\*.dmp`.\",\n \"Type `!analyze -v` in the command prompt and press Enter.\",\n \"Examine the `BUGCHECK_CODE`, `MODULE_NAME`, and `FAILURE_BUCKET_ID` lines to identify the offending `.sys` driver.\"\n ],\n warnings: [\"If minidump points to `ntoskrnl.exe` or `hardware`, run PassMark MemTest86 to check for bad RAM.\"],\n tips: [\"Look at the IMAGE_NAME line to see the exact driver file responsible for the crash.\"],\n checkpoints: [\"Faulty kernel driver identified (e.g. GPU, Audio, Wi-Fi driver).\"],\n imageUrl: IMAGES.terminal\n },\n {\n stepNumber: 2,\n phase: \"Phase 2: Safe Mode Boot & Network Isolation\",\n title: \"Network Disconnection & Clean Safe Mode Boot\",\n description: \"Disconnect active internet connections, stage the latest verified OEM WHQL driver installer, and boot Windows into Safe Mode without networking.\",\n toolRequired: \"Windows Advanced Startup\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Download the latest official WHQL driver package from NVIDIA, AMD, or Intel and save to Desktop.\",\n \"Download Display Driver Uninstaller (DDU) and extract to Desktop.\",\n \"Disconnect ethernet cable and turn off Wi-Fi.\",\n \"Hold `Shift` key while clicking `Start` > `Power` > `Restart`.\",\n \"Navigate to `Troubleshoot` > `Advanced Options` > `Startup Settings` > click `Restart` > press `4` for Safe Mode.\"\n ],\n warnings: [\"Keeping internet connected during driver wiping causes Windows Update to inject conflicting driver DLLs.\"],\n tips: [\"Safe Mode prevents GPU drivers from loading into active memory, allowing clean registry deletion.\"],\n checkpoints: [\"Windows booted into Safe Mode (black desktop with 'Safe Mode' in corners).\"],\n imageUrl: IMAGES.osRecovery\n },\n {\n stepNumber: 3,\n phase: \"Phase 3: DDU Deep Registry Clean & Cache Purge\",\n title: \"Display Driver Uninstaller (DDU) Deep Clean Execution\",\n description: \"Run DDU in Safe Mode to wipe all driver binaries, registry entries, display caches, and shader pipelines.\",\n toolRequired: \"Display Driver Uninstaller (DDU)\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Launch `Display Driver Uninstaller.exe` as Administrator.\",\n \"Under 'Select device type', select `GPU` (or `Audio` if fixing sound crashes).\",\n \"Select the device manufacturer (`NVIDIA`, `AMD`, or `Intel`).\",\n \"Click `Clean and restart` button.\",\n \"Allow DDU to purge registry keys, system32 driver stores, and reboot Windows automatically.\"\n ],\n warnings: [\"Do not interrupt DDU while it is purging registry keys.\"],\n tips: [\"Check 'Remove C:\\\\NVIDIA and C:\\\\AMD folders' in DDU settings for a 100% clean baseline.\"],\n checkpoints: [\"System completes clean wipe and restarts into standard Windows resolution.\"],\n imageUrl: IMAGES.terminal\n },\n {\n stepNumber: 4,\n phase: \"Phase 4: Clean WHQL Driver Installation\",\n title: \"Official OEM Driver Installation with Clean Setup\",\n description: \"Run the pre-downloaded official driver setup wizard, check 'Perform Clean Install', and install verified signed drivers.\",\n toolRequired: \"OEM WHQL Setup Package\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Launch the driver installer package (e.g. NVIDIA / AMD / Intel setup).\",\n \"Select `Custom (Advanced)` installation options.\",\n \"Check the box: `Perform a clean installation` (resets all driver profiles to factory defaults).\",\n \"Complete installation and restart the computer.\"\n ],\n warnings: [\"Do not install beta or non-WHQL drivers on mission-critical technician workstations.\"],\n tips: [\"Reconnect internet only AFTER the driver setup has fully completed and rebooted.\"],\n checkpoints: [\"Driver installed with native display resolution and multi-monitor support active.\"],\n imageUrl: IMAGES.osRecovery\n },\n {\n stepNumber: 5,\n phase: \"Phase 5: Post-Repair Stability Verification & Stress Testing\",\n title: \"Stress Testing, DISM System File Scan & Event Viewer Check\",\n description: \"Reconnect internet, run DISM / SFC scans, launch FurMark / 3DMark benchmark for 20 minutes, and verify Event Viewer has zero WHEA errors.\",\n toolRequired: \"SFC, DISM & FurMark Benchmark\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Open Admin Command Prompt and run `DISM /Online /Cleanup-Image /RestoreHealth` followed by `sfc /scannow`.\",\n \"Launch FurMark / 3DMark and run full GPU/CPU stress test for 15 minutes.\",\n \"Open Event Viewer (`eventvwr.msc`) > `Windows Logs` > `System` and filter for `Critical` and `Error` events.\",\n \"Verify zero WHEA-Logger or display driver crash entries appear.\"\n ],\n warnings: [\"If BSOD recurs under load, perform hardware memory testing with PassMark MemTest86.\"],\n tips: [\"Keep a clean system restore point created after driver stabilization.\"],\n checkpoints: [\"System passes 15-minute 100% load stress test with 0 crashes or artifacting.\"],\n imageUrl: IMAGES.terminal\n }\n ],\n imageUrl: IMAGES.osRecovery\n },\n\n {\n category: \"software\" as const,\n titleSuffix: \"Secure Boot, TPM 2.0 & BitLocker State Restoration\",\n descSuffix: \"Start-to-finish security chip restoration: re-initialize hardware TPM 2.0 / Intel PTT, clear corrupted cryptographic PCR banks, and resolve BitLocker recovery loops.\",\n difficulty: \"medium\" as const,\n estimatedTime: \"20-25 min\",\n tools: [\"BitLocker 48-digit Recovery Key\", \"BIOS Security Menu Access\", \"TPM.msc Management Console\"],\n warnings: [\n \"CRITICAL: You MUST have your 48-digit Microsoft BitLocker Recovery Key backed up before clearing TPM cryptographic security keys.\"\n ],\n steps: [\n {\n stepNumber: 1,\n phase: \"Phase 1: BitLocker Key Verification & Backup\",\n title: \"Verify BitLocker Recovery Key & Retrieve 48-Digit Token\",\n description: \"Log into your Microsoft account or enterprise Active Directory portal to retrieve and verify the 48-digit BitLocker recovery key for the target drive.\",\n toolRequired: \"Microsoft Account Portal / Printout\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Visit `account.microsoft.com/devices/recoverykey` on a phone or secondary PC.\",\n \"Locate the Recovery Key matching the `Key ID` displayed on the blue BitLocker recovery screen.\",\n \"Write down the complete 48-digit numerical recovery token.\"\n ],\n warnings: [\"Never clear TPM if you do not have the BitLocker recovery key; data will be permanently inaccessible.\"],\n tips: [\"Print a physical copy of your BitLocker recovery key to store in a secure lockbox.\"],\n checkpoints: [\"48-digit recovery key verified against matching Key ID.\"],\n imageUrl: IMAGES.biosScreen\n },\n {\n stepNumber: 2,\n phase: \"Phase 2: BIOS TPM 2.0 & Secure Boot Configuration\",\n title: \"Enable Intel PTT / AMD fTPM & Reset Secure Boot Keys\",\n description: \"Enter UEFI BIOS, navigate to Security settings, enable Intel Platform Trust Technology (PTT) / AMD fTPM, and restore factory default Secure Boot keys.\",\n toolRequired: \"BIOS Security Interface\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Power on system and tap F2/Del to enter BIOS Setup.\",\n \"Navigate to `Security` > `Intel PTT` or `AMD fTPM` > Set to `Enabled`.\",\n \"Navigate to `Secure Boot` > Set to `Enabled` > Select `Restore Factory Default Keys` (PK, KEK, db, dbx).\",\n \"Save changes and exit BIOS.\"\n ],\n warnings: [\"Do not disable Secure Boot on Windows 11 systems or OS security features will fail to load.\"],\n tips: [\"If TPM state is stuck, select 'Clear TPM' option inside BIOS Setup.\"],\n checkpoints: [\"TPM 2.0 and Secure Boot enabled in Standard factory mode.\"],\n imageUrl: IMAGES.terminal\n },\n {\n stepNumber: 3,\n phase: \"Phase 3: BitLocker Recovery Key Entry & PCR Re-bind\",\n title: \"Enter Recovery Key & Re-bind Platform Configuration Registers\",\n description: \"Enter the 48-digit BitLocker key on the startup prompt, boot into Windows, and allow the system to re-bind TPM PCR registers.\",\n toolRequired: \"Keyboard Input\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"On the blue BitLocker screen, type the 48-digit recovery key using the number keys.\",\n \"Press Enter to unlock the encrypted drive.\",\n \"Allow Windows to boot normally into the login screen.\",\n \"Log into Windows with administrator credentials.\"\n ],\n warnings: [\"If key is rejected, verify numerical keypad NumLock state.\"],\n tips: [\"Windows will automatically re-seal the encryption key into the TPM chip on successful logon.\"],\n checkpoints: [\"Windows boots seamlessly to desktop.\"],\n imageUrl: IMAGES.osRecovery\n },\n {\n stepNumber: 4,\n phase: \"Phase 4: TPM State Verification & Windows Hello Re-enrollment\",\n title: \"TPM Console Verification & Windows Hello PIN Reset\",\n description: \"Open `tpm.msc` to confirm 'The TPM is ready for use', reset Windows Hello biometric / PIN credentials, and confirm encryption health.\",\n toolRequired: \"tpm.msc & Windows Settings\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Press `Win + R`, type `tpm.msc`, and press Enter.\",\n \"Confirm status reads: `The TPM is ready for use` with Specification Version `2.0`.\",\n \"Open `Settings` > `Accounts` > `Sign-in options` > `PIN (Windows Hello)`.\",\n \"Click `Remove` and re-create a new Windows Hello PIN to re-enroll cryptographic keys.\",\n \"Re-scan fingerprint or facial recognition biometrics.\"\n ],\n warnings: [\"Do not skip PIN re-creation or future sign-in prompts may freeze.\"],\n tips: [\"Run `manage-bde -status` in Admin Command Prompt to verify BitLocker protection is 100% active.\"],\n checkpoints: [\"TPM 2.0 active and Windows Hello PIN functioning flawlessly.\"],\n imageUrl: IMAGES.terminal\n }\n ],\n imageUrl: IMAGES.biosScreen\n },\n\n // ----------------------------------------------------\n // CLEANING (4 Templates)\n // ----------------------------------------------------\n {\n category: \"cleaning\" as const,\n titleSuffix: \"Thermal Module Deep Clean & Phase-Change Repasting\",\n descSuffix: \"Start-to-finish thermal restoration: chemical TIM de-greasing, copper radiator fin blowout, phase-change PTM7950 pad application, and sequential torque calibration.\",\n difficulty: \"medium\" as const,\n estimatedTime: \"30-45 min\",\n tools: [\"99.9% Anhydrous Isopropyl Alcohol\", \"Microfiber Swabs\", \"Honeywell PTM7950 / Arctic MX-6\", \"Electric Compressed Air Blower\", \"Torx T5 / Phillips #00\"],\n warnings: [\n \"Never scrape nickel-plated or bare copper heatsink baseplates with metallic blades; microscopic gouges create air pockets and hotspots.\",\n \"Tighten heatsink screws strictly in stamped numerical order (1-2-3-4) to prevent cracking bare silicon CPU/GPU dies.\"\n ],\n steps: [\n {\n stepNumber: 1,\n phase: \"Phase 1: Pre-Disassembly Diagnostics & Power Isolation\",\n title: \"Chassis Depower & Battery Harness Decoupling\",\n description: \"Power down laptop, disconnect AC charger, remove bottom enclosure, and disconnect the main battery power harness to prevent electrical shorts.\",\n toolRequired: \"Torx T5 / Phillips #00 & Spudger\",\n torqueSpec: \"0.20 Nm\",\n subSteps: [\n \"Shut down computer, unplug AC adapter, and put on ESD wrist strap.\",\n \"Remove bottom casing screws and pop perimeter retaining clips.\",\n \"Disconnect the internal battery connector from the motherboard.\",\n \"Hold power button for 10 seconds to drain residual filter capacitors.\"\n ],\n warnings: [\"Never work on cooling assemblies while the battery is connected.\"],\n tips: [\"Keep a magnetic screw tray handy to organize heatsink vs chassis fasteners.\"],\n checkpoints: [\"Battery disconnected and confirmed at 0V across logic board.\"],\n imageUrl: IMAGES.screenTeardown1\n },\n {\n stepNumber: 2,\n phase: \"Phase 2: Cooling Assembly Removal & Chemical Degreasing\",\n title: \"Heatsink Dismount & 99% IPA Paste Dissolution\",\n description: \"Disconnect fan headers, loosen heatsink screws in reverse order (4-3-2-1), lift copper assembly, and dissolve crusty old paste with 99% IPA.\",\n toolRequired: \"Phillips #00, 99.9% IPA & Microfiber Wipes\",\n torqueSpec: \"Reverse Sequence Loosening\",\n subSteps: [\n \"Unplug fan PWM cables from motherboard.\",\n \"Loosen spring-loaded screws in reverse order (4 -> 3 -> 2 -> 1).\",\n \"Gently lift heatsink straight up from the silicon dies.\",\n \"Saturate a lint-free wipe with 99.9% IPA and dissolve dried crusty thermal paste from CPU/GPU silicon dies and copper baseplates until mirror clean.\",\n \"Use a soft ESD swab dipped in IPA to clean residual paste from around SMD capacitors on the processor substrate.\"\n ],\n warnings: [\"Do not knock off tiny surface-mount capacitors around the processor die with excessive pressure.\"],\n tips: [\"99.9% anhydrous IPA evaporates completely in seconds without leaving water moisture.\"],\n checkpoints: [\"Silicon dies and copper contact plates are 100% mirror clean with zero residue.\"],\n imageUrl: IMAGES.thermalPaste\n },\n {\n stepNumber: 3,\n phase: \"Phase 3: Exhaust Radiator Fin Decontamination\",\n title: \"Pressurized Fin Stack Blowout & Impeller Degreasing\",\n description: \"Blow compressed air through copper exhaust radiator fin stacks from the outside inward, remove lint mats, and clean blower impellers.\",\n toolRequired: \"Electric Air Blower & Soft Brush\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Hold fan impellers stationary with a finger to prevent over-spinning.\",\n \"Direct high-pressure air blast through exhaust fins from the exterior towards the interior to dislodge trapped lint mats.\",\n \"Use a soft ESD brush to wipe micro-dust from individual fan impeller blades.\",\n \"Wipe internal fan intake shrouds clean with microfiber cloth.\"\n ],\n warnings: [\"Over-spinning fans with air guns destroys fluid-dynamic bearings and generates reverse EMF voltage.\"],\n tips: [\"Inspect fin stacks against a light source to verify all air channels are 100% unobstructed.\"],\n checkpoints: [\"Fin stacks completely clean with zero lint or dust build-up.\"],\n imageUrl: IMAGES.cleaningBlower\n },\n {\n stepNumber: 4,\n phase: \"Phase 4: Phase-Change PTM7950 / Paste Application & Torquing\",\n title: \"Phase-Change TIM Application & Sequential Heatsink Tightening\",\n description: \"Apply pre-cut Honeywell PTM7950 phase-change pad or Arctic MX-6, renew VRAM thermal pads, lower heatsink, and torque screws sequentially (1-2-3-4).\",\n toolRequired: \"PTM7950 / Arctic MX-6 & Torque Screwdriver\",\n torqueSpec: \"0.20 Nm (Sequential 1 -> 2 -> 3 -> 4)\",\n subSteps: [\n \"Cut PTM7950 phase-change pad to exact dimensions of CPU and GPU silicon dies.\",\n \"Peel bottom protective film, apply pad to die, press gently, and peel top protective film.\",\n \"Inspect VRAM thermal pads; replace any torn pads with 12.8 W/mK silicone pads of matching caliper thickness.\",\n \"Lower copper cooling assembly straight down onto the dies.\",\n \"Tighten screws in stamped numerical order (1 -> 2 -> 3 -> 4) to ensure uniform die pressure.\",\n \"Plug both 4-pin PWM fan headers firmly into motherboard sockets.\"\n ],\n warnings: [\"Do not forget to peel the clear plastic film from both sides of the PTM7950 pad.\"],\n tips: [\"Chill PTM7950 pad in the refrigerator for 5 minutes before peeling plastic film for effortless application.\"],\n checkpoints: [\"Heatsink mounted flat with screws fully seated in sequence and fan headers connected.\"],\n imageUrl: IMAGES.thermalPaste\n },\n {\n stepNumber: 5,\n phase: \"Phase 5: Reassembly & Thermal Stress Burn-In Verification\",\n title: \"Enclosure Assembly, Fan RPM Verification & Load Benchmarking\",\n description: \"Reconnect battery, close bottom cover, boot into OS, verify fan tachometers, and run a 20-minute Cinebench R23 multi-core thermal stress benchmark.\",\n toolRequired: \"HWiNFO64 & Cinebench R23\",\n torqueSpec: \"0.20 Nm\",\n subSteps: [\n \"Reconnect internal battery harness and fasten bottom chassis enclosure.\",\n \"Boot into Windows and launch HWiNFO64.\",\n \"Check idle temperatures: CPU should idle between 38\u00B0C and 46\u00B0C.\",\n \"Run Cinebench R23 10-minute throttle loop; verify CPU temperatures stabilize under 84\u00B0C with zero thermal throttling.\",\n \"Verify fan acoustics are smooth and quiet with zero bearing rattle.\"\n ],\n warnings: [\"If CPU instantly hits 100\u00B0C under load, immediately power off and verify heatsink mounting contact.\"],\n tips: [\"PTM7950 undergoes a phase change above 45\u00B0C, improving thermal conductivity further after the first heat cycle.\"],\n checkpoints: [\"Temperatures reduced by 12-20\u00B0C compared to pre-maintenance baseline.\"],\n imageUrl: IMAGES.osRecovery\n }\n ],\n imageUrl: IMAGES.thermalPaste\n },\n\n {\n category: \"cleaning\" as const,\n titleSuffix: \"Ultrasonic Bath & Liquid Spill Corrosion Decontamination\",\n descSuffix: \"Start-to-finish board-level fluid restoration: power isolation, ultrasonic sweep cleaning in 99.9% anhydrous alcohol, oven dehydration, and micro-soldering touch-up.\",\n difficulty: \"hard\" as const,\n estimatedTime: \"90-120 min\",\n tools: [\"Heated Ultrasonic Cleaner (40kHz)\", \"99.9% Anhydrous Isopropyl Alcohol\", \"Stereo Microscope\", \"Dehydration Oven (50\u00B0C)\", \"Micro-Soldering Station\"],\n warnings: [\n \"NEVER submerge mechanical cooling fans, CMOS coin cells, microphone capsules, or camera modules in an ultrasonic cleaner.\",\n \"Do not power on a liquid-damaged board until full dehydration bake cycle and multi-rail resistance tests have passed.\"\n ],\n steps: [\n {\n stepNumber: 1,\n phase: \"Phase 1: Emergency Power Cut & Board Strip-Down\",\n title: \"Immediate Power Isolation & Complete Component Stripping\",\n description: \"Instantly disconnect main battery and RTC CMOS battery. Strip all socketed components, heatsinks, RAM, SSDs, and plastic insulation shields.\",\n toolRequired: \"Torx T5 / Phillips #00 & ESD Mat\",\n torqueSpec: \"0.20 Nm\",\n subSteps: [\n \"Immediately disconnect the battery harness and unplug RTC CMOS coin cell.\",\n \"Remove logic board from chassis.\",\n \"Remove cooling heatsink, fans, NVMe SSDs, Wi-Fi card, RAM SODIMMs, and CMOS battery.\",\n \"Peel off all black Mylar insulation tape and plastic stickers that could trap fluid underneath.\"\n ],\n warnings: [\"Never attempt to turn on a wet laptop to 'see if it still works'; power turns water into instant electrolytic corrosion.\"],\n tips: [\"Take close-up photos of corroded areas under the microscope before cleaning to record suspect power rails.\"],\n checkpoints: [\"Motherboard completely stripped down to bare PCB with zero socketed peripherals.\"],\n imageUrl: IMAGES.logicBoard\n },\n {\n stepNumber: 2,\n phase: \"Phase 2: Microscopic Inspection & Pre-Wash Scrub\",\n title: \"Stereo Microscope Inspection & Localized Flux Scrub\",\n description: \"Inspect PCB under 40x stereo microscope for green copper carbonate oxidation, white calcium deposits, and burnt SMD power capacitors.\",\n toolRequired: \"Stereo Microscope & ESD Soft Brush\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Examine power delivery stages (VRM, DC-in, Charging IC) under microscope.\",\n \"Spot-treat heavy sugary syrup or coffee deposits with specialized PCB flux remover and a soft ESD brush.\",\n \"Desolder any visibly charred SMD ceramic capacitors that have shorted across power rails.\"\n ],\n warnings: [\"Do not use wire brushes that can dislodge micro 0201 SMD resistors.\"],\n tips: [\"Mark corroded regions with a fine-tip paint marker on the PCB margin for targeted post-wash inspection.\"],\n checkpoints: [\"Heavy surface mineral crust dislodged prior to ultrasonic immersion.\"],\n imageUrl: IMAGES.soldering\n },\n {\n stepNumber: 3,\n phase: \"Phase 3: Ultrasonic Sweep Degreasing Cycle\",\n title: \"Ultrasonic Anhydrous Solvent Cleaning at 40kHz\",\n description: \"Place the motherboard in an ultrasonic cleaner basket submerged in 99.9% anhydrous IPA / PCB cleaning solution. Run an 8-minute sweep frequency cycle.\",\n toolRequired: \"Heated Ultrasonic Cleaner\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Fill ultrasonic cleaner tank with fresh 99.9% anhydrous isopropyl alcohol or specialized PCB wash solution.\",\n \"Place motherboard in the stainless steel suspension basket (never allow PCB to touch tank floor directly).\",\n \"Run an 8-minute sweep frequency cycle at 40kHz with heating set to 40\u00B0C.\",\n \"Ultrasonic cavitation bubbles dislodge microscopic corrosion and flux minerals from beneath BGA chips (CPU, GPU, Chipset).\"\n ],\n warnings: [\"Ensure ultrasonic tank is well-ventilated; avoid open flames near alcohol vapors.\"],\n tips: [\"Sweep frequency prevents standing waves from damaging delicate silicon wire bonds inside IC packages.\"],\n checkpoints: [\"All green oxidation and sticky residues removed from underneath surface mount packages.\"],\n imageUrl: IMAGES.ultrasonic\n },\n {\n stepNumber: 4,\n phase: \"Phase 4: Oven Dehydration & Micro-Soldering Rework\",\n title: \"Oven Baking Dehydration (50\u00B0C) & Solder Pad Restoration\",\n description: \"Bake motherboard in dehydration oven at 50\u00B0C for 2 hours to evaporate all trapped solvent. Inspect under microscope and touch up corroded solder joints with leaded solder.\",\n toolRequired: \"Dehydration Oven & Soldering Iron\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Bake the PCB in a controlled drying oven at 50\u00B0C (122\u00B0F) for 2 to 3 hours to ensure 100% moisture evaporation from beneath BGA chips.\",\n \"Remove board and inspect under microscope.\",\n \"Apply tacky rosin flux (Amtech NC-559) to dull/corroded SMD pins.\",\n \"Touch up corroded solder joints with a fine J-tip soldering iron and 63/37 leaded solder to restore shiny metallurgical bonds.\",\n \"Measure resistance to ground on main power rails (+19V_VIN, +5V_ALW, +3.3V_ALW, +1.8V, VCORE); ensure no rail is shorted (<10\u03A9).\"\n ],\n warnings: [\"Never apply power if any major power rail measures 0\u03A9 short to ground.\"],\n tips: [\"Replace any discolored 0402 pull-up resistors whose resistance values have drifted by more than 10%.\"],\n checkpoints: [\"All major power rails pass resistance-to-ground checks (>100\u03A9 on standby rails).\"],\n imageUrl: IMAGES.soldering\n },\n {\n stepNumber: 5,\n phase: \"Phase 5: Bench POST Test, Reassembly & Return-to-Service QA\",\n title: \"Open-Air Bench Test, Full Reassembly & 24-Hour Burn-In\",\n description: \"Perform open-air diagnostic POST boot with lab bench power supply, verify keyboard/trackpad functions, reassemble into chassis, and run 24-hour stability burn-in.\",\n toolRequired: \"DC Bench Power Supply & Diagnostic Suite\",\n torqueSpec: \"0.20 Nm\",\n subSteps: [\n \"Perform first power-on on the bench using a current-limited DC bench power supply set to 20V @ 1.5A.\",\n \"Observe current draw: normal standby should read 0.01A-0.03A; power-on should ramp smoothly to 0.8A-1.5A.\",\n \"Verify display output, re-install RAM, SSD, and cooling assembly with fresh thermal paste.\",\n \"Assemble motherboard back into chassis, reconnect all peripherals, and torque all screws.\",\n \"Boot into OS and run 24-hour diagnostic burn-in loop (audio, USB ports, Wi-Fi, battery charging, sleep states).\"\n ],\n warnings: [\"If DC bench supply trips current limit (>3.0A at 1V), isolate shorted capacitor using thermal camera.\"],\n tips: [\"Apply conformal coating over repaired traces near board perimeter to prevent future humidity oxidation.\"],\n checkpoints: [\"System completes 100% functional validation with all peripherals operating normally.\"],\n imageUrl: IMAGES.osRecovery\n }\n ],\n imageUrl: IMAGES.ultrasonic\n },\n\n {\n category: \"cleaning\" as const,\n titleSuffix: \"Keyboard Deck Crumb Flush & Sticky Key Switch Repair\",\n descSuffix: \"Start-to-finish scissor-switch servicing: safe keycap extraction, tactile dome degreasing with fast-evaporating contact cleaner, hinge latching, and matrix testing.\",\n difficulty: \"easy\" as const,\n estimatedTime: \"20-30 min\",\n tools: [\"Precision Keycap Pry Tool\", \"Electronic Quick-Drying Contact Cleaner\", \"Microfiber Swabs\", \"Plastic Dental Pick\", \"Keyboard Matrix Tester Utility\"],\n warnings: [\n \"Never use petroleum-based lubricants (WD-40) on membrane or scissor switches; solvents dissolve silicone rubber domes.\",\n \"Delicate plastic scissor hinge clips snap easily if pried from the bottom; always unhook from the top retention tabs first.\"\n ],\n steps: [\n {\n stepNumber: 1,\n phase: \"Phase 1: Power Isolation & Defective Key Isolation\",\n title: \"Keyboard Testing & Top-Latch Keycap Extraction\",\n description: \"Run an online keyboard matrix test to identify stuck or chattering keys, power down the system, and gently unhook keycaps from the top retention hinge.\",\n toolRequired: \"Keycap Pry Tool & Matrix Tester\",\n torqueSpec: \"Hand-release\",\n subSteps: [\n \"Open an online keyboard tester utility to map all stuck, unresponsive, or sticky keys.\",\n \"Shut down computer and disconnect AC power.\",\n \"Insert a thin plastic pry tool under the top edge of the sticky keycap.\",\n \"Gently lever upward to unhook the top two plastic clips from the scissor mechanism without bending the hinge.\"\n ],\n warnings: [\"Never pull keycaps violently from the center or bottom to avoid snapping the tiny 0.5mm hinge pivot pins.\"],\n tips: [\"On spacebars and wide keys, note the metal stabilizer wire orientation before unclipping.\"],\n checkpoints: [\"Keycap released cleanly leaving scissor mechanism intact on the chassis tray.\"],\n imageUrl: IMAGES.cleaningBlower\n },\n {\n stepNumber: 2,\n phase: \"Phase 2: Chemical Switch Degreasing & Solvent Application\",\n title: \"Tactile Dome Degreasing & Fast-Evaporating Solvent Flush\",\n description: \"Apply quick-drying electronic contact cleaner around the silicone rubber dome, depress switch 20 times to flush out sugar grime, and absorb residue.\",\n toolRequired: \"Electronic Contact Cleaner & Swabs\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Blow compressed air around the exposed scissor mechanism to dislodge crumbs and hair.\",\n \"Spray a controlled micro-burst of zero-residue electronic contact cleaner directly around the silicone dome.\",\n \"Depress the rubber dome 20-30 times rapidly to allow the solvent to dissolve sticky residue inside the scissor sliders.\",\n \"Absorb dislodged grime and solvent using a microfiber swab.\"\n ],\n warnings: [\"Do not flood the keyboard with excessive liquid solvent; use controlled, targeted micro-bursts.\"],\n tips: [\"Electronic contact cleaner evaporates in under 30 seconds leaving zero conductive residue.\"],\n checkpoints: [\"Scissor mechanism moves up and down freely with zero sticky resistance.\"],\n imageUrl: IMAGES.screenTeardown1\n },\n {\n stepNumber: 3,\n phase: \"Phase 3: Hinge Re-latching & Tactile Testing\",\n title: \"Scissor Mechanism Alignment & Keycap Snap-In\",\n description: \"Align keycap over the scissor mechanism, hook bottom tabs, and press firmly on the center until two audible clicks verify dual-latch engagement.\",\n toolRequired: \"Hand assembly\",\n torqueSpec: \"Tactile snap\",\n subSteps: [\n \"Clean the underside of the keycap with an alcohol prep pad.\",\n \"Position keycap square over the scissor hinge.\",\n \"Engage the bottom hinge hooks first, then press down firmly in the center until you feel and hear two distinct snap clicks.\",\n \"Test tactile travel: key should have crisp, uniform 1.3mm travel with immediate spring rebound.\"\n ],\n warnings: [\"Do not force keycaps down at an angle; if it resists, verify scissor hinge orientation.\"],\n tips: [\"If a scissor hinge came unhooked from the metal chassis tray, re-hook the bottom metal tabs first.\"],\n checkpoints: [\"Keycap sits level with neighboring keys with crisp tactile actuation.\"],\n imageUrl: IMAGES.cleaningBlower\n },\n {\n stepNumber: 4,\n phase: \"Phase 4: Post-Repair Keyboard Matrix Validation\",\n title: \"Full 100% Keyboard Matrix Testing & Chattering Check\",\n description: \"Power on laptop, launch keyboard tester utility, test every individual key for actuation, and verify zero key chattering (double-typing).\",\n toolRequired: \"Keyboard Matrix Tester Utility\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Power on laptop and boot into OS.\",\n \"Open keyboard matrix testing software.\",\n \"Press every key on the keyboard, verifying 100% green registration.\",\n \"Type rapid test sentences in a text editor to verify zero key bounce or duplicate characters.\",\n \"Test keyboard backlight brightness levels (Low, Medium, High, Off).\"\n ],\n warnings: [\"If a key registers multiple times per press (chattering), apply one more contact cleaner flush.\"],\n tips: [\"Set keyboard repeat delay in OS settings to short for optimal typing responsiveness.\"],\n checkpoints: [\"All keys actuate with 100% reliability and crisp tactile response.\"],\n imageUrl: IMAGES.terminal\n }\n ],\n imageUrl: IMAGES.cleaningBlower\n },\n\n {\n category: \"cleaning\" as const,\n titleSuffix: \"VRAM & MOSFET Thermal Pad Caliper Sizing & Renewal\",\n descSuffix: \"Start-to-finish thermal pad overhaul: caliper millimeter gap measuring (0.5mm/1.0mm/1.5mm), durometer selection, precision cutting, and core contact spread verification.\",\n difficulty: \"medium\" as const,\n estimatedTime: \"30-45 min\",\n tools: [\"Digital Vernier Caliper\", \"High-Performance Thermal Pads (12.8 W/mK)\", \"Precision Cutting Shears\", \"99% Isopropyl Alcohol\", \"Torque Screwdriver\"],\n warnings: [\n \"Using overly thick thermal pads prevents the heatsink from contacting the CPU/GPU silicon dies, leading to instant 105\u00B0C thermal shutdowns.\",\n \"Always peel the protective plastic backing film from BOTH sides of the replacement thermal pads.\"\n ],\n steps: [\n {\n stepNumber: 1,\n phase: \"Phase 1: Pre-Disassembly Diagnostics & Heatsink Removal\",\n title: \"Power Drain, Heatsink Dismount & Old Pad Inspection\",\n description: \"Power off machine, decouple battery, remove heatsink assembly, and inspect compressed factory thermal pads on VRAM chips and MOSFET power stages.\",\n toolRequired: \"Torx T5 / Phillips #00 & Spudger\",\n torqueSpec: \"0.20 Nm\",\n subSteps: [\n \"Power down system, disconnect AC charger, and disconnect internal battery harness.\",\n \"Loosen heatsink screws in reverse stamped sequence (4 -> 3 -> 2 -> 1).\",\n \"Lift copper heatsink module straight up.\",\n \"Inspect old thermal pads for oil leakage, hardening, or tearing across GDDR6 memory and VRM chokes.\"\n ],\n warnings: [\"Do not discard old pads immediately; keep them for thickness comparison.\"],\n tips: [\"Factory thermal pads often dry out and sweat silicone oil after 2 years of thermal cycling.\"],\n checkpoints: [\"Heatsink extracted cleanly with all chip locations mapped.\"],\n imageUrl: IMAGES.thermalPaste\n },\n {\n stepNumber: 2,\n phase: \"Phase 2: Vernier Caliper Thickness & Gap Measurement\",\n title: \"Millimeter Gap Tolerancing & Precision Pad Cutting\",\n description: \"Measure gap between chip packages and copper baseplates using a digital caliper. Cut replacement 12.8 W/mK silicone pads to exact 1:1 chip dimensions.\",\n toolRequired: \"Digital Vernier Caliper & Precision Shears\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Measure uncompressed edge of old thermal pads with digital caliper (typically 0.5mm, 1.0mm, or 1.5mm).\",\n \"Select replacement thermal pads with high thermal conductivity (12.8 W/mK) and soft durometer (30-40 Shore 00).\",\n \"Cut replacement pad strips to match exact 1:1 rectangular dimensions of VRAM and MOSFET packages using sharp shears.\",\n \"Clean old silicone oil residue from memory chips and copper heatsink contact pads with 99% IPA.\"\n ],\n warnings: [\"Never stack two 0.5mm pads to make 1.0mm as the trapped air interface drastically increases thermal resistance.\"],\n tips: [\"Using softer durometer pads allows easier compression when tightening heatsink screws.\"],\n checkpoints: [\"All pad pieces cut to precise chip sizes with correct millimeter thickness.\"],\n imageUrl: IMAGES.nvmeSSD\n },\n {\n stepNumber: 3,\n phase: \"Phase 3: Dual-Sided Film Peeling & Component Placement\",\n title: \"Peel Protective Films & Press Pads onto Target Chips\",\n description: \"Peel blue protective backing from both faces of each pad, press onto VRAM memory and VRM power stages, and verify zero overlap with neighboring passives.\",\n toolRequired: \"Micro-Tweezers & Lint-Free Gloves\",\n torqueSpec: \"Hand placement\",\n subSteps: [\n \"Peel the bottom protective plastic film from each pad.\",\n \"Position pad accurately onto each GDDR6 memory chip and VRM MOSFET choke.\",\n \"Press lightly with a gloved finger to adhere pad to the chip package.\",\n \"Peel the top clear protective film from the upper face of all installed pads.\",\n \"Apply Arctic MX-6 thermal compound to the central CPU and GPU silicon dies.\"\n ],\n warnings: [\"Leaving the top clear protective film on thermal pads will insulate heat and cause VRAM to burn out.\"],\n tips: [\"Count the peeled plastic backing pieces to ensure 100% of films were removed.\"],\n checkpoints: [\"All thermal pads installed with both protective films peeled and dies repasted.\"],\n imageUrl: IMAGES.thermalPaste\n },\n {\n stepNumber: 4,\n phase: \"Phase 4: Heatsink Mounting, Torque & Spread Inspection\",\n title: \"Sequential Heatsink Torquing & Core Die Contact Verification\",\n description: \"Lower heatsink assembly flat, torque screws in stamped sequence (1-2-3-4), and inspect from side angle to confirm zero gap between heatsink and CPU/GPU dies.\",\n toolRequired: \"Torque Screwdriver & Inspection Light\",\n torqueSpec: \"0.20 Nm (Sequential 1-2-3-4)\",\n subSteps: [\n \"Lower copper cooling assembly straight down onto the board without twisting.\",\n \"Tighten screws in stamped numerical sequence (1 -> 2 -> 3 -> 4) to 0.20 Nm.\",\n \"Inspect the gap between copper baseplate and CPU/GPU silicon dies using a flashlight.\",\n \"Verify the thermal pads have compressed by ~25-30% and the central copper coldplate is sitting 100% flush against the silicon die.\",\n \"Plug in both fan PWM cables.\"\n ],\n warnings: [\"If heatsink rocks or tilts, an oversized thermal pad is preventing proper die seating; remove and downsize by 0.5mm.\"],\n tips: [\"Perform a dry test-mount with thermal paste to inspect the paste spread pattern on the die.\"],\n checkpoints: [\"100% flush die contact verified with zero heatsink tilt.\"],\n imageUrl: IMAGES.thermalPaste\n },\n {\n stepNumber: 5,\n phase: \"Phase 5: Reassembly & VRAM Thermal Stress Verification\",\n title: \"Chassis Assembly & FurMark / VRAM Temperature Logging\",\n description: \"Reconnect battery, fasten bottom enclosure, boot into Windows, launch HWiNFO64, and log GPU Memory Junction & Hotspot temperatures under 15-minute load.\",\n toolRequired: \"HWiNFO64 & FurMark / 3DMark\",\n torqueSpec: \"0.20 Nm\",\n subSteps: [\n \"Reconnect internal battery harness and screw down bottom casing.\",\n \"Boot into Windows and launch HWiNFO64 sensor logger.\",\n \"Run FurMark GPU stress test for 15 minutes.\",\n \"Monitor `GPU Memory Junction Temperature` (should stay <85\u00B0C) and `GPU Hotspot Temperature` (delta over GPU Core should be <15\u00B0C).\",\n \"Confirm zero artifacts, throttling, or driver crashes.\"\n ],\n warnings: [\"If GPU Memory Junction exceeds 100\u00B0C, immediately shut down and inspect pad thickness.\"],\n tips: [\"A healthy thermal pad upgrade lowers VRAM temperatures by 15-25\u00B0C under heavy raytracing workloads.\"],\n checkpoints: [\"GPU Core <72\u00B0C and VRAM Memory <80\u00B0C under maximum sustained load.\"],\n imageUrl: IMAGES.osRecovery\n }\n ],\n imageUrl: IMAGES.thermalPaste\n },\n\n // ----------------------------------------------------\n // UPGRADES (3 Templates)\n // ----------------------------------------------------\n {\n category: \"upgrades\" as const,\n titleSuffix: \"PCIe 4.0 / 5.0 NVMe SSD Expansion & Sector Cloning\",\n descSuffix: \"Start-to-finish high-speed storage upgrade: external enclosure cloning, 30-degree M.2 slot insertion, thermal heatsink mounting, UEFI boot priority, and TRIM optimization.\",\n difficulty: \"easy\" as const,\n estimatedTime: \"25-35 min\",\n tools: [\"Phillips #00 Precision Screwdriver\", \"M.2 2280 NVMe SSD\", \"USB-C External NVMe Enclosure\", \"Drive Cloning Software (Macrium Reflect / Clonezilla)\", \"Thermal Pad\"],\n warnings: [\n \"Touch a grounded metal chassis or wear an ESD wrist strap before handling bare NVMe SSD circuit boards.\",\n \"Insert M.2 NVMe SSDs into the socket at a 30-degree angle; never force straight down horizontally or you will break the M.2 Key-M connector pins.\"\n ],\n steps: [\n {\n stepNumber: 1,\n phase: \"Phase 1: Drive Sector Cloning & BitLocker Decryption\",\n title: \"Drive Cloning to Replacement NVMe via External Enclosure\",\n description: \"Insert new NVMe SSD into a USB-C external enclosure, connect to laptop, temporarily suspend BitLocker encryption, and clone all partitions sector-by-sector.\",\n toolRequired: \"USB-C NVMe Enclosure & Macrium Reflect\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Suspend BitLocker encryption on target OS drive in Windows (`manage-bde -protectors -disable C:`).\",\n \"Install new NVMe SSD into USB-C external NVMe enclosure and plug into laptop.\",\n \"Launch Macrium Reflect or Clonezilla.\",\n \"Select source drive > Click `Clone this disk` > Select destination NVMe drive.\",\n \"Drag all partitions (EFI, MSR, Windows OS, Recovery) to destination and extend OS partition to fill total drive capacity.\",\n \"Execute clone process and wait for 100% completion verification.\"\n ],\n warnings: [\"Ensure you select the correct source vs destination drive to avoid overwriting active data.\"],\n tips: [\"Suspending BitLocker before cloning prevents drive locked prompt on first boot.\"],\n checkpoints: [\"Cloning process finishes with 100% verified partition copies.\"],\n imageUrl: IMAGES.nvmeSSD\n },\n {\n stepNumber: 2,\n phase: \"Phase 2: Power Isolation & Chassis Opening\",\n title: \"Power Isolation & Motherboard Battery Decoupling\",\n description: \"Power down laptop, disconnect AC adapter, remove bottom enclosure, and physically disconnect the internal battery power harness.\",\n toolRequired: \"Torx T5 / Phillips #00 & Spudger\",\n torqueSpec: \"0.20 Nm\",\n subSteps: [\n \"Shut down computer and unplug all external cables.\",\n \"Remove bottom casing fasteners and release perimeter clips.\",\n \"Disconnect the internal battery connector from the logic board.\",\n \"Locate the M.2 2280 NVMe slot (and remove copper EMI shield if present).\"\n ],\n warnings: [\"Never insert or remove NVMe cards while the battery is connected to prevent +3.3V power surge shorts.\"],\n tips: [\"If the laptop has two M.2 slots, check the motherboard silkscreen for `PCIE GEN4 / GEN5` labeling on Slot 1.\"],\n checkpoints: [\"Battery disconnected and M.2 slot accessible.\"],\n imageUrl: IMAGES.screenTeardown1\n },\n {\n stepNumber: 3,\n phase: \"Phase 3: M.2 NVMe Slot Installation & Heatsink Securing\",\n title: \"30-Degree Angle Slot Insertion, Standoff Fastener & Heatsink Mounting\",\n description: \"Insert the new NVMe SSD firmly into the M.2 Key-M slot at a 30-degree angle, press down gently, fasten the M2x3mm retention screw, and attach copper thermal shield.\",\n toolRequired: \"Phillips #00 Screwdriver\",\n torqueSpec: \"0.15 Nm (M2 Screw)\",\n subSteps: [\n \"Align module notch with M.2 Key-M socket key.\",\n \"Slide NVMe card firmly into the socket at a 30-degree upward angle until gold contacts are fully seated.\",\n \"Gently press the card down flat against the chassis standoff post.\",\n \"Install and tighten the single M2x3.5mm retention screw to 0.15 Nm.\",\n \"Apply 1.0mm thermal pad over the NVMe controller and attach the metal heatsink shield.\"\n ],\n warnings: [\"Do not over-tighten the tiny M2 screw; excessive torque strips the soft brass standoff thread.\"],\n tips: [\"High-speed Gen4/Gen5 SSD controllers require thermal pads to prevent thermal throttling above 75\u00B0C.\"],\n checkpoints: [\"SSD sits completely flat and secure with thermal shield attached.\"],\n imageUrl: IMAGES.nvmeSSD\n },\n {\n stepNumber: 4,\n phase: \"Phase 4: Chassis Reassembly & UEFI Boot Priority\",\n title: \"Battery Reconnection, Chassis Closure & UEFI Boot Setup\",\n description: \"Reconnect battery, fasten bottom cover, power on, enter BIOS Setup, and ensure the new NVMe SSD is designated as Primary Boot Option #1.\",\n toolRequired: \"Torx T5 / Phillips #00 & BIOS Setup\",\n torqueSpec: \"0.20 Nm\",\n subSteps: [\n \"Reconnect internal battery harness and snap bottom cover in place.\",\n \"Fasten all perimeter chassis screws.\",\n \"Power on system and tap F2/Del to enter BIOS Setup.\",\n \"Navigate to `Boot Options` > set new NVMe SSD (Windows Boot Manager) as `Boot Option #1`.\",\n \"Save changes and exit BIOS.\"\n ],\n warnings: [\"If system boots to 'No Boot Device Found', verify UEFI boot mode is enabled instead of Legacy CSM.\"],\n tips: [\"Enable NVMe Fast Boot in BIOS for sub-6 second cold boot times.\"],\n checkpoints: [\"BIOS recognizes new NVMe model and serial with correct capacity.\"],\n imageUrl: IMAGES.biosScreen\n },\n {\n stepNumber: 5,\n phase: \"Phase 5: Post-Repair TRIM Verification & Speed Benchmark\",\n title: \"Windows Disk Management, TRIM Verification & CrystalDiskMark Speed Test\",\n description: \"Boot into Windows, verify partition expansion in Disk Management, enable TRIM garbage collection, and benchmark read/write speeds with CrystalDiskMark.\",\n toolRequired: \"Disk Management & CrystalDiskMark\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Boot into Windows desktop.\",\n \"Open Disk Management (`diskmgmt.msc`) and verify full unallocated drive capacity is merged into C: drive.\",\n \"Open Admin Command Prompt and run `fsutil behavior query DisableDeleteNotify` (output `0` confirms TRIM is active).\",\n \"Launch CrystalDiskMark and run 1GB read/write benchmark.\",\n \"Verify sequential read speeds reach rated spec (PCIe 4.0: ~7,000 MB/s, PCIe 5.0: ~12,000 MB/s).\",\n \"Re-enable BitLocker encryption (`manage-bde -protectors -enable C:`).\"\n ],\n warnings: [\"Do not run defragmentation on NVMe SSDs; only use TRIM optimization.\"],\n tips: [\"Install OEM SSD management software (Samsung Magician / WD Dashboard) for firmware updates.\"],\n checkpoints: [\"Sequential reads exceed 7,000 MB/s with full capacity accessible.\"],\n imageUrl: IMAGES.osRecovery\n }\n ],\n imageUrl: IMAGES.nvmeSSD\n },\n\n {\n category: \"upgrades\" as const,\n titleSuffix: \"DDR4 / DDR5 Dual-Channel High-Speed RAM Upgrade\",\n descSuffix: \"Start-to-finish memory expansion: isolate power, remove EMI shielding, eject legacy modules, insert matched dual-rank SODIMMs, POST memory training, and MemTest86 validation.\",\n difficulty: \"easy\" as const,\n estimatedTime: \"15-20 min\",\n tools: [\"Plastic Spudger\", \"Matched Dual-Rank DDR5 SODIMM Memory Kit\", \"Anti-Static Wrist Strap\", \"Phillips #00 Screwdriver\", \"PassMark MemTest86 USB\"],\n warnings: [\n \"Ensure laptop is completely powered off and internal battery disconnected before touching memory slots.\",\n \"DDR5 and DDR4 slots have different notch keying; never force a DDR5 module into a DDR4 socket.\"\n ],\n steps: [\n {\n stepNumber: 1,\n phase: \"Phase 1: Pre-Disassembly Diagnostics & Battery Decoupling\",\n title: \"Power Drain, Enclosure Removal & Battery Isolation\",\n description: \"Shut down laptop, disconnect AC power, remove bottom enclosure, disconnect internal battery harness, and ground yourself on an ESD workstation.\",\n toolRequired: \"Torx T5 / Phillips #00 & Spudger\",\n torqueSpec: \"0.20 Nm\",\n subSteps: [\n \"Power off computer and disconnect all external cables.\",\n \"Remove bottom casing screws and pop perimeter retaining clips.\",\n \"Disconnect the internal battery connector from the motherboard.\",\n \"Hold power button for 10 seconds to drain standby voltage from motherboard memory rails.\"\n ],\n warnings: [\"Touching RAM slots while the battery is connected can bridge VDD/VDDQ power pins and destroy memory controllers.\"],\n tips: [\"Always install matched pairs (same capacity, speed, and CAS latency) for optimal dual-channel bandwidth.\"],\n checkpoints: [\"Battery disconnected and memory shielding visible.\"],\n imageUrl: IMAGES.screenTeardown1\n },\n {\n stepNumber: 2,\n phase: \"Phase 2: EMI Shield Removal & Legacy Module Ejection\",\n title: \"Metal EMI Shield Removal & Module Ejection\",\n description: \"Pry away the metal EMI memory canopy and spread the side metal retention clips outward to allow the SODIMM module to pop up at a 45-degree angle.\",\n toolRequired: \"Plastic Spudger\",\n torqueSpec: \"Hand-release\",\n subSteps: [\n \"Use a plastic spudger to gently release the stamped metal EMI shielding canopy covering the RAM slots.\",\n \"Spread the two metal spring retention clips on the sides of the SODIMM slot outward simultaneously.\",\n \"The RAM module will automatically pop upward at a 45-degree angle.\",\n \"Grasp the edges of the module and slide it straight out of the socket.\"\n ],\n warnings: [\"Never touch the gold connector pins with bare fingers to avoid transferring skin oils and causing memory bit errors.\"],\n tips: [\"Store extracted RAM modules in anti-static ESD bags.\"],\n checkpoints: [\"Old modules extracted cleanly without bending side retention clips.\"],\n imageUrl: IMAGES.ramModule\n },\n {\n stepNumber: 3,\n phase: \"Phase 3: Dual-Rank SODIMM Insertion & Latching\",\n title: \"New SODIMM Alignment, Insertion & Latch Engagement\",\n description: \"Align module notch with socket key, slide firmly into the slot at 45 degrees, and push flat until side metal clips snap locked with an audible click.\",\n toolRequired: \"Hand assembly\",\n torqueSpec: \"Tactile snap\",\n subSteps: [\n \"Align the notch on the gold connector edge of the new DDR5 module with the plastic key in the SODIMM socket.\",\n \"Insert the module firmly into the slot at a 45-degree angle until gold pins are fully seated inside the connector.\",\n \"Press the top edge of the module down flat towards the motherboard until both side metal retention clips snap locked with a tactile click.\",\n \"Repeat for Slot 2 to populate dual-channel symmetrical configuration.\",\n \"Re-seat the metal EMI shielding canopy over the memory modules.\"\n ],\n warnings: [\"If side clips do not snap freely, do not force down; re-align module angle and re-insert.\"],\n tips: [\"Verify module is fully seated by checking that gold pins are almost completely hidden inside the socket.\"],\n checkpoints: [\"Both modules locked flat and level under side retention springs.\"],\n imageUrl: IMAGES.ramModule\n },\n {\n stepNumber: 4,\n phase: \"Phase 4: Reassembly & DDR5 Cold POST Memory Training\",\n title: \"Battery Connection, Chassis Closure & Initial Memory Training\",\n description: \"Reconnect battery, fasten bottom cover, connect AC charger, power on, and allow up to 60-90 seconds for initial DDR5 memory training.\",\n toolRequired: \"Torx T5 / Phillips #00 & AC Charger\",\n torqueSpec: \"0.20 Nm\",\n subSteps: [\n \"Reconnect internal battery harness to the motherboard.\",\n \"Snap bottom enclosure in place and torque all perimeter screws.\",\n \"Connect OEM AC power adapter and press the power button.\",\n \"CRITICAL: Allow 30 to 90 seconds for initial DDR5 memory training. The screen will remain black and power LED will pulse while the memory controller calibrates timings.\",\n \"Wait patiently until the OEM logo appears, then tap F2/Del to enter BIOS Setup.\"\n ],\n warnings: [\"DO NOT force power off while memory training is running on first boot.\"],\n tips: [\"DDR5 trains JEDEC timing parameters and signal termination resistances automatically on hardware changes.\"],\n checkpoints: [\"BIOS Setup displays full upgraded memory capacity (e.g. 32GB / 64GB) at rated frequency (e.g. 5600 MT/s).\"],\n imageUrl: IMAGES.biosScreen\n },\n {\n stepNumber: 5,\n phase: \"Phase 5: Post-Repair Diagnostic Stress Test & MemTest86\",\n title: \"PassMark MemTest86 4-Pass Stress Test & Windows Memory Diagnostics\",\n description: \"Boot from MemTest86 USB drive, run a 4-pass comprehensive memory test (zero bit errors), boot into Windows, and verify dual-channel bandwidth in CPU-Z.\",\n toolRequired: \"PassMark MemTest86 USB & CPU-Z\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Insert MemTest86 bootable USB drive and boot from UEFI boot menu.\",\n \"Run full 4-pass diagnostic test checking Test 1 through Test 13 (Address test, Moving inversions, Block move, Rowhammer).\",\n \"Confirm zero bit errors reported (0 Errors).\",\n \"Boot into Windows and launch CPU-Z (`Memory` tab).\",\n \"Verify `Channel #` reports `2 x 32-bit` (Dual-Channel) and frequency matches JEDEC/XMP specifications.\"\n ],\n warnings: [\"If MemTest86 reports even a single bit error, reseat modules or check for incompatible CAS latency.\"],\n tips: [\"Run heavy multi-tasking workloads with 50+ browser tabs and 4K video rendering to test stability.\"],\n checkpoints: [\"100% zero errors in MemTest86 with full dual-channel bandwidth verified.\"],\n imageUrl: IMAGES.ramModule\n }\n ],\n imageUrl: IMAGES.ramModule\n },\n\n {\n category: \"upgrades\" as const,\n titleSuffix: \"Wi-Fi 7 / Wi-Fi 6E BE200 M.2 Wireless Module & Antenna Upgrade\",\n descSuffix: \"Start-to-finish wireless upgrade: isolate power, decouple micro IPEX MHF4 antenna snaps, insert M.2 Key-E card, snap antenna leads, install WHQL drivers, and verify 320MHz channels.\",\n difficulty: \"easy\" as const,\n estimatedTime: \"15-20 min\",\n tools: [\"Phillips #00 Screwdriver\", \"Plastic Spudger / Nylon Tweezers\", \"Wi-Fi 7 BE200 M.2 2230 Card\", \"Anti-Static Wrist Strap\", \"Official Intel/Qualcomm Wi-Fi 7 Driver Package\"],\n warnings: [\n \"Carefully press micro IPEX MHF4 antenna snaps straight down from above; NEVER slide sideways or push with metal tools to avoid crushing delicate connector gold center pins.\"\n ],\n steps: [\n {\n stepNumber: 1,\n phase: \"Phase 1: Pre-Disassembly Diagnostics & Battery Isolation\",\n title: \"Power Drain, Enclosure Removal & Battery Disconnection\",\n description: \"Power down laptop, disconnect AC adapter, remove bottom enclosure, disconnect internal battery harness, and ground yourself on an ESD workstation.\",\n toolRequired: \"Torx T5 / Phillips #00 & Spudger\",\n torqueSpec: \"0.20 Nm\",\n subSteps: [\n \"Power off computer and disconnect all external cables.\",\n \"Remove bottom casing screws and pop perimeter retaining clips.\",\n \"Disconnect the internal battery connector from the motherboard.\",\n \"Locate the M.2 2230 Key-E Wi-Fi module socket.\"\n ],\n warnings: [\"Disconnect battery before touching wireless card to prevent shorting antenna ground planes.\"],\n tips: [\"Note which antenna wire connects to `Main` (Black/Triangle 1) and `Aux` (White/Triangle 2).\"],\n checkpoints: [\"Battery disconnected and Wi-Fi module accessible.\"],\n imageUrl: IMAGES.screenTeardown1\n },\n {\n stepNumber: 2,\n phase: \"Phase 2: Antenna Decoupling & Module Extraction\",\n title: \"IPEX MHF4 Antenna Decoupling & Standoff Screw Removal\",\n description: \"Lift IPEX MHF4 micro antenna leads straight up with nylon tweezers, remove the single M2x3mm standoff screw, and slide the old Wi-Fi card out at 30 degrees.\",\n toolRequired: \"Nylon Tweezers & Phillips #00\",\n torqueSpec: \"0.15 Nm\",\n subSteps: [\n \"Peel back clear protective Mylar tape covering the antenna connectors.\",\n \"Insert nylon tweezers under the metal collar of the Black (Main) antenna snap and lift vertically straight up.\",\n \"Repeat for White/Gray (Aux) antenna snap.\",\n \"Remove the single M2x3mm Phillips screw holding the card in the standoff.\",\n \"Slide the old Wi-Fi card out of the M.2 Key-E slot at a 30-degree angle.\"\n ],\n warnings: [\"Do not pull antenna leads by the coaxial wire; always pry under the metal gold connector head.\"],\n tips: [\"Store old Wi-Fi card in an anti-static bag for testing backup.\"],\n checkpoints: [\"Antenna leads disconnected with gold micro-pins in pristine condition.\"],\n imageUrl: IMAGES.logicBoard\n },\n {\n stepNumber: 3,\n phase: \"Phase 3: Wi-Fi 7 Module Insertion & Antenna Snapping\",\n title: \"Wi-Fi 7 M.2 Card Insertion & Precision Antenna Latching\",\n description: \"Slide new Wi-Fi 7 BE200 module into Key-E slot, fasten M2 screw, align micro antenna snaps over gold pads, and press straight down until tactile snap confirms engagement.\",\n toolRequired: \"Phillips #00 & Fingertip / Nylon Tool\",\n torqueSpec: \"0.15 Nm\",\n subSteps: [\n \"Insert new Wi-Fi 7 card into the M.2 Key-E slot at a 30-degree angle and press flat against standoff.\",\n \"Fasten the M2x3mm screw to 0.15 Nm.\",\n \"Align the Black (Main) antenna connector precisely over Pin 1 on the Wi-Fi card.\",\n \"Press straight down gently with a fingertip or nylon spudger until you feel a distinct micro-snap click.\",\n \"Align and snap the White/Gray (Aux) antenna connector onto Pin 2.\",\n \"Place protective insulating tape over antenna leads.\"\n ],\n warnings: [\"If antenna does not click immediately, re-center; pushing off-center crushes the female barrel.\"],\n tips: [\"Test antenna retention by giving the wire a very gentle tug; it should stay locked firmly.\"],\n checkpoints: [\"Both antenna leads locked securely and flat on the Wi-Fi card.\"],\n imageUrl: IMAGES.logicBoard\n },\n {\n stepNumber: 4,\n phase: \"Phase 4: Chassis Closure & Driver Installation\",\n title: \"Chassis Assembly, Boot-up & OEM WHQL Driver Setup\",\n description: \"Reconnect battery, fasten bottom enclosure, boot into Windows, and install the latest official Intel / Qualcomm Wi-Fi 7 and Bluetooth 5.4 driver package.\",\n toolRequired: \"Torx T5 / Phillips #00 & Driver Setup\",\n torqueSpec: \"0.20 Nm\",\n subSteps: [\n \"Reconnect internal battery harness and snap bottom cover in place.\",\n \"Torque perimeter chassis screws.\",\n \"Boot into Windows desktop.\",\n \"Launch the official Wi-Fi 7 driver installer package (e.g. `Intel_WiFi_BE200_WHQL.exe`).\",\n \"Launch the official Bluetooth driver installer package (`Intel_BT_WHQL.exe`) and restart system.\"\n ],\n warnings: [\"Make sure both Wi-Fi and Bluetooth driver packages are installed for full combo card functionality.\"],\n tips: [\"Bluetooth communicates over internal USB pins on the M.2 Key-E slot.\"],\n checkpoints: [\"Device Manager shows 'Intel(R) Wi-Fi 7 BE200 320MHz' and 'Intel(R) Wireless Bluetooth(R)' with zero warnings.\"],\n imageUrl: IMAGES.osRecovery\n },\n {\n stepNumber: 5,\n phase: \"Phase 5: Post-Repair Wireless Throughput & Latency Testing\",\n title: \"6GHz Tri-Band Connection, Throughput & Bluetooth Peripheral QA\",\n description: \"Connect to 6GHz Wi-Fi 7 / 6E network, verify 320MHz channel width, test gigabit throughput, and pair high-resolution Bluetooth 5.4 peripherals.\",\n toolRequired: \"Wi-Fi Analyzer & Speedtest\",\n torqueSpec: \"N/A\",\n subSteps: [\n \"Click Wi-Fi icon in taskbar and connect to your 6GHz Wi-Fi 7 SSID.\",\n \"Open Command Prompt and run `netsh wlan show interfaces`.\",\n \"Confirm `Radio type` displays `802.11be` or `802.11ax` and `Receive rate (Mbps)` shows multi-gigabit link rates (2,400 - 5,800 Mbps).\",\n \"Run a local LAN iPerf3 or internet speed test to confirm sub-3ms latency and full gigabit+ throughput.\",\n \"Pair Bluetooth headphones/mouse and verify uninterrupted audio streaming at 10-meter range.\"\n ],\n warnings: [\"If signal strength is weak (-85 dBm), open chassis and verify antenna cables are not swapped or detached.\"],\n tips: [\"Wi-Fi 7 Multi-Link Operation (MLO) transmits across 5GHz and 6GHz simultaneously for ultra-low latency.\"],\n checkpoints: [\"Full Wi-Fi 7 multi-gigabit speed achieved with crystal clear Bluetooth audio.\"],\n imageUrl: IMAGES.terminal\n }\n ],\n imageUrl: IMAGES.logicBoard\n }\n];\n\n// Specific 28+ Models to generate targeted technical guides across all 4 categories\nexport const modelTargets = [\n // Apple\n { brand: \"Apple\", model: \"MacBook Pro 16\\\" M3 Max\", type: \"laptop\" as const },\n { brand: \"Apple\", model: \"MacBook Pro 14\\\" M3 Pro\", type: \"laptop\" as const },\n { brand: \"Apple\", model: \"MacBook Air 15\\\" M2 / M3\", type: \"laptop\" as const },\n { brand: \"Apple\", model: \"MacBook Air 13\\\" M1 Legacy\", type: \"laptop\" as const },\n { brand: \"Apple\", model: \"Mac Studio M2 Ultra\", type: \"desktop\" as const },\n { brand: \"Apple\", model: \"iMac 24\\\" 4.5K Retina M3\", type: \"desktop\" as const },\n { brand: \"Apple\", model: \"Mac mini M2 Pro\", type: \"desktop\" as const },\n\n // Dell\n { brand: \"Dell\", model: \"XPS 15 9530\", type: \"laptop\" as const },\n { brand: \"Dell\", model: \"XPS 13 Plus 9320\", type: \"laptop\" as const },\n { brand: \"Dell\", model: \"Latitude 5440 Enterprise\", type: \"laptop\" as const },\n { brand: \"Dell\", model: \"Alienware m16 R2 Gaming\", type: \"laptop\" as const },\n { brand: \"Dell\", model: \"OptiPlex 7010 Micro\", type: \"desktop\" as const },\n { brand: \"Dell\", model: \"OptiPlex 5090 SFF\", type: \"desktop\" as const },\n { brand: \"Dell\", model: \"Alienware Aurora R16\", type: \"desktop\" as const },\n\n // Lenovo\n { brand: \"Lenovo\", model: \"ThinkPad X1 Carbon Gen 11\", type: \"laptop\" as const },\n { brand: \"Lenovo\", model: \"ThinkPad T14 Gen 4\", type: \"laptop\" as const },\n { brand: \"Lenovo\", model: \"Legion Pro 7i Gen 9\", type: \"laptop\" as const },\n { brand: \"Lenovo\", model: \"Yoga 9i Dual-Screen\", type: \"laptop\" as const },\n { brand: \"Lenovo\", model: \"ThinkCentre M90q Tiny\", type: \"desktop\" as const },\n { brand: \"Lenovo\", model: \"Legion Tower 7i\", type: \"desktop\" as const },\n\n // HP\n { brand: \"HP\", model: \"Spectre x360 14 (2024)\", type: \"laptop\" as const },\n { brand: \"HP\", model: \"EliteBook 840 G10\", type: \"laptop\" as const },\n { brand: \"HP\", model: \"OMEN Transcend 16\", type: \"laptop\" as const },\n { brand: \"HP\", model: \"OMEN 45L Cryo-Chamber\", type: \"desktop\" as const },\n { brand: \"HP\", model: \"ProDesk 600 G6 SFF\", type: \"desktop\" as const },\n\n // ASUS\n { brand: \"ASUS\", model: \"ROG Zephyrus G14 (2024)\", type: \"laptop\" as const },\n { brand: \"ASUS\", model: \"ZenBook 14 OLED UX3405\", type: \"laptop\" as const },\n { brand: \"ASUS\", model: \"ROG Strix SCAR 16\", type: \"laptop\" as const },\n { brand: \"ASUS\", model: \"ROG Strix G16CH Desktop\", type: \"desktop\" as const },\n\n // Acer & MSI & Razer & Microsoft & Framework & Custom\n { brand: \"Acer\", model: \"Predator Helios 16\", type: \"laptop\" as const },\n { brand: \"MSI\", model: \"Stealth 16 AI Studio\", type: \"laptop\" as const },\n { brand: \"Razer\", model: \"Blade 16 Dual-Mode\", type: \"laptop\" as const },\n { brand: \"Microsoft\", model: \"Surface Laptop 5\", type: \"laptop\" as const },\n { brand: \"Framework\", model: \"Framework Laptop 13 / 16 Modular\", type: \"laptop\" as const },\n { brand: \"Samsung\", model: \"Galaxy Book4 Ultra\", type: \"laptop\" as const },\n { brand: \"LG\", model: \"LG Gram 17 Pro\", type: \"laptop\" as const },\n { brand: \"Custom Built\", model: \"Custom Full/Mid ATX Gaming PC\", type: \"desktop\" as const },\n { brand: \"Custom Built\", model: \"Mini-ITX Small Form Factor SFF\", type: \"desktop\" as const }\n];\n\n/**\n * Returns the entire array of 200+ comprehensive repair guides with intimate details\n */\nexport function generateAllComprehensiveGuides(): InsertRepairGuide[] {\n const list: InsertRepairGuide[] = [...curatedRepairGuides];\n\n for (const target of modelTargets) {\n for (const template of guideTemplates) {\n list.push({\n title: `${target.model}: ${template.titleSuffix}`,\n description: `Dedicated start-to-finish ${template.category} teardown and repair protocol for the ${target.brand} ${target.model}. ${template.descSuffix}`,\n deviceType: target.type,\n category: template.category,\n difficulty: template.difficulty,\n estimatedTime: template.estimatedTime,\n toolsRequired: template.tools,\n safetyWarnings: template.warnings,\n steps: template.steps,\n alternativeSolutions: `Reference ${target.brand} official factory service manuals, board-level schematics, or contact certified bench technicians for OEM warranty support.`,\n imageUrl: template.imageUrl\n });\n }\n }\n\n return list;\n}\n\nexport async function seedGuides() {\n const existingGuides = await storage.getRepairGuides();\n if (existingGuides.length >= 180 && existingGuides.some(g => g.steps && g.steps[0] && g.steps[0].subSteps)) {\n console.log(`Database already has ${existingGuides.length} intimate detailed guides. Skipping generation.`);\n return;\n }\n\n console.log(`Seeding 180+ comprehensive multi-brand repair guides with start-to-finish intimate details...`);\n const allGuides = generateAllComprehensiveGuides();\n let totalSeeded = 0;\n\n for (const guide of allGuides) {\n try {\n await storage.createRepairGuide(guide);\n totalSeeded++;\n } catch (e) {\n // ignore individual conflicts\n }\n }\n\n console.log(`Successfully generated and seeded ${totalSeeded} intimate start-to-finish technical guides!`);\n}\n", "export interface ManualChapter {\n id: string;\n chapterNumber: number;\n title: string;\n subtitle: string;\n paragraphs: string[];\n steps?: {\n stepLabel: string;\n action: string;\n details: string;\n caution?: string;\n verification?: string;\n }[];\n}\n\nexport interface VoltageRailSpec {\n rail: string;\n voltage: string;\n tolerance: string;\n location: string;\n normalImpedance: string;\n description: string;\n}\n\nexport interface FastenerTorqueSpec {\n location: string;\n screwType: string;\n size: string;\n torque: string;\n threadLock: string;\n}\n\nexport interface TechnicalManual {\n id: string;\n category: \"hardware\" | \"software\" | \"cleaning\" | \"upgrades\";\n title: string;\n code: string;\n fileSize: string;\n pages: number;\n author: string;\n lastUpdated: string;\n summary: string;\n keyTopics: string[];\n safetyDirectives: string[];\n recommendedTools: string[];\n chapters?: ManualChapter[];\n voltageRails?: VoltageRailSpec[];\n fastenerTorqueTable?: FastenerTorqueSpec[];\n}\n\nexport const TECHNICAL_MANUALS: TechnicalManual[] = [\n // 1. HARDWARE MANUAL 1: Universal Laptop Teardown & Torque Spec\n {\n id: \"man-hw-01\",\n category: \"hardware\",\n title: \"Universal Laptop Teardown & Screw Torque Specification Manual\",\n code: \"DOC-HW-TEARDOWN-2026\",\n fileSize: \"3.4 MB PDF\",\n pages: 42,\n author: \"JCR Bench Engineering Group\",\n lastUpdated: \"2026 Revision 4.2\",\n summary: \"Standard chassis screw torque limits, eDP ribbon connector zero-insertion-force (ZIF) latch protocols, and magnesium frame unibody separation techniques.\",\n keyTopics: [\n \"Thread engagement limits for M2/M2.5 chassis standoffs\",\n \"eDP 30-pin and 40-pin ribbon cable pinout safety\",\n \"Trackpad grounding tape and haptic sensor calibration\",\n \"Antenna routing channels and RF isolation shields\"\n ],\n safetyDirectives: [\n \"Always disconnect battery power harness before lifting motherboard\",\n \"Maintain grounded ESD wrist strap under 1 megohm resistance\",\n \"Never reuse stripped Torx screws on hinge anchors\"\n ],\n recommendedTools: [\"Torx T4/T5/T6\", \"Phillips #00\", \"Plastic Spudger Kit\", \"Torque Screwdriver (0.2-0.5 Nm)\"],\n fastenerTorqueTable: [\n { location: \"Bottom Cover Perimeter (Magnesium / Aluminum)\", screwType: \"Torx T5\", size: \"M2.0 x 3.5mm\", torque: \"0.20 - 0.25 Nm\", threadLock: \"Blue Loctite 242 (Low)\" },\n { location: \"Display Hinge Anchor Brackets into Palmrest Standoffs\", screwType: \"Phillips #00\", size: \"M2.5 x 5.0mm\", torque: \"0.45 - 0.50 Nm\", threadLock: \"Pre-applied Nylon patch\" },\n { location: \"CPU/GPU Heatsink Spring-Loaded Captive Screws (X-Pattern)\", screwType: \"Phillips #00\", size: \"M2.0 x 3.0mm Captive\", torque: \"0.25 Nm (Stop at thread bottom)\", threadLock: \"None\" },\n { location: \"NVMe M.2 2280 Standoff Retainer\", screwType: \"Phillips #0\", size: \"M2.0 x 2.5mm Flat Head\", torque: \"0.15 Nm\", threadLock: \"None\" },\n { location: \"Internal Battery Perimeter Screws\", screwType: \"Phillips #00\", size: \"M2.0 x 4.0mm Waist\", torque: \"0.18 - 0.20 Nm\", threadLock: \"None\" },\n { location: \"Motherboard Logic Board Retaining Screws\", screwType: \"Phillips #00\", size: \"M2.0 x 3.0mm Silver\", torque: \"0.20 Nm\", threadLock: \"None\" }\n ],\n voltageRails: [\n { rail: \"+19V_DCIN / +20V_USB_PD\", voltage: \"19.5V - 20.0V\", tolerance: \"\u00B15%\", location: \"DC-In Jack / Dual Input MOSFETs\", normalImpedance: \"> 100 k\u03A9\", description: \"Primary unregulated DC supply directly after power brick/USB-C negotiation.\" },\n { rail: \"+3.3V_ALW (Always-On)\", voltage: \"3.32V\", tolerance: \"\u00B12%\", location: \"Coil PL301 near TPS51285\", normalImpedance: \"> 15 k\u03A9\", description: \"Powers Super I/O EC controller, power button circuit, and BIOS flash chip.\" },\n { rail: \"+5.0V_ALW (Always-On)\", voltage: \"5.05V\", tolerance: \"\u00B12%\", location: \"Coil PL302\", normalImpedance: \"> 20 k\u03A9\", description: \"Powers USB 5V VBUS switches and audio codec standby circuits.\" },\n { rail: \"+1.8V_PRIM / +1.8V_AUX\", voltage: \"1.80V\", tolerance: \"\u00B13%\", location: \"Coil PL501 near PCH\", normalImpedance: \"> 800 \u03A9\", description: \"Low-voltage system I/O, SPI BIOS ROM buffer, and PCH clock rails.\" }\n ],\n chapters: [\n {\n id: \"ch-1\",\n chapterNumber: 1,\n title: \"Chassis Fastener Management & Torque Standards\",\n subtitle: \"Preventing stripped threads and stripped plastic boss standoffs\",\n paragraphs: [\n \"Modern ultrabooks utilize CNC-milled aluminum or injection-molded magnesium alloy shells with pressed-in brass knurled inserts. Exceeding 0.35 Nm of torque on M2.0 chassis screws will instantly fracture the polycarbonate boss surrounding the brass insert.\",\n \"Always organize fasteners using a magnetized magnetic project grid partitioned into A1-D4 quadrants matching the perimeter layout of the underside.\"\n ],\n steps: [\n { stepLabel: \"1.1\", action: \"Perimeter Loosening\", details: \"Loosen all perimeter fasteners in an outside-in counterclockwise sequence before fully removing any individual screw to equalize internal chassis clip tension.\" },\n { stepLabel: \"1.2\", action: \"Prying Tool Engagement\", details: \"Insert a POM plastic pry blade at the rear vent seam. Never pry from the front audio jack or thin speaker grille openings.\" }\n ]\n },\n {\n id: \"ch-2\",\n chapterNumber: 2,\n title: \"ZIF and eDP Micro-Connector Handling\",\n subtitle: \"Zero-Insertion-Force ribbon latches and high-speed display flex cables\",\n paragraphs: [\n \"Zero-Insertion-Force (ZIF) connectors utilize a pivoting plastic locking lever. Never yank the ribbon cable while the actuator flap is in the locked down position.\",\n \"eDP 40-pin connectors carry both 3.3V logic signaling and high-voltage 19V backlight power (BL_PWR). Pulling the connector at an angle can cause the 19V pin to bridge to an adjacent 3.3V data line, immediately blowing the SOC GPU display controller.\"\n ]\n }\n ]\n },\n\n // 2. HARDWARE MANUAL 2: Motherboard Power Delivery & VRM\n {\n id: \"man-hw-02\",\n category: \"hardware\",\n title: \"Motherboard Power Delivery & DC-In VRM Diagnostic Schematic\",\n code: \"SCHEM-HW-PWR-VRM\",\n fileSize: \"4.8 MB PDF\",\n pages: 28,\n author: \"JCR Micro-soldering Team\",\n lastUpdated: \"2026 Revision 2.0\",\n summary: \"Detailed 19V / 20V USB-C Power Delivery handshake verification, 3.3V/5V always-on buck converter testing, and MOSFET short detection.\",\n keyTopics: [\n \"USB-C Power Delivery CC1/CC2 communication triggers\",\n \"High-side and low-side switching MOSFET gate measurements\",\n \"Thermal camera hot-spot analysis for shorted SMD capacitors\",\n \"RTC battery discharge circuits and CMOS reset sequences\"\n ],\n safetyDirectives: [\n \"Use current-limited DC bench power supply when injecting 1V into shorted rails\",\n \"Do not bypass thermal fuses or PPTC resettable fuses\"\n ],\n recommendedTools: [\"Digital Multimeter (True RMS)\", \"DC Bench Power Supply\", \"Thermal Camera\", \"Hot Air Rework Station\"],\n voltageRails: [\n { rail: \"+19V_DCIN / +20V_USB_PD\", voltage: \"19.5V - 20.0V\", tolerance: \"\u00B15%\", location: \"DC-In Jack / Dual Input MOSFETs\", normalImpedance: \"> 100 k\u03A9\", description: \"Primary unregulated DC supply directly after power brick/USB-C negotiation.\" },\n { rail: \"+3.3V_ALW (Always-On)\", voltage: \"3.32V\", tolerance: \"\u00B12%\", location: \"Coil PL301 near TPS51285\", normalImpedance: \"> 15 k\u03A9\", description: \"Powers Super I/O EC controller, power button circuit, and BIOS flash chip.\" },\n { rail: \"+5.0V_ALW (Always-On)\", voltage: \"5.05V\", tolerance: \"\u00B12%\", location: \"Coil PL302\", normalImpedance: \"> 20 k\u03A9\", description: \"Powers USB 5V VBUS switches and audio codec standby circuits.\" },\n { rail: \"+1.05V_VCCST / VCCSA\", voltage: \"1.05V\", tolerance: \"\u00B12%\", location: \"Coil PL701 near CPU Socket\", normalImpedance: \"15 - 45 \u03A9\", description: \"System Agent and sustained CPU boot sequence rail.\" },\n { rail: \"+VCORE (CPU Core)\", voltage: \"0.75V - 1.35V Dynamic\", tolerance: \"\u00B11.5%\", location: \"Multi-phase inductors surrounding CPU\", normalImpedance: \"1.2 - 8.5 \u03A9 (Low normal)\", description: \"Dynamic VCORE supplied by PWM controller via high-speed DrMOS power stages.\" },\n { rail: \"+V_GFX (Integrated GPU)\", voltage: \"0.80V - 1.15V Dynamic\", tolerance: \"\u00B12%\", location: \"PL901 / PL902\", normalImpedance: \"3.0 - 12.0 \u03A9\", description: \"Supplies integrated display rendering core.\" },\n { rail: \"+1.2V / +1.1V DDR (RAM)\", voltage: \"1.10V (DDR5) / 1.20V (DDR4)\", tolerance: \"\u00B12%\", location: \"Coil PL401 near SO-DIMM\", normalImpedance: \"80 - 250 \u03A9\", description: \"Main memory module supply rail.\" }\n ],\n chapters: [\n {\n id: \"vrm-1\",\n chapterNumber: 1,\n title: \"Power-On Sequence & S0/S3/S5 State Transitions\",\n subtitle: \"Tracing standby rails from DC plug insertion to CPU_PWRGD\",\n paragraphs: [\n \"When DC power is connected, the Embedded Controller (EC) boots first from +3.3V_ALW. It verifies the AC_PRESENT signal and waits for the power button pulse (NBSWON#) to drop low for at least 150ms.\",\n \"Upon button release, EC asserts PM_SLP_S5# and PM_SLP_S3# to enable main VRM converters in sequential order: +1.8V -> DDR -> VCCSA -> VCORE.\"\n ]\n }\n ]\n },\n\n // 3. SOFTWARE MANUAL 1: BSOD & Kernel Minidump Manual\n {\n id: \"man-sw-01\",\n category: \"software\",\n title: \"Windows Kernel Minidump & BSOD Stop-Code Resolution Manual\",\n code: \"MAN-SW-BSOD-WIN11\",\n fileSize: \"2.8 MB PDF\",\n pages: 36,\n author: \"JCR OS Systems Architecture\",\n lastUpdated: \"2026 Revision 3.1\",\n summary: \"Systematic resolution for WHEA_UNCORRECTABLE_ERROR, CRITICAL_PROCESS_DIED, IRQL_NOT_LESS_OR_EQUAL, and DPC_WATCHDOG_VIOLATION.\",\n keyTopics: [\n \"WinDbg Preview symbol path setup and '!analyze -v' stack triage\",\n \"PCIe AER (Advanced Error Reporting) WHEA bus crash diagnosis\",\n \"Kernel memory dump conversion and pagefile corruption fix\",\n \"DISM /RestoreHealth and SFC /scannow CBS.log triage\"\n ],\n safetyDirectives: [\n \"Always backup BitLocker recovery keys prior to BCD and EFI partition repairs\",\n \"Never disable driver signature verification in production environments\"\n ],\n recommendedTools: [\"WinDbg Preview\", \"BluescreenView\", \"Driver Verifier (verifier.exe)\", \"DISM / SFC CLI\"],\n chapters: [\n {\n id: \"bsod-1\",\n chapterNumber: 1,\n title: \"WinDbg Kernel Minidump Triage Protocol\",\n subtitle: \"Configuring Microsoft Symbol Server and deciphering exception codes\",\n paragraphs: [\n \"Copy minidump files from C:\\\\Windows\\\\Minidump to a local scratch folder. Open WinDbg as Administrator and execute '!analyze -v'. Look for FAILURE_BUCKET_ID and MODULE_NAME.\",\n \"If the offending module is ntoskrnl.exe or hal.dll, examine the Arg1 memory pointer: 0x00000000 indicates a null pointer dereference, while 0xFFFFF80... indicates a kernel driver address space crash.\"\n ]\n }\n ]\n },\n\n // 4. SOFTWARE MANUAL 2: UEFI Firmware Recovery Manual\n {\n id: \"man-sw-02\",\n category: \"software\",\n title: \"Blind UEFI/BIOS Crisis Recovery & SPI Flashing Guide\",\n code: \"MAN-SW-UEFI-CRISIS\",\n fileSize: \"3.1 MB PDF\",\n pages: 24,\n author: \"JCR Firmware Security Lab\",\n lastUpdated: \"2026 Revision 2.5\",\n summary: \"Crisis key combinations (Fn+R, Win+B, Fn+Esc), FAT32 USB crisis file naming conventions, and external CH341A 3.3V/1.8V SPI clip programming.\",\n keyTopics: [\n \"Dell / HP / Lenovo blind USB flash rescue trigger combinations\",\n \"Extracting HDR/CAP/ROM images from OEM executable installers\",\n \"CH341A SPI hardware flashing with NeoProgrammer / Flashrom\",\n \"Clearing Intel ME (Management Engine) region for clean PCH initialization\"\n ],\n safetyDirectives: [\n \"Ensure CH341A programmer jumper is set to 3.3V or 1.8V (never supply 5V to SPI ROM)\",\n \"Always take 2 identical SPI dumps and MD5 hash verify before writing\"\n ],\n recommendedTools: [\"CH341A SPI Programmer\", \"SOIC8 Test Clip\", \"NeoProgrammer 2.2\", \"FAT32 8GB USB Flash Drive\"],\n chapters: [\n {\n id: \"uefi-1\",\n chapterNumber: 1,\n title: \"OEM Blind Crisis Flash Triggers\",\n subtitle: \"Key combinations to force boot-block crisis mode\",\n paragraphs: [\n \"HP: Power OFF -> Hold Win + B (or Win + V) -> Hold Power for 3 seconds -> Release Power but keep Win + B held for 15 seconds.\",\n \"Dell: Unplug AC -> Hold Ctrl + Esc -> Plug in AC -> Release keys when power LED blinks 3 amber 3 white.\",\n \"Lenovo ThinkPad: Unplug AC and Battery -> Hold Fn + R -> Plug in AC -> Press Power once.\"\n ]\n }\n ]\n },\n\n // 5. CLEANING MANUAL 1: Cleanroom Laptop Decontamination\n {\n id: \"man-cl-01\",\n category: \"cleaning\",\n title: \"Cleanroom Laptop Decontamination & Ultrasonic Board Cleaning Protocol\",\n code: \"SOP-CL-CLEAN-2026\",\n fileSize: \"2.1 MB PDF\",\n pages: 18,\n author: \"JCR Environmental & Cleanroom Ops\",\n lastUpdated: \"2026 Revision 1.9\",\n summary: \"Isolating liquid ingress corrosion, ultrasonic bath temperature / chemistry parameters, and 99.9% anhydrous isopropyl alcohol dehydration.\",\n keyTopics: [\n \"Electrochemical migration (dendrite growth) under BGA balls\",\n \"Ultrasonic tank frequency (40kHz vs 80kHz) and Branson EC chemistry\",\n \"Baking board in convection oven at 65\u00B0C for 4 hours post-wash\",\n \"Replacing corroded 0402 SMD passives and tinning oxidized pads\"\n ],\n safetyDirectives: [\n \"Never immerse microphones, speakers, cameras, or touchpad click mechanisms in ultrasonic bath\",\n \"Operate isopropyl alcohol baths in a well-ventilated fume extraction enclosure\"\n ],\n recommendedTools: [\"Digital Heated Ultrasonic Cleaner\", \"99.9% Isopropyl Alcohol\", \"Anti-static Soft ESD Brushes\", \"PCB Preheater / Drying Oven\"],\n chapters: [\n {\n id: \"clean-1\",\n chapterNumber: 1,\n title: \"Liquid Damage Triage & Ultrasonic Cycle\",\n subtitle: \"Step-by-step chemical neutralization of sugar, salt, and acidic corrosion\",\n paragraphs: [\n \"Liquid spills cause galvanic corrosion when power is applied. First, photograph all component markings.\",\n \"Submerge stripped motherboard in ultrasonic bath containing 90% distilled water + 10% Branson EC cleaner at 50\u00B0C for 8 minutes. Rinse with pure distilled water, then flush with 99.9% IPA to absorb moisture, and bake at 65\u00B0C for 4 hours.\"\n ]\n }\n ]\n },\n\n // 6. CLEANING MANUAL 2: Thermal Interface & Vapor Chamber\n {\n id: \"man-cl-02\",\n category: \"cleaning\",\n title: \"Thermal Interface Material & Phase-Change (PTM7950) Application Standard\",\n code: \"STD-CL-THERMAL-2026\",\n fileSize: \"2.6 MB PDF\",\n pages: 22,\n author: \"JCR Thermal Engineering Lab\",\n lastUpdated: \"2026 Revision 3.0\",\n summary: \"Surface flatness measurement, Honeywell PTM7950 phase-change pad application, thermal putty (Upsiren U6 Pro) gap fill, and heatsink mounting tension.\",\n keyTopics: [\n \"Comparing standard paste vs Liquid Metal vs PTM7950 phase-change pad\",\n \"Preventing pump-out effect on direct-die bare silicon laptop CPUs\",\n \"Thermal putty viscosity and compression for VRAM / VRM chokes\",\n \"Delta T thermal dissipation benchmarks under Prime95 + FurMark\"\n ],\n safetyDirectives: [\n \"If using Liquid Metal (Galinstan), apply Conformal Coating (MG Chemicals 422C) and high-density foam barrier around SMD capacitors\",\n \"Never scrape bare copper coldplates with steel razor blades\"\n ],\n recommendedTools: [\"Honeywell PTM7950 (0.25mm)\", \"Upsiren U6 Pro Thermal Putty\", \"ArctiClean 1 & 2 Emulsifier\", \"Torque Driver (0.25 Nm)\"],\n chapters: [\n {\n id: \"therm-1\",\n chapterNumber: 1,\n title: \"PTM7950 Application Protocol\",\n subtitle: \"Eliminating pump-out effect on direct-die gaming laptops\",\n paragraphs: [\n \"Honeywell PTM7950 is solid below 45\u00B0C and transitions into a viscous gel at operating temperatures, filling micro-voids without pumping out over thermal cycles.\",\n \"Chill the PTM7950 sheet in a refrigerator for 5 minutes before cutting to silicon die dimensions. Peel back one protective plastic film, apply to silicon, rub lightly with finger, then peel top film before mounting heatsink.\"\n ]\n }\n ]\n },\n\n // 7. UPGRADES MANUAL 1: NVMe & PCIe Gen 5 Storage Retrofit\n {\n id: \"man-up-01\",\n category: \"upgrades\",\n title: \"High-Performance NVMe PCIe 4.0/5.0 SSD Retrofitting & Migration Guide\",\n code: \"GDE-UP-NVME-2026\",\n fileSize: \"3.7 MB PDF\",\n pages: 30,\n author: \"JCR Storage Solutions Group\",\n lastUpdated: \"2026 Revision 2.8\",\n summary: \"Single-sided vs double-sided 2280 compatibility, thermal pad thickness matching, cloning boot drives with Macrium / Clonezilla, and 4K sector alignment.\",\n keyTopics: [\n \"Checking M.2 slot lane bifurcation (x2 vs x4 PCIe lanes)\",\n \"Bare-metal cloning sector-by-sector vs intelligent file copy\",\n \"Fixing INACCESSIBLE_BOOT_DEVICE post-NVMe migration\",\n \"Enabling TRIM and Host Memory Buffer (HMB) in Windows & Linux\"\n ],\n safetyDirectives: [\n \"Ensure laptop battery is disconnected prior to inserting NVMe into M.2 key slot\",\n \"Do not compress thick 1.5mm thermal pads onto thin 0.5mm clearance laptops\"\n ],\n recommendedTools: [\"Macrium Reflect / Clonezilla Bootable USB\", \"M.2 NVMe USB-C Enclosure\", \"Kaisi Thermal Pad Assortment (0.5mm - 1.5mm)\"],\n chapters: [\n {\n id: \"nvme-1\",\n chapterNumber: 1,\n title: \"Drive Migration & Sector Realignment\",\n subtitle: \"Zero-downtime OS migration without re-installing Windows\",\n paragraphs: [\n \"Connect replacement NVMe SSD via USB 3.2 Gen 2 enclosure. Launch Macrium Reflect, select source OS drive, and click 'Clone this disk'.\",\n \"Ensure partitions are proportionally resized to occupy full replacement capacity. Ensure EFI System Partition (ESP) remains at 100-260MB and 4K sector alignment is checked.\"\n ]\n }\n ]\n },\n\n // 8. UPGRADES MANUAL 2: High-Density DDR5 & SO-DIMM Architecture\n {\n id: \"man-up-02\",\n category: \"upgrades\",\n title: \"High-Density DDR5/LPDDR5 Memory Architecture & Retrofit Guide\",\n code: \"GDE-UP-RAM-DDR5\",\n fileSize: \"2.4 MB PDF\",\n pages: 20,\n author: \"JCR Memory Testing Laboratory\",\n lastUpdated: \"2026 Revision 1.5\",\n summary: \"1Rx8 vs 1Rx16 sub-channel ranks, on-die ECC functionality, SPD profile flashing, and memory training POST delays on Intel 13th/14th Gen & AMD 7000/8000.\",\n keyTopics: [\n \"Understanding DDR5 dual 32-bit subchannels per channel\",\n \"Recognizing normal 2-3 minute first-boot Memory Training behavior\",\n \"SO-DIMM latch tension and copper EMI shield re-installation\",\n \"MemTest86 4-pass zero-error verification standard\"\n ],\n safetyDirectives: [\n \"Allow laptop to sit with power disconnected for 60 seconds to drain PMIC capacitors on DDR5 modules\",\n \"Never touch gold fingers directly to avoid skin oil oxidation\"\n ],\n recommendedTools: [\"MemTest86 Pro USB\", \"Plastic Pry Pick\", \"Kapton Tape\", \"Anti-Static Wrist Strap\"],\n chapters: [\n {\n id: \"ram-1\",\n chapterNumber: 1,\n title: \"DDR5 Memory Training & First Boot Protocol\",\n subtitle: \"Why the screen stays black for 120 seconds after installing new RAM\",\n paragraphs: [\n \"DDR5 features an onboard Power Management IC (PMIC) and executes internal signal calibration (Memory Training) on first power-on with new DIMMs.\",\n \"The power LED may pulse for up to 180 seconds while the BIOS tests sub-timings. Do NOT power cycle the machine during this phase, or you risk corrupting the BIOS NVRAM.\"\n ]\n }\n ]\n }\n];\n\nexport function getManualById(id: string): TechnicalManual | undefined {\n return TECHNICAL_MANUALS.find(m => m.id === id);\n}\n\nexport function getManualsByCategory(category: string): TechnicalManual[] {\n return TECHNICAL_MANUALS.filter(m => m.category === category);\n}\n", "import type { RequestHandler } from \"express\";\nimport { storage } from \"../storage\";\n\nexport const requireAdmin: RequestHandler = async (req, res, next) => {\n const user = req.user as any;\n\n // Firebase auth attaches user object with id to request\n if (!user || !user.id) {\n return res.status(401).json({ message: \"Unauthorized: Admin access requires authentication\" });\n }\n\n try {\n const dbUser = await storage.getUser(user.id);\n \n if (!dbUser || dbUser.role !== \"admin\") {\n return res.status(403).json({ message: \"Admin access required\" });\n }\n\n // Attach user info to request for convenience\n req.adminUser = dbUser;\n next();\n } catch (error) {\n console.error(\"Error checking admin status:\", error);\n res.status(500).json({ message: \"Failed to verify admin status\" });\n }\n};\n\n// Type declaration for TypeScript\ndeclare global {\n namespace Express {\n interface Request {\n adminUser?: {\n id: string;\n email: string | null;\n firstName: string | null;\n lastName: string | null;\n profileImageUrl: string | null;\n role: string | null;\n createdAt: Date | null;\n updatedAt: Date | null;\n };\n }\n }\n}\n", "import passport from \"passport\";\nimport { Strategy as LocalStrategy } from \"passport-local\";\nimport { Express, RequestHandler } from \"express\";\nimport session from \"express-session\";\nimport bcrypt from \"bcrypt\";\nimport { storage } from \"./storage\";\nimport { User as SelectUser } from \"@shared/schema\";\n\ndeclare global {\n namespace Express {\n interface User extends SelectUser {}\n }\n}\n\nexport const isAuthenticated: RequestHandler = (req, res, next) => {\n if (req.isAuthenticated()) return next();\n res.status(401).json({ message: \"Unauthorized\" });\n};\n\nexport function setupAuth(app: Express) {\n app.set(\"trust proxy\", 1);\n\n const sessionSettings: session.SessionOptions = {\n secret: process.env.SESSION_SECRET || \"jcrguru-secret-key-2025\",\n resave: false,\n saveUninitialized: false,\n cookie: {\n secure: \"auto\",\n sameSite: \"lax\",\n httpOnly: true,\n maxAge: 30 * 24 * 60 * 60 * 1000, // 30 days\n },\n };\n\n app.use(session(sessionSettings));\n app.use(passport.initialize());\n app.use(passport.session());\n\n passport.use(\n new LocalStrategy({ usernameField: \"email\" }, async (rawEmail, password, done) => {\n try {\n const email = (rawEmail || \"\").trim().toLowerCase();\n if (!email || !password) {\n return done(null, false, { message: \"Email and password are required.\" });\n }\n\n const user = await storage.getUserByEmail(email);\n if (!user) {\n return done(null, false, { message: \"No account found for this email. Please register or use Quick Demo Sign-In.\" });\n }\n\n const isMatch = await bcrypt.compare(password, user.password);\n if (!isMatch) {\n return done(null, false, { message: \"Incorrect password. Please verify your credentials.\" });\n }\n\n return done(null, user);\n } catch (err) {\n return done(err);\n }\n }),\n );\n\n passport.serializeUser((user, done) => {\n done(null, user.id);\n });\n\n passport.deserializeUser(async (id: string, done) => {\n try {\n const user = await storage.getUser(id);\n done(null, user || null);\n } catch (err) {\n done(err);\n }\n });\n\n app.post(\"/api/register\", async (req, res, next) => {\n try {\n const { email: rawEmail, password, firstName, lastName, role } = req.body;\n const email = (rawEmail || \"\").trim().toLowerCase();\n\n if (!email || !password) {\n return res.status(400).json({ message: \"Email and password are required.\" });\n }\n\n const existingUser = await storage.getUserByEmail(email);\n if (existingUser) {\n return res.status(400).json({ message: \"An account with this email already exists. Please sign in.\" });\n }\n\n const hashedPassword = await bcrypt.hash(password, 10);\n const user = await storage.createUser({\n email,\n password: hashedPassword,\n firstName: firstName?.trim() || \"Technician\",\n lastName: lastName?.trim() || \"\",\n role: role || \"user\",\n });\n\n req.login(user, (err) => {\n if (err) return next(err);\n res.status(201).json(user);\n });\n } catch (err) {\n next(err);\n }\n });\n\n app.post(\"/api/login\", (req, res, next) => {\n passport.authenticate(\"local\", (err: any, user: Express.User | false, info?: { message?: string }) => {\n if (err) return next(err);\n if (!user) {\n return res.status(401).json({\n message: info?.message || \"Invalid email or password. Please verify your credentials.\"\n });\n }\n req.login(user, (loginErr) => {\n if (loginErr) return next(loginErr);\n return res.json(user);\n });\n })(req, res, next);\n });\n\n // Quick Demo / Technician auto-login endpoint\n app.post(\"/api/quick-login\", async (req, res, next) => {\n try {\n const { email: rawEmail } = req.body;\n const email = (rawEmail || \"Jhustle44@gmail.com\").trim().toLowerCase();\n let user = await storage.getUserByEmail(email);\n \n if (!user) {\n // Auto-provision if not present\n const defaultHash = await bcrypt.hash(\"password123\", 10);\n user = await storage.createUser({\n email,\n password: defaultHash,\n firstName: email.includes(\"jhustle\") ? \"Master\" : \"Technician\",\n lastName: \"Pro\",\n role: email.includes(\"admin\") || email.includes(\"jhustle\") ? \"admin\" : \"technician\",\n });\n }\n\n req.login(user, (err) => {\n if (err) return next(err);\n res.json(user);\n });\n } catch (err) {\n next(err);\n }\n });\n\n app.post(\"/api/logout\", (req, res, next) => {\n req.logout((err) => {\n if (err) return next(err);\n res.sendStatus(200);\n });\n });\n\n app.get(\"/api/user\", (req, res) => {\n if (!req.isAuthenticated() || !req.user) {\n return res.status(401).json({ message: \"Not authenticated\" });\n }\n res.json(req.user);\n });\n}\n", "import multer from \"multer\";\nimport path from \"path\";\nimport fs from \"fs\";\n\n// Ensure uploads directory exists\nconst uploadDir = \"uploads/profiles\";\nif (!fs.existsSync(uploadDir)) {\n fs.mkdirSync(uploadDir, { recursive: true });\n}\n\nconst storage = multer.diskStorage({\n destination: function (_req, _file, cb) {\n cb(null, uploadDir);\n },\n filename: function (_req, file, cb) {\n const uniqueSuffix = Date.now() + \"-\" + Math.round(Math.random() * 1e9);\n cb(null, uniqueSuffix + path.extname(file.originalname));\n },\n});\n\nexport const upload = multer({\n storage: storage,\n limits: {\n fileSize: 5 * 1024 * 1024, // 5MB limit\n },\n fileFilter: (_req, file, cb) => {\n if (file.mimetype.startsWith(\"image/\")) {\n cb(null, true);\n } else {\n cb(new Error(\"Only image files are allowed!\"));\n }\n },\n});\n", "import { GoogleGenAI, Type } from \"@google/genai\";\nimport { TECHNICAL_MANUALS } from \"../shared/technical-manuals\";\nimport { storage } from \"./storage\";\n\nlet genAIClient: GoogleGenAI | null = null;\n\nfunction getGenAI(): GoogleGenAI | null {\n if (!process.env.GEMINI_API_KEY) {\n return null;\n }\n if (!genAIClient) {\n genAIClient = new GoogleGenAI({\n apiKey: process.env.GEMINI_API_KEY,\n httpOptions: {\n headers: {\n \"User-Agent\": \"aistudio-build\",\n },\n },\n });\n }\n return genAIClient;\n}\n\n// Resilient helper to execute Gemini API calls with graceful multi-model fallback and seamless offline fallback\nasync function callGeminiWithFallback<T>(\n fn: (model: string) => Promise<T>\n): Promise<T | null> {\n // Try lightweight fast flash-lite first (low latency, high availability under load), then standard flash\n const models = [\"gemini-3.1-flash-lite\", \"gemini-3.7-flash\", \"gemini-flash-latest\"];\n\n for (const model of models) {\n try {\n const res = await fn(model);\n if (res) return res;\n } catch (err: any) {\n // Quietly fall through on 503/429/high demand or network blips\n continue;\n }\n }\n\n return null;\n}\n\nexport interface DiagnosticsRequest {\n symptoms: string;\n deviceType?: \"laptop\" | \"desktop\" | \"all\" | string;\n brand?: string;\n model?: string;\n os?: string;\n category?: \"hardware\" | \"software\" | \"cleaning\" | \"upgrades\" | \"all\" | string;\n errorCode?: string;\n}\n\nexport interface DiagnosticResult {\n summary: string;\n confidence: \"High\" | \"Medium\" | \"Low\";\n recommendedCategory: \"hardware\" | \"software\" | \"cleaning\" | \"upgrades\";\n probableCauses: {\n cause: string;\n likelihood: \"High\" | \"Medium\" | \"Low\";\n explanation: string;\n }[];\n stepByStepPlan: {\n stepNumber: number;\n title: string;\n action: string;\n expectedOutcome: string;\n }[];\n toolsAndSoftware: string[];\n safetyWarnings: string[];\n preventativeTips: string[];\n isOutOfScope?: boolean;\n}\n\nexport interface ChatMessage {\n role: \"user\" | \"assistant\" | \"system\";\n content: string;\n}\n\nexport interface TechnicalChatRequest {\n messages: ChatMessage[];\n deviceContext?: string;\n categoryContext?: string;\n}\n\nexport interface TechnicalChatResponse {\n message: string;\n suggestedGuides?: {\n id: string;\n title: string;\n category: string;\n difficulty: string;\n estimatedTime: string;\n }[];\n suggestedManuals?: {\n id: string;\n title: string;\n code: string;\n category: string;\n }[];\n voltageRailsMentioned?: {\n rail: string;\n voltage: string;\n location: string;\n description: string;\n }[];\n quickActions?: string[];\n}\n\nconst SYSTEM_INSTRUCTION = `You are JCR Guide Pro's expert Hardware & Computer Diagnostic Specialist.\nYour SOLE purpose is to diagnose, troubleshoot, and provide step-by-step resolution paths for computer hardware, laptops, desktops, operating systems (Windows, macOS, Linux), peripherals, thermals, BIOS/UEFI, and electronic repairs.\n\nSTRICT SCOPE DIRECTIVE:\nYou ONLY assist with device diagnostics, computer repair, hardware upgrades, OS recovery, driver/firmware fixes, component testing, and cleaning.\nIf a user prompt is unrelated to computer/laptop repair or hardware maintenance (such as general conversational queries, creative writing, cooking, gaming lore, non-PC topics), set \"isOutOfScope\": true, give a polite 1-sentence refusal in \"summary\", and leave the other lists empty.\n\nFor valid computer repair queries, provide a highly technical, precise, and practical diagnostic analysis adhering to industry standard bench repair practices.`;\n\nexport async function runAIDiagnostics(reqData: DiagnosticsRequest): Promise<DiagnosticResult> {\n const ai = getGenAI();\n\n if (!ai) {\n return generateFallbackDiagnostics(reqData);\n }\n\n const prompt = `Diagnose the following computer/laptop issue:\nDevice Type: ${reqData.deviceType || \"Laptop/Desktop\"}\nBrand/Model: ${reqData.brand || \"Generic\"} ${reqData.model || \"\"}\nOperating System: ${reqData.os || \"Any\"}\nTarget Category: ${reqData.category || \"Any\"}\nReported Symptoms / Error Code: ${reqData.symptoms} ${reqData.errorCode ? `(Error code: ${reqData.errorCode})` : \"\"}`;\n\n const result = await callGeminiWithFallback(async (modelName) => {\n const response = await ai.models.generateContent({\n model: modelName,\n contents: prompt,\n config: {\n systemInstruction: SYSTEM_INSTRUCTION,\n responseMimeType: \"application/json\",\n responseSchema: {\n type: Type.OBJECT,\n properties: {\n isOutOfScope: { type: Type.BOOLEAN, description: \"True if the question is not about computer or electronics repair\" },\n summary: { type: Type.STRING, description: \"High-level summary of the diagnostic finding\" },\n confidence: { type: Type.STRING, enum: [\"High\", \"Medium\", \"Low\"], description: \"Diagnostic confidence\" },\n recommendedCategory: { type: Type.STRING, enum: [\"hardware\", \"software\", \"cleaning\", \"upgrades\"], description: \"Primary repair category\" },\n probableCauses: {\n type: Type.ARRAY,\n items: {\n type: Type.OBJECT,\n properties: {\n cause: { type: Type.STRING },\n likelihood: { type: Type.STRING, enum: [\"High\", \"Medium\", \"Low\"] },\n explanation: { type: Type.STRING }\n },\n required: [\"cause\", \"likelihood\", \"explanation\"]\n }\n },\n stepByStepPlan: {\n type: Type.ARRAY,\n items: {\n type: Type.OBJECT,\n properties: {\n stepNumber: { type: Type.INTEGER },\n title: { type: Type.STRING },\n action: { type: Type.STRING },\n expectedOutcome: { type: Type.STRING }\n },\n required: [\"stepNumber\", \"title\", \"action\", \"expectedOutcome\"]\n }\n },\n toolsAndSoftware: {\n type: Type.ARRAY,\n items: { type: Type.STRING },\n description: \"Diagnostic tools or software like HWiNFO64, MemTest86, DDU, Multimeter, ESD strap\"\n },\n safetyWarnings: {\n type: Type.ARRAY,\n items: { type: Type.STRING },\n description: \"Safety guidelines regarding power isolation, battery handling, and ESD\"\n },\n preventativeTips: {\n type: Type.ARRAY,\n items: { type: Type.STRING }\n }\n },\n required: [\n \"summary\",\n \"confidence\",\n \"recommendedCategory\",\n \"probableCauses\",\n \"stepByStepPlan\",\n \"toolsAndSoftware\",\n \"safetyWarnings\",\n \"preventativeTips\"\n ]\n }\n }\n });\n\n const parsed = JSON.parse(response.text || \"{}\");\n return parsed as DiagnosticResult;\n });\n\n if (result) {\n return result;\n }\n\n return generateFallbackDiagnostics(reqData);\n}\n\nfunction generateFallbackDiagnostics(reqData: DiagnosticsRequest): DiagnosticResult {\n const sym = (reqData.symptoms || \"\").toLowerCase();\n const err = (reqData.errorCode || \"\").toLowerCase();\n\n let category: \"hardware\" | \"software\" | \"cleaning\" | \"upgrades\" = \"hardware\";\n let summary = `Diagnostic assessment for ${reqData.brand || \"Device\"} ${reqData.model || \"\"}`;\n let confidence: \"High\" | \"Medium\" | \"Low\" = \"High\";\n\n const probableCauses: DiagnosticResult[\"probableCauses\"] = [];\n const stepByStepPlan: DiagnosticResult[\"stepByStepPlan\"] = [];\n const toolsAndSoftware: string[] = [];\n const safetyWarnings: string[] = [\n \"Always disconnect AC adapter and main battery before touching internal motherboard components.\",\n \"Wear an ESD anti-static wrist strap or ground yourself against bare unpainted metal.\",\n \"Never compress or puncture swollen lithium-ion battery pouches.\"\n ];\n const preventativeTips: string[] = [\n \"Keep device firmware/BIOS updated from the official vendor support portal.\",\n \"Perform annual dust cleaning and thermal paste refresh to prevent thermal degradation.\"\n ];\n\n if (sym.includes(\"blue screen\") || sym.includes(\"bsod\") || sym.includes(\"freeze\") || sym.includes(\"crash\") || err.includes(\"dump\")) {\n category = \"software\";\n summary = \"Kernel Stop Code / System Instability detected. Likely caused by conflicting graphics/chipset drivers or RAM memory bit flips.\";\n probableCauses.push(\n { cause: \"Outdated or Corrupted Graphics/Chipset Drivers\", likelihood: \"High\", explanation: \"Conflicting kernel-mode drivers crashing Windows kernel (ntoskrnl.exe).\" },\n { cause: \"Failing RAM Memory Module\", likelihood: \"Medium\", explanation: \"Defective DDR4/DDR5 memory cell failing read/write validation passes.\" },\n { cause: \"System File Corruption (SFC/DISM)\", likelihood: \"Medium\", explanation: \"Corrupted system DLLs following incomplete Windows updates.\" }\n );\n stepByStepPlan.push(\n { stepNumber: 1, title: \"Boot Safe Mode & Run DDU\", action: \"Boot into Safe Mode, run Display Driver Uninstaller (DDU) to wipe old GPU drivers, then install latest WHQL driver.\", expectedOutcome: \"Clean driver installation without legacy hooks.\" },\n { stepNumber: 2, title: \"Run DISM & SFC System File Repair\", action: \"Execute 'DISM /Online /Cleanup-Image /RestoreHealth' followed by 'sfc /scannow' in Administrator Terminal.\", expectedOutcome: \"System integrity verified and corrupted DLLs replaced.\" },\n { stepNumber: 3, title: \"Execute MemTest86 4-Pass Scan\", action: \"Create bootable USB with PassMark MemTest86 and test RAM for 4 full passes.\", expectedOutcome: \"Confirm memory subsystem has zero hardware faults.\" }\n );\n toolsAndSoftware.push(\"Display Driver Uninstaller (DDU)\", \"PassMark MemTest86\", \"WinDbg Preview\", \"CrystalDiskInfo\");\n } else if (sym.includes(\"heat\") || sym.includes(\"fan\") || sym.includes(\"temp\") || sym.includes(\"loud\") || sym.includes(\"throttle\")) {\n category = \"cleaning\";\n summary = \"Thermal Throttling & Airflow Restriction detected. CPU/GPU package temperatures exceeding safe operating TJMax thresholds.\";\n probableCauses.push(\n { cause: \"Dried Thermal Interface Material (TIM)\", likelihood: \"High\", explanation: \"Factory silicone paste pumped out or baked, creating micro-voids between die and coldplate.\" },\n { cause: \"Clogged Copper Heatsink Radiator Fins\", likelihood: \"High\", explanation: \"Felt-like dust wall trapped between blower fan outlet and copper exhaust fins.\" },\n { cause: \"Bearing Wear on Centrifugal Fan\", likelihood: \"Medium\", explanation: \"Imbalanced impeller blades or dry sleeve bearings causing RPM drop.\" }\n );\n stepByStepPlan.push(\n { stepNumber: 1, title: \"Disassemble Bottom Chassis & Exhaust\", action: \"Remove bottom cover, disconnect battery, and remove blower fans and heatpipe assembly.\", expectedOutcome: \"Exhaust radiators and die exposed for inspection.\" },\n { stepNumber: 2, title: \"Clean Fins & Strip Old Paste\", action: \"Use 99% Isopropyl Alcohol and ESD brush to clear radiator fin walls and remove dried paste from copper coldplates.\", expectedOutcome: \"Mirror-clean bare silicon die.\" },\n { stepNumber: 3, title: \"Apply Honeywell PTM7950 & Re-torque\", action: \"Cut and apply 0.25mm PTM7950 phase change pad. Torque heatsink screws diagonally (1\u21922\u21923\u21924) to 0.25 Nm.\", expectedOutcome: \"Optimal core-to-heatsink heat transfer under sustained load.\" }\n );\n toolsAndSoftware.push(\"Honeywell PTM7950 / Arctic MX-6\", \"99% Isopropyl Alcohol\", \"ESD Bristle Brush\", \"HWiNFO64\");\n } else if (sym.includes(\"power\") || sym.includes(\"dead\") || sym.includes(\"charge\") || sym.includes(\"turn on\") || sym.includes(\"black screen\")) {\n category = \"hardware\";\n summary = \"Power Delivery & Initial POST failure. The board is failing to complete the power sequence or standby rail handoff.\";\n probableCauses.push(\n { cause: \"DC-In Stage or Primary Input MOSFET Short\", likelihood: \"High\", explanation: \"High-side DC-in MOSFET (PQ101) shorted to ground, triggering power supply over-current protection.\" },\n { cause: \"Standby 3.3V/5V Regulator Circuit Fault\", likelihood: \"Medium\", explanation: \"Buck regulator coil (PL301/PL302) damaged or missing enabling signal from Super I/O EC.\" },\n { cause: \"Stuck Embedded Controller (EC) Register Lock\", likelihood: \"Medium\", explanation: \"Transient electrostatic discharge locking the EC power sequencer state machine.\" }\n );\n stepByStepPlan.push(\n { stepNumber: 1, title: \"15-Second Hard RTC/EC Drain\", action: \"Disconnect charger and battery. Hold power button firmly for 15 seconds to force residual discharge.\", expectedOutcome: \"Clear stuck EC register states.\" },\n { stepNumber: 2, title: \"Measure Primary DC Input (+19V/+20V)\", action: \"Connect power supply with multimeter. Measure voltage on the drain and source of input MOSFETs.\", expectedOutcome: \"Verify +19V or +20V USB-PD reaches the main power rail.\" },\n { stepNumber: 3, title: \"Check Standby Always-On Coils\", action: \"Probe coils PL301 (+3.3V_ALW) and PL302 (+5.0V_ALW) with multimeter in DC voltage mode.\", expectedOutcome: \"Confirm both 3.3V and 5.0V standby rails are stable.\" }\n );\n toolsAndSoftware.push(\"Digital Multimeter (Fluke/Aneng)\", \"DC Power Bench Supply\", \"Torx T5 / Phillips #00 Screwdrivers\", \"Safety Grounding Strap\");\n } else {\n category = \"hardware\";\n summary = `Hardware diagnostic assessment for reported symptom: \"${reqData.symptoms}\". Follow structured electrical isolation protocol.`;\n probableCauses.push(\n { cause: \"Loose Internal Cable or Connector Latch\", likelihood: \"Medium\", explanation: \"Vibration or impact dislodging eDP display, battery, or ribbon connector.\" },\n { cause: \"Power Rail Fault or Drained CMOS RTC\", likelihood: \"Medium\", explanation: \"RTC clock lockup preventing board POST cycle.\" },\n { cause: \"Component Degradation\", likelihood: \"Low\", explanation: \"Capacitor leakage or solder fatigue on mainboard power stages.\" }\n );\n stepByStepPlan.push(\n { stepNumber: 1, title: \"Hard Power Cycle & CMOS Drain\", action: \"Disconnect power cord and battery, hold power button for 30 seconds, then reconnect.\", expectedOutcome: \"Clear transient RTC register locks.\" },\n { stepNumber: 2, title: \"Minimal POST Test\", action: \"Disconnect non-essential peripherals, Wi-Fi card, and extra storage drives. Test boot with single RAM stick.\", expectedOutcome: \"Identify if peripheral short is halting POST.\" },\n { stepNumber: 3, title: \"Inspect Connectors Under Light\", action: \"Check motherboard sockets for bent pins, burn marks, or cracked solder joints.\", expectedOutcome: \"Confirm physical board integrity.\" }\n );\n toolsAndSoftware.push(\"Precision Toolkit\", \"Digital Multimeter\", \"Anti-Static Mat & Wrist Strap\", \"Magnification Loupe\");\n }\n\n return {\n summary,\n confidence,\n recommendedCategory: category,\n probableCauses,\n stepByStepPlan,\n toolsAndSoftware,\n safetyWarnings,\n preventativeTips,\n isOutOfScope: false\n };\n}\n\n/**\n * Conversational Technical AI with direct grounding in all 624 guides and 8 manuals\n */\nexport async function runTechnicalAIChat(reqData: TechnicalChatRequest): Promise<TechnicalChatResponse> {\n const allGuides = await storage.getRepairGuides();\n const manuals = TECHNICAL_MANUALS;\n \n // Extract latest user message\n const userMessages = reqData.messages.filter(m => m.role === \"user\");\n const latestUserMsg = userMessages.length > 0 ? userMessages[userMessages.length - 1].content : \"\";\n const queryLower = latestUserMsg.toLowerCase();\n \n // Match relevant guides from the 624 database\n const matchingGuides = allGuides.filter(g => {\n const titleMatch = g.title.toLowerCase().includes(queryLower);\n const descMatch = g.description.toLowerCase().includes(queryLower);\n const words = queryLower.split(/\\s+/).filter(w => w.length > 2);\n const multiMatch = words.length > 0 && words.some(w => g.title.toLowerCase().includes(w));\n return titleMatch || descMatch || multiMatch;\n }).slice(0, 5);\n\n // Match relevant manuals\n const matchingManuals = manuals.filter(m => {\n return m.title.toLowerCase().includes(queryLower) ||\n m.summary.toLowerCase().includes(queryLower) ||\n m.keyTopics.some(k => k.toLowerCase().includes(queryLower)) ||\n (reqData.categoryContext && m.category === reqData.categoryContext);\n }).slice(0, 3);\n\n // Voltage rails matching\n const matchingRails: { rail: string; voltage: string; location: string; description: string }[] = [];\n manuals.forEach(m => {\n if (m.voltageRails) {\n m.voltageRails.forEach(r => {\n if (queryLower.includes(\"rail\") || queryLower.includes(\"volt\") || queryLower.includes(\"power\") || \n queryLower.includes(\"short\") || queryLower.includes(\"multimeter\") || queryLower.includes(\"pl301\") ||\n queryLower.includes(r.rail.toLowerCase().replace(/[^a-z0-9]/g, '')) ||\n queryLower.includes(\"dead\") || queryLower.includes(\"turn on\") || queryLower.includes(\"boot\")) {\n if (!matchingRails.some(mr => mr.rail === r.rail)) {\n matchingRails.push({\n rail: r.rail,\n voltage: r.voltage,\n location: r.location,\n description: r.description\n });\n }\n }\n });\n }\n });\n\n const ai = getGenAI();\n if (ai) {\n // Build grounding knowledge summary\n const contextGuides = matchingGuides.map(g => `- [Guide ID: ${g.id}] \"${g.title}\" (${g.category}, ${g.difficulty}, ${g.estimatedTime}): ${g.description}`).join(\"\\n\");\n const contextManuals = matchingManuals.map(m => `- [Manual ID: ${m.id}] \"${m.title}\" (${m.code}): ${m.summary}`).join(\"\\n\");\n const contextRails = matchingRails.slice(0, 4).map(r => `- ${r.rail}: ${r.voltage} (${r.location}) - ${r.description}`).join(\"\\n\");\n\n const systemPrompt = `You are JCR Guide Pro's Technical AI, the lead master computer hardware technician, electronics diagnostician, and board-level repair assistant.\nYou have direct access to JCR Guide Pro's full database of 624 verified multi-brand repair guides (Apple, Dell, Lenovo, HP, ASUS, Razer, Framework, MSI, Custom PCs) and 8 comprehensive technical manuals.\n\nYOUR CAPABILITIES & PROTOCOLS:\n1. Provide precise, actionable technical instructions with exact fastener torque specs (e.g. 0.20 Nm M2.0), screwdriver bit types (Torx T5, Phillips #00), and test procedures.\n2. If the user asks about board-level repair, no-power faults, or charging issues, reference exact voltage rails (e.g. +19V_DCIN, +3.3V_ALW on Coil PL301, +5V_ALW, VCCST, VCORE) and multimeter testing sequences.\n3. If the user has a software/BSOD issue, provide exact commands (DDU in Safe Mode, DISM, SFC, WinDbg minidump triage, MemTest86).\n4. For thermal problems, detail phase-change PTM7950 application and fan fin cleaning.\n5. Provide relevant guide references using markdown bolding or brackets like [Guide: \"Device Model: Procedure Name\"].\n6. Keep your tone professional, authoritative, helpful, and concise.\n\nMATCHING KNOWLEDGE BASE FOR THIS QUERY:\nRelevant Guides in Database:\n${contextGuides || \"Database contains 624 multi-brand hardware guides for Apple, Dell, Lenovo, HP, ASUS, Razer, Framework, and Custom PCs.\"}\n\nRelevant Technical Manuals:\n${contextManuals || \"Technical manuals available: Universal Laptop Teardown, VRM Power Delivery Schematics, BSOD Minidump Manual, UEFI Crisis Flash, Ultrasonic Decontamination, PTM7950 Thermal Standards, NVMe Retrofits, DDR5 Architecture.\"}\n\nKey Voltage Rails:\n${contextRails || \"+19V_DCIN (Input), +3.3V_ALW (EC/Standby), +5.0V_ALW (Peripherals), +VCORE (CPU Core), +1.1V DDR5\"}\n`;\n\n const contents = reqData.messages.map(m => ({\n role: m.role === \"assistant\" ? \"model\" : \"user\",\n parts: [{ text: m.content }]\n }));\n\n const reply = await callGeminiWithFallback(async (modelName) => {\n const response = await ai.models.generateContent({\n model: modelName,\n contents: contents,\n config: {\n systemInstruction: systemPrompt,\n temperature: 0.3,\n }\n });\n return response.text;\n });\n\n if (reply) {\n return {\n message: reply,\n suggestedGuides: matchingGuides.map(g => ({\n id: g.id,\n title: g.title,\n category: g.category,\n difficulty: g.difficulty,\n estimatedTime: g.estimatedTime,\n })),\n suggestedManuals: matchingManuals.map(m => ({\n id: m.id,\n title: m.title,\n code: m.code,\n category: m.category\n })),\n voltageRailsMentioned: matchingRails.slice(0, 4),\n quickActions: [\n \"Check +3.3V / +5V Always-On Rails\",\n \"Open Matching Teardown Guide\",\n \"Run Minidump / BSOD Triage\",\n \"View Fastener Torque Table\"\n ]\n };\n }\n }\n\n // Deterministic local response based on knowledge base\n return generateDeterministicChatReply(reqData, matchingGuides, matchingManuals, matchingRails);\n}\n\nfunction generateDeterministicChatReply(\n reqData: TechnicalChatRequest,\n guides: any[],\n manuals: any[],\n rails: any[]\n): TechnicalChatResponse {\n const query = reqData.messages[reqData.messages.length - 1]?.content.toLowerCase() || \"\";\n let message = \"\";\n\n if (query.includes(\"power\") || query.includes(\"turn on\") || query.includes(\"dead\") || query.includes(\"rail\") || query.includes(\"charge\")) {\n message = `### \u26A1 Power Delivery & No-Power Diagnostic Protocol\n\nWhen troubleshooting a device that will not power on, follow the standard bench sequence:\n\n1. **DC-In & Input Stage Isolation**:\n - Check **+19V_DCIN** or **+20V_USB_PD** after the input MOSFETs. If voltage drops below 19V under load, check for a shorted DC jack or cracked ceramic filter capacitor.\n2. **Always-On Standby Rails**:\n - Verify **+3.3V_ALW** (Coil PL301) and **+5.0V_ALW** (Coil PL302). The Super I/O Embedded Controller (EC) cannot register the power button if +3.3V_ALW is missing.\n3. **Power Button Trigger & RTC Reset**:\n - Check that the power button signal (\\`NBSWON#\\`) pulls down from 3.3V to 0V when pressed.\n - Perform a 30-second CMOS/RTC hard drain to reset stuck power state machine registers.\n\nI have matched **${guides.length > 0 ? guides.length : \"several\"} verified guides** and technical schematics from our 624-guide database below:`;\n } else if (query.includes(\"bsod\") || query.includes(\"blue screen\") || query.includes(\"crash\") || query.includes(\"whea\") || query.includes(\"freeze\")) {\n message = `### \uD83D\uDED1 Kernel Crash & BSOD Diagnostic Protocol\n\nFor Windows stop codes and system freeze triage:\n\n1. **Clean Driver State**: Boot into Windows Safe Mode and run **Display Driver Uninstaller (DDU)** to remove residual GPU driver hooks, then install clean WHQL drivers.\n2. **System File Integrity**: Open Administrator Terminal and execute:\n \\`\\`\\`bash\n DISM /Online /Cleanup-Image /RestoreHealth\n sfc /scannow\n \\`\\`\\`\n3. **Memory Bus Stress Test**: Launch **PassMark MemTest86** from a bootable USB and complete 4 full passes to rule out defective RAM cells.\n4. **Minidump Stack Analysis**: Open \\`C:\\\\Windows\\\\Minidump\\` using **WinDbg Preview** and run \\`!analyze -v\\` to isolate the faulting \\`.sys\\` kernel driver module.`;\n } else if (query.includes(\"heat\") || query.includes(\"temp\") || query.includes(\"thermal\") || query.includes(\"fan\") || query.includes(\"loud\") || query.includes(\"paste\")) {\n message = `### \uD83D\uDD25 Thermal Throttling & Dissipation Protocol\n\nTo eliminate thermal throttling and direct-die pump-out:\n\n1. **Phase-Change Interface**: Apply **Honeywell PTM7950 (0.25mm)** phase-change pad on bare CPU/GPU silicon dies. Unlike conventional silicone grease, it will not pump out under thermal expansion cycles.\n2. **Radiator Exhaust Clearance**: Clear the felt dust wall trapped between the blower fan impeller and the copper radiator fins using 99% IPA and an ESD brush.\n3. **Torque Tightening Sequence**: Tighten heatsink retention spring screws in a cross-diagonal sequence (1 \u2192 2 \u2192 3 \u2192 4) to **0.25 \u2013 0.30 Nm** max torque to prevent die cracking.`;\n } else if (query.includes(\"display\") || query.includes(\"screen\") || query.includes(\"black\") || query.includes(\"edp\") || query.includes(\"backlight\")) {\n message = `### \uD83D\uDDA5\uFE0F Display & Backlight Troubleshooting Protocol\n\nFor black screen, no backlight, or flickering display issues:\n\n1. **Flashlight Test**: Shine a bright light at an angle against the LCD screen while powered on. If icons or text are visible, the LCD panel is receiving video data but the **+19V Backlight Rail (VLED)** or backlight fuse (F1) is open.\n2. **eDP Ribbon Connector Inspection**: Disconnect internal battery first. Reseat the 30-pin / 40-pin eDP connector on both motherboard and panel sides. Inspect for pulled pins.\n3. **External Display Verification**: Connect to an external HDMI/DisplayPort monitor to isolate whether the fault is in the internal eDP pipeline or the GPU core.`;\n } else if (query.includes(\"ram\") || query.includes(\"memory\") || query.includes(\"beep\") || query.includes(\"post\")) {\n message = `### \uD83E\uDDE0 RAM & Memory Subsystem Validation\n\nFor memory post codes, 3-beep codes, or random memory crashes:\n\n1. **Single-DIMM Isolation**: Remove all RAM sticks. Clean the gold edge connectors with 99% Isopropyl Alcohol. Test each stick individually in Slot A.\n2. **SPD / Voltage Verification**: Verify **+1.2V (DDR4)** or **+1.1V (DDR5)** rail across the RAM buck regulator coils.\n3. **4-Pass Stress Testing**: Boot into **MemTest86+** or **Linpack Xtreme** to stress test the memory controller and trace buses for memory bit flips.`;\n } else {\n message = `### \uD83D\uDEE0\uFE0F Hardware Diagnostic Analysis\n\nI have indexed your query across our **624 multi-brand repair guides** and **8 technical engineering manuals**.\n\nKey technician bench steps:\n1. **Power Isolation**: Disconnect AC charger and internal battery header before touching motherboard components.\n2. **Electrical Measurements**: Probe standby test points (**+19V_DCIN**, **+3.3V_ALW**, **+5.0V_ALW**) to isolate power sequencer states.\n3. **Fastener Torque Standards**: Maintain **0.25\u20130.30 Nm** on heatsink mounts and **0.18\u20130.20 Nm** on M.2 SSD screws.\n\nExplore matching repair procedures and manuals directly below:`;\n }\n\n return {\n message,\n suggestedGuides: guides.map(g => ({\n id: g.id,\n title: g.title,\n category: g.category,\n difficulty: g.difficulty,\n estimatedTime: g.estimatedTime,\n })),\n suggestedManuals: manuals.map(m => ({\n id: m.id,\n title: m.title,\n code: m.code,\n category: m.category\n })),\n voltageRailsMentioned: rails.slice(0, 4),\n quickActions: [\n \"Check Standby Power Rails\",\n \"Run Diagnostic Flowchart\",\n \"Open Software Download Hub\",\n \"View Torque & Fastener Table\"\n ]\n };\n}\n", "import express, { type Express } from \"express\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport { createServer as createViteServer, createLogger } from \"vite\";\nimport { type Server } from \"http\";\nimport viteConfig from \"../vite.config\";\nimport { nanoid } from \"nanoid\";\n\nconst viteLogger = createLogger();\n\nexport function log(message: string, source = \"express\") {\n const formattedTime = new Date().toLocaleTimeString(\"en-US\", {\n hour: \"numeric\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: true,\n });\n\n console.log(`${formattedTime} [${source}] ${message}`);\n}\n\nexport async function setupVite(app: Express, server: Server) {\n const serverOptions = {\n middlewareMode: true,\n hmr: { server },\n allowedHosts: true as const,\n };\n\n const vite = await createViteServer({\n ...viteConfig,\n configFile: false,\n customLogger: {\n ...viteLogger,\n error: (msg, options) => {\n viteLogger.error(msg, options);\n process.exit(1);\n },\n },\n server: serverOptions,\n appType: \"custom\",\n });\n\n app.use(vite.middlewares);\n app.use(\"*\", async (req, res, next) => {\n const url = req.originalUrl;\n\n try {\n const clientTemplate = path.resolve(\n import.meta.dirname,\n \"..\",\n \"client\",\n \"index.html\",\n );\n\n // always reload the index.html file from disk incase it changes\n let template = await fs.promises.readFile(clientTemplate, \"utf-8\");\n template = template.replace(\n `src=\"/src/main.tsx\"`,\n `src=\"/src/main.tsx?v=${nanoid()}\"`,\n );\n const page = await vite.transformIndexHtml(url, template);\n res.status(200).set({ \"Content-Type\": \"text/html\" }).end(page);\n } catch (e) {\n vite.ssrFixStacktrace(e as Error);\n next(e);\n }\n });\n}\n\nexport function serveStatic(app: Express) {\n const distPath = path.resolve(import.meta.dirname, \"public\");\n\n if (!fs.existsSync(distPath)) {\n throw new Error(\n `Could not find the build directory: ${distPath}, make sure to build the client first`,\n );\n }\n\n app.use(express.static(distPath));\n\n // fall through to index.html if the file doesn't exist\n app.use(\"*\", (_req, res) => {\n res.sendFile(path.resolve(distPath, \"index.html\"));\n });\n}\n", "import tailwindcss from '@tailwindcss/vite';\nimport react from '@vitejs/plugin-react';\nimport path from 'path';\nimport {defineConfig} from 'vite';\n\nexport default defineConfig(() => {\n return {\n plugins: [react(), tailwindcss()],\n resolve: {\n alias: {\n '@': path.resolve(__dirname, 'src'),\n '@shared': path.resolve(__dirname, 'shared'),\n },\n },\n server: {\n // HMR is disabled in AI Studio via DISABLE_HMR env var.\n // Do not modify\u00E2\u0080\u0094file watching is disabled to prevent flickering during agent edits.\n hmr: process.env.DISABLE_HMR !== 'true',\n // Disable file watching when DISABLE_HMR is true to save CPU during agent edits.\n watch: process.env.DISABLE_HMR === 'true' ? null : {},\n },\n };\n});\n"], |
|
5
|
"mappings": "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", |