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 9 • Console • JSON • Serilog
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.

Mail Daemon

2022-2025 Pet project

Utility to send mails with customizable settings.

.NET 9 Console JSON Serilog
Information
Source code
Root / MailDaemon.Lib / MailProfile / JsonMailProfileService.cs
using System.Collections.Generic; using Newtonsoft.Json; using System.IO; using MailDaemon.Lib; using System; namespace MailDaemon.Core { public class JsonMailProfileService : IMailProfileService { public MailProfile ReadProfile(string filePath) { if (string.IsNullOrEmpty(filePath)) { throw new ArgumentException("File path cannot be empty."); } try { var mailProfile = JsonConvert.DeserializeObject<MailProfile>(File.ReadAllText(filePath)); return mailProfile; } catch (Exception ex) { throw new Exception(ex.Message); } } public string ReadMailBodyTemplate(string filePath) { if (string.IsNullOrEmpty(filePath)) { throw new ArgumentException("Mail body template file path cannot be empty."); } try { if (File.Exists(filePath)) { using (var sr = new StreamReader(filePath)) { return sr.ReadToEnd(); } } } catch (Exception ex) { throw new Exception(ex.Message); } return ""; } public List<ValidationInfo> ValidateMailProfile(MailProfile mailProfile) { var result = new List<ValidationInfo>(); // validate sender if (mailProfile.Sender == null) { result.Add(new ValidationInfo() { Level = ValidationLevel.Error, Message = $"Mail \"sender\" property in \"{mailProfile.FileName}\" not exists." }); } else if (string.IsNullOrEmpty(mailProfile.Sender.Address)) { result.Add(new ValidationInfo() { Level = ValidationLevel.Error, Message = $"Mail \"sender\" address value in \"{mailProfile.FileName}\" is empty." }); } else if (!mailProfile.Sender.Address.ValidateEmail()) { result.Add(new ValidationInfo() { Level = ValidationLevel.Error, Message = $"Mail \"sender\" address \"{mailProfile.Sender.Address}\" not valid." }); } if (string.IsNullOrEmpty(mailProfile.Subject)) { result.Add(new ValidationInfo() { Level = ValidationLevel.Error, Message = $"Mail \"subject\" value in \"{mailProfile.FileName}\" is empty." }); } // validate recipients if (mailProfile.Recipients == null) { result.Add(new ValidationInfo() { Level = ValidationLevel.Error, Message = $"Mail \"recipients\" property in \"{mailProfile.FileName}\" not exists." }); } else if (mailProfile.Recipients.Count == 0) { result.Add(new ValidationInfo() { Level = ValidationLevel.Error, Message = "No mail recipients found." }); } else { foreach (var recipient in mailProfile.Recipients) { if (!recipient.Address.ValidateEmail()) { result.Add(new ValidationInfo() { Level = ValidationLevel.Error, Message = $"Mail \"recipient\" address \"{recipient.Address}\" not valid." }); } if (!recipient.Skip.GetValueOrDefault() && recipient.Attachments != null) { foreach (var attachment in recipient.Attachments) { if (string.IsNullOrEmpty(attachment.Path)) { result.Add(new ValidationInfo() { Level = ValidationLevel.Warning, Message = $"Attachment file path for recipient \"{recipient.Address}\" is empty." }); continue; } if (!File.Exists(attachment.Path)) { result.Add(new ValidationInfo() { Level = ValidationLevel.Warning, Message = $"Attachment \"{attachment.Path}\" for recipient \"{recipient.Address}\" not found." }); } } } } } // validate mail template if (string.IsNullOrEmpty(mailProfile.MailBodyTemplateFileName)) { result.Add(new ValidationInfo() { Level = ValidationLevel.Error, Message = $"Mail \"template\" property in \"{mailProfile.FileName}\" is empty." }); } else { if (!File.Exists(mailProfile.MailBodyTemplateFileName)) { result.Add(new ValidationInfo() { Level = ValidationLevel.Error, Message = $"Mail body template file \"{mailProfile.MailBodyTemplateFullPath}\" not exists." }); } } // validate attachments if (mailProfile.Attachments != null) { foreach (var attachment in mailProfile.Attachments) { if (string.IsNullOrEmpty(attachment.Path)) { result.Add(new ValidationInfo() { Level = ValidationLevel.Warning, Message = $"Attachment file path for mail profile \"{mailProfile.FileName}\" is empty." }); continue; } if (!File.Exists(attachment.Path)) { result.Add(new ValidationInfo() { Level = ValidationLevel.Error, Message = $"Attachment \"{attachment.Path}\" for mail profile \"{mailProfile.FileName}\" not exists." }); } } } return result; } } }