diff --git a/.changeset/fix-admin-date-format-example.md b/.changeset/fix-admin-date-format-example.md
new file mode 100644
index 000000000..f0957f8ea
--- /dev/null
+++ b/.changeset/fix-admin-date-format-example.md
@@ -0,0 +1,5 @@
+---
+"@emdash-cms/admin": patch
+---
+
+Fixes the reading settings date format example so it follows the configured format string.
diff --git a/packages/admin/package.json b/packages/admin/package.json
index 5704984c1..c923e6935 100644
--- a/packages/admin/package.json
+++ b/packages/admin/package.json
@@ -68,6 +68,7 @@
"@tiptap/starter-kit": "catalog:",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
+ "date-fns": "^4.1.0",
"dompurify": "^3.3.2",
"marked": "^17.0.3",
"react-hotkeys-hook": "^5.2.4",
diff --git a/packages/admin/src/components/settings/GeneralSettings.tsx b/packages/admin/src/components/settings/GeneralSettings.tsx
index 601c9e034..781c158e8 100644
--- a/packages/admin/src/components/settings/GeneralSettings.tsx
+++ b/packages/admin/src/components/settings/GeneralSettings.tsx
@@ -12,6 +12,7 @@ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import * as React from "react";
import { fetchSettings, updateSettings, type SiteSettings, type MediaItem } from "../../lib/api";
+import { DEFAULT_DATE_FORMAT, formatDateFormatExample } from "../../lib/date-format-example";
import { EditorHeader } from "../EditorHeader";
import { MediaPickerModal } from "../MediaPickerModal";
import { BackToSettingsLink } from "./BackToSettingsLink.js";
@@ -69,6 +70,9 @@ export function GeneralSettings() {
setFormData((prev) => ({ ...prev, [key]: value }));
};
+ const dateFormat = formData.dateFormat || DEFAULT_DATE_FORMAT;
+ const dateFormatExample = formatDateFormatExample(dateFormat);
+
const handleLogoSelect = (media: MediaItem) => {
setFormData((prev) => ({
...prev,
@@ -302,9 +306,13 @@ export function GeneralSettings() {
/>
handleChange("dateFormat", e.target.value)}
- description={`Example: ${formData.dateFormat || "MMMM d, yyyy"} → January 23, 2026`}
+ description={
+ dateFormatExample
+ ? t`Example: ${dateFormat} → ${dateFormatExample}`
+ : t`Example: ${dateFormat} → Invalid date format`
+ }
/>
{
+ it("formats the default date format example", () => {
+ expect(formatDateFormatExample(DEFAULT_DATE_FORMAT)).toBe("January 23, 2026");
+ });
+
+ it("formats ISO-style date format examples", () => {
+ expect(formatDateFormatExample("yyyy-MM-dd")).toBe("2026-01-23");
+ });
+
+ it("returns null for invalid date formats", () => {
+ expect(formatDateFormatExample("yyyy-MM-dd nope")).toBeNull();
+ });
+});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 977392e5a..bd005267b 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1068,6 +1068,9 @@ importers:
clsx:
specifier: ^2.1.1
version: 2.1.1
+ date-fns:
+ specifier: ^4.1.0
+ version: 4.1.0
dompurify:
specifier: ^3.3.2
version: 3.3.2