01
Custom applications
Backend and frontend development for applications with complex business rules, integrations, and background processing.
Work
I am Lukas, a senior full-stack developer based in Lithuania. I have been building software professionally since 2016, working across backend, frontend, integrations, data, deployment and monitoring.
My strongest work is on custom projects with complex business rules, existing applications that need careful changes, and problems that cross several parts of the stack.
What I work on
01
Backend and frontend development for applications with complex business rules, integrations, and background processing.
02
Taking over unfamiliar code, fixing live issues, and planning repairs, replacements, or gradual migrations without disrupting users.
03
Databases, queues, Docker, CI/CD, logging, monitoring, error reporting, and backups as part of delivering reliable software.
Most of my experience is in fintech and lending, e-commerce, and retail. I have also worked on logistics, bookings, invoicing, email delivery, mobile applications, and real-time systems.
How I work
I usually start with a business problem or goal and work out what should be built. I ask the necessary questions, inspect any existing software, propose an approach, and discuss the trade-offs before carrying the work through implementation, release, and support.
I take responsibility for projects and move them forward without needing much day-to-day direction. In a team, I review code, help shape larger changes, and other developers often bring me difficult bugs or design decisions. When working directly with a client, I often collaborate with the business owner or subject specialist to understand the problem before deciding how to solve it.
Selected work
Client and product names are omitted where the work was confidential or delivered through an agency.
01 / Full-time work · 2019–present
Since joining full-time in 2019, I have worked across two generations of lending software: a modern multi-tenant platform and the older application it is gradually replacing. I started mainly in frontend development, became one of the main contributors to the component library that grew into the modern platform's design system, and designed interfaces for information-heavy loan workflows. I later moved into backend architecture and designed the original extension model used to customize loan processing for individual banks.
I remain heavily involved in the modern platform's development. My recent work includes core loan-processing workflows that coordinate automated background checks and manual review actions that can proceed in parallel, with safe pause, resume, and retry behavior. I also help other developers shape larger features through design discussions, mentoring, and detailed reviews.
At the same time, I have technical ownership of the older lending application after its previous team left. I learned the large PHP codebase from its code, data, limited documentation, and live behavior while continuing to deliver features and fixes requested by the bank. I investigate live issues, coordinate on-premises releases and maintenance windows, and work directly with company leadership and the banking client around priorities and rollouts.
My largest recent responsibility has been preparing both applications for a banking client's move to a new core-banking system. I placed the new integration work in the modern platform while keeping the older application's existing workflows operational, then took over a customer-data migration involving millions of records. Testing changes is slow: restoring the legacy database can take most of a day, and a full migration run takes several hours. Because a problem discovered late could consume an entire testing cycle, I replaced a direct update script with a staged process that can plan, validate, report, execute, stop, and resume safely. Three full trial migrations against restored bank data each completed in roughly three hours, with stop-and-resume behavior verified.
Many bank users work on screens around 1366 pixels wide while handling large amounts of financial and customer information. I designed distinct forms, page layouts, tabs, and reusable patterns in Figma, implemented part of them, and reviewed other developers' work against those designs.
The product processor separates shared loan-processing behavior from the calculations, policies, integrations, and process steps that vary by bank and product. This architecture remains central several years later and now supports many partner and product configurations.
Loan-review definitions can change without rewriting applications already in progress. Existing applications retain the review version with which they started, while new definitions can be versioned or retired. Reviews can include product-specific information, automated checks, manual decisions, and additional steps when a policy or partner rule requires human intervention.
The newer background-check and loan-rejection workflows preserve their history, can pause or retry without losing their place, and allow automated checks and manual review actions to proceed in parallel.
For larger changes, I often discuss the design with the developer before and during implementation, then guide the work through review. I look at maintainability, readability, separation of responsibilities, partial failures, transaction boundaries, tenant isolation, permissions, safe retries, and whether problems will be diagnosable later.
My work spans complete loan products, takeover and restructuring flows, credit-reference and core-banking integrations, performance and security fixes, and operational support.
Before the core-banking migration, I helped complete and release two large loan products inherited on long-lived branches from the previous team. After the first was released, I integrated its changes into the second branch and resolved conflicts across dozens of files. The second release included a long-running data migration. I added processed-row progress logging and tested possible performance changes, but removed them when their limited benefit did not justify the added release risk. I tested the migration in UAT, coordinated the production window, and stayed through stabilization. Both releases completed successfully, and the experience informed how I approached the later core-banking migration.
I deploy changes to several on-premises UAT environments and production, coordinate maintenance windows with company leadership and the bank, and have documented a branch and release process for keeping bank-approved changes separate from combined testing branches.
The older application keeps its existing loan workflows while the modern platform handles communication with the new core-banking system. This avoids duplicating new integration logic inside an application that is gradually being replaced.
Testing this migration is unusually slow. Restoring a representative copy of the legacy database can take most of a day and often runs overnight, while each migration run takes several hours. With limited time between the bank's trial migrations, one late failure could put the next deadline at risk. Because the feedback loop is so slow, I had to rely on earlier experience to anticipate failure modes rather than discover them through repeated full runs. The planning phase exposes proposed changes and potential data problems before execution, while resumability allows an interrupted run to continue instead of starting again after another full restore.
I defined the rules the migration must never break, how failures should be handled, what must be recorded for auditing, and the limits it must operate within. I then tested and refined the implementation against restored, representative data.
Relevant work
02 / Contract
After its previous developer became unavailable, I took over a retail platform used by more than 20 Norwegian shops. With no technical handover, I had to reconstruct earlier decisions while fixing live issues and continuing feature development.
When an accidental user action removed the recorded locations of stored tire sets, I wrote a dedicated recovery script using the request and audit logs I had introduced, together with timestamps, vehicle registrations, movement history, and tire attributes. It reconstructed nearly every location, avoiding a large manual recovery effort and the risk of shop staff being unable to find customers' stored tires when they arrived.
For Norway's SAF-T cash-register requirements, I led the implementation from the official specification through validation by the authorities and an external specialist. I later moved the fiscal and reporting features into a separate multi-tenant application. For an accounting integration, I worked directly with the client's CEO and accountant to map retail activity into balanced ledger entries, replacing manual entry of every Z report with automatically generated vouchers.
To prepare the system for failures, I compared three high-availability designs across recovery time, possible data loss, failure scenarios, cost, and maintenance. I recommended the managed option because its reliability and lower maintenance justified the higher infrastructure cost, then implemented the selected design with Terraform. During an agreed smoke test while the shops were open, I stopped an application server and forced a database failover without shop users noticing an interruption.
Relevant work
03 / Contract
The email platform I designed and built sends through its own pool of mail servers rather than forwarding messages through an external delivery provider. Its scheduler assigns messages across servers and IP addresses while respecting limits for senders, domains, and destination email providers.
Messages have clear states and can be retried without losing the previous SMTP result or consuming the same sending capacity twice. The platform also manages automated gradual sender warm-up, domain setup, bounce and unsubscribe handling, engagement tracking, administration, and monitoring. I also set up monitoring and centralized logging with Grafana, Prometheus, and Loki, covering mail throughput, queue depth, processing delays, message states, and delivery outcomes.
Relevant work
Additional selected work
E-commerce
A multi-tenant e-commerce platform I co-founded and built with one other developer. It included a tablet-friendly web POS, a live storefront editor where merchants could select sections directly in the preview, and a flexible discount engine. I also built an embedded code editor that compiled React and TypeScript storefront components for immediate use, with live previews and AST-based error reporting – without requiring a deployment.
Mobile · Booking
My own booking product for independent specialists, shaped through interviews with the people it was designed for. I built its calendar from scratch around appointments, working hours, breaks, and blocked time, together with the mobile app, public booking flow, notifications, and subscriptions.
Logistics
A multi-tenant logistics system for orders, vehicles, agreements, routing, and settlements. I combined OSRM road-distance data with a C++ solver built with Google OR-Tools to arrange pickup and delivery points efficiently, then used the result to calculate distances, travel time, and route finances. The system could also generate agreements and invoices from tenant-specific templates and email them to customers.
Business software
An invoicing and inventory system I built for invoices, cash receipts, purchases, write-offs, and reports. A separate Puppeteer service produced live document previews and downloadable PDFs. Inventory was tracked back to its original purchase batches, with document edits applying only the resulting stock difference and preserving a clear history.
Open source
An open-source Laravel package for defining application and admin interfaces in PHP and rendering them through Inertia and React. It provides reusable layouts, navigation, forms, tables, tabs, modals, wizards, and charts, backed by a broad automated test suite. I later used it in my own applications, including the invoicing system.
Real-time software
Two real-time gaming platforms with player balances, chat, and synchronized game state over Socket.IO. I implemented a custom poker game and helped turn original game ideas into working rules and real-time player flows.
Contact
I am always interested in hearing about ambitious products, difficult technical problems, and ways my experience could be useful. I also take on a limited amount of freelance work.