feat: birthday tracking, dashboard KPIs, and app name customization (#88)
- Add Birthdays module: CRUD with calendar/reminder auto-sync, photo upload, age notes - Add DB migration 18 (birthdays table with calendar_event_id, trigger, indexes) - Add dashboard widgets: birthdays, family participants, budget overview - Add Settings > General: admins can set a custom app name (reflected in title/sidebar/login) - Improve service worker: network-first caching for mutable JS/CSS assets - Add translations for 16 locales (birthday keys) Fixes applied during integration: - innerHTML replaced with insertAdjacentHTML/replaceChildren throughout birthdays.js and dashboard.js - docker-compose.yml personal dev changes reverted Co-authored-by: Rafael Foster <rafaelgfoster@gmail.com> Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -38,6 +38,7 @@
|
||||
"shopping": "Покупки",
|
||||
"notes": "Нотатки",
|
||||
"contacts": "Контакти",
|
||||
"birthdays": "Дні народження",
|
||||
"budget": "Бюджет",
|
||||
"settings": "Налаштування",
|
||||
"main": "Головна навігація",
|
||||
@@ -82,6 +83,19 @@
|
||||
"allDay": "Весь день",
|
||||
"shoppingMore": "+{{count}} ще",
|
||||
"weather": "Погода",
|
||||
"familyMembers": "Члени родини",
|
||||
"participantsAdded": "учасників додано",
|
||||
"upcomingBirthdays": "Найближчі дні народження",
|
||||
"noBirthdays": "Днів народження ще немає",
|
||||
"daysLeft": "{{count}} дн.",
|
||||
"budgetOverview": "Огляд бюджету",
|
||||
"monthlyIncome": "Доходи",
|
||||
"monthlyExpenses": "Витрати",
|
||||
"monthlyBalance": "Баланс",
|
||||
"savingsRate": "Рівень заощаджень",
|
||||
"topExpense": "Найбільша витрата",
|
||||
"budgetEntries": "Записи",
|
||||
"noBudgetData": "Немає бюджетних даних за цей місяць.",
|
||||
"customize": "Налаштувати",
|
||||
"customizeTitle": "Налаштувати віджети",
|
||||
"customizeReset": "Скинути",
|
||||
@@ -537,6 +551,7 @@
|
||||
"tabAccount": "Обліковий запис",
|
||||
"tabsAriaLabel": "Розділи налаштувань",
|
||||
"sectionDesign": "Зовнішній вигляд",
|
||||
"sectionAppName": "Назва застосунку",
|
||||
"sectionShopping": "Покупки",
|
||||
"shoppingCategoriesLabel": "Категорії покупок",
|
||||
"shoppingCategoriesHint": "Додавайте, перейменовуйте, видаляйте або змінюйте порядок категорій.",
|
||||
@@ -554,6 +569,16 @@
|
||||
"sectionCalendarSync": "Синхронізація календаря",
|
||||
"sectionFamily": "Члени родини",
|
||||
"cardAppearance": "Відображення",
|
||||
"appNameTitle": "Назва застосунку",
|
||||
"appNameLabel": "Назва застосунку",
|
||||
"appNameHint": "Ця назва відображається в бічному меню, заголовку браузера та на екрані входу.",
|
||||
"appNamePlaceholder": "Oikos",
|
||||
"appNameSavedToast": "Назву застосунку збережено.",
|
||||
"sectionDate": "Дата",
|
||||
"dateFormatTitle": "Формат дати",
|
||||
"dateFormatLabel": "Бажаний формат дати",
|
||||
"dateFormatHint": "Виберіть, як дати відображаються в застосунку.",
|
||||
"dateFormatSavedToast": "Формат дати збережено.",
|
||||
"themeSystem": "Системна",
|
||||
"themeSysLabel": "Використовувати системні налаштування",
|
||||
"themeLight": "Світла",
|
||||
@@ -781,6 +806,34 @@
|
||||
"placeholder": "Пошук…",
|
||||
"noResults": "Результатів не знайдено."
|
||||
},
|
||||
"birthdays": {
|
||||
"title": "Дні народження",
|
||||
"addButton": "Додати день народження",
|
||||
"searchPlaceholder": "Шукати дні народження…",
|
||||
"upcomingTitle": "Найближчі дні народження",
|
||||
"upcomingHint": "Найближчі святкування, уже синхронізовані з календарем.",
|
||||
"peopleTitle": "Люди",
|
||||
"peopleHint": "Шукайте, переглядайте й редагуйте всі збережені дні народження.",
|
||||
"emptyTitle": "Поки що немає днів народження",
|
||||
"emptyDescription": "Додайте день народження, щоб він відображався в календарі та нагадуваннях.",
|
||||
"newTitle": "Новий день народження",
|
||||
"editTitle": "Редагувати день народження",
|
||||
"nameLabel": "Ім'я",
|
||||
"birthDateLabel": "Дата народження",
|
||||
"photoLabel": "Фото профілю",
|
||||
"removePhoto": "Видалити фото",
|
||||
"notesLabel": "Нотатки",
|
||||
"notesPlaceholder": "Ідеї подарунків, улюблений торт, сімейні нотатки…",
|
||||
"calendarHint": "Кожен день народження автоматично додається до календаря та системи нагадувань.",
|
||||
"requiredFields": "Ім'я та дата народження є обов'язковими.",
|
||||
"createdToast": "День народження збережено.",
|
||||
"updatedToast": "День народження оновлено.",
|
||||
"deletedToast": "День народження видалено.",
|
||||
"deleteConfirm": "Видалити день народження для \"{{name}}\"?",
|
||||
"ageNoteToday": "Сьогодні виповнюється {{age}}.",
|
||||
"ageNoteTomorrow": "Завтра виповниться {{age}}.",
|
||||
"ageNoteDays": "За {{days}} дн. виповниться {{age}}."
|
||||
},
|
||||
"onboarding": {
|
||||
"step1Title": "Welcome to Oikos",
|
||||
"step1Body": "Your personal family planner. Tasks, calendar, shopping and more – all in one place.",
|
||||
|
||||
Reference in New Issue
Block a user