diff --git a/CHANGELOG.md b/CHANGELOG.md
index a4d2035d2..9d4f41cbb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,16 @@
# Changelog
+## [Unreleased]
+
+### Added
+
+- **The intake history shows where an injection went.** A dose logged
+ with an injection site already stored it, but the per-medication
+ history only showed when it was taken and where the entry came from.
+ Each injected dose now carries a chip with the site next to its status,
+ in the table and on the mobile cards, so the rotation can be read back
+ from the history. Doses without a site look as before.
+
## [1.46.6] — 2026-11-02
### Added
diff --git a/messages/de.json b/messages/de.json
index 3c914dfc9..ab3f02171 100644
--- a/messages/de.json
+++ b/messages/de.json
@@ -1895,6 +1895,7 @@
"intakeHistoryColScheduled": "Geplant",
"intakeHistoryColStatus": "Status",
"intakeHistoryColSource": "Quelle",
+ "intakeHistoryInjectionSite": "Injektionsstelle: {site}",
"intakeHistoryStatusTaken": "Eingenommen",
"intakeHistoryStatusSkipped": "Übersprungen",
"intakeHistorySortByTaken": "Nach Einnahme-Zeitpunkt sortieren",
diff --git a/messages/en.json b/messages/en.json
index aea2d6a89..bf1c24d0a 100644
--- a/messages/en.json
+++ b/messages/en.json
@@ -1895,6 +1895,7 @@
"intakeHistoryColScheduled": "Scheduled",
"intakeHistoryColStatus": "Status",
"intakeHistoryColSource": "Source",
+ "intakeHistoryInjectionSite": "Injection site: {site}",
"intakeHistoryStatusTaken": "Taken",
"intakeHistoryStatusSkipped": "Skipped",
"intakeHistorySortByTaken": "Sort by taken time",
diff --git a/messages/es.json b/messages/es.json
index a729ed506..3034349a6 100644
--- a/messages/es.json
+++ b/messages/es.json
@@ -1895,6 +1895,7 @@
"intakeHistoryColScheduled": "Programada",
"intakeHistoryColStatus": "Estado",
"intakeHistoryColSource": "Fuente",
+ "intakeHistoryInjectionSite": "Lugar de inyección: {site}",
"intakeHistoryStatusTaken": "Tomada",
"intakeHistoryStatusSkipped": "Omitida",
"intakeHistorySortByTaken": "Ordenar por hora de toma",
diff --git a/messages/fr.json b/messages/fr.json
index 130a2dcec..a9ceb0b1b 100644
--- a/messages/fr.json
+++ b/messages/fr.json
@@ -1895,6 +1895,7 @@
"intakeHistoryColScheduled": "Programmée",
"intakeHistoryColStatus": "Statut",
"intakeHistoryColSource": "Source",
+ "intakeHistoryInjectionSite": "Site d'injection : {site}",
"intakeHistoryStatusTaken": "Prise",
"intakeHistoryStatusSkipped": "Ignorée",
"intakeHistorySortByTaken": "Trier par heure de prise",
diff --git a/messages/it.json b/messages/it.json
index 7c417dc4c..9a709062a 100644
--- a/messages/it.json
+++ b/messages/it.json
@@ -1895,6 +1895,7 @@
"intakeHistoryColScheduled": "Programmata",
"intakeHistoryColStatus": "Stato",
"intakeHistoryColSource": "Sorgente",
+ "intakeHistoryInjectionSite": "Sito di iniezione: {site}",
"intakeHistoryStatusTaken": "Assunta",
"intakeHistoryStatusSkipped": "Saltata",
"intakeHistorySortByTaken": "Ordina per ora di assunzione",
diff --git a/messages/ko.json b/messages/ko.json
index 6687f8fd6..85ed9abcf 100644
--- a/messages/ko.json
+++ b/messages/ko.json
@@ -1895,6 +1895,7 @@
"intakeHistoryColScheduled": "예정",
"intakeHistoryColStatus": "상태",
"intakeHistoryColSource": "출처",
+ "intakeHistoryInjectionSite": "주사 부위: {site}",
"intakeHistoryStatusTaken": "복용함",
"intakeHistoryStatusSkipped": "건너뜀",
"intakeHistorySortByTaken": "복용 시각순 정렬",
diff --git a/messages/nl.json b/messages/nl.json
index 17aefb7de..717186d43 100644
--- a/messages/nl.json
+++ b/messages/nl.json
@@ -1895,6 +1895,7 @@
"intakeHistoryColScheduled": "Gepland",
"intakeHistoryColStatus": "Status",
"intakeHistoryColSource": "Bron",
+ "intakeHistoryInjectionSite": "Injectieplaats: {site}",
"intakeHistoryStatusTaken": "Ingenomen",
"intakeHistoryStatusSkipped": "Overgeslagen",
"intakeHistorySortByTaken": "Sorteren op innametijd",
diff --git a/messages/pl.json b/messages/pl.json
index 5132eeb8a..a51837763 100644
--- a/messages/pl.json
+++ b/messages/pl.json
@@ -1895,6 +1895,7 @@
"intakeHistoryColScheduled": "Zaplanowany",
"intakeHistoryColStatus": "Status",
"intakeHistoryColSource": "Źródło",
+ "intakeHistoryInjectionSite": "Miejsce wstrzyknięcia: {site}",
"intakeHistoryStatusTaken": "Przyjęty",
"intakeHistoryStatusSkipped": "Pominięty",
"intakeHistorySortByTaken": "Sortuj wg czasu przyjęcia",
diff --git a/messages/pt-BR.json b/messages/pt-BR.json
index d8d87e84b..812dea2a8 100644
--- a/messages/pt-BR.json
+++ b/messages/pt-BR.json
@@ -1895,6 +1895,7 @@
"intakeHistoryColScheduled": "Programada",
"intakeHistoryColStatus": "Status",
"intakeHistoryColSource": "Fonte",
+ "intakeHistoryInjectionSite": "Local da injeção: {site}",
"intakeHistoryStatusTaken": "Tomada",
"intakeHistoryStatusSkipped": "Pulada",
"intakeHistorySortByTaken": "Ordenar por horário da tomada",
diff --git a/src/__tests__/baselines/source-function-lines.json b/src/__tests__/baselines/source-function-lines.json
index e4bb6649d..537c6b9a6 100644
--- a/src/__tests__/baselines/source-function-lines.json
+++ b/src/__tests__/baselines/source-function-lines.json
@@ -1,7 +1,7 @@
{
"$comment": "Production functions over 200 lines, keyed \"file :: name\", and their length. Maintained by src/__tests__/source-size-ratchet.test.ts.",
"count": 345,
- "total": 111918,
+ "total": 111894,
"entries": {
"app/achievements/page.tsx :: AchievementsPage": 206,
"app/api/admin/backups/upload/route.ts :: apiHandler(arg)": 275,
@@ -156,7 +156,7 @@
"components/medications/glp1-medication-card.tsx :: Glp1MedicationCard": 405,
"components/medications/injection-site-picker.tsx :: InjectionSitePicker": 287,
"components/medications/intake-history-editable.tsx :: IntakeHistoryEditable": 224,
- "components/medications/intake-history-list-v2.tsx :: IntakeHistoryListV2": 427,
+ "components/medications/intake-history-list-v2.tsx :: IntakeHistoryListV2": 403,
"components/medications/intake-import-dialog.tsx :: IntakeImportDialog": 208,
"components/medications/log-intake-dialog.tsx :: LogIntakeDialog": 267,
"components/medications/medication-card.tsx :: MedicationCard": 413,
diff --git a/src/components/medications/__tests__/intake-history-list-v2.test.tsx b/src/components/medications/__tests__/intake-history-list-v2.test.tsx
index a5594d94a..6838df977 100644
--- a/src/components/medications/__tests__/intake-history-list-v2.test.tsx
+++ b/src/components/medications/__tests__/intake-history-list-v2.test.tsx
@@ -46,6 +46,7 @@ type IntakeRow = {
takenAt: string | null;
skipped: boolean;
source: "WEB" | "API" | "REMINDER" | "IMPORT";
+ injectionSite?: string | null;
createdAt: string;
};
@@ -347,3 +348,50 @@ describe("