- Added translations for the "missingUserId" key in multiple languages to improve user feedback when user ID is not available.
- Updated the user ID handling in the store and WorkerSchedulesView component to ensure proper user identification when sending data to the daemon.
- Enhanced error handling to notify users when the user ID is missing, improving overall user experience.
- Updated navigation structure to include a new section for worker schedules, accessible to specific user roles.
- Introduced a new user right type for 'worker_schedule_read' to manage access permissions effectively.
- Added localization entries for worker schedules in multiple languages, ensuring consistent user experience across the application.
- Created a new route and component for managing worker schedules in the admin panel.
- Modified the election query to filter for upcoming election dates instead of past ones, ensuring only future positions are considered.
- Added checks for prerequisites in election eligibility, allowing positions without prerequisites to be selectable, improving user experience in the application.
- Added mappings for character titles and genders in the FalukantService to enrich notifications with additional character information.
- Updated the MessagesDialog component to utilize the new title and gender data, improving the display of director names based on their titles and genders.
- Ensured that character names are displayed correctly, enhancing the overall user experience in notifications.
- Added event dispatching for 'yourpart:hardvocab:changed' in both VocabPracticeDialog and VocabCourseView components to notify changes in hard vocabulary items.
- Implemented event handling in VocabCourseView to refresh the hard vocabulary list when the event is triggered, ensuring UI consistency across components.
- Included error handling for environments that do not support CustomEvent, enhancing robustness.
- Introduced a new boolean field `autoAdjustIncome` in the Director model to manage income adjustments automatically.
- Updated the FalukantService to include `autoAdjustIncome` in director data responses and settings management.
- Enhanced the DirectorInfo component to allow users to toggle the `autoAdjustIncome` setting.
- Updated internationalization files to include translations for the new feature across multiple languages.
- Refactored character display for spouses, children, and lovers to improve UI consistency and visual appeal.
- Introduced a new method for calculating character avatar styles based on age and gender, enhancing the representation of characters.
- Updated the layout to include compact character media for children and lovers, improving space utilization and readability.
- Added logic to initialize marriage satisfaction to 100 for newly married couples in the FalukantService.
- Updated the FamilyView component to conditionally display marriage satisfaction only for married relationships, improving clarity in the UI.
- Ensured default values are used when marriage satisfaction is not explicitly set, enhancing user experience.
- Introduced detailed logging throughout the sendLessonAssistantMessage method to track request lifecycle, including start, abort conditions, and response handling.
- Improved error handling for various scenarios such as disabled assistant, unconfigured settings, empty messages, and fetch failures, providing clearer feedback to users.
- Added logging for response parsing and upstream errors to facilitate debugging and improve overall service reliability.
- Introduced logic to reinsert incorrectly answered items into the SRS queue, allowing them to be reviewed again before the session ends.
- Added a constant for the reinsert offset to control the position of requeued items.
- Updated session management to ensure incorrect answers are not marked as completed, enhancing the learning experience.
- Enhanced the AppHeader component to support separate ad slots for mobile and desktop views, improving ad display based on viewport width.
- Introduced a responsive design that adjusts ad dimensions and formats for better visibility across different screen sizes.
- Updated methods to dynamically determine the active ad slot and handle viewport resizing events for optimal ad rendering.
- Updated the VocabService to allow configurable timeout for responses, defaulting to 300 seconds if not set or invalid.
- Modified AppHeader component to change ad format to horizontal and adjusted responsive settings for better display consistency.
- Ensured proper height settings for ad elements to maintain layout integrity across different screen sizes.
- Added a new method to load branch names from the API and map them by ID for better display in money history activities.
- Updated the component's data structure to include a mapping of branch names, improving the clarity of tax-related activity translations.
- Introduced a new private method `_toNumericValue` to handle conversion of various input types to numeric values, ensuring proper validation of user money and requirement values.
- Updated `checkMoneyRequirement` method to utilize the new conversion logic, improving accuracy in money requirement checks by handling edge cases for non-finite values.
- Added translation logic for activities related to tax from sales branches and reputation actions in the MoneyHistoryView component.
- Updated internationalization files to include new strings for these activities in multiple languages.
- Updated the script to prioritize the root environment file for builds, falling back to the frontend environment file if necessary.
- Added a Google AdSense script to the frontend HTML for improved monetization capabilities.
- Added user blocking checks in authentication and reporting processes, returning appropriate error responses.
- Expanded moderation report functionality to include new target types and optional fields for reports.
- Implemented a new API endpoint to retrieve the count of open moderation reports.
- Enhanced frontend components to allow users to report profiles, images, and guestbook entries, with corresponding UI updates.
- Updated internationalization files to include new strings for reporting features in both German and English.
- Added logic to enable the reporting button based on chat state and message presence.
- Introduced a computed property to determine if the chat can be reported.
- Updated the reporting method to accommodate the last partner in case the current partner is unavailable.
- Improved handling of partner details in the reporting payload for better accuracy.
- Added reportChatIncident method in ChatController to handle reporting of chat incidents.
- Introduced a new API route for reporting incidents in chatRouter.
- Implemented chatService methods to ensure the chat report table is created and to handle incident data storage.
- Enhanced frontend components to allow users to report incidents in both multi and random chat dialogs.
- Updated internationalization files to include new strings for reporting functionality in multiple languages.
- Added topic and forum IDs to moderation report queries for better context.
- Updated admin interface to include links to open reported forum messages.
- Implemented methods to handle opening target messages directly from the moderation reports view.
- Enhanced internationalization support for new UI elements in both German and English.
- Improved scrolling behavior to focus on specific messages when navigating to them.
- Added moderationRouter to handle moderation-related API routes.
- Introduced new methods in AdminController for fetching all regions, region types, and creating regions.
- Enhanced adminRouter with routes for moderation reports and status updates.
- Updated navigationController to include moderation reports in the admin menu.
- Implemented frontend components for reporting messages in the forum and managing moderation reports.
- Added internationalization support for moderation-related texts in multiple languages.
- Added new constants and methods in FalukantService to calculate branch action costs based on owned branch types, enhancing the cost management logic.
- Updated the CreateBranchDialog to utilize the new cost calculation, ensuring accurate display of branch creation costs based on user-owned branches.
- Improved the handling of branch type costs, allowing for a more flexible and responsive user experience when creating and upgrading branches.
- Refactored methods in VocabPracticeDialog to improve the handling of hard vocabulary items, including the addition of `findMatchingHardKey` and `removeHardEntriesForItem` for better management of hard vocabulary entries.
- Updated the VocabCourseView to display a new section for hard vocabulary items, allowing users to view and remove difficult words easily.
- Enhanced the UI with new styles for the hard vocabulary list, improving user engagement and accessibility to challenging vocabulary practice.
- Increased the width from 55em to 64em and height from 32em to 40em to enhance the visual layout of the VocabPracticeDialog component, providing a better user experience.
- Enhanced the normalization process for vocabulary items to better accommodate multiple valid translations, improving the overall accuracy of vocabulary practice.
- Updated methods for expanding vocabulary item alternatives, ensuring a more flexible and effective learning experience for users.
- Added methods to split phrase alternatives and expand pool item alternatives, allowing for better handling of multiple valid translations and maintaining alignment between learning and reference phrases.
- Updated the normalization process to incorporate these new methods, improving the accuracy and flexibility of vocabulary practice sessions.
- Renamed `expandAnswerVariants` to `expandSingleAnswerVariants` for clarity and added a new `expandAnswerVariants` method to handle full-answer alternatives like "A / B".
- Improved the logic to ensure that phrase alternatives are expanded correctly, enhancing the accuracy of answer variant generation during vocabulary practice.
- Introduced a button to start hard vocabulary practice when applicable, enhancing user engagement with challenging vocabulary.
- Implemented methods to manage and refresh the hard vocabulary list from local storage, ensuring users have access to their difficult words.
- Added event listeners to refresh the hard vocabulary list on window focus, improving the overall user experience.
- Updated the VocabLessonView to display the vocab trainer section when there are cross-chapter hard vocabulary items, improving user engagement and accessibility to training options.
- Adjusted the button rendering logic to ensure that the hard vocabulary trainer is available when applicable, enhancing the overall learning experience.
- Updated the success tracking logic to prevent inflating normal success counters during hard-phase drills, ensuring accurate representation of user progress.
- Introduced a condition to separate tracking for hard-phase activities, enhancing the integrity of vocabulary rotation and user experience.
- Introduced a constant `HARD_REQUIRED_CONSECUTIVE_CORRECT` to define the required number of consecutive correct answers for hard vocabulary items, improving code maintainability and readability.
- Updated relevant methods to utilize the new constant, ensuring consistent behavior across the component.
- Introduced new localization strings for marking vocabulary as difficult, including options to save and remove difficult marks.
- Enhanced user experience by providing feedback on the status of difficult vocabulary in Cebuano, Spanish, and French.
- Updated existing localization files to ensure consistency across languages, supporting the recent vocabulary management features.
- Introduced functionality to mark vocabulary items as difficult, allowing users to track and manage challenging words during practice sessions.
- Added buttons for marking and unmarking current vocabulary as hard, enhancing user engagement and learning effectiveness.
- Updated the UI to display the count of hard-marked vocabulary items, providing users with better insights into their learning progress.
- Enhanced localization files for German and English to support new vocabulary marking features, ensuring a consistent user experience across languages.
- Added a new `completionCount` field to the DayProduction model to track the number of completed productions.
- Updated the FalukantService to aggregate completed productions using the new `completionCount` field, improving accuracy in production statistics.
- Introduced new vocabulary training features in VocabLessonView, including options to mark vocabulary as difficult and track remaining hard vocabulary, enhancing user engagement and learning effectiveness.
- Updated localization files for German and English to support new vocabulary training features, ensuring a consistent user experience across languages.
- Updated error handling in AdminController to include 'targetnotdead' status for improved response accuracy.
- Modified character deletion logic in AdminService to ensure correct target character is identified, especially when dealing with living characters, enhancing data integrity during cleanup operations.
- Adjusted attributes fetched for characters to include 'health', facilitating better decision-making in deletion processes.
- Introduced a reusable `deleteIfTableExists` function in AdminService to simplify the deletion of character-related data across multiple tables, improving code maintainability.
- Updated the deletion logic to check for table existence before executing delete queries, enhancing robustness.
- Enhanced the EditUserView by integrating a `ChooseDialog` for user confirmation before proceeding with character death cleanup, improving user experience and interaction clarity.
- Implemented `adminCleanupCharacterDeathArtifacts` method in AdminService to remove stale character-bound data after death/inheritance, including knowledge, debtors prism, and political offices.
- Added corresponding route in AdminRouter for triggering the cleanup process via an API endpoint.
- Enhanced AdminController to handle requests for the new cleanup feature, ensuring proper error handling and response formatting.
- Updated frontend components to include a user interface for initiating the cleanup, with localization support in both English and German for improved user experience.
- Added a `pendingRetry` property to manage immediate retries after incorrect answers, enhancing user experience during vocabulary practice.
- Updated logic to handle retries, allowing users to quickly attempt the last question again with the correct direction.
- Ensured that the retry state is reset appropriately after correct answers or when skipping questions, maintaining clarity in the training flow.
- Added a new section in VocabPracticeDialog to display the last incorrect answer, including the asked vocabulary, user answer, and correct solutions.
- Updated localization strings in Cebuano, German, English, Spanish, and French to support the new review feature, enhancing user experience across multiple languages.
- Improved UI layout for the review section to provide clearer feedback during vocabulary training sessions.
- Implemented a new vocabulary review section in VocabLessonView to display the last incorrect answer, including the asked vocabulary, user answer, and correct answer.
- Added localization strings for the new review feature in Cebuano, German, English, Spanish, and French, enhancing user experience across multiple languages.
- Updated the UI to visually differentiate the review section, improving clarity and usability during vocabulary training sessions.
- Added a new timer management feature to the vocab trainer, allowing for better control over the continuation of questions after user answers.
- Introduced `clearVocabTrainerContinueTimer` method to prevent multiple timers from running simultaneously, enhancing the stability of the training session.
- Updated various methods to utilize the new timer management, ensuring a smoother user experience during vocabulary training.
- Increased the timeout duration for the language assistant from 30 seconds to 120 seconds to accommodate longer processing times.
- Added new localization strings across multiple languages (Cebuano, German, English, Spanish, French) to provide user feedback during the assistant's wait period, enhancing clarity and user experience.
- Implemented a visual waiting indicator in VocabLessonView to inform users that the assistant is still processing their request, improving overall interaction quality.
- Introduced methods for improved text analysis and validation in VocabService, including `_wordCount` and `_looksLikeFragmentMismatch`, to better assess learning and reference pairs.
- Updated VocabPracticeDialog to display submitted answers and correct solutions, enhancing user feedback during practice sessions.
- Enhanced VocabLessonView to ensure only trainable vocabulary pairs are processed, improving the quality of vocabulary training.
- Added localization entries for new UI elements in both English and German, ensuring clarity in user interactions.
- Introduced a new method `expandAnswerVariants` to generate multiple answer variants from a given input, enhancing the flexibility of acceptable answers.
- Improved handling of words with slashes to create diverse answer options, ensuring a richer vocabulary training experience.
- Updated the answer collection logic to utilize the new method, allowing for a broader range of valid responses during practice sessions.
- Improved text analysis methods in VocabService to better identify instructional-like texts and task-related prompts, enhancing vocabulary training quality.
- Updated VocabPracticeDialog to include a new method for checking instruction-like text, ensuring more accurate filtering of trainable pairs.
- Incremented SRS session storage version to reflect changes in session management and data handling.
- Refactored normalization and validation logic to maintain consistency across vocabulary entries and improve user experience.
- Introduced new routes for Bisaya learning and German for Bisaya courses, enhancing the marketing section of the application.
- Updated sitemap.xml to include new course URLs for better SEO visibility.
- Added localization entries for both courses in English and German, improving content accessibility for users.
- Enhanced SEO metadata generation for the new courses, ensuring proper indexing and visibility in search engines.
- Updated VocabLandingView to feature links to the new courses, improving user navigation and engagement.
- Refactored SRS pair validation logic by introducing the `_isTrainableSrsPair` method to enhance the criteria for acceptable learning and reference pairs.
- Added `_isInstructionLikeText` method to filter out instructional texts from SRS pairs, improving the quality of vocabulary training.
- Updated various methods to utilize the new validation logic, ensuring consistent handling of vocabulary entries across the service.
- Enhanced the `_courseHasDueSrsItems` and `_extractTrainerVocabsFromLessonDidactics` methods to improve data retrieval and filtering based on the new criteria.
- Refactored vocab trainer logic to improve handling of acceptable answers, allowing for multiple translations and synonyms.
- Introduced a new method to retrieve equivalent vocabulary answers, ensuring mixed pools from different lessons provide valid alternatives.
- Enhanced answer normalization process to prevent duplicates and improve the quality of acceptable answers presented to users.
- Refactored the `getHighestChurchOfficeInfo` method to utilize a new approach for retrieving the highest church office, improving accuracy and performance.
- Updated the `OverviewView` to format and display the highest political and church office names instead of raw rank values, enhancing user experience and clarity.
- Introduced a new method `formatCertificateHighestOffice` for better localization and presentation of office titles in the UI.
- Added functionality to refresh and update household tension scores and reasons in the FalukantService, improving user experience by reflecting real-time household dynamics.
- Updated localization strings across multiple languages (Cebuano, German, English, Spanish, French) to include new office rank terminology and improved marriage crisis descriptions, enhancing clarity and context for users.
- Introduced a new office rank tier structure in localization files, providing better categorization and understanding of office ranks in the game.
- Modified the userHouse query to include 'id' in the attributes, improving data retrieval.
- Enhanced transaction handling in state and userHouse updates to ensure atomic operations, preventing potential data inconsistencies.
- Updated VocabService to calculate total due count for spaced repetition system (SRS) items, improving data handling for user queries.
- Modified VocabCourseView to incorporate total due count in the UI, ensuring accurate display of SRS item statistics.
- Enhanced error handling and data validation for SRS due items, improving overall reliability and user experience.
- Updated the MiniCalendarWidget to utilize localized strings for month names, weekdays, and loading messages, improving user experience across multiple languages.
- Refactored the calendar logic to use constants for month keys and weekday order, ensuring consistency with backend configurations.
- Added new translation entries for the mini widget in Cebuano, German, English, Spanish, and French, enhancing accessibility for users.
- Updated localization strings for chat and minigames across multiple languages, including Cebuano, German, English, Spanish, and French, to improve user experience and clarity.
- Added new translations for participant counts, user selection prompts, and game over messages, ensuring consistency and better engagement in the UI.
- Enhanced existing translations for accuracy and context, particularly in the TaxiGame component and chat functionalities.
- Added support for spaced repetition system (SRS) session management, allowing users to resume practice sessions with due items.
- Introduced new UI elements to display SRS session status, including total due, completed, and remaining items.
- Enhanced localization for SRS-related messages in multiple languages, improving user experience and clarity.
- Updated methods for saving and loading SRS session data to local storage, ensuring persistence across sessions.
- Added new localized strings for minigames in Cebuano, including loading hints, objectives, and play focus descriptions to improve user experience.
- Updated existing translations for clarity and consistency across various game elements.
- Enhanced the Match3Game component to utilize localized strings, ensuring dynamic text rendering based on user language preferences.
- Included a new entry in .gitignore for the locale audit report to maintain a clean repository.
- Corrected grammatical errors and improved the phrasing in the BISAYA_PHASE4_DIDACTICS, ensuring clarity and accuracy in the learning materials.
- Updated the course content generation script to include lessons from phase 5, enhancing the overall structure and flow of the course.
- Introduced a new vocabulary course content synchronization process, improving the integration of vocabulary resources across different modules.
- Enhanced the VocabService to dynamically adjust temperature settings based on the mode, optimizing response generation for different contexts.
- Added new localized titles and vocabulary entries in multiple languages, enriching the learning experience for users.
- Introduced a new section for language trainers in multiple languages (Cebuano, German, English, Spanish, French) to enhance user guidance on beginner courses.
- Updated home page SEO metadata to reflect the addition of language courses, improving search visibility and user engagement.
- Enhanced the NoLoginView component to display the new language trainer information, providing users with clear insights into available resources.
- Introduced a new section for language assistant presets, allowing users to quickly apply configurations for Ollama and OpenAI.
- Implemented methods to set the base URL and model for each preset, enhancing user experience with one-click setup.
- Added styling for the preset buttons and hints to improve UI clarity and usability.
- Expanded the BISAYA_PHASE4_DIDACTICS by adding new learning goals, core patterns, speaking prompts, and practical tasks to improve language acquisition.
- Updated the course content generation scripts to incorporate the new lesson structures and ensure alignment with the latest didactic updates.
- Enhanced the logic for generating exercises based on lesson types, introducing additional situational and speaking exercises for advanced lessons.
- Introduced a new section for 'Ort & Richtung' in the Bisaya didactics, including learning goals, core patterns, grammar focus, speaking prompts, and practical tasks to enhance language learning.
- Updated the lesson didactics to include the new section, ensuring comprehensive coverage of location and direction vocabulary.
- Added logic to adjust vocabulary blending and switching conditions based on lesson type and didactic mode, improving the learning experience during review lessons.
- Implemented dynamic thresholds for switching between multiple choice and typing modes based on success rates and lesson context.
- Enhanced vocabulary source selection to incorporate a review share, optimizing the question pool for better engagement during typing sessions.
- Updated the permission settings for the environment file to 640, ensuring it is readable only by the owner and the deploy group.
- Modified the sequelize configuration to safely handle missing environment variables, converting them to strings or setting them to undefined to prevent runtime errors.
[force-deploy]
- Moved permission setting commands to the end of the script for better clarity and execution flow.
- Changed the log message from "Running database synchronization..." to "Running database migrations..." to accurately reflect the operation being performed.
- Ensured that permission settings for backend and data directories are consistently applied after the migration process.
[force-deploy]
- Modified the deployment workflow to include new migration paths for the backend, ensuring that migrations are correctly referenced in the deployment process.
- Updated the `db:migrate` script in package.json to point to the `migrations-active` directory, enhancing clarity and organization of migration files.
- Adjusted the deployment conditions to account for changes in migration file locations, improving the accuracy of change detection during deployments.
- Removed obsolete migration files to streamline the migration process and prevent confusion.
- Updated the migration script for the contact_message table to conditionally add or remove columns based on their existence, improving migration safety and preventing errors during deployment.
- This change ensures that the migration can be run multiple times without causing issues if the columns already exist or are missing.
[force-deploy]
- Implemented logic to check for a `[force-deploy]` tag in the latest commit message, allowing for a forced deployment regardless of detected changes.
- Updated deployment conditions to include force deploy status, enabling more flexible deployment options based on commit messages.
- Enhanced sync step to trigger on force deploy, ensuring content updates are applied even without file changes.
- Updated the npm install command to remove the production flag, allowing for the installation of all dependencies.
- Added a step to prune development dependencies after running database migrations, optimizing the deployment environment.
- Updated lesson reset functionality to ensure users start in the 'learn' tab after resetting progress.
- Enhanced vocabulary normalization by adding a method to strip trailing parenthetical notes, improving text consistency.
- Adjusted normalization logic to conditionally ignore trailing notes based on user input mode, enhancing user experience during vocabulary training.
- Introduced a new npm script for database migrations in package.json.
- Updated update-backend.sh to execute migrations and conditionally run legacy sync-db based on environment variable.
- Enhanced syncDatabase.js to skip initialization routines if APP_INIT_ON_START is not set, promoting best practices for schema changes during deployment.
- Updated `deploy-yourpart-bluegreen.sh` to pass additional arguments for skipping backend or frontend updates.
- Enhanced `update.sh` to handle `--skip-backend` and `--skip-frontend` flags, allowing for more flexible deployment based on changes detected.
- Modified deployment workflow to conditionally execute based on changes in frontend or backend files, improving deployment efficiency.
- Added functionality to detect if the script is run directly, allowing for conditional execution of the main function.
- Imported `pathToFileURL` from the 'url' module to facilitate the direct run check, improving script usability and flexibility.
- Implemented a new workflow step to detect changes in vocab course files and conditionally sync content.
- Added a script to check for specific changes in the repository and trigger the sync process if necessary.
- Introduced a new npm script for syncing vocab course content in the backend package.json.
- Added an auto-incrementing primary key to the UserHouse model for improved database management.
- Integrated new didactics fragments from the Bisaya course plan, including relationship anchor didactics and lessons for enhanced curriculum depth.
- Updated lesson retrieval logic to utilize planned lesson titles, improving the accuracy of didactics resolution.
- Refactored course content generation scripts to incorporate new didactics, ensuring a comprehensive learning experience for users.
- Introduced new didactics fragments for "Alltagsgespräche - Teil 1" and "Alltagsgespräche - Teil 2," including learning goals, core patterns, speaking prompts, and practical tasks to enhance conversational skills in Bisaya.
- Updated the lesson structure to incorporate these new fragments, improving the overall curriculum and providing learners with more comprehensive resources for everyday interactions.
- Added new glosses for the numbers sixty, seventy, and eighty in the Bisaya didactics, enriching the numerical curriculum.
- Updated the _serializeLessonProgress method to include an options parameter for suppressing lesson review due notifications based on SRS item status.
- Introduced a new method to check for due SRS items, improving the handling of lesson progress and review scheduling.
- Added SRS rating buttons in VocabPracticeDialog to allow users to rate their confidence after answering vocabulary questions.
- Updated methods to handle SRS ratings and integrated them into the review process, improving spaced repetition feedback.
- Enhanced UI with new styles for SRS rating buttons and updated translations for SRS-related terms in multiple languages.
- Modified VocabCourseView to display appropriate introductory text based on SRS due items, improving user guidance.
- Added new endpoints in vocabController for retrieving SRS due items and reviewing SRS items, improving spaced repetition support.
- Updated vocabService to handle SRS item creation and scheduling, ensuring effective tracking of vocabulary exposure.
- Enhanced vocabRouter with new routes for SRS functionalities, facilitating user interaction with spaced repetition features.
- Modified VocabPracticeDialog and VocabCourseView to integrate SRS due items, providing users with timely review opportunities.
- Updated translations and UI elements to reflect new SRS features, enhancing user experience and accessibility.
- Updated vocabService to merge extracted vocabularies and improve handling of learning and reference pairs.
- Introduced normalization and exposure tracking in VocabPracticeDialog to ensure diverse and underexposed vocabulary practice.
- Enhanced VocabLessonView with methods to identify underexposed vocabularies and adjust selection logic for improved learning outcomes.
- Implemented new constants for minimum exposure requirements to optimize vocabulary training sessions.
- Added new glosses for numbers in Bisaya, enhancing the didactics for numerical lessons.
- Included translations for numbers 4 to 19, improving the comprehensiveness of the numerical curriculum.
- Updated the lesson structure to support the expanded vocabulary, ensuring a richer learning experience.
- Introduced comprehensive didactics snippets for the "Haus & Familie" lesson, including learning goals, core patterns, grammar focus, speaking prompts, and practical tasks.
- Updated the lesson retrieval logic to incorporate these new fragments as a fallback for core patterns, enhancing the robustness of lesson content delivery.
- Modified the vocab service to utilize the new didactics fragments, ensuring a seamless integration into the existing lesson structure.
- Refactored the lesson retrieval logic to include lesson number and title in the query, improving data handling.
- Updated the didactics processing to utilize a lesson-like object instead of fetching lessons by primary key, enhancing performance.
- Improved error handling and ensured proper closure of the database connection after execution.
- Introduced a new section titled "Rollenspiele - echte Situationen" with multiple exercises focusing on real-life scenarios in Bisaya, including multiple-choice, gap-fill, and transformation tasks.
- Implemented a normalization function for lesson titles to improve matching accuracy and facilitate the rebuilding of placeholder lessons.
- Updated the course content generation logic to replace outdated exercises with new ones based on normalized titles, ensuring a more relevant learning experience.
- Introduced a new lesson titled "Zahlen & Preise" to enhance the numerical curriculum in Bisaya.
- Updated the course creation logic to check for existing "Familien"-Bisaya courses, ensuring idempotency in course creation.
- Enhanced the lesson didactics by mapping legacy titles to current lesson keys, improving data consistency.
- Adjusted the course generation script to limit Bisaya courses to German-speaking learners only, streamlining course offerings.
- Updated lessons on numbers to include detailed sections for "Zahlen 1–20," "Zahlen: Zehner," "Zahlen: Hunderter," and "Zahlen: Tausender," focusing on foundational numerical concepts in Bisaya.
- Introduced various exercise types such as multiple-choice, gap-fill, and transformation tasks to improve learner engagement and comprehension of numerical expressions.
- Enhanced didactics with clear learning goals, core patterns, grammar focus, speaking prompts, and practical tasks to support effective learning.
- Added review lessons to reinforce key concepts and ensure continuity in learning progression.
- Introduced methods to expand comparable answer variants and improve answer equivalence checks, allowing for more flexible user responses.
- Updated the answer validation logic to utilize the new methods, enhancing the accuracy of response evaluation during exercises.
- Modified the alternatives for a transformation exercise to include additional variations, enhancing the response options for learners.
- Updated the vocabulary service to incorporate both primary and alternative answers, improving the accuracy of answer validation during exercises.
- Added new lessons titled "Einkaufen & Preise" and "Zahlen & Preise" with various exercises focusing on shopping vocabulary and numerical expressions in Bisaya.
- Introduced multiple exercise types including multiple-choice, gap-fill, and transformation tasks to enhance learner engagement and understanding of practical language use in market contexts.
- Updated didactics to include learning goals, core patterns, grammar focus, speaking prompts, and practical tasks related to shopping dialogues and numerical comprehension.
- Included a review lesson "Woche 2 - Wiederholung" to reinforce key concepts from previous lessons, ensuring comprehensive learning continuity.
- Enhanced vocabulary testing with a new "Woche 2 - Vokabeltest" to assess retention of key terms and phrases.
- Introduced a new lesson titled "Zeit & Datum" with multiple exercises focusing on recognizing and using key time-related vocabulary in Bisaya.
- Added various exercise types including multiple-choice, gap-fill, and transformation tasks to enhance learner engagement and understanding of temporal expressions.
- Updated didactics to include learning goals, core patterns, grammar focus, speaking prompts, and practical tasks related to time markers and simple date questions.
- Enhanced the `normalize` method to trim trailing punctuation marks (.,!?;:) from input strings, ensuring cleaner and more consistent user input.
- Added logic to replace multiple spaces with a single space, improving the overall formatting of normalized strings.
- Changed exercise type from 'pattern_drill' to 'gap_fill' for improved clarity and engagement.
- Revised instructions to specify the use of the verb "adto" across different tenses, enhancing learner guidance.
- Updated question data format to include gaps for each tense, streamlining the exercise layout.
- Adjusted answer data to reflect the new gap-fill structure, ensuring consistency in exercise responses.
- Enhanced explanation to clarify the focus on tense variations with the verb "adto," improving educational value.
- Added functionality to manage Enter key events for gap-fill and single input fields, improving user experience during exercises.
- Introduced methods `onGapInputEnter` and `onSingleInputEnter` to streamline answer checking and navigation between input fields.
- Updated input elements with refs for better focus management, ensuring a smoother interaction flow for users.
- Introduced a new method `resolveCharacterIdForOfficeChecks` to robustly resolve character IDs based on user references, improving the reliability of political office queries.
- Updated `getHighestPoliticalOfficeInfo` and `getHighestOfficeAnyInfo` methods to utilize the new character ID resolution logic, enhancing code clarity and reducing redundancy.
- Ensured that character ID retrieval handles both direct and fallback user references, streamlining the process of fetching political office information.
- Implemented the `getPoliticalOfficeCatalog` method in FalukantService to retrieve available political offices and their prerequisites based on user eligibility.
- Updated FalukantController and FalukantRouter to include a new endpoint for accessing the political office catalog.
- Enhanced PoliticsView component to display the list of political offices, including their details and application eligibility.
- Added localization entries for the new offices tab in both German and English, improving user experience and accessibility.
- Introduced a new review section that displays questions, user answers, and correct answers for failed chapter exams.
- Added localization entries for the review section in multiple languages, enhancing user experience and understanding of mistakes.
- Implemented logic to format and present failed exam details, improving feedback for learners.
- Updated learning goals to emphasize distinguishing between past, present, and future in everyday sentences.
- Revised core patterns to include specific examples for each tense, improving clarity and context for learners.
- Expanded grammar focus sections to provide detailed explanations of time markers and their usage.
- Introduced new exercises for practicing grammar focus, including multiple-choice questions and transformation tasks, enhancing student engagement with temporal aspects of the language.
- Updated speaking prompts and practical tasks to reflect the new content structure, ensuring a comprehensive learning experience.
- Added functions to normalize and build grammar curriculum focus entries, improving the structure and clarity of grammar lessons.
- Implemented logic to merge existing grammar focus with newly defined curriculum focus, ensuring comprehensive coverage of key grammar points.
- Introduced new drills for practicing past and future tense constructions, enhancing student engagement and understanding of temporal aspects in Bisaya.
- Updated the `createBisayaCourseContent` function to incorporate these enhancements, ensuring lessons are enriched with relevant grammar exercises.
- Changed the exercise question and answer to focus on market-related scenarios, replacing previous church-related content.
- Updated the explanation to align with the new vocabulary introduced in this lesson, enhancing contextual learning for students.
- Added functions to derive core patterns from various exercise types, including gap-fill, transformation, and multiple-choice.
- Implemented logic to merge derived core patterns with existing lesson patterns, ensuring a minimum count for effective lesson content.
- Enhanced the `createBisayaCourseContent` function to update lessons with merged core patterns and provide detailed logging based on the VOCAB_STRICT_AUDIT environment variable.
- Introduced two new lessons: 'Alltagsgespräche - Teil 1' and 'Alltagsgespräche - Teil 2'.
- Each lesson includes learning goals, core patterns, speaking prompts, and practical tasks to enhance conversational skills in everyday contexts.
- Updated the lesson structure to support these additions, ensuring a comprehensive learning experience.
- Added `buildCorePatternGlossLookup` to create a mapping of core patterns for improved hint sanitization.
- Implemented `sanitizeGapFillHintText` to validate and replace hints based on answer word count and gloss availability, generating fixes and warnings as needed.
- Updated `sanitizeExerciseForConsistency` to incorporate new sanitization logic for gap-fill exercises, ensuring consistent exercise data handling.
- Enhanced logging in `createBisayaCourseContent` to provide detailed feedback on exercise processing and validation outcomes.
- Introduced a `countWords` function to calculate the number of words in a given text.
- Added `collectExerciseAuditWarnings` function to generate warnings for gap-fill exercises with potentially misleading hints.
- Updated the `createBisayaCourseContent` function to log audit warnings when the VOCAB_STRICT_AUDIT environment variable is set, enhancing the validation process for exercise content.
- Enhanced the answer validation process by introducing checks for native word and answer text, ensuring they are trimmed and compared correctly.
- Added logic to identify likely fragment mismatches based on sentence structure and word count, preventing incorrect answer submissions.
- Updated debug logging to provide clearer insights into the validation process, improving maintainability and debugging capabilities.
- Introduced the `improveLoverAffection` method in FalukantService to enhance relationship dynamics by allowing users to boost affection at a cost.
- Updated FalukantController and FalukantRouter to include the new endpoint for improving lover affection.
- Enhanced FamilyView component to provide a button for users to trigger the affection improvement action.
- Added localization entries for the new feature in multiple languages, ensuring clarity in user interactions regarding affection improvements.
- Updated the `enrichNotificationsWithCharacterNames` method in FalukantService to include region name enrichment and handle additional character IDs.
- Introduced a new `serializeNotificationForClient` function to format notifications for the client, ensuring all relevant data is included.
- Enhanced the MessagesDialog component to merge notification payloads and extract parameters more effectively, improving the clarity of displayed messages.
- Added new localization entries for director resignation risk and regional festival effects in multiple languages, ensuring comprehensive user notifications.
- Updated the `getProductPricesInCitiesBatch` method in FalukantService to accept an options parameter for including transport costs in price calculations.
- Modified the tax calculation logic to conditionally apply transport costs based on the new parameter, enhancing the accuracy of pricing based on regional differences.
- Adjusted the FalukantController to pass the includeTransportCosts option from the request body, improving flexibility in pricing queries.
- Updated the tax calculation in FalukantService to ensure no exemptions are applied for political offices, streamlining the cumulative tax query.
- Enhanced the SQL query to accurately compute cumulative tax while excluding exempted ancestor levels based on office, improving overall accuracy in tax assessments.
- Updated the tax calculation logic in FalukantService to include character-based checks for political offices, improving accuracy in tax assessments.
- Enhanced the MessagesDialog component to incorporate additional parameters such as satisfaction, threshold_percent, director_id, and director_character_id, providing more detailed notifications.
- Added new localization entries for director resignation risk notifications in multiple languages, ensuring users receive clear and contextual information regarding director dynamics.
- Introduced a new field `scandalExtraDailyPct` in the relationship state model to track additional scandal risk per day, with validation constraints.
- Updated the FalukantService to include the new field in relevant calculations and data handling.
- Enhanced the frontend components, including RevenueSection and FamilyView, to display the scandal risk information and updated price calculations.
- Added localization entries for the new field in multiple languages to ensure clarity for users.
- Modified the production counting logic in FalukantService to count each completed production directly from the falukant_log.production table, simplifying the query structure.
- Added a new localization entry for "scoreHowToRaise" in Cebuano, German, English, Spanish, and French to provide users with clear guidance on how to improve their score through various factors.
- Updated the OverviewView component to display the new score improvement information, enhancing user experience and understanding of scoring dynamics.
- Introduced a new event type for high breakup risk in relationships, including a sample payload for integration.
- Updated the MessagesDialog component to handle new parameters related to breakup risk.
- Added translations for the new event in Cebuano, German, English, Spanish, and French to enhance user understanding of relationship dynamics.
- Enhanced documentation to reflect the new notification structure for high breakup risk events.
- Implemented logic in FalukantService to delay running productions when spending time with a spouse, updating the start timestamp accordingly.
- Enhanced the response from the spend time API to include details about delayed productions and household order changes.
- Updated FamilyView component to display the cost of marriage actions and added a help section detailing the effects of actions, including production delays.
- Added new translations for action effects in multiple languages to improve user understanding of the marriage actions.
- Added new translations for 'maintenance', 'affection', and 'breakup' in Cebuano, German, English, and Spanish to provide users with comprehensive context regarding relationship dynamics.
- Refactored the FamilyView component to utilize a details element for the 'acknowledgeHelp' section, improving user interaction and readability.
- Enhanced styling for the summary element to improve visibility and user engagement.
- Added validation for office term length to ensure it is a positive finite number, throwing an error for invalid values.
- Updated the calculation of the term end date to use the term length in days instead of years, aligning with the expected data format.
- Added pagination functionality to the vocabulary dictionary views, allowing users to navigate through results efficiently.
- Introduced a new method `_parseDictionaryPaging` in `VocabService` to handle pagination parameters.
- Updated `getLanguageDictionary` and `getCourseDictionary` methods to return pagination details alongside results.
- Enhanced the `VocabDictionaryView` component with pagination controls and updated UI for better user experience.
- Added localization entries for pagination in Cebuano, German, English, Spanish, and French, ensuring a consistent user experience across languages.
- Added pagination functionality to the vocabulary overview in the VocabLessonView component, allowing users to navigate through vocabulary items more efficiently.
- Introduced new localization entries for pagination controls in Cebuano, German, English, Spanish, and French, ensuring a consistent user experience across languages.
- Enhanced the UI with buttons for previous and next navigation, improving accessibility and usability of the vocabulary list.
- Added a new section for optional learning steps in the course planning UI, allowing users to engage with additional content when no mandatory tasks are due.
- Updated localization files for Cebuano, German, English, Spanish, and French to reflect changes in course planning instructions and titles, ensuring clarity and consistency across languages.
- Improved pedagogical logic for lesson recommendations, focusing on cognitive load and spaced repetition principles to enhance user learning experience.
- Implemented `getLanguageDictionary` and `getCourseDictionary` methods in the VocabService to retrieve vocabulary entries filtered by search terms.
- Updated VocabController and vocabRouter to include new routes for accessing language and course dictionaries.
- Enhanced frontend components to navigate to the new dictionary views, including buttons in VocabCourseView and VocabLanguageView.
- Added localization entries for the dictionary feature in multiple languages, ensuring a consistent user experience across the platform.
- Introduced 'acknowledgeHelp' translations in Cebuano, German, English, and Spanish to provide users with context about the implications of acknowledging relationships.
- Updated the FamilyView component to display the new 'acknowledgeHelp' information, enhancing user understanding of relationship dynamics.
- Improved styling for the acknowledgment help section to ensure clarity and visibility within the user interface.
- Added the 'reputation' attribute to the character query in FalukantService, improving data retrieval for nobility requirements.
- Refactored the `checkReputationRequirement` method to streamline reputation checks, ensuring it handles undefined or null values more effectively, enhancing reliability in user character evaluations.
- Introduced a new method `mergeNotificationPayload` to consolidate top-level fields with embedded JSON from notifications, improving data handling.
- Updated `formatBody` and `extractParams` methods to utilize the merged payload, ensuring accurate extraction of parameters from notifications.
- Enhanced parameter extraction logic to handle various notification structures, improving clarity and consistency in displayed information.
- Improved the exercise progression logic to automatically advance only on correct answers, ensuring better user feedback during learning.
- Added a new method to shuffle multiple-choice options display order when distractor replacement is not applicable, enhancing the exercise experience.
- Updated the build process for randomized options to include both randomization from a pool and display order shuffling, improving overall engagement and learning outcomes.
- Updated exercise titles and instructions to enhance clarity and focus on specific learning objectives.
- Modified question data and answer options to better align with the lesson's vocabulary and context.
- Improved explanations to provide clearer guidance on language usage and learning goals, fostering better comprehension for learners.
- Introduced multiple-choice and transformation exercises focused on common phrases and vocabulary, including translations and contextual usage.
- Expanded the curriculum with practical tasks that encourage conversational skills and comprehension in various scenarios.
- Enhanced existing exercises with clear instructions and explanations to improve user engagement and learning outcomes.
- Added comprehensive learning goals, core patterns, grammar focus, speaking prompts, and practical tasks for the 'Haus & Familie' lesson, enhancing the curriculum for better language acquisition.
- Updated exercise content to include multiple-choice questions and gap-fill tasks related to household vocabulary, improving user engagement and learning outcomes.
- Enhanced localization for the lesson description and vocabulary, ensuring clarity and consistency across the learning platform.
- Revised SEO titles and descriptions for improved clarity and relevance, emphasizing the platform's features such as community, chat, forums, and browser games.
- Updated localization files for Cebuano, German, English, Spanish, and French to include new translations and enhance existing content, ensuring a consistent user experience across languages.
- Added a new story teaser in the home view to better highlight the platform's offerings without requiring downloads.
- Refactored the product pricing logic in `falukantService.js` to ensure accurate regional pricing calculations based on client values and server data.
- Added new notification translations for "office filled" in multiple languages (Cebuano, German, English, Spanish, French) to enhance user experience and clarity in notifications.
- Updated the `getAllProductPricesInRegion` method in `FalukantService` to accept additional parameters for network worth and branch ID, improving pricing calculations based on user branches.
- Enhanced the nobility advancement logic in `NobilityView` to display unmet requirements clearly, providing users with better feedback on advancement conditions.
- Refactored the revenue calculation in `ProductionSection` to utilize a cached product prices object, optimizing performance and reducing redundant API calls.
- Updated localization files to include new translations for attack sources across multiple languages, enhancing the user experience for diverse audiences.
- Removed obsolete C++ worker references and streamlined the retention logic for production logs, ensuring efficient data management.
- Introduced a new field `certificateProductionsCountSince` in the `FalukantUser` model to track the date from which production logs are counted for certificate requirements.
- Updated the `FalukantService` to utilize the new field for calculating completed productions since the specified date.
- Enhanced the UI to display the count of productions since the last promotion, with corresponding translations added for multiple languages including Cebuano, German, English, Spanish, and French.
- Implemented a method to delete old production logs, ensuring efficient data management while maintaining necessary historical records for certificate calculations.
- Introduced French as a supported language across the application, updating locale files and adding translations for various components.
- Enhanced language handling logic to accommodate French, ensuring proper detection and fallback mechanisms.
- Updated UI elements to include French language options, improving accessibility for French-speaking users.
- Refactored SEO handling to include French in hreflang links, enhancing search engine indexing for multilingual content.
- Added new scripts for managing French translations and ensuring consistency across language files.
- Introduced a deep merge function to combine locale chunks, improving the handling of language data for Cebuano.
- Updated Cebuano locale files with comprehensive translations, including new sections for admin, social network, and settings.
- Enhanced existing translations for clarity and consistency across various components, ensuring a better user experience.
- Added new fields in the settings and profile sections to capture more user attributes, improving personalization options.
- Changed the native label for Cebuano from 'Sinugboanon' to 'Binisaya' in the language options of AppHeader.vue for improved accuracy and user recognition.
- Enhanced language setting logic in App.vue and AppHeader.vue to support reactive updates without page reloads.
- Updated language options in AppHeader.vue to use native labels for improved clarity.
- Introduced a utility function in i18n/index.js to streamline locale updates, ensuring consistent language handling across the application.
- Added support for multiple languages in the frontend, including English, Spanish, and Cebuano, improving accessibility for a broader audience.
- Implemented hreflang links for better SEO performance, ensuring search engines can correctly index language-specific content.
- Updated SEO metadata handling to utilize internationalization keys, enhancing the clarity and relevance of page titles and descriptions.
- Refactored SEO utility functions to streamline the management of OpenGraph and hreflang attributes, improving maintainability and performance.
- Introduced a mechanism to infer answer language based on question phrasing in multiple exercise scripts, enhancing consistency in exercise data.
- Updated question formats to clarify the intent of exercises, improving user understanding and engagement.
- Streamlined the code for better maintainability and clarity in exercise generation processes.
- Introduced a new mechanism for calculating token weights based on core patterns and important vocabulary, improving the accuracy of target-gloss pair orientation.
- Replaced the previous hint logic with a more robust token-based scoring system, enhancing the quality of vocabulary item representation.
- Streamlined the code for better maintainability and clarity in vocabulary preparation processes.
- Replaced computed properties for current vocabulary preparation labels with direct references to new properties, enhancing clarity and maintainability.
- Improved the logic for populating native and target hints, ensuring accurate representation of vocabulary items.
- Removed outdated label swapping logic, streamlining the code and focusing on course-specific language names for better user experience.
- Added a method to attach language names to course rows, enhancing the clarity and localization of vocabulary lessons.
- This update improves the overall user experience by ensuring accurate representation of language names in course data.
- Introduced new properties for course language names to enhance clarity in vocabulary preparation.
- Implemented a method to load course language names from the API, improving localization and user experience.
- Updated label logic to utilize course-specific language names, ensuring accurate representation in vocabulary lessons.
- Introduced computed properties for current vocabulary preparation labels, enhancing clarity and localization.
- Updated label handling to dynamically adjust based on the context of target and gloss items, improving user experience.
- Enhanced the logic for determining when to swap labels, ensuring accurate representation of vocabulary items for better learning outcomes.
- Refactored VocabLessonView to utilize computed properties for vocabulary preparation labels, improving localization and maintainability.
- Updated the logic for target and gloss labels to prioritize course-specific language names, enhancing user experience and clarity in vocabulary presentation.
- Improved the orientation logic for target-gloss pairs to ensure accurate representation of vocabulary items, contributing to better learning outcomes.
- Refactored prepItems method to ensure only valid target-gloss pairs are included, enhancing the quality of vocabulary preparation.
- Introduced a mechanism to limit the output to a maximum of 30 unique pairs, improving the compactness of the preparation round.
- Enhanced handling of core patterns and extracted vocabulary to prioritize high-quality learning materials.
- Added new localization strings for scenarios with no due reviews in German, English, and Spanish, enhancing user guidance.
- Updated VocabCourseView to conditionally display the appropriate introduction message based on the presence of due reviews, improving clarity in the course flow.
- Added acknowledgment messages for exercise reinforcement in German, English, and Spanish localization files to improve user guidance.
- Updated VocabLessonView to include a feedback acknowledgment button, enhancing user interaction after answering questions.
- Implemented logic to track feedback acknowledgment state, improving the flow of lesson reviews and user experience.
- Introduced VocabLessonReviewView for reviewing lessons within the vocabulary course structure.
- Updated routing in socialRoutes.js to include a new path for lesson reviews, ensuring authenticated access.
- Modified VocabCourseView to change the lesson button click behavior to navigate to the review view, enhancing user flow.
- Added a new method to handle lesson review navigation, improving the overall user experience in the vocabulary section.
- Updated core patterns in BISAYA_PHASE5_DIDACTICS to include gloss translations for better understanding.
- Refactored vocabulary exercise generation in update-food-care-exercises.js to improve randomization and user engagement.
- Added new exercise types and improved question structures for vocabulary lessons, enhancing the learning experience.
- Enhanced localization files for German, English, and Spanish to support new exercise features and improve user guidance.
- Updated VocabLessonView to incorporate sequential navigation for exercises, providing a more structured learning flow.
- Renamed and refactored the method for classifying answer languages in multiple-choice questions from _classifyMcQuestionSide to _resolveMcAnswerSide for clarity and consistency.
- Updated the logic to classify answer languages based on questionData.answerLanguage and answerLanguageId, improving accuracy in determining the correct language context.
- Adjusted VocabLessonView to utilize the new classification method, ensuring alignment with backend changes and enhancing the handling of distractor options based on answer language.
- Enhanced documentation to clarify the expected input and output for the new method, improving maintainability and understanding of the codebase.
- Added a new hierarchyLevel field to PoliticalOfficeType for better categorization of political roles.
- Updated computePoliticalDailySalaryPayout function to incorporate hierarchy level in salary calculations, allowing for more dynamic salary adjustments based on office rank.
- Modified SQL scripts to reflect changes in political office benefits, ensuring compatibility with the new salary structure.
- Enhanced localization files to support updated benefit descriptions and salary formats across multiple languages.
- Improved UI components to display the new salary calculations and benefits accurately in the PoliticsView.
- Improved the layout of the political information section by introducing a structured row format for better readability.
- Updated CSS styles to enhance the visual hierarchy and alignment of labels and values, ensuring a more user-friendly interface.
- Adjusted the display of benefits and term end information to provide clearer context and organization within the PoliticsView component.
- Added new political powers and benefits functionalities, including reputation ticks, tax jurisdiction management, and appointment capabilities.
- Introduced a new job for periodic reputation updates and created necessary database tables for tracking political benefits.
- Enhanced the FalukantController and services to support new endpoints for managing political powers and appointments.
- Updated localization files to reflect new features and improve user experience across multiple languages.
- Modified the UI to display new political powers and benefits, ensuring accurate representation in the PoliticsView.
- Introduced new benefits including 'reputation_periodic', 'appoint_politicians', 'set_regional_tax', 'free_lover_slots', 'guard_protection', and 'court_immunity' to the political office system.
- Updated database migration to add and remove the 'last_political_daily_salary_on' column using SQL queries for better performance.
- Enhanced localization files for multiple languages to support new benefits, improving user experience across the application.
- Updated UI components to display new benefits correctly in the PoliticsView, ensuring accurate representation of political office functionalities.
- Updated `getAvailableWidgets` method in `DashboardService` to merge default widget types with database entries, ensuring immediate visibility of new widgets post-deployment.
- Introduced `DASHBOARD_WIDGET_TYPE_DEFAULTS` in `initializeWidgetTypes` for canonical widget types, facilitating API merging when database entries are absent.
- Modified `StatusBar.vue` to utilize a computed property for quick access children, improving menu item handling and visibility based on user context.
- Enhanced `LoggedInView.vue` to dynamically return localized widget labels, improving user experience with accurate translations.
- Introduced `getDashboardLearningSummary` method in `VocabService` to provide a compact overview of enrolled courses and current lessons for users.
- Updated `vocabController` to include a new route for the dashboard widget, allowing users to access their learning summary.
- Enhanced `vocabRouter` to route requests for the new dashboard widget endpoint.
- Added localization support for the new dashboard features across multiple languages, improving user engagement and accessibility.
- Updated UI components to integrate the new dashboard widget, ensuring a seamless user experience.
- Updated VocabService to include validation for synthetic exercise IDs and added methods for generating multiple-choice exercises based on chapter lexemes.
- Implemented a seeded shuffle function to randomize distractor options in multiple-choice questions, ensuring varied user experiences.
- Modified VocabLessonView to adjust target calculations for lesson goals and unlock attempts, increasing the maximum limits for better flexibility in user progress tracking.
- Added new confirmation titles and messages for resetting and marking lessons as complete in admin and user interfaces.
- Expanded course flow and review scheduling messages to improve clarity and user guidance in Cebuano, German, Spanish, and English.
- Introduced a new section in the VocabCourseView to display today's recommended steps for users, enhancing the learning experience.
- Updated localization files to ensure consistent messaging and improved user engagement across all supported languages.
- Updated VocabService to include lessonId and lessonNumber in progress data, improving tracking accuracy.
- Modified getLessonProgress and lastProgressTouch methods to accept lesson parameters, enhancing flexibility in progress retrieval.
- Implemented formatReviewBadgeSchedule method to manage review scheduling notifications, providing clearer user feedback.
- Updated VocabCourseView to reflect changes in lesson progress handling, ensuring accurate display of review statuses and due dates.
- Expanded localization for review scheduling messages across multiple languages, enhancing user experience.
- Introduced new content for the 'Familie - Verwandte & Stieffamilie' lesson, including learning goals, core patterns, grammar focus, speaking prompts, and practical tasks.
- Added multiple-choice and gap-fill exercises related to family vocabulary, enhancing the learning experience for users.
- Updated course content to reflect the new lesson and exercises, ensuring comprehensive coverage of family-related terms in Bisaya.
- Implemented `getUserVocabCourses` and `getVocabCourseForAdmin` methods in `AdminController` to allow admins to retrieve enrolled vocab courses for users and specific course details, respectively.
- Updated `adminRouter` to include new routes for accessing user vocab courses and course details.
- Enhanced `AdminService` with methods to list user-enrolled vocab courses and retrieve course information with lessons, ensuring proper access control.
- Improved `VocabService` to support the new functionalities, including attaching language names to course data.
- Updated UI components in `UsersView` to reflect changes, including error handling and loading states for course retrieval, along with localization updates for new features.
- Wrapped the router-view in a new div to manage layout and styling more effectively.
- Updated CSS to ensure proper height management and scrolling behavior, allowing for better content display.
- Added comments to clarify the purpose of layout adjustments and ensure maintainability.
- Added styles to ensure the app shell content occupies only the remaining space, preventing overflow issues.
- Updated the header in UsersView to reflect accurate localization for user administration.
- Added `resetUserVocabLessonProgress` method in `AdminController` to allow admins to reset a user's progress for a specific vocab lesson.
- Introduced corresponding route in `adminRouter` for the new reset functionality.
- Enhanced `VocabService` with methods to purge lesson progress for users, ensuring that only the specified lesson's progress is affected.
- Updated UI components in `UsersView` to facilitate the selection of courses and lessons for resetting progress, including confirmation dialogs and loading states.
- Added localization support for the new reset functionality across multiple languages.
- Implemented reset functionality in `VocabLessonView` for users to reset their own lesson progress.
- Introduced `looksLikePlausibleEmail` to validate email format, ensuring only plausible addresses are processed.
- Added `normalizeEmailCandidate` to standardize email input, returning null for invalid formats.
- Updated `decodeEncryptedBlob` to utilize normalization functions for both UTF-8 and hex formats, improving email decryption reliability.
- Adjusted `SettingsService` to ensure email is set after merging adult access state, maintaining data integrity.
- Changed layout from grid to flex in AccountView for improved responsiveness and alignment.
- Adjusted flex properties in AppContent to ensure proper scrolling behavior and height management.
- Enhanced styling for account settings panel to support better content overflow handling and visual consistency.
- Added support for additional UI locales including Cebuano and Spanish, improving accessibility for a broader user base.
- Updated language selection components in the AppHeader and SettingsWidget to reflect new language options, enhancing user experience.
- Enhanced localization of various UI elements across components, ensuring consistent language representation and improved user engagement.
- Implemented logic to synchronize user language preferences with backend settings, providing a seamless experience when changing languages.
- Added methods in VocabService to handle scheduled review states, including normalization of review dates and management of review stages.
- Enhanced lesson state management to support review scheduling, improving the learning process for users.
- Updated VocabCourseView and VocabLessonView to display review statuses and due dates, providing clearer feedback on lesson progress and review requirements.
- Introduced new UI elements to indicate review status, enhancing user engagement and understanding of lesson timelines.
- Updated the `getGermanForBisayaLessonPedagogy` function to include lesson titles for improved didactic mode determination, specifically adding support for 'contrast_training'.
- Modified multiple scripts to utilize the updated pedagogy function, ensuring consistent application of the new logic across various course phases.
- Enhanced the VocabService to recognize and handle 'contrast_training' as a didactic mode, improving lesson management and user experience.
- Updated UI components to reflect the new didactic mode, ensuring clarity in lesson presentation.
- Added a new function to calculate score thresholds based on certificate levels, improving the logic for determining promotion eligibility.
- Updated the FalukantService to include new properties for score and requirement checks, enhancing the decision-making process for certificate readiness.
- Enhanced the OverviewView component to display detailed hints and states regarding certificate progression, providing users with clearer feedback on their status.
- Localized new strings in multiple languages to support the updated UI elements and hints, improving user experience across different languages.
- Enhanced text normalization methods in VocabService and VocabPracticeDialog to include normalization and improved regex for punctuation and symbols, ensuring consistent text handling.
- This update streamlines the normalization process, contributing to better user input processing and overall application reliability.
- Enhanced text normalization methods in both VocabService and VocabLessonView to include an additional trim operation, ensuring leading and trailing spaces are removed.
- This change improves the consistency and accuracy of text handling across the application, contributing to better user input processing.
- Updated text normalization logic in VocabService to use a regex that replaces punctuation with spaces, improving text handling consistency.
- Refactored VocabLessonView to utilize the new normalization method for comparable text, enhancing the accuracy of user input processing.
- Ensured both components now share a unified approach to text normalization, streamlining code and improving maintainability.
- Added new lesson topics including 'Überlebenssätze - Teil 1', 'Familien-Gespräche', 'Gefühle & Zuneigung', and 'Überlebenssätze - Teil 2' to enhance the curriculum.
- Updated existing lessons with more detailed learning goals, core patterns, grammar focus, speaking prompts, and practical tasks to improve learner engagement and comprehension.
- Refactored core patterns to include glosses for better understanding of vocabulary context.
- Enhanced the structure of lesson didactics to provide a more comprehensive learning experience for users.
- Added a new method in VocabService to sanitize and manage a repeat queue for vocabulary items, enhancing the learning process.
- Updated VocabLessonView to incorporate repeat queue functionality, allowing for better tracking of vocabulary that needs review.
- Refactored existing logic to ensure seamless integration of repeat queue features, improving user experience during vocabulary lessons.
- Added a new JSONB field `lessonState` to the VocabCourseProgress model to store detailed lesson state information.
- Implemented methods in VocabService for sanitizing and serializing lesson state, ensuring robust data handling.
- Updated VocabLessonView to manage lesson state persistence, including local storage and server synchronization, improving user experience during vocabulary lessons.
- Introduced mechanisms for exporting and normalizing exercise answers, enhancing the accuracy of saved progress.
- Introduced new sections for grammar explanations in VocabLessonView, providing users with contextual insights during vocabulary lessons.
- Added localization keys in German, English, and Spanish for the new grammar explanation titles and introductions, improving user guidance across languages.
- Updated styles for the grammar explanation section to enhance visual clarity and user experience.
- Added new localization keys in German, English, and Spanish for exercise flow, progress, and learning path instructions, improving user guidance across languages.
- Updated VocabLessonView to incorporate these new keys, enhancing the clarity of vocabulary preparation steps and overall user experience during lessons.
- Refactored the layout to better present the learning path and vocabulary preparation stages, ensuring a more cohesive and informative interface.
- Introduced new localization strings in German, English, and Spanish for lesson detail toggles and deepening sections, enhancing user experience across multiple languages.
- Updated VocabLessonView to incorporate these new localization keys, improving the clarity and accessibility of lesson information for users.
- Added a new method in VocabService to merge core pattern glosses with fallback patterns, improving vocabulary clarity and consistency.
- Updated VocabLessonView to utilize the merged core patterns, ensuring a comprehensive vocabulary overview for users.
- Refactored vocabulary handling logic to enhance user experience during vocabulary lessons, including improved display of lesson vocabulary.
- Implemented a new method in VocabService to enhance core patterns with glosses derived from extracted vocabulary, improving the clarity of vocabulary entries.
- Updated the VocabLessonView to utilize the enriched core patterns, ensuring that glosses are displayed alongside vocabulary targets for better user comprehension.
- Refactored vocabulary preparation logic to integrate glosses seamlessly, enhancing the overall user experience during vocabulary lessons.
- Introduced a structured vocabulary preparation process with two review stages before engaging with the vocabulary trainer.
- Added localization support for new vocabulary preparation messages in German, English, and Spanish, improving accessibility for users.
- Updated the VocabLessonView component to display current progress and next steps during vocabulary preparation, enhancing user guidance.
- Refactored related logic to manage preparation stages and item navigation effectively.
- Updated core patterns in various scripts to use an object format with target phrases and glosses, improving clarity and usability for learners.
- Enhanced the VocabService to normalize core pattern entries, ensuring consistent handling of vocabulary data.
- Introduced new vocabulary preparation steps in the VocabLessonView, guiding users through active review processes before engaging with the vocabulary trainer.
- Added localization support for new vocabulary preparation hints and instructions in multiple languages, enhancing user experience across the application.
- Merged the lesson description and learning goals sections into a unified block for improved layout and readability.
- Updated styles to enhance the visual presentation of the combined content, ensuring a more cohesive user experience.
- Changed localization keys in AppSectionBar.vue to simplify and standardize the structure by removing the 'general' prefix.
- Updated section labels and title mappings to reflect the new key structure, enhancing consistency across the application.
- Updated the create-german-for-bisaya-course-content.js script to improve lesson pattern retrieval by introducing a new function for generating a lesson pattern pool.
- Added new exercises for various topics including 'Wohnung & Nachbarn', 'Besuch empfangen', 'Arzt, Apotheke, Termin', and 'Amt, Dokumente, Anmeldung', enhancing practical language skills for learners.
- Improved localization by integrating translation keys for various UI elements and error messages across multiple components, ensuring a consistent user experience in both German and Bisaya.
- Enhanced the main.js file to recognize Bisaya language preferences in browser settings, improving accessibility for users.
- Updated FalukantService to return user information alongside relationship state for improved context in relationship management.
- Modified DirectorInfo component to trigger a refresh when a new director is hired, ensuring up-to-date information.
- Added socket event handling for 'directorchanged' in BranchView to manage director updates effectively, enhancing real-time responsiveness in the application.
- Implemented new endpoints in VocabController for retrieving vocab pools based on lessons and completed lessons.
- Updated vocabRouter to include routes for accessing lesson vocab pools and completed lesson vocab pools.
- Enhanced VocabService with methods to extract vocab from exercises and lesson didactics, improving vocabulary retrieval for users.
- Modified VocabPracticeDialog and VocabCourseView components to support new vocab pool functionalities, enhancing user experience in vocabulary practice.
- Modified the create-german-for-bisaya-course.js script to allow optional ownerHashedId parameter.
- Implemented a new function to find a default owner ('system' or 'admin') if no ownerHashedId is provided.
- Updated documentation to reflect the change in usage for the script.
- Updated FalukantService to include age details for partners in relationships.
- Added translations for 'age' in English, German, and Spanish localization files.
- Enhanced FamilyView component to display age information for lovers and candidates, improving user experience.
- Updated FalukantService to include father and mother character IDs in child relationships.
- Added logic to retrieve and display other parent details in ChildDetailsDialog and FamilyView components.
- Introduced new translations for 'other parent' and 'birth context' in English, German, and Spanish localization files.
- Enhanced UI to show other parent information and birth context in child detail views.
- Renamed workflow from "Deploy yourpart (blue-green)" to "Deploy to production" for clarity.
- Removed environment variables for SSH configuration and replaced them with direct references to secrets for improved security.
- Updated SSH connection and deployment script steps to utilize secrets for host, port, and user, enhancing the deployment process.
- Updated the Bisaya course to include new evening greetings and sleep-related phrases in core patterns.
- Added multiple exercises focusing on recognizing and using these phrases, improving practical language skills for learners.
- Expanded lesson didactics to incorporate prompts for evening and sleep routines, enriching the overall learning experience.
- Updated core patterns to include evening greetings and sleep phrases in the Bisaya course content.
- Added new exercises focusing on recognizing and using evening greetings and sleep wishes, enhancing practical language use for learners.
- Expanded lesson didactics to incorporate evening and sleep-related conversational prompts, improving the overall learning experience.
- Added new exercises in multiple-choice, gap-fill, and situational response formats for categories including 'Einkaufen vertiefen', 'Nachbarschaft & Besuche', 'Rollenspiel - Konflikt und Hilfe', and 'Freies Sprechen - Alltag ohne Stütze'.
- Each exercise includes detailed instructions, question data, answer data, and explanations to enhance the learning experience for Bisaya language learners.
- Focused on practical scenarios to improve conversational skills and vocabulary retention.
- Introduced multiple-choice, gap-fill, and situational response exercises across several categories including 'Besuch & Gastfreundschaft', 'Gesundheit im Alltag', 'Unterwegs & Transport', 'Kinder im Alltag', and 'Arzt & Termin'.
- Each category includes detailed instructions, question data, answer data, and explanations to enhance learning experiences.
- Expanded the vocabulary and situational context for learners to practice real-life interactions in Bisaya.
- Implemented a new method in AdminService to fetch potential fathers for a given character based on existing relationships.
- Updated AdminController to expose this functionality via a new API endpoint.
- Enhanced adminRouter to include the route for retrieving potential fathers.
- Modified frontend components to allow selection of potential fathers during pregnancy and birth management.
- Updated internationalization files to include new translation keys related to father selection.
- Eliminated the removal of the temporary environment directory in the update-backend.sh script to retain the environment for potential debugging or further use.
- Replaced the previous method of copying .env files with a direct installation from a specified source path.
- Improved permissions and ownership settings for the .env file to enhance security.
- Added user feedback for successful file transfer and verification steps.
- Updated translation keys in German, English, and Spanish localization files to accurately reflect the intended language direction for vocabulary translation.
- Adjusted the `translateTo` and `translateFrom` keys to ensure consistency across all language files.
- Implemented a new endpoint to retrieve a pool of distractors for vocabulary exercises based on prior lessons.
- Updated the VocabController and VocabRouter to include the new getVocabDistractorPool method.
- Enhanced VocabService to classify questions and gather distractors from previous lessons.
- Modified VocabLessonView to fetch and utilize the distractor pool for multiple-choice exercises, improving the learning experience.
- Updated the FalukantCharacter model to include a default scope that excludes pregnancy-related fields for compatibility with older databases.
- Implemented a new method in FalukantService to conditionally retrieve pregnancy information based on database schema.
- Enhanced the FamilyView component to display a summary navigation for family relationships, including partners, children, and lovers.
- Updated internationalization files to include new translations for family-related terms and summaries.
- Implemented functionality to copy the .env file from the live system to the backend directory if it exists.
- Added ownership change for the copied .env file to ensure proper permissions.
- Included user feedback for successful or failed .env file transfer.
- Added new admin functionalities to force pregnancy, clear pregnancy, and trigger birth for characters.
- Introduced corresponding routes and controller methods in adminRouter and adminController.
- Enhanced the FalukantCharacter model to include pregnancy-related fields.
- Created database migration for adding pregnancy columns to the character table.
- Updated frontend views and internationalization files to support new pregnancy and birth management features.
- Improved user feedback and error handling for these new actions.
- Updated update-backend.sh and update-frontend.sh to accept a target directory as a parameter, improving flexibility.
- Refactored paths to use the target directory for all operations, ensuring consistency and reducing hardcoded values.
- Added error handling with 'set -euo pipefail' for better script reliability.
- Improved user feedback by displaying the target directory during updates.
- Added steps to prepare SSH keys and known hosts for secure connections.
- Implemented a test for the SSH connection to ensure successful deployment.
- Updated the deployment step to use SSH for executing the deployment script on the production server.
- Improved error handling to ensure the script exits on failure.
- Added a check for the current branch to ensure it is 'main' before proceeding.
- Updated git commands for better state management and clarity in user feedback messages.
- Changed shebang to use env for better portability.
- Added error handling to ensure the script exits on failure.
- Included a check to confirm the current branch is 'main' before proceeding.
- Updated git commands to fetch and reset to origin/main, ensuring a clean state.
- Enhanced user feedback messages for clarity.
- Updated .app-section-bar__copy to use flexbox for better alignment and spacing.
- Added gap and flex-wrap properties to improve layout responsiveness.
- Adjusted styles in .app-section-bar__eyebrow for a more cohesive design.
- Removed unnecessary label from character name display for a cleaner look.
- Adjusted grid layout and spacing in the StatusBar for enhanced alignment and responsiveness.
- Refined padding and gap settings to optimize visual presentation of status elements.
- Modified StatusBar component to enhance character name display with a label suffix for clarity.
- Refactored styles in StatusBar for better alignment and spacing, improving overall visual presentation.
- Removed the PoliticsView hero section to streamline the layout and focus on tab content, enhancing user navigation.
- Updated falukantService to include predefined first and last names in character data retrieval.
- Refactored StatusBar component layout to improve organization and visual clarity, introducing sections for identity and stats.
- Enhanced character name handling to prioritize display names, ensuring a more dynamic user experience.
- Added support for displaying character death notifications with detailed information including age, region, and relationships in both German and English.
- Updated MessagesDialog to format additional parameters such as region, spouses, children, and lovers based on the locale.
- Enhanced StatusBar to show the character's name dynamically, improving user experience.
- Modified i18n files to include new notification messages for character deaths, ensuring accurate translations for both languages.
- Introduced a new method to retrieve equivalent vocabulary answers based on user prompts and direction, enhancing the accuracy of answer options.
- Updated the buildChoiceOptions method to handle multiple correct answers and ensure the prompt is excluded from choices.
- Enhanced the current vocab question structure to support multiple acceptable answers, improving user feedback and engagement during exercises.
- Updated vocab trainer descriptions and button labels to better reflect user progress and encourage engagement.
- Enhanced visual indicators for exercise availability and review priorities, clarifying the learning path for users.
- Introduced new methods to calculate trainer targets and review blending, optimizing the learning experience based on user performance.
- Added conditional access to exercises based on user progress and previous vocab completion.
- Introduced visual indicators for exercise availability and review priorities to guide users.
- Updated vocab trainer descriptions and button labels to reflect the user's current state and encourage engagement.
- Implemented methods to manage exercise unlock conditions and improve user feedback on progress.
- Improved answer validation logic by expanding multiple choice answer data based on lesson context.
- Added methods to extract indices of correct answers and normalize question prompts for better accuracy.
- Refactored existing answer checking to accommodate new data handling, ensuring robust evaluation of user responses.
- Added functionality to manage selected users for adult folders and erotic videos, allowing for more granular visibility control.
- Introduced new endpoints and methods in the SocialNetworkController and SocialNetworkService to handle selected users.
- Updated the frontend components to include input fields for selected users in CreateFolderDialog, EditImageDialog, and EroticPicturesView.
- Enhanced the routing to support fetching erotic folders and videos by username, improving user experience in profile views.
- Updated the German translations in socialnetwork.json for improved accuracy and clarity.
- Enhanced the text in EroticPicturesView.vue and EroticVideosView.vue to ensure proper spelling and grammar in user-facing messages.
- Revised the introductory texts and hints for video uploads in German, English, and Spanish to enhance user understanding.
- Improved descriptions to better reflect the functionality of the video management features.
- Removed outdated statistics display from the EroticVideosView component to streamline the user interface.
- Updated the layout of the EroticVideosView component to improve organization and user experience.
- Introduced a sidebar for video upload and management, separating it from the video list.
- Added statistics for total, visible, and hidden videos to provide users with better insights.
- Enhanced form elements and labels for clarity and usability during video uploads.
- Changed the class binding for the dialog overlay to differentiate between modal and non-modal states, enhancing visual clarity.
- Introduced a new class for non-modal dialogs to ensure proper positioning and z-index management.
- Updated the non-modal dialog overlay to have no backdrop filter, enhancing visual clarity.
- Set the modal property to false in MessagesDialog to ensure proper dialog behavior.
- Introduced a new property `lastAnnouncedRoomName` to track the last announced room, preventing redundant announcements.
- Updated the room entry announcement logic to ensure messages are sent only when entering a new room, improving clarity for users.
- Added a new property `currentRoomName` to track the name of the currently selected room.
- Updated the initialization logic to reset `currentRoomName` when rooms are loaded and when the chat is disconnected, ensuring accurate room state management.
- Enhanced the logic for announcing room entries, particularly in adult-only mode, to ensure accurate messaging based on room selection.
- Added checks to prevent redundant announcements and ensure proper synchronization with the selected room.
- Added logic to handle room synchronization when entering a chat in adult-only mode.
- Introduced a flag to manage ongoing room sync requests, improving user experience during room transitions.
- Removed redundant checks for adult-only mode when opening the chat dialog and connecting the chat socket.
- Streamlined the logic to enhance readability and maintainability of the component.
- Upgraded @emnapi/runtime to version 1.9.1 and @img/colour to version 1.1.0 in package-lock.json.
- Added new dependencies for ansi-regex and strip-ansi with updated versions in multiple locations.
- Updated lodash types to version 4.17.24 and ansi-escapes to version 7.3.0.
- Introduced overrides for minimatch and tmp in package.json to ensure consistent behavior across environments.
- Refactored MultiChatDialog.vue to improve room selection logic and handle adult-only mode more effectively.
- Updated navigationController to simplify the eroticChat menu structure.
- Enhanced adminService to notify users of adult verification status changes, including previous status.
- Improved AppNavigation and related components to register and unregister socket listeners for adult verification updates.
- Added localized messages for adult verification notifications in English, German, and Spanish.
- Introduced a verification hint in the EroticAccessView to guide users on document submission.
- Added new styles for buttons in the adult verification filters to enhance appearance and usability.
- Set minimum height, padding, and font size for consistency across both views.
- Enhanced deploy-backend.sh and update-backend.sh to create the adult verification directory under /opt/yourpart-data.
- Updated permissions for the new directory to ensure proper access control.
- Refactored file path handling in AdminService and SettingsService to utilize the new directory structure for adult verification files.
- Updated the AdultVerificationView and EroticModerationView components to utilize a new layout structure with content scrolling and hidden overflow for better user experience.
- Adjusted styles in styles.scss to support the new layout, ensuring proper height and overflow handling for content sections.
- Added a new method in AdminService to resolve adult verification file paths, improving file retrieval logic.
- Updated the AdminVerificationView to display a message when the verification document is missing.
- Localized the missing document message in German, English, and Spanish for better user experience.
- Updated the filtering criteria in the AdminService to include 'adult_verification_request' in the user parameter type query, enhancing data retrieval for adult verification processes.
- Implemented a preview section for adult verification documents, allowing users to view images and PDFs inline.
- Added localization support for preview titles and messages in German, English, and Spanish.
- Enhanced the component's state management to handle preview visibility and cleanup.
- Refactored settingsService to use findOrCreate for settings type, improving efficiency and error handling.
- Added initialization for 'account' settings type in initializeSettings, ensuring all necessary settings are created during setup.
- Introduced a new method to ensure special user parameter types for adult verification settings, improving data integrity and handling.
- Updated the upsertUserParam method to utilize the new special parameter type handling, ensuring robust user parameter management.
- Updated package dependencies in package.json and package-lock.json for consistency and to address potential vulnerabilities.
- Upgraded @gltf-transform/cli, core, extensions, and functions to version 4.3.0 for improved functionality and compatibility.
- Updated sequelize-cli to version 6.6.5 to address potential vulnerabilities.
- Added an overrides section in package.json for minimatch to ensure consistent behavior across environments.
- Refactored the EroticAccessView.vue component for improved structure and readability.
- Refactored the 404 response for API routes to ensure it only triggers for paths starting with '/api/', enhancing clarity in error handling.
- Updated package dependencies in package.json and package-lock.json to maintain version consistency and address potential vulnerabilities.
- Updated stock and inventory routes to explicitly define branchId as a required parameter, enhancing API usability and consistency in request handling.
description: C++-Worker unter src/ sind obsolet — nicht erweitern oder als Quelle für Spiellogik nutzen
alwaysApply: true
---
# Legacy C++ (`src/`)
- Verzeichnis **`src/`** (C++-Worker, WebSocket-Server): **obsolet**. Keine neuen Features, keine fachlichen Fixes dort planen oder umsetzen, sofern der Nutzer nicht ausdrücklich etwas anderes verlangt.
if echo "$COMMIT_MESSAGE" | grep -qi '\[force-deploy\]'; then
echo "force_deploy=true" >> "$GITHUB_OUTPUT"
else
echo "force_deploy=false" >> "$GITHUB_OUTPUT"
fi
if grep -E '^(backend/scripts/.*(bisaya|course|didactics|vocab)|backend/sql/.*vocab|backend/(migrations-active|migrations-archive)/.*vocab|docs/.*(COURSE|VOCAB|BISAYA|GERMAN_FOR_BISAYA))' changed-files.txt; then
echo "changed=true" >> "$GITHUB_OUTPUT"
else
echo "changed=false" >> "$GITHUB_OUTPUT"
fi
if grep -E '^frontend/' changed-files.txt >/dev/null; then
echo "frontend_changed=true" >> "$GITHUB_OUTPUT"
else
echo "frontend_changed=false" >> "$GITHUB_OUTPUT"
fi
if grep -E '^backend/' changed-files.txt \
| grep -Ev '^(backend/scripts/.*(bisaya|course|didactics|vocab)|backend/sql/.*vocab|backend/(migrations-active|migrations-archive)/.*vocab)$' >/dev/null; then
# App-Code-Änderungen, die einen echten Deploy benötigen
# (Frontend oder Backend außerhalb reiner Kurs-/Dokument-Sync-Dateien)
if grep -E '^(frontend/|backend/)' changed-files.txt \
| grep -Ev '^(backend/scripts/.*(bisaya|course|didactics|vocab)|backend/sql/.*vocab|backend/(migrations-active|migrations-archive)/.*vocab|docs/.*(COURSE|VOCAB|BISAYA|GERMAN_FOR_BISAYA))'; then
ADD COLUMN IF NOT EXISTS certificate_productions_count_since TIMESTAMPTZ;
`);
awaitqueryInterface.sequelize.query(`
COMMENT ON COLUMN falukant_data.falukant_user.certificate_productions_count_since IS
'Daemon/UI: Zählt nur falukant_log.production-Zeilen mit COALESCE(production_timestamp, production_date::timestamp) >= diesem Wert; bei Stufenänderung (Aufstieg/Bankrott/Erbfolge) auf NOW() (YpDaemon QUERY_UPDATE_FALUKANT_USER_CERTIFICATE). NULL = alle passenden Log-Zeilen bis zur ersten Stufenänderung nach Migration. Kein Löschen der Logs zum Reset.';
`);
},
asyncdown(queryInterface){
awaitqueryInterface.sequelize.query(`
ALTER TABLE falukant_data.falukant_user
DROP COLUMN IF EXISTS certificate_productions_count_since;
Neue Schema-Änderungen: nur noch Dateien unter **`migrations-active/`**. Ausführung z.B.:
`npm run db:migrate` (siehe `backend/package.json`, Pfad `migrations-active`).
## Archiv
Ältere, bereits auf den Umgebungen ausgerollte Migrationen liegen unter **`migrations-archive/`** und werden vom Sequelize-CLI **nicht** mehr ausgeführt.
Vor dem ersten Deploy nach dieser Aufteilung: fehlende Einträge in `"SequelizeMeta"` für die archivierten Dateinamen per SQL ergänzen, siehe **`sql/baseline-sequelize-meta-migrations-archive.sql`** (idempotent).
## Sonstiges in diesem Ordner
SQL-Hilfsdateien und ältere Notizen verbleiben hier (werden nicht vom CLI geladen).
## Falukant: Zertifikat und Produktionszählung
| Datei (Archiv) | Inhalt |
|--------|--------|
| `migrations-archive/20260402140000-add-certificate-productions-count-since.cjs` | Spalte `falukant_data.falukant_user.certificate_productions_count_since` (`TIMESTAMPTZ`, nullable) inkl. Kommentar. Setzt die DB-Grundlage dafür, dass Daemon, Backend und UI dieselbe Periode für „abgeschlossene Produktionen“ nutzen (Filter mit `COALESCE(production_timestamp, production_date::timestamp)` ab diesem Zeitpunkt; `NULL` = bisherige Historie). |
Eine parallele SQL-Migration im Daemon-Repository (z.B. `014_falukant_certificate_productions_count_since.sql`) kann dieselbe Spalte anlegen, wenn das Deployment dort getrennt ist – Schema doppelt anlegen vermeiden.
Details zur Zähl- und Retention-Logik: `docs/FALUKANT_PRODUCTION_CERTIFICATE.md`.
{title:'Kurzantworten mit ko',text:'Mit "ko" sprichst du über dich selbst: "Maayo ko."',example:'Maayo ko. = Mir geht es gut.'},
{title:'Maayong + Tageszeit',text:'Mit "Maayong" kannst du Grüße für verschiedene Tageszeiten bilden.',example:'Maayong buntag. / Maayong gabii.'}
{title:'Maayong + Tageszeit',text:'Mit "Maayong" kannst du Grüße für verschiedene Tageszeiten bilden.',example:'Maayong buntag. / Maayong gabii.'},
{title:'Abend und Schlafen',text:'Im Familienalltag folgen auf einen Abendgruß oft direkte Schlafens- oder Fürsorgeformeln.',example:'Maayong gabii. / Katulog og maayo.'},
{title:'Sanfte Schlafensroutine',text:'Kurze Fragen nach Müdigkeit und kleine Aufforderungen klingen im Familienalltag natürlicher als lange Sätze.',example:'Kapoy na ka? Matulog na ta. Inom sa og tubig.'},
{title:'Familiäre Abendformeln',text:'Am Abend folgen oft sehr kurze Handlungsformeln wie Licht aus, zudecken oder ein Schlafwunsch.',example:'Patya ang suga. Tabuni ang imong kaugalingon. Damgo og nindot.'}
],
speakingPrompts:[
{title:'Mini-Gespräch',prompt:'Begrüße eine Person, frage nach dem Befinden und reagiere höflich.',cue:'Kumusta ka? Maayo ko. Salamat.'},
{title:'Verabschiedung',prompt:'Verabschiede dich kurz und wünsche, dass die andere Person auf sich aufpasst.',cue:'Babay. Amping.'}
{title:'Verabschiedung',prompt:'Verabschiede dich kurz und wünsche, dass die andere Person auf sich aufpasst.',cue:'Babay. Amping.'},
{title:'Abend und Schlaf',prompt:'Wünsche einen guten Abend, eine gute Nacht und dass die Person gut schlafen soll.',cue:'Maayong gabii. Katulog og maayo.'},
{title:'Schlafensroutine',prompt:'Frage, ob die Person müde ist, und leite dann sanft zum Schlafengehen über.',cue:'Kapoy na ka? Matulog na ta. Inom sa og tubig.'},
{title:'Vor dem Schlafen',prompt:'Bitte darum, das Licht auszumachen, sich zuzudecken, und wünsche eine gute Nacht bis morgen.',cue:'Patya ang suga. Tabuni ang imong kaugalingon. Ugma nasad. Damgo og nindot.'}
],
practicalTasks:[{title:'Alltag',text:'Sprich die Begrüßung dreimal laut und variiere die Antwort.'}]
{target:'Si Kuya nako.',gloss:'Das ist mein älterer Bruder.'},
{target:'Si Ate nako.',gloss:'Das ist meine ältere Schwester.'},
{target:'Si Dodong nako.',gloss:'Das ist mein jüngerer Bruder.'},
{target:'Si Inday nako.',gloss:'Das ist meine jüngere Schwester.'},
{target:'Si Lola nako.',gloss:'Das ist meine Großmutter.'},
{target:'Si Lolo nako.',gloss:'Das ist mein Großvater.'}
],
grammarFocus:[
{title:'Respekt in Familienanreden',text:'Kuya und Ate werden nicht nur in der Familie, sondern auch respektvoll für ältere Personen benutzt.',example:'Kuya, palihug.'}
{title:'Respekt in Familienanreden',text:'Kuya und Ate richtest du an ältere Geschwister (oder respektvoll an andere). Dodong und Inday nutzt du für jüngere Brüder bzw. Schwestern; „Ading“ ist eine weiche Anrede an jüngere Geschwister.',example:'Kuya, palihug. / Si Dodong nako.'},
{title:'si als Personenmarker',text:'Mit "si" markierst du im einfachen Satz eine konkrete Person.',example:'Si Nanay. Si Tatay.'}
],
speakingPrompts:[
{title:'Meine Familie',prompt:'Stelle zwei Familienmitglieder mit einem kurzen Satz vor.',cue:'Si Nanay. Si Kuya.'}
{title:'Meine Familie',prompt:'Stelle vier Familienmitglieder mit kurzen Sätzen vor.',cue:'Si Nanay. Si Tatay. Si Kuya nako. Si Dodong nako.'}
],
practicalTasks:[{title:'Familienpraxis',text:'Nenne laut fünf Familienwörter und bilde danach zwei Mini-Sätze.'}]
practicalTasks:[{title:'Familienpraxis',text:'Nenne laut die acht Kern-Familienwörter und bilde danach drei Mini-Sätze über deine Familie.'}]
},
'Überlebenssätze - Teil 1':{
learningGoals:[
'Zentrale Notfall- und Verständnisfragen schnell abrufen.',
'Höflich um Wiederholung, Hilfe und langsamere Sprache bitten.',
{title:'Bitte-Formeln mit palihug',text:'"Palihug" macht Bitten höflich und taucht in vielen Überlebenssätzen auf.',example:'Palihug ka mubalik? / Tabangi ko, palihug.'},
{title:'Kurze Verständnisfragen',text:'Sehr kurze Fragen helfen dir im Alltag oft mehr als lange Sätze.',example:'Unsay pasabot ani? Asa ang CR?'}
],
speakingPrompts:[
{title:'Wenn du etwas nicht verstehst',prompt:'Sage, dass du etwas nicht verstehst, und bitte um Wiederholung.',cue:'Wala ko kasabot. Palihug ka mubalik?'},
{title:'Soforthilfe',prompt:'Bitte um Hilfe und frage dann nach der Toilette oder nach der Bedeutung eines Wortes.',cue:'Tabangi ko, palihug. Asa ang CR?'}
],
practicalTasks:[{title:'Alltagsanker',text:'Sprich alle sechs Überlebenssätze laut durch und ordne sie drei Alltagssituationen zu.'}]
},
'Familien-Gespräche':{
learningGoals:[
'Kurze Familiengespräche sicher verstehen.',
'Nach Familienmitgliedern fragen und einfache Antworten geben.',
'Ein Mini-Gespräch über Hunger und Zuhause nachsprechen.'
],
corePatterns:[
{target:'Kumusta ka, Nanay?',gloss:'Wie geht es dir, Mama?'},
{target:'Asa si Tatay?',gloss:'Wo ist Papa?'},
{target:'Naa siya sa balay.',gloss:'Er ist zu Hause.'},
{target:'Kumusta na ang Kuya?',gloss:'Wie geht es dem älteren Bruder?'},
{target:'Kumusta na ang Dodong?',gloss:'Wie geht es dem jüngeren Bruder?'},
{target:'Kumusta na ang Inday?',gloss:'Wie geht es der jüngeren Schwester?'},
{target:'Gutom na ko, Nanay.',gloss:'Ich habe Hunger, Mama.'},
{target:'Hapit na ang pagkaon.',gloss:'Das Essen ist fast fertig.'}
],
grammarFocus:[
{title:'naa für Ort und Vorhandensein',text:'"Naa" hilft dir, über Orte und Vorhandensein zu sprechen.',example:'Naa siya sa balay.'}
],
speakingPrompts:[
{title:'Familien-Mini-Dialog',prompt:'Frage nach einem Familienmitglied und reagiere dann mit einer kurzen Antwort.',cue:'Asa si Tatay? Naa siya sa balay.'}
],
practicalTasks:[{title:'Gesprächspraxis',text:'Spiele einen kurzen Familienaustausch mit Frage, Antwort und Fürsorge nach.'}]
},
'Gefühle & Zuneigung':{
learningGoals:[
'Wichtige Gefühle und Zuneigungsformeln sicher unterscheiden.',
'Freundliche Nähe und Vermissen sprachlich ausdrücken.',
'Zwischen positiven und negativen Gefühlen wechseln.'
{target:'Ganahan ko nimo.',gloss:'Ich mag dich.'},
{target:'Gimingaw ko nimo.',gloss:'Ich vermisse dich.'},
{target:'Nalipay ko.',gloss:'Ich bin glücklich.'},
{target:'Nasubo ko.',gloss:'Ich bin traurig.'},
{target:'Nalipay ko nga nakita ka.',gloss:'Ich freue mich, dich zu sehen.'}
],
grammarFocus:[
{title:'ko für eigene Gefühle',text:'Viele Gefühlsaussagen bauen direkt auf dem Muster "Gefühl + ko" auf.',example:'Nalipay ko. Nasubo ko.'}
],
speakingPrompts:[
{title:'Gefühl ausdrücken',prompt:'Sage, dass du jemanden magst oder vermisst, und ergänze danach ein einfaches Gefühl.',cue:'Ganahan ko nimo. Nalipay ko.'}
],
practicalTasks:[{title:'Herzsprache',text:'Lies drei Zuneigungsformeln laut und entscheide danach: liebhaben, mögen oder vermissen?'}]
{title:'Kurze Markt- und Orientierungssprache',text:'Kurze Fragewörter plus ein Nomen reichen oft, um im Alltag voranzukommen.',example:'Tagpila ni? Unsa ni?'}
],
speakingPrompts:[
{title:'Auf dem Markt',prompt:'Frage nach Preis und Bedeutung eines Gegenstands und bitte dann darum, etwas aufzuschreiben.',cue:'Tagpila ni? Unsa ni? Palihug isulat ni.'}
],
practicalTasks:[{title:'Unterwegs',text:'Sprich drei Sätze für Einkauf, Nachfrage und Orientierung laut hintereinander.'}]
},
'Essen & Fürsorge':{
learningGoals:[
@@ -53,29 +186,174 @@ const LESSON_DIDACTICS = {
'Einladungen zum Essen passend beantworten.',
'Kurze Essens-Dialoge laut üben.'
],
corePatterns:['Nikaon na ka?','Kaon ta.','Gusto ka mokaon?','Lami kaayo.'],
corePatterns:[
{target:'Nikaon na ka?',gloss:'Hast du schon gegessen?'},
{target:'Kaon ta.',gloss:'Lass uns essen.'},
{target:'Gusto ka mokaon?',gloss:'Möchtest du essen?'},
{target:'Gutom na ko.',gloss:'Ich habe Hunger.'},
{target:'Palihug, hatagi ko ug tubig.',gloss:'Bitte gib mir Wasser.'},
{target:'Salamat sa pagkaon.',gloss:'Danke für das Essen.'},
{target:'Busog na ko.',gloss:'Ich bin satt.'},
{target:'Lami kaayo.',gloss:'Sehr lecker.'}
],
grammarFocus:[
{title:'na als Zustandsmarker',text:'"na" markiert oft etwas, das bereits eingetreten ist oder jetzt gilt.',example:'Nikaon na ka?'}
{title:'na als Zustandsmarker',text:'"na" markiert oft etwas, das bereits eingetreten ist oder jetzt gilt.',example:'Nikaon na ka?'},
{title:'Bitten mit hatagi ko',text:'Mit "hatagi ko" bittest du konkret darum, dass dir etwas gegeben wird.',example:'Palihug, hatagi ko ug tubig.'}
],
speakingPrompts:[
{title:'Fürsorge-Dialog',prompt:'Frage, ob jemand schon gegessen hat, und biete Essen oder Wasser an.',cue:'Nikaon na ka? Gusto ka mokaon?'}
{title:'Fürsorge-Dialog',prompt:'Frage, ob jemand schon gegessen hat, und biete Essen oder Wasser an.',cue:'Nikaon na ka? Gusto ka mokaon?'},
{title:'Beim Essen reagieren',prompt:'Sage, dass du Hunger hast, bitte um Wasser und reagiere danach auf das Essen.',cue:'Gutom na ko. Palihug, hatagi ko ug tubig. Lami kaayo.'}
],
practicalTasks:[{title:'Rollenspiel',text:'Spiele ein kurzes Gespräch zwischen Gastgeber und Gast beim Essen.'}]
},
'Zeitformen - Grundlagen':{
'Essen & Trinken':{
learningGoals:[
'Ni- und Mo- als einfache Zeitmarker unterscheiden.',
'Kurze Sätze in Vergangenheit und Zukunft bilden.',
'Das Muster laut mit mehreren Verben wiederholen.'
'Wichtige Essens- und Trinkwörterschnell erkennen.',
'Zwischen Grundnahrungsmitteln, Getränken und Beilagen unterscheiden.',
'Mit den neuen Wörtern kurze Einkaufs- oder Tischsätze bauen.'
{title:'Zeitpräfixe',text:'Ni- verweist auf Vergangenes, Mo- auf Zukünftiges oder Bevorstehendes.',example:'Ni-kaon ko. / Mo-kaon ko.'}
{title:'Wortschatz statt ganzer Sätze',text:'In dieser Lektion sammelst du bewusst Grundwörter, damit du später kurze Essenssätze daraus bauen kannst.',example:'Kan-on. Tubig. Isda.'}
],
speakingPrompts:[
{title:'Vorher und nachher',prompt:'Sage einen Satz über etwas, das du getan hast, und einen Satz über etwas, das du tun wirst.',cue:'Ni-kaon ko. Mo-adto ko.'}
{title:'Auf dem Tisch',prompt:'Nenne drei Dinge, die auf dem Tisch stehen oder die du essen und trinken möchtest.',cue:'Kan-on, isda ug tubig.'}
],
practicalTasks:[{title:'Mustertraining',text:'Nimm ein Verb und sprich es einmal mit Ni- und einmal mit Mo-.'}]
practicalTasks:[{title:'Küchenrunde',text:'Zeige nacheinander auf sieben Lebensmittel oder stelle sie dir vor und sprich jedes Wort laut aus.'}]
},
'Alltagsgespräche - Teil 1':{
learningGoals:[
'Alltagsaktivitäten in ganzen Sätzen beschreiben.',
'Nach Tagesplan, Aufgaben und Rückkehr fragen.',
'Kurze Familienabsprachen für den Tag sicher führen.'
],
corePatterns:[
{target:'Unsa imong buhat karon?',gloss:'Was machst du heute?'},
{target:'Nagluto ko para sa panihapon.',gloss:'Ich koche für das Abendessen.'},
{target:'Naglimpyo ko sa balay.',gloss:'Ich putze das Haus.'},
{target:'Human na ka sa trabaho?',gloss:'Bist du mit der Arbeit fertig?'},
{target:'Dali lang ko mubalik.',gloss:'Ich komme gleich wieder.'},
{target:'Naa koy lakaw karong hapon.',gloss:'Ich habe heute Nachmittag etwas zu erledigen.'},
{target:'Magpahuway ko gamay unya.',gloss:'Ich ruhe mich später kurz aus.'},
{target:'Tawagi ko kung mahuman ka.',gloss:'Ruf mich an, wenn du fertig bist.'}
],
speakingPrompts:[
{title:'Tagesablauf abstimmen',prompt:'Frage nach dem Plan und sage, was du heute erledigst.',cue:'Unsa imong buhat karon? Naglimpyo ko sa balay.'}
],
practicalTasks:[{title:'Alltagscheck',text:'Sprich vier Sätze zu deinem heutigen Ablauf: Aufgabe, Erledigung, Rückkehr und Pause.'}]
},
'Haus & Familie':{
learningGoals:[
'Wichtige Wörter für Haus, Räume und Familie zuordnen und aussprechen.',
'Mit „Naa … sa …“ sagen, wo sich jemand oder etwas im Haus befindet.',
'Kurze Sätze über Zuhause und Familie verstehen und nachsprechen.'
],
corePatterns:[
{target:'Balay',gloss:'Haus'},
{target:'Kwarto',gloss:'Zimmer'},
{target:'Kusina',gloss:'Küche'},
{target:'Sala',gloss:'Wohnzimmer'},
{target:'Banyo',gloss:'Badezimmer'},
{target:'Pultahan',gloss:'Tür'},
{target:'Bintana',gloss:'Fenster'},
{target:'Atop',gloss:'Dach'},
{target:'Pamilya',gloss:'Familie'},
{target:'Among pamilya',gloss:'unsere Familie'},
{target:'Naa ko sa balay.',gloss:'Ich bin zu Hause.'},
{target:'Naa sila sa kusina.',gloss:'Sie sind in der Küche.'},
{target:'Asa ang kusina?',gloss:'Wo ist die Küche?'},
{target:'Ang among balay.',gloss:'Unser Haus.'}
],
grammarFocus:[
{
title:'Naa … sa … für Ort',
text:'„Naa“ drückt aus, dass jemand oder etwas irgendwo ist; „sa“ verbindet mit dem Ort.',
example:'Naa ko sa balay. Naa sila sa kusina.'
},
{
title:'among = unser (Plural inklusiv)',
text:'„Among“ passt zu „wir/unsere“ im Sinne von Familie oder Gruppe.',
example:'Among pamilya. Ang among balay.'
}
],
speakingPrompts:[
{
title:'Räume benennen',
prompt:'Nenne Küche, Wohnzimmer und Badezimmer auf Bisaya.',
cue:'Kusina, sala, banyo.'
},
{
title:'Wer ist wo?',
prompt:'Sage, dass du zu Hause bist, und frage, wo die Küche ist.',
cue:'Naa ko sa balay. Asa ang kusina?'
}
],
practicalTasks:[
{
title:'Rundgang',
text:'Geh in Gedanken durch dein Zuhause und benenne jeden Raum laut auf Bisaya.'
}
]
},
'Zeitformen - Grundlagen':{
learningGoals:[
'Vergangenheit, laufende Handlung und Zukunft in einfachen Alltagssätzen unterscheiden.',
'Zeitmarker (ni-, nag-/ga-, mo-) mit Zeitwörtern sinnvoll kombinieren.',
'Zwischen denselben Verben in drei Zeitbezügen sicher wechseln.'
],
corePatterns:[
{target:'Ni-kaon ko ganiha.',gloss:'Ich habe vorhin gegessen.'},
{target:'Nagkaon ko karon.',gloss:'Ich esse gerade jetzt.'},
{target:'Mo-kaon ko unya.',gloss:'Ich werde später essen.'},
{target:'Ni-adto ko sa merkado ganiha.',gloss:'Ich bin vorhin zum Markt gegangen.'},
{target:'Naa ko sa merkado karon.',gloss:'Ich bin jetzt auf dem Markt.'},
{target:'Mo-adto ko sa merkado ugma.',gloss:'Ich werde morgen zum Markt gehen.'},
{target:'Nipalit ko og isda ganiha.',gloss:'Ich habe vorhin Fisch gekauft.'},
{target:'Mupalit ko og isda ugma.',gloss:'Ich werde morgen Fisch kaufen.'}
],
grammarFocus:[
{title:'Vergangenheit mit ni-',text:'ni- markiert im Grundkurs häufig abgeschlossene Handlungen in der Vergangenheit.',example:'Ni-kaon ko ganiha.'},
{title:'Laufende Handlung mit nag-/ga-',text:'Für gerade laufende oder aktuelle Handlungen wird oft nag-/ga- genutzt, häufig zusammen mit karon.',example:'Nagkaon ko karon.'},
{title:'Zukunft/Absicht mit mo-',text:'mo- markiert im Kurs Zukünftiges oder Vorhaben und wird oft mit unya/ugma kombiniert.',example:'Mo-adto ko ugma.'},
{title:'Zeitwörter als Klarsteller',text:'Wörter wie ganiha, karon und ugma helfen, den Zeitbezug eindeutig zu machen.',example:'ganiha (vorhin), karon (jetzt), ugma (morgen)'}
],
speakingPrompts:[
{title:'Dreierschritt Zeit',prompt:'Formuliere denselben Inhalt nacheinander für Vergangenheit, Gegenwart und Zukunft.',cue:'Ni-adto ko ganiha. Naa ko diri karon. Mo-adto ko ugma.'},
{title:'Tagesplanung mit Zeiten',prompt:'Sage, was du vorhin getan hast, was du jetzt machst und was du später tun wirst.',cue:'Nipalit ko ganiha. Nagluto ko karon. Mo-kaon ko unya.'}
],
practicalTasks:[
{title:'Verb-Staffel',text:'Nimm drei Verben (z. B. kaon, adto, palit) und bilde jeweils Vergangenheit, Gegenwart und Zukunft laut.'},
{title:'Zeitkarten',text:'Ziehe zufällig ein Zeitwort (ganiha/karon/unya/ugma) und bilde sofort einen passenden Satz.'}
]
},
'Alltagsgespräche - Teil 2':{
learningGoals:[
'Ziele, Wege und Zeitpunkte im Alltag genauer angeben.',
'Verabredungen und Rückkehrzeiten in ganzen Sätzen formulieren.',
'Einkaufs- und Familienwege natürlich besprechen.'
],
corePatterns:[
{target:'Asa ka moadto unya?',gloss:'Wohin gehst du später?'},
{target:'Moadto ko sa merkado unya.',gloss:'Ich gehe später zum Markt.'},
{target:'Unsa imong plano karong gabii?',gloss:'Was ist dein Plan heute Abend?'},
{target:'Magkita mi sa silingan karon.',gloss:'Wir treffen jetzt die Nachbarn.'},
{target:'Mupalit ko ug pagkaon para sa balay.',gloss:'Ich kaufe Essen für zu Hause.'},
{target:'Mahimo ba ta magkita ugma buntag?',gloss:'Können wir uns morgen früh treffen?'},
{target:'Unsa orasa ka mouli?',gloss:'Um wie viel Uhr kommst du nach Hause?'},
{target:'Mouli ko mga alas sais.',gloss:'Ich komme gegen sechs nach Hause.'}
],
speakingPrompts:[
{title:'Weg und Zeit planen',prompt:'Frage nach Ziel und Uhrzeit und gib eine konkrete Antwort.',cue:'Asa ka moadto unya? Mouli ko mga alas sais.'}
],
practicalTasks:[{title:'Planungsdialog',text:'Baue einen Mini-Dialog mit Zielort, Uhrzeit und Rückkehr in mindestens vier Sätzen.'}]
},
'Woche 1 - Wiederholung':{
learningGoals:[
@@ -95,9 +373,19 @@ const LESSON_DIDACTICS = {
'Von einzelnen Wörtern zu kurzen Sätzen übergehen.'
],
corePatterns:['Kumusta','Salamat','Lami','Mingaw ko nimo']
{target:'Lingkod sa.',gloss:'Setz dich erst einmal.'},
{target:'Maayong pag-abot.',gloss:'Willkommen.'},
{target:'Salamat sa pag-anhi.',gloss:'Danke fürs Kommen.'},
{target:'Gimingaw mi nimo.',gloss:'Wir haben dich vermisst.'},
{target:'Kumusta ang biyahe?',gloss:'Wie war die Reise?'},
{target:'Ganahan ka og tubig?',gloss:'Möchtest du Wasser?'},
{target:'Naa ra mi diri.',gloss:'Wir sind hier.'}
],
grammarFocus:[
{title:'lang und sa als weiche Partikel',text:'lang und sa machen Aufforderungen oft weniger hart und alltagstauglicher.',example:'Sulod lang. Lingkod sa.'},
{title:'mi statt ko',text:'mi bedeutet wir und passt, wenn du für deine Familie oder Gruppe sprichst.',example:'Gimingaw mi nimo.'}
],
speakingPrompts:[
{title:'Gast empfangen',prompt:'Empfange einen Gast, bitte ihn herein, biete einen Sitzplatz an und frage nach der Reise.',cue:'Maayong pag-abot. Sulod lang. Lingkod sa. Kumusta ang biyahe?'},
{title:'Familiäre Wärme',prompt:'Sage, dass ihr die Person vermisst habt und biete Wasser an.',cue:'Gimingaw mi nimo. Ganahan ka og tubig?'}
],
practicalTasks:[
{title:'Besuchsszene',text:'Spiele eine Besuchsszene mit Begrüßung, Einladung, Angebot und Rückfrage.'}
]
},
'Besuch & Haushalt':{
learningGoals:[
'Wichtige Haus- und Besuchswörter sicher erkennen.',
'Dinge im Haus zeigen, benennen und in kurzen Sätzen verwenden.',
'Besuchswortschatz mit bereits bekannten Fragen verbinden.',
'Mindestens sechs Haushaltswörter aktiv abrufen.'
],
corePatterns:[
{target:'bisita',gloss:'Besuch / Gast'},
{target:'balay',gloss:'Haus / Zuhause'},
{target:'kwarto',gloss:'Zimmer'},
{target:'kusina',gloss:'Küche'},
{target:'lamisa',gloss:'Tisch'},
{target:'lingkuranan',gloss:'Stuhl'},
{target:'pultahan',gloss:'Tür'},
{target:'Naa sa kusina.',gloss:'Es ist in der Küche.'},
{target:'Asa ang lamisa?',gloss:'Wo ist der Tisch?'}
],
grammarFocus:[
{title:'Naa sa ...',text:'Mit naa sa sagst du, wo etwas ist.',example:'Naa sa kusina. Naa sa kwarto.'}
],
speakingPrompts:[
{title:'Im Haus zeigen',prompt:'Sage, wo Tisch, Stuhl und Küche sind.',cue:'Naa sa kusina. Naa ang lingkuranan diri.'}
],
practicalTasks:[
{title:'Hausrunde',text:'Gehe gedanklich durch ein Haus und nenne sechs Dinge mit Ort.'}
]
},
'Fragen im Alltag vertiefen':{
learningGoals:[
'Mehrstufige Frageketten bilden, ohne in lange deutsche Satzstrukturen zu fallen.',
'Ziel, Vorhaben, Zeit und Bedeutung höflich erfragen.',
'Bei Unsicherheit nachhaken und eine Frage reparieren.',
{title:'Frageketten',text:'Bisaya-Alltagsgespräche nutzen oft mehrere kurze Fragen statt einer langen Konstruktion.',example:'Asa ka padulong? Unsa imong buhaton didto?'},
{title:'ka und imong',text:'ka bezieht sich auf du als Person, imong auf dein/deine.',example:'Asa ka padulong? Unsa imong buhaton?'}
],
speakingPrompts:[
{title:'Drei-Fragen-Kette',prompt:'Frage nach Ziel, Zeit und Begleitung.',cue:'Asa ka padulong? Kanus-a ka moadto? Kinsa imong kuyog?'},
{title:'Reparaturfrage',prompt:'Sage, dass du fragen möchtest, bitte um Wiederholung und frage nach Bedeutung.',cue:'Pwede ko mangutana? Palihug ka mubalik? Unsay pasabot ani?'}
],
practicalTasks:[
{title:'Frageleiter',text:'Baue aus drei kurzen Fragen eine natürliche Alltagsszene.'}
]
},
'Termine & Verabredungen':{
learningGoals:[
'Einfache Treffen verabreden und bestätigen.',
'Zeitangaben mit morgen, später, heute und Uhrzeit verbinden.',
'Zusage, Absage und Verschieben weich ausdrücken.',
'Einen kurzen Termin-Dialog mit Uhrzeit sprechen.'
],
corePatterns:[
{target:'Magkita ta ugma.',gloss:'Wir treffen uns morgen.'},
{target:'Unsa orasa?',gloss:'Um wie viel Uhr?'},
{target:'Pwede ko karon.',gloss:'Ich kann jetzt / heute.'},
{target:'Dili ko pwede karon.',gloss:'Ich kann jetzt / heute nicht.'},
{target:'Pwede ugma?',gloss:'Geht morgen?'},
{target:'Sige, kita ta.',gloss:'Okay, wir sehen uns.'},
{target:'Human sa trabaho.',gloss:'Nach der Arbeit.'},
{target:'Texti lang ko.',gloss:'Schreib mir einfach.'}
],
grammarFocus:[
{title:'ta für wir beide / lass uns',text:'ta verbindet dich und die andere Person in gemeinsamen Handlungen.',example:'Magkita ta ugma. Kita ta.'},
{title:'pwede für Möglichkeit',text:'pwede hilft bei Zusage, Frage und Absage.',example:'Pwede ko karon. Pwede ugma?'}
],
speakingPrompts:[
{title:'Treffen planen',prompt:'Vereinbare ein Treffen für morgen, frage nach der Uhrzeit und bestätige.',cue:'Magkita ta ugma. Unsa orasa? Sige, kita ta.'},
{title:'Termin verschieben',prompt:'Sage, dass du heute nicht kannst, und schlage morgen vor.',cue:'Dili ko pwede karon. Pwede ugma?'}
],
practicalTasks:[
{title:'Kalenderdialog',text:'Sprich zwei Varianten: eine Zusage und eine weiche Verschiebung.'}
]
},
'Woche 5 - Intensivwiederholung I':{
learningGoals:[
'Besuch, Familie, Fürsorge und Terminplanung unter Abrufdruck mischen.',
'Neue Muster mit alten Grundlagen aus Begrüßung, Essen, Zeit und Beziehung verbinden.',
'Schnell zwischen Rollen wechseln: Gastgeber, Gast, Familienmitglied.',
'Mindestens acht Situationsantworten ohne deutsche Stütze geben.'
],
corePatterns:[
{target:'Kumusta ka?',gloss:'Wie geht es dir?'},
{target:'Nikaon na ka?',gloss:'Hast du schon gegessen?'},
{target:'Lingkod sa.',gloss:'Setz dich erst einmal.'},
{target:'Magkita ta ugma.',gloss:'Wir treffen uns morgen.'},
{target:'Unsa orasa?',gloss:'Um wie viel Uhr?'},
{target:'Ganahan ka og tubig?',gloss:'Möchtest du Wasser?'},
{target:'Palangga taka.',gloss:'Ich hab dich lieb / Ich liebe dich.'}
],
speakingPrompts:[
{title:'Rollenwechsel',prompt:'Wechsle zwischen Gast empfangen, nach Essen fragen und Termin vereinbaren.',cue:'Sulod lang. Nikaon na ka? Magkita ta ugma.'}
],
practicalTasks:[
{title:'Acht schnelle Antworten',text:'Beantworte acht kurze Situationen aus Besuch, Familie und Terminplanung laut.'}
]
},
'Spiralwiederholung - Familie & Fürsorge':{
learningGoals:[
'Frühe Familien- und Fürsorgemuster aktiv festigen.',
'Familienwörter nicht isoliert, sondern in kurzen Handlungen verwenden.',
'Nähe, Essen, Müdigkeit und Hilfe in einem Mini-Dialog verbinden.',
'Alte Kernmuster mit neuen Besuchssätzen kombinieren.'
],
corePatterns:[
{target:'Nanay',gloss:'Mutter'},
{target:'Tatay',gloss:'Vater'},
{target:'anak',gloss:'Kind'},
{target:'pamilya',gloss:'Familie'},
{target:'Nikaon na ka?',gloss:'Hast du schon gegessen?'},
{target:'Kapoy na ka?',gloss:'Bist du schon müde?'},
{target:'Tabangi ko, palihug.',gloss:'Hilf mir bitte.'},
{target:'Palangga taka.',gloss:'Ich hab dich lieb / Ich liebe dich.'}
],
speakingPrompts:[
{title:'Familien-Mini-Dialog',prompt:'Sprich mit einem Familienmitglied über Essen, Müdigkeit und Hilfe.',cue:'Nikaon na ka? Kapoy na ka? Tabangi ko, palihug.'}
],
practicalTasks:[
{title:'Spiralabruf',text:'Nimm vier alte Familienwörter und bilde mit jedem einen kurzen Alltagssatz.'}
]
},
'Gesundheit im Alltag':{
learningGoals:[
'Einfache Beschwerden erfragen, beantworten und fürsorglich reagieren.',
'Körper, Medizin, Ruhe und Wasser in einem Pflegegespräch verbinden.',
'Zwischen Frage, Rat und Rückmeldung unterscheiden.',
'Ein Gesundheitsgespräch mit mindestens fünf Sätzen sprechen.'
],
corePatterns:[
{target:'Sakit imong ulo?',gloss:'Tut dein Kopf weh?'},
{target:'Niinom ka og tambal?',gloss:'Hast du Medizin genommen?'},
{target:'Magpahuway sa.',gloss:'Ruh dich erst einmal aus.'},
{target:'Uminom og tubig.',gloss:'Trink Wasser.'},
{target:'Mas maayo na ka?',gloss:'Geht es dir schon besser?'},
{target:'Maayo ra ko.',gloss:'Mir geht es okay.'},
{target:'Tawag ta og doktor?',gloss:'Sollen wir einen Arzt rufen?'}
],
grammarFocus:[
{title:'akong und imong',text:'akong bedeutet mein, imong bedeutet dein. Beides steht direkt vor dem Körperteil.',example:'akong tiyan, imong ulo'},
{title:'Frage mit na',text:'na kann schon/jetzt markieren und kommt in Gesundheitsfragen häufig vor.',example:'Mas maayo na ka?'}
],
speakingPrompts:[
{title:'Pflegegespräch',prompt:'Frage nach Schmerzen, biete Ruhe und Wasser an und frage nach Besserung.',cue:'Sakit imong ulo? Magpahuway sa. Uminom og tubig. Mas maayo na ka?'}
],
practicalTasks:[
{title:'Fünf-Satz-Szene',text:'Sprich eine Szene: Beschwerde, Nachfrage, Medizin, Ruhe, Besserung.'}
]
},
'Medikamente & Beschwerden':{
learningGoals:[
'Gesundheitswortschatz zu Symptomen, Körper und Hilfe sicher abrufen.',
'Symptomwörter in kurze Fürsorgesätze einbauen.',
'Zwischen Wortabruf und situativer Reaktion wechseln.',
'Mindestens acht Gesundheitsbegriffe aktiv verwenden.'
],
corePatterns:[
{target:'tambal',gloss:'Medizin'},
{target:'ubo',gloss:'Husten'},
{target:'hilanat',gloss:'Fieber'},
{target:'kasakit',gloss:'Schmerz'},
{target:'ulo',gloss:'Kopf'},
{target:'tiyan',gloss:'Bauch'},
{target:'doktor',gloss:'Arzt / Ärztin'},
{target:'tubig',gloss:'Wasser'},
{target:'Aduna kay hilanat?',gloss:'Hast du Fieber?'}
],
speakingPrompts:[
{title:'Symptom zu Hilfe',prompt:'Ordne Husten, Fieber und Schmerz je einer passenden Hilfe zu.',cue:'Aduna kay hilanat? Magpahuway sa. Uminom og tubig.'}
],
practicalTasks:[
{title:'Gesundheitskarten',text:'Ziehe gedanklich acht Gesundheitswörter und bilde daraus vier kurze Hilfesätze.'}
]
},
'Woche 5 - Intensivwiederholung II':{
learningGoals:[
'Gesundheit, Besuch, Fragen und Terminplanung gemischt reaktivieren.',
'Fehlercluster aus Woche 5 für SRS und Wiederholung sichtbar machen.'
],
corePatterns:[
{target:'Pwede ko mangutana?',gloss:'Darf ich fragen?'},
{target:'Palihug ka mubalik?',gloss:'Kannst du das bitte wiederholen?'},
{target:'Magkita ta ugma.',gloss:'Wir treffen uns morgen.'},
{target:'Salamat sa pag-anhi.',gloss:'Danke fürs Kommen.'},
{target:'Niinom ka og tambal?',gloss:'Hast du Medizin genommen?'},
{target:'Mas maayo na ka?',gloss:'Geht es dir schon besser?'},
{target:'Dili ko pwede karon.',gloss:'Ich kann heute nicht.'},
{target:'Ganahan ka og tubig?',gloss:'Möchtest du Wasser?'}
],
speakingPrompts:[
{title:'Mischrunde',prompt:'Reagiere nacheinander auf Besuch, Krankheit, Termin und Verständnisproblem.',cue:'Sulod lang. Niinom ka og tambal? Pwede ugma? Palihug ka mubalik?'}
],
practicalTasks:[
{title:'Fehlercluster',text:'Notiere nach der Übung drei Sätze, bei denen du gezögert hast, und wiederhole sie laut.'}
]
},
'Woche 5 - Checkpoint':{
learningGoals:[
'Die Inhalte von Woche 5 diagnostisch sichern.',
'Besuch, Termine, Fragen und Gesundheit in freien Antworten kombinieren.',
'Schwache Muster für die nächste Wiederholungsphase markieren.',
'Eine kurze Besuchs- oder Pflegesituation ohne Vorlage lösen.'
{title:'Checkpoint-Szene',prompt:'Löse eine Szene mit Besuch, Termin und Gesundheitsfrage.',cue:'Sulod lang. Magkita ta ugma? Sakit imong ulo?'}
],
practicalTasks:[
{title:'Diagnose',text:'Beantworte fünf freie Situationen und markiere alle Sätze, die nicht sofort kamen.'}
]
},
'Unterwegs & Transport':{
learningGoals:[
'Nach Weg, Haltestelle, Fahrpreis und Ziel fragen.',
'Sagen, wohin man fährt und wo man aussteigen möchte.',
'Transportfragen mit Orts- und Preiswissen aus früheren Wochen verbinden.',
'Eine einfache Fahrt sprachlich organisieren.'
],
corePatterns:[
{target:'Asa ang sakayan?',gloss:'Wo ist die Haltestelle / Mitfahrstelle?'},
{target:'Moadto ko sa lungsod.',gloss:'Ich fahre/gehe in die Stadt.'},
{target:'Hunong lang dinhi.',gloss:'Bitte hier anhalten.'},
{target:'Pila ang plite?',gloss:'Wie viel kostet die Fahrt?'},
{target:'Asa ko manaog?',gloss:'Wo soll ich aussteigen?'},
{target:'Duol ra ba?',gloss:'Ist es nah?'},
{target:'Layo pa ba?',gloss:'Ist es noch weit?'},
{target:'Padulong ko sa balay.',gloss:'Ich bin auf dem Weg nach Hause.'}
],
grammarFocus:[
{title:'moadto und padulong',text:'moadto betont das Hingehen/Fahren, padulong beschreibt die Richtung.',example:'Moadto ko sa lungsod. Padulong ko sa balay.'},
{title:'dinhi',text:'dinhi bedeutet hier und ist beim Aussteigen oder Anhalten praktisch.',example:'Hunong lang dinhi.'}
],
speakingPrompts:[
{title:'Weg erfragen',prompt:'Frage nach Haltestelle, Preis und Ausstieg.',cue:'Asa ang sakayan? Pila ang plite? Asa ko manaog?'},
{title:'Fahrt beschreiben',prompt:'Sage, dass du in die Stadt und später nach Hause fährst.',cue:'Moadto ko sa lungsod. Padulong ko sa balay.'}
],
practicalTasks:[
{title:'Transportdialog',text:'Sprich eine kurze Fahrt: Ziel, Preis, Ausstieg, Dank.'}
]
},
'Wege & Verkehr':{
learningGoals:[
'Verkehrs- und Wegwörter aktiv abrufen.',
'Route, Fahrzeug und Halt in einfachen Sätzen beschreiben.',
'Frühere Richtungswörter mit Transport verbinden.',
'Eine kurze Route mit mindestens vier Stationen erklären.'
],
corePatterns:[
{target:'sakyanan',gloss:'Fahrzeug / Auto'},
{target:'jeepney',gloss:'Jeepney'},
{target:'dalan',gloss:'Straße / Weg'},
{target:'hunong',gloss:'Halt / anhalten'},
{target:'biyahe',gloss:'Reise / Fahrt'},
{target:'tuo',gloss:'rechts'},
{target:'wala',gloss:'links'},
{target:'diretso',gloss:'geradeaus'},
{target:'Duol ra.',gloss:'Es ist nur nah.'}
],
speakingPrompts:[
{title:'Route beschreiben',prompt:'Beschreibe eine einfache Route mit geradeaus, rechts und links.',cue:'Diretso. Tuo. Wala. Duol ra.'}
],
practicalTasks:[
{title:'Wegskizze',text:'Erkläre den Weg von Zuhause zur Haltestelle in vier kurzen Sätzen.'}
]
},
'Arbeit & Aufgaben':{
learningGoals:[
'Über Arbeit, Haushaltspflichten und To-dos sprechen.',
'Sagen, was man noch erledigen muss und ob man fertig ist.',
'Hilfe anbieten oder erbitten.',
'Eine Tagesaufgabe mit Zeit und Grund erklären.'
],
corePatterns:[
{target:'Naa koy trabaho karon.',gloss:'Ich habe heute Arbeit.'},
{target:'Aduna koy buhaton.',gloss:'Ich habe etwas zu erledigen.'},
{target:'Human na ko.',gloss:'Ich bin fertig.'},
{target:'Wala pa ko nahuman.',gloss:'Ich bin noch nicht fertig.'},
{target:'Tabang ta.',gloss:'Lass uns helfen.'},
{target:'Tabangi ko, palihug.',gloss:'Hilf mir bitte.'},
{target:'Unahon nako ni.',gloss:'Das mache ich zuerst.'},
{target:'Human sa paniudto.',gloss:'Nach dem Mittagessen.'}
],
grammarFocus:[
{title:'naa koy / aduna koy',text:'Beide Muster drücken aus, dass du etwas hast oder erledigen musst.',example:'Naa koy trabaho. Aduna koy buhaton.'},
{title:'human na vs. wala pa',text:'human na zeigt fertig, wala pa zeigt noch nicht.',example:'Human na ko. Wala pa ko nahuman.'}
],
speakingPrompts:[
{title:'Tagesaufgabe',prompt:'Erkläre, was du heute erledigen musst, was zuerst kommt und wann du fertig bist.',cue:'Aduna koy buhaton. Unahon nako ni. Human na ko unya.'}
],
practicalTasks:[
{title:'To-do laut',text:'Sprich drei Aufgaben: eine erledigt, eine offen, eine mit Hilfe.'}
]
},
'Tätigkeiten & Organisation':{
learningGoals:[
'Organisationswortschatz für Alltag und Haushalt erweitern.',
'Listen, Aufgaben und Hilfe in kurzen Sätzen verwenden.',
'Zwischen Tätigkeit, Person und Reihenfolge unterscheiden.',
'Eine einfache To-do-Liste auf Bisaya sprechen.'
],
corePatterns:[
{target:'trabaho',gloss:'Arbeit'},
{target:'buluhaton',gloss:'Aufgabe / Tätigkeit'},
{target:'lista',gloss:'Liste'},
{target:'tabang',gloss:'Hilfe'},
{target:'una',gloss:'zuerst'},
{target:'sunod',gloss:'als Nächstes'},
{target:'human',gloss:'fertig / danach'},
{target:'Kinsa ang motabang?',gloss:'Wer hilft?'},
{target:'Unsa ang sunod?',gloss:'Was kommt als Nächstes?'}
],
speakingPrompts:[
{title:'Organisation',prompt:'Sage, was zuerst kommt, was danach kommt und wer hilft.',cue:'Una kini. Sunod kana. Kinsa ang motabang?'}
],
practicalTasks:[
{title:'Mini-Liste',text:'Erstelle mündlich eine Liste mit drei Aufgaben und einer Bitte um Hilfe.'}
]
},
'Freies Gespräch - Familie & Alltag':{
learningGoals:[
'Frühere Themen ohne enge Führung kombinieren.',
'Längere Alltagsantworten mit Familie, Zuhause, Befinden und Plan aufbauen.',
'Mindestens fünf zusammenhängende Sätze frei sprechen.'
],
corePatterns:[
{target:'Maayo ra ko karon.',gloss:'Mir geht es heute okay.'},
{target:'Naa mi sa balay.',gloss:'Wir sind zuhause.'},
{target:'Nikaon na mi.',gloss:'Wir haben schon gegessen.'},
{target:'Aduna koy buhaton unya.',gloss:'Ich habe später etwas zu erledigen.'},
{target:'Magkita mi unya.',gloss:'Wir sehen uns später.'},
{target:'Gimingaw ko nimo.',gloss:'Ich vermisse dich.'},
{target:'Wala ko kasabot, palihug balik.',gloss:'Ich verstehe nicht, bitte wiederhole es.'},
{target:'Amping kanunay.',gloss:'Pass immer auf dich auf.'}
],
grammarFocus:[
{title:'mi für wir',text:'mi nutzt du, wenn du über wir sprichst und die angesprochene Person nicht einschließt.',example:'Naa mi sa balay. Nikaon na mi.'},
{title:'Freies Sprechen mit Ankern',text:'Nutze bekannte Satzanker und füge nur kleine neue Teile hinzu.',example:'Maayo ra ko karon. Aduna koy buhaton unya.'}
],
speakingPrompts:[
{title:'Fünf Sätze frei',prompt:'Erzähle von deinem Tag mit Befinden, Zuhause, Essen, Plan und Nähe.',cue:'Maayo ra ko karon. Naa mi sa balay. Nikaon na mi. Aduna koy buhaton unya. Gimingaw ko nimo.'}
],
practicalTasks:[
{title:'Freie Aufnahme',text:'Sprich 30 Sekunden frei und verwende mindestens einen Reparatursatz, wenn du stockst.'}
]
},
'Spiralwiederholung - Wochen 1 bis 4':{
learningGoals:[
'Grundlagen aus den ersten vier Wochen breit reaktivieren.',
'Begrüßung, Essen, Zeit, Preise, Gefühle und Gesundheit mischen.',
'Alte Muster in neuen Kontexten wiederfinden.',
'Langzeitabruf stärker gewichten als neues Material.'
],
corePatterns:[
{target:'Kumusta ka?',gloss:'Wie geht es dir?'},
{target:'Maayong gabii.',gloss:'Guten Abend.'},
{target:'Nikaon na ka?',gloss:'Hast du schon gegessen?'},
{target:'Tagpila ni?',gloss:'Wie viel kostet das?'},
{target:'Karon',gloss:'jetzt / heute'},
{target:'Ugma',gloss:'morgen'},
{target:'Nalipay ko.',gloss:'Ich freue mich / bin glücklich.'},
{target:'Palihug ka mubalik?',gloss:'Kannst du das bitte wiederholen?'}
],
speakingPrompts:[
{title:'Blockmix',prompt:'Baue aus Begrüßung, Essen, Preis und Gesundheit eine Alltagsszene.',cue:'Kumusta ka? Nikaon na ka? Tagpila ni? Sakit akong ulo.'}
],
practicalTasks:[
{title:'Langzeitabruf',text:'Ziehe zehn alte Wörter/Sätze zufällig und bilde daraus fünf kurze Dialogantworten.'}
]
},
'Konflikte & Missverständnisse':{
learningGoals:[
'Missverständnisse höflich ansprechen und entschärfen.',
'Um Wiederholung, langsameres Sprechen oder Erklärung bitten.',
'Eigene Unsicherheit ausdrücken, ohne das Gespräch abzubrechen.',
'Eine kleine heikle Situation ruhig reparieren.'
],
corePatterns:[
{target:'Wala ko kasabot.',gloss:'Ich verstehe nicht.'},
{target:'Dili mao akong pasabot.',gloss:'Das meinte ich nicht.'},
{target:'Sige lang.',gloss:'Schon okay.'},
{target:'Salamat sa pagsabot.',gloss:'Danke fürs Verständnis.'}
],
grammarFocus:[
{title:'Reparieren statt abbrechen',text:'Ein Reparatursatz hält das Gespräch offen, auch wenn du etwas nicht verstanden hast.',example:'Wala ko kasabot. Palihug ka mubalik?'},
{title:'Weich entschärfen',text:'Sige lang und Salamat sa pagsabot helfen, Spannung aus dem Gespräch zu nehmen.',example:'Sige lang. Salamat sa pagsabot.'}
],
speakingPrompts:[
{title:'Missverständnis lösen',prompt:'Sage, dass du nicht verstanden hast, bitte um Wiederholung und entschuldige dich.',cue:'Wala ko kasabot. Palihug ka mubalik? Pasayloa ko.'},
{title:'Heikle Korrektur',prompt:'Sage, dass du etwas nicht so gemeint hast, und danke fürs Verständnis.',cue:'Dili mao akong pasabot. Salamat sa pagsabot.'}
],
practicalTasks:[
{title:'Konfliktanker',text:'Übe fünf Reparatursätze, bis du sie ohne Lesen sagen kannst.'}
]
},
'Abschlusstest - Schnellstart':{
learningGoals:[
'Aktiven Grundwortschatz aus dem gesamten 6-Wochen-Schnellstart prüfen.',
'Wörter und kurze Sätze in beide Richtungen abrufen.',
'Ähnliche Muster sicher unterscheiden.',
'Schwächen für die nächste SRS-Wiederholung markieren.'
],
corePatterns:[
{target:'Kumusta',gloss:'Wie geht es / Hallo'},
{target:'bisita',gloss:'Besuch / Gast'},
{target:'tambal',gloss:'Medizin'},
{target:'plite',gloss:'Fahrpreis'},
{target:'trabaho',gloss:'Arbeit'},
{target:'buluhaton',gloss:'Aufgabe'},
{target:'dalan',gloss:'Straße / Weg'},
{target:'pamilya',gloss:'Familie'},
{target:'Gimingaw ko nimo.',gloss:'Ich vermisse dich.'},
{target:'Palihug ka mubalik?',gloss:'Kannst du das bitte wiederholen?'}
],
speakingPrompts:[
{title:'Aktiver Wortschatz',prompt:'Wähle acht Wörter und bilde vier Alltagssätze daraus.',cue:'bisita -> Sulod lang. tambal -> Niinom ka og tambal?'}
],
practicalTasks:[
{title:'Beide Richtungen',text:'Übersetze zehn Einheiten Deutsch -> Bisaya und Bisaya -> Deutsch.'}
]
},
'Abschlussprüfung - Schnellstart':{
learningGoals:[
'Den 6-Wochen-Schnellstart in Dialog, Abruf und freier Anwendung prüfen.',
'Besuch, Gesundheit, Transport, Arbeit und Familie zusammenführen.',
'Mehrere Sätze ohne starre Vorlage produzieren.',
'Vor dem Übergang in die Alltagsphase stabile Grundfähigkeit zeigen.'
],
corePatterns:[
{target:'Sulod lang. Lingkod sa.',gloss:'Komm herein. Setz dich erst einmal.'},
{target:'Magkita ta ugma. Unsa orasa?',gloss:'Wir treffen uns morgen. Um wie viel Uhr?'},
{target:'Niinom ka og tambal?',gloss:'Hast du Medizin genommen?'},
{target:'Asa ang sakayan?',gloss:'Wo ist die Haltestelle?'},
{target:'Pila ang plite?',gloss:'Wie viel kostet die Fahrt?'},
{target:'Aduna koy buhaton karon.',gloss:'Ich habe heute etwas zu erledigen.'},
{target:'Wala ko kasabot. Hinay-hinay lang.',gloss:'Ich verstehe nicht. Bitte langsam.'},
{target:'Amping kanunay.',gloss:'Pass immer auf dich auf.'}
],
speakingPrompts:[
{title:'Große Alltagsszene',prompt:'Verbinde Besuch, Termin, Gesundheit und Transport in einem Mini-Dialog.',cue:'Sulod lang. Magkita ta ugma? Niinom ka og tambal? Asa ang sakayan?'},
{title:'Freie Antwort',prompt:'Antworte in mindestens fünf Sätzen auf: Was machst du heute und wen triffst du?',cue:'Aduna koy buhaton karon. Magkita ta ugma. Amping kanunay.'}
],
practicalTasks:[
{title:'Abschlussaufnahme',text:'Sprich eine 45-Sekunden-Szene mit mindestens sechs Kernmustern aus Woche 1-6.'}
]
},
'Kulturelle Vertiefung im Familienalltag':{
learningGoals:[
'Sprache, Familiennähe und Respekt kulturell einordnen.',
'Indirekte Kommunikation als soziale Strategie verstehen.',
'Nähe, Hilfe und Ablehnung passend formulieren.',
'Kulturelles Verständnis in konkrete Antwortwahl übertragen.'
{target:'Dili lang sa karon.',gloss:'Jetzt lieber nicht.'},
{target:'Sige lang.',gloss:'Schon okay.'},
{target:'Tabang ta.',gloss:'Lass uns helfen.'},
{target:'Salamat sa pagsabot.',gloss:'Danke fürs Verständnis.'}
],
grammarFocus:[
{title:'Indirekt ist oft höflicher',text:'In Familien- und Besuchskontexten kann eine weiche Formulierung natürlicher sein als ein direktes Nein.',example:'Dili lang sa karon. Sunod na lang.'},
{title:'Sprache als Beziehungspflege',text:'Viele Formeln transportieren nicht nur Inhalt, sondern Fürsorge und Nähe.',example:'Amping kanunay. Tabang ta.'}
],
speakingPrompts:[
{title:'Kulturell passend reagieren',prompt:'Lehne eine Einladung weich ab und bedanke dich fürs Verständnis.',cue:'Dili lang sa karon. Salamat sa pagsabot.'},
{title:'Hilfe anbieten',prompt:'Biete Hilfe an, ohne aufdringlich zu klingen.',cue:'Tabang ta. Sige lang.'}
],
practicalTasks:[
{title:'Antwortwahl',text:'Vergleiche drei direkte deutsche Antworten und formuliere sie weicher auf Bisaya.'}
]
}
};
exportconstBISAYA_PHASE3_LESSONS=[
{week:5,day:1,num:44,type:'conversation',title:'Besuch & Gastfreundschaft',desc:'Besuch empfangen, hereinbitten, etwas anbieten und nach der Reise fragen',targetMin:24,targetScore:80,review:false,cultural:'Gastfreundschaft ist im philippinischen Familienalltag zentral und wird oft durch konkrete Fürsorge gezeigt.'},
{week:5,day:1,num:45,type:'vocab',title:'Besuch & Haushalt',desc:'Haus-, Besuchs- und Haushaltswörter in kurzen Ortssätzen verwenden',targetMin:22,targetScore:85,review:true,cultural:null},
{week:5,day:2,num:46,type:'grammar',title:'Fragen im Alltag vertiefen',desc:'Rückfragen, Folgefragen, Bedeutung und höfliches Nachhaken sicher kombinieren',targetMin:26,targetScore:78,review:true,cultural:null},
{week:5,day:2,num:47,type:'conversation',title:'Termine & Verabredungen',desc:'Treffen planen, Uhrzeiten absprechen, zusagen und weich verschieben',targetMin:24,targetScore:80,review:false,cultural:null},
{week:5,day:3,num:48,type:'review',title:'Woche 5 - Intensivwiederholung I',desc:'Besuch, Familie, Fürsorge und Terminplanung in schnellen Rollenwechseln mischen',targetMin:34,targetScore:82,review:false,cultural:null},
{week:5,day:3,num:49,type:'vocab',title:'Spiralwiederholung - Familie & Fürsorge',desc:'Alte Familien- und Fürsorgemuster aktiv reaktivieren und in neue Szenen übertragen',targetMin:24,targetScore:85,review:true,cultural:null},
{week:5,day:4,num:50,type:'conversation',title:'Gesundheit im Alltag',desc:'Beschwerden erfragen, Ruhe/Wasser/Medizin anbieten und nach Besserung fragen',targetMin:26,targetScore:80,review:false,cultural:null},
{week:5,day:4,num:51,type:'vocab',title:'Medikamente & Beschwerden',desc:'Symptome, Körperwörter und Hilfewortschatz in Fürsorgesätzen verwenden',targetMin:24,targetScore:85,review:true,cultural:null},
{week:5,day:5,num:52,type:'review',title:'Woche 5 - Intensivwiederholung II',desc:'Gesundheit, Besuch, Fragen und Terminplanung unter Abrufdruck kontrastieren',targetMin:34,targetScore:82,review:false,cultural:null},
{week:5,day:5,num:53,type:'vocab',title:'Woche 5 - Checkpoint',desc:'Diagnostischer Checkpoint zu Besuch, Termin, Frageketten und Gesundheit',targetMin:24,targetScore:84,review:true,cultural:null},
{week:6,day:1,num:54,type:'conversation',title:'Unterwegs & Transport',desc:'Nach Weg, Haltestelle, Fahrpreis, Ziel und Ausstieg fragen',targetMin:26,targetScore:80,review:false,cultural:null},
{week:6,day:1,num:55,type:'vocab',title:'Wege & Verkehr',desc:'Verkehrs-, Richtungs- und Bewegungswortschatz in einfachen Routen verwenden',targetMin:24,targetScore:85,review:true,cultural:null},
{week:6,day:2,num:56,type:'conversation',title:'Arbeit & Aufgaben',desc:'Über Arbeit, Pflichten, Reihenfolge, Fertigsein und Hilfe sprechen',targetMin:26,targetScore:80,review:false,cultural:null},
{week:6,day:2,num:57,type:'vocab',title:'Tätigkeiten & Organisation',desc:'Aufgaben, Listen, Reihenfolge und Hilfe als To-do-Sprache festigen',targetMin:24,targetScore:85,review:true,cultural:null},
{week:6,day:3,num:58,type:'conversation',title:'Freies Gespräch - Familie & Alltag',desc:'Fünf zusammenhängende Sätze zu Familie, Zuhause, Befinden und Tagesplan sprechen',targetMin:30,targetScore:78,review:false,cultural:null},
{week:6,day:3,num:59,type:'review',title:'Spiralwiederholung - Wochen 1 bis 4',desc:'Begrüßung, Essen, Zeit, Preise, Gefühle und Gesundheit als Langzeitabruf mischen',targetMin:34,targetScore:84,review:false,cultural:null},
{week:6,day:4,num:60,type:'conversation',title:'Konflikte & Missverständnisse',desc:'Missverständnisse höflich reparieren, um Wiederholung bitten und Spannung entschärfen',targetMin:26,targetScore:80,review:false,cultural:'Ruhiger, indirekter Umgang hilft in heiklen Gesprächen oft mehr als direkte Korrektur.'},
{week:6,day:4,num:61,type:'vocab',title:'Abschlusstest - Schnellstart',desc:'Aktiver Wortschatztest über den 6-Wochen-Schnellstart in beide Richtungen',targetMin:24,targetScore:84,review:true,cultural:null},
{week:6,day:5,num:62,type:'review',title:'Abschlussprüfung - Schnellstart',desc:'Große Abschlussprüfung mit Besuch, Gesundheit, Transport, Arbeit und freier Anwendung',targetMin:38,targetScore:84,review:false,cultural:'Die Abschlussphase prüft Verständlichkeit und Alltagsfähigkeit, nicht perfekte Grammatik.'},
{week:6,day:5,num:63,type:'culture',title:'Kulturelle Vertiefung im Familienalltag',desc:'Respekt, Nähe, indirekte Kommunikation und Hilfe im Familienalltag einordnen',targetMin:22,targetScore:0,review:false,cultural:'Sprache, Respekt und Familienrollen sind eng miteinander verbunden.'}
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.