Skip to content

๐Ÿ” Secure Digital Vault Platform - Store and share sensitive data with time-based, expiry-based, and other access policies. Built with Next.js, ASP.NET Core, and PostgreSQL. Perfect for families, partners, and professionals who need conditional data sharing ๐ŸŽฏ

License

Notifications You must be signed in to change notification settings

hasanpeal/Eloomen

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

98 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Eloomen

Eloomen Logo

Next.js .NET PostgreSQL TypeScript

A Secure, Policy-Driven Digital Vault Platform Secure your digital life. Share it on your terms.


๐ŸŽฏ Overview

Eloomen is a production-ready, enterprise-grade digital vault platform that enables secure, relationship-based data sharing with sophisticated time-based and conditional access policies. Built from the ground up with security-first principles, Eloomen solves critical real-world problems around digital estate planning, family data sharing, and conditional information access.

Key Differentiators

  • Policy-Driven Architecture: Sophisticated time-based release policies (immediate, scheduled, expiry-based, manual)
  • Relationship-Based Access Control: Dynamic, configurable groups with granular permissions
  • Multi-Type Data Support: Documents, passwords, crypto wallets, notes, and links โ€” all encrypted
  • Enterprise Security: End-to-end encryption, audit logging, JWT with refresh tokens, device verification
  • Real-Time Notifications: Comprehensive notification system with email and in-app notifications
  • Production-Ready: Automated migrations, CI/CD pipelines, comprehensive error handling

๐Ÿ—๏ธ System Architecture

High-Level Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    Next.js 16 Frontend                      โ”‚
โ”‚  React 19, TypeScript, TailwindCSS, WebCrypto API           โ”‚
โ”‚  - Client-side encryption                                   โ”‚
โ”‚  - JWT token management                                     โ”‚
โ”‚  - Real-time notifications                                  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                        โ”‚ REST API (JWT Auth)
                        โ”‚ HTTPS/TLS
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚              ASP.NET Core 9 Backend API                     โ”‚
โ”‚  - Controllers (API Endpoints)                              โ”‚
โ”‚  - Service Layer (Business Logic)                           โ”‚
โ”‚  - Entity Framework Core (ORM)                              โ”‚
โ”‚  - Policy-based Authorization                               โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
        โ”‚               โ”‚               โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚PostgreSQL  โ”‚  โ”‚  S3 Bucket  โ”‚  โ”‚  SendGrid Email โ”‚
โ”‚(Supabase)  โ”‚  โ”‚  (Storage)  โ”‚  โ”‚  (Notifications)โ”‚
โ”‚            โ”‚  โ”‚             โ”‚  โ”‚                 โ”‚
โ”‚ - 24 Tablesโ”‚  โ”‚ - Documents โ”‚  โ”‚ - Transactionalโ”‚
โ”‚ - Triggers โ”‚  โ”‚ - Signed URLsโ”‚ โ”‚ - Templates    โ”‚
โ”‚ - Functionsโ”‚  โ”‚             โ”‚  โ”‚                 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Detailed Architecture Diagram

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                              CLIENT LAYER                                   โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”      โ”‚
โ”‚  โ”‚   Pages      โ”‚  โ”‚ Components  โ”‚  โ”‚  Contexts    โ”‚  โ”‚  API Client  โ”‚      โ”‚
โ”‚  โ”‚  (Next.js)   โ”‚  โ”‚  (React)    โ”‚  โ”‚  (Auth)      โ”‚  โ”‚  (HTTP)      โ”‚      โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€-โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜      โ”‚
โ”‚         โ”‚                 โ”‚                โ”‚                 โ”‚              โ”‚
โ”‚         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€-โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€--โ”˜              โ”‚
โ”‚                              โ”‚ JWT Auth                                     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                               โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                           CONTROLLER LAYER                                   โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚   Account    โ”‚  โ”‚    Vault     โ”‚  โ”‚  VaultItem   โ”‚  โ”‚ Notification โ”‚   โ”‚
โ”‚  โ”‚  Controller  โ”‚  โ”‚  Controller  โ”‚  โ”‚  Controller  โ”‚  โ”‚  Controller  โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚         โ”‚                  โ”‚                 โ”‚                 โ”‚            โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
          โ”‚                  โ”‚                 โ”‚                 โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                            SERVICE LAYER                                     โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚   Token      โ”‚  โ”‚    Vault      โ”‚  โ”‚  VaultItem    โ”‚  โ”‚ Notification โ”‚ โ”‚
โ”‚  โ”‚   Service    โ”‚  โ”‚   Service     โ”‚  โ”‚   Service     โ”‚  โ”‚   Service     โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚         โ”‚                  โ”‚                 โ”‚                 โ”‚          โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚   Device     โ”‚  โ”‚   Email       โ”‚  โ”‚ Encryption   โ”‚  โ”‚   S3         โ”‚ โ”‚
โ”‚  โ”‚   Service    โ”‚  โ”‚   Service     โ”‚  โ”‚   Service    โ”‚  โ”‚   Service    โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
          โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                         ENTITY FRAMEWORK CORE (ORM)                           โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚                    ApplicationDBContext                                 โ”‚ โ”‚
โ”‚  โ”‚  - DbSet<User>                                                          โ”‚ โ”‚
โ”‚  โ”‚  - DbSet<Vault>                                                         โ”‚ โ”‚
โ”‚  โ”‚  - DbSet<VaultItem>                                                     โ”‚ โ”‚
โ”‚  โ”‚  - DbSet<Notification>                                                  โ”‚ โ”‚
โ”‚  โ”‚  - ... (24 tables)                                                      โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                  โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                           POSTGRESQL DATABASE                                 โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚                        24 Database Tables                                โ”‚ โ”‚
โ”‚  โ”‚  โ€ข Users, Roles, UserRoles, UserClaims, RoleClaims                      โ”‚ โ”‚
โ”‚  โ”‚  โ€ข UserDevices, RefreshTokens, VerificationCodes                         โ”‚ โ”‚
โ”‚  โ”‚  โ€ข Vaults, VaultMembers, VaultInvites, VaultPolicies                   โ”‚ โ”‚
โ”‚  โ”‚  โ€ข VaultItems, VaultItemVisibilities                                   โ”‚ โ”‚
โ”‚  โ”‚  โ€ข VaultDocuments, VaultPasswords, VaultNotes                           โ”‚ โ”‚
โ”‚  โ”‚  โ€ข VaultLinks, VaultCryptoWallets                                      โ”‚ โ”‚
โ”‚  โ”‚  โ€ข VaultLogs, AccountLogs, Notifications                               โ”‚ โ”‚
โ”‚  โ”‚  โ€ข UserLogins, UserTokens                                              โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚                                 โ”‚                                             โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚                    PostgreSQL Triggers & Functions                      โ”‚ โ”‚
โ”‚  โ”‚  โ€ข notify_vault_released() - Auto-notify on vault release              โ”‚ โ”‚
โ”‚  โ”‚  โ€ข vault_release_notification_trigger - Monitors ReleaseStatus changes โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Data Flow Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                         NOTIFICATION FLOW                                    โ”‚
โ”‚                                                                              โ”‚
โ”‚  Event Triggered (Vault Release, Item Edit, Invite, etc.)                  โ”‚
โ”‚         โ”‚                                                                    โ”‚
โ”‚         โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”            โ”‚
โ”‚         โ”‚                                                        โ”‚            โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                                  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚ Service Layer    โ”‚                                  โ”‚ PostgreSQL    โ”‚   โ”‚
โ”‚  โ”‚ (Business Logic) โ”‚                                  โ”‚ Trigger       โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                                  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚         โ”‚                                                        โ”‚            โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                                  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚ Email Service    โ”‚                                  โ”‚ Notifications  โ”‚   โ”‚
โ”‚  โ”‚ (SendGrid)       โ”‚                                  โ”‚ Table         โ”‚   โ”‚
โ”‚  โ”‚                  โ”‚                                  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚  โ”‚ โ€ข Send Email     โ”‚                                           โ”‚            โ”‚
โ”‚  โ”‚ โ€ข HTML Templatesโ”‚                                           โ”‚            โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                                  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚                                                        โ”‚ Notification  โ”‚   โ”‚
โ”‚                                                        โ”‚ Service       โ”‚   โ”‚
โ”‚                                                        โ”‚ (Create/Read) โ”‚   โ”‚
โ”‚                                                        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                                                                 โ”‚            โ”‚
โ”‚                                                        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚                                                        โ”‚ Frontend      โ”‚   โ”‚
โ”‚                                                        โ”‚ (Real-time UI)โ”‚   โ”‚
โ”‚                                                        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Service Layer Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                            SERVICE INTERFACES                                โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚ ITokenServiceโ”‚  โ”‚ IVaultServiceโ”‚  โ”‚IVaultItem     โ”‚  โ”‚INotification โ”‚   โ”‚
โ”‚  โ”‚              โ”‚  โ”‚              โ”‚  โ”‚Service        โ”‚  โ”‚Service       โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚         โ”‚                  โ”‚                 โ”‚                 โ”‚            โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚ TokenService  โ”‚  โ”‚  VaultService  โ”‚  โ”‚VaultItem     โ”‚  โ”‚Notification โ”‚ โ”‚
โ”‚  โ”‚              โ”‚  โ”‚                โ”‚  โ”‚Service       โ”‚  โ”‚Service      โ”‚ โ”‚
โ”‚  โ”‚ โ€ข JWT Gen    โ”‚  โ”‚ โ€ข CRUD Ops     โ”‚  โ”‚ โ€ข CRUD Ops   โ”‚  โ”‚ โ€ข Create     โ”‚ โ”‚
โ”‚  โ”‚ โ€ข Refresh    โ”‚  โ”‚ โ€ข Policy Mgmt  โ”‚  โ”‚ โ€ข Encryption โ”‚  โ”‚ โ€ข Mark Read  โ”‚ โ”‚
โ”‚  โ”‚ โ€ข Validation โ”‚  โ”‚ โ€ข Invites      โ”‚  โ”‚ โ€ข Permissionsโ”‚  โ”‚ โ€ข Delete     โ”‚ โ”‚
โ”‚  โ”‚              โ”‚  โ”‚ โ€ข Members       โ”‚  โ”‚ โ€ข S3 Upload  โ”‚  โ”‚ โ€ข Query      โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚                            โ”‚                  โ”‚                           โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚                    SUPPORTING SERVICES                                 โ”‚ โ”‚
โ”‚  โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”โ”‚ โ”‚
โ”‚  โ”‚  โ”‚ IEmailServiceโ”‚  โ”‚IEncryption  โ”‚  โ”‚  IS3Service  โ”‚  โ”‚IDeviceServiceโ”‚โ”‚ โ”‚
โ”‚  โ”‚  โ”‚              โ”‚  โ”‚Service      โ”‚  โ”‚              โ”‚  โ”‚              โ”‚โ”‚ โ”‚
โ”‚  โ”‚  โ”‚ โ€ข SendGrid   โ”‚  โ”‚ โ€ข AES-256   โ”‚  โ”‚ โ€ข Upload     โ”‚  โ”‚ โ€ข Fingerprintโ”‚โ”‚ โ”‚
โ”‚  โ”‚  โ”‚ โ€ข Templates  โ”‚  โ”‚ โ€ข Encrypt   โ”‚  โ”‚ โ€ข Download   โ”‚  โ”‚ โ€ข Verify     โ”‚โ”‚ โ”‚
โ”‚  โ”‚  โ”‚ โ€ข Notify     โ”‚  โ”‚ โ€ข Decrypt   โ”‚  โ”‚ โ€ข Delete     โ”‚  โ”‚ โ€ข Manage     โ”‚โ”‚ โ”‚
โ”‚  โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Technical Stack Deep Dive

Frontend Stack

  • Framework: Next.js 16.1.1 (App Router, Server Components)
  • Language: TypeScript 5.0+ (strict mode)
  • UI: React 19.2.3, TailwindCSS 4.0
  • State Management: React Context API, Custom hooks
  • Authentication: JWT with automatic token refresh
  • Encryption: WebCrypto API for client-side encryption
  • HTTP Client: Custom API client with retry logic and error handling
  • Notifications: Real-time notification system with polling and badge counts

Backend Stack

  • Framework: ASP.NET Core 9.0
  • ORM: Entity Framework Core 9.0 (Code-First migrations)
  • Database: PostgreSQL 15+ (via Supabase)
  • Authentication: ASP.NET Core Identity + Custom JWT implementation
  • Authorization: Policy-based with role hierarchy (Owner โ†’ Admin โ†’ Member)
  • File Storage: S3 bucket for document storage
  • Email: SendGrid integration for transactional emails
  • API Documentation: Swagger/OpenAPI
  • Notifications: In-app notification system with PostgreSQL triggers

Infrastructure & DevOps

  • Database: Supabase (PostgreSQL + Storage)
  • Object Storage: S3 bucket
  • CI/CD: GitHub Actions (build, test, deploy)
  • Migrations: Automatic EF Core migrations on startup
  • Logging: Structured logging with ILogger
  • Error Handling: Global exception handling, custom error responses
  • Database Triggers: PostgreSQL functions for automated notifications

๐Ÿ” Security Architecture

Authentication & Authorization

Multi-Layer Security Model:

  1. JWT Authentication

    • Short-lived access tokens (15 minutes)
    • Long-lived refresh tokens (stored in HTTP-only cookies)
    • Automatic token rotation on refresh
    • Security stamp validation for token revocation
  2. Device Verification

    • Device fingerprinting for new device detection
    • Email-based device verification codes
    • Device management dashboard
  3. Role-Based Access Control (RBAC)

    • Owner: Full control (create, edit, delete, manage members, transfer ownership)
    • Admin: Manage items and members (cannot delete vault or transfer ownership)
    • Member: View and edit items (permission-based)
  4. Policy-Based Access Control

    • Vault-level policies override member access
    • Time-based release policies
    • Expiry-based access revocation
    • Manual release triggers

Data Encryption

  • At Rest: All sensitive data encrypted before database storage
  • In Transit: HTTPS/TLS for all API communications
  • Client-Side: WebCrypto API for encryption before transmission
  • Secrets: Passwords, crypto keys, and sensitive notes encrypted with AES-256

Audit & Compliance

  • Comprehensive Audit Logging: All vault operations logged (create, update, delete, invite, member changes)
  • Account Activity Logs: User authentication, device changes, profile updates
  • Immutable Logs: Timestamped, user-attributed audit trail
  • Data Retention: Configurable retention policies
  • Change Tracking: Detailed field-level change tracking for vault items

๐Ÿ“Š Database Schema

Complete PostgreSQL Tables (24 Tables)

The application uses 24 PostgreSQL tables organized into the following categories:

Identity & Authentication Tables (7 tables)

  1. Users - Core user accounts with email, username, security stamps
  2. Roles - System roles (Admin, User)
  3. UserRoles - Many-to-many relationship between users and roles
  4. UserClaims - Custom claims for users
  5. RoleClaims - Custom claims for roles
  6. UserLogins - External login providers
  7. UserTokens - External authentication tokens

Device & Session Management (3 tables)

  1. UserDevices - Registered devices with fingerprinting
  2. RefreshTokens - JWT refresh tokens linked to devices
  3. VerificationCodes - Email/device verification codes

Vault Core Tables (4 tables)

  1. Vaults - Main vault entities with owner relationships
  2. VaultMembers - Vault membership with privileges (Owner/Admin/Member)
  3. VaultInvites - Invitation system with tokens and expiration
  4. VaultPolicies - Policy configuration (Immediate/TimeBased/ExpiryBased/ManualRelease)

Vault Items & Content (7 tables)

  1. VaultItems - Base vault item entity (polymorphic)
  2. VaultItemVisibilities - Granular permissions per item per member
  3. VaultDocuments - Document items with S3 object keys
  4. VaultPasswords - Password items (encrypted)
  5. VaultNotes - Note items (encrypted)
  6. VaultLinks - Link/bookmark items
  7. VaultCryptoWallets - Cryptocurrency wallet items (encrypted)

Audit & Notifications (3 tables)

  1. VaultLogs - Comprehensive vault operation audit logs
  2. AccountLogs - User account activity logs
  3. Notifications - In-app notification system

Entity Relationship Diagram

Users (1) โ”€โ”€โ”€โ”€โ”€โ”€< (N) Vaults (Owner)
  โ”‚                    โ”‚
  โ”‚                    โ”œโ”€โ”€< (N) VaultMembers >โ”€โ”€ (N) Users
  โ”‚                    โ”‚
  โ”‚                    โ”œโ”€โ”€< (N) VaultInvites
  โ”‚                    โ”‚
  โ”‚                    โ”œโ”€โ”€< (1) VaultPolicies
  โ”‚                    โ”‚
  โ”‚                    โ””โ”€โ”€< (N) VaultItems
  โ”‚                           โ”‚
  โ”‚                           โ”œโ”€โ”€< (1) VaultDocuments
  โ”‚                           โ”œโ”€โ”€< (1) VaultPasswords
  โ”‚                           โ”œโ”€โ”€< (1) VaultNotes
  โ”‚                           โ”œโ”€โ”€< (1) VaultLinks
  โ”‚                           โ”œโ”€โ”€< (1) VaultCryptoWallets
  โ”‚                           โ”‚
  โ”‚                           โ””โ”€โ”€< (N) VaultItemVisibilities >โ”€โ”€ (N) VaultMembers
  โ”‚
  โ”œโ”€โ”€< (N) UserDevices
  โ”‚      โ””โ”€โ”€< (N) RefreshTokens
  โ”‚
  โ”œโ”€โ”€< (N) VerificationCodes
  โ”œโ”€โ”€< (N) AccountLogs
  โ””โ”€โ”€< (N) Notifications

VaultPolicies โ”€โ”€> PostgreSQL Trigger โ”€โ”€> Notifications (Auto-create on release)

Key Design Decisions

  • Soft Deletes: Vaults and items support 30-day recovery window
  • Cascade Deletes: Proper foreign key constraints with cascade rules
  • Indexing: Optimized indexes on frequently queried fields (userId, vaultId, status, timestamps)
  • Transactions: Critical operations wrapped in database transactions
  • Migration Strategy: Code-first migrations with automatic application
  • Database Triggers: PostgreSQL functions for automated notification creation on vault release
  • Polymorphic Items: Single VaultItems table with one-to-one relationships to specific item types

๐Ÿš€ Key Features & Implementation Highlights

1. Policy Engine

Sophisticated policy system supporting multiple release strategies:

  • Immediate: Instant access upon vault creation
  • TimeBased: Scheduled release at a future date/time
  • ExpiryBased: Access expires after a set date
  • ManualRelease: Requires explicit owner action

Implementation: Policy evaluation runs on every vault access, automatically updating release status based on current time and policy rules. PostgreSQL triggers automatically create notifications when vaults are released.

2. Granular Item Permissions

Each vault item can have different visibility rules per member:

  • View: Read-only access
  • Edit: Full edit capabilities
  • Inherit: Default vault-level permissions

Implementation: VaultItemVisibility junction table enables fine-grained access control without performance overhead. Owners always have Edit permission and are excluded from visibility checks.

3. Invite System

Robust invitation workflow with:

  • Email-based invitations with secure tokens
  • Expiration handling (default 7 days, configurable)
  • Status tracking (Pending โ†’ Sent โ†’ Accepted/Cancelled/Expired)
  • Automatic member creation on acceptance
  • Resend and cancel capabilities
  • Email notifications to vault owner when invites are sent
  • Notifications to both inviter and invitee when invites expire

Security: Tokens hashed with SHA-256 before storage, never stored in plaintext.

4. File Upload & Storage

  • S3 Bucket Integration: Secure document storage with signed URLs
  • Signed URLs: Time-limited download URLs for secure file access
  • Metadata Tracking: File size, MIME type, original filename
  • Cleanup: Automatic file deletion on item/vault deletion

5. Notification System

Comprehensive notification system with multiple channels:

  • In-App Notifications: Real-time notification center with unread badges
  • Email Notifications: SendGrid integration for critical events
  • PostgreSQL Triggers: Automated notification creation on vault release
  • Notification Types:
    • Vault released
    • Vault policy changed
    • Vault deleted
    • Vault item edited/deleted (to owner)
    • Invite sent/accepted/expired
    • Password changed
    • Account deleted

Implementation: Notifications are created both programmatically in services and automatically via database triggers for vault release events.

6. Email Notification System

Comprehensive email notification system covering:

  • Account Events: Email verification, password changes, account deletion
  • Vault Events: Vault released, policy changed, vault deleted
  • Item Events: Item edited/deleted by other members (notifies owner)
  • Invite Events: Invite sent, accepted, expired
  • Security Events: Device verification, password reset

Implementation: SendGrid service with HTML email templates, dark mode styling, and professional branding.

7. Audit Logging

Comprehensive audit trail:

  • VaultLogs: All vault operations (create, update, delete, invite, member changes)
  • AccountLogs: User authentication, device changes, profile updates
  • Change Tracking: Field-level change tracking for vault items (title, description, permissions, etc.)
  • Immutable Logs: Timestamped, user-attributed audit trail

8. Error Handling & Resilience

  • Custom Error Classes: SessionExpiredError for graceful auth failures
  • Retry Logic: Automatic token refresh on 401 responses
  • User-Friendly Messages: Transformed technical errors into actionable user feedback
  • Logging: Comprehensive error logging with context for debugging

๐Ÿงช Development & Testing

Code Quality

  • TypeScript: Strict mode enabled, full type safety
  • ESLint: Next.js recommended rules
  • Code Organization: Feature-based folder structure
  • Separation of Concerns: Clear boundaries between UI, business logic, and data access

API Design

  • RESTful Principles: Standard HTTP methods and status codes
  • DTO Pattern: Separate request/response DTOs for type safety
  • Validation: Model validation with ASP.NET Core Data Annotations
  • Error Responses: Consistent error response format

Performance Optimizations

  • Database Queries: Eager loading with .Include() to prevent N+1 queries
  • Indexing: Comprehensive indexes on foreign keys, status fields, and timestamps
  • Pagination Ready: Architecture supports pagination (future enhancement)
  • Caching Strategy: Ready for Redis integration (future)
  • Frontend: Code splitting, lazy loading, optimized bundle size
  • Notification Polling: Efficient 30-second polling for new notifications

๐Ÿงช Testing

Test Setup

The project includes comprehensive backend testing using xUnit and Moq for .NET 9.0.

Prerequisites

  • .NET 9 SDK (required for running tests)
  • PostgreSQL (for integration tests, can use in-memory database for unit tests)

Test Project Structure

server/
โ”œโ”€โ”€ Tests/
โ”‚   โ”œโ”€โ”€ Controllers/          # Controller integration tests
โ”‚   โ”‚   โ”œโ”€โ”€ AccountControllerTests.cs
โ”‚   โ”‚   โ”œโ”€โ”€ VaultControllerTests.cs
โ”‚   โ”‚   โ”œโ”€โ”€ VaultItemControllerTests.cs
โ”‚   โ”‚   โ”œโ”€โ”€ NotificationControllerTests.cs
โ”‚   โ”‚   โ”œโ”€โ”€ ContactControllerTests.cs
โ”‚   โ”‚   โ””โ”€โ”€ HealthControllerTests.cs
โ”‚   โ”œโ”€โ”€ Services/             # Service layer unit tests
โ”‚   โ”‚   โ”œโ”€โ”€ TokenServiceTests.cs
โ”‚   โ”‚   โ”œโ”€โ”€ VaultServiceTests.cs
โ”‚   โ”‚   โ”œโ”€โ”€ VaultItemServiceTests.cs
โ”‚   โ”‚   โ”œโ”€โ”€ NotificationServiceTests.cs
โ”‚   โ”‚   โ”œโ”€โ”€ EncryptionServiceTests.cs
โ”‚   โ”‚   โ”œโ”€โ”€ DeviceServiceTests.cs
โ”‚   โ”‚   โ””โ”€โ”€ VaultServiceExtendedTests.cs
โ”‚   โ”œโ”€โ”€ Helpers/              # Test utilities and helpers
โ”‚   โ”‚   โ””โ”€โ”€ TestHelpers.cs
โ”‚   โ””โ”€โ”€ server.Tests.csproj   # Test project file

Running Tests

Run All Tests

cd server
dotnet test Tests/server.Tests.csproj --configuration Release --verbosity normal

Run Tests with Coverage

cd server
dotnet test Tests/server.Tests.csproj \
  --configuration Release \
  --collect:"XPlat Code Coverage" \
  --results-directory:./coverage

Run Specific Test Class

dotnet test Tests/server.Tests.csproj --filter "FullyQualifiedName~AccountControllerTests"

Run Specific Test Method

dotnet test Tests/server.Tests.csproj --filter "FullyQualifiedName~AccountControllerTests.Register_WithValidData_CreatesUser"

Test Results

Current Test Status

โœ… All Tests Passing: 117 tests, 0 failures

Test Coverage by Category

Controller Tests (6 test classes, ~40 tests)

  • โœ… AccountControllerTests - Authentication, registration, profile management
  • โœ… VaultControllerTests - Vault CRUD, member management, invites, policies
  • โœ… VaultItemControllerTests - Item CRUD, permissions, restore operations
  • โœ… NotificationControllerTests - Notification retrieval, marking as read, deletion
  • โœ… ContactControllerTests - Contact form submission
  • โœ… HealthControllerTests - Health check endpoints

Service Tests (8 test classes, ~77 tests)

  • โœ… TokenServiceTests - JWT token generation, validation, refresh tokens
  • โœ… VaultServiceTests - Vault business logic, permissions, CRUD operations
  • โœ… VaultServiceExtendedTests - Advanced vault operations (invites, transfers, policies)
  • โœ… VaultItemServiceTests - Item operations, permissions, encryption
  • โœ… VaultItemServiceExtendedTests - Advanced item operations (restore, permissions)
  • โœ… NotificationServiceTests - Notification creation, retrieval, updates
  • โœ… EncryptionServiceTests - AES-256 encryption/decryption, Unicode support
  • โœ… DeviceServiceTests - Device fingerprinting, verification, management

CI/CD Integration

Tests are automatically run in GitHub Actions on every push and pull request:

# .github/workflows/ci.yml
- name: Run tests
  run: dotnet test server/Tests/server.Tests.csproj --no-restore --configuration Release --verbosity normal

Test Execution in CI

  • Trigger: Push to main, develop, master branches or pull requests
  • Environment: Ubuntu Latest with .NET 9.0.x
  • Test Results: Uploaded as artifacts for review
  • Status: All tests must pass for CI to succeed

Test Architecture

Test Patterns Used

  1. Arrange-Act-Assert (AAA): Standard test structure
  2. Mocking: Moq framework for dependencies (database, external services)
  3. In-Memory Database: EF Core InMemory provider for fast unit tests
  4. Test Fixtures: Reusable test data and setup helpers
  5. Integration Tests: Full controller tests with mocked services

Example Test Structure

[Fact]
public async Task Register_WithValidData_CreatesUser()
{
    // Arrange
    var registerDto = new RegisterDTO { /* ... */ };

    // Act
    var result = await _controller.Register(registerDto);

    // Assert
    Assert.NotNull(result);
    Assert.Equal(200, ((ObjectResult)result).StatusCode);
}

Test Data Management

  • Test Helpers: TestHelpers.cs provides utilities for creating test data
  • Isolated Tests: Each test is independent with its own database context
  • Cleanup: Automatic cleanup after each test execution
  • Test Data: Realistic test scenarios covering edge cases

Coverage Goals

  • โœ… Controllers: 100% endpoint coverage
  • โœ… Services: Core business logic fully tested
  • โœ… Critical Paths: Authentication, authorization, encryption
  • ๐Ÿ”„ Integration Tests: API endpoint integration testing
  • ๐Ÿ”„ E2E Tests: Full user workflow testing (planned)

Running Tests Locally Before Push

Always run tests locally before pushing to ensure CI passes:

# Run all tests
cd server
dotnet test Tests/server.Tests.csproj --configuration Release

# Expected output: All 117 tests passing โœ…

๐Ÿ“ฆ Project Structure

Eloomen/
โ”œโ”€โ”€ client/                          # Next.js frontend
โ”‚   โ”œโ”€โ”€ app/                        # App Router pages
โ”‚   โ”‚   โ”œโ”€โ”€ components/            # Reusable React components
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ContactModal.tsx
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ CreateVaultItemModal.tsx
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ NotificationsModal.tsx
โ”‚   โ”‚   โ”œโ”€โ”€ contexts/              # React Context providers
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ AuthContext.tsx
โ”‚   โ”‚   โ”œโ”€โ”€ lib/                   # Utilities, API client
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ api.ts            # API client with JWT handling
โ”‚   โ”‚   โ”œโ”€โ”€ dashboard/             # Dashboard page
โ”‚   โ”‚   โ”œโ”€โ”€ vaults/[id]/          # Vault detail page
โ”‚   โ”‚   โ”œโ”€โ”€ account/              # Account management
โ”‚   โ”‚   โ”œโ”€โ”€ login/                # Authentication pages
โ”‚   โ”‚   โ””โ”€โ”€ [other routes]/
โ”‚   โ”œโ”€โ”€ public/                    # Static assets
โ”‚   โ”‚   โ””โ”€โ”€ icon.png             # Logo
โ”‚   โ””โ”€โ”€ package.json
โ”‚
โ”œโ”€โ”€ server/                         # ASP.NET Core backend
โ”‚   โ”œโ”€โ”€ Controllers/              # API endpoints
โ”‚   โ”‚   โ”œโ”€โ”€ AccountController.cs
โ”‚   โ”‚   โ”œโ”€โ”€ VaultController.cs
โ”‚   โ”‚   โ”œโ”€โ”€ VaultItemController.cs
โ”‚   โ”‚   โ”œโ”€โ”€ NotificationController.cs
โ”‚   โ”‚   โ””โ”€โ”€ ContactController.cs
โ”‚   โ”œโ”€โ”€ Services/                 # Business logic layer
โ”‚   โ”‚   โ”œโ”€โ”€ TokenService.cs
โ”‚   โ”‚   โ”œโ”€โ”€ VaultService.cs
โ”‚   โ”‚   โ”œโ”€โ”€ VaultItemService.cs
โ”‚   โ”‚   โ”œโ”€โ”€ NotificationService.cs
โ”‚   โ”‚   โ”œโ”€โ”€ EmailService.cs
โ”‚   โ”‚   โ”œโ”€โ”€ EncryptionService.cs
โ”‚   โ”‚   โ”œโ”€โ”€ S3Service.cs
โ”‚   โ”‚   โ””โ”€โ”€ DeviceService.cs
โ”‚   โ”œโ”€โ”€ Interfaces/               # Service contracts
โ”‚   โ”‚   โ”œโ”€โ”€ ITokenService.cs
โ”‚   โ”‚   โ”œโ”€โ”€ IVaultService.cs
โ”‚   โ”‚   โ”œโ”€โ”€ IVaultItemService.cs
โ”‚   โ”‚   โ”œโ”€โ”€ INotificationService.cs
โ”‚   โ”‚   โ”œโ”€โ”€ IEmailService.cs
โ”‚   โ”‚   โ”œโ”€โ”€ IEncryptionService.cs
โ”‚   โ”‚   โ”œโ”€โ”€ IS3Service.cs
โ”‚   โ”‚   โ””โ”€โ”€ IDeviceService.cs
โ”‚   โ”œโ”€โ”€ Models/                   # Entity models (24 tables)
โ”‚   โ”‚   โ”œโ”€โ”€ User.cs
โ”‚   โ”‚   โ”œโ”€โ”€ Vault.cs
โ”‚   โ”‚   โ”œโ”€โ”€ VaultItem.cs
โ”‚   โ”‚   โ”œโ”€โ”€ Notification.cs
โ”‚   โ”‚   โ””โ”€โ”€ [other models]
โ”‚   โ”œโ”€โ”€ Dtos/                     # Data transfer objects
โ”‚   โ”‚   โ”œโ”€โ”€ Account/
โ”‚   โ”‚   โ”œโ”€โ”€ Vault/
โ”‚   โ”‚   โ”œโ”€โ”€ VaultItem/
โ”‚   โ”‚   โ””โ”€โ”€ Notification/
โ”‚   โ”œโ”€โ”€ Data/                     # DbContext, migrations
โ”‚   โ”‚   โ”œโ”€โ”€ ApplicationDBContext.cs
โ”‚   โ”‚   โ””โ”€โ”€ Migrations/
โ”‚   โ”‚       โ””โ”€โ”€ [migration files including triggers]
โ”‚   โ””โ”€โ”€ Program.cs                # Application startup
โ”‚
โ””โ”€โ”€ README.md

๐Ÿš€ Getting Started

Prerequisites

  • Node.js 20+ and npm
  • .NET 9 SDK
  • PostgreSQL 15+ (or Supabase account)
  • AWS S3 bucket (for file storage)
  • SendGrid account (for emails)

Environment Setup

  1. Backend Configuration (server/appsettings.json):

    {
      "ConnectionStrings": {
        "Default": "PostgreSQL connection string"
      },
      "Jwt": {
        "Issuer": "Eloomen",
        "Audience": "EloomenUsers",
        "SigningKey": "your-secret-key"
      },
      "S3": {
        "Endpoint": "your-s3-endpoint",
        "AccessKey": "your-access-key",
        "SecretKey": "your-secret-key",
        "BucketName": "your-bucket"
      },
      "SendGrid": {
        "ApiKey": "your-sendgrid-api-key",
        "FromEmail": "noreply@eloomen.com",
        "FromName": "Eloomen"
      },
      "App": {
        "BaseUrl": "http://localhost:3000"
      }
    }
  2. Frontend Configuration (.env.local):

    NEXT_PUBLIC_API_URL=http://localhost:5000/api
    

Running Locally

Run both server and client separately in different terminals:

# Backend
cd server
dotnet restore
dotnet watch run

# Frontend (new terminal)
cd client
npm install
npm run dev

๐Ÿณ Docker Setup

The project includes a complete Docker setup with hot reload for both frontend and backend, making it easy to run the entire application with a single command.

Prerequisites

  • Docker and Docker Compose installed
  • .env file created in the root directory (see setup below)

Quick Start

  1. Create a .env file in the root directory of the project.

    Option A: Copy from appsettings.development.json

    If you already have server/appsettings.development.json configured, you can create the .env file by converting the JSON structure to environment variables. Use double underscores (__) for nested configuration keys.

    Option B: Create manually

    The .env file should contain all environment variables matching the structure of server/appsettings.development.json. Use double underscores (__) for nested configuration keys.

    Example .env file:

    # Database Connection String
    ConnectionStrings__Default=User Id=postgres.xxx;Password=xxx;Server=xxx;Port=5432;Database=postgres
    
    # JWT Configuration
    Jwt__Issuer=http://localhost:3000
    Jwt__Audience=http://localhost:3001
    Jwt__SigningKey=your-secret-signing-key-here
    Jwt__AccessTokenMinutes=15
    Jwt__RefreshTokenDays=30
    
    # SendGrid Configuration
    SendGrid__ApiKey=SG.xxx
    SendGrid__FromEmail=support@eloomen.com
    SendGrid__FromName=Eloomen
    SendGrid__AdminEmail=your-admin-email@example.com
    
    # App Configuration
    App__BaseUrl=http://localhost:3001
    App__EmailVerificationPath=/verify-email
    App__DeviceVerificationPath=/verify-device
    App__PasswordResetPath=/reset-password
    App__VerificationCodeExpiration__EmailVerificationMinutes=1440
    App__VerificationCodeExpiration__DeviceVerificationMinutes=60
    App__VerificationCodeExpiration__PasswordResetMinutes=60
    
    # S3 / Cloudflare R2 Configuration
    S3__BucketName=eloomen-dev
    S3__BaseUrl=https://xxx.r2.cloudflarestorage.com
    S3__Endpoint=https://xxx.r2.cloudflarestorage.com
    S3__AccessKeyId=xxx
    S3__SecretAccessKey=xxx
    
    # Frontend Configuration
    NEXT_PUBLIC_API_URL=http://localhost:3000/api

    Important Notes:

    • The .env file is already in .gitignore and will not be committed to the repository
    • Variable names use __ (double underscore) for nested configuration (e.g., ConnectionStrings__Default, Jwt__Issuer)
    • Copy values from server/appsettings.development.json and convert the JSON structure to environment variable format
    • For nested objects, use __ to separate levels (e.g., App__VerificationCodeExpiration__EmailVerificationMinutes)
  2. Start all services with Docker Compose:

    docker-compose up

    This will:

    • Build and start both frontend and backend services
    • Enable hot reload for both services (changes are reflected immediately)
    • Expose frontend on http://localhost:3001
    • Expose backend on http://localhost:3000
    • Automatically run database migrations on backend startup
    • Load all environment variables from the .env file

Services

Backend (ASP.NET Core)

  • Port: 3000
  • Hot Reload: Enabled via dotnet watch
  • Environment: Development
  • Database: Automatically runs migrations on startup
  • Swagger: Available at http://localhost:3000/swagger

Frontend (Next.js)

Docker Commands

# Start services
docker-compose up

# Start in detached mode (background)
docker-compose up -d

# Stop services
docker-compose down

# Rebuild after dependency changes
docker-compose build
docker-compose up

# View logs
docker-compose logs -f

# View logs for specific service
docker-compose logs -f backend
docker-compose logs -f frontend

Hot Reload

Both services support hot reload out of the box:

  • Backend: Changes to .cs files automatically trigger dotnet watch to rebuild and restart
  • Frontend: Changes to .tsx, .ts, and .css files are automatically reflected in the browser

Source code is mounted as volumes, so you can edit files directly and see changes immediately.

Environment Variables

All environment variables are loaded from the .env file in the root directory. The docker-compose.yml uses env_file: - .env to automatically load all variables into both services.

Key Points:

  • The .env file must be created in the root directory (same level as docker-compose.yml)
  • Variable names must match the structure of appsettings.development.json using __ for nesting
  • The .env file is already in .gitignore and will not be committed to the repository
  • Both backend and frontend services read from the same .env file
  • Environment variables override appsettings.development.json when set

Converting from appsettings.development.json to .env:

JSON Structure Environment Variable
ConnectionStrings.Default ConnectionStrings__Default
Jwt.Issuer Jwt__Issuer
App.VerificationCodeExpiration.EmailVerificationMinutes App__VerificationCodeExpiration__EmailVerificationMinutes

Quick Reference:

  • Replace dots (.) with double underscores (__)
  • Keep the same structure and nesting
  • All string values should be unquoted
  • Copy exact values from appsettings.development.json

Troubleshooting

Services won't start

  • Ensure Docker and Docker Compose are installed and running
  • Check that all required environment variables are set in .env
  • Verify ports 3000 and 3001 are not already in use

Hot reload not working

  • Ensure source code volumes are properly mounted (check docker-compose.yml)
  • Try rebuilding containers: docker-compose build --no-cache

Database connection issues

  • Verify ConnectionStrings__Default in .env is correct
  • Check that your database is accessible from Docker containers
  • For local PostgreSQL, use host.docker.internal instead of localhost
  • Ensure the connection string format matches: User Id=xxx;Password=xxx;Server=xxx;Port=5432;Database=postgres

Frontend can't connect to backend

  • Verify NEXT_PUBLIC_API_URL in .env matches backend URL
  • Check that both containers are on the same Docker network
  • Ensure backend is running and accessible on port 3000

๐Ÿ”„ CI/CD Pipeline

GitHub Actions Workflow:

  1. Backend Tests: Run 117 unit and integration tests
    • Controller tests (Account, Vault, VaultItem, Notification, Contact, Health)
    • Service tests (Token, Vault, VaultItem, Notification, Encryption, Device)
    • Test results uploaded as artifacts
  2. Frontend Build & Lint: Build Next.js app and run ESLint
  3. Build: Compile .NET backend, build Next.js frontend
  4. Migrations: Automatic database migrations on startup (Railway)
  5. Deploy: Automated deployment via Railway and Vercel (connected via GitHub)

๐Ÿ“ˆ Performance Metrics

  • API Response Time: < 200ms (p95) for standard operations
  • Database Queries: Optimized with proper indexing
  • Frontend Bundle: Code-split, lazy-loaded components
  • File Upload: Streaming uploads for large files
  • Notification Polling: 30-second intervals for efficient updates

๐Ÿ”ฎ Future Enhancements

Planned Features

  • Mobile Apps: Native iOS and Android applications
  • Hardware Key Support: FIDO2/WebAuthn integration
  • Encrypted Search: Search over encrypted data
  • Enterprise Plans: Team management, SSO, advanced policies
  • Advanced Analytics: Usage dashboards, access reports
  • Real-time Updates: WebSocket support for live notifications

Technical Debt & Improvements

  • Unit test coverage (backend services) - โœ… 117 tests implemented
  • Integration tests (API endpoints) - โœ… Controller tests implemented
  • E2E tests (Playwright/Cypress)
  • Performance monitoring (Application Insights)
  • Rate limiting (API throttling)
  • Caching layer (Redis)
  • WebSocket for real-time notifications

๐Ÿค Contributing

This is a personal project showcasing full-stack development capabilities. Key areas of focus:

  • Security: Industry-standard encryption and authentication
  • Scalability: Architecture designed for growth
  • Maintainability: Clean code, clear documentation
  • User Experience: Intuitive UI, responsive design

๐Ÿ“„ License

Proprietary - All rights reserved


๐Ÿ‘จโ€๐Ÿ’ป Engineering Highlights

Technical Achievements

โœ… Full-Stack Development: End-to-end implementation from database to UI
โœ… Security-First Design: Multi-layer security with encryption, RBAC, and audit logging
โœ… Scalable Architecture: Microservices-ready, cloud-native design
โœ… Modern Tech Stack: Latest versions of Next.js, .NET, React, TypeScript
โœ… Production Practices: CI/CD, automated migrations, error handling, logging
โœ… Complex Business Logic: Policy engine, time-based access, granular permissions
โœ… API Design: RESTful, well-documented, type-safe
โœ… Database Design: Normalized schema, proper relationships, migrations, triggers
โœ… Notification System: Comprehensive in-app and email notifications
โœ… Change Tracking: Detailed field-level change tracking for audit trails
โœ… Test Coverage: 117 comprehensive unit and integration tests

Skills Demonstrated

  • Backend: ASP.NET Core, Entity Framework Core, PostgreSQL, RESTful APIs
  • Frontend: Next.js, React, TypeScript, TailwindCSS, State Management
  • Security: JWT, Encryption, RBAC, Audit Logging, Device Verification
  • DevOps: GitHub Actions, Docker, Database Migrations
  • Architecture: Clean Architecture, DTO Pattern, Service Layer Pattern
  • Database: PostgreSQL triggers, functions, complex relationships
  • Problem Solving: Complex policy engine, granular permissions, time-based access
  • Integration: SendGrid, S3, Supabase

Built with โค๏ธ using Next.js, ASP.NET Core, and PostgreSQL

Report Bug ยท Request Feature

About

๐Ÿ” Secure Digital Vault Platform - Store and share sensitive data with time-based, expiry-based, and other access policies. Built with Next.js, ASP.NET Core, and PostgreSQL. Perfect for families, partners, and professionals who need conditional data sharing ๐ŸŽฏ

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages