GitHub
Tests: 12 • Commercial: 2 • Pet projects: 4 • Legacy: 4
Total: 22

.NET Framework

Test
2021

Project Request

ASP.NET MVC • C# • SQL Server
Idea of the project: if someone wants to order a project development, here you can send an application.
Test
2020

ProjectC

ASP.NET MVC • C# • JSON • jQuery
JSON data processing.
Test
2020

Vehicle Maintenance

ASP.NET MVC • VB.NET • JSON
Idea of the project: if someone wants to order a project development, here you can send an application.
Test
2019

Movie Navigator

ASP.NET MVC • VB.NET
Request information about movie from IMDB.
Test
2018

Customers Exchange

ASP.NET MVC • C# • SQL Server
Automated teller machine emulation.
Test
2016

ATM

ASP.NET MVC • C#
Automated teller machine emulation.

.NET Core

Pet project
2022

Mail Daemon

.NET 8 • Console • JSON
Utility to send mails with customizable settings.

Custom

Code
2024

Buns of code

.NET Framework • C# • JavaScript
Code snippets from my projects, ready to use; tiny tests; code examples.

PHP

Test
2024

Mediabox

PHP 8 • Laravel 11 • Vue.js • Composer • SQLite
Test project for media files management.
Test
2020

Loan Castle

PHP • MariaDB
Jums jāizstrādā kāda lielāk projekta prototips. Izstrādājot prototipu, paturiet prātā, ka projektam attīstoties, šo prototipu varētu vajadzēt pilnveidot.
Test
2020

Content Management

PHP • MySQL • AJAX
Создать простой сайт, где будет страница с формой для авторизации и страница для авторизованного пользователя.
Test
2019

Laravel

PHP • Laravel • Vue.js • Composer • SQLite
Izveidot aplikāciju, kura ik pēc noteikta intervāla (60 sekundes) veic ierakstu datubāzē izmantojot Laravel freimworka iebūvēto funkcionalitāti.
Test
2019

Phone Check

PHP • JavaScript • JSON • Docker
Implement application to detect country by phone number.

Frontend

Test
2021

Forex Wall

npm • React
For this exercise, what we need is a simple live wall for tracking currencies.

Business projects

Commercial
2008

Certification Center

.NET Framework 4.8 • ASP.NET Web Forms • C# • LINQ • SQL Server • ADO.NET • Dapper • JavaScript • jQuery • Git
Transport registration and certification services in Latvia, Customer Relationship Management.
Commercial
2000

Amerikas Auto

.NET Framework 4.8 • ASP.NET Web Forms • C# • LINQ • SQL Server • ADO.NET • Entity Framework • JavaScript • jQuery • Git
Car service and spare parts for all USA and European car models, Customer Relationship Management.

Pet projects

Pet project
2023

Geolocation Assistant

.NET 8 • ASP.NET Core • C# • Web API • JSON • Git
Website for determining geolocation by IP or geotagged photo.
Pet project
2008

Web Dynamics

.NET Framework 4.8 • ASP.NET Web Forms • C# • LINQ • Web API • JSON • SQL Server • Dapper • JavaScript • jQuery • SVG • Git
Software development blog. Articles, books, videos, content management.
Pet project
2000

Blackball

.NET Framework 4.8 • ASP.NET Web Forms • C# • LINQ • Web API • JSON • XML • SQL Server • Dapper • JavaScript • jQuery • SVG • Git
My entertainment portal created from scratch.

Good old times

Legacy
2000

DOS Clock

Turbo Pascal • Assembler
Digital clock.
Legacy
2000

BrainOut

Turbo Pascal • Assembler
Tank battle game.
Legacy
1999

Airport Administrator

Turbo Pascal
Курсовая работа в институте.
Legacy
1998

Atomizer

Turbo Pascal • Assembler
Atomizer, aka «Studio2D». Graphic raster editor. AGI is my own «Atomizer Generated Image» file format.

ATM

2016 Test

Automated teller machine emulation.

ASP.NET MVC C#
Information
Source code
  ATM
  Home
Root / SergeyDrozdovATM.Web / Controllers / ATMController.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web.Mvc; using SergeyDrozdovATM.BLL; using SergeyDrozdovATM.Web.Models; namespace SergeyDrozdovATM.Web.Controllers {     [Authentication]     public class ATMController : Controller     {         private readonly IATMService _atmService;         private const string OperationSuccessMessage = "Operation completed.";         public ATMController()         {             _atmService = new ATMService();         }         public ActionResult Index()         {             return RedirectToAction("Index", "Home");         }         public ActionResult CreateAccount()         {             var model = new CreateAccountViewModel();             var currencies = new List<Currency>();             var accounts = _atmService.GetAccountsList(AuthenticationHelper.GetLoggedUser().Id);             foreach (var currency in _atmService.GetCurrenciesList())             {                 if (accounts.All(x => x.Currency.Id != currency.Id))                     currencies.Add(currency);             }             if (currencies.Count == 0)             {                 model.NoAvailableCurrencies = true;             }             else             {                 model.CurrenciesList = new SelectList(currencies, "Id", "Name");             }             return View(model);         }         [HttpPost]         public ActionResult CreateAccount(CreateAccountViewModel model)         {             if (ModelState.IsValid)             {                 try                 {                     _atmService.CreateAccount(AuthenticationHelper.GetLoggedUser().Id, model.CurrencyId);                     TempData["Message"] = OperationSuccessMessage;                     return RedirectToAction("Index", "Home");                 }                 catch (Exception ex)                 {                     TempData["MessageType"] = "error";                     TempData["Message"] = ex.Message;                     return RedirectToAction("Index", "Home");                 }             }             return View();         }         public ActionResult Balance()         {             var model = new BalanceViewModel();             var userAccounts = _atmService.GetAccountsList(AuthenticationHelper.GetLoggedUser().Id).ToList();             if (userAccounts.Count == 0)             {                 model.NoAccounts = true;             }             else             {                 model.AccountsList = userAccounts;             }             return View(model);         }         public ActionResult Deposit()         {             var model = new CashTransferViewModel();             var userAccounts = _atmService.GetAccountsList(AuthenticationHelper.GetLoggedUser().Id).ToList();             if (userAccounts.Count == 0)             {                 model.NoAccounts = true;             }             else             {                 var accounts = new List<Account>();                 foreach (var accountInfo in userAccounts)                 {                     accounts.Add(accountInfo);                 }                 model.AccountsList = new SelectList(accounts, "Id", "Currency.Name");             }             return View(model);         }         [HttpPost]         public ActionResult Deposit(CashTransferViewModel model)         {             if (ModelState.IsValid)             {                 try                 {                     var accountInfo = _atmService.GetAccountById(model.AccountId);                     _atmService.Deposit(accountInfo, model.CashAmount);                 }                 catch (Exception ex)                 {                     TempData["MessageType"] = "error";                     TempData["Message"] = ex.Message;                     return RedirectToAction("Index", "Home");                 }                 TempData["Message"] = OperationSuccessMessage;                 return RedirectToAction("Index", "Home");             }             return View();         }         public ActionResult Withdraw()         {             var model = new CashTransferViewModel();             var userAccounts = _atmService.GetAccountsList(AuthenticationHelper.GetLoggedUser().Id).ToList();             if (userAccounts.Count == 0)             {                 model.NoAccounts = true;             }             else             {                 var accounts = new List<Account>();                 foreach (var accountInfo in userAccounts)                 {                     accounts.Add(accountInfo);                 }                 model.AccountsList = new SelectList(accounts, "Id", "Currency.Name");             }             return View(model);         }         [HttpPost]         public ActionResult Withdraw(CashTransferViewModel model)         {             if (ModelState.IsValid)             {                 try                 {                     var accountInfo = _atmService.GetAccountById(model.AccountId);                     _atmService.Withdraw(accountInfo, model.CashAmount);                 }                 catch (Exception ex)                 {                     TempData["MessageType"] = "error";                     TempData["Message"] = ex.Message;                     return RedirectToAction("Index", "Home");                 }                 TempData["Message"] = OperationSuccessMessage;                 return RedirectToAction("Index", "Home");             }             return View();         }         public ActionResult ConvertCurrency()         {             var model = new ConvertCurrencyViewModel();             var userAccounts = _atmService.GetAccountsList(AuthenticationHelper.GetLoggedUser().Id).ToList();             if (userAccounts.Count <= 1)             {                 model.NotEnoughAccounts = true;             }             else             {                 var accounts = new List<Account>();                 foreach (var accountInfo in userAccounts)                 {                     accounts.Add(accountInfo);                 }                 model.SourceAccountsList = new SelectList(accounts, "Id", "Currency.Name");                 model.DestinationAccountsList = new SelectList(accounts, "Id", "Currency.Name");             }             return View(model);         }         [HttpPost]         public ActionResult ConvertCurrency(ConvertCurrencyViewModel model)         {             if (ModelState.IsValid)             {                 try                 {                     var sourceAccount = _atmService.GetAccountById(model.SourceAccountId);                     var destinationAccount = _atmService.GetAccountById(model.DestinationAccountId);                     if (_atmService.ValidateAccountBalance(sourceAccount, model.CashAmount))                     {                         _atmService.ConvertCurrency(sourceAccount, destinationAccount, model.CashAmount);                         TempData["Message"] = OperationSuccessMessage;                         return RedirectToAction("Index", "Home");                     }                 }                 catch (Exception ex)                 {                     TempData["MessageType"] = "error";                     TempData["Message"] = ex.Message;                     return RedirectToAction("Index", "Home");                 }             }             TempData["Message"] = OperationSuccessMessage;             return RedirectToAction("Index", "Home");         }     } }