diff --git a/CHANGELOG.md b/CHANGELOG.md
index 016b8d3..6702fae 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,11 @@
All notable changes to Epicure are documented here. This file is mirrored in-app at `/changelog` (and in the admin dashboard) via `apps/web/lib/changelog.ts` — update both together.
+## 0.12.1 — 2026-07-13 13:25
+
+### Fixed
+- Changelog entries showed literal `**bold**` markup instead of rendering it.
+
## 0.12.0 — 2026-07-13 12:52
### Added
diff --git a/apps/web/components/shared/changelog-list.tsx b/apps/web/components/shared/changelog-list.tsx
index 0439a3b..3ba82f6 100644
--- a/apps/web/components/shared/changelog-list.tsx
+++ b/apps/web/components/shared/changelog-list.tsx
@@ -1,7 +1,29 @@
+import { Fragment } from "react";
import { Badge } from "@/components/ui/badge";
import { Separator } from "@/components/ui/separator";
import { CHANGELOG } from "@/lib/changelog";
+// Changelog entries are plain strings with occasional **bold** and `code`
+// spans — never full markdown (lists, links, headings) — so a tiny inline
+// parser is enough and keeps this off the react-markdown dependency used for
+// full AI chat output elsewhere.
+function InlineMarkdown({ text }: { text: string }) {
+ const parts = text.split(/(\*\*[^*]+\*\*|`[^`]+`)/g).filter(Boolean);
+ return (
+ <>
+ {parts.map((part, i) => {
+ if (part.startsWith("**") && part.endsWith("**")) {
+ return {part.slice(2, -2)};
+ }
+ if (part.startsWith("`") && part.endsWith("`")) {
+ return {part.slice(1, -1)};
+ }
+ return
Added
Fixed
Security