diff --git a/CHANGELOG.md b/CHANGELOG.md
index 41583e8..1901a85 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,33 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
+## [0.34.1] - 2026-04-29
+
+### Fixed
+- Kitchen tabs bar disappeared after navigating to Shopping, because the page overwrote the container a second time after loading data
+
+## [0.34.0] - 2026-04-29
+
+### Added
+- Navigation: new "Küche" (Kitchen) button in the bottom bar groups Meals, Recipes and Shopping behind a single entry point with a persistent tab bar inside each sub-module
+- Navigation: new "Suche" (Search) button added to the bottom bar for one-tap access to the search overlay
+- Kitchen tabs bar: sticky segment-control (Meals / Recipes / Shopping) injected at the top of each sub-module page; remembers the last active tab via sessionStorage
+- Keyboard shortcuts: `g k` navigates to Kitchen (last tab), `g k m` → Meals, `g k r` → Recipes, `g k s` → Shopping
+- i18n: `nav.kitchen`, `nav.search` and `shortcuts.goKitchen` keys added to all 15 locale files
+
+### Changed
+- Navigation: bottom bar reorganised — Dashboard, Calendar, Küche, Suche, Mehr (5 items)
+- Navigation: Meals, Recipes and Shopping removed from the More sheet; they are accessible via the Kitchen tab bar and the sidebar on desktop
+- More sheet: reduced from 3-column to 2-column grid for larger touch targets; search trigger removed
+- More sheet: drag-handle added at the top; swipe-down gesture closes the sheet
+
+## [0.33.1] - 2026-04-29
+
+### Changed
+- Navigation: removed the dedicated Search button from the bottom bar; the bottom bar now shows three primary module links plus the More button
+- Navigation: the More sheet now opens with a full-width pill-shaped search trigger at the top, replacing the grid-cell search item
+- Search: the search overlay input field is now positioned at the bottom of the screen (thumb zone) instead of the top
+
## [0.33.0] - 2026-04-29
### Added
diff --git a/package-lock.json b/package-lock.json
index 59cdcfd..825c7c9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "oikos",
- "version": "0.33.0",
+ "version": "0.34.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "oikos",
- "version": "0.33.0",
+ "version": "0.34.1",
"license": "MIT",
"dependencies": {
"bcrypt": "^6.0.0",
diff --git a/package.json b/package.json
index ac8c542..fc448a9 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "oikos",
- "version": "0.33.0",
+ "version": "0.34.1",
"description": "Self-hosted family planner - calendar, tasks, shopping, meal planning, budget and more. Private, open-source, no subscription.",
"main": "server/index.js",
"type": "module",
@@ -20,12 +20,13 @@
"test:ncb": "node --experimental-sqlite test-notes-contacts-budget.js",
"test:ux-utils": "node test-ux-utils.js",
"test:modal-utils": "node --loader ./test-browser-loader.mjs test-modal-utils.js",
+ "test:kitchen-tabs": "node --loader ./test-browser-loader.mjs test-kitchen-tabs.js",
"test:reminders": "node --experimental-sqlite test-reminders.js",
"test:api": "node test-api.js",
"test:setup": "node test-setup.js",
"test:ics-parser": "node test-ics-parser.js",
"test:ics-sub": "node --experimental-sqlite test-ics-subscription.js",
- "test": "node --experimental-sqlite test-db.js && node --experimental-sqlite test-dashboard.js && node --experimental-sqlite test-tasks.js && node --experimental-sqlite test-shopping.js && node --experimental-sqlite test-meals.js && node --experimental-sqlite test-calendar.js && node --experimental-sqlite test-notes-contacts-budget.js && npm run test:ux-utils && npm run test:modal-utils && npm run test:reminders && npm run test:api && npm run test:ics-parser && npm run test:ics-sub && npm run test:setup"
+ "test": "node --experimental-sqlite test-db.js && node --experimental-sqlite test-dashboard.js && node --experimental-sqlite test-tasks.js && node --experimental-sqlite test-shopping.js && node --experimental-sqlite test-meals.js && node --experimental-sqlite test-calendar.js && node --experimental-sqlite test-notes-contacts-budget.js && npm run test:ux-utils && npm run test:modal-utils && npm run test:reminders && npm run test:api && npm run test:ics-parser && npm run test:ics-sub && npm run test:setup && npm run test:kitchen-tabs"
},
"dependencies": {
"bcrypt": "^6.0.0",
diff --git a/public/index.html b/public/index.html
index 953a94c..600026f 100644
--- a/public/index.html
+++ b/public/index.html
@@ -37,6 +37,7 @@
+