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

Pripravljeni popraviti, zgraditi
ali skalirati?

30 minut, z mano osebno. Preberem vaš sistem kot dnevniško datoteko in povem, kaj bi naredil najprej. Brez prezentacij, brez prodajnega lijaka.

Davor Majc, ustanovitelj, Numen

What you get on call
→ enostranska diagnostika
→ 2–3 obliki rešitve, razvrščeni po učinku
→ okvirni strošek + časovnica za vsako
→ da/ne — ali sem prava izbira
+386 40 828 474 · Blejska Dobrava, SI