ForNeVeR/fornever.me
43.7
Weak · 3 October 2026
571
lines of production code
F#
with C#
2
measurements over time
What this system is
This system is a personal website and blog engine, now implemented as a dynamic ASP.NET Core application with bilingual support for English and Russian content. It serves static posts, presentation slides, and RSS feeds, utilizing Razor Pages for rendering and Markdig for Markdown processing. The architecture includes server-side syntax highlighting via Jint and a dedicated frontend build pipeline using Webpack 5.
How it got here
2014–2015 — Migration to ASP.NET Core
6 changes.
The project underwent a complete engine rewrite, migrating from the Haskell-based Hakyll static site generator to a dynamic ASP.NET Core application using Razor Pages and F\#. This transition involved replacing legacy templates with a modular architecture, introducing server-side code highlighting via Jint, and updating all core dependencies and tooling. Comprehensive test suites and new data models were implemented to support the new functionality and ensure stability.
2016–2017 — frontend build infrastructure and content expansion
5 changes.
This period focused on establishing a formalized frontend build pipeline using Webpack 5 and migrating styles to LESS, thereby separating client-side asset management from the main application. Concurrently, the project expanded its static content by adding presentation submodules and introduced automation scripts for versioning and talk preparation to streamline the release process.
2018–2025 — ASP.NET Core migration
7 changes.
The project underwent a comprehensive migration from the Freya framework to ASP.NET Core, rewriting the Razor pages, controllers, and Markdown processing modules. This effort introduced bilingual support, modernized the RSS feed generation, and established new core abstractions for post rendering and testing utilities.
Features
Added new presentation content to the website
The website now includes three new static content sections for presentations: 'modern-programming', 'net-core-slides', and 'talk-javascriptservices'. These are added as submodules under the wwwroot/talks directory, making the associated slide decks and talk materials available to users.
ForneverMind/wwwroot/talks · high confidence
Introduce PostArchiveModel for post archiving
A new model type, PostArchiveModel, has been added to the application's data layer. This model serves as the structural container for archived posts, holding an array of PostMetadata objects. This change supports the broader effort to migrate the archiving functionality away from the previous Freya-based implementation.
ForneverMind/models · high confidence
Introduce dedicated frontend build infrastructure with Webpack 5
The ForneverMind.Frontend project now includes a formalized build pipeline using Webpack 5 to compile client-side LESS styles and JavaScript, as well as a bundled server-side entry point. A new MSBuild project file (ForneverMind.Frontend.proj) orchestrates the build by invoking npm install and npm run scripts (debug/release) during the build process, ensuring that frontend assets are generated before the main application builds. This change establishes the foundational tooling for frontend asset management, separating the build logic from the main application structure.
ForneverMind.Frontend · high confidence
New integration test utilities for web application testing
Added a new IntegrationTestUtil module to the test framework, providing helper functions to spin up a WebApplicationFactory for integration tests. This allows tests to easily configure the web host, access services, and make HTTP requests against the application in a controlled environment.
ForneverMind.TestFramework · high confidence
Removals
Removal of legacy Hakyll blog templates
The site's legacy template structure has been removed, specifically deleting the default layout, post detail, post list, and archive templates. This eliminates the previous XHTML-based presentation layer and its associated navigation and content rendering logic.
templates · high confidence
Behavioural changes
Add deployment configuration and license metadata
The deploy directory now includes an appsettings.json file that sets the application's base URL to https://fornever.me, alongside a corresponding license file (appsettings.json.license) that applies the MIT license to this configuration file via SPDX identifiers.
deploy · high confidence
Automated versioning and talk preparation scripts added
New PowerShell scripts have been introduced to streamline the build and release process. Get-Version.ps1 determines the application version by parsing git tags (refs/tags/v\*) or falling back to the version defined in the ForneverMind.fsproj file for non-release builds. Prepare-Talks.ps1 automates the setup of presentation content by cleaning the target directory and running dependency installation (via Yarn or npm) for specific talk projects (modern-programming, net-core-slides, git-basics, and talk-javascriptservices), including error handling and assertions to ensure directories are not empty.
Scripts · high confidence
Introduce Jint-based server-side code highlighting
The application now uses the Jint JavaScript engine to perform syntax highlighting for code blocks on the server side, replacing previous client-side or alternative server-side approaches. This change introduces a new \CodeHighlightModule\ that initializes a Jint engine, loads a \server.js\ script, and exposes a \Highlight\ method for processing code snippets with language support. The module is registered in the DI container and integrated into the request pipeline, with logging added to track initialization and processing times. This shift aims to improve performance and reduce memory footprint by leveraging Jint's efficient execution model.
ForneverMind · high confidence
Introduce core abstractions and models for the new post rendering system
The core library now defines the foundational types and interfaces for the new post rendering architecture, replacing the previous Freya-based implementation. This includes the \IPostRenderer\ and \IPostsProvider\ interfaces for handling post data and rendering, along with supporting models like \PostModel\, \PostMetadata\, and \LanguageLinks\. A new \FileSystem\ module utilizing the \TruePath\ library provides path validation utilities, establishing the structural basis for how posts are processed and served.
ForneverMind.Core · high confidence
License metadata added for site images
License files have been added for numerous images in the site's static assets, explicitly declaring copyright ownership and licensing terms. Most images are now marked with an MIT license and copyright held by Friedrich von Never, while one image (2025-09-08.clojure.png) is declared under the CC0-1.0 license with copyright held by Evgeniy Andreev.
ForneverMind/wwwroot/images · high confidence
Migrate Markdown processing to Markdig with table support
The Markdown module has been rewritten to use the Markdig library instead of the previous Freya-based implementation. This change introduces support for pipe tables in rendered content and replaces the custom HTML rendering logic with Markdig's pipeline, including a custom code block renderer that integrates with the existing syntax highlighting service. The migration also updates file path handling to use TruePath and ensures consistent UTF-8 encoding during markdown processing.
ForneverMind/Markdown · high confidence
Migrate RSS feed generation to ASP.NET Core
The application now uses new ASP.NET Core controllers to serve RSS feeds, replacing the previous implementation. The PagesController handles the root URL by redirecting to the default language path, while the RssController generates RSS 2.0 feeds using the WilderMinds.RssSyndication library. Users can now access language-specific feeds at /{language}/rss.xml and a combined feed at /rss.xml, with the response headers correctly including the last modification date of the most recent post.
ForneverMind/Controllers · high confidence
Migrate Razor pages from Freya to ASP.NET Core with bilingual support
The Razor layer has been rewritten to use native ASP.NET Core Razor Pages, replacing the previous Freya-based implementation. This introduces a structured base model for handling language-specific navigation links and separate layout templates for English and Russian content. The site now serves distinct pages for the index, archive, talks, contacts, and individual posts in both languages, along with dedicated 404 error pages for each locale.
ForneverMind.Razor · high confidence
Migrate frontend styles to LESS and update layout
The project has switched from plain CSS to LESS for styling, consolidating styles into modular files (contact, fonts, layout, posts, styles, syntax) imported via a main entry point. This migration includes updating the site layout width from 600px to 770px, refining the header navigation and logo positioning, and applying a flexbox layout to the footer. Additionally, code blocks and syntax highlighting are now styled using the 'agate' theme from highlight.js, and inline code is made bold for better readability.
ForneverMind.Frontend/style · high confidence
Migrate site engine from Hakyll to ASP.NET Core with .NET 10
The site engine has been completely rewritten from the Haskell-based Hakyll static site generator to a dynamic ASP.NET Core application using Razor Pages and F\#. This change upgrades the runtime to .NET 10 (SDK 10.0.401) and requires Node.js 22 for the frontend build process. The new architecture introduces a modular solution structure (ForneverMind, Core, Frontend, Razor) and utilizes git submodules for managing talk content, replacing the previous file-based template system.
(repo-wide) · high confidence
Test coverage
Added comprehensive test suite for site functionality
Added unit and integration tests covering the code highlighting module, Markdown parsing (including metadata, tables, and code blocks), route resolution for index, archive, contact, talks, and post pages, RSS feed generation, and 404 error handling.
ForneverMind.Tests · high confidence
Dependencies
Add PowerShell as a local .NET tool
The project now includes a local .NET tool configuration that installs PowerShell (pwsh) version 7.6.6. This ensures a consistent PowerShell environment is available within the project's context, accompanied by a license file specifying the MIT license for the configuration.
.config · high confidence
Update project dependencies and tooling versions
This change updates the versions of several key dependencies across the project. The .NET application now uses Jint 4.16.4 for JavaScript execution, Markdig 1.4.0 for Markdown processing, and WilderMinds.RssSyndication 1.7.1 for RSS generation. The frontend build relies on css-loader ^7.0.0, highlight.js ^10.4.1, mini-css-extract-plugin ^2.8.0, and webpack-cli ^7.0.0. Test infrastructure has been updated to use Microsoft.NET.Test.Sdk 18.10.1, xunit 2.9.3, and xunit.runner.visualstudio 4.0.0. Additionally, the TruePath library is referenced in version 1.12.0 for path handling.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 44 → 44 (+0.1)
- Rubric changed (rubric-2026.09.15 → rubric-2026.10.1) — scores are not directly comparable.
Lenses
- Code Health 75 → 75 (+0.0)
- Architecture 96 → 99 (+3.0)
- Maturity 54 → 54 (+0.0)
- Readiness 68 → 68 (+0.0)
- Security 23 → 23 (+0.0)
- Accessibility 62 → 62 (+0.0)
Resolved (3)
- Documentation: no contributor guidance (README.md)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
Changes since last survey
- 4 commits — 4 feature/other, 0 fixes
By area
- ForneverMind/ForneverMind.fsproj — 3 commits
- .github/workflows — 1 commit
Notable commits
- change: Update dependency Jint to 4.16.3
- change: Update dependency Jint to 4.16.4
- change: Update dependency Markdig to 1.4.0
- change: Update dependency ubuntu to v26
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
ForNeVeR/fornever.me was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 3 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 3d72405468a859a7d678ad47f22a0059ee64f18f — the exact code this score is about.
- Scored under rubric-2026.10.1 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-4f4226d619ea.