RemAInders

Flexibility and extensibility are key to integrating new features into digital ecosystem. For example, automatically reminding your colleagues to attend meeting happening this afternoon via an AI.

What Can It Do

Integrate into different parts of the ecosystem — like chatbots, apps, or web services.

Access your reminders anywhere, anytime.

Github

Core Frameworks

  • Dotnet Core icon
  • Postgres icon
  • Ef Core icon
  • Jwt icon
  • Rest icon

and more...

Features

Secured Access

- Utilizes ASP.NET Core Identity to keep track of current users.

- Employs Password authentication for simplified login process.

- Uses encrypted Jwt tokens for secured transactions and access to database.

Seamless AI Integration

- Secure JWT authentication (persistent tokens) enables seamless integration with external services, including AI, for reminder modification.

- Designed to support features like automatic task prioritization

- Effortless integration with scheduling tools or AI agents for managing meeting reminders for attendees.

first image
second image

Data Validation

- Validation is performed before modifying data.

- The ModelState filter detects malformed data and invalid input fields.

- Always return detailed response to simplify debugging process.

Implementations

Filters - Model State

CreateReminderRequestDto.cs
1[DefaultValue("My Reminder Title")] 2[Required(ErrorMessage = "{0} is required.")] 3[MaxLength(50, ErrorMessage = "The title must not excess 50 characters long.")] 4public required string Title { get; set; } 5 6[DefaultValue("Describe your reminder")] 7[MaxLength(100, ErrorMessage = "{0} must not exceed {1} characters long.")] 8public string Description { get; set; } 9 10[CustomValidation(typeof(DueDateValidator), nameof(DueDateValidator.ValidateFutureDate))] 11[DefaultValue("2025-04-05")] 12public DateOnly? DueDate { get; set; }

Handles input format and JSON exceptions with short-circuiting before requests reach the controllers.

Middlewares

GlobalExceptionHandlingMiddleware.cs
1catch (SqlException ex) 2{ 3 logger.LogError("SQL error occurred: {Exception}", ex.Message); 4 await WriteErrorResponseAsync( 5 context, 6 StatusCodes.Status500InternalServerError, 7 "Database offline. Please try again later." 8 ); 9} 10catch (DbUpdateException ex) 11{ 12 logger.LogError("Error update database: {Exception}", ex.Message); 13 await WriteErrorResponseAsync( 14 context, 15 StatusCodes.Status500InternalServerError, 16 "Unable to update Database. Please try again later." 17 ); 18}

Global Exception Handling

- Handles exception globally (even within controllers) - Reduced nested try blocks.

- Returns relevant message to user when exceptions are triggered.

Program.cs
1builder.Services.AddCors(options => 2{ 3 options.AddPolicy( 4 "DefaultCorsPolicy", 5 builder => 6 { 7 builder 8 .WithOrigins(ALLOWED_CORS_ORIGINS) 9 .AllowAnyMethod() 10 .AllowAnyHeader() 11 .AllowCredentials(); 12 } 13 ); 14}); 15 16WebApplication app = builder.Build(); 17app.UseCors("DefaultCorsPolicy"); 18 19app.UseAuthentication(); 20app.UseAuthorization();

Access Control and Security Policies

- Configured CORS to manage cross-origin requests, enabling secure frontend integration.

- Authentication and Authorization.

- Implemented rate limiting as a safety precaution.

.NET Documentations
Default image placeholder

Request Routing & Config.

- UseHttpsRedirection - redirects http to https connection for more security.

- MapControllers routes incoming requests to the appropriate controller actions, enabling easy extension with new features.

Github

© 2025 Zi Shen Chan. All Rights Reserved.