chore: bump version to 0.9.4, backfill changelog with real commit times

Every entry got a time component pulled from actual git commit
timestamps (git log --date=format), not guessed — precise enough to
disambiguate the many same-day releases from this session. 0.2.0 and
0.1.0 kept date-only/"earlier" since no reliable timestamp exists for
them. Also adds the 0.9.4 entry for the previous action-buttons/
view-toggle mobile fix, which shipped without its own version bump.
This commit is contained in:
Arnaud
2026-07-13 09:09:55 +02:00
parent 36e707b934
commit 7c63388618
4 changed files with 47 additions and 33 deletions
+21 -15
View File
@@ -2,40 +2,46 @@
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.9.3 — 2026-07-13
## 0.9.4 — 2026-07-13 09:03
### Fixed
- "New recipe" wrapped to its own line on mobile (especially French) instead of sharing a row with Generate/Import — icon-only below that breakpoint now.
- The view-toggle/Select row floated flush right with a large dead gap on the left — now left-aligned outside select mode.
## 0.9.3 — 2026-07-13 08:38
### Fixed
- Recipes page wasted a lot of vertical space above the recipe list on mobile — Sort/Filter now sit alongside Search on one row instead of forcing an extra one.
## 0.9.2 — 2026-07-13
## 0.9.2 — 2026-07-13 07:14
### Fixed
- Explore page's "Recipe ideas" banner buttons clashed with its violet gradient background — restyled to match.
## 0.9.1 — 2026-07-13
## 0.9.1 — 2026-07-13 06:59
### Fixed
- Destructive confirm buttons (clear chat history, discard recipe changes) had unreadable black text on a red background — a missing CSS variable.
## 0.9.0 — 2026-07-12
## 0.9.0 — 2026-07-12 23:28
### Added
- **Clear chat history**: a trash-icon button in both chatbots clears that conversation's saved history.
- Chat history now auto-expires after 90 days (daily cleanup job).
## 0.8.0 — 2026-07-12
## 0.8.0 — 2026-07-12 22:38
### Added
- **Read-only API key scoping**: create keys that can only read (GET), not create/edit/delete anything.
- **AI chat history**: both chatbots now remember past conversations across sessions, and let you search across everything you've ever asked.
## 0.7.1 — 2026-07-12
## 0.7.1 — 2026-07-12 21:36
### Fixed
- Cooking-assistant button on the homepage sat too high.
- The chatbots would answer honestly if asked what AI model they run on — now always identify as Epicure.
## 0.7.0 — 2026-07-12
## 0.7.0 — 2026-07-12 19:36
### Added
- **General cooking-question chatbot** on the recipes homepage — ask technique/substitution/timing questions not tied to a specific recipe.
@@ -44,7 +50,7 @@ All notable changes to Epicure are documented here. This file is mirrored in-app
- API keys always showed "never used" — middleware was blocking every Bearer-key request before it ever reached the code that verifies the key and records usage.
- The webhooks documentation page had no way back to webhooks settings.
## 0.6.0 — 2026-07-12
## 0.6.0 — 2026-07-12 19:09
### Added
- **Granular push-notification settings**: turn individual categories on/off (follows, comments, replies, reactions, ratings, mentions, leftover reminders, shared shopping list updates) instead of all-or-nothing.
@@ -53,14 +59,14 @@ All notable changes to Epicure are documented here. This file is mirrored in-app
- The push-notification toggle in Settings always showed as off, even when notifications were genuinely still enabled — it never checked the actual browser subscription state.
- The API Reference page (`/docs`) was blank — Content-Security-Policy blocked the script it needs to render.
## 0.5.1 — 2026-07-12
## 0.5.1 — 2026-07-12 19:05
### Security
- Recipe/review photo uploads: a stolen storage key from another user's public recipe or review could be submitted as your own, causing that user's photo to be deleted from storage when the recipe was later edited or deleted. Both routes now check the key was actually issued to you for that recipe.
- AI URL-import could be redirected to internal/private network addresses via a crafted 3xx response, and was separately vulnerable to DNS-rebinding between validation and fetch. Both the import and outgoing webhook delivery now resolve the host once and pin the connection to that address, re-validating on every redirect hop.
- Comment moderation and monthly AI/recipe/storage quota checks trusted a session field that can lag up to 5 minutes behind a role or tier change — both now re-check the current value in the database.
## 0.5.0 — 2026-07-12
## 0.5.0 — 2026-07-12 18:37
### Added
- **Push notifications for shared shopping lists** — get pinged when someone else checks off or adds items.
@@ -70,7 +76,7 @@ All notable changes to Epicure are documented here. This file is mirrored in-app
- Weekly meal-plan nutrition coverage compared a week's total intake against a daily goal (reading ~7x too high) — now compares a proper daily average, with a per-day breakdown and a flag for meals missing nutrition data.
- Meal-plan week navigation could resolve the wrong Monday depending on server timezone.
## 0.4.0 — 2026-07-12
## 0.4.0 — 2026-07-12 16:13
### Added
- **Profile pictures**: upload a custom photo, or get a Gravatar-backed avatar automatically — no more generic initials by default.
@@ -80,7 +86,7 @@ All notable changes to Epicure are documented here. This file is mirrored in-app
### Fixed
- Batch-cook recipes shifted left in compact view when they had no time set or a longer dish/time label.
## 0.3.1 — 2026-07-12
## 0.3.1 — 2026-07-12 15:08
### Added
- A free-text "describe what you're after" field for batch-cooking generation, matching the standard recipe generator.
@@ -90,17 +96,17 @@ All notable changes to Epicure are documented here. This file is mirrored in-app
- The bulk-select action bar on the recipe list could show a horizontal scrollbar on desktop even though there was room to grow.
- Recipes imported from a URL never actually saved their source URL — the "Source: ..." link on the recipe page was dead code until now.
## 0.3.0 — 2026-07-12
## 0.3.0 — 2026-07-12 14:46
### Added
- **Manually create and edit batch-cook recipes**: the recipe form now has a batch-cook toggle, an editable dish list (storage/reheat guidance per dish), and per-step dish tagging — not just AI-generated ones anymore. Editing an existing batch-cook recipe no longer silently strips its dish data.
## 0.2.2 — 2026-07-12
## 0.2.2 — 2026-07-12 13:54
### Fixed
- Recipe photo thumbnails always tried to load from `localhost:9000` in production, tripping CSP/mixed-content blocks in every browser — the public storage URL wasn't reaching client-side code.
## 0.2.1 — 2026-07-12
## 0.2.1 — 2026-07-12 13:21
### Fixed
- Recipe photos were lost after saving, and multi-file uploads only kept the last file selected.
+24 -16
View File
@@ -1,5 +1,5 @@
// Mirrors CHANGELOG.md at the repo root — update both together.
export const APP_VERSION = "0.9.3";
export const APP_VERSION = "0.9.4";
export type ChangelogEntry = {
version: string;
@@ -11,30 +11,38 @@ export type ChangelogEntry = {
};
export const CHANGELOG: ChangelogEntry[] = [
{
version: "0.9.4",
date: "2026-07-13 09:03",
fixed: [
"\"New recipe\" wrapped to its own line on mobile (especially French) instead of sharing a row with Generate/Import — icon-only below that breakpoint now.",
"The view-toggle/Select row floated flush right with a large dead gap on the left — now left-aligned outside select mode.",
],
},
{
version: "0.9.3",
date: "2026-07-13",
date: "2026-07-13 08:38",
fixed: [
"Recipes page wasted a lot of vertical space above the recipe list on mobile — Sort/Filter now sit alongside Search on one row instead of forcing an extra one.",
],
},
{
version: "0.9.2",
date: "2026-07-13",
date: "2026-07-13 07:14",
fixed: [
"Explore page's \"Recipe ideas\" banner buttons clashed with its violet gradient background.",
],
},
{
version: "0.9.1",
date: "2026-07-13",
date: "2026-07-13 06:59",
fixed: [
"Destructive confirm buttons (clear chat history, discard recipe changes) had unreadable black text on a red background.",
],
},
{
version: "0.9.0",
date: "2026-07-12",
date: "2026-07-12 23:28",
added: [
"Clear chat history: a trash-icon button in both chatbots clears that conversation's saved history.",
"Chat history now auto-expires after 90 days (daily cleanup job).",
@@ -42,7 +50,7 @@ export const CHANGELOG: ChangelogEntry[] = [
},
{
version: "0.8.0",
date: "2026-07-12",
date: "2026-07-12 22:38",
added: [
"Read-only API key scoping: create keys that can only read (GET), not create/edit/delete anything.",
"AI chat history: both chatbots now remember past conversations across sessions, and let you search across everything you've ever asked.",
@@ -50,7 +58,7 @@ export const CHANGELOG: ChangelogEntry[] = [
},
{
version: "0.7.1",
date: "2026-07-12",
date: "2026-07-12 21:36",
fixed: [
"Cooking-assistant button on the homepage sat too high.",
"The chatbots would answer honestly if asked what AI model they run on — now always identify as Epicure.",
@@ -58,7 +66,7 @@ export const CHANGELOG: ChangelogEntry[] = [
},
{
version: "0.7.0",
date: "2026-07-12",
date: "2026-07-12 19:36",
added: [
"General cooking-question chatbot on the recipes homepage — ask technique/substitution/timing questions not tied to a specific recipe.",
],
@@ -69,7 +77,7 @@ export const CHANGELOG: ChangelogEntry[] = [
},
{
version: "0.6.0",
date: "2026-07-12",
date: "2026-07-12 19:09",
added: [
"Granular push-notification settings: turn individual categories on/off instead of all-or-nothing.",
],
@@ -80,7 +88,7 @@ export const CHANGELOG: ChangelogEntry[] = [
},
{
version: "0.5.1",
date: "2026-07-12",
date: "2026-07-12 19:05",
security: [
"Recipe/review photo uploads: a stolen storage key from another user's public recipe or review could be submitted as your own, causing that user's photo to be deleted from storage when the recipe was later edited or deleted. Both routes now check the key was actually issued to you for that recipe.",
"AI URL-import could be redirected to internal/private network addresses via a crafted 3xx response, and was separately vulnerable to DNS-rebinding between validation and fetch. Both the import and outgoing webhook delivery now resolve the host once and pin the connection to that address, re-validating on every redirect hop.",
@@ -89,7 +97,7 @@ export const CHANGELOG: ChangelogEntry[] = [
},
{
version: "0.5.0",
date: "2026-07-12",
date: "2026-07-12 18:37",
added: [
"Push notifications for shared shopping lists — get pinged when someone else checks off or adds items.",
],
@@ -101,7 +109,7 @@ export const CHANGELOG: ChangelogEntry[] = [
},
{
version: "0.4.0",
date: "2026-07-12",
date: "2026-07-12 16:13",
added: [
"Profile pictures: upload a custom photo, or get a Gravatar-backed avatar automatically.",
"\"Imported from\" badge on recipe cards for recipes brought in from a URL.",
@@ -113,7 +121,7 @@ export const CHANGELOG: ChangelogEntry[] = [
},
{
version: "0.3.1",
date: "2026-07-12",
date: "2026-07-12 15:08",
added: [
"A free-text \"describe what you're after\" field for batch-cooking generation, matching the standard recipe generator.",
],
@@ -125,21 +133,21 @@ export const CHANGELOG: ChangelogEntry[] = [
},
{
version: "0.3.0",
date: "2026-07-12",
date: "2026-07-12 14:46",
added: [
"Manually create and edit batch-cook recipes: a batch-cook toggle, an editable dish list with storage/reheat guidance, and per-step dish tagging in the recipe form — not just AI-generated ones anymore.",
],
},
{
version: "0.2.2",
date: "2026-07-12",
date: "2026-07-12 13:54",
fixed: [
"Recipe photo thumbnails always tried to load from localhost:9000 in production, tripping CSP/mixed-content blocks in every browser — the public storage URL wasn't reaching client-side code.",
],
},
{
version: "0.2.1",
date: "2026-07-12",
date: "2026-07-12 13:21",
fixed: [
"Recipe photos were lost after saving, and multi-file uploads only kept the last file selected.",
"Photo thumbnails failed to load — Next.js's image optimizer was refusing local-storage hosts.",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@epicure/web",
"version": "0.9.3",
"version": "0.9.4",
"private": true,
"scripts": {
"dev": "next dev",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "epicure",
"version": "0.9.3",
"version": "0.9.4",
"private": true,
"scripts": {
"dev": "pnpm --filter web dev",