RemAInders

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.

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

© 2026 Zi Shen Chan. All Rights Reserved. Last update: 06 Feb 2026