diff --git a/feed.xml b/feed.xml
index 1e8c947..3241ecc 100644
--- a/feed.xml
+++ b/feed.xml
@@ -10,7 +10,7 @@
razor-ssg
- Thu, 31 Oct 2024 15:24:28 GMT
+ Thu, 31 Oct 2024 15:55:00 GMTemail@example.org (Razor SSG)email@example.org (Razor SSG)
diff --git a/meta/2024/all.json b/meta/2024/all.json
index e216d4a..8234daa 100644
--- a/meta/2024/all.json
+++ b/meta/2024/all.json
@@ -1 +1 @@
-{"pages":[{"slug":"community-rules","draft":false,"title":"Community Rules","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/community-rules","wordCount":408,"lineCount":37},{"slug":"mail-preferences","draft":false,"title":"Manage your mail preferences","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/mail-preferences","wordCount":113,"lineCount":13},{"slug":"privacy","draft":false,"title":"Privacy Policy","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/privacy","wordCount":748,"lineCount":68},{"slug":"signup-confirmed","draft":false,"title":"Welcome to MyApp Newsletter","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/signup-confirmed","wordCount":53,"lineCount":8},{"slug":"speaking","draft":false,"title":"Speaking","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/speaking","wordCount":266,"lineCount":47},{"slug":"uses","draft":false,"title":"Things I use & love","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/uses","wordCount":473,"lineCount":59},{"slug":"creatorkit/about","draft":false,"title":"About","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/about","wordCount":597,"lineCount":100,"order":1},{"slug":"creatorkit/install","draft":false,"title":"Install","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/install","wordCount":1724,"lineCount":266,"order":2},{"slug":"creatorkit/customize","draft":false,"title":"Customize","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/customize","wordCount":430,"lineCount":136,"order":3},{"slug":"creatorkit/components","draft":false,"title":"Components","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/components","wordCount":855,"lineCount":195,"order":4},{"slug":"creatorkit/integrations","draft":false,"title":"Integrations","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/integrations","wordCount":107,"lineCount":29,"order":5},{"slug":"creatorkit/portal-overview","draft":false,"title":"Overview","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/portal-overview","wordCount":163,"lineCount":40,"group":"Portal","order":6},{"slug":"creatorkit/portal-messages","draft":false,"title":"Messages","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/portal-messages","wordCount":1047,"lineCount":250,"group":"Portal","order":7},{"slug":"creatorkit/portal-mailruns","draft":false,"title":"Mail Runs","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/portal-mailruns","wordCount":1303,"lineCount":277,"group":"Portal","order":8},{"slug":"creatorkit/portal-posts","draft":false,"title":"Posts","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/portal-posts","wordCount":180,"lineCount":28,"group":"Portal","order":9}],"whatsnew":[],"videos":[],"posts":[{"slug":"razor-ssg-podcasts","draft":false,"title":"Podcasts now in Razor SSG","summary":"Razor SSG now includes support for Podcasts","image":"https://images.unsplash.com/photo-1482442120256-9c03866de390?crop=entropy&fit=crop&h=1000&w=2000","author":"Gayle Smith","tags":["razor","ssg","markdown"],"date":"\/Date(1727827200000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/razor-ssg-podcasts","wordCount":1028,"lineCount":167},{"slug":"jwt-identity-auth","draft":false,"title":"ASP.NET Core JWT Identity Auth","summary":"Learn about integration and value added features of ASP.NET Core JWT Identity Auth","image":"https://images.unsplash.com/photo-1618482914248-29272d021005?crop=entropy&fit=crop&h=1000&w=2000","author":"Brandon Foley","tags":["servicestack",".net8","auth"],"date":"\/Date(1707609600000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/jwt-identity-auth","wordCount":1087,"lineCount":238},{"slug":"identity-auth-admin-ui","draft":false,"title":"Built-In Identity Auth Admin UI","summary":"Explore the new Identity Auth Admin UI for creating and managing Identity Auth users in .NET 8","image":"https://images.unsplash.com/photo-1563920443079-783e5c786b83?crop=entropy&fit=crop&h=1000&w=2000","author":"Lucy Bates","tags":["servicestack",".net8","auth"],"date":"\/Date(1707523200000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/identity-auth-admin-ui","wordCount":654,"lineCount":166},{"slug":"system-text-json-apis","draft":false,"title":"System.Text.Json ServiceStack APIs","summary":"ServiceStack .NET 8+ APIs can now be configured to use high-performance async System.Text.Json serialization","image":"https://images.unsplash.com/photo-1644325349124-d1756b79dd42?crop=entropy&fit=crop&h=1000&w=2000","author":"Gayle Smith","tags":["servicestack",".net8","json","apis"],"date":"\/Date(1707436800000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/system-text-json-apis","wordCount":944,"lineCount":213},{"slug":"openapi-v3","draft":false,"title":"OpenAPI v3 and Swagger UI","summary":"A walkthrough of the new OpenAPI v3 support in ServiceStack 8.1","image":"https://images.unsplash.com/photo-1496478981722-3ae516118a04?crop=entropy&fit=crop&h=1000&w=2000","author":"Brandon Foley","tags":["openapi",".net8"],"date":"\/Date(1707350400000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/openapi-v3","wordCount":1195,"lineCount":201},{"slug":"servicestack-endpoint-routing","draft":false,"title":"ServiceStack Endpoint Routing","summary":"ServiceStack .NET 8 is now more integrated then ever with support for ASP.NET Core Endpoint Routing and IOC","image":"https://images.unsplash.com/photo-1510022151265-1bb84d406531?crop=entropy&fit=crop&h=1000&w=2000","author":"Lucy Bates","tags":["servicestack",".net8","apis"],"date":"\/Date(1707264000000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/servicestack-endpoint-routing","wordCount":3169,"lineCount":620}],"podcasts":[{"slug":"razor-ssg-podcasts","draft":false,"title":"Podcasts now in Razor SSG","summary":"Razor SSG now includes support for Podcasts","tags":["razor","ssg","markdown"],"date":"\/Date(1727827200000-0000)\/","url":"https://media.servicestack.com/podcasts/razor-ssg-podcasts.mp3","wordCount":126,"lineCount":22},{"slug":"scalable-sqlite","draft":false,"title":"Scalable SQLite","summary":"Exploring different techniques in ServiceStack for building maximum value, high-performance Scalable SQLite Web Apps","tags":["sqlite","performance","scalability"],"date":"\/Date(1726704000000-0000)\/","url":"https://media.servicestack.com/podcasts/scalable-sqlite.mp3","wordCount":136,"lineCount":22},{"slug":"sqlite-request-logs","draft":false,"title":"SQLite Request Logging","summary":"Checking out ServiceStack's new SQLite-backed Request Logs feature and enhanced log querying and filtering in the Admin UI","tags":["sqlite","logging","admin-ui","api"],"date":"\/Date(1726531200000-0000)\/","url":"https://media.servicestack.com/podcasts/sqlite-request-logs.mp3","wordCount":162,"lineCount":29},{"slug":"background-jobs","draft":false,"title":"Background Jobs","summary":"Taking a deep dive into Background Jobs, a new library for .NET 8 Apps for simplifying task scheduling and management","tags":["jobs","admin-ui","commands","api"],"date":"\/Date(1726099200000-0000)\/","url":"https://media.servicestack.com/podcasts/background-jobs.mp3","wordCount":517,"lineCount":51},{"slug":"v8-4-release","draft":false,"title":"ServiceStack v8.4 Release","summary":"The latest features and improvements in ServiceStack v8.4 covering Background Jobs, SQLite Request Logs, Scalable SQLite Apps and more!","tags":["release","jobs","logging","admin-ui","commands","api"],"date":"\/Date(1726012800000-0000)\/","url":"https://media.servicestack.com/podcasts/v8-4-release.mp3","wordCount":545,"lineCount":52},{"slug":"commands-feature","draft":false,"title":"Commands Feature","summary":"Looking into how to utilize Commands to build more robust and observable systems","tags":["commands","admin-ui","api"],"date":"\/Date(1719964800000-0000)\/","url":"https://media.servicestack.com/podcasts/commands-feature.mp3","wordCount":153,"lineCount":31},{"slug":"simple-auth-microservices","draft":false,"title":"Simple Auth Story for .NET 8 Microservices","summary":"Taking a look at the simple \"user-free\" Auth story made possible with API Keys and Admin UI that's ideal for .NET 8 Microservices","tags":[".net8","auth","apikeys"],"date":"\/Date(1719878400000-0000)\/","url":"https://media.servicestack.com/podcasts/simple-auth-microservices.mp3","wordCount":170,"lineCount":36},{"slug":"apikeys","draft":false,"title":"Using API Keys to secure .NET 8 APIs","summary":"Exploring the new API Keys Identity Auth feature and how its Admin UI enables simple fine-grained access control in ServiceStack .NET 8 APIs","tags":["apikeys",".net8","auth","rdbms"],"date":"\/Date(1719792000000-0000)\/","url":"https://media.servicestack.com/podcasts/apikeys.mp3","wordCount":181,"lineCount":37},{"slug":"v8-3-release","draft":false,"title":"ServiceStack v8.3 Release","summary":"The latest features and improvements in ServiceStack v8.3 covering Commands Feature, API Keys, Integrated Admin UIs and more!","tags":["release","apikeys","admin-ui","commands","api"],"date":"\/Date(1718582400000-0000)\/","url":"https://media.servicestack.com/podcasts/v8-3-release.mp3","wordCount":187,"lineCount":42},{"slug":"redis-outputcache","draft":false,"title":"ASP.NET Core Output Caching","summary":"A look at how to use ASP.NET Core Output Caching and ServiceStack.Redis to cache the response of ServiceStack APIs in Redis","tags":["caching",".net8","redis"],"date":"\/Date(1717545600000-0000)\/","url":"https://media.servicestack.com/podcasts/redis-outputcache.mp3","wordCount":138,"lineCount":20},{"slug":"asp-rate-limiter-middleware","draft":false,"title":"ASP.NET Core Rate Limiter Middleware","summary":"A guide explaining how ASP.NET Core's Rate Limiter Middleware can be used to protect ServiceStack APIs and Apps from abuse","tags":[".net8","auth","middleware"],"date":"\/Date(1712534400000-0000)\/","url":"https://media.servicestack.com/podcasts/asp-rate-limiter-middleware.mp3","wordCount":174,"lineCount":26},{"slug":"net8-react-spa-template","draft":false,"title":"New React SPA Template","summary":"A tour of the features in the new enhanced Vite TypeScript React SPA template for .NET 8","tags":["template","react",".net8","autoquery"],"date":"\/Date(1709683200000-0000)\/","url":"https://media.servicestack.com/podcasts/net8-react-spa-template.mp3","wordCount":670,"lineCount":43},{"slug":"net8-vue-spa-template","draft":false,"title":"New Vue SPA Template","summary":"Getting to know the advanced features and capabilities of the enhanced Vite TypeScript Vue SPA template for .NET 8","tags":["template","vue",".net8","autoquery"],"date":"\/Date(1709596800000-0000)\/","url":"https://media.servicestack.com/podcasts/net8-vue-spa-template.mp3","wordCount":232,"lineCount":43},{"slug":"v8-2-release","draft":false,"title":"ServiceStack v8.2 Release","summary":"All about ServiceStack v8.2 Release new Vue & React Vite SPA Tailwind Markdown powered Templates, integrated Identity Auth, new Kotlin Compose Multiplatform template and new Vite Press Plugin","tags":["release","vue","react","vite","markdown","kotlin"],"date":"\/Date(1709510400000-0000)\/","url":"https://media.servicestack.com/podcasts/v8-2-release.mp3","wordCount":797,"lineCount":54},{"slug":"v8-1-release","draft":false,"title":"ServiceStack v8.1 Release","summary":"ServiceStack v8.1 is here with a host of new features including full integration with Identity Auth, ASP .NET IOC, Endpoint Routing, System.Text.Json APIs, enhanced Admin UIs with JWT support, and much more!","tags":["release","identity-auth","ioc","json","openapi","swagger"],"date":"\/Date(1707177600000-0000)\/","url":"https://media.servicestack.com/podcasts/v8-1-release.mp3","wordCount":245,"lineCount":48}]}
\ No newline at end of file
+{"pages":[{"slug":"community-rules","draft":false,"title":"Community Rules","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/community-rules","wordCount":408,"lineCount":37},{"slug":"mail-preferences","draft":false,"title":"Manage your mail preferences","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/mail-preferences","wordCount":113,"lineCount":13},{"slug":"privacy","draft":false,"title":"Privacy Policy","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/privacy","wordCount":748,"lineCount":68},{"slug":"signup-confirmed","draft":false,"title":"Welcome to MyApp Newsletter","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/signup-confirmed","wordCount":53,"lineCount":8},{"slug":"speaking","draft":false,"title":"Speaking","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/speaking","wordCount":266,"lineCount":47},{"slug":"uses","draft":false,"title":"Things I use & love","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/uses","wordCount":473,"lineCount":59},{"slug":"creatorkit/about","draft":false,"title":"About","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/about","wordCount":597,"lineCount":100,"order":1},{"slug":"creatorkit/install","draft":false,"title":"Install","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/install","wordCount":1724,"lineCount":266,"order":2},{"slug":"creatorkit/customize","draft":false,"title":"Customize","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/customize","wordCount":430,"lineCount":136,"order":3},{"slug":"creatorkit/components","draft":false,"title":"Components","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/components","wordCount":855,"lineCount":195,"order":4},{"slug":"creatorkit/integrations","draft":false,"title":"Integrations","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/integrations","wordCount":107,"lineCount":29,"order":5},{"slug":"creatorkit/portal-overview","draft":false,"title":"Overview","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/portal-overview","wordCount":163,"lineCount":40,"group":"Portal","order":6},{"slug":"creatorkit/portal-messages","draft":false,"title":"Messages","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/portal-messages","wordCount":1047,"lineCount":250,"group":"Portal","order":7},{"slug":"creatorkit/portal-mailruns","draft":false,"title":"Mail Runs","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/portal-mailruns","wordCount":1303,"lineCount":277,"group":"Portal","order":8},{"slug":"creatorkit/portal-posts","draft":false,"title":"Posts","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/portal-posts","wordCount":180,"lineCount":28,"group":"Portal","order":9}],"whatsnew":[],"videos":[],"posts":[{"slug":"razor-ssg-podcasts","draft":false,"title":"Podcasts now in Razor SSG","summary":"Razor SSG now includes support for Podcasts","image":"https://images.unsplash.com/photo-1482442120256-9c03866de390?crop=entropy&fit=crop&h=1000&w=2000","author":"Gayle Smith","tags":["razor","ssg","markdown"],"date":"\/Date(1727827200000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/razor-ssg-podcasts","wordCount":1028,"lineCount":167},{"slug":"jwt-identity-auth","draft":false,"title":"ASP.NET Core JWT Identity Auth","summary":"Learn about integration and value added features of ASP.NET Core JWT Identity Auth","image":"https://images.unsplash.com/photo-1618482914248-29272d021005?crop=entropy&fit=crop&h=1000&w=2000","author":"Brandon Foley","tags":["servicestack",".net8","auth"],"date":"\/Date(1707609600000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/jwt-identity-auth","wordCount":1087,"lineCount":238},{"slug":"identity-auth-admin-ui","draft":false,"title":"Built-In Identity Auth Admin UI","summary":"Explore the new Identity Auth Admin UI for creating and managing Identity Auth users in .NET 8","image":"https://images.unsplash.com/photo-1563920443079-783e5c786b83?crop=entropy&fit=crop&h=1000&w=2000","author":"Lucy Bates","tags":["servicestack",".net8","auth"],"date":"\/Date(1707523200000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/identity-auth-admin-ui","wordCount":654,"lineCount":166},{"slug":"system-text-json-apis","draft":false,"title":"System.Text.Json ServiceStack APIs","summary":"ServiceStack .NET 8+ APIs can now be configured to use high-performance async System.Text.Json serialization","image":"https://images.unsplash.com/photo-1644325349124-d1756b79dd42?crop=entropy&fit=crop&h=1000&w=2000","author":"Gayle Smith","tags":["servicestack",".net8","json","apis"],"date":"\/Date(1707436800000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/system-text-json-apis","wordCount":944,"lineCount":213},{"slug":"openapi-v3","draft":false,"title":"OpenAPI v3 and Swagger UI","summary":"A walkthrough of the new OpenAPI v3 support in ServiceStack 8.1","image":"https://images.unsplash.com/photo-1496478981722-3ae516118a04?crop=entropy&fit=crop&h=1000&w=2000","author":"Brandon Foley","tags":["openapi",".net8"],"date":"\/Date(1707350400000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/openapi-v3","wordCount":1195,"lineCount":201},{"slug":"servicestack-endpoint-routing","draft":false,"title":"ServiceStack Endpoint Routing","summary":"ServiceStack .NET 8 is now more integrated then ever with support for ASP.NET Core Endpoint Routing and IOC","image":"https://images.unsplash.com/photo-1510022151265-1bb84d406531?crop=entropy&fit=crop&h=1000&w=2000","author":"Lucy Bates","tags":["servicestack",".net8","apis"],"date":"\/Date(1707264000000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/servicestack-endpoint-routing","wordCount":3169,"lineCount":620}],"podcasts":[{"slug":"razor-ssg-podcasts","draft":false,"title":"Podcasts now in Razor SSG","summary":"Razor SSG now includes support for Podcasts","tags":["razor","ssg","markdown"],"date":"\/Date(1727827200000-0000)\/","url":"https://media.servicestack.com/podcasts/razor-ssg-podcasts.mp3","wordCount":126,"lineCount":22},{"slug":"scalable-sqlite","draft":false,"title":"Scalable SQLite","summary":"Exploring different techniques in ServiceStack for building maximum value, high-performance Scalable SQLite Web Apps","tags":["sqlite","performance","scalability"],"date":"\/Date(1726704000000-0000)\/","url":"https://media.servicestack.com/podcasts/scalable-sqlite.mp3","wordCount":136,"lineCount":22},{"slug":"sqlite-request-logs","draft":false,"title":"SQLite Request Logging","summary":"Checking out ServiceStack's new SQLite-backed Request Logs feature and enhanced log querying and filtering in the Admin UI","tags":["sqlite","logging","admin-ui","api"],"date":"\/Date(1726531200000-0000)\/","url":"https://media.servicestack.com/podcasts/sqlite-request-logs.mp3","wordCount":162,"lineCount":29},{"slug":"background-jobs","draft":false,"title":"Background Jobs","summary":"Taking a deep dive into Background Jobs, a new library for .NET 8 Apps for simplifying task scheduling and management","tags":["jobs","admin-ui","commands","api"],"date":"\/Date(1726099200000-0000)\/","url":"https://media.servicestack.com/podcasts/background-jobs.mp3","wordCount":517,"lineCount":51},{"slug":"v8-4-release","draft":false,"title":"ServiceStack v8.4 Release","summary":"The latest features and improvements in ServiceStack v8.4 covering Background Jobs, SQLite Request Logs, Scalable SQLite Apps and more!","tags":["release","jobs","logging","admin-ui","commands","api"],"date":"\/Date(1726012800000-0000)\/","url":"https://media.servicestack.com/podcasts/v8-4-release.mp3","wordCount":545,"lineCount":52},{"slug":"commands-feature","draft":false,"title":"Commands Feature","summary":"Looking into how to utilize Commands to build more robust and observable systems","tags":["commands","admin-ui","api"],"date":"\/Date(1719964800000-0000)\/","url":"https://media.servicestack.com/podcasts/commands-feature.mp3","wordCount":153,"lineCount":31},{"slug":"simple-auth-microservices","draft":false,"title":"Simple Auth Story for .NET 8 Microservices","summary":"Taking a look at the simple \"user-free\" Auth story made possible with API Keys and Admin UI that's ideal for .NET 8 Microservices","tags":[".net8","auth","apikeys"],"date":"\/Date(1719878400000-0000)\/","url":"https://media.servicestack.com/podcasts/simple-auth-microservices.mp3","wordCount":170,"lineCount":36},{"slug":"apikeys","draft":false,"title":"Using API Keys to secure .NET 8 APIs","summary":"Exploring the new API Keys Identity Auth feature and how its Admin UI enables simple fine-grained access control in ServiceStack .NET 8 APIs","tags":["apikeys",".net8","auth","rdbms"],"date":"\/Date(1719792000000-0000)\/","url":"https://media.servicestack.com/podcasts/apikeys.mp3","wordCount":181,"lineCount":37},{"slug":"v8-3-release","draft":false,"title":"ServiceStack v8.3 Release","summary":"The latest features and improvements in ServiceStack v8.3 covering Commands Feature, API Keys, Integrated Admin UIs and more!","tags":["release","apikeys","admin-ui","commands","api"],"date":"\/Date(1718582400000-0000)\/","url":"https://media.servicestack.com/podcasts/v8-3-release.mp3","wordCount":187,"lineCount":42},{"slug":"redis-outputcache","draft":false,"title":"ASP.NET Core Output Caching","summary":"A look at how to use ASP.NET Core Output Caching and ServiceStack.Redis to cache the response of ServiceStack APIs in Redis","tags":["caching",".net8","redis"],"date":"\/Date(1717545600000-0000)\/","url":"https://media.servicestack.com/podcasts/redis-outputcache.mp3","wordCount":138,"lineCount":20},{"slug":"asp-rate-limiter-middleware","draft":false,"title":"ASP.NET Core Rate Limiter Middleware","summary":"A guide explaining how ASP.NET Core's Rate Limiter Middleware can be used to protect ServiceStack APIs and Apps from abuse","tags":[".net8","auth","middleware"],"date":"\/Date(1712534400000-0000)\/","url":"https://media.servicestack.com/podcasts/asp-rate-limiter-middleware.mp3","wordCount":174,"lineCount":26},{"slug":"net8-react-spa-template","draft":false,"title":"New React SPA Template","summary":"A tour of the features in the new enhanced Vite TypeScript React SPA template for .NET 8","tags":["template","react",".net8","autoquery"],"date":"\/Date(1709683200000-0000)\/","url":"https://media.servicestack.com/podcasts/net8-react-spa-template.mp3","wordCount":670,"lineCount":43},{"slug":"net8-vue-spa-template","draft":false,"title":"New Vue SPA Template","summary":"Getting to know the advanced features and capabilities of the enhanced Vite TypeScript Vue SPA template for .NET 8","tags":["template","vue",".net8","autoquery"],"date":"\/Date(1709596800000-0000)\/","url":"https://media.servicestack.com/podcasts/net8-vue-spa-template.mp3","wordCount":232,"lineCount":43},{"slug":"v8-2-release","draft":false,"title":"ServiceStack v8.2 Release","summary":"All about ServiceStack v8.2 Release new Vue & React Vite SPA Tailwind Markdown powered Templates, integrated Identity Auth, new Kotlin Compose Multiplatform template and new Vite Press Plugin","tags":["release","vue","react","vite","markdown","kotlin"],"date":"\/Date(1709510400000-0000)\/","url":"https://media.servicestack.com/podcasts/v8-2-release.mp3","wordCount":797,"lineCount":54},{"slug":"v8-1-release","draft":false,"title":"ServiceStack v8.1 Release","summary":"ServiceStack v8.1 is here with a host of new features including full integration with Identity Auth, ASP .NET IOC, Endpoint Routing, System.Text.Json APIs, enhanced Admin UIs with JWT support, and much more!","tags":["release","identity-auth","ioc","json","openapi","swagger"],"date":"\/Date(1707177600000-0000)\/","url":"https://media.servicestack.com/podcasts/v8-1-release.mp3","wordCount":245,"lineCount":48}]}
\ No newline at end of file
diff --git a/meta/2024/pages.json b/meta/2024/pages.json
index 78b6fcf..a07b09b 100644
--- a/meta/2024/pages.json
+++ b/meta/2024/pages.json
@@ -1 +1 @@
-[{"slug":"community-rules","draft":false,"title":"Community Rules","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/community-rules","wordCount":408,"lineCount":37},{"slug":"mail-preferences","draft":false,"title":"Manage your mail preferences","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/mail-preferences","wordCount":113,"lineCount":13},{"slug":"privacy","draft":false,"title":"Privacy Policy","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/privacy","wordCount":748,"lineCount":68},{"slug":"signup-confirmed","draft":false,"title":"Welcome to MyApp Newsletter","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/signup-confirmed","wordCount":53,"lineCount":8},{"slug":"speaking","draft":false,"title":"Speaking","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/speaking","wordCount":266,"lineCount":47},{"slug":"uses","draft":false,"title":"Things I use & love","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/uses","wordCount":473,"lineCount":59},{"slug":"creatorkit/about","draft":false,"title":"About","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/about","wordCount":597,"lineCount":100,"order":1},{"slug":"creatorkit/install","draft":false,"title":"Install","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/install","wordCount":1724,"lineCount":266,"order":2},{"slug":"creatorkit/customize","draft":false,"title":"Customize","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/customize","wordCount":430,"lineCount":136,"order":3},{"slug":"creatorkit/components","draft":false,"title":"Components","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/components","wordCount":855,"lineCount":195,"order":4},{"slug":"creatorkit/integrations","draft":false,"title":"Integrations","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/integrations","wordCount":107,"lineCount":29,"order":5},{"slug":"creatorkit/portal-overview","draft":false,"title":"Overview","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/portal-overview","wordCount":163,"lineCount":40,"group":"Portal","order":6},{"slug":"creatorkit/portal-messages","draft":false,"title":"Messages","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/portal-messages","wordCount":1047,"lineCount":250,"group":"Portal","order":7},{"slug":"creatorkit/portal-mailruns","draft":false,"title":"Mail Runs","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/portal-mailruns","wordCount":1303,"lineCount":277,"group":"Portal","order":8},{"slug":"creatorkit/portal-posts","draft":false,"title":"Posts","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/portal-posts","wordCount":180,"lineCount":28,"group":"Portal","order":9}]
\ No newline at end of file
+[{"slug":"community-rules","draft":false,"title":"Community Rules","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/community-rules","wordCount":408,"lineCount":37},{"slug":"mail-preferences","draft":false,"title":"Manage your mail preferences","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/mail-preferences","wordCount":113,"lineCount":13},{"slug":"privacy","draft":false,"title":"Privacy Policy","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/privacy","wordCount":748,"lineCount":68},{"slug":"signup-confirmed","draft":false,"title":"Welcome to MyApp Newsletter","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/signup-confirmed","wordCount":53,"lineCount":8},{"slug":"speaking","draft":false,"title":"Speaking","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/speaking","wordCount":266,"lineCount":47},{"slug":"uses","draft":false,"title":"Things I use & love","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/uses","wordCount":473,"lineCount":59},{"slug":"creatorkit/about","draft":false,"title":"About","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/about","wordCount":597,"lineCount":100,"order":1},{"slug":"creatorkit/install","draft":false,"title":"Install","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/install","wordCount":1724,"lineCount":266,"order":2},{"slug":"creatorkit/customize","draft":false,"title":"Customize","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/customize","wordCount":430,"lineCount":136,"order":3},{"slug":"creatorkit/components","draft":false,"title":"Components","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/components","wordCount":855,"lineCount":195,"order":4},{"slug":"creatorkit/integrations","draft":false,"title":"Integrations","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/integrations","wordCount":107,"lineCount":29,"order":5},{"slug":"creatorkit/portal-overview","draft":false,"title":"Overview","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/portal-overview","wordCount":163,"lineCount":40,"group":"Portal","order":6},{"slug":"creatorkit/portal-messages","draft":false,"title":"Messages","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/portal-messages","wordCount":1047,"lineCount":250,"group":"Portal","order":7},{"slug":"creatorkit/portal-mailruns","draft":false,"title":"Mail Runs","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/portal-mailruns","wordCount":1303,"lineCount":277,"group":"Portal","order":8},{"slug":"creatorkit/portal-posts","draft":false,"title":"Posts","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/portal-posts","wordCount":180,"lineCount":28,"group":"Portal","order":9}]
\ No newline at end of file
diff --git a/meta/all.json b/meta/all.json
index 8838114..27ca994 100644
--- a/meta/all.json
+++ b/meta/all.json
@@ -1 +1 @@
-{"pages":[{"slug":"community-rules","draft":false,"title":"Community Rules","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/community-rules","wordCount":408,"lineCount":37},{"slug":"mail-preferences","draft":false,"title":"Manage your mail preferences","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/mail-preferences","wordCount":113,"lineCount":13},{"slug":"privacy","draft":false,"title":"Privacy Policy","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/privacy","wordCount":748,"lineCount":68},{"slug":"signup-confirmed","draft":false,"title":"Welcome to MyApp Newsletter","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/signup-confirmed","wordCount":53,"lineCount":8},{"slug":"speaking","draft":false,"title":"Speaking","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/speaking","wordCount":266,"lineCount":47},{"slug":"uses","draft":false,"title":"Things I use & love","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/uses","wordCount":473,"lineCount":59},{"slug":"creatorkit/about","draft":false,"title":"About","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/about","wordCount":597,"lineCount":100,"order":1},{"slug":"creatorkit/install","draft":false,"title":"Install","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/install","wordCount":1724,"lineCount":266,"order":2},{"slug":"creatorkit/customize","draft":false,"title":"Customize","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/customize","wordCount":430,"lineCount":136,"order":3},{"slug":"creatorkit/components","draft":false,"title":"Components","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/components","wordCount":855,"lineCount":195,"order":4},{"slug":"creatorkit/integrations","draft":false,"title":"Integrations","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/integrations","wordCount":107,"lineCount":29,"order":5},{"slug":"creatorkit/portal-overview","draft":false,"title":"Overview","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/portal-overview","wordCount":163,"lineCount":40,"group":"Portal","order":6},{"slug":"creatorkit/portal-messages","draft":false,"title":"Messages","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/portal-messages","wordCount":1047,"lineCount":250,"group":"Portal","order":7},{"slug":"creatorkit/portal-mailruns","draft":false,"title":"Mail Runs","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/portal-mailruns","wordCount":1303,"lineCount":277,"group":"Portal","order":8},{"slug":"creatorkit/portal-posts","draft":false,"title":"Posts","tags":[],"date":"\/Date(1730388242354)\/","url":"https://razor-ssg.web-templates.io/creatorkit/portal-posts","wordCount":180,"lineCount":28,"group":"Portal","order":9}],"whatsnew":[{"slug":"feature1","draft":false,"title":"Planetaria","image":"./img/whatsnew/Planetaria/cover.svg","tags":[],"date":"\/Date(1679961600000-0000)\/","content":"Welcome to the world of Planetaria, a groundbreaking new product that is poised to revolutionize the way we explore space. \nAt Planetaria, we believe that the wonders of space should be accessible to everyone, not just a privileged few. \nThat's why we've created technology that empowers civilians to explore space on their own terms, without needing to rely \non government agencies or billionaire entrepreneurs.\n\nOur mission is to democratize space exploration and enable people from all walks of life to experience the thrill of \nventuring beyond our planet. With Planetaria, you'll have the tools and resources you need to embark on your own space missions, \nwhether you're a hobbyist, a scientist, or an adventurer. From designing and building your own spacecraft to conducting experiments \nin microgravity, the possibilities are endless.","url":"http://planetaria.tech","wordCount":135,"lineCount":14,"group":"Planetaria"},{"slug":"feature1","draft":false,"title":"OpenShuttle","image":"./img/whatsnew/OpenShuttle/cover.svg","tags":[],"date":"\/Date(1679097600000-0000)\/","content":"Introducing OpenShuttle, the revolutionary new product that is set to change the space industry forever. OpenShuttle is a cutting-edge\nplatform that provides detailed schematics for the very first rocket designed by me, which successfully made it to orbit. \nThis incredible product is designed to give space enthusiasts and professionals alike access to the groundbreaking technology that \nwas used to achieve this monumental feat.\n\nOpenShuttle is the result of years of hard work and dedication, and I am thrilled to finally be able to share it with the world. \nWith its detailed schematics, OpenShuttle provides an unprecedented level of insight into the inner workings of the rocket, \nallowing users to explore the technology that made history.","url":"https://example.org","wordCount":119,"lineCount":13,"group":"OpenShuttle"},{"slug":"feature1","draft":false,"title":"Animaginary","image":"./img/whatsnew/Animaginary/cover.svg","tags":[],"date":"\/Date(1678233600000-0000)\/","content":"Introducing Animaginary, the next generation web animation library that's taking the world by storm. \nAnimaginary is a high performance library that's hand-written in optimized WebAssembly (WASM), \nmaking it one of the fastest and most efficient animation tools available today.\n\nBuilt with performance in mind, Animaginary delivers stunning animations that are both smooth and seamless, even on lower-end devices. \nThe library is designed to provide developers with a powerful toolset that makes it easy to create \ncomplex animations that would otherwise be time-consuming and challenging to build.","url":"https://example.org","wordCount":92,"lineCount":12,"group":"Animaginary"}],"videos":[{"slug":"video1","draft":false,"title":"Using Razor SSG to Create Websites in GitHub Codespaces","tags":["razor-pages","ssg","tailwind","codespaces"],"date":"\/Date(1680048000000+0000)\/","content":"This video takes an in-depth look at the [razor-ssg](https://razor-ssg.web-templates.io) ServiceStack template, a powerful tool that \nharnesses the power of .NET Razor Pages to provide seamless static site generation (SSG) capabilities \n\nWith GitHub Codespaces integration, you can develop, test, and manage your application all within your browser, eliminating the need \nfor a dedicated development environment and expediting your workflow, which can all be done on the go from an iPad","url":"https://youtu.be/MRQMBrXi5Sc","wordCount":88,"lineCount":12,"group":"projects"},{"slug":"video1","draft":false,"title":"Instantly Manage your data using AutoQueryGrid Vue","tags":["vue","autoquery"],"date":"\/Date(1678924800000+0000)\/","content":"This walkthrough explores the ServiceStack Vue 3 library and the functionality of the AutoQueryGrid component. The AutoQueryGrid component simplifies the integration of AutoQuery services by generating a customizable UI. \n\nBy following this guide, you'll learn how to effectively utilize these tools to enhance your application's user interface and overall user experience.","url":"https://youtu.be/znCoC-Ct0Ps","wordCount":63,"lineCount":10,"group":"vue"},{"slug":"video2","draft":false,"title":"Vue 3 Tailwind Components Library","tags":["vue","autoquery"],"date":"\/Date(1676332800000+0000)\/","content":"In this video, we demonstrate using the @servicestack/vue components library for Vue.js 3 Multipage Apps (MPAs) along with the `vue-mjs` template. \n\nThe template illustrates building content-heavy or complex sites while avoiding the intricacies of Single Page Apps (SPAs) through the use of JavaScript Modules, Tailwind, Vue.js, Razor Pages, and ServiceStack.","url":"https://youtu.be/YIa0w6whe2U","wordCount":61,"lineCount":9,"group":"vue"},{"slug":"video2","draft":false,"title":"Modern Razor Pages & MVC .NET Tailwind templates","tags":["razor-pages","mvc","tailwind","vue"],"date":"\/Date(1625529600000+0000)\/","content":"ServiceStack templates provide a wide range of options when it comes to using Razor Pages in your .NET application\n\nThese templates come with Tailwind, JS Modules, and Vue components already built-in,\nmaking it easy to build hybrid apps containing both Server-Side Rendering (SSR) and static resources\n\n### Live Demos\n- https://razor-tailwind.web-templates.io\n- https://web-tailwind.web-templates.io\n- https://mvc-tailwind.web-templates.io\n- https://vue-mjs.web-templates.io\n- https://razor-pages.web-templates.io","url":"https://youtu.be/SyppvQB7IPs","wordCount":73,"lineCount":18,"group":"projects"}],"posts":[{"slug":"razor-ssg-podcasts","draft":false,"title":"Podcasts now in Razor SSG","summary":"Razor SSG now includes support for Podcasts","image":"https://images.unsplash.com/photo-1482442120256-9c03866de390?crop=entropy&fit=crop&h=1000&w=2000","author":"Gayle Smith","tags":["razor","ssg","markdown"],"date":"\/Date(1727827200000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/razor-ssg-podcasts","wordCount":1028,"lineCount":167},{"slug":"jwt-identity-auth","draft":false,"title":"ASP.NET Core JWT Identity Auth","summary":"Learn about integration and value added features of ASP.NET Core JWT Identity Auth","image":"https://images.unsplash.com/photo-1618482914248-29272d021005?crop=entropy&fit=crop&h=1000&w=2000","author":"Brandon Foley","tags":["servicestack",".net8","auth"],"date":"\/Date(1707609600000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/jwt-identity-auth","wordCount":1087,"lineCount":238},{"slug":"identity-auth-admin-ui","draft":false,"title":"Built-In Identity Auth Admin UI","summary":"Explore the new Identity Auth Admin UI for creating and managing Identity Auth users in .NET 8","image":"https://images.unsplash.com/photo-1563920443079-783e5c786b83?crop=entropy&fit=crop&h=1000&w=2000","author":"Lucy Bates","tags":["servicestack",".net8","auth"],"date":"\/Date(1707523200000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/identity-auth-admin-ui","wordCount":654,"lineCount":166},{"slug":"system-text-json-apis","draft":false,"title":"System.Text.Json ServiceStack APIs","summary":"ServiceStack .NET 8+ APIs can now be configured to use high-performance async System.Text.Json serialization","image":"https://images.unsplash.com/photo-1644325349124-d1756b79dd42?crop=entropy&fit=crop&h=1000&w=2000","author":"Gayle Smith","tags":["servicestack",".net8","json","apis"],"date":"\/Date(1707436800000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/system-text-json-apis","wordCount":944,"lineCount":213},{"slug":"openapi-v3","draft":false,"title":"OpenAPI v3 and Swagger UI","summary":"A walkthrough of the new OpenAPI v3 support in ServiceStack 8.1","image":"https://images.unsplash.com/photo-1496478981722-3ae516118a04?crop=entropy&fit=crop&h=1000&w=2000","author":"Brandon Foley","tags":["openapi",".net8"],"date":"\/Date(1707350400000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/openapi-v3","wordCount":1195,"lineCount":201},{"slug":"servicestack-endpoint-routing","draft":false,"title":"ServiceStack Endpoint Routing","summary":"ServiceStack .NET 8 is now more integrated then ever with support for ASP.NET Core Endpoint Routing and IOC","image":"https://images.unsplash.com/photo-1510022151265-1bb84d406531?crop=entropy&fit=crop&h=1000&w=2000","author":"Lucy Bates","tags":["servicestack",".net8","apis"],"date":"\/Date(1707264000000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/servicestack-endpoint-routing","wordCount":3169,"lineCount":620},{"slug":"razor-ssg-new-blog-features","draft":false,"title":"New Blogging features in Razor SSG","summary":"Explore the new Blogging Features in Razor SSG","image":"https://images.unsplash.com/photo-1486312338219-ce68d2c6f44d?crop=entropy&fit=crop&h=1000&w=2000","author":"Lucy Bates","tags":["razor","markdown","blog","dev"],"date":"\/Date(1692748800000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/razor-ssg-new-blog-features","wordCount":1301,"lineCount":337},{"slug":"razor-ssg","draft":false,"title":"Introducing Razor SSG","summary":"Create fast, beautiful statically rendered Razor Websites & Blogs","image":"https://images.unsplash.com/photo-1579767684138-a57e917d30aa?crop=entropy&fit=crop&h=1000&w=2000","author":"Lucy Bates","tags":["razor","markdown","blog","dev"],"date":"\/Date(1680134400000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/razor-ssg","wordCount":3045,"lineCount":605},{"slug":"javascript","draft":false,"title":"Simple, Modern JavaScript","summary":"Learn about JS Modules, Vue 3 and available rich UI Components","image":"https://images.unsplash.com/photo-1497515114629-f71d768fd07c?crop=entropy&fit=crop&h=1000&w=2000","author":"Brandon Foley","tags":["js","dev"],"date":"\/Date(1675209600000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/javascript","wordCount":3349,"lineCount":674},{"slug":"start","draft":false,"title":"Getting Started","summary":"Found out how to use these template features","image":"https://images.unsplash.com/photo-1533090161767-e6ffed986c88?crop=entropy&fit=crop&h=1000&w=2000","author":"Gayle Smith","tags":["js","dev","tailwind"],"date":"\/Date(1674259200000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/start","wordCount":294,"lineCount":77},{"slug":"rider","draft":false,"title":"Develop using JetBrains Rider","summary":"Setting up & exploring development workflow in Rider","image":"https://images.unsplash.com/photo-1472289065668-ce650ac443d2?crop=entropy&fit=crop&h=1000&w=2000","author":"Gayle Smith","tags":["c#","dev"],"date":"\/Date(1673395200000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/rider","wordCount":473,"lineCount":78},{"slug":"vs","draft":false,"title":"Develop using Visual Studio","summary":"Exploring development workflow in VS Code and Visual Studio .NET","image":"https://images.unsplash.com/photo-1513542789411-b6a5d4f31634?crop=entropy&fit=crop&h=1000&w=2000","author":"Lucy Bates","tags":["c#","dev"],"date":"\/Date(1673308800000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/vs","wordCount":1326,"lineCount":76},{"slug":"deploy","draft":false,"title":"Deployment with GitHub Actions","summary":"Configuring your GitHub repo for SSH and CDN deployments","image":"https://images.unsplash.com/photo-1485841890310-6a055c88698a?crop=entropy&fit=crop&h=1000&w=2000","author":"Gayle Smith","tags":["github-actions","devops"],"date":"\/Date(1672531200000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/deploy","wordCount":723,"lineCount":107},{"slug":"typography","draft":false,"title":"Tailwind Typography","summary":"tailwindcss/typography enabled for Markdown pages","image":"https://images.unsplash.com/photo-1497250681960-ef046c08a56e?crop=entropy&fit=crop&h=1000&w=2000","author":"Lucy Bates","tags":["tailwind","markdown"],"date":"\/Date(1672444800000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/typography","wordCount":654,"lineCount":85},{"slug":"hetzner-cloud","draft":false,"title":"In pursuit of the best value US cloud provider","summary":"We've been using AWS at ServiceStack for 10+ years, it's served us well but suffers from complex & expensive pricing","image":"https://images.unsplash.com/photo-1451187580459-43490279c0fa?crop=entropy&fit=crop&h=1000&w=2000","author":"Brandon Foley","tags":["dev","hosting","devops"],"date":"\/Date(1662422400000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/hetzner-cloud","wordCount":2712,"lineCount":227},{"slug":"typesense","draft":false,"title":"Real-time search with Typesense","summary":"As part of migrating docs to VitePress we've added UX improvements like instant search powered by Typesense!","image":"https://images.unsplash.com/photo-1473163928189-364b2c4e1135?crop=entropy&fit=crop&h=1000&w=2000","author":"Lucy Bates","tags":["dev","docs"],"date":"\/Date(1636329600000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/typesense","wordCount":4546,"lineCount":386},{"slug":"jekyll-to-vitepress","draft":false,"title":"Migrating from Jekyll to VitePress","summary":"Since Jekyll support has been officially sunset, we decided to migrate our docs site to VitePress","image":"https://images.unsplash.com/photo-1524668951403-d44b28200ce0?crop=entropy&fit=crop&h=1000&w=2000","author":"Lucy Bates","tags":["docs","markdown"],"date":"\/Date(1635724800000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/jekyll-to-vitepress","wordCount":2481,"lineCount":355}],"podcasts":[{"slug":"razor-ssg-podcasts","draft":false,"title":"Podcasts now in Razor SSG","summary":"Razor SSG now includes support for Podcasts","tags":["razor","ssg","markdown"],"date":"\/Date(1727827200000-0000)\/","url":"https://media.servicestack.com/podcasts/razor-ssg-podcasts.mp3","wordCount":126,"lineCount":22},{"slug":"scalable-sqlite","draft":false,"title":"Scalable SQLite","summary":"Exploring different techniques in ServiceStack for building maximum value, high-performance Scalable SQLite Web Apps","tags":["sqlite","performance","scalability"],"date":"\/Date(1726704000000-0000)\/","url":"https://media.servicestack.com/podcasts/scalable-sqlite.mp3","wordCount":136,"lineCount":22},{"slug":"sqlite-request-logs","draft":false,"title":"SQLite Request Logging","summary":"Checking out ServiceStack's new SQLite-backed Request Logs feature and enhanced log querying and filtering in the Admin UI","tags":["sqlite","logging","admin-ui","api"],"date":"\/Date(1726531200000-0000)\/","url":"https://media.servicestack.com/podcasts/sqlite-request-logs.mp3","wordCount":162,"lineCount":29},{"slug":"background-jobs","draft":false,"title":"Background Jobs","summary":"Taking a deep dive into Background Jobs, a new library for .NET 8 Apps for simplifying task scheduling and management","tags":["jobs","admin-ui","commands","api"],"date":"\/Date(1726099200000-0000)\/","url":"https://media.servicestack.com/podcasts/background-jobs.mp3","wordCount":517,"lineCount":51},{"slug":"v8-4-release","draft":false,"title":"ServiceStack v8.4 Release","summary":"The latest features and improvements in ServiceStack v8.4 covering Background Jobs, SQLite Request Logs, Scalable SQLite Apps and more!","tags":["release","jobs","logging","admin-ui","commands","api"],"date":"\/Date(1726012800000-0000)\/","url":"https://media.servicestack.com/podcasts/v8-4-release.mp3","wordCount":545,"lineCount":52},{"slug":"commands-feature","draft":false,"title":"Commands Feature","summary":"Looking into how to utilize Commands to build more robust and observable systems","tags":["commands","admin-ui","api"],"date":"\/Date(1719964800000-0000)\/","url":"https://media.servicestack.com/podcasts/commands-feature.mp3","wordCount":153,"lineCount":31},{"slug":"simple-auth-microservices","draft":false,"title":"Simple Auth Story for .NET 8 Microservices","summary":"Taking a look at the simple \"user-free\" Auth story made possible with API Keys and Admin UI that's ideal for .NET 8 Microservices","tags":[".net8","auth","apikeys"],"date":"\/Date(1719878400000-0000)\/","url":"https://media.servicestack.com/podcasts/simple-auth-microservices.mp3","wordCount":170,"lineCount":36},{"slug":"apikeys","draft":false,"title":"Using API Keys to secure .NET 8 APIs","summary":"Exploring the new API Keys Identity Auth feature and how its Admin UI enables simple fine-grained access control in ServiceStack .NET 8 APIs","tags":["apikeys",".net8","auth","rdbms"],"date":"\/Date(1719792000000-0000)\/","url":"https://media.servicestack.com/podcasts/apikeys.mp3","wordCount":181,"lineCount":37},{"slug":"v8-3-release","draft":false,"title":"ServiceStack v8.3 Release","summary":"The latest features and improvements in ServiceStack v8.3 covering Commands Feature, API Keys, Integrated Admin UIs and more!","tags":["release","apikeys","admin-ui","commands","api"],"date":"\/Date(1718582400000-0000)\/","url":"https://media.servicestack.com/podcasts/v8-3-release.mp3","wordCount":187,"lineCount":42},{"slug":"redis-outputcache","draft":false,"title":"ASP.NET Core Output Caching","summary":"A look at how to use ASP.NET Core Output Caching and ServiceStack.Redis to cache the response of ServiceStack APIs in Redis","tags":["caching",".net8","redis"],"date":"\/Date(1717545600000-0000)\/","url":"https://media.servicestack.com/podcasts/redis-outputcache.mp3","wordCount":138,"lineCount":20},{"slug":"asp-rate-limiter-middleware","draft":false,"title":"ASP.NET Core Rate Limiter Middleware","summary":"A guide explaining how ASP.NET Core's Rate Limiter Middleware can be used to protect ServiceStack APIs and Apps from abuse","tags":[".net8","auth","middleware"],"date":"\/Date(1712534400000-0000)\/","url":"https://media.servicestack.com/podcasts/asp-rate-limiter-middleware.mp3","wordCount":174,"lineCount":26},{"slug":"net8-react-spa-template","draft":false,"title":"New React SPA Template","summary":"A tour of the features in the new enhanced Vite TypeScript React SPA template for .NET 8","tags":["template","react",".net8","autoquery"],"date":"\/Date(1709683200000-0000)\/","url":"https://media.servicestack.com/podcasts/net8-react-spa-template.mp3","wordCount":670,"lineCount":43},{"slug":"net8-vue-spa-template","draft":false,"title":"New Vue SPA Template","summary":"Getting to know the advanced features and capabilities of the enhanced Vite TypeScript Vue SPA template for .NET 8","tags":["template","vue",".net8","autoquery"],"date":"\/Date(1709596800000-0000)\/","url":"https://media.servicestack.com/podcasts/net8-vue-spa-template.mp3","wordCount":232,"lineCount":43},{"slug":"v8-2-release","draft":false,"title":"ServiceStack v8.2 Release","summary":"All about ServiceStack v8.2 Release new Vue & React Vite SPA Tailwind Markdown powered Templates, integrated Identity Auth, new Kotlin Compose Multiplatform template and new Vite Press Plugin","tags":["release","vue","react","vite","markdown","kotlin"],"date":"\/Date(1709510400000-0000)\/","url":"https://media.servicestack.com/podcasts/v8-2-release.mp3","wordCount":797,"lineCount":54},{"slug":"v8-1-release","draft":false,"title":"ServiceStack v8.1 Release","summary":"ServiceStack v8.1 is here with a host of new features including full integration with Identity Auth, ASP .NET IOC, Endpoint Routing, System.Text.Json APIs, enhanced Admin UIs with JWT support, and much more!","tags":["release","identity-auth","ioc","json","openapi","swagger"],"date":"\/Date(1707177600000-0000)\/","url":"https://media.servicestack.com/podcasts/v8-1-release.mp3","wordCount":245,"lineCount":48},{"slug":"v8-0-release","draft":false,"title":"ServiceStack v8.0 Release","summary":"ServiceStack v8 is here with all packages now including .net8.0 builds, all Project Templates upgraded to .NET 8, GitHub Actions now using .NET 8 Docker containers, new Tailwind Blazor, Razor Pages & MVC Templates now using ASP .NET Identity Auth & EF","tags":["release",".net8","docker","identity-auth","blazor","mvc","razor"],"date":"\/Date(1700438400000-0000)\/","url":"https://media.servicestack.com/podcasts/v8-0-release.mp3","wordCount":1213,"lineCount":63}]}
\ No newline at end of file
+{"pages":[{"slug":"community-rules","draft":false,"title":"Community Rules","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/community-rules","wordCount":408,"lineCount":37},{"slug":"mail-preferences","draft":false,"title":"Manage your mail preferences","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/mail-preferences","wordCount":113,"lineCount":13},{"slug":"privacy","draft":false,"title":"Privacy Policy","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/privacy","wordCount":748,"lineCount":68},{"slug":"signup-confirmed","draft":false,"title":"Welcome to MyApp Newsletter","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/signup-confirmed","wordCount":53,"lineCount":8},{"slug":"speaking","draft":false,"title":"Speaking","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/speaking","wordCount":266,"lineCount":47},{"slug":"uses","draft":false,"title":"Things I use & love","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/uses","wordCount":473,"lineCount":59},{"slug":"creatorkit/about","draft":false,"title":"About","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/about","wordCount":597,"lineCount":100,"order":1},{"slug":"creatorkit/install","draft":false,"title":"Install","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/install","wordCount":1724,"lineCount":266,"order":2},{"slug":"creatorkit/customize","draft":false,"title":"Customize","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/customize","wordCount":430,"lineCount":136,"order":3},{"slug":"creatorkit/components","draft":false,"title":"Components","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/components","wordCount":855,"lineCount":195,"order":4},{"slug":"creatorkit/integrations","draft":false,"title":"Integrations","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/integrations","wordCount":107,"lineCount":29,"order":5},{"slug":"creatorkit/portal-overview","draft":false,"title":"Overview","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/portal-overview","wordCount":163,"lineCount":40,"group":"Portal","order":6},{"slug":"creatorkit/portal-messages","draft":false,"title":"Messages","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/portal-messages","wordCount":1047,"lineCount":250,"group":"Portal","order":7},{"slug":"creatorkit/portal-mailruns","draft":false,"title":"Mail Runs","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/portal-mailruns","wordCount":1303,"lineCount":277,"group":"Portal","order":8},{"slug":"creatorkit/portal-posts","draft":false,"title":"Posts","tags":[],"date":"\/Date(1730390076054)\/","url":"https://razor-ssg.web-templates.io/creatorkit/portal-posts","wordCount":180,"lineCount":28,"group":"Portal","order":9}],"whatsnew":[{"slug":"feature1","draft":false,"title":"Planetaria","image":"./img/whatsnew/Planetaria/cover.svg","tags":[],"date":"\/Date(1679961600000-0000)\/","content":"Welcome to the world of Planetaria, a groundbreaking new product that is poised to revolutionize the way we explore space. \nAt Planetaria, we believe that the wonders of space should be accessible to everyone, not just a privileged few. \nThat's why we've created technology that empowers civilians to explore space on their own terms, without needing to rely \non government agencies or billionaire entrepreneurs.\n\nOur mission is to democratize space exploration and enable people from all walks of life to experience the thrill of \nventuring beyond our planet. With Planetaria, you'll have the tools and resources you need to embark on your own space missions, \nwhether you're a hobbyist, a scientist, or an adventurer. From designing and building your own spacecraft to conducting experiments \nin microgravity, the possibilities are endless.","url":"http://planetaria.tech","wordCount":135,"lineCount":14,"group":"Planetaria"},{"slug":"feature1","draft":false,"title":"OpenShuttle","image":"./img/whatsnew/OpenShuttle/cover.svg","tags":[],"date":"\/Date(1679097600000-0000)\/","content":"Introducing OpenShuttle, the revolutionary new product that is set to change the space industry forever. OpenShuttle is a cutting-edge\nplatform that provides detailed schematics for the very first rocket designed by me, which successfully made it to orbit. \nThis incredible product is designed to give space enthusiasts and professionals alike access to the groundbreaking technology that \nwas used to achieve this monumental feat.\n\nOpenShuttle is the result of years of hard work and dedication, and I am thrilled to finally be able to share it with the world. \nWith its detailed schematics, OpenShuttle provides an unprecedented level of insight into the inner workings of the rocket, \nallowing users to explore the technology that made history.","url":"https://example.org","wordCount":119,"lineCount":13,"group":"OpenShuttle"},{"slug":"feature1","draft":false,"title":"Animaginary","image":"./img/whatsnew/Animaginary/cover.svg","tags":[],"date":"\/Date(1678233600000-0000)\/","content":"Introducing Animaginary, the next generation web animation library that's taking the world by storm. \nAnimaginary is a high performance library that's hand-written in optimized WebAssembly (WASM), \nmaking it one of the fastest and most efficient animation tools available today.\n\nBuilt with performance in mind, Animaginary delivers stunning animations that are both smooth and seamless, even on lower-end devices. \nThe library is designed to provide developers with a powerful toolset that makes it easy to create \ncomplex animations that would otherwise be time-consuming and challenging to build.","url":"https://example.org","wordCount":92,"lineCount":12,"group":"Animaginary"}],"videos":[{"slug":"video1","draft":false,"title":"Using Razor SSG to Create Websites in GitHub Codespaces","tags":["razor-pages","ssg","tailwind","codespaces"],"date":"\/Date(1680048000000+0000)\/","content":"This video takes an in-depth look at the [razor-ssg](https://razor-ssg.web-templates.io) ServiceStack template, a powerful tool that \nharnesses the power of .NET Razor Pages to provide seamless static site generation (SSG) capabilities \n\nWith GitHub Codespaces integration, you can develop, test, and manage your application all within your browser, eliminating the need \nfor a dedicated development environment and expediting your workflow, which can all be done on the go from an iPad","url":"https://youtu.be/MRQMBrXi5Sc","wordCount":88,"lineCount":12,"group":"projects"},{"slug":"video1","draft":false,"title":"Instantly Manage your data using AutoQueryGrid Vue","tags":["vue","autoquery"],"date":"\/Date(1678924800000+0000)\/","content":"This walkthrough explores the ServiceStack Vue 3 library and the functionality of the AutoQueryGrid component. The AutoQueryGrid component simplifies the integration of AutoQuery services by generating a customizable UI. \n\nBy following this guide, you'll learn how to effectively utilize these tools to enhance your application's user interface and overall user experience.","url":"https://youtu.be/znCoC-Ct0Ps","wordCount":63,"lineCount":10,"group":"vue"},{"slug":"video2","draft":false,"title":"Vue 3 Tailwind Components Library","tags":["vue","autoquery"],"date":"\/Date(1676332800000+0000)\/","content":"In this video, we demonstrate using the @servicestack/vue components library for Vue.js 3 Multipage Apps (MPAs) along with the `vue-mjs` template. \n\nThe template illustrates building content-heavy or complex sites while avoiding the intricacies of Single Page Apps (SPAs) through the use of JavaScript Modules, Tailwind, Vue.js, Razor Pages, and ServiceStack.","url":"https://youtu.be/YIa0w6whe2U","wordCount":61,"lineCount":9,"group":"vue"},{"slug":"video2","draft":false,"title":"Modern Razor Pages & MVC .NET Tailwind templates","tags":["razor-pages","mvc","tailwind","vue"],"date":"\/Date(1625529600000+0000)\/","content":"ServiceStack templates provide a wide range of options when it comes to using Razor Pages in your .NET application\n\nThese templates come with Tailwind, JS Modules, and Vue components already built-in,\nmaking it easy to build hybrid apps containing both Server-Side Rendering (SSR) and static resources\n\n### Live Demos\n- https://razor-tailwind.web-templates.io\n- https://web-tailwind.web-templates.io\n- https://mvc-tailwind.web-templates.io\n- https://vue-mjs.web-templates.io\n- https://razor-pages.web-templates.io","url":"https://youtu.be/SyppvQB7IPs","wordCount":73,"lineCount":18,"group":"projects"}],"posts":[{"slug":"razor-ssg-podcasts","draft":false,"title":"Podcasts now in Razor SSG","summary":"Razor SSG now includes support for Podcasts","image":"https://images.unsplash.com/photo-1482442120256-9c03866de390?crop=entropy&fit=crop&h=1000&w=2000","author":"Gayle Smith","tags":["razor","ssg","markdown"],"date":"\/Date(1727827200000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/razor-ssg-podcasts","wordCount":1028,"lineCount":167},{"slug":"jwt-identity-auth","draft":false,"title":"ASP.NET Core JWT Identity Auth","summary":"Learn about integration and value added features of ASP.NET Core JWT Identity Auth","image":"https://images.unsplash.com/photo-1618482914248-29272d021005?crop=entropy&fit=crop&h=1000&w=2000","author":"Brandon Foley","tags":["servicestack",".net8","auth"],"date":"\/Date(1707609600000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/jwt-identity-auth","wordCount":1087,"lineCount":238},{"slug":"identity-auth-admin-ui","draft":false,"title":"Built-In Identity Auth Admin UI","summary":"Explore the new Identity Auth Admin UI for creating and managing Identity Auth users in .NET 8","image":"https://images.unsplash.com/photo-1563920443079-783e5c786b83?crop=entropy&fit=crop&h=1000&w=2000","author":"Lucy Bates","tags":["servicestack",".net8","auth"],"date":"\/Date(1707523200000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/identity-auth-admin-ui","wordCount":654,"lineCount":166},{"slug":"system-text-json-apis","draft":false,"title":"System.Text.Json ServiceStack APIs","summary":"ServiceStack .NET 8+ APIs can now be configured to use high-performance async System.Text.Json serialization","image":"https://images.unsplash.com/photo-1644325349124-d1756b79dd42?crop=entropy&fit=crop&h=1000&w=2000","author":"Gayle Smith","tags":["servicestack",".net8","json","apis"],"date":"\/Date(1707436800000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/system-text-json-apis","wordCount":944,"lineCount":213},{"slug":"openapi-v3","draft":false,"title":"OpenAPI v3 and Swagger UI","summary":"A walkthrough of the new OpenAPI v3 support in ServiceStack 8.1","image":"https://images.unsplash.com/photo-1496478981722-3ae516118a04?crop=entropy&fit=crop&h=1000&w=2000","author":"Brandon Foley","tags":["openapi",".net8"],"date":"\/Date(1707350400000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/openapi-v3","wordCount":1195,"lineCount":201},{"slug":"servicestack-endpoint-routing","draft":false,"title":"ServiceStack Endpoint Routing","summary":"ServiceStack .NET 8 is now more integrated then ever with support for ASP.NET Core Endpoint Routing and IOC","image":"https://images.unsplash.com/photo-1510022151265-1bb84d406531?crop=entropy&fit=crop&h=1000&w=2000","author":"Lucy Bates","tags":["servicestack",".net8","apis"],"date":"\/Date(1707264000000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/servicestack-endpoint-routing","wordCount":3169,"lineCount":620},{"slug":"razor-ssg-new-blog-features","draft":false,"title":"New Blogging features in Razor SSG","summary":"Explore the new Blogging Features in Razor SSG","image":"https://images.unsplash.com/photo-1486312338219-ce68d2c6f44d?crop=entropy&fit=crop&h=1000&w=2000","author":"Lucy Bates","tags":["razor","markdown","blog","dev"],"date":"\/Date(1692748800000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/razor-ssg-new-blog-features","wordCount":1301,"lineCount":337},{"slug":"razor-ssg","draft":false,"title":"Introducing Razor SSG","summary":"Create fast, beautiful statically rendered Razor Websites & Blogs","image":"https://images.unsplash.com/photo-1579767684138-a57e917d30aa?crop=entropy&fit=crop&h=1000&w=2000","author":"Lucy Bates","tags":["razor","markdown","blog","dev"],"date":"\/Date(1680134400000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/razor-ssg","wordCount":3045,"lineCount":605},{"slug":"javascript","draft":false,"title":"Simple, Modern JavaScript","summary":"Learn about JS Modules, Vue 3 and available rich UI Components","image":"https://images.unsplash.com/photo-1497515114629-f71d768fd07c?crop=entropy&fit=crop&h=1000&w=2000","author":"Brandon Foley","tags":["js","dev"],"date":"\/Date(1675209600000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/javascript","wordCount":3349,"lineCount":674},{"slug":"start","draft":false,"title":"Getting Started","summary":"Found out how to use these template features","image":"https://images.unsplash.com/photo-1533090161767-e6ffed986c88?crop=entropy&fit=crop&h=1000&w=2000","author":"Gayle Smith","tags":["js","dev","tailwind"],"date":"\/Date(1674259200000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/start","wordCount":294,"lineCount":77},{"slug":"rider","draft":false,"title":"Develop using JetBrains Rider","summary":"Setting up & exploring development workflow in Rider","image":"https://images.unsplash.com/photo-1472289065668-ce650ac443d2?crop=entropy&fit=crop&h=1000&w=2000","author":"Gayle Smith","tags":["c#","dev"],"date":"\/Date(1673395200000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/rider","wordCount":473,"lineCount":78},{"slug":"vs","draft":false,"title":"Develop using Visual Studio","summary":"Exploring development workflow in VS Code and Visual Studio .NET","image":"https://images.unsplash.com/photo-1513542789411-b6a5d4f31634?crop=entropy&fit=crop&h=1000&w=2000","author":"Lucy Bates","tags":["c#","dev"],"date":"\/Date(1673308800000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/vs","wordCount":1326,"lineCount":76},{"slug":"deploy","draft":false,"title":"Deployment with GitHub Actions","summary":"Configuring your GitHub repo for SSH and CDN deployments","image":"https://images.unsplash.com/photo-1485841890310-6a055c88698a?crop=entropy&fit=crop&h=1000&w=2000","author":"Gayle Smith","tags":["github-actions","devops"],"date":"\/Date(1672531200000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/deploy","wordCount":723,"lineCount":107},{"slug":"typography","draft":false,"title":"Tailwind Typography","summary":"tailwindcss/typography enabled for Markdown pages","image":"https://images.unsplash.com/photo-1497250681960-ef046c08a56e?crop=entropy&fit=crop&h=1000&w=2000","author":"Lucy Bates","tags":["tailwind","markdown"],"date":"\/Date(1672444800000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/typography","wordCount":654,"lineCount":85},{"slug":"hetzner-cloud","draft":false,"title":"In pursuit of the best value US cloud provider","summary":"We've been using AWS at ServiceStack for 10+ years, it's served us well but suffers from complex & expensive pricing","image":"https://images.unsplash.com/photo-1451187580459-43490279c0fa?crop=entropy&fit=crop&h=1000&w=2000","author":"Brandon Foley","tags":["dev","hosting","devops"],"date":"\/Date(1662422400000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/hetzner-cloud","wordCount":2712,"lineCount":227},{"slug":"typesense","draft":false,"title":"Real-time search with Typesense","summary":"As part of migrating docs to VitePress we've added UX improvements like instant search powered by Typesense!","image":"https://images.unsplash.com/photo-1473163928189-364b2c4e1135?crop=entropy&fit=crop&h=1000&w=2000","author":"Lucy Bates","tags":["dev","docs"],"date":"\/Date(1636329600000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/typesense","wordCount":4546,"lineCount":386},{"slug":"jekyll-to-vitepress","draft":false,"title":"Migrating from Jekyll to VitePress","summary":"Since Jekyll support has been officially sunset, we decided to migrate our docs site to VitePress","image":"https://images.unsplash.com/photo-1524668951403-d44b28200ce0?crop=entropy&fit=crop&h=1000&w=2000","author":"Lucy Bates","tags":["docs","markdown"],"date":"\/Date(1635724800000-0000)\/","url":"https://razor-ssg.web-templates.io/posts/jekyll-to-vitepress","wordCount":2481,"lineCount":355}],"podcasts":[{"slug":"razor-ssg-podcasts","draft":false,"title":"Podcasts now in Razor SSG","summary":"Razor SSG now includes support for Podcasts","tags":["razor","ssg","markdown"],"date":"\/Date(1727827200000-0000)\/","url":"https://media.servicestack.com/podcasts/razor-ssg-podcasts.mp3","wordCount":126,"lineCount":22},{"slug":"scalable-sqlite","draft":false,"title":"Scalable SQLite","summary":"Exploring different techniques in ServiceStack for building maximum value, high-performance Scalable SQLite Web Apps","tags":["sqlite","performance","scalability"],"date":"\/Date(1726704000000-0000)\/","url":"https://media.servicestack.com/podcasts/scalable-sqlite.mp3","wordCount":136,"lineCount":22},{"slug":"sqlite-request-logs","draft":false,"title":"SQLite Request Logging","summary":"Checking out ServiceStack's new SQLite-backed Request Logs feature and enhanced log querying and filtering in the Admin UI","tags":["sqlite","logging","admin-ui","api"],"date":"\/Date(1726531200000-0000)\/","url":"https://media.servicestack.com/podcasts/sqlite-request-logs.mp3","wordCount":162,"lineCount":29},{"slug":"background-jobs","draft":false,"title":"Background Jobs","summary":"Taking a deep dive into Background Jobs, a new library for .NET 8 Apps for simplifying task scheduling and management","tags":["jobs","admin-ui","commands","api"],"date":"\/Date(1726099200000-0000)\/","url":"https://media.servicestack.com/podcasts/background-jobs.mp3","wordCount":517,"lineCount":51},{"slug":"v8-4-release","draft":false,"title":"ServiceStack v8.4 Release","summary":"The latest features and improvements in ServiceStack v8.4 covering Background Jobs, SQLite Request Logs, Scalable SQLite Apps and more!","tags":["release","jobs","logging","admin-ui","commands","api"],"date":"\/Date(1726012800000-0000)\/","url":"https://media.servicestack.com/podcasts/v8-4-release.mp3","wordCount":545,"lineCount":52},{"slug":"commands-feature","draft":false,"title":"Commands Feature","summary":"Looking into how to utilize Commands to build more robust and observable systems","tags":["commands","admin-ui","api"],"date":"\/Date(1719964800000-0000)\/","url":"https://media.servicestack.com/podcasts/commands-feature.mp3","wordCount":153,"lineCount":31},{"slug":"simple-auth-microservices","draft":false,"title":"Simple Auth Story for .NET 8 Microservices","summary":"Taking a look at the simple \"user-free\" Auth story made possible with API Keys and Admin UI that's ideal for .NET 8 Microservices","tags":[".net8","auth","apikeys"],"date":"\/Date(1719878400000-0000)\/","url":"https://media.servicestack.com/podcasts/simple-auth-microservices.mp3","wordCount":170,"lineCount":36},{"slug":"apikeys","draft":false,"title":"Using API Keys to secure .NET 8 APIs","summary":"Exploring the new API Keys Identity Auth feature and how its Admin UI enables simple fine-grained access control in ServiceStack .NET 8 APIs","tags":["apikeys",".net8","auth","rdbms"],"date":"\/Date(1719792000000-0000)\/","url":"https://media.servicestack.com/podcasts/apikeys.mp3","wordCount":181,"lineCount":37},{"slug":"v8-3-release","draft":false,"title":"ServiceStack v8.3 Release","summary":"The latest features and improvements in ServiceStack v8.3 covering Commands Feature, API Keys, Integrated Admin UIs and more!","tags":["release","apikeys","admin-ui","commands","api"],"date":"\/Date(1718582400000-0000)\/","url":"https://media.servicestack.com/podcasts/v8-3-release.mp3","wordCount":187,"lineCount":42},{"slug":"redis-outputcache","draft":false,"title":"ASP.NET Core Output Caching","summary":"A look at how to use ASP.NET Core Output Caching and ServiceStack.Redis to cache the response of ServiceStack APIs in Redis","tags":["caching",".net8","redis"],"date":"\/Date(1717545600000-0000)\/","url":"https://media.servicestack.com/podcasts/redis-outputcache.mp3","wordCount":138,"lineCount":20},{"slug":"asp-rate-limiter-middleware","draft":false,"title":"ASP.NET Core Rate Limiter Middleware","summary":"A guide explaining how ASP.NET Core's Rate Limiter Middleware can be used to protect ServiceStack APIs and Apps from abuse","tags":[".net8","auth","middleware"],"date":"\/Date(1712534400000-0000)\/","url":"https://media.servicestack.com/podcasts/asp-rate-limiter-middleware.mp3","wordCount":174,"lineCount":26},{"slug":"net8-react-spa-template","draft":false,"title":"New React SPA Template","summary":"A tour of the features in the new enhanced Vite TypeScript React SPA template for .NET 8","tags":["template","react",".net8","autoquery"],"date":"\/Date(1709683200000-0000)\/","url":"https://media.servicestack.com/podcasts/net8-react-spa-template.mp3","wordCount":670,"lineCount":43},{"slug":"net8-vue-spa-template","draft":false,"title":"New Vue SPA Template","summary":"Getting to know the advanced features and capabilities of the enhanced Vite TypeScript Vue SPA template for .NET 8","tags":["template","vue",".net8","autoquery"],"date":"\/Date(1709596800000-0000)\/","url":"https://media.servicestack.com/podcasts/net8-vue-spa-template.mp3","wordCount":232,"lineCount":43},{"slug":"v8-2-release","draft":false,"title":"ServiceStack v8.2 Release","summary":"All about ServiceStack v8.2 Release new Vue & React Vite SPA Tailwind Markdown powered Templates, integrated Identity Auth, new Kotlin Compose Multiplatform template and new Vite Press Plugin","tags":["release","vue","react","vite","markdown","kotlin"],"date":"\/Date(1709510400000-0000)\/","url":"https://media.servicestack.com/podcasts/v8-2-release.mp3","wordCount":797,"lineCount":54},{"slug":"v8-1-release","draft":false,"title":"ServiceStack v8.1 Release","summary":"ServiceStack v8.1 is here with a host of new features including full integration with Identity Auth, ASP .NET IOC, Endpoint Routing, System.Text.Json APIs, enhanced Admin UIs with JWT support, and much more!","tags":["release","identity-auth","ioc","json","openapi","swagger"],"date":"\/Date(1707177600000-0000)\/","url":"https://media.servicestack.com/podcasts/v8-1-release.mp3","wordCount":245,"lineCount":48},{"slug":"v8-0-release","draft":false,"title":"ServiceStack v8.0 Release","summary":"ServiceStack v8 is here with all packages now including .net8.0 builds, all Project Templates upgraded to .NET 8, GitHub Actions now using .NET 8 Docker containers, new Tailwind Blazor, Razor Pages & MVC Templates now using ASP .NET Identity Auth & EF","tags":["release",".net8","docker","identity-auth","blazor","mvc","razor"],"date":"\/Date(1700438400000-0000)\/","url":"https://media.servicestack.com/podcasts/v8-0-release.mp3","wordCount":1213,"lineCount":63}]}
\ No newline at end of file
diff --git a/podcasts.html b/podcasts.html
index 9c0a0cc..fc49cc9 100644
--- a/podcasts.html
+++ b/podcasts.html
@@ -180,425 +180,425 @@