diff --git a/src/YaeBlog/Components/GitHeatMap.razor b/src/YaeBlog/Components/GitHeatMap.razor
index 3051329..08d545f 100644
--- a/src/YaeBlog/Components/GitHeatMap.razor
+++ b/src/YaeBlog/Components/GitHeatMap.razor
@@ -1,4 +1,4 @@
-@using YaeBlog.Models
+@using YaeBlog.Abstractions.Models
@using YaeBlog.Services
@inject GitHeapMapService GitHeapMapInstance
diff --git a/src/YaeBlog/Components/Pages/Archives.razor b/src/YaeBlog/Components/Pages/Archives.razor
index 55204f0..84279b1 100644
--- a/src/YaeBlog/Components/Pages/Archives.razor
+++ b/src/YaeBlog/Components/Pages/Archives.razor
@@ -1,6 +1,6 @@
@page "/blog/archives"
-@using YaeBlog.Abstraction
-@using YaeBlog.Models
+@using YaeBlog.Abstractions
+@using YaeBlog.Abstractions.Models
@inject IEssayContentService Contents
diff --git a/src/YaeBlog/Components/Pages/BlogIndex.razor b/src/YaeBlog/Components/Pages/BlogIndex.razor
index f4ff07e..519dc3c 100644
--- a/src/YaeBlog/Components/Pages/BlogIndex.razor
+++ b/src/YaeBlog/Components/Pages/BlogIndex.razor
@@ -1,6 +1,6 @@
@page "/blog"
-@using YaeBlog.Abstraction
-@using YaeBlog.Models
+@using YaeBlog.Abstractions
+@using YaeBlog.Abstractions.Models
@inject IEssayContentService Contents
@inject NavigationManager NavigationInstance
diff --git a/src/YaeBlog/Components/Pages/Essays.razor b/src/YaeBlog/Components/Pages/Essays.razor
index 9aa0a94..7ab3007 100644
--- a/src/YaeBlog/Components/Pages/Essays.razor
+++ b/src/YaeBlog/Components/Pages/Essays.razor
@@ -1,7 +1,7 @@
@page "/blog/essays/{BlogKey}"
@using System.Text.Encodings.Web
-@using YaeBlog.Abstraction
-@using YaeBlog.Models
+@using YaeBlog.Abstractions
+@using YaeBlog.Abstractions.Models
@inject IEssayContentService Contents
@inject NavigationManager NavigationInstance
diff --git a/src/YaeBlog/Components/Pages/Friends.razor b/src/YaeBlog/Components/Pages/Friends.razor
index 648a198..c0c65dd 100644
--- a/src/YaeBlog/Components/Pages/Friends.razor
+++ b/src/YaeBlog/Components/Pages/Friends.razor
@@ -1,6 +1,6 @@
@page "/friends"
@using Microsoft.Extensions.Options
-@using YaeBlog.Models
+@using YaeBlog.Abstractions.Models
@inject IOptions
BlogOptionInstance
diff --git a/src/YaeBlog/Components/Pages/Index.razor b/src/YaeBlog/Components/Pages/Index.razor
index 33393a7..aa56cf8 100644
--- a/src/YaeBlog/Components/Pages/Index.razor
+++ b/src/YaeBlog/Components/Pages/Index.razor
@@ -1,6 +1,6 @@
@page "/"
-@using YaeBlog.Abstraction
-@using YaeBlog.Models
+@using YaeBlog.Abstractions
+@using YaeBlog.Abstractions.Models
@inject IEssayContentService EssayContentInstance
diff --git a/src/YaeBlog/Components/Pages/Tags.razor b/src/YaeBlog/Components/Pages/Tags.razor
index 7a7a826..680544b 100644
--- a/src/YaeBlog/Components/Pages/Tags.razor
+++ b/src/YaeBlog/Components/Pages/Tags.razor
@@ -1,7 +1,7 @@
@page "/blog/tags/"
@using System.Text.Encodings.Web
-@using YaeBlog.Abstraction
-@using YaeBlog.Models
+@using YaeBlog.Abstractions
+@using YaeBlog.Abstractions.Models
@inject IEssayContentService Contents
@inject NavigationManager NavigationInstance
diff --git a/src/YaeBlog/Extensions/WebApplicationBuilderExtensions.cs b/src/YaeBlog/Extensions/WebApplicationBuilderExtensions.cs
index 192412c..2134730 100644
--- a/src/YaeBlog/Extensions/WebApplicationBuilderExtensions.cs
+++ b/src/YaeBlog/Extensions/WebApplicationBuilderExtensions.cs
@@ -1,8 +1,8 @@
using AngleSharp;
using Microsoft.Extensions.Options;
-using YaeBlog.Abstraction;
+using YaeBlog.Abstractions;
using YaeBlog.Services;
-using YaeBlog.Models;
+using YaeBlog.Abstractions.Models;
using YaeBlog.Processors;
namespace YaeBlog.Extensions;
diff --git a/src/YaeBlog/Extensions/WebApplicationExtensions.cs b/src/YaeBlog/Extensions/WebApplicationExtensions.cs
index 21757ea..157fdb7 100644
--- a/src/YaeBlog/Extensions/WebApplicationExtensions.cs
+++ b/src/YaeBlog/Extensions/WebApplicationExtensions.cs
@@ -1,4 +1,4 @@
-using YaeBlog.Abstraction;
+using YaeBlog.Abstractions;
using YaeBlog.Processors;
using YaeBlog.Services;
diff --git a/src/YaeBlog/Processors/EssayStylesPostRenderProcessor.cs b/src/YaeBlog/Processors/EssayStylesPostRenderProcessor.cs
index ca4d27c..4ee8a9f 100644
--- a/src/YaeBlog/Processors/EssayStylesPostRenderProcessor.cs
+++ b/src/YaeBlog/Processors/EssayStylesPostRenderProcessor.cs
@@ -1,8 +1,8 @@
using AngleSharp;
using AngleSharp.Dom;
-using YaeBlog.Abstraction;
+using YaeBlog.Abstractions;
using YaeBlog.Extensions;
-using YaeBlog.Models;
+using YaeBlog.Abstractions.Models;
namespace YaeBlog.Processors;
diff --git a/src/YaeBlog/Processors/HeadlinePostRenderProcessor.cs b/src/YaeBlog/Processors/HeadlinePostRenderProcessor.cs
index bd2b76c..e66b24a 100644
--- a/src/YaeBlog/Processors/HeadlinePostRenderProcessor.cs
+++ b/src/YaeBlog/Processors/HeadlinePostRenderProcessor.cs
@@ -1,7 +1,7 @@
using AngleSharp;
using AngleSharp.Dom;
-using YaeBlog.Abstraction;
-using YaeBlog.Models;
+using YaeBlog.Abstractions;
+using YaeBlog.Abstractions.Models;
namespace YaeBlog.Processors;
diff --git a/src/YaeBlog/Processors/ImagePostRenderProcessor.cs b/src/YaeBlog/Processors/ImagePostRenderProcessor.cs
index 75f3389..d043103 100644
--- a/src/YaeBlog/Processors/ImagePostRenderProcessor.cs
+++ b/src/YaeBlog/Processors/ImagePostRenderProcessor.cs
@@ -1,9 +1,9 @@
using AngleSharp;
using AngleSharp.Dom;
using Microsoft.Extensions.Options;
-using YaeBlog.Abstraction;
+using YaeBlog.Abstractions;
using YaeBlog.Core.Exceptions;
-using YaeBlog.Models;
+using YaeBlog.Abstractions.Models;
namespace YaeBlog.Processors;
diff --git a/src/YaeBlog/Services/BlogChangeWatcher.cs b/src/YaeBlog/Services/BlogChangeWatcher.cs
index c954f47..a7da070 100644
--- a/src/YaeBlog/Services/BlogChangeWatcher.cs
+++ b/src/YaeBlog/Services/BlogChangeWatcher.cs
@@ -1,5 +1,5 @@
using Microsoft.Extensions.Options;
-using YaeBlog.Models;
+using YaeBlog.Abstractions.Models;
namespace YaeBlog.Services;
diff --git a/src/YaeBlog/Services/BlogHotReloadService.cs b/src/YaeBlog/Services/BlogHotReloadService.cs
index 80d8c69..a6f5ca1 100644
--- a/src/YaeBlog/Services/BlogHotReloadService.cs
+++ b/src/YaeBlog/Services/BlogHotReloadService.cs
@@ -1,4 +1,4 @@
-using YaeBlog.Abstraction;
+using YaeBlog.Abstractions;
namespace YaeBlog.Services;
diff --git a/src/YaeBlog/Services/EssayContentService.cs b/src/YaeBlog/Services/EssayContentService.cs
index ab86ada..48fc9af 100644
--- a/src/YaeBlog/Services/EssayContentService.cs
+++ b/src/YaeBlog/Services/EssayContentService.cs
@@ -1,7 +1,7 @@
using System.Collections.Concurrent;
using System.Diagnostics.CodeAnalysis;
-using YaeBlog.Abstraction;
-using YaeBlog.Models;
+using YaeBlog.Abstractions;
+using YaeBlog.Abstractions.Models;
namespace YaeBlog.Services;
diff --git a/src/YaeBlog/Services/EssayScanService.cs b/src/YaeBlog/Services/EssayScanService.cs
index b35404a..2a3fda0 100644
--- a/src/YaeBlog/Services/EssayScanService.cs
+++ b/src/YaeBlog/Services/EssayScanService.cs
@@ -3,9 +3,9 @@ using System.Text.RegularExpressions;
using Imageflow.Bindings;
using Imageflow.Fluent;
using Microsoft.Extensions.Options;
-using YaeBlog.Abstraction;
+using YaeBlog.Abstractions;
using YaeBlog.Core.Exceptions;
-using YaeBlog.Models;
+using YaeBlog.Abstractions.Models;
using YamlDotNet.Core;
using YamlDotNet.Serialization;
diff --git a/src/YaeBlog/Services/GitHeatMapService.cs b/src/YaeBlog/Services/GitHeatMapService.cs
index eae9f55..7edc547 100644
--- a/src/YaeBlog/Services/GitHeatMapService.cs
+++ b/src/YaeBlog/Services/GitHeatMapService.cs
@@ -1,7 +1,7 @@
using DotNext;
using Microsoft.Extensions.Options;
using YaeBlog.Extensions;
-using YaeBlog.Models;
+using YaeBlog.Abstractions.Models;
namespace YaeBlog.Services;
diff --git a/src/YaeBlog/Services/GiteaFetchService.cs b/src/YaeBlog/Services/GiteaFetchService.cs
index 18ab068..e2f1112 100644
--- a/src/YaeBlog/Services/GiteaFetchService.cs
+++ b/src/YaeBlog/Services/GiteaFetchService.cs
@@ -3,7 +3,7 @@ using System.Text.Json;
using DotNext;
using Microsoft.Extensions.Options;
using YaeBlog.Core.Exceptions;
-using YaeBlog.Models;
+using YaeBlog.Abstractions.Models;
namespace YaeBlog.Services;
diff --git a/src/YaeBlog/Services/ImageCompressService.cs b/src/YaeBlog/Services/ImageCompressService.cs
index 831e230..0755c71 100644
--- a/src/YaeBlog/Services/ImageCompressService.cs
+++ b/src/YaeBlog/Services/ImageCompressService.cs
@@ -1,7 +1,7 @@
using Imageflow.Fluent;
-using YaeBlog.Abstraction;
+using YaeBlog.Abstractions;
using YaeBlog.Core.Exceptions;
-using YaeBlog.Models;
+using YaeBlog.Abstractions.Models;
namespace YaeBlog.Services;
diff --git a/src/YaeBlog/Services/MarkdownWordCounter.cs b/src/YaeBlog/Services/MarkdownWordCounter.cs
index b5d3a84..7967ff9 100644
--- a/src/YaeBlog/Services/MarkdownWordCounter.cs
+++ b/src/YaeBlog/Services/MarkdownWordCounter.cs
@@ -1,5 +1,5 @@
using YaeBlog.Extensions;
-using YaeBlog.Models;
+using YaeBlog.Abstractions.Models;
namespace YaeBlog.Services
{
diff --git a/src/YaeBlog/Services/RendererService.cs b/src/YaeBlog/Services/RendererService.cs
index a4054d9..9b080f9 100644
--- a/src/YaeBlog/Services/RendererService.cs
+++ b/src/YaeBlog/Services/RendererService.cs
@@ -3,9 +3,9 @@ using System.Diagnostics;
using System.Text;
using System.Text.RegularExpressions;
using Markdig;
-using YaeBlog.Abstraction;
+using YaeBlog.Abstractions;
using YaeBlog.Core.Exceptions;
-using YaeBlog.Models;
+using YaeBlog.Abstractions.Models;
namespace YaeBlog.Services;
diff --git a/src/YaeBlog/Services/YaeCommandService.cs b/src/YaeBlog/Services/YaeCommandService.cs
index e4dd2ed..5553833 100644
--- a/src/YaeBlog/Services/YaeCommandService.cs
+++ b/src/YaeBlog/Services/YaeCommandService.cs
@@ -2,9 +2,9 @@
using System.CommandLine.Invocation;
using System.Text;
using Microsoft.Extensions.Options;
-using YaeBlog.Abstraction;
+using YaeBlog.Abstractions;
using YaeBlog.Core.Exceptions;
-using YaeBlog.Models;
+using YaeBlog.Abstractions.Models;
namespace YaeBlog.Services;
diff --git a/src/YaeBlog/YaeBlog.csproj b/src/YaeBlog/YaeBlog.csproj
index 645a443..8b6daf1 100644
--- a/src/YaeBlog/YaeBlog.csproj
+++ b/src/YaeBlog/YaeBlog.csproj
@@ -13,6 +13,7 @@
+