Index: KernelRecordsMVC.Application/ViewModels/CartItemViewModel.cs
===================================================================
--- KernelRecordsMVC.Application/ViewModels/CartItemViewModel.cs	(revision 08aefc6f3b51f4bfcb7471a2fd319c064171b1c5)
+++ KernelRecordsMVC.Application/ViewModels/CartItemViewModel.cs	(revision 08aefc6f3b51f4bfcb7471a2fd319c064171b1c5)
@@ -0,0 +1,21 @@
+﻿namespace KernelRecordsMVC.Application.ViewModels;
+
+public class CartItemViewModel
+{
+    public long ProductId { get; set; }
+
+    public long ReleaseId { get; set; }
+
+    public string ReleaseTitle { get; set; } = null!;
+
+    public string Format { get; set; } = null!;
+
+    public decimal Price { get; set; }
+
+    public long Quantity { get; set; }
+
+    public long Stock { get; set; }
+
+    public decimal Total =>
+        Price * Quantity;
+}
Index: KernelRecordsMVC.Application/ViewModels/CartViewModel.cs
===================================================================
--- KernelRecordsMVC.Application/ViewModels/CartViewModel.cs	(revision 08aefc6f3b51f4bfcb7471a2fd319c064171b1c5)
+++ KernelRecordsMVC.Application/ViewModels/CartViewModel.cs	(revision 08aefc6f3b51f4bfcb7471a2fd319c064171b1c5)
@@ -0,0 +1,10 @@
+﻿namespace KernelRecordsMVC.Application.ViewModels;
+
+public class CartViewModel
+{
+    public List<CartItemViewModel> Items { get; set; }
+        = new();
+
+    public decimal Total =>
+        Items.Sum(x => x.Total);
+}
Index: KernelRecordsMVC.Application/ViewModels/CreateProductViewModel.cs
===================================================================
--- KernelRecordsMVC.Application/ViewModels/CreateProductViewModel.cs	(revision 08aefc6f3b51f4bfcb7471a2fd319c064171b1c5)
+++ KernelRecordsMVC.Application/ViewModels/CreateProductViewModel.cs	(revision 08aefc6f3b51f4bfcb7471a2fd319c064171b1c5)
@@ -0,0 +1,27 @@
+﻿using System.ComponentModel.DataAnnotations;
+using KernelRecordsMVC.Domain.Enums;
+
+namespace KernelRecordsMVC.Application.ViewModels;
+
+public class CreateProductViewModel
+{
+    [Required]
+    [Display(Name = "Release")]
+    public long ReleaseId { get; set; }
+
+    [Required]
+    [Display(Name = "Format")]
+    public ProductFormat Format { get; set; }
+
+    [Required]
+    [Range(0.01, 100000)]
+    public decimal Price { get; set; }
+
+    [Required]
+    [Display(Name = "Description")]
+    public string ProductDescription { get; set; } = null!;
+
+    [Required]
+    [Range(0, long.MaxValue)]
+    public long Stock { get; set; }
+}
Index: KernelRecordsMVC.Application/ViewModels/EditProductViewModel.cs
===================================================================
--- KernelRecordsMVC.Application/ViewModels/EditProductViewModel.cs	(revision 08aefc6f3b51f4bfcb7471a2fd319c064171b1c5)
+++ KernelRecordsMVC.Application/ViewModels/EditProductViewModel.cs	(revision 08aefc6f3b51f4bfcb7471a2fd319c064171b1c5)
@@ -0,0 +1,36 @@
+﻿namespace KernelRecordsMVC.Application.ViewModels;
+
+using System.ComponentModel.DataAnnotations;
+using KernelRecordsMVC.Domain.Enums;
+
+
+public class EditProductViewModel
+{
+    public long ProductId { get; set; }
+
+    public long ReleaseId { get; set; }
+
+    public string ReleaseTitle { get; set; } = null!;
+
+    public ProductFormat Format { get; set; }
+
+    [Required]
+    [Range(0.01, 100000)]
+    public decimal Price { get; set; }
+
+    [Required]
+    [Display(Name = "Product Description")]
+    public string ProductDescription { get; set; } = null!;
+
+    [Required]
+    [Range(0, long.MaxValue)]
+    public long Stock { get; set; }
+
+    [Display(Name = "Discount (%)")]
+    [Range(0, 100)]
+    public decimal? Discount { get; set; }
+
+    [Required]
+    [Display(Name = "Modification Type")]
+    public ModificationType ModificationType { get; set; }
+}
Index: KernelRecordsMVC.Application/ViewModels/LoginViewModel.cs
===================================================================
--- KernelRecordsMVC.Application/ViewModels/LoginViewModel.cs	(revision 08aefc6f3b51f4bfcb7471a2fd319c064171b1c5)
+++ KernelRecordsMVC.Application/ViewModels/LoginViewModel.cs	(revision 08aefc6f3b51f4bfcb7471a2fd319c064171b1c5)
@@ -0,0 +1,13 @@
+﻿using System.ComponentModel.DataAnnotations;
+
+namespace KernelRecordsMVC.Application.ViewModels;
+
+public class LoginViewModel
+{
+    [Required]
+    public string Username { get; set; } = null!;
+
+    [Required]
+    [DataType(DataType.Password)]
+    public string Password { get; set; } = null!;
+}
Index: KernelRecordsMVC.Application/ViewModels/RegisterViewModel.cs
===================================================================
--- KernelRecordsMVC.Application/ViewModels/RegisterViewModel.cs	(revision 08aefc6f3b51f4bfcb7471a2fd319c064171b1c5)
+++ KernelRecordsMVC.Application/ViewModels/RegisterViewModel.cs	(revision 08aefc6f3b51f4bfcb7471a2fd319c064171b1c5)
@@ -0,0 +1,26 @@
+﻿using System.ComponentModel.DataAnnotations;
+
+namespace KernelRecordsMVC.Application.ViewModels;
+
+public class RegisterViewModel
+{
+    [Required]
+    [EmailAddress]
+    public string Email { get; set; } = null!;
+
+    [Required]
+    public string Username { get; set; } = null!;
+
+    [Required]
+    [DataType(DataType.Password)]
+    public string Password { get; set; } = null!;
+
+    [Required]
+    [DataType(DataType.Password)]
+    [Compare("Password")]
+    public string ConfirmPassword { get; set; } = null!;
+
+    public string? ShippingAddress { get; set; }
+
+    public string? TelephoneNumber { get; set; }
+}
