Skip to content
CAI
Software that uses CAICheck a score

thisisnabi/Notify

43.2

Weak · 21 September 2026

718

lines of production code

C#

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Notify is a .NET 8-based notification service that manages the delivery of email and SMS messages through a modular, multi-provider architecture. It leverages RabbitMQ and MassTransit for reliable, asynchronous message processing via an application inbox, while providing REST endpoints to trigger notifications and track their status in MongoDB.

Features

Add application inbox for reliable message processing

The Notify.Common module now includes an application inbox system to ensure reliable message processing. This adds an InboxService, a background service (InboxProcessBackgroundService) that polls for unprocessed messages, and an InboxConsumer that checks for duplicates before adding messages to the inbox. The inbox is backed by a MongoDB context (InboxDbContext) and stores message details for later processing via MediatR.

src/Notify/Common · high confidence

Added message definitions for email and SMS notifications

The Notify module now includes message definitions for sending emails and SMS. Specifically, the system introduces the SendEmailMessage record, which carries the recipient's email address, subject, and body, and the SendSmsMessage record, which carries the mobile number and message content. These records serve as the data contracts for these new notification channels.

Notify · high confidence

Initial project structure and documentation for Notify as a Service

The repository has been initialized with a complete project structure for 'Notify as a Service', a notification system built on ASP.NET Core and MongoDB. This includes a solution file defining the 'Notify' source project and associated unit, integration, and functional test projects, alongside a .dockerignore file to optimize build contexts. The README has been expanded to document the system's features, including email and SMS notifications, multi-provider support, and technologies like MassTransit and RabbitMQ.

(repo-wide) · high confidence

Initial release of the Notify service

The Notify service is introduced as a new application entry point, establishing the foundational infrastructure for SMS and Email notification features. This includes the configuration of application settings, database and broker connections, and the integration of MediatR, MassTransit, and Carter. The service is configured to support both SMS and Email feature modules, with specific provider configurations for each.

src/Notify · high confidence

Introduce SMS notification feature with multi-provider support

A new SMS feature has been added to the Notify system, enabling the sending and tracking of SMS messages. The implementation includes a REST API endpoint to trigger SMS sends, a background service to poll for status updates, and a service layer that supports multiple SMS providers (ProviderA and ProviderB) with automatic failover. The feature also introduces a new database context and trace model to store SMS delivery status.

src/Notify/Features/Sms · high confidence

Introduce email notification feature with tracking and REST endpoints

A new email notification feature has been added to the Notify module. This includes a SendEmailEndpoint for triggering emails, a GetEmailTraceEndpoint to query email status, and a TrackingCallbackEndpoint to record email opens. The implementation introduces an EmailService for sending emails via SMTP, an EmailDbContext for storing trace data in MongoDB, and supporting types like EmailMessageDto, EmailTrace, and EmailConfiguration. Users can now send emails, track their status, and receive callbacks for open events.

src/Notify/Features/Email · high confidence

Behavioural changes

Add abstract IntegrationMessage base type

Introduces a new abstract record \IntegrationMessage\ in the \Notify.Common.Abstractions\ namespace. This type implements \INotification\ and includes a \MessageId\ property, providing a shared base for integration message types.

Notify.Common · low confidence

Test coverage

Added initial test scaffolding for Notify

Added empty unit, integration, and functional test classes (UnitTest1) in the Notify.UnitTests, Notify.IntegrationTests, and Notify.FunctionalTests projects, establishing the baseline structure for future test coverage.

tests · high confidence

Dependencies

Add .NET 8.0 project files for Notify solution and test suites

The Notify project and its associated test projects (Functional, Integration, and Unit) are introduced with .NET 8.0 as the target framework. The main project references MediatR 12.2.0, Microsoft.EntityFrameworkCore 8.0.6, MongoDB.EntityFrameworkCore 8.0.1, Swashbuckle.AspNetCore 6.4.0, MassTransit 8.2.2, MassTransit.RabbitMQ 8.2.2, and Carter 8.1.0. The test projects adopt xUnit 2.5.3, Microsoft.NET.Test.Sdk 17.8.0, and coverlet.collector 6.0.0.

(dependencies) · medium confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 43 → 43 (+0.3)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 94 → 91 (-3.1)
  • Architecture 69 → 69 (+0.0)
  • Maturity 51 → 51 (+0.0)
  • Readiness 34 → 34 (+0.3)
  • Security 34 → 35 (+1.0)
  • Event-Driven 100 → 100 (+0.0)

Resolved (21)

  • High CVE: System.Text.Json 8.0.0
  • High CVE: System.Text.Json 8.0.0
  • Inconsistent naming for consumers: SMS uses 'SendSmsConsumer' while Email uses 'SendEmailConsumer'.
  • Inconsistent naming for endpoints: SMS uses 'SendSmsEndpoint' while Email uses 'SendEmailEndpoint'.
  • Inconsistent naming for handlers: SMS uses 'SendSmsHandler' while Email uses 'SendEmailHandler'.
  • Inconsistent naming for inbox components: Message uses 'InboxMessage' while DbContext uses 'InboxDbContext'.
  • Inconsistent naming for inbox services: One is 'InboxService' while the other is 'InboxProcessBackgroundService'.
  • Inconsistent naming for message classes: SMS uses 'SendSmsMessage' while Email uses 'SendEmailMessage'.
  • Inconsistent naming for request DTOs: SMS uses 'SendSmsRequest' while Email uses 'SendEmailRequest'. The pattern should likely be consistent (e.g., both using 'Request' suffix or both using 'Dto' suffix).
  • Inconsistent naming for services: SMS uses 'SmsService' while Email uses 'EmailService'.
  • Inconsistent naming for status enums: SMS uses 'SmsTraceStatus' while Email uses 'EmailTraceStatus'.
  • Inconsistent naming for trace entities: SMS uses 'SmsTrace' while Email uses 'EmailTrace'.
  • Inconsistent naming for trace retrieval endpoints: SMS uses 'GetSmsTraceEndpoint' while Email uses 'GetEmailTraceEndpoint'.
  • No exposed public API
  • Typo in method name: 'IquiryAsync' is a misspelling of 'InquiryAsync'.
  • Typo in property name: 'RefrenceId' is a misspelling of 'ReferenceId'.
  • early-stage repository — too few commits for a meaningful bus factor
  • early-stage repository — too little history to judge knowledge freshness
  • redundant comment (src/Notify/Features/Sms/Providers/ProviderASmsProvider.cs)
  • redundant comment (src/Notify/Features/Sms/Providers/ProviderASmsProvider.cs)
  • …and 1 more

New (17)

  • Documentation: no contributor guidance (README.md)
  • Documentation: no usage examples (README.md)
  • High CVE: System.Text.Json 8.0.0
  • Inconsistent method naming: The interface/contract method is 'InquiryAsync' (in SmsService), but the provider implementations use 'IquiryAsync' (typo).
  • Inconsistent parameter naming: The method InquiryAsync takes a string parameter named 'referenceId' (correct spelling), but the entity SmsTrace has a property 'RefrenceId' (typo).
  • Spelling error: 'SvcDbContextConfiguraion' is a typo for 'SvcDbContextConfiguration' (missing 't'). Other configuration classes follow standard spelling.
  • Spelling error: Parameter 'requset' is a typo for 'request' in both SendSms and SendEmail REST endpoints.
  • Spelling errors: 'RefrenceId' is a typo for 'ReferenceId'. 'IquiryAsync' is a typo for 'InquiryAsync' (used correctly in SmsService).
  • Test project verifies nothing: Notify.FunctionalTests (tests/Notify.FunctionalTests/UnitTest1.cs)
  • Test project verifies nothing: Notify.IntegrationTests (tests/Notify.IntegrationTests/UnitTest1.cs)
  • Test project verifies nothing: Notify.UnitTests (tests/Notify.UnitTests/UnitTest1.cs)
  • WriteOnlyPrivateField (src/Notify/Features/Sms/Providers/ProviderASmsProvider.cs)
  • WriteOnlyPrivateField (src/Notify/Features/Sms/Providers/ProviderBSmsProvider.cs)
  • redundant comment (src/Notify/Features/Sms/Providers/ProviderASmsProvider.cs)
  • redundant comment (src/Notify/Features/Sms/Services/SmsService.cs)
  • redundant comment (src/Notify/GlobalUsings.cs)
  • redundant comment (src/Notify/GlobalUsings.cs)

API surface

  • Unchanged — 5 HTTP endpoints

Architecture

  • Unchanged — 3 containers · 2 contexts · 1 edges

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

thisisnabi/Notify was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 98727df2c53ca8c4cf922088f520828e65b6dcc9 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-fa71c66cabd8.