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": "Shopping",
|
||||
"notes": "Board",
|
||||
"contacts": "Contacts",
|
||||
"birthdays": "Birthdays",
|
||||
"budget": "Budget",
|
||||
"settings": "Settings",
|
||||
"main": "Main navigation",
|
||||
@@ -82,6 +83,19 @@
|
||||
"allDay": "All day",
|
||||
"shoppingMore": "+{{count}} more",
|
||||
"weather": "Weather",
|
||||
"familyMembers": "Family members",
|
||||
"participantsAdded": "participants added",
|
||||
"upcomingBirthdays": "Upcoming birthdays",
|
||||
"noBirthdays": "No birthdays yet",
|
||||
"daysLeft": "{{count}} days",
|
||||
"budgetOverview": "Budget overview",
|
||||
"monthlyIncome": "Income",
|
||||
"monthlyExpenses": "Expenses",
|
||||
"monthlyBalance": "Balance",
|
||||
"savingsRate": "Savings rate",
|
||||
"topExpense": "Top expense",
|
||||
"budgetEntries": "Entries",
|
||||
"noBudgetData": "No budget data this month.",
|
||||
"customize": "Customize",
|
||||
"customizeTitle": "Customize widgets",
|
||||
"customizeReset": "Reset",
|
||||
@@ -537,6 +551,7 @@
|
||||
"tabAccount": "Account",
|
||||
"tabsAriaLabel": "Settings sections",
|
||||
"sectionDesign": "Appearance",
|
||||
"sectionAppName": "Application name",
|
||||
"sectionShopping": "Shopping",
|
||||
"shoppingCategoriesLabel": "Shopping Categories",
|
||||
"shoppingCategoriesHint": "Add, rename, delete or reorder categories.",
|
||||
@@ -554,6 +569,16 @@
|
||||
"sectionCalendarSync": "Calendar Sync",
|
||||
"sectionFamily": "Family Members",
|
||||
"cardAppearance": "Display",
|
||||
"appNameTitle": "App name",
|
||||
"appNameLabel": "Application name",
|
||||
"appNameHint": "This name appears in the sidebar, browser title and login screen.",
|
||||
"appNamePlaceholder": "Oikos",
|
||||
"appNameSavedToast": "Application name saved.",
|
||||
"sectionDate": "Date",
|
||||
"dateFormatTitle": "Date format",
|
||||
"dateFormatLabel": "Preferred date format",
|
||||
"dateFormatHint": "Choose how dates are displayed throughout the app.",
|
||||
"dateFormatSavedToast": "Date format saved.",
|
||||
"themeSystem": "System",
|
||||
"themeSysLabel": "Use system setting",
|
||||
"themeLight": "Light",
|
||||
@@ -751,6 +776,35 @@
|
||||
"pendingBadgeTitle": "{{count}} reminder due",
|
||||
"pendingBadgeTitlePlural": "{{count}} reminders due"
|
||||
},
|
||||
"birthdays": {
|
||||
"title": "Birthdays",
|
||||
"addButton": "Add birthday",
|
||||
"searchPlaceholder": "Search birthdays…",
|
||||
"upcomingTitle": "Next birthdays",
|
||||
"upcomingHint": "The next people to celebrate, already synced to the calendar.",
|
||||
"peopleTitle": "People",
|
||||
"peopleHint": "Search, review and edit every saved birthday.",
|
||||
"emptyTitle": "No birthdays yet",
|
||||
"emptyDescription": "Add a birthday to keep it visible in the calendar and reminders.",
|
||||
"newTitle": "New birthday",
|
||||
"editTitle": "Edit birthday",
|
||||
"nameLabel": "Name",
|
||||
"birthDateLabel": "Birth date",
|
||||
"photoLabel": "Profile picture",
|
||||
"photoOptional": "Optional: you can save without a profile picture.",
|
||||
"removePhoto": "Remove picture",
|
||||
"notesLabel": "Notes",
|
||||
"notesPlaceholder": "Gift ideas, favorite cake, family notes…",
|
||||
"calendarHint": "Each birthday is automatically added to the calendar and reminder system.",
|
||||
"requiredFields": "Name and birth date are required.",
|
||||
"createdToast": "Birthday saved.",
|
||||
"updatedToast": "Birthday updated.",
|
||||
"deletedToast": "Birthday deleted.",
|
||||
"deleteConfirm": "Delete birthday for \"{{name}}\"?",
|
||||
"ageNoteToday": "Turns {{age}} today.",
|
||||
"ageNoteTomorrow": "Turns {{age}} tomorrow.",
|
||||
"ageNoteDays": "Turns {{age}} in {{days}} days."
|
||||
},
|
||||
"recipes": {
|
||||
"title": "Recipes",
|
||||
"addRecipe": "Add recipe",
|
||||
|
||||
Reference in New Issue
Block a user