style(homepage): optimize mobile margins, paddings and section spacing
Some checks failed
Deploy Canina / deploy (push) Successful in 1m38s
E2E Playwright Tests / Run Full E2E & Security Suites (push) Failing after 6s

This commit is contained in:
parsa aghaei 2026-08-26 11:09:39 +03:30
parent 9371fd79e1
commit 0b52f9e9e4
19 changed files with 124654 additions and 129698 deletions

View File

@ -71,18 +71,18 @@ export default function HomeClient({ initialData }: HomeClientProps) {
{/* Navigation to Sections */}
<section className="py-12 bg-medical-gray-50 border-y border-medical-gray-100 font-sans">
<div className="max-w-7xl mx-auto px-4 grid md:grid-cols-2 gap-8">
<section className="py-6 sm:py-12 bg-medical-gray-50 border-y border-medical-gray-100 font-sans">
<div className="max-w-7xl mx-auto px-4 grid md:grid-cols-2 gap-4 sm:gap-8">
{/* Specialty Shop Card */}
<Link
href="/shop"
className="bg-gradient-to-br from-blue-50/60 to-canina-blue/5 p-12 rounded-[2.5rem] border border-blue-100/60 shadow-md hover:shadow-2xl hover:-translate-y-2 transition-all cursor-pointer group block relative overflow-hidden"
className="bg-gradient-to-br from-blue-50/60 to-canina-blue/5 p-6 sm:p-12 rounded-2xl sm:rounded-[2.5rem] border border-blue-100/60 shadow-md hover:shadow-2xl hover:-translate-y-1 transition-all cursor-pointer group block relative overflow-hidden"
>
<div className="absolute -top-12 -left-12 w-32 h-32 bg-canina-blue/5 rounded-full blur-2xl group-hover:scale-150 transition-transform duration-700" />
<h3 className="text-3xl font-black text-medical-gray-900 mb-4 group-hover:text-canina-blue transition-colors font-lalezar tracking-wide">
<h3 className="text-2xl sm:text-3xl font-black text-medical-gray-900 mb-2 sm:mb-4 group-hover:text-canina-blue transition-colors font-lalezar tracking-wide">
{getText('nav_card_shop_title', "فروشگاه تخصصی")}
</h3>
<p className="text-medical-gray-600 mb-8 leading-relaxed font-shabnam">
<p className="text-sm sm:text-base text-medical-gray-600 mb-4 sm:mb-8 leading-relaxed font-shabnam">
{getText('nav_card_shop_desc', "دسترسی به تمامی محصولات بر اساس علائم بالینی و نیازهای پت شما.")}
</p>
<div className="flex items-center gap-2 text-canina-blue font-black tracking-widest uppercase text-xs font-vazir">
@ -94,13 +94,13 @@ export default function HomeClient({ initialData }: HomeClientProps) {
{/* Scientific Wiki Card */}
<Link
href="/wiki"
className="bg-gradient-to-br from-emerald-50/60 to-green-50/20 p-12 rounded-[2.5rem] border border-emerald-100/60 shadow-md hover:shadow-2xl hover:-translate-y-2 transition-all cursor-pointer group block relative overflow-hidden"
className="bg-gradient-to-br from-emerald-50/60 to-green-50/20 p-6 sm:p-12 rounded-2xl sm:rounded-[2.5rem] border border-emerald-100/60 shadow-md hover:shadow-2xl hover:-translate-y-1 transition-all cursor-pointer group block relative overflow-hidden"
>
<div className="absolute -top-12 -left-12 w-32 h-32 bg-emerald-500/5 rounded-full blur-2xl group-hover:scale-150 transition-transform duration-700" />
<h3 className="text-3xl font-black text-medical-gray-900 mb-4 group-hover:text-emerald-700 transition-colors font-lalezar tracking-wide">
<h3 className="text-2xl sm:text-3xl font-black text-medical-gray-900 mb-2 sm:mb-4 group-hover:text-emerald-700 transition-colors font-lalezar tracking-wide">
{getText('nav_card_wiki_title', "دانشنامه علمی")}
</h3>
<p className="text-medical-gray-600 mb-8 leading-relaxed font-shabnam">
<p className="text-sm sm:text-base text-medical-gray-600 mb-4 sm:mb-8 leading-relaxed font-shabnam">
{getText('nav_card_wiki_desc', "آشنایی با ترکیبات نایاب و استانداردهای دارویی محصولات آلمانی کنینا.")}
</p>
<div className="flex items-center gap-2 text-emerald-700 font-black tracking-widest uppercase text-xs font-vazir">
@ -112,31 +112,31 @@ export default function HomeClient({ initialData }: HomeClientProps) {
</section>
{/* About Section Teaser */}
<section className="py-16 bg-white overflow-hidden font-sans">
<div className="max-w-7xl mx-auto px-4 grid lg:grid-cols-2 gap-16 lg:gap-24 items-center">
<div className="relative overflow-hidden rounded-[3rem]">
<section className="py-8 sm:py-16 bg-white overflow-hidden font-sans">
<div className="max-w-7xl mx-auto px-4 grid lg:grid-cols-2 gap-8 lg:gap-24 items-center">
<div className="relative overflow-hidden rounded-2xl sm:rounded-[3rem]">
<div className="absolute -top-10 -right-10 w-40 h-40 bg-canina-blue/5 rounded-full blur-3xl" />
<Image
src="/assets/images/regenerated_image_1779109861747.png"
alt="آزمایشگاه تخصصی تولید مکمل‌های دارویی کنینا آلمان"
className="rounded-[3rem] shadow-2xl relative z-10 grayscale-[10%] w-full"
className="rounded-2xl sm:rounded-[3rem] shadow-2xl relative z-10 grayscale-[10%] w-full"
width={640}
height={425}
loading="lazy"
/>
<div className="absolute bottom-4 left-4 sm:bottom-6 sm:left-6 bg-canina-blue text-white p-4 sm:p-6 md:p-8 rounded-[1.5rem] sm:rounded-[2rem] shadow-2xl z-20 max-w-[80%] border border-white/10">
<div className="text-2xl sm:text-4xl font-black mb-1 font-lalezar tracking-wide">{getText('quality', "کیفیت")}</div>
<div className="text-[10px] sm:text-xs uppercase tracking-widest font-bold opacity-90 font-vazir">{getText('ultra_pharmaceutical', "استانداردهای فوق‌دارویی")}</div>
<div className="absolute bottom-3 left-3 sm:bottom-6 sm:left-6 bg-canina-blue text-white p-3 sm:p-6 md:p-8 rounded-xl sm:rounded-[2rem] shadow-2xl z-20 max-w-[85%] sm:max-w-[80%] border border-white/10">
<div className="text-xl sm:text-4xl font-black mb-0.5 sm:mb-1 font-lalezar tracking-wide">{getText('quality', "کیفیت")}</div>
<div className="text-[9px] sm:text-xs uppercase tracking-widest font-bold opacity-90 font-vazir">{getText('ultra_pharmaceutical', "استانداردهای فوق‌دارویی")}</div>
</div>
</div>
<div>
<div className="text-canina-blue text-xs font-bold uppercase tracking-[0.2em] mb-4 font-vazir">
<div className="text-canina-blue text-xs font-bold uppercase tracking-[0.2em] mb-2 sm:mb-4 font-vazir">
{getText('about_label', "میراث ما از آلمان")}
</div>
<h2 className="text-3xl lg:text-5xl font-black text-medical-gray-900 leading-[1.2] mb-12 font-lalezar tracking-wide">
<h2 className="text-2xl sm:text-3xl lg:text-5xl font-black text-medical-gray-900 leading-tight mb-6 sm:mb-12 font-lalezar tracking-wide">
{getText('about_title', "چرا برند آلمانی Canina مرجع دامپزشکان است؟")}
</h2>
<div className="space-y-6">
<div className="space-y-4 sm:space-y-6">
{[
{ title: getText('about_item1_title', "مواد اولیه نایاب"), desc: getText('about_item1_desc', "استفاده از پودر صدف لب‌سبز اصل نیوزیلند و مواد ارگانیک با گرید دارویی.") },
{ title: getText('about_item2_title', "فاقد مواد نگهدارنده"), desc: getText('about_item2_desc', "تمامی محصولات ۱۰۰٪ طبیعی و فاقد رنگ‌های مصنوعی و طعم‌دهنده‌های شیمیایی هستند.") },

View File

@ -56,30 +56,27 @@ export default function BlogPreviewSection() {
}
return (
<section className="py-20 bg-white font-vazir" dir="rtl">
<section className="py-8 sm:py-20 bg-white font-vazir" dir="rtl">
<div className="max-w-7xl mx-auto px-4">
{/* Header */}
<div className="flex flex-col md:flex-row md:items-end justify-between mb-12 gap-4">
<div>
<div className="inline-flex items-center gap-2 px-3 py-1 bg-canina-blue/10 text-canina-blue rounded-full text-xs font-black uppercase tracking-widest mb-3">
<BookOpen className="w-4 h-4" />
<span>{getText("blog_preview_badge", "آخرین مطالب تخصصی")}</span>
{/* Section Header */}
<div className="flex flex-col md:flex-row md:items-end justify-between mb-6 sm:mb-16 gap-4 sm:gap-6">
<div className="max-w-2xl">
<div className="inline-flex items-center gap-2 px-3 py-1 bg-canina-blue/10 text-canina-blue rounded-full text-[10px] font-black uppercase tracking-widest mb-3 sm:mb-4">
<BookOpen className="w-3 h-3" />
<span>{getText("blog_preview_badge", "دانشنامه و مقالات علمی")}</span>
</div>
<h2 className="text-3xl md:text-4xl font-black text-medical-gray-900 font-lalezar leading-tight">
{getText("blog_preview_title", "مجله سلامت پت کنینا")}
<h2 className="text-2xl sm:text-4xl md:text-5xl font-black text-medical-gray-900 leading-tight font-lalezar tracking-wide">
{getText("blog_preview_title", "تازه‌ترین مقالات")} <span className="text-canina-blue">{getText("blog_preview_title_highlight", "دامپزشکی و سلامت")}</span>
</h2>
<p className="text-sm md:text-base text-medical-gray-500 font-medium mt-2">
{getText(
"blog_preview_subtitle",
"مقالات علمی و تخصصی دامپزشکی برای مراقبت بهتر از حیوان خانگی شما"
)}
<p className="text-sm sm:text-lg text-medical-gray-500 font-medium mt-2 sm:mt-4">
{getText("blog_preview_desc", "راهنماهای علمی و کاربردی برای نگهداری، تغذیه و پیشگیری از بیماری‌های سگ و گربه بر اساس آخرین تحقیقات بین‌المللی.")}
</p>
</div>
<Link
href="/blog"
className="inline-flex items-center gap-2 text-canina-blue font-bold hover:gap-3 transition-all text-sm shrink-0"
className="inline-flex items-center gap-1.5 sm:gap-2 text-canina-blue font-bold text-xs sm:text-sm hover:translate-x-1 transition-transform rtl:hover:-translate-x-1"
>
<span>{getText("blog_preview_read_more", "مشاهده همه مقالات")}</span>
<span>{getText("blog_preview_view_all", "مشاهده همه مقالات")}</span>
<ArrowLeft className="w-4 h-4" />
</Link>
</div>

View File

@ -54,7 +54,7 @@ export default function FAQSection() {
};
return (
<section className="py-20 bg-medical-gray-50/70 border-t border-medical-gray-100 font-vazir" dir="rtl">
<section className="py-8 sm:py-20 bg-medical-gray-50/70 border-t border-medical-gray-100 font-vazir" dir="rtl">
{/* Schema.org FAQPage Rich Snippet */}
{faqs.length > 0 && (
<script
@ -65,16 +65,16 @@ export default function FAQSection() {
<div className="max-w-4xl mx-auto px-4">
{/* Header */}
<div className="text-center mb-12">
<div className="inline-flex items-center gap-2 px-3 py-1 bg-amber-500/10 text-amber-600 rounded-full text-xs font-black uppercase tracking-widest mb-3">
<HelpCircle className="w-4 h-4" />
<span>{getText("faq_badge", "سوالات پرتکرار")}</span>
<div className="text-center mb-6 sm:mb-12">
<div className="inline-flex items-center gap-2 px-3.5 py-1.5 bg-canina-blue/10 text-canina-blue rounded-full text-[10px] font-black uppercase tracking-widest mb-3 sm:mb-4">
<HelpCircle className="w-3.5 h-3.5" />
<span>{getText("faq_badge", "پاسخ به سوالات پرتکرار")}</span>
</div>
<h2 className="text-3xl md:text-4xl font-black text-medical-gray-900 font-lalezar leading-tight">
{getText("faq_title", "سوالات متداول")}
<h2 className="text-2xl sm:text-4xl md:text-5xl font-black text-medical-gray-900 leading-tight font-lalezar tracking-wide">
{getText("faq_title_1", "سوالات متداول")} <span className="text-canina-blue">{getText("faq_title_2", "درباره محصولات و سفارش")}</span>
</h2>
<p className="text-sm md:text-base text-medical-gray-500 font-medium mt-2">
{getText("faq_subtitle", "پاسخ سوالاتی که اغلب از ما می‌پرسید")}
<p className="text-sm sm:text-base text-medical-gray-500 font-medium mt-2 sm:mt-4">
{getText("faq_desc", "پاسخ به متداول‌ترین سوالات درباره استانداردها، دوز مصرفی، ارسال و اصالت مکمل‌های کنینا.")}
</p>
</div>

View File

@ -154,24 +154,24 @@ export default function FeaturedProducts() {
}, []);
return (
<section className="py-16 bg-medical-gray-50">
<section className="py-8 sm:py-16 bg-medical-gray-50">
<div className="max-w-7xl mx-auto px-4">
<div className="flex items-center justify-between w-full mb-12 pb-6 border-b border-medical-gray-200">
<div className="flex items-center justify-between w-full mb-6 sm:mb-12 pb-4 sm:pb-6 border-b border-medical-gray-200 gap-2">
<div>
<div className="text-canina-blue text-xs font-bold uppercase tracking-[0.2em] mb-2 font-vazir">
<div className="text-canina-blue text-[10px] sm:text-xs font-bold uppercase tracking-[0.2em] mb-1 sm:mb-2 font-vazir">
{getText("featured_badge", "بیشترین انتخاب توسط دامپزشکان")}
</div>
<h2 className="text-2xl md:text-3xl lg:text-4xl font-black text-medical-gray-900 font-lalezar tracking-wide">
<h2 className="text-xl sm:text-2xl md:text-3xl lg:text-4xl font-black text-medical-gray-900 font-lalezar tracking-wide">
{getText("featured_title_line1", "محصولات برگزیده و راهکارهای")}{" "}
<span className="text-canina-blue">{getText("featured_title_line2", "درمان تخصصی")}</span>
</h2>
</div>
<button
onClick={() => router.push("/shop")}
className="inline-flex items-center gap-2 text-canina-blue font-black text-sm hover:translate-x-1 transition-all group font-vazir"
className="inline-flex items-center gap-1 sm:gap-2 text-canina-blue font-black text-xs sm:text-sm hover:translate-x-1 transition-all group font-vazir shrink-0"
>
{getText("featured_view_all", "مشاهده تمامی محصولات")}
<span className="text-lg group-hover:-translate-x-1 transition-transform"></span>
<span>{getText("featured_view_all", "مشاهده تمامی محصولات")}</span>
<span className="text-sm sm:text-lg group-hover:-translate-x-1 transition-transform"></span>
</button>
</div>

View File

@ -118,7 +118,7 @@ export default function Hero({ banners = [], onShopNavigate }: { banners?: Banne
<div className="absolute bottom-0 left-0 w-[600px] h-[600px] bg-medical-gray-500 rounded-full blur-[100px] -ml-40 -mb-40" />
</div>
<div className="max-w-7xl mx-auto px-4 relative flex flex-col lg:flex-row gap-4 sm:gap-12 mb-16 lg:mb-20">
<div className="max-w-7xl mx-auto px-4 relative flex flex-col lg:flex-row gap-4 sm:gap-12 mb-8 sm:mb-16 lg:mb-20">
{/* Content */}
<div className="lg:w-1/2 text-center lg:text-right">
<motion.div

View File

@ -211,20 +211,20 @@ export default function SmartAdvisor({ onComplete, rules = [] }: SmartAdvisorPro
};
return (
<section id="canino-advisor" className="py-16 bg-gradient-to-b from-white via-medical-gray-50/50 to-white">
<section id="canino-advisor" className="py-8 sm:py-16 bg-gradient-to-b from-white via-medical-gray-50/50 to-white">
<div className="max-w-5xl mx-auto px-4">
{/* Header Title */}
<div className="text-center mb-10">
<div className="text-center mb-6 sm:mb-10">
<motion.div
initial={{ opacity: 0, y: 20 }}
whileInView={{ opacity: 1, y: 0 }}
className="inline-flex items-center gap-2 px-4 py-2 bg-canina-blue/5 rounded-full mb-4 border border-canina-blue/10"
className="inline-flex items-center gap-2 px-3.5 py-1.5 sm:px-4 sm:py-2 bg-canina-blue/5 rounded-full mb-3 sm:mb-4 border border-canina-blue/10"
>
<Sparkle className="w-4 h-4 text-canina-blue animate-spin" />
<span suppressHydrationWarning className="text-canina-blue text-xs font-black uppercase tracking-widest font-vazir">{getText('advisor_badge', "سیستم پایش و تجویز هوشمند")}</span>
<span suppressHydrationWarning className="text-canina-blue text-[11px] sm:text-xs font-black uppercase tracking-widest font-vazir">{getText('advisor_badge', "سیستم پایش و تجویز هوشمند")}</span>
</motion.div>
<h2 suppressHydrationWarning className="text-4xl lg:text-5xl font-black text-medical-gray-900 mb-4 font-lalezar tracking-wide">{getText('advisor_title', "دستیار سلامت و الگوریتم پایش کنینا")}</h2>
<p suppressHydrationWarning className="text-medical-gray-600 font-medium text-base font-shabnam max-w-2xl mx-auto leading-relaxed">
<h2 suppressHydrationWarning className="text-2xl sm:text-4xl lg:text-5xl font-black text-medical-gray-900 mb-2 sm:mb-4 font-lalezar tracking-wide">{getText('advisor_title', "دستیار سلامت و الگوریتم پایش کنینا")}</h2>
<p suppressHydrationWarning className="text-medical-gray-600 font-medium text-xs sm:text-base font-shabnam max-w-2xl mx-auto leading-relaxed">
{getText('advisor_subtitle', "با ثبت اطلاعات همدم خود در ۴ قدم ساده، از الگوریتم علمی کنینا برای تجویز دقیق مکمل و پایش سلامت بهره‌مند شوید.")}
</p>

View File

@ -54,19 +54,23 @@ export default function TestimonialsSection() {
}
return (
<section className="py-20 bg-medical-gray-50/50 border-t border-medical-gray-100 font-vazir" dir="rtl">
<section className="py-8 sm:py-20 bg-medical-gray-50/50 border-t border-medical-gray-100 font-vazir" dir="rtl">
<div className="max-w-7xl mx-auto px-4">
{/* Section Header */}
<div className="text-center max-w-2xl mx-auto mb-16">
<div className="inline-flex items-center gap-2 px-3 py-1 bg-amber-500/10 text-amber-600 rounded-full text-xs font-black uppercase tracking-widest mb-4">
<MessageSquareQuote className="w-4 h-4" />
<span>{getText('testimonials_badge', "گواهی کیفیت و اصالت")}</span>
</div>
<h2 className="text-3xl md:text-4xl font-black text-medical-gray-900 font-lalezar leading-tight">
{getText('testimonials_title', "دیدگاه دامپزشکان و همراهان")} <span className="text-canina-blue">{getText('testimonials_title_highlight', "کنینا")}</span>
<div className="text-center max-w-2xl mx-auto mb-6 sm:mb-16">
<motion.div
initial={{ opacity: 0, y: 20 }}
whileInView={{ opacity: 1, y: 0 }}
className="inline-flex items-center gap-2 px-3.5 py-1.5 bg-canina-blue/10 text-canina-blue rounded-full text-[10px] font-black uppercase tracking-widest mb-3 sm:mb-4"
>
<UserCheck className="w-3.5 h-3.5" />
<span>{getText('testimonials_badge', 'توصیه‌ها و تجربیات')}</span>
</motion.div>
<h2 className="text-2xl sm:text-4xl md:text-5xl font-black text-medical-gray-900 leading-tight font-lalezar tracking-wide">
{getText('testimonials_title_1', 'نظرات')} <span className="text-canina-blue">{getText('testimonials_title_2', 'دامپزشکان و مشتریان')}</span>
</h2>
<p className="text-base text-medical-gray-500 font-medium mt-4">
{getText('testimonials_subtitle', "تجربه متخصصان، کلینیک‌های همکار و سرپرستان حیوانات خانگی از نتایج مکمل‌های آلمانی کنینا")}
<p className="text-sm sm:text-lg text-medical-gray-500 font-medium mt-2 sm:mt-4">
{getText('testimonials_desc', 'تجربه استفاده از مکمل‌های دارویی کنینا از نگاه برترین کلینیک‌های دامپزشکی و سرپرستان پت در سراسر کشور.')}
</p>
</div>

View File

@ -96,24 +96,24 @@ export default function VetGallery({ testimonials = [] }: { testimonials?: Testi
}
return (
<section className="py-24 bg-white font-vazir" dir="rtl">
<section className="py-8 sm:py-20 bg-white font-vazir relative overflow-hidden" dir="rtl">
<div className="max-w-7xl mx-auto px-4">
<div className="flex flex-col md:flex-row md:items-end justify-between mb-16 gap-6">
<div className="flex flex-col md:flex-row md:items-end justify-between mb-6 sm:mb-16 gap-4 sm:gap-6">
<div className="max-w-2xl">
<div className="inline-flex items-center gap-2 px-3 py-1 bg-canina-blue/10 text-canina-blue rounded-full text-[10px] font-black uppercase tracking-widest mb-4">
<div className="inline-flex items-center gap-2 px-3 py-1 bg-canina-blue/10 text-canina-blue rounded-full text-[10px] font-black uppercase tracking-widest mb-3 sm:mb-4">
<Star className="w-3 h-3" />
{getText('videos_badge', "Vet Insights")}
</div>
<h2 className="text-4xl md:text-5xl font-black text-medical-gray-900 leading-tight font-lalezar tracking-wide" suppressHydrationWarning>
<h2 className="text-2xl sm:text-4xl md:text-5xl font-black text-medical-gray-900 leading-tight font-lalezar tracking-wide" suppressHydrationWarning>
{getText('videos_title', "مشاوره ویدئویی")} <span className="text-canina-blue underline decoration-4 decoration-canina-blue/20 underline-offset-8">{getText('videos_title_highlight', "دوست دامپزشک پت شما")}</span>
</h2>
<p className="text-lg text-medical-gray-500 font-medium mt-6" suppressHydrationWarning>
<p className="text-sm sm:text-lg text-medical-gray-500 font-medium mt-2 sm:mt-6" suppressHydrationWarning>
{getText('videos_desc', "تیم علمی و فرموله‌کنندگان کمپانی کنینا در آلمان مستقیماً با شما صحبت می‌کنند؛ آشنایی با نحوه مصرف، مزایای بالینی و دانش پزشکی پشت هر محصول.")}
</p>
</div>
<Link
href="/videos"
className="inline-flex items-center gap-2 text-canina-blue font-bold text-sm hover:translate-x-1 transition-transform rtl:hover:-translate-x-1"
className="inline-flex items-center gap-2 text-canina-blue font-bold text-xs sm:text-sm hover:translate-x-1 transition-transform rtl:hover:-translate-x-1"
>
{getText('videos_view_all', "مشاهده همه ویدئوها")}
<Play className="w-4 h-4" />

View File

@ -203,7 +203,7 @@
"201": "deploy.sh",
"202": "🔒 Security & Performance Review (09_devops_security)",
"203": "👁️ UX & Persona Interface Review (08_visual_qa)",
"204": "eslint",
"204": "eslint-config-prettier",
"205": "prisma/scientificTerms.ts",
"206": "seed-blogs.ts",
"207": "seed-custom.ts",
@ -232,7 +232,7 @@
"230": "instructions.md",
"231": "typescript",
"232": "@eslint/js",
"233": "globals",
"233": "tailwindcss",
"238": "prisma",
"239": "source-map-support",
"240": "supertest",

File diff suppressed because one or more lines are too long

View File

@ -1,38 +1,26 @@
{
"0": "Roles",
"1": "app.module.ts",
"2": "SmsService",
"2": "SettingsController",
"3": "ProductService",
"4": "utils.ts",
"4": "SafeImage.tsx",
"5": "CmsController",
"6": "tickets.controller.ts",
"7": "Button.tsx",
"8": "ReportsController",
"8": "admin.module.ts",
"9": "devDependencies",
<<<<<<< HEAD
"10": "ReviewsController",
"10": "CreateReviewDto",
"11": "MediaSelector.tsx",
"12": "index.ts",
"13": "app-audit-verification.e2e-spec.js",
"14": "useSettingsStore",
=======
"10": "ReviewsService",
"11": "MediaSelector.tsx",
"12": "PetProfile.tsx",
"13": "app-audit-verification.e2e-spec.js",
"14": "UserDashboard.tsx",
>>>>>>> cf9ae234b9938be85c833ab98741a4590f9cfe13
"15": "src/services/api.ts",
"16": "DoctorQueryDto",
"17": "UserDashboard.tsx",
"17": "schema.ts",
"18": "JwtAuthGuard",
"19": "ProductsService",
"19": "RevalidationService",
"20": "CreateVideoDto",
<<<<<<< HEAD
"21": "Button.tsx",
=======
"21": "ProductPage.tsx",
>>>>>>> cf9ae234b9938be85c833ab98741a4590f9cfe13
"22": "lib/services/api.ts",
"23": "MenuService",
"24": "BE-001",
@ -44,9 +32,9 @@
"30": "DEVOPS-001",
"31": "DOC-001",
"32": "adminRoutes.tsx",
"33": "WholesaleService",
"33": "WholesaleApplyDto",
"34": "B2BService",
"35": "PetProfile.tsx",
"35": "AuthController",
"36": "FaqService",
"37": "راهنمای تست سیستم (Software Testing)",
"38": "Button",
@ -59,47 +47,27 @@
"45": "What You Must Do When Invoked",
"46": "HomeController",
"47": "IngredientsService",
<<<<<<< HEAD
"48": "useCartStore",
=======
"48": "auth.module.ts",
>>>>>>> cf9ae234b9938be85c833ab98741a4590f9cfe13
"49": "devDependencies",
"50": "devDependencies",
"51": "BlogsController",
"52": "PrescriptionsService",
"53": "SmartAdvisorService",
<<<<<<< HEAD
"54": "UsersService",
=======
"54": "UsersController",
>>>>>>> cf9ae234b9938be85c833ab98741a4590f9cfe13
"55": "UITexts.tsx",
"56": "Orders.tsx",
"57": "Role & Core Objective",
"58": "ContactService",
"59": "compilerOptions",
<<<<<<< HEAD
"60": "PaymentService",
"61": "AdminTransactionFilterDto",
"62": "CreateReviewDto",
"63": "dependencies",
"64": "compilerOptions",
"65": "Media.tsx",
"66": "WikiController",
"67": "PetsController",
"68": "20260526145407_init/migration.sql",
=======
"60": "users.controller.ts",
"61": "payment.service.ts",
"62": "ProductDto",
"63": "dependencies",
"64": "compilerOptions",
"65": "app.e2e-spec.js",
"66": "ApiOperation",
"67": "admin.module.ts",
"66": "AdminQueryDto",
"67": "PetsController",
"68": "PaymentService",
>>>>>>> cf9ae234b9938be85c833ab98741a4590f9cfe13
"69": "Required Review Group Closures",
"70": "compilerOptions",
"71": "getPageMetadata",
@ -107,36 +75,28 @@
"73": "Operational Rules & Boundaries",
"74": "WikiController",
"75": "PetsController",
<<<<<<< HEAD
"76": "CreateEBankCheckoutDto",
=======
"76": "AdminService",
>>>>>>> cf9ae234b9938be85c833ab98741a4590f9cfe13
"76": ".getDashboardStats",
"77": "seo.module.ts",
"78": "route.ts",
"78": "rss.xml/route.ts",
"79": "🏢 AI Software Agency — Master Orchestration Protocol v3",
"80": "Operational Rules & Boundaries",
"81": "Operational Rules & Boundaries",
"82": "scripts",
"83": "dependencies",
"84": "Role & Core Objective",
"85": "eslint-config-prettier",
"85": "ArchivePage.tsx",
"86": "zibal.service.ts",
"87": "dependencies",
<<<<<<< HEAD
"88": "ProductPage.tsx",
=======
"88": "toPersian",
>>>>>>> cf9ae234b9938be85c833ab98741a4590f9cfe13
"88": "NetworkBanner.tsx",
"89": "seed-products.ts",
"90": "useSettingsStore",
"91": "Reconciled Audit Roles & Assignments",
"92": "OrdersService",
"93": "@nestjs/schematics",
"94": "Phase 3.1 — Human Review Preparation and Master Backlog Critique",
"95": "schema.ts",
"95": "blog/[slug]/page.tsx",
"96": "compilerOptions",
"97": "blog/[slug]/page.tsx",
"97": "SettingsService",
"98": "scripts",
"99": "BlogsController",
"100": "Deep Audit Summary Report",
@ -145,19 +105,14 @@
"103": "Comprehensive Change Log",
"104": "Coupons.tsx",
"105": "Operational Rules & Boundaries",
<<<<<<< HEAD
"106": "blog/page.tsx",
"107": "layout.tsx",
=======
"106": "Media.tsx",
"107": "@types/supertest",
>>>>>>> cf9ae234b9938be85c833ab98741a4590f9cfe13
"107": "WikiController",
"108": "PrismaService",
"109": "1. Summary of Integrity Repairs Performed",
"110": "Operational Rules & Boundaries",
"111": "Operational Rules & Boundaries",
"112": "Operational Rules & Boundaries",
"113": "CreateReviewDto",
"113": "SmsService",
"114": "AppService",
"115": "UsersService",
"116": "Vazirmatn Changelog",
@ -166,57 +121,43 @@
"119": "compilerOptions",
"120": "compilerOptions",
"121": "backend/README.md",
<<<<<<< HEAD
"122": "videos/page.tsx",
"123": "BlogsService",
=======
"122": "Param",
"122": "AdminService",
"123": "CreateEBankCheckoutDto",
>>>>>>> cf9ae234b9938be85c833ab98741a4590f9cfe13
"124": "Repository Map",
"125": "validate_integrity.js",
"126": "admin-panel/package.json",
"127": "Sahel-Font",
<<<<<<< HEAD
"128": "AdminService",
"129": "نقشه جامع پوشش تست‌های سرتاسری (E2E Test Coverage Map) — پروژه Canina",
=======
"128": "AdminController",
"129": "InitiatePaymentDto",
>>>>>>> cf9ae234b9938be85c833ab98741a4590f9cfe13
"130": "Sahel-Font",
"131": "Role & Core Objective",
"132": "orchestrate.py",
"133": "backend/package.json",
"134": "app.e2e-spec.js",
"134": "blog/page.tsx",
"135": "graphify reference: extra exports and benchmark",
"136": "Phase 2 Final Quality Gate Summary Report",
"137": "Task Modifications Log",
"138": "Install",
"139": "catalog/page.tsx",
"139": "layout.tsx",
"140": "ErrorBoundary",
"141": "application/package.json",
"142": "start-dev.js",
"143": "generate-openapi.js",
"144": "@testing-library/react",
"145": "@types/node",
"145": "admin.service.ts",
"146": "System Discovery",
"147": "RevalidationService",
"148": "typescript",
"147": "useCartStore",
"148": "wiki/[slug]/page.tsx",
"149": "SmsSettingsPage.tsx",
"150": "Product Requirement Document (PRD)",
<<<<<<< HEAD
"151": "admin.service.ts",
"152": "InitiatePaymentDto",
=======
"151": "auth.service.ts",
"152": ".createCoupon",
>>>>>>> cf9ae234b9938be85c833ab98741a4590f9cfe13
"152": "cartStore.ts",
"153": "exclude",
"154": "Baseline Command Plan & Reconciled Command History",
"155": "seo-backfill.ts",
"156": "manual-test-scenarios.md",
"157": "ErrorPages.tsx",
"158": "AuthService",
"159": "with-vpn.sh",
"160": "Architecture Specification",
"161": "Project Health Audit Report",
@ -234,12 +175,16 @@
"173": "Phase 3 Audit Traceability Matrix",
"174": "rebuild_honest_ledger.js",
"175": "validate_evidence_grade.js",
"176": "CreateOrderDto",
"177": "SmsLogQueryDto",
"178": "نقشه جامع پوشش تست‌های سرتاسری (E2E Test Coverage Map) — پروژه Canina",
"179": "PaginationDto",
"180": "API Contract Specification",
"181": "⚙️ Backend Technical Review (05_dev_backend)",
"182": "🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)",
"183": "🚀 SEO & Content Strategy Review (12_seo_content)",
"184": "MetricsController",
"184": "RedisService",
"185": "trust-seals/page.tsx",
"186": "seed-ui-texts.ts",
"187": "seed-wiki.ts",
"188": "update-blog.dto.ts",
@ -251,11 +196,14 @@
"194": "Raw Finding Verification & Disposition Report",
"195": "React + TypeScript + Vite",
"196": "Select.tsx",
"199": "auth.controller.ts",
"197": "wiki/page.tsx",
"198": "catalog/page.tsx",
"199": "RegisterDto",
"200": "application/README.md",
"201": "deploy.sh",
"202": "🔒 Security & Performance Review (09_devops_security)",
"203": "👁️ UX & Persona Interface Review (08_visual_qa)",
"204": "eslint",
"205": "prisma/scientificTerms.ts",
"206": "seed-blogs.ts",
"207": "seed-custom.ts",
@ -274,6 +222,7 @@
"220": "Input.tsx",
"221": "Textarea.tsx",
"222": "admin-panel/tsconfig.json",
"223": "@types/node",
"224": "jest",
"225": "next.config.ts",
"226": "Shabnam Font README",
@ -281,16 +230,9 @@
"228": "rules/graphify.md",
"229": ".agents/workflows/graphify.md",
"230": "instructions.md",
"231": "typescript",
"232": "@eslint/js",
<<<<<<< HEAD
"234": "20260526160916_add_ui_texts_and_scientific_terms/migration.sql",
=======
"233": "eslint-plugin-prettier",
"234": "WholesaleApplyDto",
"235": "@nestjs/cli",
"236": "@nestjs/testing",
"237": "app/page.tsx",
>>>>>>> cf9ae234b9938be85c833ab98741a4590f9cfe13
"233": "globals",
"238": "prisma",
"239": "source-map-support",
"240": "supertest",
@ -349,7 +291,6 @@
"293": "Staging Docker Compose",
"294": "ZibalService",
"295": "eslint-plugin-react-refresh",
"296": "tailwindcss",
"297": "ZibalEBankService",
"298": ".initiateOrderPayment",
"299": "@tailwindcss/postcss",
@ -365,12 +306,7 @@
"311": "@types/multer",
"312": "@types/passport-jwt",
"313": "Modal.tsx",
<<<<<<< HEAD
=======
"314": "typescript-eslint",
>>>>>>> cf9ae234b9938be85c833ab98741a4590f9cfe13
"315": "typescript",
"316": "ts-jest",
"317": "revalidate/route.ts",
"318": "MaskableField.tsx",
"319": "eslint-config-next"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
# Graph Report - canina (2026-08-26)
## Corpus Check
- 586 files · ~1,330,298 words
- 586 files · ~1,330,416 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
@ -10,7 +10,7 @@
- Token cost: 0 input · 0 output
## Graph Freshness
- Built from commit: `753b3dd7`
- Built from commit: `9371fd79`
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
- Run `graphify update .` after code changes (no API cost).
@ -217,7 +217,7 @@
- deploy.sh
- 🔒 Security & Performance Review (09_devops_security)
- 👁️ UX & Persona Interface Review (08_visual_qa)
- eslint
- eslint-config-prettier
- prisma/scientificTerms.ts
- seed-blogs.ts
- seed-custom.ts
@ -246,7 +246,7 @@
- instructions.md
- typescript
- @eslint/js
- globals
- tailwindcss
- prisma
- source-map-support
- supertest
@ -333,8 +333,8 @@
backend/src/orders/orders.controller.ts → frontend/admin-panel/src/types/admin.ts
## Import Cycles
- 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`
- 3-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/services/authService.ts -> frontend/application/lib/services/api.ts`
- 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 (311 total, 101 thin omitted)
@ -377,15 +377,15 @@ Nodes (17): AdminModule, Module, ReportsController, ApiBearerAuth, ApiOperation,
### Community 9 - "devDependencies"
Cohesion: 0.08
Nodes (25): devDependencies, eslint-config-prettier, @eslint/eslintrc, eslint-plugin-prettier, globals, @nestjs/cli, @nestjs/testing, prettier (+17 more)
Nodes (25): devDependencies, eslint, @eslint/eslintrc, eslint-plugin-prettier, globals, @nestjs/cli, @nestjs/testing, prettier (+17 more)
### Community 10 - "CreateReviewDto"
Cohesion: 0.08
Nodes (25): CreateReviewDto, ApiProperty, IsInt, IsNotEmpty, IsOptional, IsString, Min, ReviewsController (+17 more)
### Community 11 - "MediaSelector.tsx"
Cohesion: 0.07
Nodes (33): ConfirmModal(), ConfirmModalProps, getFileType(), Media, MediaSelector(), MediaSelectorProps, Pagination(), PaginationProps (+25 more)
Cohesion: 0.08
Nodes (27): ConfirmModal(), ConfirmModalProps, getFileType(), Media, MediaSelector(), MediaSelectorProps, Pagination(), PaginationProps (+19 more)
### Community 12 - "index.ts"
Cohesion: 0.06
@ -537,7 +537,7 @@ Nodes (10): DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), Auth
### Community 49 - "devDependencies"
Cohesion: 0.11
Nodes (19): autoprefixer, devDependencies, autoprefixer, eslint, @eslint/js, postcss, tailwindcss, @types/node (+11 more)
Nodes (19): autoprefixer, devDependencies, autoprefixer, eslint, @eslint/js, globals, postcss, @types/node (+11 more)
### Community 50 - "devDependencies"
Cohesion: 0.13
@ -560,8 +560,8 @@ Cohesion: 0.19
Nodes (16): ApiBadRequestResponse, ApiBearerAuth, ApiCreatedResponse, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+8 more)
### Community 55 - "UITexts.tsx"
Cohesion: 0.09
Nodes (20): ICON_REGISTRY, IconPickerModal(), IconPickerModalProps, ActiveStates, PRESET_BG_COLORS, PRESET_COLORS, RichTextEditor(), RichTextEditorProps (+12 more)
Cohesion: 0.07
Nodes (26): ICON_REGISTRY, IconPickerModal(), IconPickerModalProps, ActiveStates, PRESET_BG_COLORS, PRESET_COLORS, RichTextEditor(), RichTextEditorProps (+18 more)
### Community 56 - "Orders.tsx"
Cohesion: 0.09

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -705,71 +705,6 @@
"community_name": "MediaSelector.tsx",
"norm_label": "paginationprops"
},
{
"label": "AuthorUser",
"file_type": "code",
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
"source_location": "L54",
"_callable": true,
"_callable_class": true,
"_origin": "ast",
"id": "frontend_admin_panel_src_pages_blogs_authoruser",
"community": 11,
"community_name": "MediaSelector.tsx",
"norm_label": "authoruser"
},
{
"label": "BlogCategory",
"file_type": "code",
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
"source_location": "L39",
"_callable": true,
"_callable_class": true,
"_origin": "ast",
"id": "frontend_admin_panel_src_pages_blogs_blogcategory",
"community": 11,
"community_name": "MediaSelector.tsx",
"norm_label": "blogcategory"
},
{
"label": "BlogPost",
"file_type": "code",
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
"source_location": "L70",
"_callable": true,
"_callable_class": true,
"_origin": "ast",
"id": "frontend_admin_panel_src_pages_blogs_blogpost",
"community": 11,
"community_name": "MediaSelector.tsx",
"norm_label": "blogpost"
},
{
"label": "BlogTag",
"file_type": "code",
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
"source_location": "L48",
"_callable": true,
"_callable_class": true,
"_origin": "ast",
"id": "frontend_admin_panel_src_pages_blogs_blogtag",
"community": 11,
"community_name": "MediaSelector.tsx",
"norm_label": "blogtag"
},
{
"label": "ProductSimple",
"file_type": "code",
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
"source_location": "L62",
"_callable": true,
"_callable_class": true,
"_origin": "ast",
"id": "frontend_admin_panel_src_pages_blogs_productsimple",
"community": 11,
"community_name": "MediaSelector.tsx",
"norm_label": "productsimple"
},
{
"label": "Category",
"file_type": "code",
@ -4228,6 +4163,71 @@
"community_name": "UITexts.tsx",
"norm_label": "toggleswitchprops"
},
{
"label": "AuthorUser",
"file_type": "code",
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
"source_location": "L54",
"_callable": true,
"_callable_class": true,
"_origin": "ast",
"id": "frontend_admin_panel_src_pages_blogs_authoruser",
"community": 55,
"community_name": "UITexts.tsx",
"norm_label": "authoruser"
},
{
"label": "BlogCategory",
"file_type": "code",
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
"source_location": "L39",
"_callable": true,
"_callable_class": true,
"_origin": "ast",
"id": "frontend_admin_panel_src_pages_blogs_blogcategory",
"community": 55,
"community_name": "UITexts.tsx",
"norm_label": "blogcategory"
},
{
"label": "BlogPost",
"file_type": "code",
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
"source_location": "L70",
"_callable": true,
"_callable_class": true,
"_origin": "ast",
"id": "frontend_admin_panel_src_pages_blogs_blogpost",
"community": 55,
"community_name": "UITexts.tsx",
"norm_label": "blogpost"
},
{
"label": "BlogTag",
"file_type": "code",
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
"source_location": "L48",
"_callable": true,
"_callable_class": true,
"_origin": "ast",
"id": "frontend_admin_panel_src_pages_blogs_blogtag",
"community": 55,
"community_name": "UITexts.tsx",
"norm_label": "blogtag"
},
{
"label": "ProductSimple",
"file_type": "code",
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
"source_location": "L62",
"_callable": true,
"_callable_class": true,
"_origin": "ast",
"id": "frontend_admin_panel_src_pages_blogs_productsimple",
"community": 55,
"community_name": "UITexts.tsx",
"norm_label": "productsimple"
},
{
"label": "AppSitePage",
"file_type": "code",
@ -6206,18 +6206,6 @@
"community_name": "MediaSelector.tsx",
"norm_label": "bannersmanager()"
},
{
"label": "Blogs()",
"file_type": "code",
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
"source_location": "L113",
"_callable": true,
"_origin": "ast",
"id": "frontend_admin_panel_src_pages_blogs_blogs",
"community": 11,
"community_name": "MediaSelector.tsx",
"norm_label": "blogs()"
},
{
"label": "Categories()",
"file_type": "code",
@ -14126,6 +14114,18 @@
"community_name": "UITexts.tsx",
"norm_label": "toggleswitch()"
},
{
"label": "Blogs()",
"file_type": "code",
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
"source_location": "L113",
"_callable": true,
"_origin": "ast",
"id": "frontend_admin_panel_src_pages_blogs_blogs",
"community": 55,
"community_name": "UITexts.tsx",
"norm_label": "blogs()"
},
{
"label": "createSeoSection()",
"file_type": "code",
@ -19361,17 +19361,6 @@
"community_name": "MediaSelector.tsx",
"norm_label": "bannersmanager.tsx"
},
{
"label": "Blogs.tsx",
"file_type": "code",
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
"source_location": "L1",
"_origin": "ast",
"id": "frontend_admin_panel_src_pages_blogs",
"community": 11,
"community_name": "MediaSelector.tsx",
"norm_label": "blogs.tsx"
},
{
"label": "Categories.tsx",
"file_type": "code",
@ -19460,17 +19449,6 @@
"community_name": "MediaSelector.tsx",
"norm_label": "bannersmanager"
},
{
"label": "Blogs",
"file_type": "code",
"source_file": "frontend/admin-panel/src/routes/adminRoutes.tsx",
"source_location": "L18",
"_origin": "ast",
"id": "frontend_admin_panel_src_routes_adminroutes_blogs",
"community": 11,
"community_name": "MediaSelector.tsx",
"norm_label": "blogs"
},
{
"label": "Categories",
"file_type": "code",
@ -28558,26 +28536,26 @@
"norm_label": "\ud83d\udc41\ufe0f ux & persona interface review (08_visual_qa)"
},
{
"label": "eslint",
"label": "eslint-config-prettier",
"file_type": "code",
"source_file": "backend/package.json",
"source_location": "L63",
"source_location": "L64",
"_origin": "ast",
"id": "backend_package_devdependencies_eslint",
"id": "backend_package_devdependencies_eslint_config_prettier",
"community": 204,
"community_name": "eslint",
"norm_label": "eslint"
"community_name": "eslint-config-prettier",
"norm_label": "eslint-config-prettier"
},
{
"label": "eslint",
"label": "eslint-config-prettier",
"file_type": "concept",
"source_file": "backend/package.json",
"source_location": "L63",
"source_location": "L64",
"_origin": "ast",
"id": "backend_package_json_eslint",
"id": "eslint_config_prettier",
"community": 204,
"community_name": "eslint",
"norm_label": "eslint"
"community_name": "eslint-config-prettier",
"norm_label": "eslint-config-prettier"
},
{
"label": "prisma/scientificTerms.ts",
@ -29757,26 +29735,26 @@
"norm_label": "@eslint/js"
},
{
"label": "globals",
"label": "tailwindcss",
"file_type": "code",
"source_file": "frontend/admin-panel/package.json",
"source_location": "L35",
"source_location": "L37",
"_origin": "ast",
"id": "frontend_admin_panel_package_devdependencies_globals",
"id": "frontend_admin_panel_package_devdependencies_tailwindcss",
"community": 233,
"community_name": "globals",
"norm_label": "globals"
"community_name": "tailwindcss",
"norm_label": "tailwindcss"
},
{
"label": "globals",
"label": "tailwindcss",
"file_type": "concept",
"source_file": "frontend/admin-panel/package.json",
"source_location": "L35",
"source_location": "L37",
"_origin": "ast",
"id": "frontend_admin_panel_package_json_globals",
"id": "frontend_admin_panel_package_json_tailwindcss",
"community": 233,
"community_name": "globals",
"norm_label": "globals"
"community_name": "tailwindcss",
"norm_label": "tailwindcss"
},
{
"label": "prisma",
@ -34227,6 +34205,17 @@
"community_name": "adminRoutes.tsx",
"norm_label": "doctorsmanager"
},
{
"label": "PaymentGatewaysPage",
"file_type": "code",
"source_file": "frontend/admin-panel/src/routes/adminRoutes.tsx",
"source_location": "L35",
"_origin": "ast",
"id": "frontend_admin_panel_src_routes_adminroutes_paymentgatewayspage",
"community": 32,
"community_name": "adminRoutes.tsx",
"norm_label": "paymentgatewayspage"
},
{
"label": "Reports",
"file_type": "code",
@ -34249,17 +34238,6 @@
"community_name": "adminRoutes.tsx",
"norm_label": "router"
},
{
"label": "Settings",
"file_type": "code",
"source_file": "frontend/admin-panel/src/routes/adminRoutes.tsx",
"source_location": "L15",
"_origin": "ast",
"id": "frontend_admin_panel_src_routes_adminroutes_settings",
"community": 32,
"community_name": "adminRoutes.tsx",
"norm_label": "settings"
},
{
"label": "ShippingSettingsPage",
"file_type": "code",
@ -37164,6 +37142,17 @@
"community_name": "devDependencies",
"norm_label": "@eslint/js"
},
{
"label": "globals",
"file_type": "code",
"source_file": "frontend/admin-panel/package.json",
"source_location": "L35",
"_origin": "ast",
"id": "frontend_admin_panel_package_devdependencies_globals",
"community": 49,
"community_name": "devDependencies",
"norm_label": "globals"
},
{
"label": "postcss",
"file_type": "code",
@ -37175,17 +37164,6 @@
"community_name": "devDependencies",
"norm_label": "postcss"
},
{
"label": "tailwindcss",
"file_type": "code",
"source_file": "frontend/admin-panel/package.json",
"source_location": "L37",
"_origin": "ast",
"id": "frontend_admin_panel_package_devdependencies_tailwindcss",
"community": 49,
"community_name": "devDependencies",
"norm_label": "tailwindcss"
},
{
"label": "@types/node",
"file_type": "code",
@ -37264,15 +37242,15 @@
"norm_label": "@eslint/js"
},
{
"label": "tailwindcss",
"label": "globals",
"file_type": "concept",
"source_file": "frontend/admin-panel/package.json",
"source_location": "L37",
"source_location": "L35",
"_origin": "ast",
"id": "frontend_admin_panel_package_json_tailwindcss",
"id": "frontend_admin_panel_package_json_globals",
"community": 49,
"community_name": "devDependencies",
"norm_label": "tailwindcss"
"norm_label": "globals"
},
{
"label": "@types/node",
@ -38418,6 +38396,17 @@
"community_name": "UITexts.tsx",
"norm_label": "toggleswitch.tsx"
},
{
"label": "Blogs.tsx",
"file_type": "code",
"source_file": "frontend/admin-panel/src/pages/Blogs.tsx",
"source_location": "L1",
"_origin": "ast",
"id": "frontend_admin_panel_src_pages_blogs",
"community": 55,
"community_name": "UITexts.tsx",
"norm_label": "blogs.tsx"
},
{
"label": "UITexts.tsx",
"file_type": "code",
@ -38495,6 +38484,17 @@
"community_name": "UITexts.tsx",
"norm_label": "v1_page_tabs"
},
{
"label": "Blogs",
"file_type": "code",
"source_file": "frontend/admin-panel/src/routes/adminRoutes.tsx",
"source_location": "L18",
"_origin": "ast",
"id": "frontend_admin_panel_src_routes_adminroutes_blogs",
"community": 55,
"community_name": "UITexts.tsx",
"norm_label": "blogs"
},
{
"label": "UITexts",
"file_type": "code",
@ -41234,17 +41234,6 @@
"community_name": "Button.tsx",
"norm_label": "faqmanager"
},
{
"label": "PaymentGatewaysPage",
"file_type": "code",
"source_file": "frontend/admin-panel/src/routes/adminRoutes.tsx",
"source_location": "L35",
"_origin": "ast",
"id": "frontend_admin_panel_src_routes_adminroutes_paymentgatewayspage",
"community": 7,
"community_name": "Button.tsx",
"norm_label": "paymentgatewayspage"
},
{
"label": "Reviews",
"file_type": "code",
@ -41256,6 +41245,17 @@
"community_name": "Button.tsx",
"norm_label": "reviews"
},
{
"label": "Settings",
"file_type": "code",
"source_file": "frontend/admin-panel/src/routes/adminRoutes.tsx",
"source_location": "L15",
"_origin": "ast",
"id": "frontend_admin_panel_src_routes_adminroutes_settings",
"community": 7,
"community_name": "Button.tsx",
"norm_label": "settings"
},
{
"label": "SslSettingsPage",
"file_type": "code",
@ -44821,15 +44821,15 @@
"norm_label": "devdependencies"
},
{
"label": "eslint-config-prettier",
"label": "eslint",
"file_type": "code",
"source_file": "backend/package.json",
"source_location": "L64",
"source_location": "L63",
"_origin": "ast",
"id": "backend_package_devdependencies_eslint_config_prettier",
"id": "backend_package_devdependencies_eslint",
"community": 9,
"community_name": "devDependencies",
"norm_label": "eslint-config-prettier"
"norm_label": "eslint"
},
{
"label": "@eslint/eslintrc",
@ -44952,6 +44952,17 @@
"community_name": "devDependencies",
"norm_label": "typescript-eslint"
},
{
"label": "eslint",
"file_type": "concept",
"source_file": "backend/package.json",
"source_location": "L63",
"_origin": "ast",
"id": "backend_package_json_eslint",
"community": 9,
"community_name": "devDependencies",
"norm_label": "eslint"
},
{
"label": "globals",
"file_type": "concept",
@ -44974,17 +44985,6 @@
"community_name": "devDependencies",
"norm_label": "typescript-eslint"
},
{
"label": "eslint-config-prettier",
"file_type": "concept",
"source_file": "backend/package.json",
"source_location": "L64",
"_origin": "ast",
"id": "eslint_config_prettier",
"community": 9,
"community_name": "devDependencies",
"norm_label": "eslint-config-prettier"
},
{
"label": "@eslint/eslintrc",
"file_type": "concept",
@ -49875,7 +49875,7 @@
"confidence": "EXTRACTED",
"confidence_score": 1.0,
"source_file": "frontend/application/components/BlogPreviewSection.tsx",
"source_location": "L142",
"source_location": "L139",
"weight": 1.0,
"_origin": "ast",
"source": "frontend_application_components_blogpreviewsection_blogpreviewsection",
@ -132737,5 +132737,5 @@
}
],
"hyperedges": [],
"built_at_commit": "753b3dd7ecca4817a4473833535b2b6b765cda42"
"built_at_commit": "9371fd79e1beae3106ebc89a136ea902ef7c341d"
}

File diff suppressed because it is too large Load Diff