diff --git a/frontend/application/components/BannerPlacement.tsx b/frontend/application/components/BannerPlacement.tsx index 0866efa..894aaab 100644 --- a/frontend/application/components/BannerPlacement.tsx +++ b/frontend/application/components/BannerPlacement.tsx @@ -1,8 +1,7 @@ -/* eslint-disable @next/next/no-img-element */ -"use client"; import React from "react"; import Link from "next/link"; import { Banner } from "../lib/types"; +import SafeImage from "./SafeImage"; interface BannerPlacementProps { banners: Banner[]; @@ -36,14 +35,14 @@ export default function BannerPlacement({ const cardContent = (
- {banner.title {(banner.title || banner.subtitle) && ( -
+
{banner.title && (

{banner.title} @@ -98,14 +97,14 @@ export default function BannerPlacement({ const cardContent = (
- {banner.title {(banner.title || banner.subtitle) && ( -
+
{banner.title && (

{banner.title} @@ -158,14 +157,14 @@ export default function BannerPlacement({ const cardContent = (
- {banner.title {banner.title && ( -
+
{banner.title}
)} diff --git a/frontend/application/components/BrandLogo.tsx b/frontend/application/components/BrandLogo.tsx index 9876481..e9bbe25 100644 --- a/frontend/application/components/BrandLogo.tsx +++ b/frontend/application/components/BrandLogo.tsx @@ -1,7 +1,7 @@ -/* eslint-disable @next/next/no-img-element */ "use client"; import React from "react"; import Link from "next/link"; +import Image from "next/image"; import { useSettingsStore } from "../lib/store/settingsStore"; interface BrandLogoProps { @@ -39,12 +39,18 @@ export default function BrandLogo({ lg: "text-xl sm:text-3xl", }; + const isBlobOrData = typeof logoUrl === 'string' && (logoUrl.startsWith('blob:') || logoUrl.startsWith('data:')); + const content = (
{logoUrl ? ( - {`${textEn} ) : ( diff --git a/frontend/application/components/Footer.tsx b/frontend/application/components/Footer.tsx index dac8fd8..a00bca7 100644 --- a/frontend/application/components/Footer.tsx +++ b/frontend/application/components/Footer.tsx @@ -1,6 +1,6 @@ -/* eslint-disable @next/next/no-img-element */ "use client"; import React, { useState, useEffect } from "react"; +import Image from "next/image"; import { Phone, Mail, MapPin, Instagram, ShieldCheck, Globe, ArrowUp, Download } from "lucide-react"; import { useSettingsStore } from "../lib/store/settingsStore"; import BrandLogo from "./BrandLogo"; @@ -190,11 +190,15 @@ export default function Footer({ target="_blank" rel="noopener noreferrer" title="درگاه پرداخت امن و معتبر زیبال" + className="block" > - نماد اعتماد درگاه پرداخت زیبال
diff --git a/frontend/application/components/OrderDetailsModal.tsx b/frontend/application/components/OrderDetailsModal.tsx index 1bb11e6..53cd7a6 100644 --- a/frontend/application/components/OrderDetailsModal.tsx +++ b/frontend/application/components/OrderDetailsModal.tsx @@ -1,4 +1,3 @@ -/* eslint-disable @next/next/no-img-element */ "use client"; import React, { useState } from "react"; import Link from "next/link"; @@ -26,6 +25,7 @@ import { toPersian } from "../lib/utils"; import api from "../lib/services/api"; import { toast } from "sonner"; import { useSettingsStore } from "../lib/store/settingsStore"; +import SafeImage from "./SafeImage"; interface OrderDetailsModalProps { isOpen: boolean; @@ -418,14 +418,14 @@ export default function OrderDetailsModal({
setZoomedImage(pImg)} - className="w-14 h-14 bg-medical-gray-50 rounded-xl p-1.5 flex items-center justify-center shrink-0 border border-medical-gray-200 cursor-zoom-in hover:scale-105 transition-transform" + className="w-14 h-14 bg-medical-gray-50 rounded-xl p-1 flex items-center justify-center shrink-0 border border-medical-gray-200 cursor-zoom-in hover:scale-105 transition-transform overflow-hidden" title="مشاهده تصویر بزرگ" > - {pName} { e.currentTarget.src = '/assets/images/canina-product-placeholder.png'; }} + className="w-full h-full" + imgClassName="w-full h-full object-contain" />
@@ -711,10 +711,11 @@ export default function OrderDetailsModal({ > - نمایش کامل تصویر محصول
diff --git a/frontend/application/components/PetProfile.tsx b/frontend/application/components/PetProfile.tsx index 2fa9c5c..11153a3 100644 --- a/frontend/application/components/PetProfile.tsx +++ b/frontend/application/components/PetProfile.tsx @@ -4,6 +4,7 @@ import { Product } from "../lib/data/products"; import { productService } from "../lib/services/productService"; import { motion, AnimatePresence } from "motion/react"; import { PetProfileSkeleton } from "./Skeleton"; +import SafeImage from "./SafeImage"; import { Dog, Cat, @@ -28,7 +29,6 @@ import { } from "lucide-react"; import { usePetStore, PetProfile as GlobalPetProfile, Reminder, HealthLog } from "../lib/store/usePetStore"; import { useCartStore } from "../lib/store/cartStore"; -import SafeImage from "./SafeImage"; import SmartAdvisor from "./SmartAdvisor"; import OrderDetailsModal from "./OrderDetailsModal"; import { toast } from "sonner"; @@ -554,10 +554,11 @@ export default function PetProfile({ initialView, advisorNeed, embedded = false {/* Photo preview container */}
{formData.imageUrl ? ( - عکس پت ) : ( diff --git a/frontend/application/components/PodcastInlinePlayer.tsx b/frontend/application/components/PodcastInlinePlayer.tsx index de89df3..3690b72 100644 --- a/frontend/application/components/PodcastInlinePlayer.tsx +++ b/frontend/application/components/PodcastInlinePlayer.tsx @@ -14,6 +14,7 @@ import { Loader2, Sparkles } from "lucide-react"; +import SafeImage from "./SafeImage"; interface PodcastInlinePlayerProps { podcast: { @@ -203,13 +204,11 @@ export default function PodcastInlinePlayer({ podcast }: PodcastInlinePlayerProp onClick={togglePlay} className="relative w-full md:w-56 sm:w-64 aspect-square rounded-2xl overflow-hidden cursor-pointer bg-neutral-800 border border-white/15 group-hover:border-canina-blue/50 transition-all flex items-center justify-center shrink-0 shadow-lg" > - {podcast.title { - (e.target as HTMLImageElement).src = '/images/default-podcast.png'; - }} + className="w-full h-full" + imgClassName={`w-full h-full object-cover transition-transform duration-700 ${isPlaying ? "scale-105" : "scale-100"}`} />
diff --git a/frontend/application/components/PodcastPlayerModal.tsx b/frontend/application/components/PodcastPlayerModal.tsx index d92851b..4e09626 100644 --- a/frontend/application/components/PodcastPlayerModal.tsx +++ b/frontend/application/components/PodcastPlayerModal.tsx @@ -16,6 +16,7 @@ import { Loader2, Sparkles } from "lucide-react"; +import SafeImage from "./SafeImage"; interface PodcastPlayerModalProps { isOpen: boolean; @@ -277,13 +278,11 @@ export default function PodcastPlayerModal({ isOpen, onClose, podcast }: Podcast {/* Cover Art Artwork */}
- {podcast.title { - (e.target as HTMLImageElement).src = '/images/default-podcast.png'; - }} + className="w-full h-full" + imgClassName={`w-full h-full object-cover transition-transform duration-700 ${isPlaying ? "scale-105" : "scale-100"}`} />
diff --git a/frontend/application/components/ProductPage.tsx b/frontend/application/components/ProductPage.tsx index 87fd573..ff55ea1 100644 --- a/frontend/application/components/ProductPage.tsx +++ b/frontend/application/components/ProductPage.tsx @@ -325,10 +325,11 @@ export default function ProductPage({ productSlug }: { productSlug: string }) { : 'border-medical-gray-200 hover:border-canina-blue/50 opacity-70 hover:opacity-100' }`} > - {`${product.name} ); @@ -707,13 +708,11 @@ export default function ProductPage({ productSlug }: { productSlug: string }) { onClick={() => setIsVideoModalOpen(true)} className="relative w-full md:w-80 aspect-video rounded-2xl overflow-hidden cursor-pointer bg-neutral-800 border border-white/10 group-hover:border-canina-blue/50 transition-all flex items-center justify-center shrink-0" > - {product.videoTitle { - (e.target as HTMLImageElement).src = product.image; - }} + className="w-full h-full" + imgClassName="w-full h-full object-cover group-hover:scale-105 transition-transform duration-500" />
@@ -1137,10 +1136,11 @@ export default function ProductPage({ productSlug }: { productSlug: string }) { {/* Main Zoomed Image Container */}
- {product.name}
@@ -1165,7 +1165,7 @@ export default function ProductPage({ productSlug }: { productSlug: string }) { : 'border-transparent opacity-60 hover:opacity-100' }`} > - Thumbnail + ))}
diff --git a/frontend/application/components/SafeImage.tsx b/frontend/application/components/SafeImage.tsx index 859c57e..e0b47c4 100644 --- a/frontend/application/components/SafeImage.tsx +++ b/frontend/application/components/SafeImage.tsx @@ -43,7 +43,23 @@ export default function SafeImage({ ); } + // Check if external domain is in allowed remote patterns or relative path const isExternal = typeof src === 'string' && (src.startsWith('http://') || src.startsWith('https://')); + const isBlobOrData = typeof src === 'string' && (src.startsWith('blob:') || src.startsWith('data:')); + const isAllowedHost = React.useMemo(() => { + if (!isExternal) return true; + try { + const url = new URL(src); + const allowedHosts = [ + 'canina.ir', 'api.canina.ir', 'stage.canina.ir', 'stageapi.canina.ir', + 'apicanina.parsaaghayi.ir', 'canina.de', 'www.canina.de', + 'images.unsplash.com', 'plus.unsplash.com', 'localhost', '127.0.0.1' + ]; + return allowedHosts.some(h => url.hostname === h || url.hostname.endsWith(`.${h}`)); + } catch { + return false; + } + }, [src, isExternal]); return (
@@ -58,7 +74,7 @@ export default function SafeImage({ width={500} height={500} loading="lazy" - unoptimized={isExternal} + unoptimized={isBlobOrData || !isAllowedHost} className={cn( "transition-all duration-700 w-full h-full", imgClassName, diff --git a/graphify-out/.graphify_labels.json b/graphify-out/.graphify_labels.json index 0171b5c..f75fa83 100644 --- a/graphify-out/.graphify_labels.json +++ b/graphify-out/.graphify_labels.json @@ -1,9 +1,9 @@ { "0": "Roles", "1": "app.module.ts", - "2": "SettingsController", + "2": "SmsService", "3": "productService.ts", - "4": "VetGallery.tsx", + "4": "SafeImage.tsx", "5": "CmsController", "6": "tickets.controller.ts", "7": "PaginationDto", @@ -11,16 +11,16 @@ "9": "devDependencies", "10": "CreateReviewDto", "11": "Modal.tsx", - "12": "useCartStore", - "13": "app-audit-verification.e2e-spec.js", - "14": "userStore.ts", + "12": "PetProfile.tsx", + "13": "main.ts", + "14": "lib/services/api.ts", "15": "src/services/api.ts", "16": "DoctorQueryDto", - "17": "RedisService", + "17": "AuthService", "18": "JwtAuthGuard", "19": "ProductsService", "20": "CreateVideoDto", - "21": "SmsService", + "21": "toPersian", "22": "UserDashboard.tsx", "23": "MenuService", "24": "BE-001", @@ -34,7 +34,7 @@ "32": "Button.tsx", "33": "WholesaleApplyDto", "34": "B2BService", - "35": "auth.service.ts", + "35": "AuthController", "36": "FaqService", "37": "راهنمای تست سیستم (Software Testing)", "38": "Button", @@ -52,16 +52,16 @@ "50": "devDependencies", "51": "BlogsController", "52": "PrescriptionsController", - "53": "SmartAdvisorController", - "54": "UsersController", + "53": "SmartAdvisorService", + "54": "UsersService", "55": "UITexts.tsx", - "56": "SettingsService", + "56": "Orders.tsx", "57": "Role & Core Objective", "58": "ContactService", "59": "compilerOptions", "60": "admin.service.ts", "61": "CreateEBankCheckoutDto", - "62": "OrdersService", + "62": "WikiController", "63": "dependencies", "64": "compilerOptions", "65": "ProductPage.tsx", @@ -75,7 +75,7 @@ "73": "Operational Rules & Boundaries", "74": "WikiController", "75": "PetsController", - "76": "Orders.tsx", + "76": "PaymentService", "77": "seo.module.ts", "78": "AdminService", "79": "🏢 AI Software Agency — Master Orchestration Protocol v3", @@ -84,29 +84,29 @@ "82": "scripts", "83": "dependencies", "84": "Role & Core Objective", - "85": "UsersService", + "85": "auth.service.ts", "86": "zibal.service.ts", "87": "dependencies", - "88": "components/Skeleton.tsx", + "88": "HomeClient.tsx", "89": "seed-products.ts", "90": "SmsLogQueryDto", "91": "Reconciled Audit Roles & Assignments", - "92": "OrdersController", - "93": "lib/services/api.ts", + "92": "OrdersService", + "93": "app-audit-verification.e2e-spec.js", "94": "Phase 3.1 — Human Review Preparation and Master Backlog Critique", "95": "getSeoConfig", "96": "compilerOptions", "97": "prisma", "98": "scripts", - "99": "AuthController", + "99": "HomeController", "100": "Deep Audit Summary Report", "101": "Operational Rules & Boundaries", "102": "jest", "103": "Comprehensive Change Log", "104": "Coupons.tsx", "105": "Operational Rules & Boundaries", - "106": "auth.module.ts", - "107": "HomeController", + "106": "auth.controller.ts", + "107": "payment.service.ts", "108": "PrismaService", "109": "1. Summary of Integrity Repairs Performed", "110": "Operational Rules & Boundaries", @@ -143,7 +143,7 @@ "141": "application/package.json", "142": "start-dev.js", "143": "generate-openapi.js", - "144": "PaymentService", + "144": "RegisterDto", "145": "eslint-config-prettier", "146": "System Discovery", "147": "Media.tsx", @@ -175,10 +175,10 @@ "173": "Phase 3 Audit Traceability Matrix", "174": "rebuild_honest_ledger.js", "175": "validate_evidence_grade.js", - "176": "AuthService", + "176": "InitiatePaymentDto", "177": "blog/page.tsx", "178": "prettier", - "179": "PodcastPlayerModal.tsx", + "179": "VerifyOtpDto", "180": "API Contract Specification", "181": "⚙️ Backend Technical Review (05_dev_backend)", "182": "🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)", @@ -223,7 +223,7 @@ "221": "Textarea.tsx", "222": "admin-panel/tsconfig.json", "223": "ts-jest", - "224": "payment.service.ts", + "224": "SendOtpDto", "225": "next.config.ts", "226": "Shabnam Font README", "227": "AGENTS.md", @@ -306,19 +306,17 @@ "304": "@testing-library/react", "305": "@types/react", "306": "globals", - "307": "RegisterDto", + "307": "@types/react-dom", "308": "vitest", "309": "axios", "310": "tailwindcss", - "311": "InitiatePaymentDto", - "312": "AddressDto", - "313": "track/page.tsx", + "311": "track/page.tsx", + "312": "BlogsModule", + "313": "app/page.tsx", "314": "@eslint/js", "315": "typescript", - "316": "app/page.tsx", - "317": "search/page.tsx", - "318": "shop/page.tsx", - "319": "MaskableField.tsx", - "320": "eslint-config-next", + "316": "search/page.tsx", + "317": "shop/page.tsx", + "318": "MaskableField.tsx", "324": "typescript-eslint" } diff --git a/graphify-out/.graphify_labels.json.sig b/graphify-out/.graphify_labels.json.sig index 6ec6e7a..deea653 100644 --- a/graphify-out/.graphify_labels.json.sig +++ b/graphify-out/.graphify_labels.json.sig @@ -1 +1 @@ -{"0": "b0118f68a3e7f0ad", "1": "611a213aa9d86e45", "2": "4961116172fba1ce", "3": "a75cce784a82a050", "4": "26ac1b25ea50c72c", "5": "f34c872571e8a774", "6": "81b67391b0b87cab", "7": "7698ea655678d217", "8": "5c5e138abe1519c9", "9": "94bf724f55aba57a", "10": "204cb48d7dea0402", "11": "ff892cef2365d078", "12": "c63cdac19bfd74e4", "13": "571266c2ba728290", "14": "f303067d9abbfd7f", "15": "e677e85728f05788", "16": "bbaf7539ddd300b0", "17": "dd1978ec44188ccc", "18": "0a5782680a4b0c1e", "19": "77128508b883f928", "20": "a9c8508883f21e7a", "21": "bc8e8c4344ae6b70", "22": "7953b6ed090897cd", "23": "b64d81a71800bd4b", "24": "4eda46a5b0695ef6", "25": "90b79d6027d60d30", "26": "6bd6f2633370820c", "27": "7664e56213a29331", "28": "942c4f9928c60a45", "29": "0614b98d9013b5f5", "30": "53ff49b3d54f0fba", "31": "2153ddcd7477dfb7", "32": "91e5034005e01f04", "33": "4c3daa7635f2b586", "34": "9b13da82475fc3c8", "35": "2bb8b0ee41b68714", "36": "f150a52ef5061868", "37": "1c9a1f4c72613346", "38": "d9eaca721e908bb1", "39": "c387d7ef8479ef21", "40": "2078e6143c52e5cc", "41": "7abb5bc6a0e4f65f", "42": "cbaa20536db72d3e", "43": "97f26c6b5405e0d6", "44": "937bef30dee7e535", "45": "7dd5c61562c827a8", "46": "895824251189f831", "47": "418bd497cbc98ef7", "48": "b10f20209f82a941", "49": "841013681f4e6e8c", "50": "6e280669736f661b", "51": "cbccfd08dcc77edf", "52": "cbd16be3d8438cc9", "53": "ab44daeb527b6e64", "54": "7f879091783d601b", "55": "1ccf271dde5845aa", "56": "cebfb58b20012f4b", "57": "0f62727f3b4907c0", "58": "93d54dd865cba4db", "59": "7369e85febb97f1a", "60": "308972713c9af54e", "61": "c4acedd7472cf7cb", "62": "f1d026277f29bad3", "63": "060c64726e8d1bd3", "64": "3b9521f7d7986eaa", "65": "e522dd0625744166", "66": "50591cb1739654fd", "67": "cbb795872ce2b286", "68": "0d29012400f8ab28", "69": "31a5a53f1fe77e46", "70": "01d4f9d6d9f3b08a", "71": "59aec575830ddcee", "72": "69d0f8b228227690", "73": "22456307ff273d80", "74": "d9e74b032c5b8440", "75": "878e425a262fc2a1", "76": "2ff7b5304fc8f7c6", "77": "62430df45afa65b5", "78": "05331539fcc59027", "79": "ba7bc17581366c9a", "80": "0727bb53199085fc", "81": "91393683c97d1773", "82": "b1fb8b1d0bcaa7fd", "83": "71d2ce6fb684bc0e", "84": "70497658d0e0cea6", "85": "33dc6c6478c795fa", "86": "e3d13e2060945d3f", "87": "f0f56796aaebb4f5", "88": "5dc9ecb5476d9198", "89": "656f816eb51f2ab1", "90": "8ffb30447853a689", "91": "25a6695f5783d2be", "92": "f675db38dc787e17", "93": "663bf5aa8d5bbb3d", "94": "f7a706f5fcb260c3", "95": "66a7ebe2d79c69c4", "96": "46e9411f2b2e725a", "97": "fc778d7a22e550eb", "98": "eced7a49a05de643", "99": "e24cf7738e0e68bd", "100": "3c1d9844d072bd2a", "101": "b3c5433df880f335", "102": "e036dbd1de0f8b38", "103": "ac7cb5ec7d5c0802", "104": "121a7f35e3e974dc", "105": "622f83f2eb300a25", "106": "f53f86d5ec35f0e8", "107": "4ece6985263357c4", "108": "6b28d7f5dd2cde38", "109": "6d16ccde1291c9d4", "110": "d228746e85ead3af", "111": "b55ba9125ffb5729", "112": "5f50a360f18a880b", "113": "610fb4de52790b25", "114": "c6b57d78299a27b3", "115": "3a6753a80123a0f4", "116": "db70db08c00162df", "117": "9a1080686fc7c39b", "118": "77fd76193df9f573", "119": "28355f848c862b6e", "120": "25f77f5455bdc96a", "121": "9141a0ede9461fd5", "122": "6c8cc146211dfe24", "123": "ca950b47c628b81a", "124": "3ceda88239910d9a", "125": "9409b3b8a334f51d", "126": "ac95a9f152e3d1c4", "127": "a7299f20633c0236", "128": "255a8a95e2a3df67", "129": "aa9181dae6104d09", "130": "7f405315686459b9", "131": "44c7924c829cc215", "132": "17ecb7325285cf7a", "133": "4487fd85ddc13c93", "134": "3a8a257d1f54b2ae", "135": "c4abf0eb38ef740d", "136": "07d37aeefbe50e21", "137": "70b58e32c2890fdd", "138": "f2c7afb0c277c4b7", "139": "ed938bf48ae6ca6c", "140": "167643bcbbc26244", "141": "dcffd9ad7a1f7df6", "142": "f47469d48b3776b5", "143": "1b0ef1cf87b53de3", "144": "5287bf63026e555d", "145": "f6ddba6f531d6b96", "146": "c7ddffce8605b65b", "147": "0e03a5b22c0f26de", "148": "0bd7ed52b69464bf", "149": "39d16c91943d85e4", "150": "5910eeefe2f97a20", "151": "c7de3fe21e2e53b4", "152": "d7cad630fb1d1414", "153": "6cfdd09a6fdd9ff9", "154": "66efafa1e86d8081", "155": "b796283dc9729998", "156": "a37dc83d6c895c8a", "157": "48f898ce95c8e90c", "158": "9a7b4968676954d7", "159": "a2fe690317aef2ee", "160": "e30004421d79ffeb", "161": "cd66a5f43cd3407d", "162": "fa2d7dcf52348095", "163": "75efc6457f7fce22", "164": "8375a4fbf0573a52", "165": "edb079558c6f3d59", "166": "1d80b74f885d6716", "167": "3cd15de82f23093a", "168": "7a77349497fcdf37", "169": "85cd9ca1246dc437", "170": "3e93071fc4a80e95", "171": "6114ccb7b9036e33", "172": "f3d92800d756dd79", "173": "2aa85a497fd142d7", "174": "35d3a2679371e9a4", "175": "b8f35a499b36a57a", "176": "32449582fd80afd1", "177": "6c9b506f719e06db", "178": "78aa95566e86b57f", "179": "f74d29bd4f6b6043", "180": "4ac5f9965007617d", "181": "cff999497d56b512", "182": "06b38ffa6f58195d", "183": "ee705c178d6958bb", "184": "70e62553403661a3", "185": "6ddbf62ac93920e1", "186": "867babdd40f0c3fc", "187": "298144d1548a7dee", "188": "00d275127a7e435e", "189": "2942a9d30dae4a29", "190": "3e21e2fb50e12670", "191": "be62daa7d5bc336a", "192": "47c3e1a9d4bb7e67", "193": "82ff39c105ae3090", "194": "6747ecf936cb0400", "195": "ebc0087e3400009c", "196": "51d4e15c7e10decf", "197": "4865e180c0694458", "198": "ad5c34ff3d17ff1d", "199": "bdbdf025d7eef6be", "200": "162b36508e5879f3", "201": "6256958a9b817133", "202": "ab06e01c9caa9f90", "203": "204b3a83ef62f360", "204": "8d1aad761b4c839d", "205": "67b5cef27d55952d", "206": "10b2996179aaaf2e", "207": "39031f751fb2d42f", "208": "54f53e5e0cc8c385", "209": "821696b1ff49347b", "210": "00739b5480732bdc", "211": "2434b1a28b16557f", "212": "cb3fe87c920b0cb3", "213": "ddb9c95db6575999", "214": "e2250667e3a77089", "215": "9069d5dda9013eee", "216": "0077975cffee54dc", "217": "e6fcd0aec85fac92", "218": "9590124db1601a96", "219": "e077f384ad6b18ad", "220": "dd8d62f9fb517bb5", "221": "6d0322fa3d03fa10", "222": "3be2a9ccdc6668cc", "223": "c24925d361d1eb6f", "224": "9b0eb2e9b68ff17d", "225": "703a4a9860d7ed16", "226": "85fd4a84b5393d0e", "227": "97ec841e4f367258", "228": "4654167fd211d027", "229": "8176a164778526f9", "230": "a74925b45b279d6f", "231": "1d230c8fb897098f", "232": "e24cf60bcf607797", "233": "bbcea5ec9d046ac0", "234": "fd158611e3227271", "235": "47e08912fd6cd296", "236": "ecfb692b6f7a1014", "237": "3528c4c8a0e2db61", "238": "8bd25b17ffb7ab6b", "239": "df4cc8f2a19b98fa", "240": "65d822bbba496dee", "241": "e66a941c60456b44", "242": "a7cf02106e992a23", "243": "88604333ff6aa860", "244": "8365b02889fa6cfc", "245": "6e7b82d0387bf16d", "246": "2eef246ebb269184", "247": "f5edd0761d024ff0", "248": "1e833ee596b5ca23", "249": "9fd8a4abf0eb00a3", "250": "e9728eefddbaed5b", "251": "fe8ad8aaa5b6f652", "252": "be78134816511eaf", "253": "4737624cd139d117", "254": "5fcab665dcd75a7d", "255": "33b1870821fb012a", "256": "10992f7331cbdeba", "257": "cef806733796b489", "258": "76578e90353475ed", "259": "04d938f720c1db19", "260": "57931ddf408ceeeb", "261": "b4fbbd4b7a13369e", "262": "d64c6d160a7faed4", "263": "2d1c86501cdb42dd", "264": "131bf974d820052c", "265": "5eb83040a203bd16", "266": "20a2080eac259e2b", "267": "d2a7888a77082d4c", "268": "0598c15fa2a12fad", "269": "88e82bb9fffbe642", "270": "ef2d2abc6e491968", "271": "a1e0a3465632c13a", "272": "e6273a4f9b65952b", "273": "38a03e32ab28113e", "274": "400d2883ce278be7", "275": "a13f9628796dc16a", "276": "6e3ce4714f76f2f9", "277": "de2233c73c628824", "278": "a144dcdc61af17a5", "279": "672ba0ee4d6993c2", "280": "daf108b14eb1d2d5", "281": "a618b7b467aa2c0c", "282": "60a2d42e0373376c", "283": "934bee98555c5f5b", "284": "3a30dd7bf2ececaa", "285": "23c1a365d72c9b86", "286": "3323cd7407922799", "287": "9050a3ebe80326e5", "288": "10d7c8f3898b68e5", "289": "2ce5bbc30db985b5", "290": "2a963843e9a8e153", "291": "28537a0c0fbd566f", "292": "3659ed0b62c213c5", "293": "912cf03978233ef7", "294": "f77211d12593146c", "295": "60ce4fcea460e0a6", "296": "7a7f04630a11cc2b", "297": "69f2014dab3c4a93", "298": "e6a2800768ea45fe", "299": "5a4d1c1ef8bed9bb", "300": "b1d204e97a3c45dc", "301": "c35e392f1594d14e", "302": "1c69dcee9405ce47", "303": "0650b6a561436852", "304": "e195f425def606d0", "305": "19ac29575c50f599", "306": "c556ac339be4aba5", "307": "acfe5a84eaab81d7", "308": "bcf417101439fd9e", "309": "768db8a3a299f590", "310": "321732baccae846b", "311": "34581929891cefb2", "312": "47c6666263fd3bd6", "313": "2b8d338593a71266", "314": "b0b81cfb9e11502e", "315": "a0fdc688ac30f227", "316": "0dd5439f11354ec2", "317": "ac3e207a64344b36", "318": "879780ef88205b22", "319": "2491d05d8bb29ad7", "320": "bddcc43a56a2787b", "324": "6c1a09679076ea89"} \ No newline at end of file +{"0": "b0118f68a3e7f0ad", "1": "209d2ba85c62ed02", "2": "e5c5aabb67718c69", "3": "947c87dbbedb10cc", "4": "e7b3a003b855f4c5", "5": "f34c872571e8a774", "6": "81b67391b0b87cab", "7": "8e60fe2bc994a343", "8": "0ac98049cf3e7edf", "9": "94bf724f55aba57a", "10": "204cb48d7dea0402", "11": "ff892cef2365d078", "12": "cd1baa3d57da5a46", "13": "1c6c907af62509f0", "14": "50f36d1057a46970", "15": "e677e85728f05788", "16": "bbaf7539ddd300b0", "17": "aec9a1c7e4ca27f6", "18": "450340aafdd91d0d", "19": "77128508b883f928", "20": "a9c8508883f21e7a", "21": "4ce078cc770f6b86", "22": "09e3a12d2834742a", "23": "493cda457ee900a1", "24": "4eda46a5b0695ef6", "25": "90b79d6027d60d30", "26": "6bd6f2633370820c", "27": "7664e56213a29331", "28": "942c4f9928c60a45", "29": "0614b98d9013b5f5", "30": "53ff49b3d54f0fba", "31": "2153ddcd7477dfb7", "32": "91e5034005e01f04", "33": "4c3daa7635f2b586", "34": "9b13da82475fc3c8", "35": "3b30592d0704001b", "36": "f150a52ef5061868", "37": "1c9a1f4c72613346", "38": "d9eaca721e908bb1", "39": "c387d7ef8479ef21", "40": "2078e6143c52e5cc", "41": "7abb5bc6a0e4f65f", "42": "cbaa20536db72d3e", "43": "97f26c6b5405e0d6", "44": "937bef30dee7e535", "45": "7dd5c61562c827a8", "46": "895824251189f831", "47": "418bd497cbc98ef7", "48": "b10f20209f82a941", "49": "841013681f4e6e8c", "50": "b1c3283bd55a8fe9", "51": "cbccfd08dcc77edf", "52": "cbd16be3d8438cc9", "53": "d1a1a4b1ee1041ff", "54": "1ca6c0aaa68a273d", "55": "1ccf271dde5845aa", "56": "2ff7b5304fc8f7c6", "57": "0f62727f3b4907c0", "58": "93d54dd865cba4db", "59": "7369e85febb97f1a", "60": "308972713c9af54e", "61": "c4acedd7472cf7cb", "62": "6e67e4bc78994a71", "63": "060c64726e8d1bd3", "64": "3b9521f7d7986eaa", "65": "e522dd0625744166", "66": "50591cb1739654fd", "67": "10d4f0bfa19dd52f", "68": "0d29012400f8ab28", "69": "31a5a53f1fe77e46", "70": "01d4f9d6d9f3b08a", "71": "59aec575830ddcee", "72": "69d0f8b228227690", "73": "22456307ff273d80", "74": "d9e74b032c5b8440", "75": "878e425a262fc2a1", "76": "0e5a4fb45b6c76c4", "77": "62430df45afa65b5", "78": "05331539fcc59027", "79": "ba7bc17581366c9a", "80": "0727bb53199085fc", "81": "91393683c97d1773", "82": "b1fb8b1d0bcaa7fd", "83": "71d2ce6fb684bc0e", "84": "70497658d0e0cea6", "85": "21b020cd08bd337c", "86": "e3d13e2060945d3f", "87": "f0f56796aaebb4f5", "88": "e447aab253fbe038", "89": "656f816eb51f2ab1", "90": "8ffb30447853a689", "91": "25a6695f5783d2be", "92": "2450b45f1f62fece", "93": "2dc12b39b91fa542", "94": "f7a706f5fcb260c3", "95": "66a7ebe2d79c69c4", "96": "46e9411f2b2e725a", "97": "fc778d7a22e550eb", "98": "eced7a49a05de643", "99": "4ece6985263357c4", "100": "3c1d9844d072bd2a", "101": "b3c5433df880f335", "102": "e036dbd1de0f8b38", "103": "ac7cb5ec7d5c0802", "104": "121a7f35e3e974dc", "105": "622f83f2eb300a25", "106": "50413a4ac6293636", "107": "9b0eb2e9b68ff17d", "108": "c4a15d65533941e5", "109": "6d16ccde1291c9d4", "110": "d228746e85ead3af", "111": "b55ba9125ffb5729", "112": "5f50a360f18a880b", "113": "610fb4de52790b25", "114": "c6b57d78299a27b3", "115": "3a6753a80123a0f4", "116": "db70db08c00162df", "117": "9a1080686fc7c39b", "118": "77fd76193df9f573", "119": "28355f848c862b6e", "120": "25f77f5455bdc96a", "121": "9141a0ede9461fd5", "122": "6c8cc146211dfe24", "123": "ca950b47c628b81a", "124": "3ceda88239910d9a", "125": "9409b3b8a334f51d", "126": "ac95a9f152e3d1c4", "127": "a7299f20633c0236", "128": "255a8a95e2a3df67", "129": "aa9181dae6104d09", "130": "7f405315686459b9", "131": "44c7924c829cc215", "132": "17ecb7325285cf7a", "133": "4487fd85ddc13c93", "134": "3a8a257d1f54b2ae", "135": "c4abf0eb38ef740d", "136": "07d37aeefbe50e21", "137": "70b58e32c2890fdd", "138": "f2c7afb0c277c4b7", "139": "ed938bf48ae6ca6c", "140": "167643bcbbc26244", "141": "dcffd9ad7a1f7df6", "142": "f47469d48b3776b5", "143": "1b0ef1cf87b53de3", "144": "acfe5a84eaab81d7", "145": "f6ddba6f531d6b96", "146": "c7ddffce8605b65b", "147": "0e03a5b22c0f26de", "148": "0bd7ed52b69464bf", "149": "39d16c91943d85e4", "150": "5910eeefe2f97a20", "151": "c7de3fe21e2e53b4", "152": "d7cad630fb1d1414", "153": "6cfdd09a6fdd9ff9", "154": "66efafa1e86d8081", "155": "b796283dc9729998", "156": "a37dc83d6c895c8a", "157": "48f898ce95c8e90c", "158": "9a7b4968676954d7", "159": "a2fe690317aef2ee", "160": "e30004421d79ffeb", "161": "cd66a5f43cd3407d", "162": "fa2d7dcf52348095", "163": "75efc6457f7fce22", "164": "8375a4fbf0573a52", "165": "edb079558c6f3d59", "166": "1d80b74f885d6716", "167": "3cd15de82f23093a", "168": "7a77349497fcdf37", "169": "85cd9ca1246dc437", "170": "3e93071fc4a80e95", "171": "6114ccb7b9036e33", "172": "f3d92800d756dd79", "173": "2aa85a497fd142d7", "174": "35d3a2679371e9a4", "175": "b8f35a499b36a57a", "176": "34581929891cefb2", "177": "6c9b506f719e06db", "178": "78aa95566e86b57f", "179": "176083777cb01eb7", "180": "4ac5f9965007617d", "181": "cff999497d56b512", "182": "06b38ffa6f58195d", "183": "ee705c178d6958bb", "184": "70e62553403661a3", "185": "6ddbf62ac93920e1", "186": "867babdd40f0c3fc", "187": "298144d1548a7dee", "188": "00d275127a7e435e", "189": "2942a9d30dae4a29", "190": "3e21e2fb50e12670", "191": "be62daa7d5bc336a", "192": "47c3e1a9d4bb7e67", "193": "82ff39c105ae3090", "194": "6747ecf936cb0400", "195": "ebc0087e3400009c", "196": "51d4e15c7e10decf", "197": "4865e180c0694458", "198": "ad5c34ff3d17ff1d", "199": "08075023678b869c", "200": "162b36508e5879f3", "201": "6256958a9b817133", "202": "ab06e01c9caa9f90", "203": "204b3a83ef62f360", "204": "8d1aad761b4c839d", "205": "67b5cef27d55952d", "206": "10b2996179aaaf2e", "207": "39031f751fb2d42f", "208": "54f53e5e0cc8c385", "209": "821696b1ff49347b", "210": "00739b5480732bdc", "211": "2434b1a28b16557f", "212": "cb3fe87c920b0cb3", "213": "ddb9c95db6575999", "214": "e2250667e3a77089", "215": "9069d5dda9013eee", "216": "0077975cffee54dc", "217": "e6fcd0aec85fac92", "218": "9590124db1601a96", "219": "e077f384ad6b18ad", "220": "dd8d62f9fb517bb5", "221": "6d0322fa3d03fa10", "222": "3be2a9ccdc6668cc", "223": "c24925d361d1eb6f", "224": "cbf8ae5a5ec821d3", "225": "703a4a9860d7ed16", "226": "85fd4a84b5393d0e", "227": "97ec841e4f367258", "228": "4654167fd211d027", "229": "8176a164778526f9", "230": "a74925b45b279d6f", "231": "1d230c8fb897098f", "232": "e24cf60bcf607797", "233": "bbcea5ec9d046ac0", "234": "fd158611e3227271", "235": "47e08912fd6cd296", "236": "ecfb692b6f7a1014", "237": "3528c4c8a0e2db61", "238": "8bd25b17ffb7ab6b", "239": "df4cc8f2a19b98fa", "240": "65d822bbba496dee", "241": "e66a941c60456b44", "242": "a7cf02106e992a23", "243": "88604333ff6aa860", "244": "8365b02889fa6cfc", "245": "6e7b82d0387bf16d", "246": "2eef246ebb269184", "247": "f5edd0761d024ff0", "248": "1e833ee596b5ca23", "249": "9fd8a4abf0eb00a3", "250": "e9728eefddbaed5b", "251": "fe8ad8aaa5b6f652", "252": "be78134816511eaf", "253": "4737624cd139d117", "254": "5fcab665dcd75a7d", "255": "33b1870821fb012a", "256": "10992f7331cbdeba", "257": "cef806733796b489", "258": "76578e90353475ed", "259": "04d938f720c1db19", "260": "57931ddf408ceeeb", "261": "b4fbbd4b7a13369e", "262": "d64c6d160a7faed4", "263": "2d1c86501cdb42dd", "264": "131bf974d820052c", "265": "5eb83040a203bd16", "266": "20a2080eac259e2b", "267": "d2a7888a77082d4c", "268": "0598c15fa2a12fad", "269": "88e82bb9fffbe642", "270": "ef2d2abc6e491968", "271": "a1e0a3465632c13a", "272": "e6273a4f9b65952b", "273": "38a03e32ab28113e", "274": "400d2883ce278be7", "275": "a13f9628796dc16a", "276": "6e3ce4714f76f2f9", "277": "de2233c73c628824", "278": "a144dcdc61af17a5", "279": "672ba0ee4d6993c2", "280": "daf108b14eb1d2d5", "281": "a618b7b467aa2c0c", "282": "60a2d42e0373376c", "283": "934bee98555c5f5b", "284": "3a30dd7bf2ececaa", "285": "23c1a365d72c9b86", "286": "3323cd7407922799", "287": "9050a3ebe80326e5", "288": "10d7c8f3898b68e5", "289": "2ce5bbc30db985b5", "290": "2a963843e9a8e153", "291": "28537a0c0fbd566f", "292": "3659ed0b62c213c5", "293": "912cf03978233ef7", "294": "1f3f93ef9e8c069e", "295": "60ce4fcea460e0a6", "296": "7a7f04630a11cc2b", "297": "012420a20e70092c", "298": "aeb6bf58ee605e50", "299": "5a4d1c1ef8bed9bb", "300": "b1d204e97a3c45dc", "301": "c35e392f1594d14e", "302": "1c69dcee9405ce47", "303": "0650b6a561436852", "304": "e195f425def606d0", "305": "19ac29575c50f599", "306": "c556ac339be4aba5", "307": "4ab8ffab1d51ca61", "308": "bcf417101439fd9e", "309": "768db8a3a299f590", "310": "321732baccae846b", "311": "2b8d338593a71266", "312": "8d70190212bda849", "313": "0dd5439f11354ec2", "314": "b0b81cfb9e11502e", "315": "a0fdc688ac30f227", "316": "ac3e207a64344b36", "317": "879780ef88205b22", "318": "2491d05d8bb29ad7", "324": "6c1a09679076ea89"} \ No newline at end of file diff --git a/graphify-out/GRAPH_REPORT.md b/graphify-out/GRAPH_REPORT.md index e54b8e4..42a352b 100644 --- a/graphify-out/GRAPH_REPORT.md +++ b/graphify-out/GRAPH_REPORT.md @@ -1,11 +1,11 @@ # Graph Report - caninairan (2026-08-24) ## Corpus Check -- 544 files · ~1,300,704 words +- 544 files · ~1,300,486 words - Verdict: corpus is large enough that graph structure adds value. ## Summary -- 3905 nodes · 7020 edges · 322 communities (201 shown, 121 thin omitted) +- 3905 nodes · 7028 edges · 320 communities (201 shown, 119 thin omitted) - Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 270 edges (avg confidence: 0.8) - Token cost: 0 input · 0 output @@ -17,9 +17,9 @@ ## Community Hubs (Navigation) - Roles - app.module.ts -- SettingsController +- SmsService - productService.ts -- VetGallery.tsx +- SafeImage.tsx - CmsController - tickets.controller.ts - PaginationDto @@ -27,16 +27,16 @@ - devDependencies - CreateReviewDto - Modal.tsx -- useCartStore -- app-audit-verification.e2e-spec.js -- userStore.ts +- PetProfile.tsx +- main.ts +- lib/services/api.ts - src/services/api.ts - DoctorQueryDto -- RedisService +- AuthService - JwtAuthGuard - ProductsService - CreateVideoDto -- SmsService +- toPersian - UserDashboard.tsx - MenuService - BE-001 @@ -50,7 +50,7 @@ - Button.tsx - WholesaleApplyDto - B2BService -- auth.service.ts +- AuthController - FaqService - راهنمای تست سیستم (Software Testing) - Button @@ -68,16 +68,16 @@ - devDependencies - BlogsController - PrescriptionsController -- SmartAdvisorController -- UsersController +- SmartAdvisorService +- UsersService - UITexts.tsx -- SettingsService +- Orders.tsx - Role & Core Objective - ContactService - compilerOptions - admin.service.ts - CreateEBankCheckoutDto -- OrdersService +- WikiController - dependencies - compilerOptions - ProductPage.tsx @@ -91,7 +91,7 @@ - Operational Rules & Boundaries - WikiController - PetsController -- Orders.tsx +- PaymentService - seo.module.ts - AdminService - 🏢 AI Software Agency — Master Orchestration Protocol v3 @@ -100,29 +100,29 @@ - scripts - dependencies - Role & Core Objective -- UsersService +- auth.service.ts - zibal.service.ts - dependencies -- components/Skeleton.tsx +- HomeClient.tsx - seed-products.ts - SmsLogQueryDto - Reconciled Audit Roles & Assignments -- OrdersController -- lib/services/api.ts +- OrdersService +- app-audit-verification.e2e-spec.js - Phase 3.1 — Human Review Preparation and Master Backlog Critique - getSeoConfig - compilerOptions - prisma - scripts -- AuthController +- HomeController - Deep Audit Summary Report - Operational Rules & Boundaries - jest - Comprehensive Change Log - Coupons.tsx - Operational Rules & Boundaries -- auth.module.ts -- HomeController +- auth.controller.ts +- payment.service.ts - PrismaService - 1. Summary of Integrity Repairs Performed - Operational Rules & Boundaries @@ -159,7 +159,7 @@ - application/package.json - start-dev.js - generate-openapi.js -- PaymentService +- RegisterDto - eslint-config-prettier - System Discovery - Media.tsx @@ -191,10 +191,10 @@ - Phase 3 Audit Traceability Matrix - rebuild_honest_ledger.js - validate_evidence_grade.js -- AuthService +- InitiatePaymentDto - blog/page.tsx - prettier -- PodcastPlayerModal.tsx +- VerifyOtpDto - API Contract Specification - ⚙️ Backend Technical Review (05_dev_backend) - 🎨 Frontend & Admin Panel Technical Review (06_dev_frontend) @@ -239,7 +239,7 @@ - Textarea.tsx - admin-panel/tsconfig.json - ts-jest -- payment.service.ts +- SendOtpDto - next.config.ts - Shabnam Font README - AGENTS.md @@ -307,18 +307,16 @@ - @testing-library/react - @types/react - globals -- RegisterDto +- @types/react-dom - vitest -- InitiatePaymentDto -- AddressDto - track/page.tsx +- BlogsModule +- app/page.tsx - @eslint/js - typescript -- app/page.tsx - search/page.tsx - shop/page.tsx - MaskableField.tsx -- eslint-config-next - typescript-eslint ## God Nodes (most connected - your core abstractions) @@ -350,27 +348,27 @@ - 3-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/store/cartStore.ts -> frontend/application/lib/services/api.ts` - 4-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/store/cartStore.ts -> frontend/application/lib/services/orderService.ts -> frontend/application/lib/services/api.ts` -## Communities (322 total, 121 thin omitted) +## Communities (320 total, 119 thin omitted) ### Community 0 - "Roles" Cohesion: 0.24 Nodes (13): Roles(), PaymentController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get (+5 more) ### Community 1 - "app.module.ts" -Cohesion: 0.07 -Nodes (36): B2BModule, Module, BannersModule, Module, CmsModule, Module, SmsModule, Global (+28 more) +Cohesion: 0.08 +Nodes (34): AdminModule, Module, B2BModule, Module, BannersModule, Module, CmsModule, Module (+26 more) -### Community 2 - "SettingsController" -Cohesion: 0.18 -Nodes (15): SettingsController, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller, Delete (+7 more) +### Community 2 - "SmsService" +Cohesion: 0.06 +Nodes (20): SmsLogQuery, SmsService, Injectable, SettingsController, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags (+12 more) ### Community 3 - "productService.ts" -Cohesion: 0.08 -Nodes (29): BlogPost, CartDrawer(), CatalogPageSpread(), CatalogPageSpreadProps, CategoryMeta, getFormBadge(), getSpeciesBadge(), FlipbookCatalog() (+21 more) +Cohesion: 0.09 +Nodes (25): BlogPost, CatalogPageSpread(), CatalogPageSpreadProps, CategoryMeta, getFormBadge(), getSpeciesBadge(), FlipbookCatalog(), FlipbookCatalogProps (+17 more) -### Community 4 - "VetGallery.tsx" -Cohesion: 0.22 -Nodes (9): DisplayVideoItem, FALLBACK_VIDEOS, TestimonialItem, VetGallery(), PLAYBACK_RATES, VideoModalPlayer(), VideoModalPlayerProps, Video (+1 more) +### Community 4 - "SafeImage.tsx" +Cohesion: 0.09 +Nodes (20): BlogPost, BlogPreviewSection(), OrderDetailsModalProps, PLAYBACK_RATES, PodcastPlayerModal(), PodcastPlayerModalProps, SafeImage(), SafeImageProps (+12 more) ### Community 5 - "CmsController" Cohesion: 0.09 @@ -381,12 +379,12 @@ Cohesion: 0.09 Nodes (29): AdminUpdateTicketDto, CreateTicketDto, ReplyTicketDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString (+21 more) ### Community 7 - "PaginationDto" -Cohesion: 0.05 -Nodes (28): BlogsService, Injectable, BlogsModule, Module, BlogsService, Injectable, PaginationDto, SortOrder (+20 more) +Cohesion: 0.06 +Nodes (17): BlogsService, Injectable, BlogsService, Injectable, PaginationDto, SortOrder, ApiPropertyOptional, IsEnum (+9 more) ### Community 8 - "admin.module.ts" -Cohesion: 0.09 -Nodes (15): AdminModule, Module, ReportsController, ApiBearerAuth, ApiOperation, ApiTags, Controller, Get (+7 more) +Cohesion: 0.10 +Nodes (13): ReportsController, ApiBearerAuth, ApiOperation, ApiTags, Controller, Get, UseGuards, ReportsService (+5 more) ### Community 9 - "devDependencies" Cohesion: 0.22 @@ -400,17 +398,17 @@ Nodes (29): CreateReviewDto, ApiProperty, IsInt, IsNotEmpty, IsOptional, IsStrin Cohesion: 0.07 Nodes (30): ConfirmModal(), ConfirmModalProps, getFileType(), Media, MediaSelector(), MediaSelectorProps, maxWidthClasses, Modal() (+22 more) -### Community 12 - "useCartStore" +### Community 12 - "PetProfile.tsx" +Cohesion: 0.13 +Nodes (15): FeaturedProducts(), ProductCard(), OrderSuccess(), OrderRowSkeleton(), PetProfileSkeleton(), ProductCardSkeleton(), Skeleton(), SkeletonProps (+7 more) + +### Community 13 - "main.ts" Cohesion: 0.12 -Nodes (24): ClientLayout(), ArchiveProductCard(), CheckoutPage(), ProductCard(), Header(), MENU_ICONS, OrderSuccess(), PrescriptionUploadModal() (+16 more) +Nodes (8): AppModule, Module, CustomHttpExceptionFilter, Catch, PrismaExceptionFilter, Catch, DecimalInterceptor, Injectable -### Community 13 - "app-audit-verification.e2e-spec.js" -Cohesion: 0.07 -Nodes (22): AppModule, Module, CustomHttpExceptionFilter, Catch, PrismaExceptionFilter, Catch, DecimalInterceptor, Injectable (+14 more) - -### Community 14 - "userStore.ts" -Cohesion: 0.10 -Nodes (14): AuthModal(), AuthModalProps, extractOtpFromText(), LoginModal(), LoginModalProps, ApiErr, AuthResponse, AuthService (+6 more) +### Community 14 - "lib/services/api.ts" +Cohesion: 0.06 +Nodes (22): ContactInfoItem, PrescriptionUploadModal(), PrescriptionUploadModalProps, api, ApiErrorPayload, baseURL, ApiErr, AuthResponse (+14 more) ### Community 15 - "src/services/api.ts" Cohesion: 0.07 @@ -420,13 +418,13 @@ Nodes (35): Layout(), ProtectedRoute(), MenuGroup, Sidebar(), SidebarProps, SubM Cohesion: 0.09 Nodes (24): DoctorsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+16 more) -### Community 17 - "RedisService" -Cohesion: 0.10 -Nodes (10): ApiExcludeController, MetricsController, Controller, Get, Res, RedisModule, Global, Module (+2 more) +### Community 17 - "AuthService" +Cohesion: 0.16 +Nodes (3): AuthService, Injectable, normalizeMobile() ### Community 18 - "JwtAuthGuard" -Cohesion: 0.20 -Nodes (7): JwtAuthGuard, Injectable, ROLES_KEY, RequestWithUser, RolesGuard, Injectable, UserReqPayload +Cohesion: 0.17 +Nodes (8): JwtAuthGuard, Injectable, B2BWholesaleOrderItem, ROLES_KEY, RequestWithUser, RolesGuard, Injectable, UserReqPayload ### Community 19 - "ProductsService" Cohesion: 0.10 @@ -436,13 +434,17 @@ Nodes (19): GetProductsDto, ApiPropertyOptional, IsEnum, IsOptional, IsString, P Cohesion: 0.07 Nodes (32): CreateVideoDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, UpdateVideoDto (+24 more) +### Community 21 - "toPersian" +Cohesion: 0.15 +Nodes (23): VerifyContent(), ArchiveProductCard(), AuthModal(), AuthModalProps, extractOtpFromText(), B2BPortal(), BackButton(), BackButtonProps (+15 more) + ### Community 22 - "UserDashboard.tsx" -Cohesion: 0.09 -Nodes (32): VerifyContent(), AddressModal(), AddressModalProps, BackButton(), BackButtonProps, BlogPost, BlogPreviewSection(), DeleteConfirmModal() (+24 more) +Cohesion: 0.13 +Nodes (17): AddressModal(), AddressModalProps, DeleteConfirmModal(), DeleteConfirmModalProps, OrderDetailsModal(), SearchableSelect(), SearchableSelectProps, PRESET_AMOUNTS (+9 more) ### Community 23 - "MenuService" -Cohesion: 0.12 -Nodes (16): MenuController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete (+8 more) +Cohesion: 0.11 +Nodes (18): MenuController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete (+10 more) ### Community 24 - "BE-001" Cohesion: 0.06 @@ -488,9 +490,9 @@ Nodes (20): ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, Cohesion: 0.14 Nodes (14): B2BController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param (+6 more) -### Community 35 - "auth.service.ts" -Cohesion: 0.08 -Nodes (25): AdminLoginInput, LoginInput, RegisterInput, AdminLoginDto, ApiProperty, IsEmail, IsNotEmpty, IsString (+17 more) +### Community 35 - "AuthController" +Cohesion: 0.25 +Nodes (12): AuthController, ApiBadRequestResponse, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+4 more) ### Community 36 - "FaqService" Cohesion: 0.12 @@ -550,7 +552,7 @@ Nodes (19): autoprefixer, devDependencies, autoprefixer, eslint, @eslint/js, glo ### Community 50 - "devDependencies" Cohesion: 0.13 -Nodes (15): devDependencies, eslint, jsdom, tailwindcss, @tailwindcss/postcss, @types/node, @types/react-dom, @vitejs/plugin-react (+7 more) +Nodes (15): eslint-config-next, devDependencies, eslint, eslint-config-next, jsdom, tailwindcss, @tailwindcss/postcss, @types/node (+7 more) ### Community 51 - "BlogsController" Cohesion: 0.14 @@ -560,21 +562,21 @@ Nodes (16): BlogsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Bod Cohesion: 0.16 Nodes (12): PrescriptionsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param (+4 more) -### Community 53 - "SmartAdvisorController" -Cohesion: 0.14 -Nodes (12): SmartAdvisorController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+4 more) +### Community 53 - "SmartAdvisorService" +Cohesion: 0.11 +Nodes (16): SmartAdvisorController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+8 more) -### Community 54 - "UsersController" -Cohesion: 0.21 -Nodes (16): ApiBadRequestResponse, ApiBearerAuth, ApiCreatedResponse, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+8 more) +### Community 54 - "UsersService" +Cohesion: 0.05 +Nodes (42): DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), AuthModule, Module, JwtPayload, JwtStrategy, Injectable (+34 more) ### Community 55 - "UITexts.tsx" Cohesion: 0.10 Nodes (18): ICON_REGISTRY, IconPickerModal(), IconPickerModalProps, COLORS, RichTextEditor(), RichTextEditorProps, ToggleSwitch(), ToggleSwitchProps (+10 more) -### Community 56 - "SettingsService" -Cohesion: 0.10 -Nodes (3): SmsLogQuery, SettingsService, Injectable +### Community 56 - "Orders.tsx" +Cohesion: 0.09 +Nodes (20): Pagination(), PaginationProps, Skeleton(), getPaymentMethodLabel(), Order, ORDER_STATUS_MAP, OrderItem, Orders() (+12 more) ### Community 57 - "Role & Core Objective" Cohesion: 0.09 @@ -596,9 +598,9 @@ Nodes (14): CouponInput, CouponTargetInput, PaginationQuery, CreateUserDto, ApiP Cohesion: 0.22 Nodes (8): CreateEBankCheckoutDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsNumber, IsOptional, IsString, Min -### Community 62 - "OrdersService" -Cohesion: 0.09 -Nodes (19): CreateOrderDto, OrderItemDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional (+11 more) +### Community 62 - "WikiController" +Cohesion: 0.13 +Nodes (13): ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, Param, Query (+5 more) ### Community 63 - "dependencies" Cohesion: 0.10 @@ -617,8 +619,8 @@ Cohesion: 0.12 Nodes (8): ApiOperation, ApiQuery, Get, Query, AdminQueryDto, ApiPropertyOptional, IsOptional, IsString ### Community 67 - "PetsController" -Cohesion: 0.11 -Nodes (13): PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+5 more) +Cohesion: 0.10 +Nodes (14): PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+6 more) ### Community 68 - "BlogsController" Cohesion: 0.17 @@ -652,10 +654,6 @@ Nodes (14): ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, De Cohesion: 0.05 Nodes (47): CreateHealthLogDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, CreatePetDto, ApiProperty (+39 more) -### Community 76 - "Orders.tsx" -Cohesion: 0.09 -Nodes (20): Pagination(), PaginationProps, Skeleton(), getPaymentMethodLabel(), Order, ORDER_STATUS_MAP, OrderItem, Orders() (+12 more) - ### Community 77 - "seo.module.ts" Cohesion: 0.16 Nodes (10): SeoController, ApiOperation, ApiTags, Controller, Get, Param, SeoModule, Module (+2 more) @@ -688,9 +686,9 @@ Nodes (21): dependencies, axios, lucide-react, react, react-dom, react-hot-toast Cohesion: 0.12 Nodes (16): 1. Active Secret Scanning (All Modified Files), 2. Docker Container Verification (if Dockerfile exists), 3. CI/CD Basic Check (if `.github/workflows/` exists), 4. Failure Routing Protocol, 5. Forbidden Actions, ENFORCE MODE — Normal Operation, Expected JSON Output Schema, Operational Rules & Boundaries (+8 more) -### Community 85 - "UsersService" -Cohesion: 0.12 -Nodes (10): normalizeMobile(), ApiPropertyOptional, IsEmail, IsOptional, IsString, MinLength, UpdateProfileDto, Injectable (+2 more) +### Community 85 - "auth.service.ts" +Cohesion: 0.15 +Nodes (8): AdminLoginInput, LoginInput, RegisterInput, RedisModule, Global, Module, RedisService, Injectable ### Community 86 - "zibal.service.ts" Cohesion: 0.16 @@ -700,9 +698,9 @@ Nodes (9): GatewayHealthResult, IPaymentGateway, PaymentInquiryResult, PaymentRe Cohesion: 0.12 Nodes (17): dependencies, axios, lucide-react, motion, next, react, react-dom, sonner (+9 more) -### Community 88 - "components/Skeleton.tsx" -Cohesion: 0.29 -Nodes (5): OrderRowSkeleton(), PetProfileSkeleton(), ProductCardSkeleton(), Skeleton(), SkeletonProps +### Community 88 - "HomeClient.tsx" +Cohesion: 0.14 +Nodes (17): HomeClient(), HomeClientProps, CATEGORY_MAP, ICON_MAP, BannerPlacement(), BannerPlacementProps, Hero(), StatCounter() (+9 more) ### Community 89 - "seed-products.ts" Cohesion: 0.17 @@ -716,13 +714,13 @@ Nodes (7): SmsLogQueryDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional, IsSt Cohesion: 0.12 Nodes (15): 10. Documentation Engineer, 1. Lead Architect / Orchestrator, 2. React / Vite Storefront Auditor, 3. NestJS Backend Auditor, 4. Admin Features Auditor, 5. Database & Data Integrity Auditor, 6. Security Auditor, 7. TypeScript & Code Quality Auditor (+7 more) -### Community 92 - "OrdersController" -Cohesion: 0.13 -Nodes (16): OrdersController, ApiBadRequestResponse, ApiBearerAuth, ApiCreatedResponse, ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags (+8 more) +### Community 92 - "OrdersService" +Cohesion: 0.08 +Nodes (29): CreateOrderDto, OrderItemDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional (+21 more) -### Community 93 - "lib/services/api.ts" -Cohesion: 0.11 -Nodes (13): B2BPortal(), ContactInfoItem, api, ApiErrorPayload, baseURL, ApiErr, Order, OrderItem (+5 more) +### Community 93 - "app-audit-verification.e2e-spec.js" +Cohesion: 0.13 +Nodes (14): ApiErrorResponse, ErrorDetailField, ApiProperty, app_module_1, client_1, common_1, decimal_interceptor_1, fs (+6 more) ### Community 94 - "Phase 3.1 — Human Review Preparation and Master Backlog Critique" Cohesion: 0.13 @@ -740,9 +738,9 @@ Nodes (32): compilerOptions, allowJs, esModuleInterop, incremental, isolatedModu Cohesion: 0.14 Nodes (14): scripts, build, build:nest, docs:generate, lint, start, start:debug, start:dev (+6 more) -### Community 99 - "AuthController" -Cohesion: 0.27 -Nodes (12): AuthController, ApiBadRequestResponse, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+4 more) +### Community 99 - "HomeController" +Cohesion: 0.16 +Nodes (10): HomeController, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, HomeModule, Module (+2 more) ### Community 100 - "Deep Audit Summary Report" Cohesion: 0.14 @@ -768,17 +766,17 @@ Nodes (13): formatPriceWithCommas(), PriceInput(), PriceInputProps, toEnglishDig Cohesion: 0.17 Nodes (11): 1. Detect Test Runner from Tech Stack, 2. Execution Output Capture (Mandatory), 3. Acceptance Criteria Verification, 4. Failure Routing Protocol, 5. Success Routing Protocol, 6. Forbidden Actions, Expected JSON Output Schema, Operational Rules & Boundaries (+3 more) -### Community 106 - "auth.module.ts" -Cohesion: 0.15 -Nodes (10): DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), AuthModule, Module, JwtPayload, JwtStrategy, Injectable (+2 more) - -### Community 107 - "HomeController" +### Community 106 - "auth.controller.ts" Cohesion: 0.16 -Nodes (10): HomeController, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, HomeModule, Module (+2 more) +Nodes (11): AdminLoginDto, ApiProperty, IsEmail, IsNotEmpty, IsString, MinLength, LoginDto, ApiProperty (+3 more) + +### Community 107 - "payment.service.ts" +Cohesion: 0.20 +Nodes (8): AdminTransactionFilterDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional, IsString, Type, ClientMetadata ### Community 108 - "PrismaService" Cohesion: 0.07 -Nodes (21): PetQuery, B2BWholesaleOrderItem, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions, SmsConfig, CreateContactSubmissionDto, UpdateContactInfoItemDto (+13 more) +Nodes (22): ApiExcludeController, MetricsController, Controller, Get, Res, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions (+14 more) ### Community 109 - "1. Summary of Integrity Repairs Performed" Cohesion: 0.17 @@ -900,6 +898,10 @@ Nodes (7): backend, distMainPath, fs, http, path, { spawn, execSync }, waitForBa Cohesion: 0.25 Nodes (6): app_module_1, core_1, fs, path, swagger_1, yaml +### Community 144 - "RegisterDto" +Cohesion: 0.22 +Nodes (8): RegisterDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty, IsOptional, IsString, MinLength + ### Community 146 - "System Discovery" Cohesion: 0.25 Nodes (7): Active Core Applications, Current Architecture, Evidence-Based Status Matrix, Excluded / Non-Auditable Artifacts, Major Business Domains Discovered, System Discovery, Technical Architecture Summary @@ -992,13 +994,17 @@ Nodes (4): evidenceList, ledger, mandatoryMap, mandatoryScope Cohesion: 0.40 Nodes (4): activeFiles, errors, validationOutput, warnings +### Community 176 - "InitiatePaymentDto" +Cohesion: 0.43 +Nodes (7): InitiatePaymentDto, InitiateWalletTopupDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString + ### Community 177 - "blog/page.tsx" Cohesion: 0.50 Nodes (4): Blog(), generateMetadata(), getBlogs(), BlogPage() -### Community 179 - "PodcastPlayerModal.tsx" -Cohesion: 0.40 -Nodes (3): PLAYBACK_RATES, PodcastPlayerModal(), PodcastPlayerModalProps +### Community 179 - "VerifyOtpDto" +Cohesion: 0.29 +Nodes (6): ApiProperty, IsNotEmpty, IsString, Matches, VerifyOtpDto, Length ### Community 180 - "API Contract Specification" Cohesion: 0.50 @@ -1041,8 +1047,8 @@ Cohesion: 0.50 Nodes (3): Select, SelectOption, SelectProps ### Community 199 - "useSettingsStore" -Cohesion: 0.08 -Nodes (32): HomeClient(), HomeClientProps, CATEGORY_MAP, ICON_MAP, BannerPlacement(), BannerPlacementProps, BrandLogo(), BrandLogoProps (+24 more) +Cohesion: 0.11 +Nodes (22): ClientLayout(), BrandLogo(), BrandLogoProps, EnamadBadge(), FAQItem, FAQSection(), Footer(), MENU_ICONS (+14 more) ### Community 200 - "application/README.md" Cohesion: 0.50 @@ -1056,57 +1062,49 @@ Nodes (3): COMPOSE_DOCKER_CLI_BUILD, DOCKER_BUILDKIT, deploy.sh script Cohesion: 0.67 Nodes (3): ADR-AUTH-001: Admin Panel Authentication Architecture & Token Management, Master Task Backlog (Phase 3.3), Phase 3 Master Execution Plan -### Community 224 - "payment.service.ts" -Cohesion: 0.20 -Nodes (8): AdminTransactionFilterDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional, IsString, Type, ClientMetadata +### Community 224 - "SendOtpDto" +Cohesion: 0.33 +Nodes (5): SendOtpDto, ApiProperty, IsNotEmpty, IsString, Matches ### Community 226 - "Shabnam Font README" Cohesion: 0.67 Nodes (3): Shabnam Font README, Shabnam Font Sample, Vazir Font ### Community 298 - ".initiateOrderPayment" -Cohesion: 0.15 +Cohesion: 0.18 Nodes (10): ApiPropertyOptional, IsOptional, IsString, ZibalCallbackQueryDto, ApiBadRequestResponse, ApiOkResponse, Req, Res (+2 more) ### Community 301 - "app.e2e-spec.js" Cohesion: 0.50 Nodes (3): app_module_1, supertest_1, testing_1 -### Community 307 - "RegisterDto" -Cohesion: 0.22 -Nodes (8): RegisterDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty, IsOptional, IsString, MinLength +### Community 312 - "BlogsModule" +Cohesion: 0.33 +Nodes (4): BlogsModule, Module, OrdersModule, Module -### Community 311 - "InitiatePaymentDto" -Cohesion: 0.43 -Nodes (7): InitiatePaymentDto, InitiateWalletTopupDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString - -### Community 312 - "AddressDto" -Cohesion: 0.29 -Nodes (7): AddressDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString - -### Community 316 - "app/page.tsx" +### Community 313 - "app/page.tsx" Cohesion: 0.67 Nodes (3): generateMetadata(), getHomeData(), Home() ## Knowledge Gaps - **1278 isolated node(s):** `$schema`, `collection`, `sourceRoot`, `deleteOutDir`, `name` (+1273 more) These have ≤1 connection - possible missing edges or undocumented components. -- **121 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. +- **119 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. ## Suggested Questions _Questions this graph is uniquely positioned to answer:_ -- **Why does `ApiResponse` connect `src/services/api.ts` to `AuthController`, `BlogsController`, `PaginationDto`, `HomeController`, `PetsController`, `ProductsService`, `UsersController`, `OrdersController`?** +- **Why does `ApiResponse` connect `src/services/api.ts` to `HomeController`, `AuthController`, `BlogsController`, `PetsController`, `ProductsService`, `UsersService`, `OrdersService`, `WikiController`?** _High betweenness centrality (0.065) - this node is a cross-community bridge._ -- **Why does `Roles()` connect `Roles` to `WholesaleApplyDto`, `B2BService`, `SettingsController`, `FaqService`, `CmsController`, `tickets.controller.ts`, `SslController`, `BannersService`, `CreateReviewDto`, `TestimonialsService`, `IngredientsService`, `JwtAuthGuard`, `ProductsService`, `PrescriptionsController`, `SmartAdvisorController`, `MenuService`, `ContactService`?** +- **Why does `Roles()` connect `Roles` to `WholesaleApplyDto`, `B2BService`, `SmsService`, `FaqService`, `CmsController`, `tickets.controller.ts`, `SslController`, `BannersService`, `CreateReviewDto`, `TestimonialsService`, `IngredientsService`, `JwtAuthGuard`, `ProductsService`, `PrescriptionsController`, `SmartAdvisorService`, `MenuService`, `ContactService`?** _High betweenness centrality (0.064) - this node is a cross-community bridge._ -- **Why does `JwtAuthGuard` connect `JwtAuthGuard` to `PetsController`, `auth.service.ts`, `CmsController`, `tickets.controller.ts`, `CategoriesController`, `MediaController`, `PaginationDto`, `admin.module.ts`, `PetsController`, `DoctorQueryDto`, `ProductsService`, `CreateVideoDto`, `UsersService`, `admin.service.ts`, `OrdersService`?** +- **Why does `JwtAuthGuard` connect `JwtAuthGuard` to `PetsController`, `CmsController`, `tickets.controller.ts`, `CategoriesController`, `MediaController`, `PaginationDto`, `admin.module.ts`, `auth.controller.ts`, `PetsController`, `DoctorQueryDto`, `ProductsService`, `CreateVideoDto`, `UsersService`, `admin.service.ts`?** _High betweenness centrality (0.036) - this node is a cross-community bridge._ - **What connects `$schema`, `collection`, `sourceRoot` to the rest of the system?** _1278 weakly-connected nodes found - possible documentation gaps or missing edges._ - **Should `app.module.ts` be split into smaller, more focused modules?** - _Cohesion score 0.06988120195667366 - nodes in this community are weakly interconnected._ + _Cohesion score 0.07510204081632653 - nodes in this community are weakly interconnected._ +- **Should `SmsService` be split into smaller, more focused modules?** + _Cohesion score 0.060542309490416085 - nodes in this community are weakly interconnected._ - **Should `productService.ts` be split into smaller, more focused modules?** - _Cohesion score 0.07826694619147449 - nodes in this community are weakly interconnected._ -- **Should `CmsController` be split into smaller, more focused modules?** - _Cohesion score 0.0899854862119013 - nodes in this community are weakly interconnected._ \ No newline at end of file + _Cohesion score 0.08888888888888889 - nodes in this community are weakly interconnected._ \ No newline at end of file diff --git a/graphify-out/cache/stat-index.json b/graphify-out/cache/stat-index.json index 9d8d465..579f0ce 100644 --- a/graphify-out/cache/stat-index.json +++ b/graphify-out/cache/stat-index.json @@ -1 +1 @@ -{".ai_agency/AGENCY.md":{"size":9028,"mtime_ns":1787419446973998900,"indexed_at_ns":1787520278641360800,"word_count":1161,"hashes":{".ai_agency/agency.md":"419a5d069432d03a601bfac149b2d2f83503bb72305dde6fe8778c851905002c"}},".ai_agency/agents/00_intake.md":{"size":3937,"mtime_ns":1787419446976000700,"indexed_at_ns":1787520278643539300,"word_count":500,"hashes":{".ai_agency/agents/00_intake.md":"db6562ff1e71d694791926909918643bdd0ef004207f562fd305bd0e212fcda2"}},".ai_agency/agents/01_auditor.md":{"size":3747,"mtime_ns":1787419446977999600,"indexed_at_ns":1787520278645694700,"word_count":467,"hashes":{".ai_agency/agents/01_auditor.md":"6a4613fb397adee1bcd064abc006927bf553ad674f5dfb493076b4966842c23c"}},".ai_agency/agents/02_ceo.md":{"size":2415,"mtime_ns":1787419446978998700,"indexed_at_ns":1787520278648790200,"word_count":294,"hashes":{".ai_agency/agents/02_ceo.md":"bd91670156b112ddb58752a0bd544281a0dee02b00e0899c18004ec09d0de106"}},".ai_agency/agents/03_product_manager.md":{"size":8634,"mtime_ns":1787419446983997500,"indexed_at_ns":1787520278651520800,"word_count":1076,"hashes":{".ai_agency/agents/03_product_manager.md":"87507389cdea75d162d950a26affd8e22ffbff8363b7031d40a14b593c96e722"}},".ai_agency/agents/04_architect.md":{"size":3715,"mtime_ns":1787419446984998400,"indexed_at_ns":1787520278653512000,"word_count":448,"hashes":{".ai_agency/agents/04_architect.md":"24065a334205689166fc397ec3a8d454e8ca752fc19084835903ef9f0493b9d5"}},".ai_agency/agents/05_dev_backend.md":{"size":7342,"mtime_ns":1787419446985999300,"indexed_at_ns":1787520278655289800,"word_count":953,"hashes":{".ai_agency/agents/05_dev_backend.md":"26961abd8210248a04f8cd5ad4141181ac17da826c694746f37b6b0ea9c5a298"}},".ai_agency/agents/06_dev_frontend.md":{"size":7731,"mtime_ns":1787419446988001600,"indexed_at_ns":1787520278657100600,"word_count":1011,"hashes":{".ai_agency/agents/06_dev_frontend.md":"427be2a0d417fdbef1c13ebdb4941497f3f91d46599ba397caf2da55bb8a4240"}},".ai_agency/agents/07_qa_engineer.md":{"size":3881,"mtime_ns":1787419446988997900,"indexed_at_ns":1787520278658830600,"word_count":507,"hashes":{".ai_agency/agents/07_qa_engineer.md":"90fb670935947163a8b97bb3c100d0df75cf86664abd786d73e6a72927562209"}},".ai_agency/agents/08_visual_qa.md":{"size":8119,"mtime_ns":1787419446989998700,"indexed_at_ns":1787520278660586600,"word_count":1121,"hashes":{".ai_agency/agents/08_visual_qa.md":"66d5f6879d897cbc046d7edfedaab77711bf119b6c35a899dc8e1df67f068eba"}},".ai_agency/agents/09_devops_security.md":{"size":7017,"mtime_ns":1787419446991997800,"indexed_at_ns":1787520278662363700,"word_count":908,"hashes":{".ai_agency/agents/09_devops_security.md":"a4c06b4dbf07bae2b25f2efbf8c4ad64aec358ae9d914e454eea395ed701f80b"}},".ai_agency/agents/10_tech_writer.md":{"size":3235,"mtime_ns":1787419446992998300,"indexed_at_ns":1787520278665525800,"word_count":408,"hashes":{".ai_agency/agents/10_tech_writer.md":"7e1f2b60a65bb3191380b350c5bb8ab2889cea16c34261ed91ef5529e2d6b6e9"}},".ai_agency/agents/11_deploy.md":{"size":4089,"mtime_ns":1787419446994001600,"indexed_at_ns":1787520278668033500,"word_count":537,"hashes":{".ai_agency/agents/11_deploy.md":"c7cfe31a24b65c8e89d0e4c7a134b2c01bd66762e6874aa4bc955d9d9beade8a"}},".ai_agency/agents/12_seo_content.md":{"size":11249,"mtime_ns":1787419446994998500,"indexed_at_ns":1787520278669809700,"word_count":1539,"hashes":{".ai_agency/agents/12_seo_content.md":"189188c594d07159bc98b00bcb97a66c84ea87b7dcdc65c02dd96ce935ff6eca"}},".ai_agency/memory/agent_outputs/README.txt":{"size":298,"mtime_ns":1787419446997998600,"indexed_at_ns":1787520266778104600,"word_count":34},".ai_agency/memory/backlog.json":{"size":10895,"mtime_ns":1787419446998998900,"indexed_at_ns":1787520278465554800,"word_count":981,"hashes":{".ai_agency/memory/backlog.json":"95e141415663b03ce16946e6c6bcfbd962f8ac1474b6a0785797161873cf586c"}},".ai_agency/memory/scratchpad.md":{"size":1906,"mtime_ns":1787419446999999100,"indexed_at_ns":1787520278671594300,"word_count":249,"hashes":{".ai_agency/memory/scratchpad.md":"eeef059b96cbc7a23787e9d12828e0f3db0285d360d9f95c62c37b4e8b47b0fd"}},".ai_agency/memory/state.json":{"size":3743,"mtime_ns":1787419447001997500,"indexed_at_ns":1787520278537642100,"word_count":254,"hashes":{".ai_agency/memory/state.json":"6f73fc83efee902d4c986ca55d2e8917c0994a150e8f8ac9861671485397c5ba"}},".ai_agency/orchestrate.py":{"size":6997,"mtime_ns":1787419447002999400,"indexed_at_ns":1787520278540789600,"word_count":644,"hashes":{".ai_agency/orchestrate.py":"fd939a485bcf44a2222bdc5d4c671a981f0cef6bfefc5643eb5b61def4ccbac4"}},".ai_agency/specs/api_contract.md":{"size":1571,"mtime_ns":1787419447005004500,"indexed_at_ns":1787520278673727600,"word_count":139,"hashes":{".ai_agency/specs/api_contract.md":"5f8e3ad984c7828277123b5a5407a24edfd0b1f9d4f30058a0b290492efd64b0"}},".ai_agency/specs/architecture_spec.md":{"size":819,"mtime_ns":1787419447006999200,"indexed_at_ns":1787520278676598400,"word_count":99,"hashes":{".ai_agency/specs/architecture_spec.md":"eb667e7396a4a90e50fe6ad0820ea59800ed284f5bbc7429315fa6f7a34c34be"}},".ai_agency/specs/prd.md":{"size":740,"mtime_ns":1787419447007999200,"indexed_at_ns":1787520278678850600,"word_count":96,"hashes":{".ai_agency/specs/prd.md":"aa77302fe0618e9511b9a233ed2d76ecfbb76813f7f0259fa7ed4d75585e4c40"}},".ai_agency/specs/project_health.md":{"size":458,"mtime_ns":1787419447009736900,"indexed_at_ns":1787520278681727500,"word_count":65,"hashes":{".ai_agency/specs/project_health.md":"d13e03cbbf9fe5c6ff99ab512bd5a0a02984233570fbfdb508c30a1ebabed2db"}},".ai_agency/specs/reviews/README.md":{"size":1044,"mtime_ns":1787419447011261700,"indexed_at_ns":1787520278684070700,"word_count":117,"hashes":{".ai_agency/specs/reviews/readme.md":"c55635a378ebb9823bd4256d104ca92ae586c6e9bb6056bca009e67d3f384e1f"}},".ai_agency/specs/reviews/backend_review.md":{"size":1448,"mtime_ns":1787419447012264300,"indexed_at_ns":1787520278685995200,"word_count":172,"hashes":{".ai_agency/specs/reviews/backend_review.md":"8b7a51ba013db5f162e200ab2ab3d51d0063c8ef9ba2a3cce497dccc925926c7"}},".ai_agency/specs/reviews/code_health_review.md":{"size":2215,"mtime_ns":1787419447013263300,"indexed_at_ns":1787520278687984800,"word_count":279,"hashes":{".ai_agency/specs/reviews/code_health_review.md":"d4b6c645ee75ae52a535bf64845a5bfe047f5891d024896a58e3c6d425849915"}},".ai_agency/specs/reviews/frontend_review.md":{"size":1468,"mtime_ns":1787419447015262500,"indexed_at_ns":1787520278689869700,"word_count":183,"hashes":{".ai_agency/specs/reviews/frontend_review.md":"d7249fe1175eba43749fc57398a558650755e6842ed63faf7abd6f91f1de8116"}},".ai_agency/specs/reviews/security_review.md":{"size":888,"mtime_ns":1787419447016262600,"indexed_at_ns":1787520278691724100,"word_count":110,"hashes":{".ai_agency/specs/reviews/security_review.md":"e2a96e1039dbed88d88958935be248025b2504e9a0caa035d0e264d778dd4a7a"}},".ai_agency/specs/reviews/seo_content_review.md":{"size":1252,"mtime_ns":1787419447017266500,"indexed_at_ns":1787520278693494500,"word_count":156,"hashes":{".ai_agency/specs/reviews/seo_content_review.md":"b9a251adaafd57872d56b2283d827104ef63025823ad38ff374d382fa84c01c2"}},".ai_agency/specs/reviews/ux_review.md":{"size":1145,"mtime_ns":1787419447018267300,"indexed_at_ns":1787520278695241700,"word_count":150,"hashes":{".ai_agency/specs/reviews/ux_review.md":"d034efd98211f598a3b3d3116e2c73a962728cd5ef9e79db7d4d1aa577550f8b"}},".claude/CLAUDE.md":{"size":229,"mtime_ns":1787419447024264200,"indexed_at_ns":1787520278702609900,"word_count":29,"hashes":{".claude/claude.md":"bc13fe68ca2c17442410eba331059e731c5c83c4ea036819b6555449f2f9bd3e"}},".claude/settings.json":{"size":502,"mtime_ns":1787419447025263400,"indexed_at_ns":1787520278543409400,"word_count":38,"hashes":{".claude/settings.json":"7f1d3686b704c4ea28478db0f136f7ad02ad4c443d1d61547195eb41b386e194"}},".claude/skills/graphify/SKILL.md":{"size":44042,"mtime_ns":1787419447029275000,"indexed_at_ns":1787520278704568500,"word_count":5442,"hashes":{".claude/skills/graphify/skill.md":"2a3c9bb17a09ce8ab84d8d1d8da4db0a7d8eae6c870f7ca5314bae1ae58de8e0"}},".claude/skills/graphify/references/add-watch.md":{"size":2542,"mtime_ns":1787419447031276300,"indexed_at_ns":1787520278706743200,"word_count":366,"hashes":{".claude/skills/graphify/references/add-watch.md":"8181d191224cb763e5784fe015ed8b1dcc6c8625efcbbd3b785da24b353da220"}},".claude/skills/graphify/references/exports.md":{"size":3449,"mtime_ns":1787419447034275400,"indexed_at_ns":1787520278708552700,"word_count":470,"hashes":{".claude/skills/graphify/references/exports.md":"d07d2aecc629f8cbfd15d461c635e493f89cd34a90dff941e2c6998977e5d923"}},".claude/skills/graphify/references/extraction-spec.md":{"size":8030,"mtime_ns":1787419447036274700,"indexed_at_ns":1787520278710326500,"word_count":1038,"hashes":{".claude/skills/graphify/references/extraction-spec.md":"4d769f6da15f3fc8dc001f47d99244de39b5218ac8b977c271f3de6c98696fe6"}},".claude/skills/graphify/references/github-and-merge.md":{"size":2223,"mtime_ns":1787419447037274400,"indexed_at_ns":1787520278712109700,"word_count":271,"hashes":{".claude/skills/graphify/references/github-and-merge.md":"892589dad2e5e8bb0a9319333331c551a68d27392f936733b984cbfc9c70e0cf"}},".claude/skills/graphify/references/hooks.md":{"size":1300,"mtime_ns":1787419447039277700,"indexed_at_ns":1787520278714790900,"word_count":193,"hashes":{".claude/skills/graphify/references/hooks.md":"b7dcbbe385d7c6dde267cb5ce91038545bbd733d23b45d96ec2fe40773c9fce2"}},".claude/skills/graphify/references/query.md":{"size":13767,"mtime_ns":1787419447040275100,"indexed_at_ns":1787520278717211300,"word_count":1763,"hashes":{".claude/skills/graphify/references/query.md":"18db36ad456be9d3e87d43dcbe2607ed92f9721baf404daa23127ec9fb489855"}},".claude/skills/graphify/references/transcribe.md":{"size":3225,"mtime_ns":1787419447041274700,"indexed_at_ns":1787520278719217500,"word_count":418,"hashes":{".claude/skills/graphify/references/transcribe.md":"55ecbf088adf1eef94050990e84a3e0f3f76096b666f6bc4a15a7c7da8806fcf"}},".claude/skills/graphify/references/update.md":{"size":10635,"mtime_ns":1787419447042275400,"indexed_at_ns":1787520278721243800,"word_count":1196,"hashes":{".claude/skills/graphify/references/update.md":"5720beed29b64651edc4ff7c3d2f865a1d30d08124b7ef07dbe7b00999700d0a"}},".gitea/scripts/with-vpn.sh":{"size":1875,"mtime_ns":1787419447047506900,"indexed_at_ns":1787520278545581100,"word_count":208,"hashes":{".gitea/scripts/with-vpn.sh":"a923cdd692e23d866cdd55342357fe8206913679d290ae20e0a35da35a47f095"}},".gitea/workflows/deploy.yml":{"size":1023,"mtime_ns":1787419447049014600,"indexed_at_ns":1787520267522986900,"word_count":84},"BACKEND_INTEGRATION.md":{"size":15974,"mtime_ns":1787419447053027100,"indexed_at_ns":1787520267554177700,"word_count":1521},"CLAUDE.md":{"size":781,"mtime_ns":1787419447055051200,"indexed_at_ns":1787520278725265000,"word_count":106,"hashes":{"claude.md":"b5a5237f0dd262308961666186afbe48d20e935dfee4ce03b818c7badbca2cc4"}},"DATABASE_SCHEMA.md":{"size":15717,"mtime_ns":1787419447057124600,"indexed_at_ns":1787520267564022100,"word_count":1566},"README.md":{"size":13252,"mtime_ns":1787419447060138000,"indexed_at_ns":1787520267573420000,"word_count":1310},"backend/README.md":{"size":5126,"mtime_ns":1787419447065137500,"indexed_at_ns":1787520278727175300,"word_count":472,"hashes":{"backend/readme.md":"7e49cd355cede75cdef66c98512212d7b0f91326608e0d31885a8916874eeb4e"}},"backend/eslint.config.mjs":{"size":1700,"mtime_ns":1787419447066140000,"indexed_at_ns":1787520267620176300,"word_count":104},"backend/nest-cli.json":{"size":180,"mtime_ns":1787419447067137000,"indexed_at_ns":1787520278552283800,"word_count":13,"hashes":{"backend/nest-cli.json":"3c187936b9c3a4045b6bc0d54a24603888a9130df6d2927e54a2f3aec07f5e95"}},"backend/package.json":{"size":2852,"mtime_ns":1787419447076000100,"indexed_at_ns":1787520278554828200,"word_count":205,"hashes":{"backend/package.json":"3f2173a31aa98485082f973a7bf8b6b74d2827a2383876ceba9ee86a911be4d1"}},"backend/prisma/migrations/20260526145407_init/migration.sql":{"size":9223,"mtime_ns":1787419447078999200,"indexed_at_ns":1787520278556747300,"word_count":936,"hashes":{"backend/prisma/migrations/20260526145407_init/migration.sql":"29255eee9143f13de17eeb0d3d5201f7d6cd8ae07913806ef8eefad7db0f7929"}},"backend/prisma/migrations/20260526160916_add_ui_texts_and_scientific_terms/migration.sql":{"size":421,"mtime_ns":1787419447080998800,"indexed_at_ns":1787520278558592100,"word_count":48,"hashes":{"backend/prisma/migrations/20260526160916_add_ui_texts_and_scientific_terms/migration.sql":"ac5847950275b508553dd4e1386acca13c8af3df9316c075c98ffd362a572dfd"}},"backend/prisma/scientificTerms.ts":{"size":24708,"mtime_ns":1787419447085002100,"indexed_at_ns":1787520267651706800,"word_count":2294},"backend/prisma/seed-blogs.ts":{"size":7063,"mtime_ns":1787419447087463800,"indexed_at_ns":1787520267656873600,"word_count":620},"backend/prisma/seed-custom.ts":{"size":3957,"mtime_ns":1787419447091476000,"indexed_at_ns":1787520267661249800,"word_count":371},"backend/prisma/seed-home.ts":{"size":3977,"mtime_ns":1787419447092476800,"indexed_at_ns":1787520267666464800,"word_count":374},"backend/prisma/seed-products-data.json":{"size":59766,"mtime_ns":1787419447095477600,"indexed_at_ns":1787520278560328600,"word_count":5730,"hashes":{"backend/prisma/seed-products-data.json":"6ba05ec168a63218a626e2dff118d53be9b8314a3e211bc9c337c00d9d38869f"}},"backend/prisma/seed-products.ts":{"size":28816,"mtime_ns":1787419447097477600,"indexed_at_ns":1787520267676935000,"word_count":2063},"backend/prisma/seed-ui-texts.ts":{"size":9349,"mtime_ns":1787419447099025300,"indexed_at_ns":1787520267682389500,"word_count":755},"backend/prisma/seed-wiki.ts":{"size":24451,"mtime_ns":1787419447100495200,"indexed_at_ns":1787520267687174100,"word_count":2292},"backend/prisma/seed.ts":{"size":31033,"mtime_ns":1787419447104780000,"indexed_at_ns":1787520267692082000,"word_count":2636},"backend/prisma/tsconfig.seed.json":{"size":204,"mtime_ns":1787419447108232900,"indexed_at_ns":1787520278564924500,"word_count":17,"hashes":{"backend/prisma/tsconfig.seed.json":"cba40494ca979cbf0017c51b84bebf8a5e2c80b6ae0ff4ebf76d23a02d5071ec"}},"backend/scripts/generate-openapi.ts":{"size":1431,"mtime_ns":1787419447116702900,"indexed_at_ns":1787520267718744800,"word_count":128},"backend/src/admin/admin.controller.spec.ts":{"size":613,"mtime_ns":1787419447121003600,"indexed_at_ns":1787520267723736000,"word_count":59},"backend/src/admin/admin.controller.ts":{"size":10012,"mtime_ns":1787503865775740200,"indexed_at_ns":1787520267728523200,"word_count":966},"backend/src/admin/admin.module.ts":{"size":1464,"mtime_ns":1787419447123018500,"indexed_at_ns":1787520267735044600,"word_count":145},"backend/src/admin/admin.service.spec.ts":{"size":706,"mtime_ns":1787419447126266900,"indexed_at_ns":1787520267739905300,"word_count":72},"backend/src/admin/admin.service.ts":{"size":30096,"mtime_ns":1787503865777740600,"indexed_at_ns":1787520267744605100,"word_count":2953},"backend/src/admin/blogs.controller.ts":{"size":2923,"mtime_ns":1787419447129102300,"indexed_at_ns":1787520267750697000,"word_count":289},"backend/src/admin/blogs.service.ts":{"size":3458,"mtime_ns":1787419447129629700,"indexed_at_ns":1787520267756635400,"word_count":397},"backend/src/admin/categories.controller.ts":{"size":2257,"mtime_ns":1787419447131964900,"indexed_at_ns":1787520267761489800,"word_count":204},"backend/src/admin/categories.service.ts":{"size":2078,"mtime_ns":1787419447134358400,"indexed_at_ns":1787520267766523200,"word_count":223},"backend/src/admin/dto/admin-query.dto.ts":{"size":654,"mtime_ns":1787419447137158500,"indexed_at_ns":1787520267771427600,"word_count":60},"backend/src/admin/media.controller.ts":{"size":2418,"mtime_ns":1787419447141152300,"indexed_at_ns":1787520267787619300,"word_count":226},"backend/src/admin/media.service.ts":{"size":2824,"mtime_ns":1787419447142861500,"indexed_at_ns":1787520267792581200,"word_count":283},"backend/src/admin/pets.controller.ts":{"size":1237,"mtime_ns":1787419447143878700,"indexed_at_ns":1787520267797772000,"word_count":117},"backend/src/admin/pets.service.ts":{"size":1801,"mtime_ns":1787419447144877200,"indexed_at_ns":1787520267802903300,"word_count":193},"backend/src/admin/reports.controller.ts":{"size":683,"mtime_ns":1787419447145874500,"indexed_at_ns":1787520267807463900,"word_count":66},"backend/src/admin/reports.service.ts":{"size":3512,"mtime_ns":1787419447148467900,"indexed_at_ns":1787520267812180800,"word_count":388},"backend/src/admin/wiki.controller.ts":{"size":1877,"mtime_ns":1787419447152448600,"indexed_at_ns":1787520267829464500,"word_count":179},"backend/src/admin/wiki.service.ts":{"size":1831,"mtime_ns":1787419447155466300,"indexed_at_ns":1787520267837084100,"word_count":195},"backend/src/app.controller.spec.ts":{"size":639,"mtime_ns":1787419447157463900,"indexed_at_ns":1787520267841514100,"word_count":61},"backend/src/app.controller.ts":{"size":286,"mtime_ns":1787419447158312200,"indexed_at_ns":1787520267845715200,"word_count":31},"backend/src/app.module.ts":{"size":4063,"mtime_ns":1787419447159838900,"indexed_at_ns":1787520267850859300,"word_count":375},"backend/src/app.service.ts":{"size":150,"mtime_ns":1787419447160838900,"indexed_at_ns":1787520267855364000,"word_count":19},"backend/src/auth/auth.controller.spec.ts":{"size":1577,"mtime_ns":1787419447163726600,"indexed_at_ns":1787520267863985400,"word_count":149},"backend/src/auth/auth.controller.ts":{"size":4278,"mtime_ns":1787419447165723300,"indexed_at_ns":1787520267869756000,"word_count":386},"backend/src/auth/auth.module.ts":{"size":749,"mtime_ns":1787419447166724200,"indexed_at_ns":1787520267874467000,"word_count":80},"backend/src/auth/auth.service.spec.ts":{"size":4395,"mtime_ns":1787419447169641500,"indexed_at_ns":1787520267879097800,"word_count":379},"backend/src/auth/auth.service.ts":{"size":10052,"mtime_ns":1787419447171656500,"indexed_at_ns":1787520267887192600,"word_count":933},"backend/src/auth/dto/admin-login.dto.ts":{"size":781,"mtime_ns":1787419447173655000,"indexed_at_ns":1787520267892446500,"word_count":82},"backend/src/auth/dto/login.dto.ts":{"size":601,"mtime_ns":1787419447175605900,"indexed_at_ns":1787520267898010300,"word_count":63},"backend/src/auth/dto/register.dto.ts":{"size":1235,"mtime_ns":1787419447176618600,"indexed_at_ns":1787520267903134700,"word_count":115},"backend/src/auth/dto/send-otp.dto.ts":{"size":384,"mtime_ns":1787419447177620600,"indexed_at_ns":1787520267908086100,"word_count":39},"backend/src/auth/dto/verify-otp.dto.ts":{"size":610,"mtime_ns":1787419447179445900,"indexed_at_ns":1787520267913346700,"word_count":64},"backend/src/auth/jwt-auth.guard.ts":{"size":512,"mtime_ns":1787419447182641000,"indexed_at_ns":1787520267918052800,"word_count":58},"backend/src/auth/jwt.strategy.ts":{"size":1158,"mtime_ns":1787419447183642000,"indexed_at_ns":1787520267922377500,"word_count":116},"backend/src/auth/roles.decorator.ts":{"size":55,"mtime_ns":1787419447185641100,"indexed_at_ns":1787520267926761600,"word_count":4},"backend/src/auth/roles.guard.ts":{"size":47,"mtime_ns":1787419447187642500,"indexed_at_ns":1787520267933198400,"word_count":4},"backend/src/b2b/b2b.controller.ts":{"size":2773,"mtime_ns":1787419447190643000,"indexed_at_ns":1787520267940224200,"word_count":246},"backend/src/b2b/b2b.module.ts":{"size":354,"mtime_ns":1787419447192738900,"indexed_at_ns":1787520267945334300,"word_count":38},"backend/src/b2b/b2b.service.ts":{"size":2480,"mtime_ns":1787419447194754500,"indexed_at_ns":1787520267953885300,"word_count":243},"backend/src/banners/banners.controller.ts":{"size":1988,"mtime_ns":1787419447198760300,"indexed_at_ns":1787520267959176500,"word_count":169},"backend/src/banners/banners.module.ts":{"size":386,"mtime_ns":1787419447201710300,"indexed_at_ns":1787520267965912400,"word_count":38},"backend/src/banners/banners.service.ts":{"size":1444,"mtime_ns":1787419447203501200,"indexed_at_ns":1787520267970546700,"word_count":160},"backend/src/blogs/blogs.controller.ts":{"size":2304,"mtime_ns":1787419447205517600,"indexed_at_ns":1787520267975618800,"word_count":197},"backend/src/blogs/blogs.module.ts":{"size":257,"mtime_ns":1787419447208521500,"indexed_at_ns":1787520267980516200,"word_count":28},"backend/src/blogs/blogs.service.ts":{"size":3989,"mtime_ns":1787419447209516000,"indexed_at_ns":1787520267985257200,"word_count":454},"backend/src/blogs/dto/create-blog.dto.ts":{"size":31,"mtime_ns":1787419447211166200,"indexed_at_ns":1787520267990996400,"word_count":4},"backend/src/blogs/dto/update-blog.dto.ts":{"size":168,"mtime_ns":1787419447212180200,"indexed_at_ns":1787520267995721900,"word_count":18},"backend/src/blogs/entities/blog.entity.ts":{"size":22,"mtime_ns":1787419447214234900,"indexed_at_ns":1787520268002634800,"word_count":4},"backend/src/cms/cms.controller.ts":{"size":3634,"mtime_ns":1787419447216249000,"indexed_at_ns":1787520268007070600,"word_count":280},"backend/src/cms/cms.module.ts":{"size":354,"mtime_ns":1787419447217249700,"indexed_at_ns":1787520268012367800,"word_count":38},"backend/src/cms/cms.service.ts":{"size":2586,"mtime_ns":1787419447218250400,"indexed_at_ns":1787520268022601800,"word_count":256},"backend/src/cms/dto/cms.dto.ts":{"size":2454,"mtime_ns":1787419447220250400,"indexed_at_ns":1787520268029017200,"word_count":203},"backend/src/common/decorators/roles.decorator.ts":{"size":161,"mtime_ns":1787419447223249400,"indexed_at_ns":1787520268035025100,"word_count":20},"backend/src/common/dto/pagination.dto.ts":{"size":1242,"mtime_ns":1787419447225902400,"indexed_at_ns":1787520268040173200,"word_count":121},"backend/src/common/filters/http-exception.filter.ts":{"size":5083,"mtime_ns":1787419447227915700,"indexed_at_ns":1787520268045305100,"word_count":492},"backend/src/common/filters/prisma-exception.filter.ts":{"size":2483,"mtime_ns":1787419447229134200,"indexed_at_ns":1787520268051031900,"word_count":228},"backend/src/common/guards/roles.guard.spec.ts":{"size":2497,"mtime_ns":1787419447232144300,"indexed_at_ns":1787520268056125700,"word_count":223},"backend/src/common/guards/roles.guard.ts":{"size":1333,"mtime_ns":1787419447234156600,"indexed_at_ns":1787520268061195300,"word_count":120},"backend/src/common/interceptors/decimal.interceptor.spec.ts":{"size":1744,"mtime_ns":1787419447241156600,"indexed_at_ns":1787520268067233700,"word_count":164},"backend/src/common/interceptors/decimal.interceptor.ts":{"size":1135,"mtime_ns":1787419447243160300,"indexed_at_ns":1787520268072943100,"word_count":118},"backend/src/common/metrics.controller.ts":{"size":2160,"mtime_ns":1787419447247157400,"indexed_at_ns":1787520268078103400,"word_count":206},"backend/src/common/schemas/error-response.schema.ts":{"size":1735,"mtime_ns":1787419447248667900,"indexed_at_ns":1787520268083656600,"word_count":162},"backend/src/common/schemas/paginated-response.schema.ts":{"size":1151,"mtime_ns":1787419447250682000,"indexed_at_ns":1787520268089015000,"word_count":110},"backend/src/common/services/sms.service.ts":{"size":33000,"mtime_ns":1787419447253682200,"indexed_at_ns":1787520268094462000,"word_count":3028},"backend/src/common/sms.module.ts":{"size":213,"mtime_ns":1787419447256681300,"indexed_at_ns":1787520268102912400,"word_count":24},"backend/src/contact/contact.controller.ts":{"size":2075,"mtime_ns":1787419447261682400,"indexed_at_ns":1787520268112436000,"word_count":177},"backend/src/contact/contact.module.ts":{"size":377,"mtime_ns":1787419447262682300,"indexed_at_ns":1787520268117905100,"word_count":38},"backend/src/contact/contact.service.ts":{"size":4870,"mtime_ns":1787419447263788100,"indexed_at_ns":1787520268123039000,"word_count":451},"backend/src/home/dto/create-home.dto.ts":{"size":31,"mtime_ns":1787419447277390300,"indexed_at_ns":1787520268168184200,"word_count":4},"backend/src/home/dto/update-home.dto.ts":{"size":168,"mtime_ns":1787419447278389200,"indexed_at_ns":1787520268173739000,"word_count":18},"backend/src/home/entities/home.entity.ts":{"size":22,"mtime_ns":1787419447279387400,"indexed_at_ns":1787520268179096300,"word_count":4},"backend/src/home/home.controller.ts":{"size":784,"mtime_ns":1787419447280390600,"indexed_at_ns":1787520268187703600,"word_count":69},"backend/src/home/home.module.ts":{"size":250,"mtime_ns":1787419447281388600,"indexed_at_ns":1787520268192252400,"word_count":28},"backend/src/home/home.service.ts":{"size":1425,"mtime_ns":1787419447283912900,"indexed_at_ns":1787520268196679900,"word_count":144},"backend/src/ingredients/ingredients.controller.ts":{"size":2013,"mtime_ns":1787419447287287300,"indexed_at_ns":1787520268202200500,"word_count":165},"backend/src/ingredients/ingredients.module.ts":{"size":418,"mtime_ns":1787419447289816300,"indexed_at_ns":1787520268206984000,"word_count":38},"backend/src/ingredients/ingredients.service.ts":{"size":1580,"mtime_ns":1787419447292163600,"indexed_at_ns":1787520268211212000,"word_count":162},"backend/src/main.ts":{"size":3768,"mtime_ns":1787419447293687900,"indexed_at_ns":1787520268215759000,"word_count":323},"backend/src/orders/dto/create-order.dto.ts":{"size":1972,"mtime_ns":1787419447301826700,"indexed_at_ns":1787520268235819700,"word_count":162},"backend/src/orders/orders.controller.spec.ts":{"size":1966,"mtime_ns":1787419447303837300,"indexed_at_ns":1787520268240691700,"word_count":194},"backend/src/orders/orders.controller.ts":{"size":6141,"mtime_ns":1787419447304841600,"indexed_at_ns":1787520268245028600,"word_count":517},"backend/src/orders/orders.module.ts":{"size":264,"mtime_ns":1787419447306835700,"indexed_at_ns":1787520268250241200,"word_count":28},"backend/src/orders/orders.service.spec.ts":{"size":5130,"mtime_ns":1787419447308837500,"indexed_at_ns":1787520268254801900,"word_count":483},"backend/src/orders/orders.service.ts":{"size":17768,"mtime_ns":1787419447310841600,"indexed_at_ns":1787520268259307700,"word_count":1611},"backend/src/pets/dto/create-health-log.dto.ts":{"size":788,"mtime_ns":1787419447333049800,"indexed_at_ns":1787520268317874500,"word_count":69},"backend/src/pets/dto/create-pet.dto.ts":{"size":1189,"mtime_ns":1787419447335757700,"indexed_at_ns":1787520268322801300,"word_count":104},"backend/src/pets/dto/create-reminder.dto.ts":{"size":840,"mtime_ns":1787419447336756600,"indexed_at_ns":1787520268328211700,"word_count":71},"backend/src/pets/dto/update-pet.dto.ts":{"size":164,"mtime_ns":1787419447338758100,"indexed_at_ns":1787520268334551700,"word_count":18},"backend/src/pets/pets.controller.spec.ts":{"size":2617,"mtime_ns":1787419447340757400,"indexed_at_ns":1787520268338879000,"word_count":269},"backend/src/pets/pets.controller.ts":{"size":8723,"mtime_ns":1787419472684422700,"indexed_at_ns":1787520268343329700,"word_count":781},"backend/src/pets/pets.module.ts":{"size":250,"mtime_ns":1787419447343756700,"indexed_at_ns":1787520268348169000,"word_count":28},"backend/src/pets/pets.service.spec.ts":{"size":3055,"mtime_ns":1787419447344706000,"indexed_at_ns":1787520268353573900,"word_count":272},"backend/src/pets/pets.service.ts":{"size":7251,"mtime_ns":1787419447346231700,"indexed_at_ns":1787520268358338900,"word_count":710},"backend/src/prescriptions/prescriptions.controller.ts":{"size":2434,"mtime_ns":1787419447348742700,"indexed_at_ns":1787520268362975800,"word_count":232},"backend/src/prescriptions/prescriptions.module.ts":{"size":508,"mtime_ns":1787419447349756600,"indexed_at_ns":1787520268370479500,"word_count":45},"backend/src/prescriptions/prescriptions.service.ts":{"size":4831,"mtime_ns":1787419447350758000,"indexed_at_ns":1787520268375005800,"word_count":498},"backend/src/prisma/prisma.module.ts":{"size":219,"mtime_ns":1787419447352758100,"indexed_at_ns":1787520268379617900,"word_count":24},"backend/src/prisma/prisma.service.ts":{"size":4207,"mtime_ns":1787419447354757300,"indexed_at_ns":1787520268384925400,"word_count":413},"backend/src/products/dto/get-products.dto.ts":{"size":1363,"mtime_ns":1787419447356758000,"indexed_at_ns":1787520268389957700,"word_count":115},"backend/src/products/products.controller.spec.ts":{"size":1921,"mtime_ns":1787419447357756700,"indexed_at_ns":1787520268394516700,"word_count":166},"backend/src/products/products.controller.ts":{"size":2524,"mtime_ns":1787419447360757700,"indexed_at_ns":1787520268400855500,"word_count":209},"backend/src/products/products.module.ts":{"size":278,"mtime_ns":1787419447362760700,"indexed_at_ns":1787520268406131400,"word_count":28},"backend/src/products/products.service.spec.ts":{"size":1654,"mtime_ns":1787419447365755400,"indexed_at_ns":1787520268410815200,"word_count":154},"backend/src/products/products.service.ts":{"size":7174,"mtime_ns":1787419447366755500,"indexed_at_ns":1787520268416565000,"word_count":713},"backend/src/redis/redis.module.ts":{"size":214,"mtime_ns":1787419447368756900,"indexed_at_ns":1787520268423608000,"word_count":24},"backend/src/redis/redis.service.spec.ts":{"size":1581,"mtime_ns":1787419447370758900,"indexed_at_ns":1787520268427900000,"word_count":145},"backend/src/redis/redis.service.ts":{"size":1249,"mtime_ns":1787419447371759000,"indexed_at_ns":1787520268433569900,"word_count":132},"backend/src/seo/seo.controller.ts":{"size":931,"mtime_ns":1787419447381393600,"indexed_at_ns":1787520268465628700,"word_count":85},"backend/src/seo/seo.module.ts":{"size":354,"mtime_ns":1787419447382393700,"indexed_at_ns":1787520268471654200,"word_count":38},"backend/src/seo/seo.service.ts":{"size":2093,"mtime_ns":1787419447383396000,"indexed_at_ns":1787520268476398000,"word_count":182},"backend/src/settings/settings.controller.spec.ts":{"size":3053,"mtime_ns":1787419447389891700,"indexed_at_ns":1787520268492052300,"word_count":247},"backend/src/settings/settings.controller.ts":{"size":9263,"mtime_ns":1787419447391891500,"indexed_at_ns":1787520268497505500,"word_count":708},"backend/src/settings/settings.module.ts":{"size":394,"mtime_ns":1787419447392892200,"indexed_at_ns":1787520268503050500,"word_count":38},"backend/src/settings/settings.service.spec.ts":{"size":2814,"mtime_ns":1787419447393893100,"indexed_at_ns":1787520268507471700,"word_count":251},"backend/src/settings/settings.service.ts":{"size":20852,"mtime_ns":1787419472687216600,"indexed_at_ns":1787520268512472200,"word_count":1589},"backend/src/smart-advisor/smart-advisor.controller.ts":{"size":1879,"mtime_ns":1787419447398758600,"indexed_at_ns":1787520268518001500,"word_count":152},"backend/src/smart-advisor/smart-advisor.module.ts":{"size":428,"mtime_ns":1787419447401203900,"indexed_at_ns":1787520268523494400,"word_count":38},"backend/src/smart-advisor/smart-advisor.service.ts":{"size":1286,"mtime_ns":1787419447402725000,"indexed_at_ns":1787520268527949600,"word_count":131},"backend/src/testimonials/testimonials.controller.ts":{"size":1966,"mtime_ns":1787419447404727300,"indexed_at_ns":1787520268533528000,"word_count":160},"backend/src/testimonials/testimonials.module.ts":{"size":426,"mtime_ns":1787419447409822600,"indexed_at_ns":1787520268538499000,"word_count":38},"backend/src/testimonials/testimonials.service.ts":{"size":1314,"mtime_ns":1787419447411822900,"indexed_at_ns":1787520268544964700,"word_count":140},"backend/src/users/dto/address.dto.ts":{"size":1142,"mtime_ns":1787419447424615900,"indexed_at_ns":1787520268579028800,"word_count":99},"backend/src/users/dto/update-profile.dto.ts":{"size":1103,"mtime_ns":1787419447426616300,"indexed_at_ns":1787520268584716300,"word_count":98},"backend/src/users/users.controller.spec.ts":{"size":3440,"mtime_ns":1787419447427617400,"indexed_at_ns":1787520268589683700,"word_count":322},"backend/src/users/users.controller.ts":{"size":7087,"mtime_ns":1787419447430259700,"indexed_at_ns":1787520268594993400,"word_count":590},"backend/src/users/users.module.ts":{"size":285,"mtime_ns":1787419447431727000,"indexed_at_ns":1787520268600354800,"word_count":30},"backend/src/users/users.service.spec.ts":{"size":3949,"mtime_ns":1787419447435097800,"indexed_at_ns":1787520268604880700,"word_count":316},"backend/src/users/users.service.ts":{"size":8511,"mtime_ns":1787419447438111700,"indexed_at_ns":1787520268609519600,"word_count":782},"backend/src/videos/dto/create-video.dto.ts":{"size":1636,"mtime_ns":1787419447441109300,"indexed_at_ns":1787520268615205000,"word_count":127},"backend/src/videos/dto/get-videos-query.dto.ts":{"size":661,"mtime_ns":1787419447442115400,"indexed_at_ns":1787520268620971300,"word_count":77},"backend/src/videos/videos.controller.ts":{"size":1994,"mtime_ns":1787419447444019000,"indexed_at_ns":1787520268625582700,"word_count":173},"backend/src/videos/videos.module.ts":{"size":293,"mtime_ns":1787419447445033500,"indexed_at_ns":1787520268630551300,"word_count":30},"backend/src/videos/videos.service.ts":{"size":2844,"mtime_ns":1787419447446029400,"indexed_at_ns":1787520268636806300,"word_count":290},"backend/src/wholesale/dto/wholesale-apply.dto.ts":{"size":763,"mtime_ns":1787419447449029300,"indexed_at_ns":1787520268642356600,"word_count":66},"backend/src/wholesale/wholesale.controller.ts":{"size":2103,"mtime_ns":1787419447452553200,"indexed_at_ns":1787520268647935100,"word_count":160},"backend/src/wholesale/wholesale.module.ts":{"size":402,"mtime_ns":1787419447454555100,"indexed_at_ns":1787520268655112500,"word_count":38},"backend/src/wholesale/wholesale.service.ts":{"size":2716,"mtime_ns":1787419447455557000,"indexed_at_ns":1787520268659520300,"word_count":266},"backend/src/wiki/dto/create-wiki.dto.ts":{"size":31,"mtime_ns":1787419447458222100,"indexed_at_ns":1787520268665479900,"word_count":4},"backend/src/wiki/dto/update-wiki.dto.ts":{"size":168,"mtime_ns":1787419447459970600,"indexed_at_ns":1787520268670899700,"word_count":18},"backend/src/wiki/entities/wiki.entity.ts":{"size":22,"mtime_ns":1787419447462367100,"indexed_at_ns":1787520268675916900,"word_count":4},"backend/src/wiki/wiki.controller.ts":{"size":1254,"mtime_ns":1787419447463367600,"indexed_at_ns":1787520268680375500,"word_count":110},"backend/src/wiki/wiki.module.ts":{"size":250,"mtime_ns":1787419447465688300,"indexed_at_ns":1787520268686157000,"word_count":28},"backend/src/wiki/wiki.service.ts":{"size":1621,"mtime_ns":1787419447467847900,"indexed_at_ns":1787520268691278400,"word_count":174},"backend/test/app-audit-verification.e2e-spec.ts":{"size":6641,"mtime_ns":1787419447476879800,"indexed_at_ns":1787520268708698300,"word_count":569},"backend/test/app.e2e-spec.ts":{"size":1015,"mtime_ns":1787419447483878100,"indexed_at_ns":1787520268730242000,"word_count":83},"backend/test/jest-e2e.json":{"size":192,"mtime_ns":1787419447484882500,"indexed_at_ns":1787520278568619700,"word_count":17,"hashes":{"backend/test/jest-e2e.json":"f1ac24088d0d54e9c5d604161531003b5da1777b2464855fa05ae3b472365566"}},"backend/tsconfig.build.json":{"size":111,"mtime_ns":1787419447486358600,"indexed_at_ns":1787520278570600600,"word_count":10,"hashes":{"backend/tsconfig.build.json":"590ab6d92f5b42f55875120c412664635ab779d64ab71e724a2414c6fb8b0c95"}},"backend/tsconfig.json":{"size":813,"mtime_ns":1787419447486983300,"indexed_at_ns":1787520278572540400,"word_count":56,"hashes":{"backend/tsconfig.json":"96ac330a1750680715788c041b60112c8e96868bebe72bc4e09729c3c95bc694"}},"backend/uploads/1781288429353-508765350.jpg":{"size":110246,"mtime_ns":1787419447496552700,"indexed_at_ns":1787520268746669500,"word_count":3882},"canina.md":{"size":21919,"mtime_ns":1787419447498074800,"indexed_at_ns":1787520268767472500,"word_count":1983},"canina.pdf":{"size":2858373,"mtime_ns":1787419447565290700,"indexed_at_ns":1787520268771300800,"word_count":0},"docker-compose.yml":{"size":2271,"mtime_ns":1787419447567289000,"indexed_at_ns":1787520268775958000,"word_count":127},"docs/01-introduction.md":{"size":5576,"mtime_ns":1787419447570288100,"indexed_at_ns":1787520268782657500,"word_count":523},"docs/02-user-guide.md":{"size":4336,"mtime_ns":1787419447573286700,"indexed_at_ns":1787520268788234100,"word_count":422},"docs/03-developer-guide.md":{"size":6795,"mtime_ns":1787419447580286600,"indexed_at_ns":1787520268793522500,"word_count":678},"docs/04-setup-and-deployment.md":{"size":4103,"mtime_ns":1787419447584288500,"indexed_at_ns":1787520278729263700,"word_count":425,"hashes":{"docs/04-setup-and-deployment.md":"1d088753100a687210e5cfa367cb0ecb4c6298cdb95883b4852e2f0545e9fabf"}},"docs/05-devops-and-monitoring.md":{"size":3631,"mtime_ns":1787419447586286900,"indexed_at_ns":1787520278732148300,"word_count":374,"hashes":{"docs/05-devops-and-monitoring.md":"017634a31f3e5ba98d623b76bd1b4720574caa6b8445012ab97bc34432f9ebff"}},"docs/06-testing.md":{"size":4258,"mtime_ns":1787419447593550100,"indexed_at_ns":1787520278735017500,"word_count":457,"hashes":{"docs/06-testing.md":"63338cc957d7059368a8632e117fe857e446a4d18f61fecc464400c3b17f8019"}},"docs/README.md":{"size":2770,"mtime_ns":1787419447594550700,"indexed_at_ns":1787520278737385700,"word_count":253,"hashes":{"docs/readme.md":"5e9f8e746cd3dee5a3ccd49ddddc15258470eefc20bc07e2243933abb687361d"}},"docs/audit/00-repository-map.md":{"size":3233,"mtime_ns":1787419447600553300,"indexed_at_ns":1787520278739157800,"word_count":351,"hashes":{"docs/audit/00-repository-map.md":"896dfe9586aa5d7a88d6d6ded846d98181505d68a5fb2b2b36be65b85e22b9fd"}},"docs/audit/01-system-discovery.md":{"size":3839,"mtime_ns":1787419447606559100,"indexed_at_ns":1787520278740885900,"word_count":467,"hashes":{"docs/audit/01-system-discovery.md":"6da1c06d3b033107a35445af0d2ff9f87eff04c8888ff3f0b9ea62694a7c7823"}},"docs/audit/02-audit-plan.md":{"size":5141,"mtime_ns":1787419447609553400,"indexed_at_ns":1787520278742596900,"word_count":530,"hashes":{"docs/audit/02-audit-plan.md":"03da91993339ff789e00f84d0b1849dc9fd1f066819cf54deb9262b034262f65"}},"docs/audit/03-baseline-command-plan.md":{"size":4957,"mtime_ns":1787419447611554100,"indexed_at_ns":1787520278744379900,"word_count":735,"hashes":{"docs/audit/03-baseline-command-plan.md":"3aeddb56f7af1d05de51fb69a572b29cf0fa4fecb9b31c91b13ce4d121184603"}},"docs/audit/04-open-questions.md":{"size":1709,"mtime_ns":1787419447614248700,"indexed_at_ns":1787520278746260100,"word_count":224,"hashes":{"docs/audit/04-open-questions.md":"ba051b383fcd69eea9f3ea74125098db16eaf2b3f0fe96682729ac588597e7de"}},"docs/audit/05-architectural-audit.md":{"size":5004,"mtime_ns":1787419447617246800,"indexed_at_ns":1787520268852078000,"word_count":560},"docs/audit/06-storefront-audit.md":{"size":4308,"mtime_ns":1787419447620249200,"indexed_at_ns":1787520278749361700,"word_count":520,"hashes":{"docs/audit/06-storefront-audit.md":"456437c0213198ca5fab9b157392ddc85b4df85343cbdf3c6972e2e624d2e3a6"}},"docs/audit/07-backend-audit.md":{"size":5171,"mtime_ns":1787419447624249600,"indexed_at_ns":1787520278752251100,"word_count":581,"hashes":{"docs/audit/07-backend-audit.md":"49753f6131b4b4da029184b8dfab64a4daee3ede5c8dc0b2fda550120a891b35"}},"docs/audit/08-admin-features-audit.md":{"size":4344,"mtime_ns":1787419447627421800,"indexed_at_ns":1787520278754130300,"word_count":479,"hashes":{"docs/audit/08-admin-features-audit.md":"959a7809af543c3d58c234fc8496cdbda3749fe6d220137d0cb170475ff60645"}},"docs/audit/09-database-audit.md":{"size":4250,"mtime_ns":1787419447629418800,"indexed_at_ns":1787520278755818700,"word_count":521,"hashes":{"docs/audit/09-database-audit.md":"14ae2684792dfaf2abbf4b046ac2991e1b81efb46027019fadf505ff8cdb1883"}},"docs/audit/10-security-audit.md":{"size":5761,"mtime_ns":1787419447632420500,"indexed_at_ns":1787520268889525100,"word_count":678},"docs/audit/11-code-quality-audit.md":{"size":3498,"mtime_ns":1787419447635432400,"indexed_at_ns":1787520278757506800,"word_count":419,"hashes":{"docs/audit/11-code-quality-audit.md":"527b129de8ecb35503501c720ba9296e7eca9d2a98b7218b1654c072059b26e2"}},"docs/audit/12-testing-audit.md":{"size":4229,"mtime_ns":1787419447638434100,"indexed_at_ns":1787520278759173000,"word_count":486,"hashes":{"docs/audit/12-testing-audit.md":"a9407e604bcb3cad92bd92fd136dfe472310ace4b140c24a7acf8a5fede207c2"}},"docs/audit/13-devops-audit.md":{"size":3550,"mtime_ns":1787419447641434300,"indexed_at_ns":1787520278761076700,"word_count":440,"hashes":{"docs/audit/13-devops-audit.md":"9fc17048b9f7bf6ecb4a3f34bb5ef607d134ea9bafdf8dc494193fc4478b3093"}},"docs/audit/14-documentation-audit.md":{"size":3427,"mtime_ns":1787419447644432900,"indexed_at_ns":1787520278762956800,"word_count":379,"hashes":{"docs/audit/14-documentation-audit.md":"a5047c11c0610cb3f495dd9754b8e838aa81b748f05e1ffc5f58f24ff4cbcd44"}},"docs/audit/15-raw-findings-index.json":{"size":10184,"mtime_ns":1787419447647432500,"indexed_at_ns":1787520278574581400,"word_count":817,"hashes":{"docs/audit/15-raw-findings-index.json":"c374526a5298b073d3fe3b86e4724c7871ef551ba74a67dfad0e0a78c4ac1efe"}},"docs/audit/16-deep-audit-summary.md":{"size":3187,"mtime_ns":1787419447649947100,"indexed_at_ns":1787520278766065100,"word_count":393,"hashes":{"docs/audit/16-deep-audit-summary.md":"348ccf0d0c7d4fd98ba8b2b5673a77773b7cbe91ad7378088df2a9e973ba5bf7"}},"docs/audit/17-source-coverage-manifest.json":{"size":132382,"mtime_ns":1787419447655963500,"indexed_at_ns":1787520278576549500,"word_count":7827,"hashes":{"docs/audit/17-source-coverage-manifest.json":"d9b86b7d55a645e2c31d9f2c37ee88b2516920e958b1ba4d27059834b5eb59f1"}},"docs/audit/18-compiler-diagnostic-dispositions.md":{"size":1981,"mtime_ns":1787419447659964500,"indexed_at_ns":1787520278768227300,"word_count":285,"hashes":{"docs/audit/18-compiler-diagnostic-dispositions.md":"e1abe45307c5e5c0020477b8ff7784c023372244a182a9bf3b6b47d0b1639511"}},"docs/audit/19-finding-verification-report.md":{"size":5490,"mtime_ns":1787419447662964700,"indexed_at_ns":1787520278770007600,"word_count":753,"hashes":{"docs/audit/19-finding-verification-report.md":"d13b8f3ea9d9098687488dc65ae0d45f1783d92e31f55f8478b5448f8dd694fb"}},"docs/audit/20-verified-findings-index.json":{"size":22373,"mtime_ns":1787419447665962500,"indexed_at_ns":1787520278578978500,"word_count":1903,"hashes":{"docs/audit/20-verified-findings-index.json":"a2d033caad9eddd24ef99be4f9c7677e02cccb2f6ed0b6e2659d3da20fd3352f"}},"docs/audit/21-phase2-quality-gate-summary.md":{"size":1754,"mtime_ns":1787419447669962400,"indexed_at_ns":1787520278771714000,"word_count":211,"hashes":{"docs/audit/21-phase2-quality-gate-summary.md":"85d6fc79140da7cdfa839be45168e0db007c7bf9bbfbc99985f401db0ee5bae6"}},"docs/audit/22-tracked-first-party-files.txt":{"size":4591,"mtime_ns":1787419447674963600,"indexed_at_ns":1787520268962561400,"word_count":139},"docs/audit/23-untracked-first-party-files.txt":{"size":60,"mtime_ns":1787419447679977000,"indexed_at_ns":1787520268967956400,"word_count":7},"docs/audit/24-omitted-file-inspection-report.md":{"size":2495,"mtime_ns":1787419447682976400,"indexed_at_ns":1787520278773392900,"word_count":227,"hashes":{"docs/audit/24-omitted-file-inspection-report.md":"dcb987ba2798ff0f280df56b0226bbee90b2a135c8630e9c4c154c70701ec462"}},"docs/audit/25-reference-integrity-validation.json":{"size":1054,"mtime_ns":1787419447686978300,"indexed_at_ns":1787520278581849600,"word_count":82,"hashes":{"docs/audit/25-reference-integrity-validation.json":"3a84a844a5c7930755420d36d65b14cd897c90735db5440e1b6bd873c988d48a"}},"docs/audit/26-phase2-integrity-repair-report.md":{"size":3256,"mtime_ns":1787419447692507900,"indexed_at_ns":1787520278775113800,"word_count":385,"hashes":{"docs/audit/26-phase2-integrity-repair-report.md":"a1523ad93fe2d3d8f28be2c032d7010c67118c8b9f76288b1d6cd5c4f2c9f56b"}},"docs/audit/27-all-tracked-repository-files.txt":{"size":4779,"mtime_ns":1787419447708956000,"indexed_at_ns":1787520268990685700,"word_count":148},"docs/audit/28-full-repository-classification.json":{"size":28950,"mtime_ns":1787419447712329700,"indexed_at_ns":1787520278584765900,"word_count":1782,"hashes":{"docs/audit/28-full-repository-classification.json":"142c809f659478477444c84deb5e8e91d02954020ddd203d7382492e4e6c4e36"}},"docs/audit/29-file-content-evidence.json":{"size":112638,"mtime_ns":1787419447715885700,"indexed_at_ns":1787520278587808400,"word_count":9098,"hashes":{"docs/audit/29-file-content-evidence.json":"541931d49c550af865f938acb61f8d1de4a01800c54e162838020edc9dc8d75a"}},"docs/audit/30-compiler-diagnostics-index.json":{"size":3787,"mtime_ns":1787419447718403200,"indexed_at_ns":1787520278590035200,"word_count":324,"hashes":{"docs/audit/30-compiler-diagnostics-index.json":"a29468f2845f5145ae51529078fac2e217ae83d363fc10ae6ce976c92bc27fe0"}},"docs/audit/31-module-audit-closure.md":{"size":7737,"mtime_ns":1787419447720420000,"indexed_at_ns":1787520278776816100,"word_count":709,"hashes":{"docs/audit/31-module-audit-closure.md":"c6cd286c808a7ad22646964c721252ac5c66a577da18ca90372ad7698575fb48"}},"docs/audit/32-evidence-grade-validation.json":{"size":1689,"mtime_ns":1787419447723418000,"indexed_at_ns":1787520278591725200,"word_count":123,"hashes":{"docs/audit/32-evidence-grade-validation.json":"e3d5f877bd49afce2f7aa858f93e347c284a390b2cbbed28e1bed11ce36ded48"}},"docs/audit/33-final-phase2-audit-closure.md":{"size":2578,"mtime_ns":1787419447727334000,"indexed_at_ns":1787520278778548300,"word_count":271,"hashes":{"docs/audit/33-final-phase2-audit-closure.md":"7933681477448b9d09a1118e059e1bc8469de9e66baa971ba5e74de52f55581a"}},"docs/audit/34-repository-observations.json":{"size":616,"mtime_ns":1787419447729603300,"indexed_at_ns":1787520278594294500,"word_count":49,"hashes":{"docs/audit/34-repository-observations.json":"c7eda5d6d089db59a7d56840b32f406bd1bef84b7734ab2b6548fa22640355c3"}},"docs/audit/35-semantic-review-ledger.json":{"size":101875,"mtime_ns":1787419447734562700,"indexed_at_ns":1787520278598853400,"word_count":6011,"hashes":{"docs/audit/35-semantic-review-ledger.json":"8dda2089b54512b1b74bfb67cddc3dcdd0f73fdc822607ef0822703a6e5ad875"}},"docs/audit/36-mandatory-semantic-scope.json":{"size":8194,"mtime_ns":1787419447736791700,"indexed_at_ns":1787520278604372500,"word_count":638,"hashes":{"docs/audit/36-mandatory-semantic-scope.json":"09f06e0536da69c977118bd4b80e2076678178941faf95c113bf2f879b7df7b4"}},"docs/audit/ADR-AUTH-001.md":{"size":3321,"mtime_ns":1787419447740371800,"indexed_at_ns":1787520269052967000,"word_count":398},"docs/audit/CROSS_BOUNDARY_DEPENDENCIES.md":{"size":2175,"mtime_ns":1787419447743054400,"indexed_at_ns":1787520269058277200,"word_count":239},"docs/audit/FRONTEND_INTEGRATION_REQUIREMENTS.md":{"size":15793,"mtime_ns":1787419447744053200,"indexed_at_ns":1787520269065383800,"word_count":1579},"docs/audit/MASTER-TASK-BACKLOG.md":{"size":30573,"mtime_ns":1787419447747841100,"indexed_at_ns":1787520269072623400,"word_count":3510},"docs/audit/audit-state.json":{"size":4269,"mtime_ns":1787419447751006600,"indexed_at_ns":1787520278607467000,"word_count":267,"hashes":{"docs/audit/audit-state.json":"6f8243328b998a0dc1e017494731c64f27c27c3d66794cb3157e03a4cd2067e1"}},"docs/audit/build_manifest.js":{"size":4188,"mtime_ns":1787419447753911100,"indexed_at_ns":1787520269083890700,"word_count":348},"docs/audit/frontend-route-map.md":{"size":2593,"mtime_ns":1787419447760923700,"indexed_at_ns":1787520269090010800,"word_count":329},"docs/audit/generate_classification.js":{"size":2241,"mtime_ns":1787419447764126600,"indexed_at_ns":1787520269096701700,"word_count":204},"docs/audit/generate_evidence.js":{"size":3179,"mtime_ns":1787419447766241700,"indexed_at_ns":1787520269101972700,"word_count":253},"docs/audit/generate_ledger.js":{"size":7804,"mtime_ns":1787419447769254900,"indexed_at_ns":1787520269106322700,"word_count":620},"docs/audit/generate_manifest.js":{"size":6488,"mtime_ns":1787419447771256900,"indexed_at_ns":1787520269110735500,"word_count":489},"docs/audit/master-task-backlog.json":{"size":22781,"mtime_ns":1787419447776255300,"indexed_at_ns":1787520278610226000,"word_count":2071,"hashes":{"docs/audit/master-task-backlog.json":"10bf53f7be4937d86692ecd773323b0d461b852c4f19a17f496268cd2444a7d1"}},"docs/audit/phase3-execution-plan.md":{"size":6128,"mtime_ns":1787419447780254800,"indexed_at_ns":1787520269124273000,"word_count":736},"docs/audit/phase3-traceability-matrix.md":{"size":5283,"mtime_ns":1787419447784255100,"indexed_at_ns":1787520278781098300,"word_count":692,"hashes":{"docs/audit/phase3-traceability-matrix.md":"472b0b5c9726c4439ae26a1d559fb0993e6f09b5124667e78d6c65024d32e893"}},"docs/audit/phase3.1-backlog-review.md":{"size":9874,"mtime_ns":1787419447789255600,"indexed_at_ns":1787520278783902400,"word_count":1202,"hashes":{"docs/audit/phase3.1-backlog-review.md":"d2d6fdaaabd0fa118990c8cdceee02e51a3c36f03b7ff8832822177d35a8e055"}},"docs/audit/phase3.1-change-log.md":{"size":3816,"mtime_ns":1787419447792255400,"indexed_at_ns":1787520278785878900,"word_count":451,"hashes":{"docs/audit/phase3.1-change-log.md":"0a7b46ebf49f30a004c44ca3b7ebbdf1b80022f4c33fc478f3c6352e56b309b5"}},"docs/audit/phase3.2-change-log.md":{"size":8388,"mtime_ns":1787419447795255300,"indexed_at_ns":1787520278787600800,"word_count":930,"hashes":{"docs/audit/phase3.2-change-log.md":"3ead5564ea9664d08ee62fd2f7fe2112002e0eb5a19aebb2524d9b75c1586a5a"}},"docs/audit/phase3.2-implementation-readiness.md":{"size":4743,"mtime_ns":1787419447798255100,"indexed_at_ns":1787520278789398100,"word_count":517,"hashes":{"docs/audit/phase3.2-implementation-readiness.md":"551a4525ba3b37310e9fcc2b0712be76cffb15fbc91d1ec175c3f8eb1ae4703f"}},"docs/audit/rebuild_honest_ledger.js":{"size":6220,"mtime_ns":1787419447801254800,"indexed_at_ns":1787520269161947400,"word_count":559},"docs/audit/sync_honest_manifest.js":{"size":1241,"mtime_ns":1787419447804254500,"indexed_at_ns":1787520269167484100,"word_count":75},"docs/audit/sync_manifest.js":{"size":1021,"mtime_ns":1787419447807274800,"indexed_at_ns":1787520269173780000,"word_count":62},"docs/audit/validate_evidence_grade.js":{"size":6276,"mtime_ns":1787419447809269600,"indexed_at_ns":1787520269178143000,"word_count":526},"docs/audit/validate_integrity.js":{"size":3487,"mtime_ns":1787419447812268100,"indexed_at_ns":1787520269183148300,"word_count":284},"docs/backlog.md":{"size":26396,"mtime_ns":1787419447814270000,"indexed_at_ns":1787520269189411600,"word_count":2834},"frontend/admin-panel/README.md":{"size":2498,"mtime_ns":1787419447817282100,"indexed_at_ns":1787520278791305300,"word_count":212,"hashes":{"frontend/admin-panel/readme.md":"7be8c0e7d2c84db24f5fb724d5873579df7aa8de89e27f417bd81d7843f90033"}},"frontend/admin-panel/eslint.config.js":{"size":935,"mtime_ns":1787419447818282500,"indexed_at_ns":1787520269203689100,"word_count":69},"frontend/admin-panel/index.html":{"size":376,"mtime_ns":1787419447819281600,"indexed_at_ns":1787520269207877500,"word_count":28},"frontend/admin-panel/package.json":{"size":1113,"mtime_ns":1787419447828282200,"indexed_at_ns":1787520278613187500,"word_count":84,"hashes":{"frontend/admin-panel/package.json":"67bd40c3c60ba8603c94de9380c27243829efb87915bcc88143577e36119657c"}},"frontend/admin-panel/postcss.config.js":{"size":97,"mtime_ns":1787419447829282200,"indexed_at_ns":1787520269215392600,"word_count":11},"frontend/admin-panel/public/favicon.svg":{"size":9522,"mtime_ns":1787419447831799500,"indexed_at_ns":1787520269220009100,"word_count":491},"frontend/admin-panel/public/fonts/A-Iranian-Sans/A-Iranian-Sans/read me!.txt":{"size":283,"mtime_ns":1787419447843477600,"indexed_at_ns":1787520269242681800,"word_count":15},"frontend/admin-panel/public/fonts/IranNastaliq/IranNastaliq/read me!.txt":{"size":283,"mtime_ns":1787419447899804800,"indexed_at_ns":1787520269264077500,"word_count":15},"frontend/admin-panel/public/fonts/sahel-font-v3.4.0/CHANGELOG.md":{"size":8866,"mtime_ns":1787419447920123500,"indexed_at_ns":1787520278793054000,"word_count":1077,"hashes":{"frontend/admin-panel/public/fonts/sahel-font-v3.4.0/changelog.md":"5ad8626941bf79f4103b6456c12d85db5bb61d3f31874ed286797a02132509d0"}},"frontend/admin-panel/public/fonts/sahel-font-v3.4.0/README.md":{"size":4269,"mtime_ns":1787419448066456100,"indexed_at_ns":1787520278794865400,"word_count":366,"hashes":{"frontend/admin-panel/public/fonts/sahel-font-v3.4.0/readme.md":"2cfebaa4d0b6e5a18a1d16f25d9064b405d859623756e51914aa92c5044b3a16"}},"frontend/admin-panel/public/fonts/sahel-font-v3.4.0/sample-variable.gif":{"size":236102,"mtime_ns":1787419448207721100,"indexed_at_ns":1787520269754886700,"word_count":10881},"frontend/admin-panel/public/fonts/shabnam-font-v5.0.1/CHANGELOG.md":{"size":7473,"mtime_ns":1787419448209538400,"indexed_at_ns":1787520278797112100,"word_count":951,"hashes":{"frontend/admin-panel/public/fonts/shabnam-font-v5.0.1/changelog.md":"a9fba064343d5f9c880a4d294f6d1f77b8c0d12381777f5575737d01d376304a"}},"frontend/admin-panel/public/fonts/shabnam-font-v5.0.1/README.md":{"size":3812,"mtime_ns":1787419448347064300,"indexed_at_ns":1787520278800589800,"word_count":283,"hashes":{"frontend/admin-panel/public/fonts/shabnam-font-v5.0.1/readme.md":"5b0fac871e066e2bfb971e175a5c929962a6721645426dab1ab7df7f61069d21"}},"frontend/admin-panel/public/fonts/shabnam-font-v5.0.1/sample.png":{"size":85019,"mtime_ns":1787419448458377000,"indexed_at_ns":1787520270226235800,"word_count":2615},"frontend/admin-panel/public/fonts/vazirmatn-v33.003/AUTHORS.txt":{"size":347,"mtime_ns":1787419448459375200,"indexed_at_ns":1787520270238668300,"word_count":55},"frontend/admin-panel/public/fonts/vazirmatn-v33.003/CHANGELOG.md":{"size":40062,"mtime_ns":1787419448461376800,"indexed_at_ns":1787520278802756400,"word_count":5086,"hashes":{"frontend/admin-panel/public/fonts/vazirmatn-v33.003/changelog.md":"fa093ef10c43ccc203d393390dd5e32448663db3eeb3368290f3c1fc8f192f54"}},"frontend/admin-panel/public/fonts/vazirmatn-v33.003/OFL.txt":{"size":4484,"mtime_ns":1787419448463396200,"indexed_at_ns":1787520270253044100,"word_count":671},"frontend/admin-panel/public/fonts/vazirmatn-v33.003/README.md":{"size":2400,"mtime_ns":1787419448464410300,"indexed_at_ns":1787520278805791900,"word_count":270,"hashes":{"frontend/admin-panel/public/fonts/vazirmatn-v33.003/readme.md":"9ec9770ac7654b5a283454e492f8f19387e29986abd213db098706b7e321e7e7"}},"frontend/admin-panel/public/fonts/vazirmatn-v33.003/\u0631\u0627\u0647\u0646\u0645\u0627.txt":{"size":216,"mtime_ns":1787419450094689500,"indexed_at_ns":1787520272663804500,"word_count":14},"frontend/admin-panel/public/icons.svg":{"size":5055,"mtime_ns":1787419450095756900,"indexed_at_ns":1787520272668406800,"word_count":382},"frontend/admin-panel/src/App.tsx":{"size":1125,"mtime_ns":1787419450098701300,"indexed_at_ns":1787520272675838500,"word_count":99},"frontend/admin-panel/src/assets/hero.png":{"size":13057,"mtime_ns":1787419450100385100,"indexed_at_ns":1787520272681569400,"word_count":437},"frontend/admin-panel/src/assets/react.svg":{"size":4126,"mtime_ns":1787419450101398500,"indexed_at_ns":1787520272690751500,"word_count":366},"frontend/admin-panel/src/assets/vite.svg":{"size":8710,"mtime_ns":1787419450102858300,"indexed_at_ns":1787520272696094900,"word_count":439},"frontend/admin-panel/src/components/Layout.tsx":{"size":746,"mtime_ns":1787419450120241000,"indexed_at_ns":1787520272701918100,"word_count":69},"frontend/admin-panel/src/components/ProtectedRoute.tsx":{"size":2413,"mtime_ns":1787419450122356900,"indexed_at_ns":1787520272706458200,"word_count":210},"frontend/admin-panel/src/components/Sidebar.tsx":{"size":13449,"mtime_ns":1787503865788741700,"indexed_at_ns":1787520272718235200,"word_count":1198},"frontend/admin-panel/src/components/Topbar.tsx":{"size":19370,"mtime_ns":1787503865790750000,"indexed_at_ns":1787520272723081300,"word_count":1586},"frontend/admin-panel/src/components/ui/ConfirmModal.tsx":{"size":2358,"mtime_ns":1787419450132507100,"indexed_at_ns":1787520272747082500,"word_count":192},"frontend/admin-panel/src/components/ui/MediaSelector.tsx":{"size":22095,"mtime_ns":1787419450142207900,"indexed_at_ns":1787520272780477700,"word_count":1686},"frontend/admin-panel/src/components/ui/Pagination.tsx":{"size":5645,"mtime_ns":1787419450143731300,"indexed_at_ns":1787520272792417100,"word_count":447},"frontend/admin-panel/src/components/ui/Skeleton.tsx":{"size":184,"mtime_ns":1787419450148992800,"indexed_at_ns":1787520272817275900,"word_count":22},"frontend/admin-panel/src/components/ui/Spinner.tsx":{"size":666,"mtime_ns":1787419450150992000,"indexed_at_ns":1787520272823082300,"word_count":67},"frontend/admin-panel/src/main.tsx":{"size":1088,"mtime_ns":1787419450177581900,"indexed_at_ns":1787520272850678000,"word_count":106},"frontend/admin-panel/src/pages/B2BManager.tsx":{"size":25137,"mtime_ns":1787503865803568500,"indexed_at_ns":1787520272858731600,"word_count":1680},"frontend/admin-panel/src/pages/BannersManager.tsx":{"size":20049,"mtime_ns":1787503865806182900,"indexed_at_ns":1787520272867283800,"word_count":1396},"frontend/admin-panel/src/pages/Blogs.tsx":{"size":16834,"mtime_ns":1787503865808185900,"indexed_at_ns":1787520272872405300,"word_count":1259},"frontend/admin-panel/src/pages/CMS.tsx":{"size":10372,"mtime_ns":1787503865811184800,"indexed_at_ns":1787520272877176200,"word_count":791},"frontend/admin-panel/src/pages/Categories.tsx":{"size":16642,"mtime_ns":1787503865814964600,"indexed_at_ns":1787520272883822700,"word_count":1174},"frontend/admin-panel/src/pages/ContactSubmissions.tsx":{"size":12653,"mtime_ns":1787503865816573800,"indexed_at_ns":1787520272888847400,"word_count":842},"frontend/admin-panel/src/pages/Coupons.tsx":{"size":28395,"mtime_ns":1787503865819110900,"indexed_at_ns":1787520272893507300,"word_count":2147},"frontend/admin-panel/src/pages/Dashboard.tsx":{"size":6148,"mtime_ns":1787419450195182400,"indexed_at_ns":1787520272899336600,"word_count":534},"frontend/admin-panel/src/pages/FinancialSettingsPage.tsx":{"size":13591,"mtime_ns":1787503865826406000,"indexed_at_ns":1787520272915718100,"word_count":928},"frontend/admin-panel/src/pages/IngredientsManager.tsx":{"size":18391,"mtime_ns":1787503865828421600,"indexed_at_ns":1787520272922702000,"word_count":1254},"frontend/admin-panel/src/pages/Login.tsx":{"size":11792,"mtime_ns":1787419450202039300,"indexed_at_ns":1787520272928242300,"word_count":838},"frontend/admin-panel/src/pages/Media.tsx":{"size":30064,"mtime_ns":1787503865830418000,"indexed_at_ns":1787520272935446500,"word_count":2304},"frontend/admin-panel/src/pages/Orders.tsx":{"size":56966,"mtime_ns":1787503865838103500,"indexed_at_ns":1787520272951787700,"word_count":4168},"frontend/admin-panel/src/pages/Pets.tsx":{"size":16985,"mtime_ns":1787503865842474900,"indexed_at_ns":1787520272962310200,"word_count":1209},"frontend/admin-panel/src/pages/PrescriptionsManager.tsx":{"size":19844,"mtime_ns":1787503865844998700,"indexed_at_ns":1787520272967933700,"word_count":1419},"frontend/admin-panel/src/pages/Products.tsx":{"size":104135,"mtime_ns":1787519699261934600,"indexed_at_ns":1787520272973331200,"word_count":6906},"frontend/admin-panel/src/pages/Reports.tsx":{"size":13269,"mtime_ns":1787503865866243400,"indexed_at_ns":1787520272980393000,"word_count":961},"frontend/admin-panel/src/pages/SeoSettingsPage.tsx":{"size":15405,"mtime_ns":1787503865871181300,"indexed_at_ns":1787520272990447500,"word_count":1137},"frontend/admin-panel/src/pages/Settings.tsx":{"size":24804,"mtime_ns":1787503865874658000,"indexed_at_ns":1787520272995376000,"word_count":1701},"frontend/admin-panel/src/pages/SmartAdvisorManager.tsx":{"size":14085,"mtime_ns":1787503865878830800,"indexed_at_ns":1787520273008663900,"word_count":1014},"frontend/admin-panel/src/pages/SystemSettingsPage.tsx":{"size":17166,"mtime_ns":1787503865885756800,"indexed_at_ns":1787520273025636100,"word_count":1133},"frontend/admin-panel/src/pages/TestimonialsManager.tsx":{"size":18985,"mtime_ns":1787503865887891100,"indexed_at_ns":1787520273031053700,"word_count":1297},"frontend/admin-panel/src/pages/UITexts.tsx":{"size":72302,"mtime_ns":1787503865896362000,"indexed_at_ns":1787520273049983300,"word_count":5750},"frontend/admin-panel/src/pages/Users.tsx":{"size":40485,"mtime_ns":1787503865898616700,"indexed_at_ns":1787520273055659300,"word_count":2663},"frontend/admin-panel/src/pages/Videos.tsx":{"size":23174,"mtime_ns":1787503865903904200,"indexed_at_ns":1787520273060623300,"word_count":1604},"frontend/admin-panel/src/pages/WholesaleApplications.tsx":{"size":6879,"mtime_ns":1787503865907041100,"indexed_at_ns":1787520273066176700,"word_count":505},"frontend/admin-panel/src/pages/Wiki.tsx":{"size":16017,"mtime_ns":1787503865916106700,"indexed_at_ns":1787520273071156500,"word_count":1221},"frontend/admin-panel/src/routes/adminRoutes.tsx":{"size":6363,"mtime_ns":1787503865927549200,"indexed_at_ns":1787520273082953500,"word_count":603},"frontend/admin-panel/src/services/api.ts":{"size":5334,"mtime_ns":1787419450269886900,"indexed_at_ns":1787520273087840300,"word_count":479},"frontend/admin-panel/src/store/adminAuthStore.ts":{"size":696,"mtime_ns":1787419450276937400,"indexed_at_ns":1787520273092431500,"word_count":65},"frontend/admin-panel/src/types/admin.ts":{"size":4362,"mtime_ns":1787419450285071000,"indexed_at_ns":1787520273097102100,"word_count":454},"frontend/admin-panel/tailwind.config.js":{"size":193,"mtime_ns":1787419450290818100,"indexed_at_ns":1787520273111847200,"word_count":20},"frontend/admin-panel/tsconfig.app.json":{"size":658,"mtime_ns":1787419450292105600,"indexed_at_ns":1787520278616975700,"word_count":48,"hashes":{"frontend/admin-panel/tsconfig.app.json":"28cc38da50d116bbd0de6a134ffc908e36f80f5a0111e762508845a81e14d66f"}},"frontend/admin-panel/tsconfig.json":{"size":126,"mtime_ns":1787419450293239700,"indexed_at_ns":1787520278619444700,"word_count":15,"hashes":{"frontend/admin-panel/tsconfig.json":"4295d250cc268444585fa286760dec79d63eb3b6640d571c0fbdc73abcf2198a"}},"frontend/admin-panel/tsconfig.node.json":{"size":615,"mtime_ns":1787419450294423800,"indexed_at_ns":1787520278621328000,"word_count":44,"hashes":{"frontend/admin-panel/tsconfig.node.json":"8b11b5e59ddca76e783ba9bc93b761788169c5814c2ce33a822d08464cbbeb45"}},"frontend/admin-panel/vite.config.ts":{"size":168,"mtime_ns":1787419450296120000,"indexed_at_ns":1787520273127611400,"word_count":18},"frontend/application/AGENTS.md":{"size":728,"mtime_ns":1787419450299609500,"indexed_at_ns":1787520273135622500,"word_count":88},"frontend/application/CLAUDE.md":{"size":12,"mtime_ns":1787419450300626700,"indexed_at_ns":1787520278808510300,"word_count":1,"hashes":{"frontend/application/claude.md":"317a5f284cb772fe994d0cbdfe712d4eb9d0e06e10afd9647346b6216c67701e"}},"frontend/application/README.md":{"size":1486,"mtime_ns":1787419450301502100,"indexed_at_ns":1787520278810393400,"word_count":155,"hashes":{"frontend/application/readme.md":"037437bfab34c43cce068b8d18f487e823f94cda5931c7c5e0268451fbe5153d"}},"frontend/application/app/ClientLayout.tsx":{"size":6734,"mtime_ns":1787419472690078100,"indexed_at_ns":1787520273148392000,"word_count":576},"frontend/application/app/HomeClient.tsx":{"size":13471,"mtime_ns":1787419450306448200,"indexed_at_ns":1787520273152497900,"word_count":851},"frontend/application/app/about/page.tsx":{"size":5791,"mtime_ns":1787419450311416300,"indexed_at_ns":1787520273157697100,"word_count":474},"frontend/application/app/blog/[slug]/page.tsx":{"size":7180,"mtime_ns":1787419450315424800,"indexed_at_ns":1787520273162384600,"word_count":543},"frontend/application/app/blog/page.tsx":{"size":1798,"mtime_ns":1787419450316437900,"indexed_at_ns":1787520273168503600,"word_count":179},"frontend/application/app/catalog/CatalogClient.tsx":{"size":1429,"mtime_ns":1787419450318040700,"indexed_at_ns":1787520273172821800,"word_count":129},"frontend/application/app/catalog/page.tsx":{"size":686,"mtime_ns":1787419450319510800,"indexed_at_ns":1787520273177017200,"word_count":66},"frontend/application/app/checkout/page.tsx":{"size":621,"mtime_ns":1787419450322970100,"indexed_at_ns":1787520273182796300,"word_count":60},"frontend/application/app/checkout/success/[id]/page.tsx":{"size":237,"mtime_ns":1787419450325798400,"indexed_at_ns":1787520273187925200,"word_count":31},"frontend/application/app/contact/page.tsx":{"size":1647,"mtime_ns":1787419450327294600,"indexed_at_ns":1787520273192118700,"word_count":137},"frontend/application/app/dashboard/page.tsx":{"size":926,"mtime_ns":1787419450329545500,"indexed_at_ns":1787520273197586000,"word_count":83},"frontend/application/app/error.tsx":{"size":400,"mtime_ns":1787419450330073800,"indexed_at_ns":1787520273204362800,"word_count":50},"frontend/application/app/layout.tsx":{"size":3625,"mtime_ns":1787419450335005300,"indexed_at_ns":1787520273217703800,"word_count":302},"frontend/application/app/loading.tsx":{"size":1405,"mtime_ns":1787419450337008500,"indexed_at_ns":1787520273221690900,"word_count":122},"frontend/application/app/not-found.tsx":{"size":129,"mtime_ns":1787419450338021600,"indexed_at_ns":1787520273225634400,"word_count":15},"frontend/application/app/page.tsx":{"size":1038,"mtime_ns":1787419450339024900,"indexed_at_ns":1787520273229522900,"word_count":114},"frontend/application/app/privacy/page.tsx":{"size":4163,"mtime_ns":1787419450344418500,"indexed_at_ns":1787520273239685200,"word_count":336},"frontend/application/app/profile/page.tsx":{"size":640,"mtime_ns":1787419450364891700,"indexed_at_ns":1787520273244396000,"word_count":63},"frontend/application/app/robots.ts":{"size":760,"mtime_ns":1787419450366544000,"indexed_at_ns":1787520273249419900,"word_count":68},"frontend/application/app/search/page.tsx":{"size":803,"mtime_ns":1787419450369915000,"indexed_at_ns":1787520273253751800,"word_count":82},"frontend/application/app/shop/[slug]/page.tsx":{"size":4963,"mtime_ns":1787419450376986000,"indexed_at_ns":1787520273258555900,"word_count":414},"frontend/application/app/shop/page.tsx":{"size":1657,"mtime_ns":1787419450380003500,"indexed_at_ns":1787520273262958100,"word_count":177},"frontend/application/app/sitemap.ts":{"size":2110,"mtime_ns":1787419450381320600,"indexed_at_ns":1787520273267963700,"word_count":191},"frontend/application/app/track/page.tsx":{"size":628,"mtime_ns":1787419450382848100,"indexed_at_ns":1787520273272289900,"word_count":60},"frontend/application/app/trust-seals/page.tsx":{"size":7297,"mtime_ns":1787419450386896100,"indexed_at_ns":1787520273276455800,"word_count":566},"frontend/application/app/videos/page.tsx":{"size":658,"mtime_ns":1787419450395161500,"indexed_at_ns":1787520273281085500,"word_count":60},"frontend/application/app/wiki/[slug]/page.tsx":{"size":3137,"mtime_ns":1787419450398009900,"indexed_at_ns":1787520273286489200,"word_count":291},"frontend/application/app/wiki/page.tsx":{"size":930,"mtime_ns":1787419450399127400,"indexed_at_ns":1787520273291135900,"word_count":85},"frontend/application/components/AddressModal.tsx":{"size":16480,"mtime_ns":1787419450407248700,"indexed_at_ns":1787520273295008300,"word_count":1109},"frontend/application/components/ArchivePage.tsx":{"size":36177,"mtime_ns":1787519884761268000,"indexed_at_ns":1787520273300893400,"word_count":2777},"frontend/application/components/AuthModal.tsx":{"size":45833,"mtime_ns":1787419450411595500,"indexed_at_ns":1787520273307670700,"word_count":2978},"frontend/application/components/B2BPortal.tsx":{"size":14278,"mtime_ns":1787419450413609700,"indexed_at_ns":1787520273312032400,"word_count":1094},"frontend/application/components/BackButton.tsx":{"size":1158,"mtime_ns":1787419450414608700,"indexed_at_ns":1787520273317867800,"word_count":117},"frontend/application/components/BlogPage.tsx":{"size":25032,"mtime_ns":1787419450430156000,"indexed_at_ns":1787520273325777000,"word_count":1511},"frontend/application/components/CartDrawer.tsx":{"size":21049,"mtime_ns":1787419450446390200,"indexed_at_ns":1787520273342169700,"word_count":1365},"frontend/application/components/CheckoutPage.tsx":{"size":41090,"mtime_ns":1787419472692563900,"indexed_at_ns":1787520273346388700,"word_count":2732},"frontend/application/components/ContactFormClient.tsx":{"size":10789,"mtime_ns":1787419450458503300,"indexed_at_ns":1787520273352366500,"word_count":775},"frontend/application/components/DeleteConfirmModal.tsx":{"size":2390,"mtime_ns":1787419450460707600,"indexed_at_ns":1787520273356524100,"word_count":195},"frontend/application/components/EnamadBadge.tsx":{"size":1545,"mtime_ns":1787419450462237300,"indexed_at_ns":1787520273360695100,"word_count":114},"frontend/application/components/ErrorBoundary.tsx":{"size":2689,"mtime_ns":1787419450465955200,"indexed_at_ns":1787520273366256700,"word_count":235},"frontend/application/components/ErrorPages.tsx":{"size":2872,"mtime_ns":1787419450466914000,"indexed_at_ns":1787520273371213100,"word_count":243},"frontend/application/components/FeaturedProducts.tsx":{"size":10228,"mtime_ns":1787519921614624100,"indexed_at_ns":1787520273379128700,"word_count":854},"frontend/application/components/Footer.tsx":{"size":13764,"mtime_ns":1787419450473134400,"indexed_at_ns":1787520273385209000,"word_count":902},"frontend/application/components/Header.tsx":{"size":31534,"mtime_ns":1787503865936016700,"indexed_at_ns":1787520273389432100,"word_count":2246},"frontend/application/components/HeaderButton.tsx":{"size":2307,"mtime_ns":1787419450477612900,"indexed_at_ns":1787520273394379800,"word_count":208},"frontend/application/components/Hero.tsx":{"size":18911,"mtime_ns":1787518365845011500,"indexed_at_ns":1787520273399586300,"word_count":1556},"frontend/application/components/IngredientWiki.tsx":{"size":20684,"mtime_ns":1787419450481134700,"indexed_at_ns":1787520273403851600,"word_count":1496},"frontend/application/components/LoginModal.tsx":{"size":14187,"mtime_ns":1787419450484644900,"indexed_at_ns":1787520273408108900,"word_count":1121},"frontend/application/components/MaintenancePage.tsx":{"size":3758,"mtime_ns":1787419450507314500,"indexed_at_ns":1787520273412409600,"word_count":313},"frontend/application/components/NetworkBanner.tsx":{"size":2420,"mtime_ns":1787419450510853900,"indexed_at_ns":1787520273420117700,"word_count":214},"frontend/application/components/OrderDetailsModal.tsx":{"size":36873,"mtime_ns":1787419450513378500,"indexed_at_ns":1787520273424100500,"word_count":2479},"frontend/application/components/OrderSuccess.tsx":{"size":6518,"mtime_ns":1787419450515381800,"indexed_at_ns":1787520273428634100,"word_count":521},"frontend/application/components/OrderTracking.tsx":{"size":9276,"mtime_ns":1787419450516378800,"indexed_at_ns":1787520273433943000,"word_count":663},"frontend/application/components/PetProfile.tsx":{"size":84806,"mtime_ns":1787419472695748100,"indexed_at_ns":1787520273438108400,"word_count":5880},"frontend/application/components/PrescriptionUploadModal.tsx":{"size":19298,"mtime_ns":1787419450525963900,"indexed_at_ns":1787520273452467000,"word_count":1331},"frontend/application/components/ProductPage.tsx":{"size":70858,"mtime_ns":1787519826713404900,"indexed_at_ns":1787520273457290200,"word_count":4964},"frontend/application/components/SafeImage.tsx":{"size":2355,"mtime_ns":1787419450531493000,"indexed_at_ns":1787520273468947500,"word_count":196},"frontend/application/components/SearchResultsPage.tsx":{"size":8484,"mtime_ns":1787419450533489800,"indexed_at_ns":1787520273472969000,"word_count":594},"frontend/application/components/SearchableSelect.tsx":{"size":4489,"mtime_ns":1787419450535489300,"indexed_at_ns":1787520273477102600,"word_count":336},"frontend/application/components/Skeleton.tsx":{"size":3170,"mtime_ns":1787419450537494800,"indexed_at_ns":1787520273482201100,"word_count":291},"frontend/application/components/SmartAdvisor.tsx":{"size":35638,"mtime_ns":1787419472697922600,"indexed_at_ns":1787520273486391600,"word_count":2686},"frontend/application/components/TickerBanner.tsx":{"size":1640,"mtime_ns":1787419450545729800,"indexed_at_ns":1787520273495013500,"word_count":140},"frontend/application/components/Tooltip.tsx":{"size":2836,"mtime_ns":1787419450548492200,"indexed_at_ns":1787520273499591700,"word_count":227},"frontend/application/components/TopUpModal.tsx":{"size":9579,"mtime_ns":1787419450560229200,"indexed_at_ns":1787520273503573800,"word_count":741},"frontend/application/components/UserDashboard.tsx":{"size":94297,"mtime_ns":1787419450562219100,"indexed_at_ns":1787520273507771700,"word_count":5939},"frontend/application/components/VetGallery.tsx":{"size":8476,"mtime_ns":1787419450563730200,"indexed_at_ns":1787520273515673400,"word_count":643},"frontend/application/components/VideosPage.tsx":{"size":7159,"mtime_ns":1787419450570876500,"indexed_at_ns":1787520273529340300,"word_count":531},"frontend/application/components/__tests__/CartDrawer.test.tsx":{"size":3299,"mtime_ns":1787419450578465400,"indexed_at_ns":1787520273536301200,"word_count":285},"frontend/application/components/__tests__/FeaturedProducts.test.tsx":{"size":3197,"mtime_ns":1787419450578975500,"indexed_at_ns":1787520273540752200,"word_count":242},"frontend/application/components/__tests__/Footer.test.tsx":{"size":1693,"mtime_ns":1787419450580992000,"indexed_at_ns":1787520273545053200,"word_count":139},"frontend/application/components/__tests__/Header.test.tsx":{"size":3388,"mtime_ns":1787419450581502600,"indexed_at_ns":1787520273551100800,"word_count":261},"frontend/application/components/__tests__/Hero.test.tsx":{"size":2024,"mtime_ns":1787419450583050000,"indexed_at_ns":1787520273555845800,"word_count":192},"frontend/application/components/__tests__/Tooltip.test.tsx":{"size":1559,"mtime_ns":1787419450584587700,"indexed_at_ns":1787520273560168700,"word_count":137},"frontend/application/eslint.config.mjs":{"size":774,"mtime_ns":1787419450592121500,"indexed_at_ns":1787520273579643200,"word_count":61},"frontend/application/lib/data/products.ts":{"size":105258,"mtime_ns":1787419450626711400,"indexed_at_ns":1787520273585024500,"word_count":9701},"frontend/application/lib/data/provinces.ts":{"size":3048,"mtime_ns":1787419450628723900,"indexed_at_ns":1787520273591271700,"word_count":203},"frontend/application/lib/data/scientificTerms.ts":{"size":18370,"mtime_ns":1787419450629725400,"indexed_at_ns":1787520273596565100,"word_count":1756},"frontend/application/lib/hooks/useNetworkStatus.ts":{"size":632,"mtime_ns":1787419450632733200,"indexed_at_ns":1787520273602696400,"word_count":59},"frontend/application/lib/services/api.ts":{"size":3805,"mtime_ns":1787419450642747400,"indexed_at_ns":1787520273611116100,"word_count":391},"frontend/application/lib/services/authService.ts":{"size":4681,"mtime_ns":1787419450646083900,"indexed_at_ns":1787520273618044000,"word_count":509},"frontend/application/lib/services/orderService.ts":{"size":2524,"mtime_ns":1787419450647386200,"indexed_at_ns":1787520273622670300,"word_count":279},"frontend/application/lib/services/productService.ts":{"size":13678,"mtime_ns":1787519728387803200,"indexed_at_ns":1787520273627109000,"word_count":1185},"frontend/application/lib/services/videoService.ts":{"size":1282,"mtime_ns":1787419450651912800,"indexed_at_ns":1787520273638975300,"word_count":144},"frontend/application/lib/store/__tests__/cartStore.test.ts":{"size":4590,"mtime_ns":1787419450657143600,"indexed_at_ns":1787520273643796900,"word_count":386},"frontend/application/lib/store/__tests__/settingsStore.test.ts":{"size":2011,"mtime_ns":1787419450658142600,"indexed_at_ns":1787520273649709100,"word_count":194},"frontend/application/lib/store/__tests__/userStore.test.ts":{"size":3773,"mtime_ns":1787419450660443900,"indexed_at_ns":1787520273654594700,"word_count":289},"frontend/application/lib/store/cartStore.ts":{"size":7162,"mtime_ns":1787419450662120100,"indexed_at_ns":1787520273658964300,"word_count":697},"frontend/application/lib/store/settingsStore.ts":{"size":3722,"mtime_ns":1787419450663326700,"indexed_at_ns":1787520273664512100,"word_count":371},"frontend/application/lib/store/uiStore.ts":{"size":898,"mtime_ns":1787419450664768300,"indexed_at_ns":1787520273670117000,"word_count":100},"frontend/application/lib/store/usePetStore.ts":{"size":8914,"mtime_ns":1787419450666650700,"indexed_at_ns":1787520273674515000,"word_count":850},"frontend/application/lib/store/userStore.ts":{"size":10534,"mtime_ns":1787419450668176200,"indexed_at_ns":1787520273679020400,"word_count":883},"frontend/application/lib/types.ts":{"size":2308,"mtime_ns":1787419450679007900,"indexed_at_ns":1787520273684236100,"word_count":237},"frontend/application/lib/utils.ts":{"size":492,"mtime_ns":1787419450680758700,"indexed_at_ns":1787520273688209600,"word_count":61},"frontend/application/next.config.ts":{"size":2014,"mtime_ns":1787419450682669700,"indexed_at_ns":1787520273693830600,"word_count":181},"frontend/application/package.json":{"size":880,"mtime_ns":1787419450690387100,"indexed_at_ns":1787520278623459600,"word_count":72,"hashes":{"frontend/application/package.json":"92997bcb7f9336548419842f57402f2c858a4e31aae23b7645ed47933bf3108a"}},"frontend/application/postcss.config.mjs":{"size":101,"mtime_ns":1787419450692109300,"indexed_at_ns":1787520273702810500,"word_count":13},"frontend/application/public/assets/images/hero-section-image.png":{"size":6990105,"mtime_ns":1787419450898486500,"indexed_at_ns":1787520273933322200,"word_count":267685},"frontend/application/public/assets/images/regenerated_image_1779109861747.png":{"size":2269101,"mtime_ns":1787419450945990900,"indexed_at_ns":1787520274159933200,"word_count":84979},"frontend/application/public/file.svg":{"size":391,"mtime_ns":1787419450948470600,"indexed_at_ns":1787520274241126000,"word_count":50},"frontend/application/public/fonts/A-Iranian-Sans/A-Iranian-Sans/read me!.txt":{"size":283,"mtime_ns":1787419450965365700,"indexed_at_ns":1787520274261351800,"word_count":15},"frontend/application/public/fonts/IranNastaliq/IranNastaliq/read me!.txt":{"size":283,"mtime_ns":1787419451001502800,"indexed_at_ns":1787520274283106700,"word_count":15},"frontend/application/public/fonts/sahel-font-v3.4.0/CHANGELOG.md":{"size":8866,"mtime_ns":1787419451034612200,"indexed_at_ns":1787520278812163800,"word_count":1077,"hashes":{"frontend/application/public/fonts/sahel-font-v3.4.0/changelog.md":"09558dfeece28202039bf1349c547a4eff2b45e866743ae79dc2f1398f8bf2bc"}},"frontend/application/public/fonts/sahel-font-v3.4.0/README.md":{"size":4269,"mtime_ns":1787419451170886400,"indexed_at_ns":1787520278814895500,"word_count":366,"hashes":{"frontend/application/public/fonts/sahel-font-v3.4.0/readme.md":"943bf5c5fa2eccb404a7e3cf45c31f7ba79f6c464e63d410d7824a05a4917df3"}},"frontend/application/public/fonts/sahel-font-v3.4.0/sample-variable.gif":{"size":236102,"mtime_ns":1787419451283304400,"indexed_at_ns":1787520274742344300,"word_count":10881},"frontend/application/public/fonts/shabnam-font-v5.0.1/CHANGELOG.md":{"size":7473,"mtime_ns":1787419451285319800,"indexed_at_ns":1787520274760419000,"word_count":951},"frontend/application/public/fonts/shabnam-font-v5.0.1/README.md":{"size":3812,"mtime_ns":1787419451446627700,"indexed_at_ns":1787520275001739400,"word_count":283},"frontend/application/public/fonts/shabnam-font-v5.0.1/sample.png":{"size":85019,"mtime_ns":1787419451572915100,"indexed_at_ns":1787520275227855500,"word_count":2615},"frontend/application/public/fonts/vazirmatn-v33.003/AUTHORS.txt":{"size":347,"mtime_ns":1787419451574917000,"indexed_at_ns":1787520275237003700,"word_count":55},"frontend/application/public/fonts/vazirmatn-v33.003/CHANGELOG.md":{"size":40062,"mtime_ns":1787419451576427100,"indexed_at_ns":1787520275243120100,"word_count":5086},"frontend/application/public/fonts/vazirmatn-v33.003/OFL.txt":{"size":4484,"mtime_ns":1787419451577441200,"indexed_at_ns":1787520275252203400,"word_count":671},"frontend/application/public/fonts/vazirmatn-v33.003/README.md":{"size":2400,"mtime_ns":1787419451578440100,"indexed_at_ns":1787520275257969500,"word_count":270},"frontend/application/public/fonts/vazirmatn-v33.003/\u0631\u0627\u0647\u0646\u0645\u0627.txt":{"size":216,"mtime_ns":1787419452893671500,"indexed_at_ns":1787520277500607900,"word_count":14},"frontend/application/public/globe.svg":{"size":1035,"mtime_ns":1787419452894986100,"indexed_at_ns":1787520277504455500,"word_count":154},"frontend/application/public/next.svg":{"size":1375,"mtime_ns":1787419452895497500,"indexed_at_ns":1787520277752504200,"word_count":183},"frontend/application/public/vercel.svg":{"size":128,"mtime_ns":1787419452897486200,"indexed_at_ns":1787520277756715500,"word_count":12},"frontend/application/public/window.svg":{"size":385,"mtime_ns":1787419452898501400,"indexed_at_ns":1787520277761895500,"word_count":63},"frontend/application/tsconfig.json":{"size":784,"mtime_ns":1787419452899502800,"indexed_at_ns":1787520278625211800,"word_count":61,"hashes":{"frontend/application/tsconfig.json":"0ccbc30019878c8592b1021fcc39f568696a13f768d8289fc9be4cc4bab0bae2"}},"frontend/application/vitest.config.ts":{"size":255,"mtime_ns":1787419452900498400,"indexed_at_ns":1787520277773941100,"word_count":25},"frontend/application/vitest.setup.ts":{"size":557,"mtime_ns":1787419452901960600,"indexed_at_ns":1787520277777964900,"word_count":58},"metadata.json":{"size":342,"mtime_ns":1786025098905428800,"indexed_at_ns":1787520278626902100,"word_count":35,"hashes":{"metadata.json":"293bc3d0fa7be4b04cb64d4cba85defb0349092b03a7d79753db4072d58a6cfb"}},"package.json":{"size":1012,"mtime_ns":1787419453804726800,"indexed_at_ns":1787520278628715700,"word_count":118,"hashes":{"package.json":"86c918a11fae31e0dda09df0b0f0e47811590076512da80777a80d8fc9639dca"}},"prometheus.yml":{"size":172,"mtime_ns":1787419453806728500,"indexed_at_ns":1787520277797827500,"word_count":13},"scripts/backup_db.sh":{"size":1398,"mtime_ns":1787419453808728600,"indexed_at_ns":1787520278630954800,"word_count":134,"hashes":{"scripts/backup_db.sh":"196d6f089a5d8b50c7cf3dd1b49477414f73f6d6b13ce861b770e33c925db702"}},"scripts/compose.prod.yml":{"size":2243,"mtime_ns":1787419453809728700,"indexed_at_ns":1787520277808111900,"word_count":120},"scripts/compose.stage.yml":{"size":2642,"mtime_ns":1787419453810728700,"indexed_at_ns":1787520277814924900,"word_count":137},"scripts/deploy.sh":{"size":3443,"mtime_ns":1787419453827465000,"indexed_at_ns":1787520278633816800,"word_count":351,"hashes":{"scripts/deploy.sh":"29555c750c43c87c2ee1eb8fa53816e39a20e78e3581d15c4a973d2285767810"}},"scripts/open-browsers.js":{"size":1599,"mtime_ns":1787419453829479400,"indexed_at_ns":1787520277826852200,"word_count":202},"scripts/start-dev.js":{"size":1740,"mtime_ns":1787419453830480200,"indexed_at_ns":1787520277833606200,"word_count":186},"start.sh":{"size":29,"mtime_ns":1787419453831481300,"indexed_at_ns":1787520278635881600,"word_count":4,"hashes":{"start.sh":"00e66436ffb697f71f528da0ed073843c8aecddcb0572ec47d243778ea6a76c1"}},"swagger.yml":{"size":98946,"mtime_ns":1787419453835480600,"indexed_at_ns":1787520277848792000,"word_count":7031},".antigravity/instructions.md":{"size":229,"mtime_ns":1787419447020269300,"indexed_at_ns":1787520278697734000,"word_count":29,"hashes":{".antigravity/instructions.md":"3cd9f03beffc84b16f571f8c9bb69f6bf715aedb712e85af507d8d6dd4db9061"}},".antigravity/workflows/graphify.md":{"size":44042,"mtime_ns":1787419447022265200,"indexed_at_ns":1787520278700071600,"word_count":5442,"hashes":{".antigravity/workflows/graphify.md":"2aa3c37fc3f9cccdb1fa4efbdd9fa03e8274efb1df4430b1d792283ade7f8078"}},".agents/rules/graphify.md":{"size":947,"mtime_ns":1787419446968999700,"indexed_at_ns":1787520278637559500,"word_count":127,"hashes":{".agents/rules/graphify.md":"e55792958648fb69255e3ce3f71a8fcead36307c34b2d67feda9ac650ac61803"}},".agents/workflows/graphify.md":{"size":239,"mtime_ns":1787419446970997300,"indexed_at_ns":1787520278639471400,"word_count":37,"hashes":{".agents/workflows/graphify.md":"d92622463299d313da48e2cdbebf79d7ea24ffaf2ae2de2a1714be8ee42b22b3"}},"backend/src/payment/dto/initiate-payment.dto.ts":{"size":800,"mtime_ns":1787419447317412500,"indexed_at_ns":1787520268276119400,"word_count":69},"backend/src/payment/dto/verify-payment.dto.ts":{"size":1470,"mtime_ns":1787419447318427600,"indexed_at_ns":1787520268282638900,"word_count":126},"backend/src/payment/payment.controller.ts":{"size":19751,"mtime_ns":1787503865784740900,"indexed_at_ns":1787520268292459200,"word_count":1570},"backend/src/payment/payment.module.ts":{"size":623,"mtime_ns":1787419447325429300,"indexed_at_ns":1787520268296975700,"word_count":61},"backend/src/payment/payment.service.ts":{"size":31822,"mtime_ns":1787503865786741300,"indexed_at_ns":1787520268302178300,"word_count":2750},"backend/src/payment/zibal.service.ts":{"size":26622,"mtime_ns":1787419472682407700,"indexed_at_ns":1787520268312099600,"word_count":2490},"frontend/application/app/payment/verify/page.tsx":{"size":14672,"mtime_ns":1787419450342405200,"indexed_at_ns":1787520273235125400,"word_count":1094},"AGENTS.md":{"size":229,"mtime_ns":1787419447051026800,"indexed_at_ns":1787520278723345800,"word_count":29,"hashes":{"agents.md":"eb5a520c4c05a426c6e4ce131e7cc84721b1a9ce1c039bb8f024326554e2ca05"}},"frontend/admin-panel/src/pages/SmsSettingsPage.tsx":{"size":80593,"mtime_ns":1787503865881055500,"indexed_at_ns":1787520273013571800,"word_count":5444},"backend/src/payment/dto/admin-transaction-filter.dto.ts":{"size":2138,"mtime_ns":1787419447314292500,"indexed_at_ns":1787520268264692200,"word_count":191},"frontend/admin-panel/src/pages/Transactions.tsx":{"size":46199,"mtime_ns":1787503865893068800,"indexed_at_ns":1787520273043008700,"word_count":3213},"backend/src/payment/interfaces/payment-gateway.interface.ts":{"size":1385,"mtime_ns":1787419447320428200,"indexed_at_ns":1787520268287896900,"word_count":128},"frontend/application/components/catalog/CatalogPageSpread.tsx":{"size":24597,"mtime_ns":1787419450586603600,"indexed_at_ns":1787520273564908700,"word_count":1912},"frontend/application/components/catalog/FlipbookCatalog.tsx":{"size":33740,"mtime_ns":1787419450590123500,"indexed_at_ns":1787520273570368800,"word_count":2807},"frontend/application/components/catalog/ProductDetailModal.tsx":{"size":7933,"mtime_ns":1787419450591124600,"indexed_at_ns":1787520273575964400,"word_count":557},"backend/scripts/generate-openapi.d.ts":{"size":12,"mtime_ns":1787419447110232500,"indexed_at_ns":1787520267706148300,"word_count":2},"backend/scripts/generate-openapi.js":{"size":3032,"mtime_ns":1787419447111233500,"indexed_at_ns":1787520267710118500,"word_count":309},"backend/src/admin/dto/user.dto.ts":{"size":2933,"mtime_ns":1787419447140153400,"indexed_at_ns":1787520267781749800,"word_count":259},"backend/src/admin/ssl.controller.ts":{"size":3475,"mtime_ns":1787419447149482100,"indexed_at_ns":1787520267818801200,"word_count":296},"backend/src/admin/ssl.service.ts":{"size":6733,"mtime_ns":1787419447151481900,"indexed_at_ns":1787520267824425900,"word_count":612},"backend/src/auth/auth.constants.ts":{"size":467,"mtime_ns":1787419447162710600,"indexed_at_ns":1787520267859511800,"word_count":32},"backend/src/common/utils/phone.utils.ts":{"size":1125,"mtime_ns":1787419447257681200,"indexed_at_ns":1787520268107646200,"word_count":149},"backend/src/reviews/dto/create-review.dto.ts":{"size":992,"mtime_ns":1787419447375394900,"indexed_at_ns":1787520268439073600,"word_count":92},"backend/src/reviews/dto/update-review.dto.ts":{"size":553,"mtime_ns":1787419447376396000,"indexed_at_ns":1787520268444084100,"word_count":53},"backend/src/reviews/reviews.controller.ts":{"size":3328,"mtime_ns":1787419447377393500,"indexed_at_ns":1787520268449097400,"word_count":314},"backend/src/reviews/reviews.module.ts":{"size":386,"mtime_ns":1787419447378395500,"indexed_at_ns":1787520268455626400,"word_count":38},"backend/src/reviews/reviews.service.ts":{"size":6653,"mtime_ns":1787419447380394800,"indexed_at_ns":1787520268460097600,"word_count":686},"backend/src/settings/default-ui-texts.ts":{"size":19638,"mtime_ns":1787419447385744100,"indexed_at_ns":1787520268481201900,"word_count":1538},"backend/src/settings/dto/sms-log-query.dto.ts":{"size":1395,"mtime_ns":1787419447387892300,"indexed_at_ns":1787520268487172000,"word_count":125},"backend/src/tickets/dto/create-ticket.dto.ts":{"size":2472,"mtime_ns":1787419447414614400,"indexed_at_ns":1787520268550910800,"word_count":201},"backend/src/tickets/dto/ticket-query.dto.ts":{"size":1143,"mtime_ns":1787419447415615400,"indexed_at_ns":1787520268556570800,"word_count":106},"backend/src/tickets/tickets.controller.ts":{"size":3218,"mtime_ns":1787419447416615800,"indexed_at_ns":1787520268561799200,"word_count":293},"backend/src/tickets/tickets.module.ts":{"size":386,"mtime_ns":1787419447417618500,"indexed_at_ns":1787520268568284300,"word_count":38},"backend/src/tickets/tickets.service.ts":{"size":7604,"mtime_ns":1787419447420622300,"indexed_at_ns":1787520268573385800,"word_count":781},"frontend/admin-panel/src/pages/Reviews.tsx":{"size":21261,"mtime_ns":1787503865868489900,"indexed_at_ns":1787520272985555800,"word_count":1479},"frontend/admin-panel/src/pages/SslSettingsPage.tsx":{"size":26059,"mtime_ns":1787503865883503300,"indexed_at_ns":1787520273019967900,"word_count":1847},"frontend/admin-panel/src/pages/Tickets.tsx":{"size":20723,"mtime_ns":1787503865890068300,"indexed_at_ns":1787520273037244100,"word_count":1455},"frontend/application/components/BannerPlacement.tsx":{"size":7809,"mtime_ns":1787419450423526400,"indexed_at_ns":1787520273321846000,"word_count":523},"frontend/application/components/BrandLogo.tsx":{"size":3203,"mtime_ns":1787419450440360600,"indexed_at_ns":1787520273338268200,"word_count":272},"frontend/application/components/ProductReviews.tsx":{"size":16491,"mtime_ns":1787419450530487000,"indexed_at_ns":1787520273463012100,"word_count":1194},"frontend/application/lib/services/ticketService.ts":{"size":1632,"mtime_ns":1787419450650401500,"indexed_at_ns":1787520273632430900,"word_count":170},"frontend/admin-panel/src/components/ui/PriceInput.tsx":{"size":2732,"mtime_ns":1787419450144933800,"indexed_at_ns":1787520272799008700,"word_count":267},"frontend/admin-panel/src/components/ui/Badge.tsx":{"size":1611,"mtime_ns":1787503865792742000,"indexed_at_ns":1787520272736654500,"word_count":158},"frontend/admin-panel/src/components/ui/FormField.tsx":{"size":1741,"mtime_ns":1787419450133297400,"indexed_at_ns":1787520272753454500,"word_count":148},"frontend/admin-panel/src/components/ui/ImagePreviewModal.tsx":{"size":3443,"mtime_ns":1787419450135822300,"indexed_at_ns":1787520272763918700,"word_count":270},"frontend/admin-panel/src/components/ui/Input.tsx":{"size":1793,"mtime_ns":1787419450139193700,"indexed_at_ns":1787520272769814900,"word_count":147},"frontend/admin-panel/src/components/ui/Select.tsx":{"size":1933,"mtime_ns":1787419450146457600,"indexed_at_ns":1787520272809545600,"word_count":160},"frontend/admin-panel/src/components/ui/Textarea.tsx":{"size":1320,"mtime_ns":1787419450151503000,"indexed_at_ns":1787520272827958200,"word_count":110},"frontend/admin-panel/src/components/ui/ToggleSwitch.tsx":{"size":1673,"mtime_ns":1787419450153034200,"indexed_at_ns":1787520272840633700,"word_count":143},"backend/prisma/tsconfig.json":{"size":204,"mtime_ns":1787419447106710200,"indexed_at_ns":1787520278562299700,"word_count":17,"hashes":{"backend/prisma/tsconfig.json":"f6ba24eab812d7f8a01a249b27fe70b8cc728fe84b1a91e0d08844e8f8dc0b4c"}},"backend/src/admin/dto/product.dto.ts":{"size":5731,"mtime_ns":1787419447138151700,"indexed_at_ns":1787520267776345000,"word_count":447},"backend/src/doctors/doctors.controller.ts":{"size":1644,"mtime_ns":1787419447265683400,"indexed_at_ns":1787520268128043500,"word_count":148},"backend/src/doctors/doctors.module.ts":{"size":386,"mtime_ns":1787419447266361900,"indexed_at_ns":1787520268135139100,"word_count":38},"backend/src/doctors/doctors.service.ts":{"size":2434,"mtime_ns":1787419447267380000,"indexed_at_ns":1787520268139559500,"word_count":266},"frontend/admin-panel/src/pages/DoctorsManager.tsx":{"size":23836,"mtime_ns":1787503865821829000,"indexed_at_ns":1787520272904786000,"word_count":1666},"frontend/application/components/TestimonialsSection.tsx":{"size":6625,"mtime_ns":1787419450544731600,"indexed_at_ns":1787520273490967800,"word_count":494},"frontend/application/components/VideoModalPlayer.tsx":{"size":23813,"mtime_ns":1787419450567355200,"indexed_at_ns":1787520273524240200,"word_count":1737},"frontend/application/components/PodcastPlayerModal.tsx":{"size":18602,"mtime_ns":1787419450523966000,"indexed_at_ns":1787520273447939100,"word_count":1488},"frontend/application/components/PodcastInlinePlayer.tsx":{"size":17467,"mtime_ns":1787419450521965800,"indexed_at_ns":1787520273443035300,"word_count":1384},"frontend/admin-panel/src/components/RouteErrorBoundary.tsx":{"size":4153,"mtime_ns":1787419450123355500,"indexed_at_ns":1787520272710983700,"word_count":350},"frontend/admin-panel/src/utils/lazyWithRetry.ts":{"size":1164,"mtime_ns":1787419450289069600,"indexed_at_ns":1787520273103542700,"word_count":114},"frontend/admin-panel/src/components/ui/IconPickerModal.tsx":{"size":5035,"mtime_ns":1787419450135311400,"indexed_at_ns":1787520272758540500,"word_count":397},"frontend/admin-panel/src/components/ui/RichTextEditor.tsx":{"size":8732,"mtime_ns":1787519623781550500,"indexed_at_ns":1787520272804358700,"word_count":658},"frontend/admin-panel/src/pages/PaymentGatewaysPage.tsx":{"size":38659,"mtime_ns":1787503865839318100,"indexed_at_ns":1787520272957150400,"word_count":2521},"frontend/admin-panel/src/pages/ShippingSettingsPage.tsx":{"size":7784,"mtime_ns":1787503865876829000,"indexed_at_ns":1787520273003834400,"word_count":585},"backend/test/app-audit-verification.e2e-spec.d.ts":{"size":12,"mtime_ns":1787419447470166800,"indexed_at_ns":1787520268695453000,"word_count":2},"backend/test/app-audit-verification.e2e-spec.js":{"size":8594,"mtime_ns":1787419447472180500,"indexed_at_ns":1787520268700911600,"word_count":714},"backend/test/app.e2e-spec.d.ts":{"size":12,"mtime_ns":1787419447477880700,"indexed_at_ns":1787520268713856100,"word_count":2},"backend/test/app.e2e-spec.js":{"size":1259,"mtime_ns":1787419447478878600,"indexed_at_ns":1787520268719999400,"word_count":97},"frontend/application/lib/seo.ts":{"size":8313,"mtime_ns":1787419450640749900,"indexed_at_ns":1787520273606651600,"word_count":737},"backend/src/doctors/dto/doctor-query.dto.ts":{"size":1047,"mtime_ns":1787419447269385900,"indexed_at_ns":1787520268144799600,"word_count":116},"backend/src/faq/faq.controller.ts":{"size":2299,"mtime_ns":1787419447272381300,"indexed_at_ns":1787520268150497500,"word_count":199},"backend/src/faq/faq.module.ts":{"size":243,"mtime_ns":1787419447273380700,"indexed_at_ns":1787520268155604700,"word_count":28},"backend/src/faq/faq.service.ts":{"size":1604,"mtime_ns":1787419447274377400,"indexed_at_ns":1787520268159988400,"word_count":184},"backend/src/menu/menu.controller.ts":{"size":3037,"mtime_ns":1787503865781741500,"indexed_at_ns":1787520268221271800,"word_count":265},"backend/src/menu/menu.module.ts":{"size":277,"mtime_ns":1787419447297200100,"indexed_at_ns":1787520268225807300,"word_count":30},"backend/src/menu/menu.service.ts":{"size":7754,"mtime_ns":1787503865782742600,"indexed_at_ns":1787520268230310700,"word_count":799},"backend/src/payment/dto/ebank-checkout.dto.ts":{"size":1433,"mtime_ns":1787419447315901000,"indexed_at_ns":1787520268270058700,"word_count":118},"backend/src/payment/zibal-ebank.service.ts":{"size":10437,"mtime_ns":1787419472680378200,"indexed_at_ns":1787520268307472600,"word_count":1006},"frontend/admin-panel/src/pages/FAQManager.tsx":{"size":12962,"mtime_ns":1787503865824847000,"indexed_at_ns":1787520272909739400,"word_count":937},"frontend/admin-panel/src/pages/MenuManager.tsx":{"size":20127,"mtime_ns":1787503865833593800,"indexed_at_ns":1787520272940599900,"word_count":1512},"frontend/application/components/BlogPreviewSection.tsx":{"size":7511,"mtime_ns":1787419450434179400,"indexed_at_ns":1787520273332121600,"word_count":528},"frontend/application/components/FAQSection.tsx":{"size":4922,"mtime_ns":1787419450468248200,"indexed_at_ns":1787520273375150600,"word_count":394},"frontend/admin-panel/src/pages/ZibalPortalPage.tsx":{"size":56863,"mtime_ns":1787520020070071200,"indexed_at_ns":1787520273075930900,"word_count":3753},"frontend/admin-panel/src/components/TransactionReceiptModal.tsx":{"size":9909,"mtime_ns":1787419450128417300,"indexed_at_ns":1787520272728517000,"word_count":738},"frontend/admin-panel/src/components/ui/Button.tsx":{"size":3706,"mtime_ns":1787503865795742800,"indexed_at_ns":1787520272741615800,"word_count":338},"frontend/admin-panel/src/components/ui/MaskableField.tsx":{"size":3342,"mtime_ns":1787419450140206500,"indexed_at_ns":1787520272774981800,"word_count":310},".vscode/extensions.json":{"size":78,"mtime_ns":1787419472670889500,"indexed_at_ns":1787520278549066600,"word_count":6,"hashes":{".vscode/extensions.json":"42b99f2036423faabced9858f53b83961339383f343850b7f42214d703f430a0"}},"frontend/admin-panel/src/components/ui/Modal.tsx":{"size":3492,"mtime_ns":1787503865797185800,"indexed_at_ns":1787520272787283900,"word_count":324},"frontend/admin-panel/src/components/ui/ThSort.tsx":{"size":1529,"mtime_ns":1787503865798185400,"indexed_at_ns":1787520272834794200,"word_count":148},"frontend/admin-panel/src/pages/MonitoringPage.tsx":{"size":16827,"mtime_ns":1787503865835598000,"indexed_at_ns":1787520272946271400,"word_count":1289},"frontend/admin-panel/src/utils/useTableParams.ts":{"size":4192,"mtime_ns":1787503865928777700,"indexed_at_ns":1787520273108222800,"word_count":441},"frontend/application/public/assets/images/canina-product-placeholder.png":{"size":6990105,"mtime_ns":1787419472833914500,"indexed_at_ns":1787520273707481000,"word_count":267685},"frontend/application/public/images/vets/vet1.webp":{"size":6990105,"mtime_ns":1787419472966010000,"indexed_at_ns":1787520277509022100,"word_count":267685}} \ No newline at end of file +{".ai_agency/AGENCY.md":{"size":9028,"mtime_ns":1787419446973998900,"indexed_at_ns":1787521783246144800,"word_count":1161,"hashes":{".ai_agency/agency.md":"419a5d069432d03a601bfac149b2d2f83503bb72305dde6fe8778c851905002c"}},".ai_agency/agents/00_intake.md":{"size":3937,"mtime_ns":1787419446976000700,"indexed_at_ns":1787521783247705200,"word_count":500,"hashes":{".ai_agency/agents/00_intake.md":"db6562ff1e71d694791926909918643bdd0ef004207f562fd305bd0e212fcda2"}},".ai_agency/agents/01_auditor.md":{"size":3747,"mtime_ns":1787419446977999600,"indexed_at_ns":1787521783249227500,"word_count":467,"hashes":{".ai_agency/agents/01_auditor.md":"6a4613fb397adee1bcd064abc006927bf553ad674f5dfb493076b4966842c23c"}},".ai_agency/agents/02_ceo.md":{"size":2415,"mtime_ns":1787419446978998700,"indexed_at_ns":1787521783250747800,"word_count":294,"hashes":{".ai_agency/agents/02_ceo.md":"bd91670156b112ddb58752a0bd544281a0dee02b00e0899c18004ec09d0de106"}},".ai_agency/agents/03_product_manager.md":{"size":8634,"mtime_ns":1787419446983997500,"indexed_at_ns":1787521783252273000,"word_count":1076,"hashes":{".ai_agency/agents/03_product_manager.md":"87507389cdea75d162d950a26affd8e22ffbff8363b7031d40a14b593c96e722"}},".ai_agency/agents/04_architect.md":{"size":3715,"mtime_ns":1787419446984998400,"indexed_at_ns":1787521783254406400,"word_count":448,"hashes":{".ai_agency/agents/04_architect.md":"24065a334205689166fc397ec3a8d454e8ca752fc19084835903ef9f0493b9d5"}},".ai_agency/agents/05_dev_backend.md":{"size":7342,"mtime_ns":1787419446985999300,"indexed_at_ns":1787521783256567600,"word_count":953,"hashes":{".ai_agency/agents/05_dev_backend.md":"26961abd8210248a04f8cd5ad4141181ac17da826c694746f37b6b0ea9c5a298"}},".ai_agency/agents/06_dev_frontend.md":{"size":7731,"mtime_ns":1787419446988001600,"indexed_at_ns":1787521783258242800,"word_count":1011,"hashes":{".ai_agency/agents/06_dev_frontend.md":"427be2a0d417fdbef1c13ebdb4941497f3f91d46599ba397caf2da55bb8a4240"}},".ai_agency/agents/07_qa_engineer.md":{"size":3881,"mtime_ns":1787419446988997900,"indexed_at_ns":1787521783259783700,"word_count":507,"hashes":{".ai_agency/agents/07_qa_engineer.md":"90fb670935947163a8b97bb3c100d0df75cf86664abd786d73e6a72927562209"}},".ai_agency/agents/08_visual_qa.md":{"size":8119,"mtime_ns":1787419446989998700,"indexed_at_ns":1787521783261343600,"word_count":1121,"hashes":{".ai_agency/agents/08_visual_qa.md":"66d5f6879d897cbc046d7edfedaab77711bf119b6c35a899dc8e1df67f068eba"}},".ai_agency/agents/09_devops_security.md":{"size":7017,"mtime_ns":1787419446991997800,"indexed_at_ns":1787521783263108200,"word_count":908,"hashes":{".ai_agency/agents/09_devops_security.md":"a4c06b4dbf07bae2b25f2efbf8c4ad64aec358ae9d914e454eea395ed701f80b"}},".ai_agency/agents/10_tech_writer.md":{"size":3235,"mtime_ns":1787419446992998300,"indexed_at_ns":1787521783264647800,"word_count":408,"hashes":{".ai_agency/agents/10_tech_writer.md":"7e1f2b60a65bb3191380b350c5bb8ab2889cea16c34261ed91ef5529e2d6b6e9"}},".ai_agency/agents/11_deploy.md":{"size":4089,"mtime_ns":1787419446994001600,"indexed_at_ns":1787521783266191400,"word_count":537,"hashes":{".ai_agency/agents/11_deploy.md":"c7cfe31a24b65c8e89d0e4c7a134b2c01bd66762e6874aa4bc955d9d9beade8a"}},".ai_agency/agents/12_seo_content.md":{"size":11249,"mtime_ns":1787419446994998500,"indexed_at_ns":1787521783267694900,"word_count":1539,"hashes":{".ai_agency/agents/12_seo_content.md":"189188c594d07159bc98b00bcb97a66c84ea87b7dcdc65c02dd96ce935ff6eca"}},".ai_agency/memory/agent_outputs/README.txt":{"size":298,"mtime_ns":1787419446997998600,"indexed_at_ns":1787521770151199800,"word_count":34},".ai_agency/memory/backlog.json":{"size":10895,"mtime_ns":1787419446998998900,"indexed_at_ns":1787521783112917700,"word_count":981,"hashes":{".ai_agency/memory/backlog.json":"95e141415663b03ce16946e6c6bcfbd962f8ac1474b6a0785797161873cf586c"}},".ai_agency/memory/scratchpad.md":{"size":1906,"mtime_ns":1787419446999999100,"indexed_at_ns":1787521783269277800,"word_count":249,"hashes":{".ai_agency/memory/scratchpad.md":"eeef059b96cbc7a23787e9d12828e0f3db0285d360d9f95c62c37b4e8b47b0fd"}},".ai_agency/memory/state.json":{"size":3743,"mtime_ns":1787419447001997500,"indexed_at_ns":1787521783172240300,"word_count":254,"hashes":{".ai_agency/memory/state.json":"6f73fc83efee902d4c986ca55d2e8917c0994a150e8f8ac9861671485397c5ba"}},".ai_agency/orchestrate.py":{"size":6997,"mtime_ns":1787419447002999400,"indexed_at_ns":1787521783174220100,"word_count":644,"hashes":{".ai_agency/orchestrate.py":"fd939a485bcf44a2222bdc5d4c671a981f0cef6bfefc5643eb5b61def4ccbac4"}},".ai_agency/specs/api_contract.md":{"size":1571,"mtime_ns":1787419447005004500,"indexed_at_ns":1787521783271536000,"word_count":139,"hashes":{".ai_agency/specs/api_contract.md":"5f8e3ad984c7828277123b5a5407a24edfd0b1f9d4f30058a0b290492efd64b0"}},".ai_agency/specs/architecture_spec.md":{"size":819,"mtime_ns":1787419447006999200,"indexed_at_ns":1787521783273502600,"word_count":99,"hashes":{".ai_agency/specs/architecture_spec.md":"eb667e7396a4a90e50fe6ad0820ea59800ed284f5bbc7429315fa6f7a34c34be"}},".ai_agency/specs/prd.md":{"size":740,"mtime_ns":1787419447007999200,"indexed_at_ns":1787521783275124800,"word_count":96,"hashes":{".ai_agency/specs/prd.md":"aa77302fe0618e9511b9a233ed2d76ecfbb76813f7f0259fa7ed4d75585e4c40"}},".ai_agency/specs/project_health.md":{"size":458,"mtime_ns":1787419447009736900,"indexed_at_ns":1787521783276766100,"word_count":65,"hashes":{".ai_agency/specs/project_health.md":"d13e03cbbf9fe5c6ff99ab512bd5a0a02984233570fbfdb508c30a1ebabed2db"}},".ai_agency/specs/reviews/README.md":{"size":1044,"mtime_ns":1787419447011261700,"indexed_at_ns":1787521783278288100,"word_count":117,"hashes":{".ai_agency/specs/reviews/readme.md":"c55635a378ebb9823bd4256d104ca92ae586c6e9bb6056bca009e67d3f384e1f"}},".ai_agency/specs/reviews/backend_review.md":{"size":1448,"mtime_ns":1787419447012264300,"indexed_at_ns":1787521783279790400,"word_count":172,"hashes":{".ai_agency/specs/reviews/backend_review.md":"8b7a51ba013db5f162e200ab2ab3d51d0063c8ef9ba2a3cce497dccc925926c7"}},".ai_agency/specs/reviews/code_health_review.md":{"size":2215,"mtime_ns":1787419447013263300,"indexed_at_ns":1787521783281317600,"word_count":279,"hashes":{".ai_agency/specs/reviews/code_health_review.md":"d4b6c645ee75ae52a535bf64845a5bfe047f5891d024896a58e3c6d425849915"}},".ai_agency/specs/reviews/frontend_review.md":{"size":1468,"mtime_ns":1787419447015262500,"indexed_at_ns":1787521783282879200,"word_count":183,"hashes":{".ai_agency/specs/reviews/frontend_review.md":"d7249fe1175eba43749fc57398a558650755e6842ed63faf7abd6f91f1de8116"}},".ai_agency/specs/reviews/security_review.md":{"size":888,"mtime_ns":1787419447016262600,"indexed_at_ns":1787521783284488200,"word_count":110,"hashes":{".ai_agency/specs/reviews/security_review.md":"e2a96e1039dbed88d88958935be248025b2504e9a0caa035d0e264d778dd4a7a"}},".ai_agency/specs/reviews/seo_content_review.md":{"size":1252,"mtime_ns":1787419447017266500,"indexed_at_ns":1787521783286075600,"word_count":156,"hashes":{".ai_agency/specs/reviews/seo_content_review.md":"b9a251adaafd57872d56b2283d827104ef63025823ad38ff374d382fa84c01c2"}},".ai_agency/specs/reviews/ux_review.md":{"size":1145,"mtime_ns":1787419447018267300,"indexed_at_ns":1787521783288383600,"word_count":150,"hashes":{".ai_agency/specs/reviews/ux_review.md":"d034efd98211f598a3b3d3116e2c73a962728cd5ef9e79db7d4d1aa577550f8b"}},".claude/CLAUDE.md":{"size":229,"mtime_ns":1787419447024264200,"indexed_at_ns":1787521783294630500,"word_count":29,"hashes":{".claude/claude.md":"bc13fe68ca2c17442410eba331059e731c5c83c4ea036819b6555449f2f9bd3e"}},".claude/settings.json":{"size":502,"mtime_ns":1787419447025263400,"indexed_at_ns":1787521783175896100,"word_count":38,"hashes":{".claude/settings.json":"7f1d3686b704c4ea28478db0f136f7ad02ad4c443d1d61547195eb41b386e194"}},".claude/skills/graphify/SKILL.md":{"size":44042,"mtime_ns":1787419447029275000,"indexed_at_ns":1787521783296363100,"word_count":5442,"hashes":{".claude/skills/graphify/skill.md":"2a3c9bb17a09ce8ab84d8d1d8da4db0a7d8eae6c870f7ca5314bae1ae58de8e0"}},".claude/skills/graphify/references/add-watch.md":{"size":2542,"mtime_ns":1787419447031276300,"indexed_at_ns":1787521783298160700,"word_count":366,"hashes":{".claude/skills/graphify/references/add-watch.md":"8181d191224cb763e5784fe015ed8b1dcc6c8625efcbbd3b785da24b353da220"}},".claude/skills/graphify/references/exports.md":{"size":3449,"mtime_ns":1787419447034275400,"indexed_at_ns":1787521783299708500,"word_count":470,"hashes":{".claude/skills/graphify/references/exports.md":"d07d2aecc629f8cbfd15d461c635e493f89cd34a90dff941e2c6998977e5d923"}},".claude/skills/graphify/references/extraction-spec.md":{"size":8030,"mtime_ns":1787419447036274700,"indexed_at_ns":1787521783301257000,"word_count":1038,"hashes":{".claude/skills/graphify/references/extraction-spec.md":"4d769f6da15f3fc8dc001f47d99244de39b5218ac8b977c271f3de6c98696fe6"}},".claude/skills/graphify/references/github-and-merge.md":{"size":2223,"mtime_ns":1787419447037274400,"indexed_at_ns":1787521783302839300,"word_count":271,"hashes":{".claude/skills/graphify/references/github-and-merge.md":"892589dad2e5e8bb0a9319333331c551a68d27392f936733b984cbfc9c70e0cf"}},".claude/skills/graphify/references/hooks.md":{"size":1300,"mtime_ns":1787419447039277700,"indexed_at_ns":1787521783305256500,"word_count":193,"hashes":{".claude/skills/graphify/references/hooks.md":"b7dcbbe385d7c6dde267cb5ce91038545bbd733d23b45d96ec2fe40773c9fce2"}},".claude/skills/graphify/references/query.md":{"size":13767,"mtime_ns":1787419447040275100,"indexed_at_ns":1787521783307803500,"word_count":1763,"hashes":{".claude/skills/graphify/references/query.md":"18db36ad456be9d3e87d43dcbe2607ed92f9721baf404daa23127ec9fb489855"}},".claude/skills/graphify/references/transcribe.md":{"size":3225,"mtime_ns":1787419447041274700,"indexed_at_ns":1787521783309618200,"word_count":418,"hashes":{".claude/skills/graphify/references/transcribe.md":"55ecbf088adf1eef94050990e84a3e0f3f76096b666f6bc4a15a7c7da8806fcf"}},".claude/skills/graphify/references/update.md":{"size":10635,"mtime_ns":1787419447042275400,"indexed_at_ns":1787521783311247700,"word_count":1196,"hashes":{".claude/skills/graphify/references/update.md":"5720beed29b64651edc4ff7c3d2f865a1d30d08124b7ef07dbe7b00999700d0a"}},".gitea/scripts/with-vpn.sh":{"size":1875,"mtime_ns":1787419447047506900,"indexed_at_ns":1787521783177515700,"word_count":208,"hashes":{".gitea/scripts/with-vpn.sh":"a923cdd692e23d866cdd55342357fe8206913679d290ae20e0a35da35a47f095"}},".gitea/workflows/deploy.yml":{"size":1023,"mtime_ns":1787419447049014600,"indexed_at_ns":1787521770364288000,"word_count":84},"BACKEND_INTEGRATION.md":{"size":15974,"mtime_ns":1787419447053027100,"indexed_at_ns":1787521770385298300,"word_count":1521},"CLAUDE.md":{"size":781,"mtime_ns":1787419447055051200,"indexed_at_ns":1787521783314368500,"word_count":106,"hashes":{"claude.md":"b5a5237f0dd262308961666186afbe48d20e935dfee4ce03b818c7badbca2cc4"}},"DATABASE_SCHEMA.md":{"size":15717,"mtime_ns":1787419447057124600,"indexed_at_ns":1787521770396584200,"word_count":1566},"README.md":{"size":13252,"mtime_ns":1787419447060138000,"indexed_at_ns":1787521770407278900,"word_count":1310},"backend/README.md":{"size":5126,"mtime_ns":1787419447065137500,"indexed_at_ns":1787521783315887100,"word_count":472,"hashes":{"backend/readme.md":"7e49cd355cede75cdef66c98512212d7b0f91326608e0d31885a8916874eeb4e"}},"backend/eslint.config.mjs":{"size":1700,"mtime_ns":1787419447066140000,"indexed_at_ns":1787521770434761400,"word_count":104},"backend/nest-cli.json":{"size":180,"mtime_ns":1787419447067137000,"indexed_at_ns":1787521783180521400,"word_count":13,"hashes":{"backend/nest-cli.json":"3c187936b9c3a4045b6bc0d54a24603888a9130df6d2927e54a2f3aec07f5e95"}},"backend/package.json":{"size":2852,"mtime_ns":1787419447076000100,"indexed_at_ns":1787521783182330800,"word_count":205,"hashes":{"backend/package.json":"3f2173a31aa98485082f973a7bf8b6b74d2827a2383876ceba9ee86a911be4d1"}},"backend/prisma/migrations/20260526145407_init/migration.sql":{"size":9223,"mtime_ns":1787419447078999200,"indexed_at_ns":1787521783183951700,"word_count":936,"hashes":{"backend/prisma/migrations/20260526145407_init/migration.sql":"29255eee9143f13de17eeb0d3d5201f7d6cd8ae07913806ef8eefad7db0f7929"}},"backend/prisma/migrations/20260526160916_add_ui_texts_and_scientific_terms/migration.sql":{"size":421,"mtime_ns":1787419447080998800,"indexed_at_ns":1787521783185536400,"word_count":48,"hashes":{"backend/prisma/migrations/20260526160916_add_ui_texts_and_scientific_terms/migration.sql":"ac5847950275b508553dd4e1386acca13c8af3df9316c075c98ffd362a572dfd"}},"backend/prisma/scientificTerms.ts":{"size":24708,"mtime_ns":1787419447085002100,"indexed_at_ns":1787521770469413900,"word_count":2294},"backend/prisma/seed-blogs.ts":{"size":7063,"mtime_ns":1787419447087463800,"indexed_at_ns":1787521770476196400,"word_count":620},"backend/prisma/seed-custom.ts":{"size":3957,"mtime_ns":1787419447091476000,"indexed_at_ns":1787521770481276500,"word_count":371},"backend/prisma/seed-home.ts":{"size":3977,"mtime_ns":1787419447092476800,"indexed_at_ns":1787521770485779000,"word_count":374},"backend/prisma/seed-products-data.json":{"size":59766,"mtime_ns":1787419447095477600,"indexed_at_ns":1787521783187226400,"word_count":5730,"hashes":{"backend/prisma/seed-products-data.json":"6ba05ec168a63218a626e2dff118d53be9b8314a3e211bc9c337c00d9d38869f"}},"backend/prisma/seed-products.ts":{"size":28816,"mtime_ns":1787419447097477600,"indexed_at_ns":1787521770497100500,"word_count":2063},"backend/prisma/seed-ui-texts.ts":{"size":9349,"mtime_ns":1787419447099025300,"indexed_at_ns":1787521770502342300,"word_count":755},"backend/prisma/seed-wiki.ts":{"size":24451,"mtime_ns":1787419447100495200,"indexed_at_ns":1787521770508180800,"word_count":2292},"backend/prisma/seed.ts":{"size":31033,"mtime_ns":1787419447104780000,"indexed_at_ns":1787521770513771900,"word_count":2636},"backend/prisma/tsconfig.seed.json":{"size":204,"mtime_ns":1787419447108232900,"indexed_at_ns":1787521783191348800,"word_count":17,"hashes":{"backend/prisma/tsconfig.seed.json":"cba40494ca979cbf0017c51b84bebf8a5e2c80b6ae0ff4ebf76d23a02d5071ec"}},"backend/scripts/generate-openapi.ts":{"size":1431,"mtime_ns":1787419447116702900,"indexed_at_ns":1787521770543886000,"word_count":128},"backend/src/admin/admin.controller.spec.ts":{"size":613,"mtime_ns":1787419447121003600,"indexed_at_ns":1787521770549239200,"word_count":59},"backend/src/admin/admin.controller.ts":{"size":10012,"mtime_ns":1787503865775740200,"indexed_at_ns":1787521770555263800,"word_count":966},"backend/src/admin/admin.module.ts":{"size":1464,"mtime_ns":1787419447123018500,"indexed_at_ns":1787521770561689000,"word_count":145},"backend/src/admin/admin.service.spec.ts":{"size":706,"mtime_ns":1787419447126266900,"indexed_at_ns":1787521770567480700,"word_count":72},"backend/src/admin/admin.service.ts":{"size":30096,"mtime_ns":1787503865777740600,"indexed_at_ns":1787521770574206700,"word_count":2953},"backend/src/admin/blogs.controller.ts":{"size":2923,"mtime_ns":1787419447129102300,"indexed_at_ns":1787521770579725800,"word_count":289},"backend/src/admin/blogs.service.ts":{"size":3458,"mtime_ns":1787419447129629700,"indexed_at_ns":1787521770584934600,"word_count":397},"backend/src/admin/categories.controller.ts":{"size":2257,"mtime_ns":1787419447131964900,"indexed_at_ns":1787521770592824300,"word_count":204},"backend/src/admin/categories.service.ts":{"size":2078,"mtime_ns":1787419447134358400,"indexed_at_ns":1787521770597608600,"word_count":223},"backend/src/admin/dto/admin-query.dto.ts":{"size":654,"mtime_ns":1787419447137158500,"indexed_at_ns":1787521770603036700,"word_count":60},"backend/src/admin/media.controller.ts":{"size":2418,"mtime_ns":1787419447141152300,"indexed_at_ns":1787521770621079300,"word_count":226},"backend/src/admin/media.service.ts":{"size":2824,"mtime_ns":1787419447142861500,"indexed_at_ns":1787521770626847700,"word_count":283},"backend/src/admin/pets.controller.ts":{"size":1237,"mtime_ns":1787419447143878700,"indexed_at_ns":1787521770632133100,"word_count":117},"backend/src/admin/pets.service.ts":{"size":1801,"mtime_ns":1787419447144877200,"indexed_at_ns":1787521770638434600,"word_count":193},"backend/src/admin/reports.controller.ts":{"size":683,"mtime_ns":1787419447145874500,"indexed_at_ns":1787521770643865300,"word_count":66},"backend/src/admin/reports.service.ts":{"size":3512,"mtime_ns":1787419447148467900,"indexed_at_ns":1787521770648898200,"word_count":388},"backend/src/admin/wiki.controller.ts":{"size":1877,"mtime_ns":1787419447152448600,"indexed_at_ns":1787521770665311600,"word_count":179},"backend/src/admin/wiki.service.ts":{"size":1831,"mtime_ns":1787419447155466300,"indexed_at_ns":1787521770669962200,"word_count":195},"backend/src/app.controller.spec.ts":{"size":639,"mtime_ns":1787419447157463900,"indexed_at_ns":1787521770677593200,"word_count":61},"backend/src/app.controller.ts":{"size":286,"mtime_ns":1787419447158312200,"indexed_at_ns":1787521770681771900,"word_count":31},"backend/src/app.module.ts":{"size":4063,"mtime_ns":1787419447159838900,"indexed_at_ns":1787521770685681000,"word_count":375},"backend/src/app.service.ts":{"size":150,"mtime_ns":1787419447160838900,"indexed_at_ns":1787521770691996200,"word_count":19},"backend/src/auth/auth.controller.spec.ts":{"size":1577,"mtime_ns":1787419447163726600,"indexed_at_ns":1787521770702163400,"word_count":149},"backend/src/auth/auth.controller.ts":{"size":4278,"mtime_ns":1787419447165723300,"indexed_at_ns":1787521770709232500,"word_count":386},"backend/src/auth/auth.module.ts":{"size":749,"mtime_ns":1787419447166724200,"indexed_at_ns":1787521770714384400,"word_count":80},"backend/src/auth/auth.service.spec.ts":{"size":4395,"mtime_ns":1787419447169641500,"indexed_at_ns":1787521770720191800,"word_count":379},"backend/src/auth/auth.service.ts":{"size":10052,"mtime_ns":1787419447171656500,"indexed_at_ns":1787521770726978900,"word_count":933},"backend/src/auth/dto/admin-login.dto.ts":{"size":781,"mtime_ns":1787419447173655000,"indexed_at_ns":1787521770732603900,"word_count":82},"backend/src/auth/dto/login.dto.ts":{"size":601,"mtime_ns":1787419447175605900,"indexed_at_ns":1787521770739563700,"word_count":63},"backend/src/auth/dto/register.dto.ts":{"size":1235,"mtime_ns":1787419447176618600,"indexed_at_ns":1787521770744631600,"word_count":115},"backend/src/auth/dto/send-otp.dto.ts":{"size":384,"mtime_ns":1787419447177620600,"indexed_at_ns":1787521770749750300,"word_count":39},"backend/src/auth/dto/verify-otp.dto.ts":{"size":610,"mtime_ns":1787419447179445900,"indexed_at_ns":1787521770756121100,"word_count":64},"backend/src/auth/jwt-auth.guard.ts":{"size":512,"mtime_ns":1787419447182641000,"indexed_at_ns":1787521770761246300,"word_count":58},"backend/src/auth/jwt.strategy.ts":{"size":1158,"mtime_ns":1787419447183642000,"indexed_at_ns":1787521770765845800,"word_count":116},"backend/src/auth/roles.decorator.ts":{"size":55,"mtime_ns":1787419447185641100,"indexed_at_ns":1787521770770965000,"word_count":4},"backend/src/auth/roles.guard.ts":{"size":47,"mtime_ns":1787419447187642500,"indexed_at_ns":1787521770776767500,"word_count":4},"backend/src/b2b/b2b.controller.ts":{"size":2773,"mtime_ns":1787419447190643000,"indexed_at_ns":1787521770781220800,"word_count":246},"backend/src/b2b/b2b.module.ts":{"size":354,"mtime_ns":1787419447192738900,"indexed_at_ns":1787521770786629400,"word_count":38},"backend/src/b2b/b2b.service.ts":{"size":2480,"mtime_ns":1787419447194754500,"indexed_at_ns":1787521770791741600,"word_count":243},"backend/src/banners/banners.controller.ts":{"size":1988,"mtime_ns":1787419447198760300,"indexed_at_ns":1787521770796959800,"word_count":169},"backend/src/banners/banners.module.ts":{"size":386,"mtime_ns":1787419447201710300,"indexed_at_ns":1787521770802660600,"word_count":38},"backend/src/banners/banners.service.ts":{"size":1444,"mtime_ns":1787419447203501200,"indexed_at_ns":1787521770808562800,"word_count":160},"backend/src/blogs/blogs.controller.ts":{"size":2304,"mtime_ns":1787419447205517600,"indexed_at_ns":1787521770814423800,"word_count":197},"backend/src/blogs/blogs.module.ts":{"size":257,"mtime_ns":1787419447208521500,"indexed_at_ns":1787521770819757900,"word_count":28},"backend/src/blogs/blogs.service.ts":{"size":3989,"mtime_ns":1787419447209516000,"indexed_at_ns":1787521770826038700,"word_count":454},"backend/src/blogs/dto/create-blog.dto.ts":{"size":31,"mtime_ns":1787419447211166200,"indexed_at_ns":1787521770832546500,"word_count":4},"backend/src/blogs/dto/update-blog.dto.ts":{"size":168,"mtime_ns":1787419447212180200,"indexed_at_ns":1787521770839466700,"word_count":18},"backend/src/blogs/entities/blog.entity.ts":{"size":22,"mtime_ns":1787419447214234900,"indexed_at_ns":1787521770846529100,"word_count":4},"backend/src/cms/cms.controller.ts":{"size":3634,"mtime_ns":1787419447216249000,"indexed_at_ns":1787521770850885000,"word_count":280},"backend/src/cms/cms.module.ts":{"size":354,"mtime_ns":1787419447217249700,"indexed_at_ns":1787521770857745500,"word_count":38},"backend/src/cms/cms.service.ts":{"size":2586,"mtime_ns":1787419447218250400,"indexed_at_ns":1787521770863612000,"word_count":256},"backend/src/cms/dto/cms.dto.ts":{"size":2454,"mtime_ns":1787419447220250400,"indexed_at_ns":1787521770868679300,"word_count":203},"backend/src/common/decorators/roles.decorator.ts":{"size":161,"mtime_ns":1787419447223249400,"indexed_at_ns":1787521770876104800,"word_count":20},"backend/src/common/dto/pagination.dto.ts":{"size":1242,"mtime_ns":1787419447225902400,"indexed_at_ns":1787521770880946700,"word_count":121},"backend/src/common/filters/http-exception.filter.ts":{"size":5083,"mtime_ns":1787419447227915700,"indexed_at_ns":1787521770886008900,"word_count":492},"backend/src/common/filters/prisma-exception.filter.ts":{"size":2483,"mtime_ns":1787419447229134200,"indexed_at_ns":1787521770893947300,"word_count":228},"backend/src/common/guards/roles.guard.spec.ts":{"size":2497,"mtime_ns":1787419447232144300,"indexed_at_ns":1787521770899008100,"word_count":223},"backend/src/common/guards/roles.guard.ts":{"size":1333,"mtime_ns":1787419447234156600,"indexed_at_ns":1787521770905670400,"word_count":120},"backend/src/common/interceptors/decimal.interceptor.spec.ts":{"size":1744,"mtime_ns":1787419447241156600,"indexed_at_ns":1787521770911537200,"word_count":164},"backend/src/common/interceptors/decimal.interceptor.ts":{"size":1135,"mtime_ns":1787419447243160300,"indexed_at_ns":1787521770917414800,"word_count":118},"backend/src/common/metrics.controller.ts":{"size":2160,"mtime_ns":1787419447247157400,"indexed_at_ns":1787521770924079200,"word_count":206},"backend/src/common/schemas/error-response.schema.ts":{"size":1735,"mtime_ns":1787419447248667900,"indexed_at_ns":1787521770929886600,"word_count":162},"backend/src/common/schemas/paginated-response.schema.ts":{"size":1151,"mtime_ns":1787419447250682000,"indexed_at_ns":1787521770934908400,"word_count":110},"backend/src/common/services/sms.service.ts":{"size":33000,"mtime_ns":1787419447253682200,"indexed_at_ns":1787521770942355400,"word_count":3028},"backend/src/common/sms.module.ts":{"size":213,"mtime_ns":1787419447256681300,"indexed_at_ns":1787521770948250900,"word_count":24},"backend/src/contact/contact.controller.ts":{"size":2075,"mtime_ns":1787419447261682400,"indexed_at_ns":1787521770960400800,"word_count":177},"backend/src/contact/contact.module.ts":{"size":377,"mtime_ns":1787419447262682300,"indexed_at_ns":1787521770965559000,"word_count":38},"backend/src/contact/contact.service.ts":{"size":4870,"mtime_ns":1787419447263788100,"indexed_at_ns":1787521770970276100,"word_count":451},"backend/src/home/dto/create-home.dto.ts":{"size":31,"mtime_ns":1787419447277390300,"indexed_at_ns":1787521771015580600,"word_count":4},"backend/src/home/dto/update-home.dto.ts":{"size":168,"mtime_ns":1787419447278389200,"indexed_at_ns":1787521771020724900,"word_count":18},"backend/src/home/entities/home.entity.ts":{"size":22,"mtime_ns":1787419447279387400,"indexed_at_ns":1787521771026448600,"word_count":4},"backend/src/home/home.controller.ts":{"size":784,"mtime_ns":1787419447280390600,"indexed_at_ns":1787521771030956100,"word_count":69},"backend/src/home/home.module.ts":{"size":250,"mtime_ns":1787419447281388600,"indexed_at_ns":1787521771035768300,"word_count":28},"backend/src/home/home.service.ts":{"size":1425,"mtime_ns":1787419447283912900,"indexed_at_ns":1787521771041268600,"word_count":144},"backend/src/ingredients/ingredients.controller.ts":{"size":2013,"mtime_ns":1787419447287287300,"indexed_at_ns":1787521771047452100,"word_count":165},"backend/src/ingredients/ingredients.module.ts":{"size":418,"mtime_ns":1787419447289816300,"indexed_at_ns":1787521771052403900,"word_count":38},"backend/src/ingredients/ingredients.service.ts":{"size":1580,"mtime_ns":1787419447292163600,"indexed_at_ns":1787521771058510400,"word_count":162},"backend/src/main.ts":{"size":3768,"mtime_ns":1787419447293687900,"indexed_at_ns":1787521771063108100,"word_count":323},"backend/src/orders/dto/create-order.dto.ts":{"size":1972,"mtime_ns":1787419447301826700,"indexed_at_ns":1787521771083007300,"word_count":162},"backend/src/orders/orders.controller.spec.ts":{"size":1966,"mtime_ns":1787419447303837300,"indexed_at_ns":1787521771089378100,"word_count":194},"backend/src/orders/orders.controller.ts":{"size":6141,"mtime_ns":1787419447304841600,"indexed_at_ns":1787521771094300700,"word_count":517},"backend/src/orders/orders.module.ts":{"size":264,"mtime_ns":1787419447306835700,"indexed_at_ns":1787521771099222800,"word_count":28},"backend/src/orders/orders.service.spec.ts":{"size":5130,"mtime_ns":1787419447308837500,"indexed_at_ns":1787521771103610300,"word_count":483},"backend/src/orders/orders.service.ts":{"size":17768,"mtime_ns":1787419447310841600,"indexed_at_ns":1787521771108694200,"word_count":1611},"backend/src/pets/dto/create-health-log.dto.ts":{"size":788,"mtime_ns":1787419447333049800,"indexed_at_ns":1787521771173418500,"word_count":69},"backend/src/pets/dto/create-pet.dto.ts":{"size":1189,"mtime_ns":1787419447335757700,"indexed_at_ns":1787521771178913100,"word_count":104},"backend/src/pets/dto/create-reminder.dto.ts":{"size":840,"mtime_ns":1787419447336756600,"indexed_at_ns":1787521771184277900,"word_count":71},"backend/src/pets/dto/update-pet.dto.ts":{"size":164,"mtime_ns":1787419447338758100,"indexed_at_ns":1787521771191009500,"word_count":18},"backend/src/pets/pets.controller.spec.ts":{"size":2617,"mtime_ns":1787419447340757400,"indexed_at_ns":1787521771195686500,"word_count":269},"backend/src/pets/pets.controller.ts":{"size":8723,"mtime_ns":1787419472684422700,"indexed_at_ns":1787521771200591700,"word_count":781},"backend/src/pets/pets.module.ts":{"size":250,"mtime_ns":1787419447343756700,"indexed_at_ns":1787521771207136900,"word_count":28},"backend/src/pets/pets.service.spec.ts":{"size":3055,"mtime_ns":1787419447344706000,"indexed_at_ns":1787521771212093700,"word_count":272},"backend/src/pets/pets.service.ts":{"size":7251,"mtime_ns":1787419447346231700,"indexed_at_ns":1787521771217311200,"word_count":710},"backend/src/prescriptions/prescriptions.controller.ts":{"size":2434,"mtime_ns":1787419447348742700,"indexed_at_ns":1787521771224616000,"word_count":232},"backend/src/prescriptions/prescriptions.module.ts":{"size":508,"mtime_ns":1787419447349756600,"indexed_at_ns":1787521771229822800,"word_count":45},"backend/src/prescriptions/prescriptions.service.ts":{"size":4831,"mtime_ns":1787419447350758000,"indexed_at_ns":1787521771234357700,"word_count":498},"backend/src/prisma/prisma.module.ts":{"size":219,"mtime_ns":1787419447352758100,"indexed_at_ns":1787521771240679000,"word_count":24},"backend/src/prisma/prisma.service.ts":{"size":4207,"mtime_ns":1787419447354757300,"indexed_at_ns":1787521771245169000,"word_count":413},"backend/src/products/dto/get-products.dto.ts":{"size":1363,"mtime_ns":1787419447356758000,"indexed_at_ns":1787521771250293200,"word_count":115},"backend/src/products/products.controller.spec.ts":{"size":1921,"mtime_ns":1787419447357756700,"indexed_at_ns":1787521771257946500,"word_count":166},"backend/src/products/products.controller.ts":{"size":2524,"mtime_ns":1787419447360757700,"indexed_at_ns":1787521771262836800,"word_count":209},"backend/src/products/products.module.ts":{"size":278,"mtime_ns":1787419447362760700,"indexed_at_ns":1787521771267418400,"word_count":28},"backend/src/products/products.service.spec.ts":{"size":1654,"mtime_ns":1787419447365755400,"indexed_at_ns":1787521771273319000,"word_count":154},"backend/src/products/products.service.ts":{"size":7174,"mtime_ns":1787419447366755500,"indexed_at_ns":1787521771278124800,"word_count":713},"backend/src/redis/redis.module.ts":{"size":214,"mtime_ns":1787419447368756900,"indexed_at_ns":1787521771282843800,"word_count":24},"backend/src/redis/redis.service.spec.ts":{"size":1581,"mtime_ns":1787419447370758900,"indexed_at_ns":1787521771288017100,"word_count":145},"backend/src/redis/redis.service.ts":{"size":1249,"mtime_ns":1787419447371759000,"indexed_at_ns":1787521771293076000,"word_count":132},"backend/src/seo/seo.controller.ts":{"size":931,"mtime_ns":1787419447381393600,"indexed_at_ns":1787521771325760400,"word_count":85},"backend/src/seo/seo.module.ts":{"size":354,"mtime_ns":1787419447382393700,"indexed_at_ns":1787521771331381000,"word_count":38},"backend/src/seo/seo.service.ts":{"size":2093,"mtime_ns":1787419447383396000,"indexed_at_ns":1787521771335964000,"word_count":182},"backend/src/settings/settings.controller.spec.ts":{"size":3053,"mtime_ns":1787419447389891700,"indexed_at_ns":1787521771352163500,"word_count":247},"backend/src/settings/settings.controller.ts":{"size":9263,"mtime_ns":1787419447391891500,"indexed_at_ns":1787521771361295800,"word_count":708},"backend/src/settings/settings.module.ts":{"size":394,"mtime_ns":1787419447392892200,"indexed_at_ns":1787521771366534400,"word_count":38},"backend/src/settings/settings.service.spec.ts":{"size":2814,"mtime_ns":1787419447393893100,"indexed_at_ns":1787521771373023600,"word_count":251},"backend/src/settings/settings.service.ts":{"size":20852,"mtime_ns":1787419472687216600,"indexed_at_ns":1787521771378233300,"word_count":1589},"backend/src/smart-advisor/smart-advisor.controller.ts":{"size":1879,"mtime_ns":1787419447398758600,"indexed_at_ns":1787521771383555500,"word_count":152},"backend/src/smart-advisor/smart-advisor.module.ts":{"size":428,"mtime_ns":1787419447401203900,"indexed_at_ns":1787521771389242200,"word_count":38},"backend/src/smart-advisor/smart-advisor.service.ts":{"size":1286,"mtime_ns":1787419447402725000,"indexed_at_ns":1787521771393755100,"word_count":131},"backend/src/testimonials/testimonials.controller.ts":{"size":1966,"mtime_ns":1787419447404727300,"indexed_at_ns":1787521771398863500,"word_count":160},"backend/src/testimonials/testimonials.module.ts":{"size":426,"mtime_ns":1787419447409822600,"indexed_at_ns":1787521771404226700,"word_count":38},"backend/src/testimonials/testimonials.service.ts":{"size":1314,"mtime_ns":1787419447411822900,"indexed_at_ns":1787521771409140400,"word_count":140},"backend/src/users/dto/address.dto.ts":{"size":1142,"mtime_ns":1787419447424615900,"indexed_at_ns":1787521771443099400,"word_count":99},"backend/src/users/dto/update-profile.dto.ts":{"size":1103,"mtime_ns":1787419447426616300,"indexed_at_ns":1787521771448427800,"word_count":98},"backend/src/users/users.controller.spec.ts":{"size":3440,"mtime_ns":1787419447427617400,"indexed_at_ns":1787521771452758700,"word_count":322},"backend/src/users/users.controller.ts":{"size":7087,"mtime_ns":1787419447430259700,"indexed_at_ns":1787521771458886000,"word_count":590},"backend/src/users/users.module.ts":{"size":285,"mtime_ns":1787419447431727000,"indexed_at_ns":1787521771463939300,"word_count":30},"backend/src/users/users.service.spec.ts":{"size":3949,"mtime_ns":1787419447435097800,"indexed_at_ns":1787521771468309000,"word_count":316},"backend/src/users/users.service.ts":{"size":8511,"mtime_ns":1787419447438111700,"indexed_at_ns":1787521771474242600,"word_count":782},"backend/src/videos/dto/create-video.dto.ts":{"size":1636,"mtime_ns":1787419447441109300,"indexed_at_ns":1787521771479287500,"word_count":127},"backend/src/videos/dto/get-videos-query.dto.ts":{"size":661,"mtime_ns":1787419447442115400,"indexed_at_ns":1787521771484325700,"word_count":77},"backend/src/videos/videos.controller.ts":{"size":1994,"mtime_ns":1787419447444019000,"indexed_at_ns":1787521771490261900,"word_count":173},"backend/src/videos/videos.module.ts":{"size":293,"mtime_ns":1787419447445033500,"indexed_at_ns":1787521771495043500,"word_count":30},"backend/src/videos/videos.service.ts":{"size":2844,"mtime_ns":1787419447446029400,"indexed_at_ns":1787521771499182200,"word_count":290},"backend/src/wholesale/dto/wholesale-apply.dto.ts":{"size":763,"mtime_ns":1787419447449029300,"indexed_at_ns":1787521771505637000,"word_count":66},"backend/src/wholesale/wholesale.controller.ts":{"size":2103,"mtime_ns":1787419447452553200,"indexed_at_ns":1787521771510812100,"word_count":160},"backend/src/wholesale/wholesale.module.ts":{"size":402,"mtime_ns":1787419447454555100,"indexed_at_ns":1787521771515483600,"word_count":38},"backend/src/wholesale/wholesale.service.ts":{"size":2716,"mtime_ns":1787419447455557000,"indexed_at_ns":1787521771519978000,"word_count":266},"backend/src/wiki/dto/create-wiki.dto.ts":{"size":31,"mtime_ns":1787419447458222100,"indexed_at_ns":1787521771527419000,"word_count":4},"backend/src/wiki/dto/update-wiki.dto.ts":{"size":168,"mtime_ns":1787419447459970600,"indexed_at_ns":1787521771532097000,"word_count":18},"backend/src/wiki/entities/wiki.entity.ts":{"size":22,"mtime_ns":1787419447462367100,"indexed_at_ns":1787521771537246300,"word_count":4},"backend/src/wiki/wiki.controller.ts":{"size":1254,"mtime_ns":1787419447463367600,"indexed_at_ns":1787521771542676000,"word_count":110},"backend/src/wiki/wiki.module.ts":{"size":250,"mtime_ns":1787419447465688300,"indexed_at_ns":1787521771548262600,"word_count":28},"backend/src/wiki/wiki.service.ts":{"size":1621,"mtime_ns":1787419447467847900,"indexed_at_ns":1787521771553069500,"word_count":174},"backend/test/app-audit-verification.e2e-spec.ts":{"size":6641,"mtime_ns":1787419447476879800,"indexed_at_ns":1787521771574037500,"word_count":569},"backend/test/app.e2e-spec.ts":{"size":1015,"mtime_ns":1787419447483878100,"indexed_at_ns":1787521771591628900,"word_count":83},"backend/test/jest-e2e.json":{"size":192,"mtime_ns":1787419447484882500,"indexed_at_ns":1787521783193334200,"word_count":17,"hashes":{"backend/test/jest-e2e.json":"f1ac24088d0d54e9c5d604161531003b5da1777b2464855fa05ae3b472365566"}},"backend/tsconfig.build.json":{"size":111,"mtime_ns":1787419447486358600,"indexed_at_ns":1787521783194829200,"word_count":10,"hashes":{"backend/tsconfig.build.json":"590ab6d92f5b42f55875120c412664635ab779d64ab71e724a2414c6fb8b0c95"}},"backend/tsconfig.json":{"size":813,"mtime_ns":1787419447486983300,"indexed_at_ns":1787521783196357600,"word_count":56,"hashes":{"backend/tsconfig.json":"96ac330a1750680715788c041b60112c8e96868bebe72bc4e09729c3c95bc694"}},"backend/uploads/1781288429353-508765350.jpg":{"size":110246,"mtime_ns":1787419447496552700,"indexed_at_ns":1787521771610472100,"word_count":3882},"canina.md":{"size":21919,"mtime_ns":1787419447498074800,"indexed_at_ns":1787521771619428300,"word_count":1983},"canina.pdf":{"size":2858373,"mtime_ns":1787419447565290700,"indexed_at_ns":1787521771625096400,"word_count":0},"docker-compose.yml":{"size":2271,"mtime_ns":1787419447567289000,"indexed_at_ns":1787521771630147900,"word_count":127},"docs/01-introduction.md":{"size":5576,"mtime_ns":1787419447570288100,"indexed_at_ns":1787521771635745100,"word_count":523},"docs/02-user-guide.md":{"size":4336,"mtime_ns":1787419447573286700,"indexed_at_ns":1787521771644295100,"word_count":422},"docs/03-developer-guide.md":{"size":6795,"mtime_ns":1787419447580286600,"indexed_at_ns":1787521771649943500,"word_count":678},"docs/04-setup-and-deployment.md":{"size":4103,"mtime_ns":1787419447584288500,"indexed_at_ns":1787521783317427100,"word_count":425,"hashes":{"docs/04-setup-and-deployment.md":"1d088753100a687210e5cfa367cb0ecb4c6298cdb95883b4852e2f0545e9fabf"}},"docs/05-devops-and-monitoring.md":{"size":3631,"mtime_ns":1787419447586286900,"indexed_at_ns":1787521783318964300,"word_count":374,"hashes":{"docs/05-devops-and-monitoring.md":"017634a31f3e5ba98d623b76bd1b4720574caa6b8445012ab97bc34432f9ebff"}},"docs/06-testing.md":{"size":4258,"mtime_ns":1787419447593550100,"indexed_at_ns":1787521783320731800,"word_count":457,"hashes":{"docs/06-testing.md":"63338cc957d7059368a8632e117fe857e446a4d18f61fecc464400c3b17f8019"}},"docs/README.md":{"size":2770,"mtime_ns":1787419447594550700,"indexed_at_ns":1787521783322831500,"word_count":253,"hashes":{"docs/readme.md":"5e9f8e746cd3dee5a3ccd49ddddc15258470eefc20bc07e2243933abb687361d"}},"docs/audit/00-repository-map.md":{"size":3233,"mtime_ns":1787419447600553300,"indexed_at_ns":1787521783324660800,"word_count":351,"hashes":{"docs/audit/00-repository-map.md":"896dfe9586aa5d7a88d6d6ded846d98181505d68a5fb2b2b36be65b85e22b9fd"}},"docs/audit/01-system-discovery.md":{"size":3839,"mtime_ns":1787419447606559100,"indexed_at_ns":1787521783326715100,"word_count":467,"hashes":{"docs/audit/01-system-discovery.md":"6da1c06d3b033107a35445af0d2ff9f87eff04c8888ff3f0b9ea62694a7c7823"}},"docs/audit/02-audit-plan.md":{"size":5141,"mtime_ns":1787419447609553400,"indexed_at_ns":1787521783328338900,"word_count":530,"hashes":{"docs/audit/02-audit-plan.md":"03da91993339ff789e00f84d0b1849dc9fd1f066819cf54deb9262b034262f65"}},"docs/audit/03-baseline-command-plan.md":{"size":4957,"mtime_ns":1787419447611554100,"indexed_at_ns":1787521783329888200,"word_count":735,"hashes":{"docs/audit/03-baseline-command-plan.md":"3aeddb56f7af1d05de51fb69a572b29cf0fa4fecb9b31c91b13ce4d121184603"}},"docs/audit/04-open-questions.md":{"size":1709,"mtime_ns":1787419447614248700,"indexed_at_ns":1787521783331476300,"word_count":224,"hashes":{"docs/audit/04-open-questions.md":"ba051b383fcd69eea9f3ea74125098db16eaf2b3f0fe96682729ac588597e7de"}},"docs/audit/05-architectural-audit.md":{"size":5004,"mtime_ns":1787419447617246800,"indexed_at_ns":1787521771714474300,"word_count":560},"docs/audit/06-storefront-audit.md":{"size":4308,"mtime_ns":1787419447620249200,"indexed_at_ns":1787521783333007500,"word_count":520,"hashes":{"docs/audit/06-storefront-audit.md":"456437c0213198ca5fab9b157392ddc85b4df85343cbdf3c6972e2e624d2e3a6"}},"docs/audit/07-backend-audit.md":{"size":5171,"mtime_ns":1787419447624249600,"indexed_at_ns":1787521783334524800,"word_count":581,"hashes":{"docs/audit/07-backend-audit.md":"49753f6131b4b4da029184b8dfab64a4daee3ede5c8dc0b2fda550120a891b35"}},"docs/audit/08-admin-features-audit.md":{"size":4344,"mtime_ns":1787419447627421800,"indexed_at_ns":1787521783336066400,"word_count":479,"hashes":{"docs/audit/08-admin-features-audit.md":"959a7809af543c3d58c234fc8496cdbda3749fe6d220137d0cb170475ff60645"}},"docs/audit/09-database-audit.md":{"size":4250,"mtime_ns":1787419447629418800,"indexed_at_ns":1787521783338081900,"word_count":521,"hashes":{"docs/audit/09-database-audit.md":"14ae2684792dfaf2abbf4b046ac2991e1b81efb46027019fadf505ff8cdb1883"}},"docs/audit/10-security-audit.md":{"size":5761,"mtime_ns":1787419447632420500,"indexed_at_ns":1787521771747503200,"word_count":678},"docs/audit/11-code-quality-audit.md":{"size":3498,"mtime_ns":1787419447635432400,"indexed_at_ns":1787521783340104700,"word_count":419,"hashes":{"docs/audit/11-code-quality-audit.md":"527b129de8ecb35503501c720ba9296e7eca9d2a98b7218b1654c072059b26e2"}},"docs/audit/12-testing-audit.md":{"size":4229,"mtime_ns":1787419447638434100,"indexed_at_ns":1787521783341807800,"word_count":486,"hashes":{"docs/audit/12-testing-audit.md":"a9407e604bcb3cad92bd92fd136dfe472310ace4b140c24a7acf8a5fede207c2"}},"docs/audit/13-devops-audit.md":{"size":3550,"mtime_ns":1787419447641434300,"indexed_at_ns":1787521783343404700,"word_count":440,"hashes":{"docs/audit/13-devops-audit.md":"9fc17048b9f7bf6ecb4a3f34bb5ef607d134ea9bafdf8dc494193fc4478b3093"}},"docs/audit/14-documentation-audit.md":{"size":3427,"mtime_ns":1787419447644432900,"indexed_at_ns":1787521783344991000,"word_count":379,"hashes":{"docs/audit/14-documentation-audit.md":"a5047c11c0610cb3f495dd9754b8e838aa81b748f05e1ffc5f58f24ff4cbcd44"}},"docs/audit/15-raw-findings-index.json":{"size":10184,"mtime_ns":1787419447647432500,"indexed_at_ns":1787521783198781400,"word_count":817,"hashes":{"docs/audit/15-raw-findings-index.json":"c374526a5298b073d3fe3b86e4724c7871ef551ba74a67dfad0e0a78c4ac1efe"}},"docs/audit/16-deep-audit-summary.md":{"size":3187,"mtime_ns":1787419447649947100,"indexed_at_ns":1787521783346513100,"word_count":393,"hashes":{"docs/audit/16-deep-audit-summary.md":"348ccf0d0c7d4fd98ba8b2b5673a77773b7cbe91ad7378088df2a9e973ba5bf7"}},"docs/audit/17-source-coverage-manifest.json":{"size":132382,"mtime_ns":1787419447655963500,"indexed_at_ns":1787521783200426000,"word_count":7827,"hashes":{"docs/audit/17-source-coverage-manifest.json":"d9b86b7d55a645e2c31d9f2c37ee88b2516920e958b1ba4d27059834b5eb59f1"}},"docs/audit/18-compiler-diagnostic-dispositions.md":{"size":1981,"mtime_ns":1787419447659964500,"indexed_at_ns":1787521783348055800,"word_count":285,"hashes":{"docs/audit/18-compiler-diagnostic-dispositions.md":"e1abe45307c5e5c0020477b8ff7784c023372244a182a9bf3b6b47d0b1639511"}},"docs/audit/19-finding-verification-report.md":{"size":5490,"mtime_ns":1787419447662964700,"indexed_at_ns":1787521783349571300,"word_count":753,"hashes":{"docs/audit/19-finding-verification-report.md":"d13b8f3ea9d9098687488dc65ae0d45f1783d92e31f55f8478b5448f8dd694fb"}},"docs/audit/20-verified-findings-index.json":{"size":22373,"mtime_ns":1787419447665962500,"indexed_at_ns":1787521783202452000,"word_count":1903,"hashes":{"docs/audit/20-verified-findings-index.json":"a2d033caad9eddd24ef99be4f9c7677e02cccb2f6ed0b6e2659d3da20fd3352f"}},"docs/audit/21-phase2-quality-gate-summary.md":{"size":1754,"mtime_ns":1787419447669962400,"indexed_at_ns":1787521783351089600,"word_count":211,"hashes":{"docs/audit/21-phase2-quality-gate-summary.md":"85d6fc79140da7cdfa839be45168e0db007c7bf9bbfbc99985f401db0ee5bae6"}},"docs/audit/22-tracked-first-party-files.txt":{"size":4591,"mtime_ns":1787419447674963600,"indexed_at_ns":1787521771817735300,"word_count":139},"docs/audit/23-untracked-first-party-files.txt":{"size":60,"mtime_ns":1787419447679977000,"indexed_at_ns":1787521771823947400,"word_count":7},"docs/audit/24-omitted-file-inspection-report.md":{"size":2495,"mtime_ns":1787419447682976400,"indexed_at_ns":1787521783352582200,"word_count":227,"hashes":{"docs/audit/24-omitted-file-inspection-report.md":"dcb987ba2798ff0f280df56b0226bbee90b2a135c8630e9c4c154c70701ec462"}},"docs/audit/25-reference-integrity-validation.json":{"size":1054,"mtime_ns":1787419447686978300,"indexed_at_ns":1787521783204312800,"word_count":82,"hashes":{"docs/audit/25-reference-integrity-validation.json":"3a84a844a5c7930755420d36d65b14cd897c90735db5440e1b6bd873c988d48a"}},"docs/audit/26-phase2-integrity-repair-report.md":{"size":3256,"mtime_ns":1787419447692507900,"indexed_at_ns":1787521783354310000,"word_count":385,"hashes":{"docs/audit/26-phase2-integrity-repair-report.md":"a1523ad93fe2d3d8f28be2c032d7010c67118c8b9f76288b1d6cd5c4f2c9f56b"}},"docs/audit/27-all-tracked-repository-files.txt":{"size":4779,"mtime_ns":1787419447708956000,"indexed_at_ns":1787521771845638800,"word_count":148},"docs/audit/28-full-repository-classification.json":{"size":28950,"mtime_ns":1787419447712329700,"indexed_at_ns":1787521783206211300,"word_count":1782,"hashes":{"docs/audit/28-full-repository-classification.json":"142c809f659478477444c84deb5e8e91d02954020ddd203d7382492e4e6c4e36"}},"docs/audit/29-file-content-evidence.json":{"size":112638,"mtime_ns":1787419447715885700,"indexed_at_ns":1787521783208105500,"word_count":9098,"hashes":{"docs/audit/29-file-content-evidence.json":"541931d49c550af865f938acb61f8d1de4a01800c54e162838020edc9dc8d75a"}},"docs/audit/30-compiler-diagnostics-index.json":{"size":3787,"mtime_ns":1787419447718403200,"indexed_at_ns":1787521783210103800,"word_count":324,"hashes":{"docs/audit/30-compiler-diagnostics-index.json":"a29468f2845f5145ae51529078fac2e217ae83d363fc10ae6ce976c92bc27fe0"}},"docs/audit/31-module-audit-closure.md":{"size":7737,"mtime_ns":1787419447720420000,"indexed_at_ns":1787521783356588300,"word_count":709,"hashes":{"docs/audit/31-module-audit-closure.md":"c6cd286c808a7ad22646964c721252ac5c66a577da18ca90372ad7698575fb48"}},"docs/audit/32-evidence-grade-validation.json":{"size":1689,"mtime_ns":1787419447723418000,"indexed_at_ns":1787521783211643700,"word_count":123,"hashes":{"docs/audit/32-evidence-grade-validation.json":"e3d5f877bd49afce2f7aa858f93e347c284a390b2cbbed28e1bed11ce36ded48"}},"docs/audit/33-final-phase2-audit-closure.md":{"size":2578,"mtime_ns":1787419447727334000,"indexed_at_ns":1787521783358259600,"word_count":271,"hashes":{"docs/audit/33-final-phase2-audit-closure.md":"7933681477448b9d09a1118e059e1bc8469de9e66baa971ba5e74de52f55581a"}},"docs/audit/34-repository-observations.json":{"size":616,"mtime_ns":1787419447729603300,"indexed_at_ns":1787521783213315200,"word_count":49,"hashes":{"docs/audit/34-repository-observations.json":"c7eda5d6d089db59a7d56840b32f406bd1bef84b7734ab2b6548fa22640355c3"}},"docs/audit/35-semantic-review-ledger.json":{"size":101875,"mtime_ns":1787419447734562700,"indexed_at_ns":1787521783214874300,"word_count":6011,"hashes":{"docs/audit/35-semantic-review-ledger.json":"8dda2089b54512b1b74bfb67cddc3dcdd0f73fdc822607ef0822703a6e5ad875"}},"docs/audit/36-mandatory-semantic-scope.json":{"size":8194,"mtime_ns":1787419447736791700,"indexed_at_ns":1787521783216718600,"word_count":638,"hashes":{"docs/audit/36-mandatory-semantic-scope.json":"09f06e0536da69c977118bd4b80e2076678178941faf95c113bf2f879b7df7b4"}},"docs/audit/ADR-AUTH-001.md":{"size":3321,"mtime_ns":1787419447740371800,"indexed_at_ns":1787521771900528600,"word_count":398},"docs/audit/CROSS_BOUNDARY_DEPENDENCIES.md":{"size":2175,"mtime_ns":1787419447743054400,"indexed_at_ns":1787521771908263500,"word_count":239},"docs/audit/FRONTEND_INTEGRATION_REQUIREMENTS.md":{"size":15793,"mtime_ns":1787419447744053200,"indexed_at_ns":1787521771914064400,"word_count":1579},"docs/audit/MASTER-TASK-BACKLOG.md":{"size":30573,"mtime_ns":1787419447747841100,"indexed_at_ns":1787521771921035300,"word_count":3510},"docs/audit/audit-state.json":{"size":4269,"mtime_ns":1787419447751006600,"indexed_at_ns":1787521783218301200,"word_count":267,"hashes":{"docs/audit/audit-state.json":"6f8243328b998a0dc1e017494731c64f27c27c3d66794cb3157e03a4cd2067e1"}},"docs/audit/build_manifest.js":{"size":4188,"mtime_ns":1787419447753911100,"indexed_at_ns":1787521771931328300,"word_count":348},"docs/audit/frontend-route-map.md":{"size":2593,"mtime_ns":1787419447760923700,"indexed_at_ns":1787521771937789400,"word_count":329},"docs/audit/generate_classification.js":{"size":2241,"mtime_ns":1787419447764126600,"indexed_at_ns":1787521771943280300,"word_count":204},"docs/audit/generate_evidence.js":{"size":3179,"mtime_ns":1787419447766241700,"indexed_at_ns":1787521771949607400,"word_count":253},"docs/audit/generate_ledger.js":{"size":7804,"mtime_ns":1787419447769254900,"indexed_at_ns":1787521771954784300,"word_count":620},"docs/audit/generate_manifest.js":{"size":6488,"mtime_ns":1787419447771256900,"indexed_at_ns":1787521771961794900,"word_count":489},"docs/audit/master-task-backlog.json":{"size":22781,"mtime_ns":1787419447776255300,"indexed_at_ns":1787521783220146300,"word_count":2071,"hashes":{"docs/audit/master-task-backlog.json":"10bf53f7be4937d86692ecd773323b0d461b852c4f19a17f496268cd2444a7d1"}},"docs/audit/phase3-execution-plan.md":{"size":6128,"mtime_ns":1787419447780254800,"indexed_at_ns":1787521771974172000,"word_count":736},"docs/audit/phase3-traceability-matrix.md":{"size":5283,"mtime_ns":1787419447784255100,"indexed_at_ns":1787521783359854900,"word_count":692,"hashes":{"docs/audit/phase3-traceability-matrix.md":"472b0b5c9726c4439ae26a1d559fb0993e6f09b5124667e78d6c65024d32e893"}},"docs/audit/phase3.1-backlog-review.md":{"size":9874,"mtime_ns":1787419447789255600,"indexed_at_ns":1787521783361450800,"word_count":1202,"hashes":{"docs/audit/phase3.1-backlog-review.md":"d2d6fdaaabd0fa118990c8cdceee02e51a3c36f03b7ff8832822177d35a8e055"}},"docs/audit/phase3.1-change-log.md":{"size":3816,"mtime_ns":1787419447792255400,"indexed_at_ns":1787521783363036500,"word_count":451,"hashes":{"docs/audit/phase3.1-change-log.md":"0a7b46ebf49f30a004c44ca3b7ebbdf1b80022f4c33fc478f3c6352e56b309b5"}},"docs/audit/phase3.2-change-log.md":{"size":8388,"mtime_ns":1787419447795255300,"indexed_at_ns":1787521783364631600,"word_count":930,"hashes":{"docs/audit/phase3.2-change-log.md":"3ead5564ea9664d08ee62fd2f7fe2112002e0eb5a19aebb2524d9b75c1586a5a"}},"docs/audit/phase3.2-implementation-readiness.md":{"size":4743,"mtime_ns":1787419447798255100,"indexed_at_ns":1787521783366204400,"word_count":517,"hashes":{"docs/audit/phase3.2-implementation-readiness.md":"551a4525ba3b37310e9fcc2b0712be76cffb15fbc91d1ec175c3f8eb1ae4703f"}},"docs/audit/rebuild_honest_ledger.js":{"size":6220,"mtime_ns":1787419447801254800,"indexed_at_ns":1787521772013512000,"word_count":559},"docs/audit/sync_honest_manifest.js":{"size":1241,"mtime_ns":1787419447804254500,"indexed_at_ns":1787521772018458000,"word_count":75},"docs/audit/sync_manifest.js":{"size":1021,"mtime_ns":1787419447807274800,"indexed_at_ns":1787521772024803000,"word_count":62},"docs/audit/validate_evidence_grade.js":{"size":6276,"mtime_ns":1787419447809269600,"indexed_at_ns":1787521772029851100,"word_count":526},"docs/audit/validate_integrity.js":{"size":3487,"mtime_ns":1787419447812268100,"indexed_at_ns":1787521772034327600,"word_count":284},"docs/backlog.md":{"size":26396,"mtime_ns":1787419447814270000,"indexed_at_ns":1787521772041856100,"word_count":2834},"frontend/admin-panel/README.md":{"size":2498,"mtime_ns":1787419447817282100,"indexed_at_ns":1787521783367791000,"word_count":212,"hashes":{"frontend/admin-panel/readme.md":"7be8c0e7d2c84db24f5fb724d5873579df7aa8de89e27f417bd81d7843f90033"}},"frontend/admin-panel/eslint.config.js":{"size":935,"mtime_ns":1787419447818282500,"indexed_at_ns":1787521772061683400,"word_count":69},"frontend/admin-panel/index.html":{"size":376,"mtime_ns":1787419447819281600,"indexed_at_ns":1787521772069833800,"word_count":28},"frontend/admin-panel/package.json":{"size":1113,"mtime_ns":1787419447828282200,"indexed_at_ns":1787521783222811100,"word_count":84,"hashes":{"frontend/admin-panel/package.json":"67bd40c3c60ba8603c94de9380c27243829efb87915bcc88143577e36119657c"}},"frontend/admin-panel/postcss.config.js":{"size":97,"mtime_ns":1787419447829282200,"indexed_at_ns":1787521772083295100,"word_count":11},"frontend/admin-panel/public/favicon.svg":{"size":9522,"mtime_ns":1787419447831799500,"indexed_at_ns":1787521772092746900,"word_count":491},"frontend/admin-panel/public/fonts/A-Iranian-Sans/A-Iranian-Sans/read me!.txt":{"size":283,"mtime_ns":1787419447843477600,"indexed_at_ns":1787521772140165600,"word_count":15},"frontend/admin-panel/public/fonts/IranNastaliq/IranNastaliq/read me!.txt":{"size":283,"mtime_ns":1787419447899804800,"indexed_at_ns":1787521772182216400,"word_count":15},"frontend/admin-panel/public/fonts/sahel-font-v3.4.0/CHANGELOG.md":{"size":8866,"mtime_ns":1787419447920123500,"indexed_at_ns":1787521783369409900,"word_count":1077,"hashes":{"frontend/admin-panel/public/fonts/sahel-font-v3.4.0/changelog.md":"5ad8626941bf79f4103b6456c12d85db5bb61d3f31874ed286797a02132509d0"}},"frontend/admin-panel/public/fonts/sahel-font-v3.4.0/README.md":{"size":4269,"mtime_ns":1787419448066456100,"indexed_at_ns":1787521783372218000,"word_count":366,"hashes":{"frontend/admin-panel/public/fonts/sahel-font-v3.4.0/readme.md":"2cfebaa4d0b6e5a18a1d16f25d9064b405d859623756e51914aa92c5044b3a16"}},"frontend/admin-panel/public/fonts/sahel-font-v3.4.0/sample-variable.gif":{"size":236102,"mtime_ns":1787419448207721100,"indexed_at_ns":1787521772993604100,"word_count":10881},"frontend/admin-panel/public/fonts/shabnam-font-v5.0.1/CHANGELOG.md":{"size":7473,"mtime_ns":1787419448209538400,"indexed_at_ns":1787521783374241000,"word_count":951,"hashes":{"frontend/admin-panel/public/fonts/shabnam-font-v5.0.1/changelog.md":"a9fba064343d5f9c880a4d294f6d1f77b8c0d12381777f5575737d01d376304a"}},"frontend/admin-panel/public/fonts/shabnam-font-v5.0.1/README.md":{"size":3812,"mtime_ns":1787419448347064300,"indexed_at_ns":1787521783375945400,"word_count":283,"hashes":{"frontend/admin-panel/public/fonts/shabnam-font-v5.0.1/readme.md":"5b0fac871e066e2bfb971e175a5c929962a6721645426dab1ab7df7f61069d21"}},"frontend/admin-panel/public/fonts/shabnam-font-v5.0.1/sample.png":{"size":85019,"mtime_ns":1787419448458377000,"indexed_at_ns":1787521773643903900,"word_count":2615},"frontend/admin-panel/public/fonts/vazirmatn-v33.003/AUTHORS.txt":{"size":347,"mtime_ns":1787419448459375200,"indexed_at_ns":1787521773654394100,"word_count":55},"frontend/admin-panel/public/fonts/vazirmatn-v33.003/CHANGELOG.md":{"size":40062,"mtime_ns":1787419448461376800,"indexed_at_ns":1787521783377581200,"word_count":5086,"hashes":{"frontend/admin-panel/public/fonts/vazirmatn-v33.003/changelog.md":"fa093ef10c43ccc203d393390dd5e32448663db3eeb3368290f3c1fc8f192f54"}},"frontend/admin-panel/public/fonts/vazirmatn-v33.003/OFL.txt":{"size":4484,"mtime_ns":1787419448463396200,"indexed_at_ns":1787521773678127700,"word_count":671},"frontend/admin-panel/public/fonts/vazirmatn-v33.003/README.md":{"size":2400,"mtime_ns":1787419448464410300,"indexed_at_ns":1787521783379485000,"word_count":270,"hashes":{"frontend/admin-panel/public/fonts/vazirmatn-v33.003/readme.md":"9ec9770ac7654b5a283454e492f8f19387e29986abd213db098706b7e321e7e7"}},"frontend/admin-panel/public/fonts/vazirmatn-v33.003/\u0631\u0627\u0647\u0646\u0645\u0627.txt":{"size":216,"mtime_ns":1787419450094689500,"indexed_at_ns":1787521776761364400,"word_count":14},"frontend/admin-panel/public/icons.svg":{"size":5055,"mtime_ns":1787419450095756900,"indexed_at_ns":1787521776766987600,"word_count":382},"frontend/admin-panel/src/App.tsx":{"size":1125,"mtime_ns":1787419450098701300,"indexed_at_ns":1787521776783958500,"word_count":99},"frontend/admin-panel/src/assets/hero.png":{"size":13057,"mtime_ns":1787419450100385100,"indexed_at_ns":1787521776792626200,"word_count":437},"frontend/admin-panel/src/assets/react.svg":{"size":4126,"mtime_ns":1787419450101398500,"indexed_at_ns":1787521776805296200,"word_count":366},"frontend/admin-panel/src/assets/vite.svg":{"size":8710,"mtime_ns":1787419450102858300,"indexed_at_ns":1787521776814511600,"word_count":439},"frontend/admin-panel/src/components/Layout.tsx":{"size":746,"mtime_ns":1787419450120241000,"indexed_at_ns":1787521776823083700,"word_count":69},"frontend/admin-panel/src/components/ProtectedRoute.tsx":{"size":2413,"mtime_ns":1787419450122356900,"indexed_at_ns":1787521776829075300,"word_count":210},"frontend/admin-panel/src/components/Sidebar.tsx":{"size":13449,"mtime_ns":1787503865788741700,"indexed_at_ns":1787521776845046400,"word_count":1198},"frontend/admin-panel/src/components/Topbar.tsx":{"size":19370,"mtime_ns":1787503865790750000,"indexed_at_ns":1787521776850762200,"word_count":1586},"frontend/admin-panel/src/components/ui/ConfirmModal.tsx":{"size":2358,"mtime_ns":1787419450132507100,"indexed_at_ns":1787521776883120500,"word_count":192},"frontend/admin-panel/src/components/ui/MediaSelector.tsx":{"size":22095,"mtime_ns":1787419450142207900,"indexed_at_ns":1787521776933310700,"word_count":1686},"frontend/admin-panel/src/components/ui/Pagination.tsx":{"size":5645,"mtime_ns":1787419450143731300,"indexed_at_ns":1787521776964381200,"word_count":447},"frontend/admin-panel/src/components/ui/Skeleton.tsx":{"size":184,"mtime_ns":1787419450148992800,"indexed_at_ns":1787521777019044900,"word_count":22},"frontend/admin-panel/src/components/ui/Spinner.tsx":{"size":666,"mtime_ns":1787419450150992000,"indexed_at_ns":1787521777032343000,"word_count":67},"frontend/admin-panel/src/main.tsx":{"size":1088,"mtime_ns":1787419450177581900,"indexed_at_ns":1787521777156051300,"word_count":106},"frontend/admin-panel/src/pages/B2BManager.tsx":{"size":25137,"mtime_ns":1787503865803568500,"indexed_at_ns":1787521777193657800,"word_count":1680},"frontend/admin-panel/src/pages/BannersManager.tsx":{"size":20049,"mtime_ns":1787503865806182900,"indexed_at_ns":1787521777210330400,"word_count":1396},"frontend/admin-panel/src/pages/Blogs.tsx":{"size":16834,"mtime_ns":1787503865808185900,"indexed_at_ns":1787521777234319900,"word_count":1259},"frontend/admin-panel/src/pages/CMS.tsx":{"size":10372,"mtime_ns":1787503865811184800,"indexed_at_ns":1787521777250922600,"word_count":791},"frontend/admin-panel/src/pages/Categories.tsx":{"size":16642,"mtime_ns":1787503865814964600,"indexed_at_ns":1787521777265441400,"word_count":1174},"frontend/admin-panel/src/pages/ContactSubmissions.tsx":{"size":12653,"mtime_ns":1787503865816573800,"indexed_at_ns":1787521777278802800,"word_count":842},"frontend/admin-panel/src/pages/Coupons.tsx":{"size":28395,"mtime_ns":1787503865819110900,"indexed_at_ns":1787521777292781100,"word_count":2147},"frontend/admin-panel/src/pages/Dashboard.tsx":{"size":6148,"mtime_ns":1787419450195182400,"indexed_at_ns":1787521777327976400,"word_count":534},"frontend/admin-panel/src/pages/FinancialSettingsPage.tsx":{"size":13591,"mtime_ns":1787503865826406000,"indexed_at_ns":1787521777368390000,"word_count":928},"frontend/admin-panel/src/pages/IngredientsManager.tsx":{"size":18391,"mtime_ns":1787503865828421600,"indexed_at_ns":1787521777376855500,"word_count":1254},"frontend/admin-panel/src/pages/Login.tsx":{"size":11792,"mtime_ns":1787419450202039300,"indexed_at_ns":1787521777383141700,"word_count":838},"frontend/admin-panel/src/pages/Media.tsx":{"size":30064,"mtime_ns":1787503865830418000,"indexed_at_ns":1787521777392348800,"word_count":2304},"frontend/admin-panel/src/pages/Orders.tsx":{"size":56966,"mtime_ns":1787503865838103500,"indexed_at_ns":1787521777416793700,"word_count":4168},"frontend/admin-panel/src/pages/Pets.tsx":{"size":16985,"mtime_ns":1787503865842474900,"indexed_at_ns":1787521777439788500,"word_count":1209},"frontend/admin-panel/src/pages/PrescriptionsManager.tsx":{"size":19844,"mtime_ns":1787503865844998700,"indexed_at_ns":1787521777446361800,"word_count":1419},"frontend/admin-panel/src/pages/Products.tsx":{"size":103271,"mtime_ns":1787520351326208300,"indexed_at_ns":1787521777456456900,"word_count":6829},"frontend/admin-panel/src/pages/Reports.tsx":{"size":13269,"mtime_ns":1787503865866243400,"indexed_at_ns":1787521777465543700,"word_count":961},"frontend/admin-panel/src/pages/SeoSettingsPage.tsx":{"size":15405,"mtime_ns":1787503865871181300,"indexed_at_ns":1787521777483158100,"word_count":1137},"frontend/admin-panel/src/pages/Settings.tsx":{"size":24804,"mtime_ns":1787503865874658000,"indexed_at_ns":1787521777495805000,"word_count":1701},"frontend/admin-panel/src/pages/SmartAdvisorManager.tsx":{"size":14085,"mtime_ns":1787503865878830800,"indexed_at_ns":1787521777515701500,"word_count":1014},"frontend/admin-panel/src/pages/SystemSettingsPage.tsx":{"size":17166,"mtime_ns":1787503865885756800,"indexed_at_ns":1787521777541218600,"word_count":1133},"frontend/admin-panel/src/pages/TestimonialsManager.tsx":{"size":18985,"mtime_ns":1787503865887891100,"indexed_at_ns":1787521777549808700,"word_count":1297},"frontend/admin-panel/src/pages/UITexts.tsx":{"size":72302,"mtime_ns":1787503865896362000,"indexed_at_ns":1787521777580956600,"word_count":5750},"frontend/admin-panel/src/pages/Users.tsx":{"size":40485,"mtime_ns":1787503865898616700,"indexed_at_ns":1787521777588847000,"word_count":2663},"frontend/admin-panel/src/pages/Videos.tsx":{"size":23174,"mtime_ns":1787503865903904200,"indexed_at_ns":1787521777595707900,"word_count":1604},"frontend/admin-panel/src/pages/WholesaleApplications.tsx":{"size":6879,"mtime_ns":1787503865907041100,"indexed_at_ns":1787521777603893800,"word_count":505},"frontend/admin-panel/src/pages/Wiki.tsx":{"size":16017,"mtime_ns":1787503865916106700,"indexed_at_ns":1787521777613220800,"word_count":1221},"frontend/admin-panel/src/routes/adminRoutes.tsx":{"size":6363,"mtime_ns":1787503865927549200,"indexed_at_ns":1787521777628734800,"word_count":603},"frontend/admin-panel/src/services/api.ts":{"size":5334,"mtime_ns":1787419450269886900,"indexed_at_ns":1787521777636054200,"word_count":479},"frontend/admin-panel/src/store/adminAuthStore.ts":{"size":696,"mtime_ns":1787419450276937400,"indexed_at_ns":1787521777645093100,"word_count":65},"frontend/admin-panel/src/types/admin.ts":{"size":4362,"mtime_ns":1787419450285071000,"indexed_at_ns":1787521777651209800,"word_count":454},"frontend/admin-panel/tailwind.config.js":{"size":193,"mtime_ns":1787419450290818100,"indexed_at_ns":1787521777676747000,"word_count":20},"frontend/admin-panel/tsconfig.app.json":{"size":658,"mtime_ns":1787419450292105600,"indexed_at_ns":1787521783225685600,"word_count":48,"hashes":{"frontend/admin-panel/tsconfig.app.json":"28cc38da50d116bbd0de6a134ffc908e36f80f5a0111e762508845a81e14d66f"}},"frontend/admin-panel/tsconfig.json":{"size":126,"mtime_ns":1787419450293239700,"indexed_at_ns":1787521783227355800,"word_count":15,"hashes":{"frontend/admin-panel/tsconfig.json":"4295d250cc268444585fa286760dec79d63eb3b6640d571c0fbdc73abcf2198a"}},"frontend/admin-panel/tsconfig.node.json":{"size":615,"mtime_ns":1787419450294423800,"indexed_at_ns":1787521783228957600,"word_count":44,"hashes":{"frontend/admin-panel/tsconfig.node.json":"8b11b5e59ddca76e783ba9bc93b761788169c5814c2ce33a822d08464cbbeb45"}},"frontend/admin-panel/vite.config.ts":{"size":168,"mtime_ns":1787419450296120000,"indexed_at_ns":1787521777697103400,"word_count":18},"frontend/application/AGENTS.md":{"size":728,"mtime_ns":1787419450299609500,"indexed_at_ns":1787521777710119700,"word_count":88},"frontend/application/CLAUDE.md":{"size":12,"mtime_ns":1787419450300626700,"indexed_at_ns":1787521783381038900,"word_count":1,"hashes":{"frontend/application/claude.md":"317a5f284cb772fe994d0cbdfe712d4eb9d0e06e10afd9647346b6216c67701e"}},"frontend/application/README.md":{"size":1486,"mtime_ns":1787419450301502100,"indexed_at_ns":1787521783382628100,"word_count":155,"hashes":{"frontend/application/readme.md":"037437bfab34c43cce068b8d18f487e823f94cda5931c7c5e0268451fbe5153d"}},"frontend/application/app/ClientLayout.tsx":{"size":6734,"mtime_ns":1787419472690078100,"indexed_at_ns":1787521777729605500,"word_count":576},"frontend/application/app/HomeClient.tsx":{"size":13471,"mtime_ns":1787419450306448200,"indexed_at_ns":1787521777736383100,"word_count":851},"frontend/application/app/about/page.tsx":{"size":5791,"mtime_ns":1787419450311416300,"indexed_at_ns":1787521777744741900,"word_count":474},"frontend/application/app/blog/[slug]/page.tsx":{"size":7180,"mtime_ns":1787419450315424800,"indexed_at_ns":1787521777750529100,"word_count":543},"frontend/application/app/blog/page.tsx":{"size":1798,"mtime_ns":1787419450316437900,"indexed_at_ns":1787521777756738700,"word_count":179},"frontend/application/app/catalog/CatalogClient.tsx":{"size":1429,"mtime_ns":1787419450318040700,"indexed_at_ns":1787521777761924500,"word_count":129},"frontend/application/app/catalog/page.tsx":{"size":686,"mtime_ns":1787419450319510800,"indexed_at_ns":1787521777767237600,"word_count":66},"frontend/application/app/checkout/page.tsx":{"size":621,"mtime_ns":1787419450322970100,"indexed_at_ns":1787521777773906900,"word_count":60},"frontend/application/app/checkout/success/[id]/page.tsx":{"size":237,"mtime_ns":1787419450325798400,"indexed_at_ns":1787521777780666700,"word_count":31},"frontend/application/app/contact/page.tsx":{"size":1647,"mtime_ns":1787419450327294600,"indexed_at_ns":1787521777787978100,"word_count":137},"frontend/application/app/dashboard/page.tsx":{"size":926,"mtime_ns":1787419450329545500,"indexed_at_ns":1787521777795294800,"word_count":83},"frontend/application/app/error.tsx":{"size":400,"mtime_ns":1787419450330073800,"indexed_at_ns":1787521777800062600,"word_count":50},"frontend/application/app/layout.tsx":{"size":3625,"mtime_ns":1787419450335005300,"indexed_at_ns":1787521777819329700,"word_count":302},"frontend/application/app/loading.tsx":{"size":1405,"mtime_ns":1787419450337008500,"indexed_at_ns":1787521777829267500,"word_count":122},"frontend/application/app/not-found.tsx":{"size":129,"mtime_ns":1787419450338021600,"indexed_at_ns":1787521777835003100,"word_count":15},"frontend/application/app/page.tsx":{"size":1038,"mtime_ns":1787419450339024900,"indexed_at_ns":1787521777842139500,"word_count":114},"frontend/application/app/privacy/page.tsx":{"size":4163,"mtime_ns":1787419450344418500,"indexed_at_ns":1787521777853988800,"word_count":336},"frontend/application/app/profile/page.tsx":{"size":640,"mtime_ns":1787419450364891700,"indexed_at_ns":1787521777860781800,"word_count":63},"frontend/application/app/robots.ts":{"size":760,"mtime_ns":1787419450366544000,"indexed_at_ns":1787521777865528300,"word_count":68},"frontend/application/app/search/page.tsx":{"size":803,"mtime_ns":1787419450369915000,"indexed_at_ns":1787521777870866500,"word_count":82},"frontend/application/app/shop/[slug]/page.tsx":{"size":4963,"mtime_ns":1787419450376986000,"indexed_at_ns":1787521777877837000,"word_count":414},"frontend/application/app/shop/page.tsx":{"size":1657,"mtime_ns":1787419450380003500,"indexed_at_ns":1787521777883061200,"word_count":177},"frontend/application/app/sitemap.ts":{"size":2110,"mtime_ns":1787419450381320600,"indexed_at_ns":1787521777891171800,"word_count":191},"frontend/application/app/track/page.tsx":{"size":628,"mtime_ns":1787419450382848100,"indexed_at_ns":1787521777903258500,"word_count":60},"frontend/application/app/trust-seals/page.tsx":{"size":7297,"mtime_ns":1787419450386896100,"indexed_at_ns":1787521777914730100,"word_count":566},"frontend/application/app/videos/page.tsx":{"size":658,"mtime_ns":1787419450395161500,"indexed_at_ns":1787521777923394800,"word_count":60},"frontend/application/app/wiki/[slug]/page.tsx":{"size":3137,"mtime_ns":1787419450398009900,"indexed_at_ns":1787521777930016000,"word_count":291},"frontend/application/app/wiki/page.tsx":{"size":930,"mtime_ns":1787419450399127400,"indexed_at_ns":1787521777941129100,"word_count":85},"frontend/application/components/AddressModal.tsx":{"size":16480,"mtime_ns":1787419450407248700,"indexed_at_ns":1787521777948307000,"word_count":1109},"frontend/application/components/ArchivePage.tsx":{"size":35852,"mtime_ns":1787520351330210700,"indexed_at_ns":1787521777957143600,"word_count":2747},"frontend/application/components/AuthModal.tsx":{"size":45833,"mtime_ns":1787419450411595500,"indexed_at_ns":1787521777968057100,"word_count":2978},"frontend/application/components/B2BPortal.tsx":{"size":14278,"mtime_ns":1787419450413609700,"indexed_at_ns":1787521777975816800,"word_count":1094},"frontend/application/components/BackButton.tsx":{"size":1158,"mtime_ns":1787419450414608700,"indexed_at_ns":1787521777980921000,"word_count":117},"frontend/application/components/BlogPage.tsx":{"size":25032,"mtime_ns":1787419450430156000,"indexed_at_ns":1787521777994333800,"word_count":1511},"frontend/application/components/CartDrawer.tsx":{"size":21049,"mtime_ns":1787419450446390200,"indexed_at_ns":1787521778016073100,"word_count":1365},"frontend/application/components/CheckoutPage.tsx":{"size":41090,"mtime_ns":1787419472692563900,"indexed_at_ns":1787521778021976500,"word_count":2732},"frontend/application/components/ContactFormClient.tsx":{"size":10789,"mtime_ns":1787419450458503300,"indexed_at_ns":1787521778032789800,"word_count":775},"frontend/application/components/DeleteConfirmModal.tsx":{"size":2390,"mtime_ns":1787419450460707600,"indexed_at_ns":1787521778037785600,"word_count":195},"frontend/application/components/EnamadBadge.tsx":{"size":1545,"mtime_ns":1787419450462237300,"indexed_at_ns":1787521778042923100,"word_count":114},"frontend/application/components/ErrorBoundary.tsx":{"size":2689,"mtime_ns":1787419450465955200,"indexed_at_ns":1787521778047610600,"word_count":235},"frontend/application/components/ErrorPages.tsx":{"size":2872,"mtime_ns":1787419450466914000,"indexed_at_ns":1787521778052091800,"word_count":243},"frontend/application/components/FeaturedProducts.tsx":{"size":10117,"mtime_ns":1787520351332208800,"indexed_at_ns":1787521778063367600,"word_count":840},"frontend/application/components/Footer.tsx":{"size":13884,"mtime_ns":1787521548111486900,"indexed_at_ns":1787521778067912900,"word_count":901},"frontend/application/components/Header.tsx":{"size":31534,"mtime_ns":1787503865936016700,"indexed_at_ns":1787521778074340000,"word_count":2246},"frontend/application/components/HeaderButton.tsx":{"size":2307,"mtime_ns":1787419450477612900,"indexed_at_ns":1787521778080113000,"word_count":208},"frontend/application/components/Hero.tsx":{"size":18911,"mtime_ns":1787518365845011500,"indexed_at_ns":1787521778084561300,"word_count":1556},"frontend/application/components/IngredientWiki.tsx":{"size":20684,"mtime_ns":1787419450481134700,"indexed_at_ns":1787521778091026700,"word_count":1496},"frontend/application/components/LoginModal.tsx":{"size":14187,"mtime_ns":1787419450484644900,"indexed_at_ns":1787521778096226600,"word_count":1121},"frontend/application/components/MaintenancePage.tsx":{"size":3758,"mtime_ns":1787419450507314500,"indexed_at_ns":1787521778100867400,"word_count":313},"frontend/application/components/NetworkBanner.tsx":{"size":2420,"mtime_ns":1787419450510853900,"indexed_at_ns":1787521778107436300,"word_count":214},"frontend/application/components/OrderDetailsModal.tsx":{"size":36877,"mtime_ns":1787521563534203000,"indexed_at_ns":1787521778111995100,"word_count":2477},"frontend/application/components/OrderSuccess.tsx":{"size":6518,"mtime_ns":1787419450515381800,"indexed_at_ns":1787521778117335200,"word_count":521},"frontend/application/components/OrderTracking.tsx":{"size":9276,"mtime_ns":1787419450516378800,"indexed_at_ns":1787521778123691200,"word_count":663},"frontend/application/components/PetProfile.tsx":{"size":84870,"mtime_ns":1787521674111283000,"indexed_at_ns":1787521778129751600,"word_count":5882},"frontend/application/components/PrescriptionUploadModal.tsx":{"size":19298,"mtime_ns":1787419450525963900,"indexed_at_ns":1787521778149098800,"word_count":1331},"frontend/application/components/ProductPage.tsx":{"size":69742,"mtime_ns":1787521475906934600,"indexed_at_ns":1787521778155607400,"word_count":4864},"frontend/application/components/SafeImage.tsx":{"size":3110,"mtime_ns":1787521107531712100,"indexed_at_ns":1787521778166231000,"word_count":272},"frontend/application/components/SearchResultsPage.tsx":{"size":8484,"mtime_ns":1787419450533489800,"indexed_at_ns":1787521778171004700,"word_count":594},"frontend/application/components/SearchableSelect.tsx":{"size":4489,"mtime_ns":1787419450535489300,"indexed_at_ns":1787521778175830400,"word_count":336},"frontend/application/components/Skeleton.tsx":{"size":3170,"mtime_ns":1787419450537494800,"indexed_at_ns":1787521778180706200,"word_count":291},"frontend/application/components/SmartAdvisor.tsx":{"size":35638,"mtime_ns":1787419472697922600,"indexed_at_ns":1787521778185310500,"word_count":2686},"frontend/application/components/TickerBanner.tsx":{"size":1640,"mtime_ns":1787419450545729800,"indexed_at_ns":1787521778197019800,"word_count":140},"frontend/application/components/Tooltip.tsx":{"size":2836,"mtime_ns":1787419450548492200,"indexed_at_ns":1787521778201871400,"word_count":227},"frontend/application/components/TopUpModal.tsx":{"size":9579,"mtime_ns":1787419450560229200,"indexed_at_ns":1787521778208481400,"word_count":741},"frontend/application/components/UserDashboard.tsx":{"size":94297,"mtime_ns":1787419450562219100,"indexed_at_ns":1787521778213147000,"word_count":5939},"frontend/application/components/VetGallery.tsx":{"size":8476,"mtime_ns":1787419450563730200,"indexed_at_ns":1787521778220228100,"word_count":643},"frontend/application/components/VideosPage.tsx":{"size":7159,"mtime_ns":1787419450570876500,"indexed_at_ns":1787521778230294200,"word_count":531},"frontend/application/components/__tests__/CartDrawer.test.tsx":{"size":3299,"mtime_ns":1787419450578465400,"indexed_at_ns":1787521778236814500,"word_count":285},"frontend/application/components/__tests__/FeaturedProducts.test.tsx":{"size":3197,"mtime_ns":1787419450578975500,"indexed_at_ns":1787521778242918400,"word_count":242},"frontend/application/components/__tests__/Footer.test.tsx":{"size":1693,"mtime_ns":1787419450580992000,"indexed_at_ns":1787521778247722300,"word_count":139},"frontend/application/components/__tests__/Header.test.tsx":{"size":3388,"mtime_ns":1787419450581502600,"indexed_at_ns":1787521778252696100,"word_count":261},"frontend/application/components/__tests__/Hero.test.tsx":{"size":2024,"mtime_ns":1787419450583050000,"indexed_at_ns":1787521778258014700,"word_count":192},"frontend/application/components/__tests__/Tooltip.test.tsx":{"size":1559,"mtime_ns":1787419450584587700,"indexed_at_ns":1787521778262801700,"word_count":137},"frontend/application/eslint.config.mjs":{"size":774,"mtime_ns":1787419450592121500,"indexed_at_ns":1787521778283570000,"word_count":61},"frontend/application/lib/data/products.ts":{"size":105258,"mtime_ns":1787419450626711400,"indexed_at_ns":1787521778293197500,"word_count":9701},"frontend/application/lib/data/provinces.ts":{"size":3048,"mtime_ns":1787419450628723900,"indexed_at_ns":1787521778300694200,"word_count":203},"frontend/application/lib/data/scientificTerms.ts":{"size":18370,"mtime_ns":1787419450629725400,"indexed_at_ns":1787521778308829100,"word_count":1756},"frontend/application/lib/hooks/useNetworkStatus.ts":{"size":632,"mtime_ns":1787419450632733200,"indexed_at_ns":1787521778317271000,"word_count":59},"frontend/application/lib/services/api.ts":{"size":3805,"mtime_ns":1787419450642747400,"indexed_at_ns":1787521778327629400,"word_count":391},"frontend/application/lib/services/authService.ts":{"size":4681,"mtime_ns":1787419450646083900,"indexed_at_ns":1787521778332712000,"word_count":509},"frontend/application/lib/services/orderService.ts":{"size":2524,"mtime_ns":1787419450647386200,"indexed_at_ns":1787521778338847000,"word_count":279},"frontend/application/lib/services/productService.ts":{"size":13617,"mtime_ns":1787520351337220700,"indexed_at_ns":1787521778344112000,"word_count":1177},"frontend/application/lib/services/videoService.ts":{"size":1282,"mtime_ns":1787419450651912800,"indexed_at_ns":1787521778354920800,"word_count":144},"frontend/application/lib/store/__tests__/cartStore.test.ts":{"size":4590,"mtime_ns":1787419450657143600,"indexed_at_ns":1787521778360414100,"word_count":386},"frontend/application/lib/store/__tests__/settingsStore.test.ts":{"size":2011,"mtime_ns":1787419450658142600,"indexed_at_ns":1787521778365413300,"word_count":194},"frontend/application/lib/store/__tests__/userStore.test.ts":{"size":3773,"mtime_ns":1787419450660443900,"indexed_at_ns":1787521778370812300,"word_count":289},"frontend/application/lib/store/cartStore.ts":{"size":7162,"mtime_ns":1787419450662120100,"indexed_at_ns":1787521778376363300,"word_count":697},"frontend/application/lib/store/settingsStore.ts":{"size":3722,"mtime_ns":1787419450663326700,"indexed_at_ns":1787521778381649200,"word_count":371},"frontend/application/lib/store/uiStore.ts":{"size":898,"mtime_ns":1787419450664768300,"indexed_at_ns":1787521778386092200,"word_count":100},"frontend/application/lib/store/usePetStore.ts":{"size":8914,"mtime_ns":1787419450666650700,"indexed_at_ns":1787521778391764300,"word_count":850},"frontend/application/lib/store/userStore.ts":{"size":10534,"mtime_ns":1787419450668176200,"indexed_at_ns":1787521778396425900,"word_count":883},"frontend/application/lib/types.ts":{"size":2308,"mtime_ns":1787419450679007900,"indexed_at_ns":1787521778400895400,"word_count":237},"frontend/application/lib/utils.ts":{"size":492,"mtime_ns":1787419450680758700,"indexed_at_ns":1787521778407580700,"word_count":61},"frontend/application/next.config.ts":{"size":2014,"mtime_ns":1787419450682669700,"indexed_at_ns":1787521778413668100,"word_count":181},"frontend/application/package.json":{"size":880,"mtime_ns":1787419450690387100,"indexed_at_ns":1787521783230761200,"word_count":72,"hashes":{"frontend/application/package.json":"92997bcb7f9336548419842f57402f2c858a4e31aae23b7645ed47933bf3108a"}},"frontend/application/postcss.config.mjs":{"size":101,"mtime_ns":1787419450692109300,"indexed_at_ns":1787521778422393000,"word_count":13},"frontend/application/public/assets/images/hero-section-image.png":{"size":6990105,"mtime_ns":1787419450898486500,"indexed_at_ns":1787521778666653700,"word_count":267685},"frontend/application/public/assets/images/regenerated_image_1779109861747.png":{"size":2269101,"mtime_ns":1787419450945990900,"indexed_at_ns":1787521778880598900,"word_count":84979},"frontend/application/public/file.svg":{"size":391,"mtime_ns":1787419450948470600,"indexed_at_ns":1787521778960257600,"word_count":50},"frontend/application/public/fonts/A-Iranian-Sans/A-Iranian-Sans/read me!.txt":{"size":283,"mtime_ns":1787419450965365700,"indexed_at_ns":1787521778986402300,"word_count":15},"frontend/application/public/fonts/IranNastaliq/IranNastaliq/read me!.txt":{"size":283,"mtime_ns":1787419451001502800,"indexed_at_ns":1787521779010235900,"word_count":15},"frontend/application/public/fonts/sahel-font-v3.4.0/CHANGELOG.md":{"size":8866,"mtime_ns":1787419451034612200,"indexed_at_ns":1787521783384184100,"word_count":1077,"hashes":{"frontend/application/public/fonts/sahel-font-v3.4.0/changelog.md":"09558dfeece28202039bf1349c547a4eff2b45e866743ae79dc2f1398f8bf2bc"}},"frontend/application/public/fonts/sahel-font-v3.4.0/README.md":{"size":4269,"mtime_ns":1787419451170886400,"indexed_at_ns":1787521783385828400,"word_count":366,"hashes":{"frontend/application/public/fonts/sahel-font-v3.4.0/readme.md":"943bf5c5fa2eccb404a7e3cf45c31f7ba79f6c464e63d410d7824a05a4917df3"}},"frontend/application/public/fonts/sahel-font-v3.4.0/sample-variable.gif":{"size":236102,"mtime_ns":1787419451283304400,"indexed_at_ns":1787521779498034800,"word_count":10881},"frontend/application/public/fonts/shabnam-font-v5.0.1/CHANGELOG.md":{"size":7473,"mtime_ns":1787419451285319800,"indexed_at_ns":1787521779516264800,"word_count":951},"frontend/application/public/fonts/shabnam-font-v5.0.1/README.md":{"size":3812,"mtime_ns":1787419451446627700,"indexed_at_ns":1787521779764772600,"word_count":283},"frontend/application/public/fonts/shabnam-font-v5.0.1/sample.png":{"size":85019,"mtime_ns":1787419451572915100,"indexed_at_ns":1787521779982194200,"word_count":2615},"frontend/application/public/fonts/vazirmatn-v33.003/AUTHORS.txt":{"size":347,"mtime_ns":1787419451574917000,"indexed_at_ns":1787521779991646200,"word_count":55},"frontend/application/public/fonts/vazirmatn-v33.003/CHANGELOG.md":{"size":40062,"mtime_ns":1787419451576427100,"indexed_at_ns":1787521779998310500,"word_count":5086},"frontend/application/public/fonts/vazirmatn-v33.003/OFL.txt":{"size":4484,"mtime_ns":1787419451577441200,"indexed_at_ns":1787521780006006000,"word_count":671},"frontend/application/public/fonts/vazirmatn-v33.003/README.md":{"size":2400,"mtime_ns":1787419451578440100,"indexed_at_ns":1787521780012057900,"word_count":270},"frontend/application/public/fonts/vazirmatn-v33.003/\u0631\u0627\u0647\u0646\u0645\u0627.txt":{"size":216,"mtime_ns":1787419452893671500,"indexed_at_ns":1787521782301286900,"word_count":14},"frontend/application/public/globe.svg":{"size":1035,"mtime_ns":1787419452894986100,"indexed_at_ns":1787521782306675200,"word_count":154},"frontend/application/public/next.svg":{"size":1375,"mtime_ns":1787419452895497500,"indexed_at_ns":1787521782531613300,"word_count":183},"frontend/application/public/vercel.svg":{"size":128,"mtime_ns":1787419452897486200,"indexed_at_ns":1787521782540002100,"word_count":12},"frontend/application/public/window.svg":{"size":385,"mtime_ns":1787419452898501400,"indexed_at_ns":1787521782544704100,"word_count":63},"frontend/application/tsconfig.json":{"size":784,"mtime_ns":1787419452899502800,"indexed_at_ns":1787521783232284300,"word_count":61,"hashes":{"frontend/application/tsconfig.json":"0ccbc30019878c8592b1021fcc39f568696a13f768d8289fc9be4cc4bab0bae2"}},"frontend/application/vitest.config.ts":{"size":255,"mtime_ns":1787419452900498400,"indexed_at_ns":1787521782554554600,"word_count":25},"frontend/application/vitest.setup.ts":{"size":557,"mtime_ns":1787419452901960600,"indexed_at_ns":1787521782560120900,"word_count":58},"metadata.json":{"size":342,"mtime_ns":1786025098905428800,"indexed_at_ns":1787521783233783200,"word_count":35,"hashes":{"metadata.json":"293bc3d0fa7be4b04cb64d4cba85defb0349092b03a7d79753db4072d58a6cfb"}},"package.json":{"size":1012,"mtime_ns":1787419453804726800,"indexed_at_ns":1787521783235241800,"word_count":118,"hashes":{"package.json":"86c918a11fae31e0dda09df0b0f0e47811590076512da80777a80d8fc9639dca"}},"prometheus.yml":{"size":172,"mtime_ns":1787419453806728500,"indexed_at_ns":1787521782574664500,"word_count":13},"scripts/backup_db.sh":{"size":1398,"mtime_ns":1787419453808728600,"indexed_at_ns":1787521783236939900,"word_count":134,"hashes":{"scripts/backup_db.sh":"196d6f089a5d8b50c7cf3dd1b49477414f73f6d6b13ce861b770e33c925db702"}},"scripts/compose.prod.yml":{"size":2243,"mtime_ns":1787419453809728700,"indexed_at_ns":1787521782583913200,"word_count":120},"scripts/compose.stage.yml":{"size":2642,"mtime_ns":1787419453810728700,"indexed_at_ns":1787521782589636800,"word_count":137},"scripts/deploy.sh":{"size":3443,"mtime_ns":1787419453827465000,"indexed_at_ns":1787521783239103400,"word_count":351,"hashes":{"scripts/deploy.sh":"29555c750c43c87c2ee1eb8fa53816e39a20e78e3581d15c4a973d2285767810"}},"scripts/open-browsers.js":{"size":1599,"mtime_ns":1787419453829479400,"indexed_at_ns":1787521782600065200,"word_count":202},"scripts/start-dev.js":{"size":1740,"mtime_ns":1787419453830480200,"indexed_at_ns":1787521782605384500,"word_count":186},"start.sh":{"size":29,"mtime_ns":1787419453831481300,"indexed_at_ns":1787521783240864900,"word_count":4,"hashes":{"start.sh":"00e66436ffb697f71f528da0ed073843c8aecddcb0572ec47d243778ea6a76c1"}},"swagger.yml":{"size":98946,"mtime_ns":1787419453835480600,"indexed_at_ns":1787521782615722600,"word_count":7031},".antigravity/instructions.md":{"size":229,"mtime_ns":1787419447020269300,"indexed_at_ns":1787521783290213100,"word_count":29,"hashes":{".antigravity/instructions.md":"3cd9f03beffc84b16f571f8c9bb69f6bf715aedb712e85af507d8d6dd4db9061"}},".antigravity/workflows/graphify.md":{"size":44042,"mtime_ns":1787419447022265200,"indexed_at_ns":1787521783292519400,"word_count":5442,"hashes":{".antigravity/workflows/graphify.md":"2aa3c37fc3f9cccdb1fa4efbdd9fa03e8274efb1df4430b1d792283ade7f8078"}},".agents/rules/graphify.md":{"size":947,"mtime_ns":1787419446968999700,"indexed_at_ns":1787521783242410200,"word_count":127,"hashes":{".agents/rules/graphify.md":"e55792958648fb69255e3ce3f71a8fcead36307c34b2d67feda9ac650ac61803"}},".agents/workflows/graphify.md":{"size":239,"mtime_ns":1787419446970997300,"indexed_at_ns":1787521783244407700,"word_count":37,"hashes":{".agents/workflows/graphify.md":"d92622463299d313da48e2cdbebf79d7ea24ffaf2ae2de2a1714be8ee42b22b3"}},"backend/src/payment/dto/initiate-payment.dto.ts":{"size":800,"mtime_ns":1787419447317412500,"indexed_at_ns":1787521771126080400,"word_count":69},"backend/src/payment/dto/verify-payment.dto.ts":{"size":1470,"mtime_ns":1787419447318427600,"indexed_at_ns":1787521771131321500,"word_count":126},"backend/src/payment/payment.controller.ts":{"size":19751,"mtime_ns":1787503865784740900,"indexed_at_ns":1787521771142388600,"word_count":1570},"backend/src/payment/payment.module.ts":{"size":623,"mtime_ns":1787419447325429300,"indexed_at_ns":1787521771147919100,"word_count":61},"backend/src/payment/payment.service.ts":{"size":31822,"mtime_ns":1787503865786741300,"indexed_at_ns":1787521771152809800,"word_count":2750},"backend/src/payment/zibal.service.ts":{"size":26622,"mtime_ns":1787419472682407700,"indexed_at_ns":1787521771166202100,"word_count":2490},"frontend/application/app/payment/verify/page.tsx":{"size":14672,"mtime_ns":1787419450342405200,"indexed_at_ns":1787521777847899500,"word_count":1094},"AGENTS.md":{"size":229,"mtime_ns":1787419447051026800,"indexed_at_ns":1787521783312865100,"word_count":29,"hashes":{"agents.md":"eb5a520c4c05a426c6e4ce131e7cc84721b1a9ce1c039bb8f024326554e2ca05"}},"frontend/admin-panel/src/pages/SmsSettingsPage.tsx":{"size":80593,"mtime_ns":1787503865881055500,"indexed_at_ns":1787521777523737600,"word_count":5444},"backend/src/payment/dto/admin-transaction-filter.dto.ts":{"size":2138,"mtime_ns":1787419447314292500,"indexed_at_ns":1787521771115033900,"word_count":191},"frontend/admin-panel/src/pages/Transactions.tsx":{"size":46199,"mtime_ns":1787503865893068800,"indexed_at_ns":1787521777568727600,"word_count":3213},"backend/src/payment/interfaces/payment-gateway.interface.ts":{"size":1385,"mtime_ns":1787419447320428200,"indexed_at_ns":1787521771136593000,"word_count":128},"frontend/application/components/catalog/CatalogPageSpread.tsx":{"size":24597,"mtime_ns":1787419450586603600,"indexed_at_ns":1787521778267588100,"word_count":1912},"frontend/application/components/catalog/FlipbookCatalog.tsx":{"size":33740,"mtime_ns":1787419450590123500,"indexed_at_ns":1787521778273402700,"word_count":2807},"frontend/application/components/catalog/ProductDetailModal.tsx":{"size":7933,"mtime_ns":1787419450591124600,"indexed_at_ns":1787521778278804000,"word_count":557},"backend/scripts/generate-openapi.d.ts":{"size":12,"mtime_ns":1787419447110232500,"indexed_at_ns":1787521770529539800,"word_count":2},"backend/scripts/generate-openapi.js":{"size":3032,"mtime_ns":1787419447111233500,"indexed_at_ns":1787521770534013800,"word_count":309},"backend/src/admin/dto/user.dto.ts":{"size":2933,"mtime_ns":1787419447140153400,"indexed_at_ns":1787521770615795500,"word_count":259},"backend/src/admin/ssl.controller.ts":{"size":3475,"mtime_ns":1787419447149482100,"indexed_at_ns":1787521770654581300,"word_count":296},"backend/src/admin/ssl.service.ts":{"size":6733,"mtime_ns":1787419447151481900,"indexed_at_ns":1787521770660141000,"word_count":612},"backend/src/auth/auth.constants.ts":{"size":467,"mtime_ns":1787419447162710600,"indexed_at_ns":1787521770696953400,"word_count":32},"backend/src/common/utils/phone.utils.ts":{"size":1125,"mtime_ns":1787419447257681200,"indexed_at_ns":1787521770953718800,"word_count":149},"backend/src/reviews/dto/create-review.dto.ts":{"size":992,"mtime_ns":1787419447375394900,"indexed_at_ns":1787521771299580100,"word_count":92},"backend/src/reviews/dto/update-review.dto.ts":{"size":553,"mtime_ns":1787419447376396000,"indexed_at_ns":1787521771306622200,"word_count":53},"backend/src/reviews/reviews.controller.ts":{"size":3328,"mtime_ns":1787419447377393500,"indexed_at_ns":1787521771311093200,"word_count":314},"backend/src/reviews/reviews.module.ts":{"size":386,"mtime_ns":1787419447378395500,"indexed_at_ns":1787521771315753900,"word_count":38},"backend/src/reviews/reviews.service.ts":{"size":6653,"mtime_ns":1787419447380394800,"indexed_at_ns":1787521771320256000,"word_count":686},"backend/src/settings/default-ui-texts.ts":{"size":19638,"mtime_ns":1787419447385744100,"indexed_at_ns":1787521771341167700,"word_count":1538},"backend/src/settings/dto/sms-log-query.dto.ts":{"size":1395,"mtime_ns":1787419447387892300,"indexed_at_ns":1787521771347154300,"word_count":125},"backend/src/tickets/dto/create-ticket.dto.ts":{"size":2472,"mtime_ns":1787419447414614400,"indexed_at_ns":1787521771416134500,"word_count":201},"backend/src/tickets/dto/ticket-query.dto.ts":{"size":1143,"mtime_ns":1787419447415615400,"indexed_at_ns":1787521771422216200,"word_count":106},"backend/src/tickets/tickets.controller.ts":{"size":3218,"mtime_ns":1787419447416615800,"indexed_at_ns":1787521771427663100,"word_count":293},"backend/src/tickets/tickets.module.ts":{"size":386,"mtime_ns":1787419447417618500,"indexed_at_ns":1787521771432149400,"word_count":38},"backend/src/tickets/tickets.service.ts":{"size":7604,"mtime_ns":1787419447420622300,"indexed_at_ns":1787521771436331400,"word_count":781},"frontend/admin-panel/src/pages/Reviews.tsx":{"size":21261,"mtime_ns":1787503865868489900,"indexed_at_ns":1787521777474391400,"word_count":1479},"frontend/admin-panel/src/pages/SslSettingsPage.tsx":{"size":26059,"mtime_ns":1787503865883503300,"indexed_at_ns":1787521777532119900,"word_count":1847},"frontend/admin-panel/src/pages/Tickets.tsx":{"size":20723,"mtime_ns":1787503865890068300,"indexed_at_ns":1787521777558074200,"word_count":1455},"frontend/application/components/BannerPlacement.tsx":{"size":7904,"mtime_ns":1787521146066705600,"indexed_at_ns":1787521777985898900,"word_count":527},"frontend/application/components/BrandLogo.tsx":{"size":3413,"mtime_ns":1787521173459216300,"indexed_at_ns":1787521778010544600,"word_count":287},"frontend/application/components/ProductReviews.tsx":{"size":16491,"mtime_ns":1787419450530487000,"indexed_at_ns":1787521778161734900,"word_count":1194},"frontend/application/lib/services/ticketService.ts":{"size":1632,"mtime_ns":1787419450650401500,"indexed_at_ns":1787521778349450300,"word_count":170},"frontend/admin-panel/src/components/ui/PriceInput.tsx":{"size":2732,"mtime_ns":1787419450144933800,"indexed_at_ns":1787521776981376500,"word_count":267},"frontend/admin-panel/src/components/ui/Badge.tsx":{"size":1611,"mtime_ns":1787503865792742000,"indexed_at_ns":1787521776868106800,"word_count":158},"frontend/admin-panel/src/components/ui/FormField.tsx":{"size":1741,"mtime_ns":1787419450133297400,"indexed_at_ns":1787521776892439300,"word_count":148},"frontend/admin-panel/src/components/ui/ImagePreviewModal.tsx":{"size":3443,"mtime_ns":1787419450135822300,"indexed_at_ns":1787521776908411700,"word_count":270},"frontend/admin-panel/src/components/ui/Input.tsx":{"size":1793,"mtime_ns":1787419450139193700,"indexed_at_ns":1787521776915008700,"word_count":147},"frontend/admin-panel/src/components/ui/Select.tsx":{"size":1933,"mtime_ns":1787419450146457600,"indexed_at_ns":1787521777005188300,"word_count":160},"frontend/admin-panel/src/components/ui/Textarea.tsx":{"size":1320,"mtime_ns":1787419450151503000,"indexed_at_ns":1787521777054357400,"word_count":110},"frontend/admin-panel/src/components/ui/ToggleSwitch.tsx":{"size":1673,"mtime_ns":1787419450153034200,"indexed_at_ns":1787521777131354400,"word_count":143},"backend/prisma/tsconfig.json":{"size":204,"mtime_ns":1787419447106710200,"indexed_at_ns":1787521783189631100,"word_count":17,"hashes":{"backend/prisma/tsconfig.json":"f6ba24eab812d7f8a01a249b27fe70b8cc728fe84b1a91e0d08844e8f8dc0b4c"}},"backend/src/admin/dto/product.dto.ts":{"size":5731,"mtime_ns":1787419447138151700,"indexed_at_ns":1787521770609909300,"word_count":447},"backend/src/doctors/doctors.controller.ts":{"size":1644,"mtime_ns":1787419447265683400,"indexed_at_ns":1787521770978520300,"word_count":148},"backend/src/doctors/doctors.module.ts":{"size":386,"mtime_ns":1787419447266361900,"indexed_at_ns":1787521770983512900,"word_count":38},"backend/src/doctors/doctors.service.ts":{"size":2434,"mtime_ns":1787419447267380000,"indexed_at_ns":1787521770990458900,"word_count":266},"frontend/admin-panel/src/pages/DoctorsManager.tsx":{"size":23836,"mtime_ns":1787503865821829000,"indexed_at_ns":1787521777342821800,"word_count":1666},"frontend/application/components/TestimonialsSection.tsx":{"size":6625,"mtime_ns":1787419450544731600,"indexed_at_ns":1787521778192057100,"word_count":494},"frontend/application/components/VideoModalPlayer.tsx":{"size":23813,"mtime_ns":1787419450567355200,"indexed_at_ns":1787521778225055700,"word_count":1737},"frontend/application/components/PodcastPlayerModal.tsx":{"size":18550,"mtime_ns":1787521390034097300,"indexed_at_ns":1787521778144228500,"word_count":1485},"frontend/application/components/PodcastInlinePlayer.tsx":{"size":17423,"mtime_ns":1787521347010774700,"indexed_at_ns":1787521778135680300,"word_count":1381},"frontend/admin-panel/src/components/RouteErrorBoundary.tsx":{"size":4153,"mtime_ns":1787419450123355500,"indexed_at_ns":1787521776834831700,"word_count":350},"frontend/admin-panel/src/utils/lazyWithRetry.ts":{"size":1164,"mtime_ns":1787419450289069600,"indexed_at_ns":1787521777661033700,"word_count":114},"frontend/admin-panel/src/components/ui/IconPickerModal.tsx":{"size":5035,"mtime_ns":1787419450135311400,"indexed_at_ns":1787521776899286600,"word_count":397},"frontend/admin-panel/src/components/ui/RichTextEditor.tsx":{"size":8414,"mtime_ns":1787520351322209700,"indexed_at_ns":1787521776993361700,"word_count":623},"frontend/admin-panel/src/pages/PaymentGatewaysPage.tsx":{"size":38659,"mtime_ns":1787503865839318100,"indexed_at_ns":1787521777429795400,"word_count":2521},"frontend/admin-panel/src/pages/ShippingSettingsPage.tsx":{"size":7784,"mtime_ns":1787503865876829000,"indexed_at_ns":1787521777508741500,"word_count":585},"backend/test/app-audit-verification.e2e-spec.d.ts":{"size":12,"mtime_ns":1787419447470166800,"indexed_at_ns":1787521771558605400,"word_count":2},"backend/test/app-audit-verification.e2e-spec.js":{"size":8594,"mtime_ns":1787419447472180500,"indexed_at_ns":1787521771563374900,"word_count":714},"backend/test/app.e2e-spec.d.ts":{"size":12,"mtime_ns":1787419447477880700,"indexed_at_ns":1787521771578868100,"word_count":2},"backend/test/app.e2e-spec.js":{"size":1259,"mtime_ns":1787419447478878600,"indexed_at_ns":1787521771582836800,"word_count":97},"frontend/application/lib/seo.ts":{"size":8313,"mtime_ns":1787419450640749900,"indexed_at_ns":1787521778322397300,"word_count":737},"backend/src/doctors/dto/doctor-query.dto.ts":{"size":1047,"mtime_ns":1787419447269385900,"indexed_at_ns":1787521770995431600,"word_count":116},"backend/src/faq/faq.controller.ts":{"size":2299,"mtime_ns":1787419447272381300,"indexed_at_ns":1787521771000062800,"word_count":199},"backend/src/faq/faq.module.ts":{"size":243,"mtime_ns":1787419447273380700,"indexed_at_ns":1787521771006403200,"word_count":28},"backend/src/faq/faq.service.ts":{"size":1604,"mtime_ns":1787419447274377400,"indexed_at_ns":1787521771010741800,"word_count":184},"backend/src/menu/menu.controller.ts":{"size":3037,"mtime_ns":1787503865781741500,"indexed_at_ns":1787521771067708800,"word_count":265},"backend/src/menu/menu.module.ts":{"size":277,"mtime_ns":1787419447297200100,"indexed_at_ns":1787521771073408300,"word_count":30},"backend/src/menu/menu.service.ts":{"size":7754,"mtime_ns":1787503865782742600,"indexed_at_ns":1787521771077873700,"word_count":799},"backend/src/payment/dto/ebank-checkout.dto.ts":{"size":1433,"mtime_ns":1787419447315901000,"indexed_at_ns":1787521771119972100,"word_count":118},"backend/src/payment/zibal-ebank.service.ts":{"size":10437,"mtime_ns":1787419472680378200,"indexed_at_ns":1787521771160593700,"word_count":1006},"frontend/admin-panel/src/pages/FAQManager.tsx":{"size":12962,"mtime_ns":1787503865824847000,"indexed_at_ns":1787521777357646700,"word_count":937},"frontend/admin-panel/src/pages/MenuManager.tsx":{"size":20127,"mtime_ns":1787503865833593800,"indexed_at_ns":1787521777399071100,"word_count":1512},"frontend/application/components/BlogPreviewSection.tsx":{"size":7511,"mtime_ns":1787419450434179400,"indexed_at_ns":1787521778001069300,"word_count":528},"frontend/application/components/FAQSection.tsx":{"size":4922,"mtime_ns":1787419450468248200,"indexed_at_ns":1787521778057792000,"word_count":394},"frontend/admin-panel/src/pages/ZibalPortalPage.tsx":{"size":56399,"mtime_ns":1787520351328213100,"indexed_at_ns":1787521777620333900,"word_count":3711},"frontend/admin-panel/src/components/TransactionReceiptModal.tsx":{"size":9909,"mtime_ns":1787419450128417300,"indexed_at_ns":1787521776860867900,"word_count":738},"frontend/admin-panel/src/components/ui/Button.tsx":{"size":3706,"mtime_ns":1787503865795742800,"indexed_at_ns":1787521776876411900,"word_count":338},"frontend/admin-panel/src/components/ui/MaskableField.tsx":{"size":3342,"mtime_ns":1787419450140206500,"indexed_at_ns":1787521776922326600,"word_count":310},".vscode/extensions.json":{"size":78,"mtime_ns":1787419472670889500,"indexed_at_ns":1787521783179026800,"word_count":6,"hashes":{".vscode/extensions.json":"42b99f2036423faabced9858f53b83961339383f343850b7f42214d703f430a0"}},"frontend/admin-panel/src/components/ui/Modal.tsx":{"size":3492,"mtime_ns":1787503865797185800,"indexed_at_ns":1787521776948976600,"word_count":324},"frontend/admin-panel/src/components/ui/ThSort.tsx":{"size":1529,"mtime_ns":1787503865798185400,"indexed_at_ns":1787521777071482500,"word_count":148},"frontend/admin-panel/src/pages/MonitoringPage.tsx":{"size":16827,"mtime_ns":1787503865835598000,"indexed_at_ns":1787521777410650200,"word_count":1289},"frontend/admin-panel/src/utils/useTableParams.ts":{"size":4192,"mtime_ns":1787503865928777700,"indexed_at_ns":1787521777667749000,"word_count":441},"frontend/application/public/assets/images/canina-product-placeholder.png":{"size":6990105,"mtime_ns":1787419472833914500,"indexed_at_ns":1787521778430243500,"word_count":267685},"frontend/application/public/images/vets/vet1.webp":{"size":6990105,"mtime_ns":1787419472966010000,"indexed_at_ns":1787521782311683300,"word_count":267685}} \ No newline at end of file diff --git a/graphify-out/graph.html b/graphify-out/graph.html index 3de4a6a..583cd82 100644 --- a/graphify-out/graph.html +++ b/graphify-out/graph.html @@ -63,12 +63,12 @@
-
3905 nodes · 7020 edges · 322 communities
+
3905 nodes · 7028 edges · 320 communities