← Back to projects
Case study 004 · Personal / security R&D project

Password manager

Keep credentials in one place, with secrets encrypted before storage and two-factor authentication.

ContextPersonal / security R&D project
TechnologiesFastAPI · Vue 3 · TypeScript · MongoDB · AES-256-GCM
CodeRead access on request
SecureVault dashboard — security indicators and vault alerts
SecureVault dashboard — security indicators and vault alerts
01 — Problem

Centralising credentials and controlling access

SecureVault centralises credentials and encrypts secrets on the server using AES-256-GCM before storage. Authentication combines a password hashed with Argon2id and a TOTP second factor. The application includes a password generator, a security dashboard and an audit trail of sensitive actions.

02 — Constraints

Accounting for key compromise scenarios

The project considers database leaks, repeated login attempts and token reuse. Protecting stored secrets also depends on protecting the master key, which is managed on the server.

03 — Approach

Encrypting secrets and controlling access

Front-endView, enter and search credentials without exposing the master key to the browser.
Back-endEncrypt secrets on the server before storage and control access.
DatabaseStore secrets in encrypted form.
  • AES-256-GCM envelope encryption, versioned master key, never exposed to the client
  • Strong authentication: Argon2id + TOTP 2FA, revocable sessions and devices
  • Advanced generator, instant search and a security dashboard
  • Rate-limiting, anti-brute-force and an audit trail of sensitive actions
The vault: encrypted entries, search, favourites and categories
The vault: encrypted entries, search, favourites and categories
Editing a credential with a built-in password generator
Editing a credential with a built-in password generator
04 — Result

Tested security controls

Tests and configuration cover encrypted storage, login limits and token handling. They check these mechanisms without providing a blanket guarantee against compromise.

  • A test checks that the stored encrypted value does not contain the plaintext secret
  • Login limited to 5 attempts per minute; account locked for 15 minutes after 5 failures
  • Tokens rotated on every refresh, reuse detected; tampered tokens rejected
  • 88 automated tests (69 on the API, 12 front-end unit tests, 7 end-to-end journeys), 80% minimum coverage enforced in CI
Generator: measured entropy, length and character sets
Generator: measured entropy, length and character sets
Sign-in screen — password and two-factor authentication
Sign-in screen — password and two-factor authentication
Responsive vault, accessible anywhere
Responsive vault, accessible anywhere
Source access

On request, I can provide read-only repository access or walk you through the architecture, code and technical decisions behind this project.

Request repository access
Next project — 001Vehicle Fleet Management →
Contact

Building something new or improving an existing application?

Let’s talk about your needs, constraints and next steps.

Let’s work together
© 2026 Hamed Bouare — All rights reservedAvailable for new projectsLinkedIn