BYTE ON
Software Company
TKAMOL · Documentation
BYTE ONSOFTWARE COMPANY
TKAMOL · Legal Operations SaaS · Documentation
Part I · SRS

Chapter 3 - Non-Functional Requirements Register

Status labels: Implemented, Present (not verified), To Be Confirmed (TBC), Gap.

NFR-SEC — Security

IDRefRequirementEvidence / NotesStatus
NFR-SEC-001Auth mechanismSession-based authentication (Laravel default), CSRF on state-changing requests (except callbacks).bootstrap/app.php CSRF exceptions; auth.php routes.Implemented & Verified (inspection).
NFR-SEC-002CSRF state-changingAll authenticated routes require CSRF (except allowed list with 24 payment callbacks).bootstrap/app.php lines 45-64.Implemented & Verified.
NFR-SEC-003Authorization (SaaS)Roles/permissions via Spatie guarded 'web'.config/permission.php; middleware.Implemented & Verified.
NFR-SEC-004Authorization (non-SaaS)Membership role column drives access instead of Spatie (alternative implemented branch).User::scopeWorkspaceScoped, handle inertia request permission logic.Implemented (depth unverified).
NFR-SEC-005Row-level tenant isolationWorkspace scoping and role scoping applied on queries.User::scopeWorkspaceScoped, repository explicit filters.Implemented (no global scope).
NFR-SEC-006IMAP password at restEncrypted mutator on EmailAccount.password.app/Models/EmailAccount.php (accessor/mutator).Implemented & Verified.
NFR-SEC-007Secret fallback in configconfig/imap.php defines direct username/password in repo fallback.!! Open security vulnerabilityGap — credentials shown in source.
NFR-SEC-008Sensitive fields encryptionIMAP secrets only; gateway credentials appear held in plaintext payment_settings values (likely encrypted at app level? verify).payment_settings migration.Unverified.
NFR-SEC-009Password nullableusers.password nullable (implies social/quick login possibility, currently unused).User model casts.Present.
NFR-SEC-010SaaS mode lockSaaS-only routes return 404 for non-SaaS via SaasOnly.SaasOnlyMiddleware.Implemented & Verified.
NFR-SEC-011Demo mode lockNon-GET blocked in demo.DemoModeMiddleware.Implemented & Verified.
NFR-SEC-012Workspace suspension lockSuspended workspace blocks state changes.CheckWorkspaceSuspension.Implemented & Verified.
NFR-SEC-013Secret hygieneNo .env tracked; no secrets read in this audit; actual secrets are deployment-local.environment files not present.Implemented workflow.
NFR-SEC-014Login history (IP, etc.)Stores sensitive IP and details array.login_histories migration.Implemented, privacy retention TBC.
NFR-SEC-015File (media) visibilitySpatie media uses private/public disks; media upload respects storage driver.media_items migration + config/multimedia; MediaController.Implemented.
NFR-SEC-016Security scanning/pentestNo scans or results.Not found.TBC / Gap.
NFR-SEC-017Rate limitingDefault Laravel throttle 6/min for reset tokens; AI chat 30/hr; IMAP connection backoff.Code.Implemented minimal.

NFR-PRF — Performance

IDItemEvidenceNotesStatus
NFR-PRF-001SLA / response budgetNot defined.TBC (no documented SLO).
NFR-PRF-002Query optimization in dashboard/evaluation.DashboardService, PerformanceAnalyticsService.Complex service code (8-15KB), queries possibly heavy — requires profiling.
NFR-PRF-003Plan usage cache.ai_token_usage aggregated; workspaces cache stats 300s in AiAgentService.Implemented.
NFR-PRF-004Indexesaudit_logs has compound; performance_metrics unique user/month; email_message unique message_id.Partial (no migration-level full index audit beyond listed ones).
NFR-PRF-005WEB with heavy pagesSPA with Vite chunk splitting (vendor/ui/utils)Build config.Implemented.
NFR-PRF-006IMAP polling interval10s per account; schedule everyMinute; withoutOverlapping.EmailListenerService.Implemented.
NFR-PRF-007Async report/email jobsOnly GenerateMonthlyReportsJob is queued.app/Jobs.Partial (emails remain synchronous).

NFR-AVAIL — Availability / Reliability

IDItemsStatus
NFR-AVAIL-001Defined uptime contract/Tier (TBC)TBC.
NFR-AVAIL-002Retry behavior of IMAP listener (max 10 retries, 10 sec wait).Implemented.
NFR-AVAIL-003Queue worker supervisor config (must be added by infra team); Docker queue:work --daemon --tries=3 --timeout=600; schema only has one job.Present.
NFR-AVAIL-004Logging stack configurable (single/logger stacking).Present.

NFR-MAINT — Maintainability

IDItemEvidence
NFR-MAINT-001Codebase size: backend ~85 models, 125 controllers, 32 services; JS 383 files.File counts (535 Route:: lines in routes/web.php).
NFR-MAINT-002Architecture MVC + Service Layer + Repository (repository consistent for some domains).app/Repositories; Controllers.
NFR-MAINT-003Stale/duplicate classes.SlackSettingsController vs Settings\SlackSettingController; ZoomSettings test method mismatch; PermissionController extra methods may be unimplemented.
NFR-MAINT-004SpatieTeams unused (teams=false), but the migration includes team FK columns.config permission; migration.
NFR-MAINT-005Frontend no component tests/no tests.package.json.
NFR-MAINT-006Unresolved agent instructions / business copyno docs for tenant settings/SaaS specifics.

NFR-USAB — Usability

NFR-ACCESS — Accessibility

ItemStatus
WCAG 2.1 AA target?TBC — no documented requirement.
Screen reader usage (ARIA)Radix components usually provide round behavior; unverified.
Keyboard navigationNot documented / unverified.
Contrast checkNot documented.
Internationalization 16 Locales; RTL support for Arabic/Hebrew.Implemented.

NFR-PORT — Compatibility & Localisation

NFR-AUDIT — Auditability

NFR-PRIV — Privacy & Confidentiality

NFR-BACKUP

NFR-MAINT-007 — Testability

← Functional Requirements Register Use Cases and Acceptance Criteria →