Banking backend delivery
Feature work for regulated finance systems, with clear boundaries between commands, handlers, validators, persistence, and APIs.
.NET backend engineer specialising in regulated financial systems, Clean Architecture, and production-grade APIs.
Clean Architecture, CQRS, MediatR, and ASP.NET Core — with a focus on maintainability and long-term system clarity.
Four case studies, all grounded in backend ownership: banking modules, a live store, pricing rules, and AI-assisted operations.
Privacy-preserving infrastructure intelligence for Georgian municipal incidents. Submit a free-text report, get a structured, cited, bilingual brief — without sending anything to a hosted LLM.
async def retrieve_evidence(state: BriefState):
semantic = await pgvector_search(state.query, k=10)
lexical = await pg_fulltext(state.query, k=10)
fused = reciprocal_rank_fusion(semantic, lexical)
state.evidence = fused[:5]
state.confidence = mean(d.score for d in fused[:5])
return stateEnd-to-end e-commerce platform for a Georgian embroidery business. Catalog, custom-order designer, real payments, and a live store at dressfield.ge.
[HttpPost("custom")]
public async Task<IActionResult> CreateCustomOrder(
[FromBody] CustomOrderDto dto)
{
var order = Order.CreateCustom(
dto.ProductId, dto.ArtworkUrl,
dto.Placement, dto.Size);
await _repo.AddAsync(order);
var payment = await _ipay.InitiateAsync(order);
return Ok(new { order.Id, payment.RedirectUrl });
}Full-stack pricing engine that turns stitch-count, color complexity, quantity, and urgency into transparent, profitable quotes — backed by a disciplined domain model with zero external dependencies.
public Quote Calculate(PricingRequest request)
{
var baseCost = request.StitchCount / 1000m
* _rules.PerThousandRate;
var colorFee = request.Colors * _rules.PerColorFee;
var discount = GetVolumeDiscount(request.Quantity);
var urgency = request.IsRush
? _rules.RushMultiplier : 1m;
return new Quote(
baseCost, colorFee, discount, urgency);
}Multi-tenant SaaS that auto-responds to customer DMs across Instagram, Facebook and WhatsApp using AI-generated replies — tenant-isolated, queue-backed, horizontally scalable.
public async Task HandleAsync(InboundMessage msg)
{
var tenant = await _tenants
.GetByPageIdAsync(msg.PageId);
var history = await _conversations
.GetRecentAsync(tenant.Id, msg.SenderId);
var reply = await _ai.GenerateReply(
tenant.Prompt, history, msg.Text);
await _meta.SendAsync(
msg.Channel, msg.SenderId, reply);
}Feature work for regulated finance systems, with clear boundaries between commands, handlers, validators, persistence, and APIs.
A support-to-engineering path that makes data integrity, SQL investigation, and failure modes feel practical instead of abstract.
Frontend, backend, deployment, DNS, SSL, payments, and maintenance for projects that leave localhost and meet real users.
Andersen
Bank of Georgia
The center of gravity is backend and architecture, with enough frontend, cloud, and AI tooling to ship the whole shape.
I build features for enterprise banking systems where Clean Architecture, CQRS, and disciplined testing are everyday practice, not just design principles.
Before that, I worked inside Bank of Georgia diagnosing production incidents in regulated MSSQL environments. That taught me to care about auditability, data shape, and how systems fail under pressure.
On my own time I ship end-to-end: DressField is a live commerce platform, InfraLens explores grounded local AI, and StitchPrice turns messy pricing rules into a testable domain.