diff --git a/docusaurus.config.ts b/docusaurus.config.ts
index 4cb0aa6..cf185ad 100644
--- a/docusaurus.config.ts
+++ b/docusaurus.config.ts
@@ -230,7 +230,8 @@ const config: Config = {
feedOptions: {
type: "all",
title: "OneGround ZGW API Changelog",
- description: "Latest releases and updates for OneGround ZGW API platform"
+ description: "Latest releases and updates for OneGround ZGW API platform",
+ xslt: true
}
} satisfies PluginContentBlog.Options
],
diff --git a/src/components/ChangelogFeedLinks/index.tsx b/src/components/ChangelogFeedLinks/index.tsx
new file mode 100644
index 0000000..7bf95c0
--- /dev/null
+++ b/src/components/ChangelogFeedLinks/index.tsx
@@ -0,0 +1,54 @@
+import React, { type ReactNode } from "react";
+import Link from "@docusaurus/Link";
+import styles from "./styles.module.css";
+
+const RSS_ATOM_PATH =
+ "M6.503 20.752c0 1.794-1.456 3.248-3.251 3.248-1.796 0-3.252-1.454-3.252-3.248 0-1.794 1.456-3.248 3.252-3.248 1.795.001 3.251 1.454 3.251 3.248zm-6.503-12.572v4.811c6.05.062 10.96 4.966 11.022 11.009h4.817c-.062-8.71-7.118-15.758-15.839-15.82zm0-3.368c10.58.046 19.152 8.594 19.183 19.188h4.817c-.03-13.231-10.755-23.954-24-24v4.812z";
+
+const JSON_PATH = "M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z";
+
+function FeedIcon({ color, path }: { color: string; path: string }): ReactNode {
+ return (
+
+ );
+}
+
+export default function ChangelogFeedLinks(): ReactNode {
+ return (
+
+
+
+ RSS
+
+
+
+ Atom
+
+
+
+ JSON
+
+
+ );
+}
diff --git a/src/components/ChangelogFeedLinks/styles.module.css b/src/components/ChangelogFeedLinks/styles.module.css
new file mode 100644
index 0000000..a126c42
--- /dev/null
+++ b/src/components/ChangelogFeedLinks/styles.module.css
@@ -0,0 +1,35 @@
+.feedContainer {
+ display: flex;
+ gap: 1rem;
+ flex-wrap: wrap;
+ margin-bottom: 1rem;
+ align-items: center;
+}
+
+.feedLink {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.35rem;
+ border-radius: 2rem;
+ padding: 0.3rem 0.85rem;
+ font-weight: 600;
+ font-size: 0.8rem;
+ color: var(--feed-accent);
+ background: color-mix(in srgb, var(--feed-accent) 10%, transparent);
+ transition: background-color 0.2s ease;
+ text-decoration: none;
+}
+
+.feedLink:hover {
+ background: color-mix(in srgb, var(--feed-accent) 20%, transparent);
+ text-decoration: none;
+ color: var(--feed-accent);
+}
+
+[data-theme="dark"] .feedLink {
+ background: color-mix(in srgb, var(--feed-accent) 15%, transparent);
+}
+
+[data-theme="dark"] .feedLink:hover {
+ background: color-mix(in srgb, var(--feed-accent) 25%, transparent);
+}
diff --git a/src/theme/BlogListPage/index.tsx b/src/theme/BlogListPage/index.tsx
new file mode 100644
index 0000000..94b9ee8
--- /dev/null
+++ b/src/theme/BlogListPage/index.tsx
@@ -0,0 +1,7 @@
+import React, { type ReactNode } from "react";
+import BlogListPage from "@theme-original/BlogListPage";
+import type { Props } from "@theme/BlogListPage";
+
+export default function BlogListPageWrapper(props: Props): ReactNode {
+ return ;
+}
diff --git a/src/theme/BlogPostItems/index.tsx b/src/theme/BlogPostItems/index.tsx
new file mode 100644
index 0000000..409e5fa
--- /dev/null
+++ b/src/theme/BlogPostItems/index.tsx
@@ -0,0 +1,17 @@
+import React, { type ReactNode } from "react";
+import { useLocation } from "@docusaurus/router";
+import BlogPostItems from "@theme-original/BlogPostItems";
+import type { Props } from "@theme/BlogPostItems";
+import ChangelogFeedLinks from "@site/src/components/ChangelogFeedLinks";
+
+export default function BlogPostItemsWrapper(props: Props): ReactNode {
+ const { pathname } = useLocation();
+ const isChangelog = pathname.startsWith("/changelog");
+
+ return (
+ <>
+ {isChangelog && }
+
+ >
+ );
+}
diff --git a/static/structured-data.json b/static/structured-data.json
index c8cc57a..d48a55d 100644
--- a/static/structured-data.json
+++ b/static/structured-data.json
@@ -7,10 +7,16 @@
"name": "OneGround",
"alternateName": "Roxit OneGround",
"url": "https://dev.oneground.nl",
- "sameAs": ["https://github.com/OneGround", "https://oneground.nl", "https://portaal.oneground.nl"],
+ "sameAs": [
+ "https://github.com/OneGround",
+ "https://oneground.nl",
+ "https://portaal.oneground.nl",
+ "https://www.linkedin.com/showcase/one-ground/",
+ "https://www.youtube.com/@vismaroxit"
+ ],
"logo": {
"@type": "ImageObject",
- "url": "https://dev.oneground.nl/img/logo.png",
+ "url": "https://dev.oneground.nl/img/logo.svg",
"width": 200,
"height": 60
},
@@ -47,15 +53,7 @@
"publisher": {
"@id": "https://dev.oneground.nl/#organization"
},
- "inLanguage": "en",
- "potentialAction": {
- "@type": "SearchAction",
- "target": {
- "@type": "EntryPoint",
- "urlTemplate": "https://dev.oneground.nl/search?q={search_term_string}"
- },
- "query-input": "required name=search_term_string"
- }
+ "inLanguage": "en"
},
{
"@type": "SoftwareApplication",
@@ -128,7 +126,7 @@
"description": "OneGround is a comprehensive implementation of Dutch ZGW APIs for case management (Zaakgericht Werken). Learn about ZRC, DRC, ZTC, BRC, NRC, AC components, features, and how to get started.",
"url": "https://dev.oneground.nl/docs/about-oneground",
"datePublished": "2024-01-01",
- "dateModified": "2025-06-09",
+ "dateModified": "2026-01-19",
"author": {
"@id": "https://dev.oneground.nl/#organization"
},
@@ -152,6 +150,13 @@
"NRC",
"AC",
"RL",
+ "OAuth2",
+ "JWT",
+ "Docker",
+ ".NET",
+ "webhooks",
+ "digital signing",
+ "NEN-ISO 16175",
"VNG standards",
"government APIs"
]
@@ -167,6 +172,60 @@
},
"inLanguage": "en"
},
+ {
+ "@type": "BlogPosting",
+ "@id": "https://dev.oneground.nl/blog/best-practices-for-jwt-usage-in-apis#blogposting",
+ "headline": "Best Practices for JWT Usage in APIs - OneGround Security Guide",
+ "description": "Comprehensive guide to implementing JWT authentication securely in ZGW APIs and OneGround. Learn about token security, validation, best practices, and common pitfalls to avoid.",
+ "url": "https://dev.oneground.nl/blog/best-practices-for-jwt-usage-in-apis",
+ "datePublished": "2024-12-03",
+ "author": {
+ "@type": "Person",
+ "name": "Giedrius Grabauskas"
+ },
+ "isPartOf": {
+ "@id": "https://dev.oneground.nl/blog#blog"
+ },
+ "publisher": {
+ "@id": "https://dev.oneground.nl/#organization"
+ }
+ },
+ {
+ "@type": "BlogPosting",
+ "@id": "https://dev.oneground.nl/blog/integrating-signing-software-with-zgw#blogposting",
+ "headline": "Standardized Document Signing Integration for ZGW APIs - Complete Guide",
+ "description": "Learn how to integrate digital document signing software with ZGW APIs. Complete implementation guide with API patterns, authentication methods, and standardized trigger messages for OneGround and compliant ZGW systems.",
+ "url": "https://dev.oneground.nl/blog/integrating-signing-software-with-zgw",
+ "datePublished": "2025-03-27",
+ "author": {
+ "@type": "Person",
+ "name": "Michiel Nijdam"
+ },
+ "isPartOf": {
+ "@id": "https://dev.oneground.nl/blog#blog"
+ },
+ "publisher": {
+ "@id": "https://dev.oneground.nl/#organization"
+ }
+ },
+ {
+ "@type": "BlogPosting",
+ "@id": "https://dev.oneground.nl/blog/oauth2-token-endpoint#blogposting",
+ "headline": "Why OneGround Uses an OAuth2 Token Endpoint",
+ "description": "Learn why customer-generated JWTs are risky and how OAuth2 Token Endpoints provide better security, control, and simplicity for API authentication.",
+ "url": "https://dev.oneground.nl/blog/oauth2-token-endpoint",
+ "datePublished": "2025-11-14",
+ "author": {
+ "@type": "Person",
+ "name": "Giedrius Grabauskas"
+ },
+ "isPartOf": {
+ "@id": "https://dev.oneground.nl/blog#blog"
+ },
+ "publisher": {
+ "@id": "https://dev.oneground.nl/#organization"
+ }
+ },
{
"@type": "FAQPage",
"@id": "https://dev.oneground.nl/#faq",
@@ -176,7 +235,7 @@
"name": "What is OneGround?",
"acceptedAnswer": {
"@type": "Answer",
- "text": "OneGround is the implementation by Roxit of case oriented APIs and registrations according to the VNG specifications. It contains ZTC, ZRC, DRC, BRC, NC, AC and reference lists for Dutch government case management."
+ "text": "OneGround is the implementation by Roxit of case oriented APIs and registrations according to the VNG specifications. It contains ZTC, ZRC, DRC, BRC, NRC, AC and reference lists for Dutch government case management."
}
},
{
@@ -192,7 +251,7 @@
"name": "What ZGW components does OneGround include?",
"acceptedAnswer": {
"@type": "Answer",
- "text": "OneGround includes all ZGW API components: ZRC (Case Registration), DRC (Document Registration), ZTC (Case Type Catalog), BRC (Decision Registration), NRC (Notification Center), and AC (Authorization Component)."
+ "text": "OneGround includes all ZGW API components: ZRC (Case Registration), DRC (Document Registration), ZTC (Case Type Catalog), BRC (Decision Registration), NRC (Notification Center), AC (Authorization Component), and RL (Reference Lists)."
}
},
{
@@ -244,7 +303,17 @@
"creator": {
"@id": "https://dev.oneground.nl/#organization"
},
- "keywords": ["ZGW API", "Documentation", "Dutch Government", "Case Management", "API Reference"],
+ "keywords": [
+ "ZGW API",
+ "Documentation",
+ "Dutch Government",
+ "Case Management",
+ "API Reference",
+ "OAuth2",
+ "JWT",
+ "webhooks",
+ "integration guides"
+ ],
"license": "https://github.com/OneGround/oneground.github.io/blob/main/LICENSE",
"distribution": {
"@type": "DataDownload",