Home/ Work/GoldVault
Lead dev · 2020 · Fintech

GoldVault

A mobile-first gold investment platform where users hold and trade Universal Gold Grams (UGG) alongside Euro balances — backed by a JWT-secured ASP.NET Core admin system.

Role Lead Developer
Year 2020
Platform Android · admin back-office
Domain Fintech · Gold Investment
Stack Kotlin · ASP.NET Core · Angular · MySQL
Transaction types
4 flows
EUR transfer, cash, buy/sell UGG
Gold unit
UGG
Universal Gold Grams
Repos shipped
3
Android · API · admin panel
Stack breadth
Mobile + Backoffice
Kotlin Android · ASP.NET Core + Angular admin

Overview

GoldVault was an early-career fintech experiment — a full-stack gold investment platform built in 2020 across three codebases: a native Android app, an ASP.NET Core REST API, and an Angular admin panel. The ambition was real: users would hold and trade physical-gold-backed units (UGG — Universal Gold Grams) alongside Euro balances, all managed through a PIN-secured mobile interface.

The gold accounting model required building from first principles. A UGG is not a cryptocurrency and not a stock — it needed its own bidirectional conversion flow (EUR → UGG and UGG → EUR), storage fee tracking, and a back-office that let admins manage the vault inventory and approve customer profiles. The Android MVVM architecture, the JWT-secured API, and the Angular admin were built independently and wired together through a shared MySQL schema.

As a 2020 solo project it predates many of the architectural shortcuts available today. Clean MVVM with LiveData, a CQRS-flavoured .NET backend with MediatR and FluentValidation, and a role-guarded Angular SPA — all written without a senior to review the PRs.

Architecture

~/goldvault/architecture/system-map.svg
01 — CLIENT SURFACES4,227,250 €122,541 UGGBuyUGGSellUGGHomeSearchTxnAndroid · KotlinEnter PIN123456789PIN authREST APIASP.NET Core 3.1 · JWT + refresh tokensMediatR · FluentValidation · AutoMapperNSwag · Serilog · role-based authevery client authenticates hereGoldVault AdminCustomersUGG VaultGold BarsAlarmsMessagesCustomer listAngular 10 · Bootstrap02 — DATA LAYERMySQLusers · balances · txnsEF CorePomelo · soft deleteASP.NET Identityroles · refresh tokensUGG LedgerEUR ⇌ gold gramsSerilogstructured loggingKotlin 1.3.61 · minSdk 19 · MVVM + Navigation Component · OTP PIN view · Angular 10 + ngx-datatable03 — RUNTIME

Reading the diagram: The Android app (MVVM, bottom-nav with Home / Search / Gold & Money / Start Transaction) communicates with the ASP.NET Core 3.1 API. A PIN-protected activation flow gates first-time access. The API owns JWT auth with refresh-token rotation, validates requests via FluentValidation, and dispatches commands through MediatR. MySQL via Pomelo EF Core holds users, EUR balances, and the UGG gold-gram ledger. The Angular 10 admin panel manages customer KYC data, UGG vault inventory, gold bar storage, and messaging.

03 What I delivered · challenges solved

Six things shipped,
three hard ones solved.

Key contributions

  • Designed and built the native Android app — MVVM architecture with Navigation Component, PIN-protected login, and bottom-navigation for four core screens.
  • Defined the gold accounting model: dual-balance portfolio tracking Euro Cash on Hand and Universal Gold Grams (UGG) as the platform's native investment unit.
  • Implemented four transaction flows on mobile: Euro transfer, cash transfer, EUR → UGG purchase, and UGG → EUR liquidation.
  • Built the ASP.NET Core 3.1 REST API — JWT authentication with refresh tokens, role-based access via ASP.NET Identity, and Swagger via NSwag.
  • Delivered the Angular 10 back-office admin panel — customer management with legal info and transaction history, UGG vault admin, gold bar storage, alarms, and messaging.
  • Connected everything to a shared MySQL database via Pomelo EF Core with soft-delete audit tracking and Serilog structured logging.

Challenges solved

  • Modelling a custom gold unit (UGG) that behaves as a tradeable financial instrument — requiring bidirectional conversion flows and separate ledger accounting from EUR balances.
  • Building a complete three-tier system solo in 2020 — mobile app, API, and admin panel — under early-career constraints, while maintaining clean MVVM and CQRS patterns throughout.
  • Securing the back-office with JWT refresh token rotation, role guards, and HTTP interceptors without an existing in-house auth template to reference.
Gold as a digital asset in 2020 meant building the accounting model from scratch. UGG wasn't a metaphor — it was a ledger entry that had to survive conversion, storage fees, and admin overrides.
Davor Majc, Lead Developer / GoldVault
04 Tech stack

What's under the hood.

KotlinASP.NET Core 3.1AngularTypeScriptMySQLEntity Framework CoreJWTMediatRAutoMapperNSwagSerilogBootstrap
Let's talk

Ready to fix, build,
or scale?

30 minutes, with me personally. I'll read your system like a log file and tell you what I'd do first. No pitch deck, no sales funnel.

Davor Majc, founder, Numen

What you get on call
→ a one-page diagnosis
→ 2–3 fix shapes, ranked by leverage
→ rough cost + timeline for each
→ yes/no — am I the right fit
+386 40 828 474 · Blejska Dobrava, SI