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
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.

Content Management

2020 Test

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

PHP MySQL AJAX
Information
Source code
Root / content.php
<?php require("header.php"); if (!$authentication->isLoggedIn()) { header("Location: index.php"); die(); } $content = new ContentRegistry(); $is_root_node = false; if (isset($_GET['id'])) $current_node_id = $_GET['id']; else { $current_node_id = $content->getRootNode()->getId(); $is_root_node = true; } if (!$content->isNodeExists($current_node_id)) { ?> <div class="alert alert-danger" role="alert"> Node with ID <strong><?php echo $current_node_id ?></strong> is not exists. </div> <?php } else { //$content->delete_node($current_node_id); $item_info = $content->getNodeById($current_node_id); if ($content->isRootNode($item_info)) $is_root_node = true; ?> <h2 class="display-4"><?php echo $item_info->getTitle(); ?></h2> <button type="button" class="btn btn-outline-primary create-node" data-toggle="modal" data-target="#nodeEditModal">Create Node</button> <button type="button" class="btn btn-outline-primary load-node" data-toggle="modal" data-target="#nodeEditModal" data-node-id="<?php echo $current_node_id; ?>">Edit Node</button> <button type="button" class="btn btn-outline-danger delete-node" data-node-id="<?php echo $current_node_id; ?>" <?php if ($is_root_node) echo "disabled"; ?>>Delete</button> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="reset.php" class="btn btn-outline-secondary" role="button">Reset Content...</a> <div class="modal fade" id="nodeEditModal" tabindex="-1" role="dialog" aria-labelledby="nodeModalLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <form method="post" class="needs-validation" novalidate> <div class="modal-header"> <h5 class="modal-title" id="nodeModalLabel">Content Node</h5> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">&times;</span> </button> </div> <div class="modal-body"> <input type="hidden" class="form-control" id="hdnNodeID" /> <div class="form-group"> <label for="txtNodeTitle" class="col-form-label"><span class="required-field">*</span> Title:</label> <input type="text" class="form-control" id="txtNodeTitle" required /> <div class="invalid-feedback"> Please enter title. </div> </div> <div class="form-group"> <label for="txtNodeDescription" class="col-form-label">Description:</label> <textarea class="form-control" rows="10" id="txtNodeDescription"></textarea> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-primary save-node" data-target="#nodeEditModal">Save</button> <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button> </div> </form> </div> </div> </div> <br/><br/> <div class="row"> <div class="col-md-5"> <?php $content->displayItemsTree($current_node_id); ?> </div> <div class="col-md-7"> <?php if ($item_info->getDescription() != "") echo "<div>".$item_info->getDescription()."</div>"; ?> </div> </div> <?php } require("footer.php"); ?> <script type="text/javascript"> (function() { 'use strict'; window.addEventListener('load', function() { let inputs = document.getElementsByClassName('form-control') let validation = Array.prototype.filter.call(inputs, function(input) { input.addEventListener('blur', function(event) { // reset input.classList.remove('is-invalid') input.classList.remove('is-valid') if (input.checkValidity() === false) { input.classList.add('is-invalid') } else { input.classList.add('is-valid') } }, false); }); }, false); })() </script> <script type="text/javascript"> $(document).ready(function() { function resetNodeEditDialog() { $('#hdnNodeID').val('0'); $('#txtNodeTitle').val(''); $('#txtNodeDescription').val(''); } $('#nodeEditModal').on('hide.bs.modal', function() {             resetNodeEditDialog();         }); $('body').on('click', '.create-node', function (e) { e.preventDefault(); resetNodeEditDialog(); }); $('body').on('click', '.load-node', function (e) { e.preventDefault(); let nodeId = $(this).data('node-id'); if (nodeId > 0) { $('#hdnNodeID').val(nodeId); $.ajax({ type: 'GET', url: 'ajax_processor.php?cmd=LoadNode&id=' + nodeId, data: '', success: function(response) { console.log(response); let json = JSON.parse(response); if (json.success) { $('#txtNodeTitle').val(json.title); $('#txtNodeDescription').val(json.description); } } }); } }); $('body').on('click', '.save-node', function (e) { e.preventDefault(); let nodeId = $('#hdnNodeID').val(); if (nodeId > 0) { $.ajax({ type: 'POST', url: 'ajax_processor.php', data: { cmd: 'UpdateNode', node_id: nodeId, title: $('#txtNodeTitle').val(), description: $('#txtNodeDescription').val() }, dataType: 'JSON', success: function(response) { window.location.href = 'content.php?id=' + <?php echo $current_node_id; ?>; } }); } else { $.ajax({ type: 'POST', url: 'ajax_processor.php', data: { cmd: 'CreateNode', parent_id: <?php echo $current_node_id; ?>, title: $('#txtNodeTitle').val(), description: $('#txtNodeDescription').val() }, dataType: 'JSON', success: function(response) { window.location.href = 'content.php?id=' + <?php echo $current_node_id; ?>; } }); } }); $('body').on('click', '.delete-node', function (e) { e.preventDefault(); let nodeId = $(this).data('node-id'); if (nodeId > 0) { BootstrapDialog.show({                     title: 'Delete node confirmation',                     message: 'You are sure to delete this node and subnodes?',                     buttons: [                         {                             label: 'Delete',                             cssClass: 'btn-primary',                             action: function(dialog) {                                 $.ajax({ type: 'POST', url: 'ajax_processor.php',                                     data: { cmd: 'DeleteNode', node_id: nodeId },                                     dataType: "JSON",                                     cache: false,                                     success: function (response) {                                         dialog.close();                                         window.location.href = 'content.php';                                     }                                 });                             }                         },                         {                             label: 'Cancel', cssClass: 'btn-secondary',                             action: function(dialog) {                                 dialog.close();                             }                         }                     ]                 }); } }); }); </script>