Deep-Dive Documentation Tracker¶
Tracks all available deep-dive areas and their completion status. Use with the BMAD
document-projectworkflow (deep-dive mode). Last Updated: 2026-03-30 | Last Verified Against Codebase: 2026-03-30
Completion Summary¶
| Status | Count |
|---|---|
| Completed | 15 |
| Not Started | 3 |
| Total Areas | 18 |
Completed Deep-Dives¶
1. Authentication System (Full-Stack)¶
- Status: DONE
- Date: 2026-02-13 | Validated: 2026-02-13
- Output:
docs/deep-dive-authentication-system.md - Scope: Backend Auth module + middleware + helpers + entities + events + frontend auth pages/hooks/state
- Files Analyzed: 70+
- LOC Scanned: ~5,500+
- Known Issues Found: 64
- TODOs Documented: 26
- Review Documents:
docs/deep-dive-auth-review-findings.md— Adversarial review (21 findings, all resolved 2026-02-13)docs/deep-dive-auth-review-meta-findings.md— Meta-review of the findings doc (14 findings, all applied 2026-02-13)- Key Backend Paths:
saas-boilerplate/src/app/modules/v1/Auth/(7 files)saas-boilerplate/src/app/middlewares/auth.ts,hasPermission.tssaas-boilerplate/src/helper/jwtHelpers.ts,hashedPassword.ts,generateOtp.ts,hasPermission.ts,checkPermissionAndThrow.tssaas-boilerplate/src/shared/requestContext.ts,permissionCache.ts,permissionNormalizer.tssaas-boilerplate/src/config/passport.ts,index.tssaas-boilerplate/src/entity/(10 auth-related entities)saas-boilerplate/src/app/events/(9 auth event handlers)saas-boilerplate/src/app/cron/scheduleResetLoginAttempts.ts- Key Frontend Paths:
Sass-boilerplate-frontend-v1/src/services/authService.jsSass-boilerplate-frontend-v1/src/api/auth/index.jsSass-boilerplate-frontend-v1/src/store/slices/authSlice.jsSass-boilerplate-frontend-v1/src/interceptors/axiosInstance.jsSass-boilerplate-frontend-v1/src/middleware.jsSass-boilerplate-frontend-v1/src/components/pages/auth/(3 files)Sass-boilerplate-frontend-v1/src/components/pages/settings/(5 2FA files)Sass-boilerplate-frontend-v1/src/hooks/useCheckPermission.js
2. Subscription & Payments System¶
- Status: DONE
- Date: 2026-02-13 | Validated: 2026-02-13
- Output:
docs/deep-dive-subscription-payments.md - Scope: Backend payment modules + entities + shared services + config + events/cron + frontend package UI
- Files Analyzed: 48 (expanded from tracker estimate of 41 — added config, middleware, helper, event/cron files)
- LOC Scanned: ~4,200+
- Known Issues Found: 47
- Severity Breakdown: 8 Critical, 15 High, 16 Medium, 8 Low
- Key Backend Paths:
saas-boilerplate/src/app/modules/v1/Subscription/(5 files)saas-boilerplate/src/app/modules/v1/Payment/(4 files)saas-boilerplate/src/app/modules/v1/Purchase/(4 files)saas-boilerplate/src/app/modules/v1/package/(4 files)saas-boilerplate/src/app/modules/v1/PackageCategory/(4 files)saas-boilerplate/src/app/modules/v1/Webhook/(3 files)saas-boilerplate/src/app/modules/v1/Cupon/(4 files)saas-boilerplate/src/app/modules/v1/stripe.service.tssaas-boilerplate/src/shared/payment/(4 files)saas-boilerplate/src/entity/(6 entities: Subscription, Package, PackageCategory, Payment, Purchase, Cupon)saas-boilerplate/src/config/(stripe.ts, getStripe.ts, getLemonsqueezy.ts)saas-boilerplate/src/app/middlewares/requireStripe.tssaas-boilerplate/src/helper/calculateDiscount.tssaas-boilerplate/src/app/events/handlers/resetSubscribtionStatus.handler.tssaas-boilerplate/src/app/cron/subscribtionExpire.ts- Key Frontend Paths:
Sass-boilerplate-frontend-v1/src/api/packages/(2 files)Sass-boilerplate-frontend-v1/src/components/pages/package/(5 files)Sass-boilerplate-frontend-v1/src/constants/package.js- User Clarifications:
- Coupon entity is outdated — needs columns added to match service expectations
- Package ↔ PackageCategory relationship is abandoned (orphaned feature)
- LemonSqueezy is placeholder/future feature — not functional
Available Deep-Dive Areas¶
Full-Stack Features (Backend + Frontend)¶
3. Blog/CMS System¶
- Status: DONE
- Date: 2026-03-26 | Validated: 2026-03-26
- Output:
docs/deep-dive-blog-cms-system.md - Scope: Full-stack Blog/CMS: Blog CRUD (ownership-based perms), BlogCategory (hierarchical), BlogTag (ManyToOne), GenericPage (CMS), Slug generator, Public SSR/ISR pages (listing, detail, author, category, dynamic page)
- Files Analyzed: 62 (43 backend + 35 frontend, some overlap with Public module)
- LOC Scanned: ~13,296
- Known Issues Found: 236 (26 Critical, 38 High, 66 Medium, 50 Low, 18 Dead Code, 20 Missing Features, 8 Accessibility, 10 Observations)
- Severity Breakdown: 26C, 38H, 66M, 50L + 18 dead code + 8 a11y + 20 missing features + 10 observations
- Adversarial Review: 2026-03-27 — 70 new issues found, 2 claims corrected, 1 fabrication removed. Report:
_bmad-output/extra-docs/blog-cms-adversarial-review/ - Priority: High (elevated from Medium due to 18 Critical: all blog permission checks commented out, category soft-deleted by bulk update, author pages broken, hero image field mismatch)
- Key Backend Paths:
saas-boilerplate/src/app/modules/v1/Blog/(5 files)saas-boilerplate/src/app/modules/v1/BlogCategory/(4 files)saas-boilerplate/src/app/modules/v1/BlogTag/(4 files)saas-boilerplate/src/app/modules/v1/Slug/(4 files)saas-boilerplate/src/app/modules/v1/GenericPage/(4 files)saas-boilerplate/src/app/modules/v1/Public/(3 files — blog-related endpoints)saas-boilerplate/src/entity/(5 entities: Blog, BlogCategory, BlogTags, BlogView, GenericPage)saas-boilerplate/src/shared/generateUniqueSlug.ts- Key Frontend Paths:
Sass-boilerplate-frontend-v1/src/api/blogs/(3 files — 1 dead code)Sass-boilerplate-frontend-v1/src/api/pages/index.jsSass-boilerplate-frontend-v1/src/api/public/blogs.js,dynamic-page.jsSass-boilerplate-frontend-v1/src/components/pages/blogs/(8 files)Sass-boilerplate-frontend-v1/src/components/pages/pages/(4 files)Sass-boilerplate-frontend-v1/src/components/pages/dynamic-page/(1 file)Sass-boilerplate-frontend-v1/src/app/(main-layout)/blogs/,author/,category/,[slug]/- Key Findings:
- ALL
checkPermissionAndThrowcalls in blog.service.ts are COMMENTED OUT — any authenticated user can CRUD any blog bulkBlogUpdateByCategorydestructively soft-deletes the old category (almost certainly unintended)updateBlogcrashes at runtime — loads blog without relations, then accessesblog.categories.length- BlogTag is ManyToOne (not ManyToMany) — tags are NOT shared across blogs
GET /blogs/:idhas no auth middleware — leaks draft content to anonymous users- Blog hero image always shows placeholder — API returns
imagebut frontend readsimageUrl - Author pages return empty results — case-sensitive name matching against lowercased slug
- Public view count increment never called —
BlogViewCountis a dead feature - Not-found pages return HTTP 200 (SEO poison)
- Blog CRUD mutations never revalidate public ISR cache — stale content for up to 1 hour
- Legacy
blog-tags.jshook has double base URL bug — tags management page broken - 0% test coverage across entire Blog/CMS system
4. User Management & RBAC¶
- Status: DONE
- Date: 2026-02-25 | Validated: 2026-02-25
- Output:
docs/deep-dive-user-management-rbac.md - Scope: Backend User/Role/Permission/InviteUser/UserSetting modules + entities + helper/shared dependencies + frontend RBAC infrastructure + all dashboard management pages
- Files Analyzed: 80+ (35 backend + 45+ frontend)
- LOC Scanned: ~15,600+
- Known Issues Found: 68 (9 Critical, 15 High, 22 Medium, 22 Low)
- Priority: High
- Cross-References: 23 overlapping issues with Auth DD (#51-64 now owned by this DD), 23 undocumented API endpoints found vs api.md
- Key Backend Paths:
saas-boilerplate/src/app/modules/v1/User/(4 files)saas-boilerplate/src/app/modules/v1/Role/(5 files)saas-boilerplate/src/app/modules/v1/Permission/(4 files)saas-boilerplate/src/app/modules/v1/InviteUser/(4 files)saas-boilerplate/src/app/modules/v1/UserSetting/(4 files)saas-boilerplate/src/entity/(6 entities: User, Role, Permission, UserRoles, UserSetting, InviteUser)saas-boilerplate/src/helper/hasPermission.ts,checkPermissionAndThrow.tssaas-boilerplate/src/shared/requestContext.ts,permissionCache.ts,permissionNormalizer.tssaas-boilerplate/src/app/middlewares/contextMiddleware.tssaas-boilerplate/src/seed/(role, permission, setting seeds + data)- Key Frontend Paths:
Sass-boilerplate-frontend-v1/src/api/users/,roles/,permissions/,invited-users/Sass-boilerplate-frontend-v1/src/hooks/useCheckPermission.jsSass-boilerplate-frontend-v1/src/components/custom/permission-wrapper.jsx,nav-permission-wrapper.jsxSass-boilerplate-frontend-v1/src/components/pages/dashboard/users/,roles-permissions/,invited-users/Sass-boilerplate-frontend-v1/src/store/slices/authSlice.jsSass-boilerplate-frontend-v1/src/components/pages/auth/register.jsx(invite flow)- Key Findings:
- Dual incompatible
hasPermissionimplementations (middleware vs helper) with different permission formats - Permission format mismatch: middleware produces route-format plural, seed data uses dot-format singular
createRoleandgrantPermissionToRolehave NO permission checks- Frontend create-user form calls update mutation instead of create
- 5 frontend hooks call backend endpoints that don't exist (404s)
- permissionNormalizer module is completely unused (all calls commented out)
- 23 undocumented API endpoints across /roles, /permissions, /invite-users
5. Product Catalog¶
- Status: DONE
- Date: 2026-04-11 | Validated: 2026-04-11
- Output:
docs/deep-dive-product-catalog.md - Scope: Full-stack Product Catalog: Product CRUD (multi-image upload, pricing, categories), ProductCategory management (copied from BlogCategory), Image upload module, frontend dashboard pages (mock-only), product-performance dashboard widget
- Files Analyzed: 23 (13 backend + 10 frontend)
- LOC Scanned: ~2,786
- Known Issues Found: 75 (18 Critical, 19 High, 22 Medium, 16 Low)
- Dead Code: ~577 LOC (mock data generators, commented-out API calls, empty file, template remnant component)
- Priority: High (elevated from Low due to 18 Critical: entire frontend mocked, permission checks missing/commented-out, field name mismatch causes data loss, BlogCategory copy-paste bugs, unseeded permissions, hard delete despite @DeleteDateColumn, unauthenticated image upload)
- Key Backend Paths:
saas-boilerplate/src/app/modules/v1/Product/(4 files)saas-boilerplate/src/app/modules/v1/ProductCategory/(4 files)saas-boilerplate/src/app/modules/v1/Image/(3 files)saas-boilerplate/src/entity/Product.ts,ProductCategory.ts- Key Frontend Paths:
Sass-boilerplate-frontend-v1/src/api/products/(2 files — index.js is empty)Sass-boilerplate-frontend-v1/src/components/pages/products/(3 files)Sass-boilerplate-frontend-v1/src/app/(dashboard-layout)/dashboard/products/(4 pages)Sass-boilerplate-frontend-v1/src/components/pages/dashboard/product-performance.jsx- Key Findings:
- Entire frontend Product CRUD is mocked — every API call commented out, replaced with hardcoded mock data + setTimeout delays
- Only ProductCategory management has real API integration (via useProductCategories hook + axios)
product.validation.tsfieldoriginalPricedoesn't match entitydiscountPrice— discount data silently lostupdateProductpermission check COMMENTED OUT;deleteProductByIdhas ZERO permission check- ProductCategory module copy-pasted from BlogCategory: wrong validation import, wrong type cast, wrong response messages (5x "Blog" instead of "Product")
product-performance.jsxdisplays project/task data, not product metrics (template remnant)- Image upload endpoint (
POST /uploads/image) has NO auth middleware — public upload - Zero product permissions seeded in database — all
checkPermissionAndThrowcalls fail for non-super_admin - Dual soft-delete pattern (isDeleted + @DeleteDateColumn) but service only checks isDeleted
- ProductCategory uses hard delete (
repo.remove()) despite having @DeleteDateColumn - 5 user flows traced: View (mocked), Create (mocked), Edit (mocked), Delete (local-state only), Categories (partially working)
- 0% test coverage across all 23 files
6. Email Template System¶
- Status: DONE
- Date: 2026-02-25 | Validated: 2026-02-25
- Output:
docs/deep-dive-email-template-system.md - Scope: Backend EmailTemplate module + shared email services (3 providers) + entity + frontend visual DnD builder (v2) + legacy v1 + hardcoded templates + event handlers
- Files Analyzed: 44 (4 backend module, 9 email services, 3 legacy helpers, 5 hardcoded templates, 1 entity, 1 frontend API, 20 v2 components, 6 utils, 2 legacy v1, 4 route pages)
- LOC Scanned: ~10,600+
- Known Issues Found: 60 (6 Critical, 10 High, 23 Medium, 21 Low)
- Priority: High (largest single UI feature)
- Extra Documents:
docs/extra-docs/email-template-attack-scenarios.md— Red Team: 5 attack chains, 2 CRITICAL (SQL injection → DB compromise, stored XSS → privilege escalation)docs/extra-docs/email-template-adrs.md— 3 ADRs: unify email infra (~4h), connect DB templates to sending (~6h), delete v1 (~5min)docs/extra-docs/email-template-pre-mortem.md— 7 failure scenarios with business impactdocs/extra-docs/email-template-root-cause-analysis.md— 5 Whys: 3 systemic root causes- Key Backend Paths:
saas-boilerplate/src/app/modules/v1/EmailTemplate/(4 files)saas-boilerplate/src/lib/email/(9 files: EmailFactory, NodeMailerService, ResendService, BrevoService, IEmailService, email.type, email, transporterMail, template/signupEmailVerification)saas-boilerplate/src/helper/email.ts,helper/transporterMail.ts,helper/email/resend.tssaas-boilerplate/src/template/(5 hardcoded template functions)saas-boilerplate/src/entity/EmailTemplate.ts- Key Frontend Paths:
Sass-boilerplate-frontend-v1/src/api/email-templates/index.js(10 React Query hooks)Sass-boilerplate-frontend-v1/src/components/pages/email-templates/(20 components + 6 utils)Sass-boilerplate-frontend-v1/src/components/pages/email-templates-v1/(2 legacy files)Sass-boilerplate-frontend-v1/src/app/(dashboard-layout)/dashboard/email-templates/(3 route pages)- Key Findings:
- Critical architectural gap: EmailTemplate entity NEVER used for sending — visual builder is a dead end. All emails use hardcoded TypeScript functions in
src/template/ - SQL injection via
orderByparameter (blind conditional injection, trivially exploitable) getAllTemplateshas NO permission check — any authenticated user reads all templatesemail-template.*permissions not seeded — non-super_admin permanently locked out- Frontend calls non-existent
DELETE /bulk-permanent-deleteendpoint (always 404) - Dual email infrastructure:
MAIL_TYPE(legacy) vsEMAIL_SERVICE(factory) — different env vars, different code paths dangerouslySetInnerHTMLwithout sanitization in 2 locations (list preview + builder preview)- BrevoService silently swallows errors — email failures invisible
- 3 systemic root causes: zero test coverage, super_admin-only development, no integration tracking
- Attack chain: SQL injection → stored XSS → self-role-change = "new signup → super_admin in <5 min"
- P0 fix: 45 minutes (orderBy whitelist + DOMPurify) blocks both CRITICAL attack chains
7. Menu Builder System¶
- Status: DONE
- Date: 2026-02-25 | Validated: 2026-02-25
- Output:
docs/deep-dive-menu-builder-system.md - Scope: Backend Menu/MenuItem modules + entities + seeds + frontend API/services (old+v2) + v2 components + legacy components + helpers
- Files Analyzed: 38+ (8 backend modules, 2 entities, 6 frontend API/services, 9 v2 components, 12 legacy components, + seeds, routes, helpers)
- LOC Scanned: ~8,900+
- Known Issues Found: 42 (3 Critical, 7 High, 14 Medium, 18 Low)
- Priority: Medium
- Key Backend Paths:
saas-boilerplate/src/app/modules/v1/MenuBuilder/Menu/(4 files)saas-boilerplate/src/app/modules/v1/MenuBuilder/MenuItem/(4 files)saas-boilerplate/src/entity/Menu.ts,MenuItem.tssaas-boilerplate/src/seed/data/permission.ts(8 menu permissions)- Key Frontend Paths:
Sass-boilerplate-frontend-v1/src/api/menu/(2: index.js, menu-item.js) — v2 activeSass-boilerplate-frontend-v1/src/api/menu-builder/(2: index.js, menu-label.js) — old, 9/11 endpoints brokenSass-boilerplate-frontend-v1/src/components/pages/menu-builder/(8 files) — v2 activeSass-boilerplate-frontend-v1/src/components/pages/menu-builder-old/(12 files) — legacy, still routedSass-boilerplate-frontend-v1/src/services/menuService.js,menuItemService.js— dead (dummy data)Sass-boilerplate-frontend-v1/src/hooks/useMenus.js— dead (zero consumers)Sass-boilerplate-frontend-v1/src/lib/menuHelpers.js— tree utilities- Key Findings:
- Permission string format mismatch:
menuItem.view(camelCase) vsmenu-item.create(kebab-case) in same module - 5 permission strings used in code but NOT in seed data (
menu.read,menu.restore,menuItem.view,menuItem.read,menu-item.restore) - 9 of 11 old API hooks call non-existent backend endpoints (including entire
/menu-labelsmodule) countRootLevelItemsqueries wrong entity (Menu instead of MenuItem)useMenu()has{ limits: 1000 }bug — query param never sent- 3,300+ LOC of dead code identified (services, hooks, legacy components, old API)
- No test files exist (backend or frontend)
- Old components still accessible at
/dashboard/settings/menu-builder-old
8. Contact System¶
- Status: NOT STARTED
- Priority: Low
- Verified Scope (~9 files):
- Backend:
Contact/(4 files) - Entities (1):
ContactMessage.ts - Frontend:
api/contacts/(1),components/pages/contact-frontend/(2),components/pages/contact-list/(1) - Public route:
(main-layout)/contact/page.js(shared with Blog/CMS scope) - Already Covered in Auth DD: None
- Why: Contact form submission and admin review — small, self-contained feature
Backend-Only Areas¶
9. Middleware & API Infrastructure¶
- Status: DONE
- Date: 2026-02-16 | Validated: 2026-02-16
- Output:
docs/deep-dive-middleware-api-infrastructure.md - Scope: Backend middleware pipeline + API infrastructure modules
- Files Analyzed: 19 in-scope + 15 dependency files (34 total)
- LOC Scanned: ~2,184
- Known Issues Found: 26 (2 Critical, 7 High, 9 Medium, 8 Low)
- Priority: High
- Verified Scope (19 files):
- Middleware (13 files):
middlewares/— auth.ts, hasPermission.ts, contextMiddleware.ts, globalErrorHandler.ts, middleware.ts, rateLimiter.ts, requireStripe.ts, sanitizeQuery.ts, upload.ts, validateRequest.ts, logger.ts, sequrity.ts, swaggerAuthMiddleware.ts - API infrastructure (6 files):
modules/v1/Swagger/swagger.route.ts(1),modules/v1/Routes/(2: routerList.routes.ts, routes.controller.ts),modules/v1/Public/(3: public.controller.ts, public.routes.ts, public.service.ts) - Already Covered in Auth DD:
auth.ts,hasPermission.ts(2 of 13 middleware files — re-examined in pipeline context) - Key Findings:
middleware.tsis dead code (never imported byapp.ts)auth.tsrefresh token validation broken (User entity has norefreshTokencolumn)- Helmet security headers disabled in production (commented out)
routes.jsonmissing —/api/v1/routesendpoint crasheshasPermission()queries DB despite permission cache being available- Two parallel auth middleware implementations with different behaviors
- Why: Request processing backbone — rate limiting, validation, error handling, security headers, file upload, Swagger docs, route listing
10a. Helper Functions, Config & DB¶
- Status: DONE
- Date: 2026-03-30 | Validated: 2026-03-30
- Output:
docs/deep-dive-helper-functions-config-db.md - Scope: All 33 files across
helper/(24 files incl.cloud/s3.ts+email/resend.ts),config/(8 files incl.AppConfig.ts),db/(1 file). All files re-examined including 7 previously covered in Auth DD. - Files Analyzed: 33 (24 helper + 8 config + 1 db)
- LOC Scanned: ~1,328
- Known Issues Found: 88 (20 Critical, 23 High, 26 Medium, 19 Low)
- Dead Code: ~350 LOC removable across 5 dead files + 1 unused import (fileUploader.ts with leaked credentials, AppConfig.ts duplicate, calculateDiscount.ts, paginationHelper.ts, email/resend.ts superseded, unused DeleteObjectCommand import)
- Priority: High (elevated from Medium due to 20 Critical: leaked credentials, 3x path traversal, zero file type validation, MASTER_KEY not validated, dual Stripe init, hardcoded localhost, invite-only account takeover)
- Subagent Reports (7):
_bmad-output/extra-docs/file-upload-helpers-deep-dive/— 30 issues (6C, 8H, 9M, 7L) — File upload pipeline analysis_bmad-output/extra-docs/helper-utilities-deep-dive/— Email utilities + general helpers analysis_bmad-output/extra-docs/config-deep-dive/— 47 issues (8C, 12H, 16M, 11L) — All 8 config files_bmad-output/extra-docs/db-connection-and-dependency-map/— DB connection + full dependency map_bmad-output/extra-docs/code-reuse-duplication-analysis/— Cross-codebase duplication: triple permission impl, dual email pipeline- Key Backend Paths:
saas-boilerplate/src/helper/(22 root files +cloud/s3.ts+email/resend.ts)saas-boilerplate/src/config/(8 files: AppConfig.ts, cloudinary.ts, dbConfig.ts, getLemonsqueezy.ts, getStripe.ts, index.ts, passport.ts, stripe.ts)saas-boilerplate/src/db/connection.ts- Key Findings:
fileUploader.tshas hardcoded Cloudinary API key + secret in source — 0 consumers (dead code), credentials must be rotated- 3 path traversal vulnerabilities in
deleteFile,saveBufferToFile,handleFileUpload— no input sanitization - Zero file type validation across entire upload pipeline — any file type accepted
config/AppConfig.tsis 150 LOC duplicate ofconfig/index.ts— 0 consumers- Dual Stripe initialization —
stripe.ts(sync) vsgetStripe.ts(async+DB fallback), some modules import BOTH - Triple permission implementation across codebase:
helper/hasPermission.tsvsmiddlewares/hasPermission.tsvsmiddlewares/permissionMiddleware.ts hasPermission.tsnormalization commented out in main function but active inhasPermissionForUser()— asymmetric behaviorsaveBufferToFileargument order swapped byLocalSotrage.ts— folder/filename reversedconfig/index.tshas 40+ consumers — highest blast radius, any key rename is multi-file change- 0% test coverage across all 33 files
- Why: Utility layer — file uploads, encryption, pagination, image processing, cloud integrations, database config
10b. Service Factories (Email, Payment, Storage, Cache)¶
- Status: DONE
- Date: 2026-03-29 | Validated: 2026-03-29
- Output:
docs/deep-dive-service-factories.md - Scope: 4 factory subsystems in
src/lib/: Email (3 providers: NodeMailer, Resend, Brevo), Payment (Stripe + LemonSqueezy), Storage (AWS S3, Cloudinary, Local), Cache (node-cache). Plus config files, helper layer consumers, and cross-factory architectural analysis. - Files Analyzed: 45+ (20 lib factory files + 16 config/consumer files + helper layer)
- LOC Scanned: ~2,200+
- Known Issues Found: ~147 (28 Critical, 33 High, 46 Medium, 40 Low) + 6 systemic
- Dead Code: ~434 LOC across ~10 files (entire lib/storage/ and lib/cache/ directories dead)
- Priority: High (elevated from Medium due to 28 Critical: broken email factory, hardcoded webhook secrets, committed credentials, dead code subsystems)
- Subagent Reports (5):
_bmad-output/extra-docs/email-factory-deep-dive/— 39 issues (7C, 8H, 10M, 14L)_bmad-output/extra-docs/payment-factory-deep-dive/— 42 issues (7C, 10H, 14M, 11L)_bmad-output/extra-docs/storage-factory-deep-dive/— 42 issues (8C, 9H, 14M, 11L)_bmad-output/extra-docs/cache-deep-dive/— 22 issues (5C, 6H, 7M, 4L)_bmad-output/extra-docs/factory-cross-cutting-analysis/— Cross-factory consumer mapping, 13 competing systems- Actual Paths (corrected from tracker):
- Email factory (9 files):
lib/email/— BrevoService.ts, EmailFactory.ts, IEmailService.ts, NodeMailerService.ts, ResendService.ts, email.ts (DEAD), email.type.ts, transporterMail.ts (DEAD), template/signupEmailVerification.ts (DEAD) - Payment factory (4 files):
lib/payment/— PaymentFactory.ts, paymentService.ts, StripeService.ts, payment.type.ts - Storage factory (5 files):
lib/storage/— AwsStorage.ts, CloudinaryStorage.ts, IStorageService.ts, StorageFactory.ts, LocalSotrage.ts — ALL DEAD CODE - Cache (2 files):
lib/cache/— cache.interface.ts, Node-cache.ts — ALL DEAD CODE - Related config:
config/stripe.ts,config/getStripe.ts,config/getLemonsqueezy.ts - Related consumers:
modules/v1/stripe.service.ts,modules/v1/Payment/,modules/v1/Webhook/ - Key Findings:
- ~11% factory adoption — only 3 of ~28 consumers use factory abstractions; rest use legacy helper/config systems
EMAIL_SERVICEenv var missing from .env and .env.example — EmailFactory always throws, breaking registration/invite emails- BrevoService silently swallows all errors — emails appear sent when they failed
- Real Gmail SMTP credentials committed in
.envfile paymentGatewayparameter completely ignored — hardcodedPaymentFactory.create("stripe")- LemonSqueezy webhook secret hardcoded in source code (
"c3b451346788c32") stripeProductIdreferences non-existent column — runtime crash- Stripe
cancelUrluses{CHECKOUT_SESSION_ID}token — Stripe doesn't replace in cancel_url → 404 - Entire
lib/storage/is dead code (5 files, ~250 LOC, zero consumers) - Entire
lib/cache/is dead code (2 files, ~37 LOC, zero consumers) - LocalStorage.upload() writes base64 text not binary — files corrupted
- Path traversal vulnerability in LocalStorage via unsanitized filename
- Cache TTL comments are lies: "5 minutes" = 1 hour, "1 day" = 24 minutes
- 13 competing implementations across 4 subsystems (3 email, 4 payment, 3 storage, 3 cache)
- Only Stripe has AppConfig encrypted DB secret support — all others plaintext env vars
- Zero test coverage across all 4 factory subsystems
10c. Shared Utilities¶
- Status: DONE
- Date: 2026-03-29 | Validated: 2026-03-29
- Output:
docs/deep-dive-shared-utilities.md - Scope: All 15 shared/ top-level utilities: DB access, error handling, response formatting, permission caching/normalization, request context, CORS, slug generation, image processing, caching, query helpers, object utilities, content validation
- Files Analyzed: 15
- LOC Scanned: ~926
- Known Issues Found: 108 (17 Critical, 39 High, 35 Medium, 17 Low)
- Dead Code:
pick.ts(0 consumers),dbRepository()function (0 consumers),addPermissionToCache()(0 callers), 3 single-consumer candidates (getCorsOrigins, permissionNormalizer, validatePostTypeAndId) - Priority: High (elevated from Low due to 17 Critical: privilege escalation via mutable permission Set, unbounded slug loop DoS, non-atomic cache, ACTION_MAPPING ignored, production console.log, falsy ID validation bypass)
- Key Backend Paths:
saas-boilerplate/src/shared/(all 15 files)- Key Findings:
getDbRepositoryis #1 dependency hotspot (53 consumers) — changes affect entire backendpermissionCache.tsreturns mutableSet<string>reference — callers can escalate privileges via.add()generateUniqueSlughas unbounded while loop (DoS vector) + race condition on concurrent callspermissionNormalizer.tscomputes ACTION_MAPPING but ignores it — root cause of format mismatchesnormalizeImageSrchasconsole.login production codevalidatePostTypeAndIdfalsy check!postIdskips validation forpostId: 0sendResponsemeta field stripped from response when undefined (should be null)cache.tscomment says "5 minutes" but code sets 3600s (1 hour)pick.tsis entirely dead code — 0 consumers- Zero test coverage across ALL 15 files
- 2 direct DataSource accesses bypass
getDbRepository()wrapper - 5+ response sends bypass
sendResponse()standardization - Duplicate slug generation in
blog.utils.ts - Pagination naming mismatch:
orderBy/ordervssortBy/sortOrder
11. Event System & Cron Jobs¶
- Status: NOT STARTED
- Priority: Medium
- Verified Scope (13 files):
- Events (10 files):
events/— eventEmitter.ts, eventTypes.ts, index.ts, handlers/inviteUserCreate.handler.ts, handlers/registerEmailHandler.ts, handlers/resetLoginAttempts.handler.ts, handlers/resetSubscribtionStatus.handler.ts, handlers/inviteOnlyLoginSendEmail.ts, handlers/sendForgotPass.handler.ts, handlers/sendLoginOtp.handler.ts - Cron (3 files):
cron/— index.ts, scheduleResetLoginAttempts.ts, subscribtionExpire.ts - Already Covered in Auth DD: 9 of 10 event handlers +
scheduleResetLoginAttempts.tsalready documented. OnlyresetSubscribtionStatus.handler.tsandsubscribtionExpire.tsare new. - Recommendation: Given 11 of 13 files already covered in Auth DD, consider folding remaining 2 files into the Payments (#2) deep-dive instead of standalone.
- Why: Async event-driven architecture, handler patterns, cron scheduling
12. Settings & Configuration¶
- Status: DONE
- Date: 2026-02-25 | Validated: 2026-02-25
- Output:
docs/deep-dive-settings-configuration.md - Scope: Backend Setting + AppConfig + UserSetting modules, entities, seeds, frontend API/store/UI, consumer components
- Files Analyzed: 40+ (22 backend, 18+ frontend)
- LOC Scanned: ~5,800+
- Known Issues Found: 85 (18 Critical, 15 High, 27 Medium, 25 Low)
- Priority: Low (elevated due to 18 critical security findings)
- Key Backend Paths:
saas-boilerplate/src/app/modules/v1/Setting/(4 files)saas-boilerplate/src/app/modules/v1/AppConfig/(4 files)saas-boilerplate/src/app/modules/v1/UserSetting/(4 files)saas-boilerplate/src/entity/Setting.ts,AppConfig.ts,UserSetting.tssaas-boilerplate/src/seed/data/setting.ts,seed/setting.seed.ts- Key Frontend Paths:
Sass-boilerplate-frontend-v1/src/api/settings/(2 files)Sass-boilerplate-frontend-v1/src/api/public/settings.jsSass-boilerplate-frontend-v1/src/store/slices/settingSlice.jsSass-boilerplate-frontend-v1/src/components/pages/settings/(8 files)- Key Findings:
- 3 separate config systems with inconsistent quality (Setting, AppConfig, UserSetting)
- All Setting GET endpoints fully public —
setting.viewperm seeded but never used - AppConfig has zero permissions seeded — permanently super_admin-only
twoFactorSecretstored plaintext and returned in API responsesGET /user-settings/lists ALL users' 2FA settings without permission checkuseSetupTwoFactorusesuseQueryfor side-effectingPUT— regenerates TOTP on mountuseBackupCodesusesuseQueryforPOST— overwrites codes on refetch- Frontend has 3 caching strategies that can desync (React Query + Redux + unstable_cache)
13. Logging & Analytics¶
- Status: DONE
- Date: 2026-04-11 | Validated: 2026-04-11
- Output:
docs/deep-dive-logging-analytics.md - Scope: Backend Logger module (1 file) + Analytic module (4 files) + Logger entity (1) + logging infrastructure (3: middlewares/logger.ts, helper/httpLogger.ts, transporter/PostgresTransport.ts) + Frontend dashboard pages (3 versions + charts V1/V2) + widgets (9) + data tables/charts (8) + API hook (1 + 1 duplicate)
- Files Analyzed: 34 (9 backend + 25 frontend)
- LOC Scanned: ~5,800
- Known Issues Found: 64 (9 Critical, 14 High, 23 Medium, 18 Low)
- Dead Code: ~2,345 LOC removable (V1/V2 dashboards ~2,163 LOC, disabled logging pipeline ~182 LOC)
- Priority: High (elevated from Low due to 9 Critical: entire HTTP logging pipeline dead, analytics no permission check, no caching ~20 queries/call, 3 frontend-backend data mismatches, broken props destructuring, 100% hardcoded dummy component)
- Key Backend Paths:
saas-boilerplate/src/app/modules/v1/Logger/logger.service.tssaas-boilerplate/src/app/modules/v1/Analytic/(4 files)saas-boilerplate/src/entity/Logger.tssaas-boilerplate/src/app/middlewares/logger.tssaas-boilerplate/src/helper/httpLogger.tssaas-boilerplate/src/app/transporter/PostgresTransport.ts- Key Frontend Paths:
Sass-boilerplate-frontend-v1/src/api/dashboard/index.jsSass-boilerplate-frontend-v1/src/hooks/useDashboardData.js(duplicate)Sass-boilerplate-frontend-v1/src/components/pages/dashboard/dashboard-page-v3.jsx(active)Sass-boilerplate-frontend-v1/src/components/pages/dashboard/dashboard-page-v2.jsx(dead)Sass-boilerplate-frontend-v1/src/components/pages/dashboard/dashboard-page.jsx(dead)Sass-boilerplate-frontend-v1/src/components/pages/dashboard/widgets/(9 files)Sass-boilerplate-frontend-v1/src/components/pages/dashboard/charts*.jsx,weekly-stats.jsx,payment-gateways.jsx,product-performance.jsx,expense-pi-chart.jsx,sales-bar-chart.jsx,recent-*.jsx,yearly-sales*.jsx,welcome-section.jsx- Key Findings:
- httpLogger middleware is NEVER REGISTERED — imported in app.ts but never
app.use()'d, commented out in middleware.ts. The entire Logger entity / LoggerService / PostgresTransport pipeline is dead code. - Analytics endpoint has NO permission check —
auth()with no arguments, any authenticated user sees user emails and payment amounts. Noanalytics.viewpermission seeded. - No caching — ~19-24 DB queries per API call despite importing
getCache/addCache. 3 unused imports. - 3 critical frontend-backend mismatches:
totalGames/thisMonthGames(ghost gaming metrics, always 0),totalUpvotes/widgets.upvotes(UpvotesStatCard permanently broken),blogWithAuthor.todayvs frontenddaykey ("Today" filter broken) - V1 and V2 dashboard pages are 100% dead code — zero imports across codebase. Only V3 is rendered. ~2,163 LOC dead frontend code.
/dashboard/analyticsis a stub — renders only<div>Overview Page</div>- Two chart libraries bundled (ApexCharts + Recharts) — consolidation opportunity
useDashboarderror swallowed — catch block doesn't re-throw, React QueryisErrornever true, all error UI unreachable- BlogsStatCard duplicates 150 LOC from StatCard instead of composing it (⅘ other cards use correct thin-wrapper pattern)
- Icons swapped: contacts has
FileText, payments hasMessageSquare, blogs hasGamepad2(gaming leftover) sales-bar-chart.jsxprops destructuring broken:(data, totalSales)instead of({data, totalSales})— renders nothing- 0% test coverage across all 34 files
- Only active Winston consumer:
inviteUserCreate.handler.tscallinglogger.error()directly
Frontend-Only Areas¶
14. Landing Page & Public Site¶
- Status: DONE
- Date: 2026-02-25 | Validated: 2026-02-25
- Output:
docs/deep-dive-landing-page-public-site.md - Scope: Full-stack public-facing pages: landing page (13 components), blog system (listing/detail/author/category), contact form, dynamic pages, navigation, supporting backend modules (Public/Blog/GenericPage/Setting/Contact/Menu)
- Files Analyzed: 81 (22 backend + 13 landing components + 7 route pages + 7 page components + 7 layout components + 7 API modules + 2 server actions + 1 middleware + 3 services + 12 DB entities)
- LOC Scanned: ~8,200+
- Known Issues Found: 70 (7 Critical, 10 High, 30 Medium, 23 Low) -- 45 original + 25 from Expert Panel
- Priority: Low (elevated to High due to 7 Critical: 5x broken caching + 2x stored XSS)
- Elicitation Analyses (5 methods applied):
- Red Team vs Blue Team: 7 attack chains, full platform takeover in 8 steps, P0 fix = 15 min
- Pre-mortem: 9 failure scenarios, ship-blocker list, ~3-hour fix estimate
- Expert Panel: 25 new issues (#46-#70) -- GenericPage data leak, sequential API calls, null-safety crashes, a11y gaps
- ADRs: 5 decisions (caching migration, sanitization, CTA wiring, SEO infra, CI pipeline), 23-31h total
- 5 Whys: 4 systemic root causes (no CI, copy-paste dev, visual-demo mindset, no security discipline)
- Extra Documents:
docs/extra-docs/landing-page-attack-scenarios.md-- Red Team: 7 attack chains, full platform takeover, 16-fix hardening roadmapdocs/extra-docs/landing-page-adrs.md-- 5 ADRs: caching migration, HTML sanitization, CTA wiring, SEO infrastructure, CI pipelinedocs/extra-docs/landing-page-pre-mortem.md-- 9 failure scenarios, ship-blocker list, 3-hour fix estimate for all blockersdocs/extra-docs/landing-page-root-cause-analysis.md-- 5 Whys: 6 patterns, 4 systemic root causes, fix-one-fix-many recommendations- Key Backend Paths:
saas-boilerplate/src/app/modules/v1/Public/(3 files)saas-boilerplate/src/app/modules/v1/Blog/(3 files)saas-boilerplate/src/app/modules/v1/GenericPage/(3 files)saas-boilerplate/src/app/modules/v1/Setting/(3 files)saas-boilerplate/src/app/modules/v1/Contact/(3 files)saas-boilerplate/src/app/modules/v1/MenuBuilder/(Menu + MenuItem, 6 files)saas-boilerplate/src/entity/(12 entities: Blog, BlogCategory, BlogTags, BlogView, GenericPage, Setting, AppConfig, ContactMessage, Menu, MenuItem, User)- Key Frontend Paths:
Sass-boilerplate-frontend-v1/src/app/(main-layout)/(7 route pages + layout)Sass-boilerplate-frontend-v1/src/components/pages/landing-page/(7 sections + 2 buttons)Sass-boilerplate-frontend-v1/src/components/pages/blogs/(blog-card, blog-page-frontend)Sass-boilerplate-frontend-v1/src/components/pages/contact-frontend/(2 files)Sass-boilerplate-frontend-v1/src/components/pages/dynamic-page/(1 file)Sass-boilerplate-frontend-v1/src/api/public/(4 files: blogs, settings, dynamic-page, navigation-links)Sass-boilerplate-frontend-v1/src/components/layout/(7 files)Sass-boilerplate-frontend-v1/src/constants/landing-page-data.js- Key Findings:
- ALL 5
unstable_cachewrappers use static cache keys ignoring parameters -- page 2 returns page 1 data, blog A shows blog B, footer shows navbar links, contact page shows site settings, Terms page shows About content - 2 stored XSS vectors via
dangerouslySetInnerHTML(blog content + dynamic page content) with zero sanitization - All 7 landing page CTA buttons are completely non-functional (no href, no onClick)
- Homepage has zero SEO metadata; 3 additional pages also missing metadata
- Blog view count trivially manipulable (no rate limiting, no dedup)
- API error responses fall through to
.json()crashing entire page tree; no error boundaries exist - Zero test coverage on entire public site (0% statements, branches, functions, lines)
- Ship-blocker fix estimate: ~3 hours for 9 critical items
15. UI Component Library¶
- Status: DONE
- Date: 2026-02-25 | Validated: 2026-02-25
- Output:
docs/deep-dive-ui-component-library.md - Scope: Full frontend component system: ui/ (40 shadcn/Radix primitives), custom/ (34 composed application components), editor/ (15 BlockNote files), layout/ (9 header/footer shells)
- Files Analyzed: 98 (40 ui/ + 34 custom/ + 15 editor/ + 9 layout/)
- LOC Scanned: ~13,700
- Known Issues Found: ~405 (9 Critical, 40 High, ~160 Medium, ~200 Low)
- Dead Code Files: 18 (confirmed never imported, ~2,400 LOC removable)
- Priority: Medium
- Key Backend Paths: N/A (frontend-only deep-dive)
- Key Frontend Paths:
Sass-boilerplate-frontend-v1/src/components/ui/(40 files)Sass-boilerplate-frontend-v1/src/components/custom/(34 files)Sass-boilerplate-frontend-v1/src/components/editor/(15 files, 14 JSX + 1 CSS)Sass-boilerplate-frontend-v1/src/components/layout/(9 files)Sass-boilerplate-frontend-v1/src/app/globals.css(Tailwind v4 theme config)Sass-boilerplate-frontend-v1/src/lib/utils.js(cn, formatText, generateAvatar)- Key Findings:
goldcolor tokens (text-gold,bg-gold,border-gold) are COMPLETELY UNDEFINED in Tailwind config — 16 uses across 7 files silently failtext-light-50CSS var exists but missing@theme inlinemapping — 15 uses across 10 files silently fail- 3 competing modal implementations: custom/modal (32 consumers, zero a11y) vs ui/dialog (5 consumers, full a11y) vs ui/alert-dialog (0 consumers, never used)
- CustomToolbar.jsx hooks called after conditional return — violates React Rules of Hooks, will crash
- custom/input.jsx switch fallthrough bug —
"small"size completely broken (h-0makes input invisible) - IframeEmbed.jsx XSS risk — user URLs embedded as iframe src without sanitization
- permission-wrapper.jsx calls router.push() during render phase (React anti-pattern)
- Two Button components coexist (
ui/buttonvscustom/button) used interchangeably with no convention - advance-table.jsx and data-table.jsx are 90% duplicate code
- 5 user flows traced: Login, Dashboard, Blog Create, RBAC, Landing Page — all show component inconsistency
- "Get Started" buttons on landing page and header have no click handler — completely non-functional
- Dashboard WelcomeSection references "Total Games" — gaming template remnant
- Blog create page has triple nested PermissionWrapper for same permission
- Verification: Tailwind config tokens verified against
globals.css, 5 user flows traced end-to-end, modal/dialog consumer audit completed, all critical bugs verified in actual source code
16. Frontend Infrastructure¶
- Status: DONE
- Date: 2026-03-26 | Validated: 2026-03-26
- Output:
docs/deep-dive-frontend-infrastructure.md - Scope: Cross-cutting frontend wiring: Redux store (3 files), Axios interceptor (1), custom hooks (10), providers (5), context (1), lib utilities (10), services (3), server actions (2), HOCs (1), constants (3), middleware (1), root layout + 3 app layouts (4)
- Files Analyzed: 45 (41 core infra + 4 app router layouts)
- LOC Scanned: ~2,100
- Known Issues Found: ~179 (16 Critical, 22 High, ~63 Medium, ~62 Low, 8 Systemic)
- Dead Code Files: 6 confirmed (protected-route.jsx, menuService.js, menuItemService.js, dummyMenuData.js, useMenus.js, useRedux.js — ~727 LOC removable)
- Priority: Medium (elevated due to 16 Critical issues in auth flow, permissions, and security)
- Subagent Reports:
_bmad-output/extra-docs/redux-state-management-deepdive/— 29 issues (5C, 8H, 9M, 7L)_bmad-output/extra-docs/custom-hooks-deep-dive/— 46 issues + 8 systemic_bmad-output/extra-docs/providers-context-infra-deepdive/— 43 issues (6C, 9H, 12M, 7L)_bmad-output/extra-docs/utils-constants-hocs-actions-deepdive/— 49 issues (3C, 5H, 16M, 25L)_bmad-output/extra-docs/services-layer-deep-dive/— 22 issues (4C, 6H, 7M, 5L)_bmad-output/extra-docs/frontend-infra-consumer-analysis/— 5 user flows traced, 8 cross-cutting findings- Key Frontend Paths:
Sass-boilerplate-frontend-v1/src/store/(3 files: index.js, slices/authSlice.js, slices/settingSlice.js)Sass-boilerplate-frontend-v1/src/interceptors/axiosInstance.jsSass-boilerplate-frontend-v1/src/hooks/(10 files)Sass-boilerplate-frontend-v1/src/components/providers/(5 files)Sass-boilerplate-frontend-v1/src/context/theme-context.jsxSass-boilerplate-frontend-v1/src/lib/(10 files)Sass-boilerplate-frontend-v1/src/services/(3 files)Sass-boilerplate-frontend-v1/src/actions/(2 files)Sass-boilerplate-frontend-v1/src/hocs/createIcon.jsSass-boilerplate-frontend-v1/src/constants/(3 files)Sass-boilerplate-frontend-v1/src/middleware.jsSass-boilerplate-frontend-v1/src/app/layout.js+ 3 group layouts- Key Findings:
- No token refresh mechanism — 401 immediately logs out,
useRefreshTokenhook exists but has zero consumers, and the API doesn't even send a refresh token - Permission split-brain after page refresh: Redux
user=nullwhile React Query has profile data, all permission checks fail - 403 responses trigger full logout instead of showing "Access Denied"
middleware.jsonly checks cookie existence, not JWT validity —token=anythingpassesprotected-route.jsxis 100% dead code (never imported)- Theme desync between next-themes and custom ThemeContext (one-way CustomEvent bridge breaks post-mount)
uploadFile.jshas zero file validation and bypasses auth (no axiosInstance)import * as LucideIconsdumps ~1,000 icons into bundle (~hundreds KB)- 4 coexisting state systems (Redux, React Query, Context, localStorage) with weak coordination
- Settings triple-cached (ISR 24h, React Query 1h, Redux on mount) — can desync
settingSlice.jsdiscovery: NOT in original tracker — found by discovery agent- 5 user flows traced end-to-end (bootstrap, login→dashboard, permission check, theme switch, data fetching)
Recommended Order¶
For maximum value, deep-dive in this order:
| Order | Area | Files | Rationale |
|---|---|---|---|
| 1 | 70+ | DONE | |
| 2 | 48 | DONE — 47 issues found | |
| 3 | 80+ | DONE — 68 issues found | |
| 4 | 44 | DONE — 60 issues found, SQL injection + stored XSS chains | |
| 5 | 19 | DONE — 26 issues found | |
| 6 | 79 | DONE — 236 issues (post-review), 26 Critical incl. SQL injection via orderBy, Rules of Hooks crash | |
| 7 | 38+ | DONE — 42 issues found, 3,300+ LOC dead code | |
| 8 | 98 | DONE — ~405 issues found, 18 dead code files, 9 Critical | |
| 9 | 45 | DONE — ~179 issues found (16C, 22H), 727 LOC dead code, 5 user flows traced | |
| 10 | 15 | DONE — 108 issues found (17C), pick.ts dead code, privilege escalation via mutable Set | |
| 11 | 45+ | DONE — ~147 issues found (28C, 33H), ~434 LOC dead code, 11% factory adoption, 13 competing systems | |
| 12 | 33 | DONE — 88 issues found (20C, 23H), ~350 LOC dead code, leaked Cloudinary creds, 3x path traversal | |
| 13 | 34 | DONE — 64 issues found (9C), httpLogger dead, no perm check, 3 FE-BE mismatches, ~2,345 LOC dead code | |
| 13 | 40+ | DONE — 85 issues found, 18 Critical (2FA secret leakage, public endpoints, unseeded perms) | |
| 14 | 81 | DONE -- 70 issues found (45 + 25 Expert Panel), 5x broken cache + 2x XSS + dead CTAs + GenericPage data leak | |
| 15 | 23 | DONE — 75 issues found (18C, 19H), ~577 LOC dead code, entire frontend mocked, copy-paste bugs from Blog | |
| 16+ | Remaining (#8, #11) | varies | Lower priority, scope as needed |
Notes¶
- Overlap: Some files appear in multiple deep-dive scopes. The tracker notes overlaps and "Already Covered" files per area.
- Event System (#11): 11 of 13 files already covered in Auth DD. Consider folding remaining 2 into Payments (#2) deep-dive.
- Custom deep-dives: You can always specify a custom folder path, file path, or feature name instead of these predefined areas.
- Validation: Each deep-dive should be validated against actual source code after generation.
- File counts are verified against actual codebase as of 2026-02-13 (not estimates).
- Filename typos found:
sequrity.ts(middleware),subscribtionExpire.ts(cron),resetSubscribtionStatus.handler.ts(events),LocalSotrage.ts(storage),email-temlate-form.jsx(email-templates-v1).
Maintained alongside the BMAD document-project workflow | Verified 2026-04-11 | Last deep-dive: Logging & Analytics 2026-04-11