Volmarg/personal-management-system
47.8
Weak · 19 September 2026
27.9k
lines of production code
PHP
primary language
1
measurement over time
What this system is
This system is a personal management suite built on Symfony that provides a comprehensive REST API for tracking finances, schedules, health, and tasks. It supports modular data management with features like soft deletion, resource locking, and file storage associations, all secured via JWT authentication. The backend handles automated recurring payments, scheduled backups, and notification dispatches, while offering extensive demo data seeding for rapid development and testing.
How it got here
2019 — Symfony 5.4 migration and architecture rewrite
104 changes.
The project underwent a major platform upgrade from Symfony 4 to 5.4 and PHP 7.2 to 8.3, replacing FOSUserBundle with JWT authentication and modernizing the Doctrine repository layer. This period involved a comprehensive cleanup of legacy controllers, forms, and Twig templates, while introducing soft-delete patterns, new data entities for schedules and finances, and structured DTOs.
2020–2024 — comprehensive module API expansion
59 changes.
This period focused on building out a wide array of new backend modules, including Issues, Todo, Job, Payments, and Shopping, by implementing full CRUD APIs and associated database entities. The work also established foundational infrastructure for security, such as JWT authentication, resource locking, and standardized response structures, while introducing external integrations for Discord and PMS-IO.
2025–2026 — module expansion and infrastructure
44 changes.
This period focused on implementing new backend modules for Contacts, Health, and Calendar management, alongside a comprehensive file storage system with polymorphic associations. It also established robust infrastructure for user settings, system locking, and automated deployment and backup workflows.
Features
Add API for retrieving and updating notification configuration settings
Users can now fetch the current notification configuration and update it via a new API endpoint. The GET request at /module/system/settings/notifications/config/all returns the list of notification settings (including name, value, and reminder activation status), defaulting to a predefined state if none are saved. The PATCH request at /module/system/settings/notifications/config allows users to submit an array of configuration objects to persist their notification preferences.
src/Action/Modules/System/Settings/Notification · high confidence
Add ability to manage shopping plans
Users can now create, view, update, and delete shopping plans via the new MyShoppingPlansAction endpoint at /module/shopping/plans. The API supports creating a plan with a name and information, retrieving all active plans, updating an existing plan, and soft-deleting a plan by marking it as deleted.
src/Action/Modules/Shopping · high confidence
Add custom Doctrine type for serialized JSON storage
A new \SerializedJson\ Doctrine type has been introduced in \src/Entity/DoctrineTypes\, allowing entities to store PHP arrays as serialized strings in the database. This custom type automatically handles the conversion between PHP arrays and their serialized representation during read and write operations, simplifying data persistence for complex structured data without requiring manual serialization logic in application code.
src/Entity/DoctrineTypes · high confidence
Added DoctorContactDto for health module data transfer
A new DoctorContactDto class has been introduced in the Health module to handle doctor contact information. This data transfer object includes properties for name, value, and a UUID, which is used on the frontend to identify specific contact types when managing multiple entries such as phone numbers. The class utilizes the SerializerAwareTrait to support serialization processes.
src/DTO/Modules/Health · high confidence
Added Doctrine repositories for Health module entities
Introduced new Doctrine entity repositories for the Health module, specifically for Doctor, DoctorAppointment, and Illness entities. These repositories extend ServiceEntityRepository and provide standard data access methods (find, findOneBy, findAll, findBy) to support persistence operations for these new health-related data models.
src/Repository/Modules/Health · high confidence
Added GenKeyCommand for encryption key generation
The encrypt-bundle now includes a new console command, \encrypt:genkey\, which generates and displays a 256-bit encryption key. This command is registered in the service configuration, allowing users to easily create the necessary keys for the bundle's encryption features.
_vendor\fixes · high confidence
Added HP LaserJet CM1015 cMFP manual to demo data
The demo data module for Files now includes a sample PDF document for the HP LaserJet CM1015 cMFP printer manual, located in the Documents/Manuals directory. This addition provides users with a concrete example of a manual file within the file system structure.
assets/static/demoData/modules/Files · high confidence
Added data fixtures for MyTodo and MyTodoElement entities
New Doctrine fixtures have been introduced to populate the database with sample data for the Todo module. MyTodoFixtures creates MyTodo records linked to Goals, Issues, and general modules, while MyTodoElementFixtures creates associated MyTodoElement records with completion statuses. These fixtures ensure that development and testing environments are seeded with realistic todo structures and elements.
src/DataFixtures/Modules/Todo · high confidence
Added data fixtures for file tags, settings, and placeholder icons
New data provider classes have been added to the \src/DataFixtures/Providers\ directory to support demo data generation. \FilesTags\ provides a static dataset mapping file paths to JSON-encoded tags for documents, images, and manuals. \SettingProvider\ defines constants for supported currencies (PLN, EUR, CASH). \FontawesomeIconsProvider\ was added as a placeholder with an empty \getRandomIcon\ method, indicating a shift away from using FontAwesome icons in the backend as suggested by the commit history.
src/DataFixtures/Providers · high confidence
Added demo data fixture for ModuleData entities
A new data fixture has been added to populate the database with sample ModuleData entities for demonstration purposes. This fixture iterates through a predefined set of entries (including record identifiers, modules, types, and descriptions) and persists them as new ModuleDataEntity records, allowing users to quickly seed the application with initial data.
src/DataFixtures/Modules · high confidence
Added demo data fixture for My Issues module
A new data fixture class (MyIssues.php) has been introduced to populate the 'My Issues' module with sample data. This fixture loads MyIssue, MyIssueContact, and MyIssueProgress entities using Faker-generated content, ensuring the module has initial demo records available for testing and demonstration purposes.
src/DataFixtures/Modules/Issues · high confidence
Added demo data fixtures for Contacts, Achievements, and Shopping modules
New data fixtures have been introduced to populate the application with realistic demo data for the Contacts, Achievements, and Shopping modules. The Contacts fixture generates sample contact groups, types, and individual contacts with randomized details (names, emails, locations) and visual attributes, while the Achievements fixture seeds predefined achievement types and the Shopping fixture creates sample shopping plans based on expensive product examples. These fixtures allow users to quickly populate their instances with structured test data for these specific modules.
src/DataFixtures/Modules/Contacts · high confidence
Added demo data fixtures for Goals and Passwords modules
New Doctrine fixtures have been added to populate the application with demo data for the Goals and Passwords modules. The \MyPasswordsSettingsFixtures\ creates password groups, \MyPasswordsFixtures\ generates individual password entries linked to those groups, and \MyGoalsPaymentsFixtures\ creates payment goal records with randomized dates and amounts. These fixtures allow users to quickly seed the database with sample data for testing and demonstration purposes.
src/DataFixtures/Modules/Goals, src/DataFixtures/Modules/Passwords · high confidence
Added demo data fixtures for Job Afterhours and Holidays
New data fixtures have been introduced to populate the application with realistic demo data for the Job module. The MyJobAfterhoursFixtures class generates sample records for after-hours work, including both 'made' and 'spent' time entries linked to specific goals. Additionally, the MyJobHolidaysFixtures class creates holiday pool configurations for various companies and generates sample records for holidays taken, ensuring the system has initial data for testing and demonstration purposes.
src/DataFixtures/Modules/Job · high confidence
Added demo data fixtures for Notes categories and user notes
New fixture classes have been added to populate the application with demo data for the Notes module. MyNotesSettingsFixtures creates note categories with names, icons, colors, and parent-child relationships, while MyNotesFixtures generates individual notes linked to those categories. These fixtures allow users to quickly seed the database with sample content for testing or demonstration purposes.
src/DataFixtures/Modules/Notes · high confidence
Added demo data fixtures for the Payments module
New fixture classes have been added to populate the database with sample data for the Payments module. These include fixtures for bills, income, monthly recurring payments, owed money, products, and settings, ensuring that the application starts with realistic test data for these financial entities.
src/DataFixtures/Modules/Payments · high confidence
Added demo data generator for the new schedule module
The \MyScheduleFixtures\ class has been added to populate the database with sample data for the updated schedule system. This fixture generates five sample calendars with distinct colors and icons, along with 100 schedule entries per month (spanning previous, current, and next months). Each schedule entry includes randomized details such as title, body, location, and duration, and is associated with a configurable number of reminders (up to four) with unique timestamps to ensure data integrity during testing and demo environments.
src/DataFixtures/Modules/Schedule · high confidence
Added demo data generator for travel ideas
A new fixture class has been introduced to populate the application with 150 sample travel ideas for demonstration purposes. This generator creates entries with randomized countries, cities, and categories, and assigns placeholder images sourced from a remote provider (picsum.photos) to ensure visual content is available even if local assets are missing.
src/DataFixtures/Modules/Travels · high confidence
Added development and production JWT key pairs
The configuration directory for JWT authentication now includes dedicated key pairs for both development and production environments. New encrypted private keys and corresponding public keys have been added to the \config/jwt/dev\ and \config/jwt/prod\ directories, enabling distinct signing and verification identities for each environment.
config/jwt · high confidence
Added development debug endpoint
A new DevAction class has been introduced in the src/Action directory, providing a debug route that returns a JSON response confirming the class and method name. This change adds a specific development tool for backend debugging purposes.
src/Action · high confidence
Automated scripts for rebuilding demo database and file assets
Added two new bash scripts to the private demo environment to streamline resetting demo data. The cron-rebuild-database.bash script automates the process of dropping the development database, running migrations, clearing specific tables to avoid fixture conflicts, and reloading fixtures. The cron-rebuild-files.bash script resets uploaded assets by clearing the images, files, and videos directories and repopulating them with static demo data, while also correcting file permissions.
private/demo · high confidence
Centralized module definitions and file-path mapping service
A new ModulesService has been introduced to centralize the list of available modules and their display names, ensuring consistent mapping between backend identifiers and frontend labels. This service also provides a utility to determine the specific module associated with a file upload path by analyzing the directory structure, supporting modules such as Images, Files, and Video.
src/Services/Module · high confidence
Dashboard widget visibility settings API
A new API endpoint has been added to manage which widgets are visible on the system dashboard. Users can now retrieve the current visibility state of all dashboard widgets via a GET request, which includes whether each widget's associated module is locked, and update these preferences via a PATCH request. The system defaults to all widgets being enabled if no specific visibility settings are configured.
src/Action/Modules/System/Settings/Dashboard · high confidence
Enable management of system finances currencies
Users can now create, update, and delete currency settings within the system finances module. This new action endpoint exposes routes to list all configured currencies, add new ones, modify existing entries, and remove non-default currencies, ensuring that a default currency is always maintained.
src/Action/Modules/System/Settings · high confidence
Initial Nginx configuration for Docker container
A new Nginx configuration file has been added to the Docker setup, defining the server to listen on port 80 with HTTP/2 enabled. It configures PHP-FPM proxying to the 'pms-php-fpm' service, sets the document root to '/application/public', and includes performance optimizations such as gzip compression, file descriptor caching, and specific buffer sizes for client requests.
docker/nginx · high confidence
Introduce BaseResponse class for standardized API responses
Added a new BaseResponse class in src/Response/Base that serves as the foundation for all API responses. This class standardizes the response structure by enforcing a consistent JSON format including fields for code, message, success status, and data. It integrates with the application's serializer via the SerializerAwareTrait to ensure consistent serialization across the frontend-backend contract, and includes support for JWT token handling and specific data keys like IDs and lock status.
src/Response/Base · high confidence
Introduce Health module API endpoints for doctors, illnesses, and appointments
This change adds the backend action controllers for the new Health module, exposing REST endpoints to manage doctors, illnesses, and doctor appointments. Users can now create, update, retrieve, and soft-delete doctor records (including contact details), illness records (linked to appointments), and doctor appointments (with date, doctor, and illness associations). The implementation includes a dedicated endpoint to save associated storage files for appointments and ensures that deleting an illness also soft-deletes its linked appointments.
src/Action/Modules/Health · high confidence
Introduce MyIssue entity with contact/progress tracking and dashboard visibility
Added the MyIssue entity and its related MyIssueContact and MyIssueProgress entities to support creating and managing issues. Users can now track issue contacts and progress records, toggle issue visibility on the dashboard via a showOnDashboard flag, and benefit from soft-delete support that cascades to associated contacts and progress entries.
src/Entity/Modules/Issues · high confidence
Introduce PHP 8.3 FPM container with automated initialization and caching
The PHP-FPM service now runs on PHP 8.3 and includes a comprehensive entrypoint script that automates container startup. This script handles Composer dependency installation, database migration execution, and the generation of encryption and JWT keys if they are missing. It also configures file storage directories, starts the cron service, and clears both OPcache and APCu caches to ensure a clean state. The container image is built with extensions for MySQL, GD, and Intl, along with tools like Cachetool for cache management and MariaDB client utilities.
docker/php-fpm · high confidence
Introduce dedicated repositories for module management and resource locking
This change adds two new Doctrine repositories in the System area: ModuleRepository, which provides a method to retrieve modules by name with an option to include inactive entries, and LockedResourceRepository, which handles persistence and querying for locked resources, including optimized SQL statement building for checking lock existence by record, type, and target.
src/Repository/System · high confidence
Introduce health module entities for doctors, illnesses, and appointments
Added new Doctrine entity classes for the Health module: Doctor, Illness, and DoctorAppointment. These entities support soft deletion, allowing records to be retained without being returned in standard queries (e.g., Illness getAppointments filters out deleted appointments by default). The Doctor entity includes a contacts field and a unique constraint on specialization and name, while DoctorAppointment links doctors and illnesses and supports file storage associations.
src/Entity/Modules/Health · high confidence
Introduce structured DTOs for contacts, validation, and notifications
The application now uses dedicated Data Transfer Objects to standardize data handling across the system. A new AbstractDTO base class provides JSON serialization and deserialization capabilities, which are utilized by ContactTypeDto and ContactsTypesDto to manage contact module data. Additionally, ValidationResultDto replaces previous validation logic by explicitly tracking valid/validable states and collecting field-specific error messages, while NotificationDto and DatabaseCredentialsDTO provide structured containers for sending notifications and managing database connection details.
src/DTO · high confidence
Introduce upload configuration data transfer object
Added the UploadConfigurationDTO class to define and validate upload settings, including constraints such as maximum file size, allowed extensions and MIME types, multi-upload support, and the ability to allow file tagging and custom naming.
src/DTO/Internal · high confidence
Introduces response models for file upload operations
Added \UploadConfigurationResponse\ and \UploadResponse\ classes to structure the data returned by file upload features. \UploadConfigurationResponse\ wraps upload configuration details, while \UploadResponse\ exposes the upload status, public and local file paths, and an optional upload ID, enabling the application to properly communicate upload results to clients.
src/Response/UploadedFile · high confidence
Introduction of ModuleAttribute for method locking control
A new ModuleAttribute class has been added to the src/Attribute directory to manage access control for action methods and classes. This attribute allows developers to specify a module name and related modules, enabling the system to check if a given method should be called by ensuring it does not relate to a locked resource. This supports the ability to lock or unlock methods, providing finer-grained control over which actions are available based on the current module state.
src/Attribute · high confidence
JWT tokens now include user profile, rights, and system lock status
The new JwtCreatedListener enriches the authentication token payload with additional user context. When a JWT is generated, it now carries the user's email, username, ID, nickname, and the public path to their profile picture (defaulting to a dummy image if none is uploaded). It also includes the user's specific rights and the current system lock state, allowing the frontend to make immediate decisions about access and UI presentation without extra API calls.
src/Listeners/Bundles · high confidence
New API endpoint for managing travel ideas
A new controller action has been added to handle travel idea management via the \/module/travels/ideas\ route. Users can now create, retrieve, update, and soft-delete travel ideas through dedicated API endpoints (POST for new, GET for all, PATCH for update, DELETE for removal). The implementation enforces validation on required fields such as location, country, image URL, and category, while allowing the map URL to be optional.
src/Action/Modules/Travels · high confidence
New API endpoint to manage module lock settings
A new action controller has been added to expose a dedicated API endpoint for retrieving and updating module lock configurations. Users can now fetch the current lock status of all modules via a GET request and update individual module lock states via a PATCH request. The update operation is restricted in demo environments and when the system is globally locked, ensuring that lock settings cannot be modified under those conditions.
src/Action/Modules/System/Settings/Modules · high confidence
New API endpoints for managing My Todo lists and elements
This change introduces new backend controllers that expose RESTful endpoints for creating, updating, and deleting 'My Todo' items and their associated elements. Users can now manage todo lists via POST, PATCH, and DELETE requests to /module/my-todo, and manage individual todo elements via /module/my-todo-element. The implementation includes logic to automatically mark a todo list as completed when all its elements are done, and allows linking todo items to specific issues or modules.
src/Action/Modules/Todo · high confidence
New API endpoints for managing achievements
The system now exposes a dedicated REST API for achievements under the /module/achievements path. Users can create, retrieve, update, and soft-delete achievements via POST, GET, PATCH, and DELETE requests respectively. The API validates required fields (name and type) and returns structured JSON responses, replacing the previous implementation.
src/Action/Modules/Achievements · high confidence
New API endpoints for managing goals and goal payments
Users can now interact with the Goals module via dedicated API endpoints. The system exposes a list of all goals (mapped to 'my-goals') and provides full CRUD operations for goal payments, including creating, updating, retrieving, and soft-deleting payment records. These endpoints handle the persistence of payment details such as name, monetary goal, collected amount, start/end dates, and dashboard visibility settings.
src/Action/Modules/Goals · high confidence
New API endpoints for managing monthly import profiles and filter rules
This change introduces two new controller actions that expose RESTful endpoints for the monthly payment import settings. The \ImportProfileAction\ allows users to create, read, update, and delete import profiles, which define field mappings for currency, description, money, and date fields. The \ImportFilterRulesAction\ provides similar CRUD operations for filter rules, enabling users to define filtering logic (field name, rule, type) and attach an optional description and an import profile to each rule. These endpoints facilitate the configuration of how monthly payment data is imported and filtered within the system.
src/Action/Modules/Payments/Settings/MonthlyPayment · high confidence
New API endpoints for managing payment bills and bill items
This change introduces new controller actions for the Payments module, enabling users to create, read, update, and delete payment bills and their associated line items via RESTful endpoints. The BillsAction handles bill-level operations (POST /module/payment/bills, GET /all, PATCH /{id}, DELETE /{id}), including validation for required fields like name, dates, and planned amount, and returns bill data with pre-sorted items. The ItemsAction manages individual bill items (POST /module/payment/bills/items, PATCH /{id}, DELETE /{id}), ensuring each item is linked to a valid existing bill. Both controllers use soft deletion (setting a deleted flag) and are registered under the Payments module via the ModuleAttribute.
src/Action/Modules/Payments/Bills · high confidence
New CLI commands for JWT token management and a locked resource response class
This change introduces two new Symfony console commands to aid in JWT authentication workflows: \pms:security:extract-jwt-token-payload\ allows users to inspect the contents of a JWT token by validating it and displaying its payload in a readable table format, while \pms:security:jwt:generate-internal-token\ enables the generation of internal JWT tokens for specific users, with an option to create non-expiring tokens. Additionally, a new \LockedResourceDeniedResponse\ class has been added to provide a standardized access-denied response when a resource is locked.
src/Command/Security, src/Response/Security · high confidence
New CollectionService to preserve array indexing after filtering
A new CollectionService has been added to the Doctrine layer, providing a static filterAndReindex method. This utility ensures that when collections are filtered, the resulting data maintains sequential numeric indexes. This prevents the frontend from incorrectly interpreting the filtered data as an object instead of an array, which would otherwise break UI rendering.
src/Doctrine · high confidence
New Contacts module with CRUD operations and type management
The Contacts module is now available, introducing endpoints to manage contacts and their associated types. Users can create, retrieve, update, and soft-delete contacts via the /module/contacts route, with each contact supporting a name, description, group assignment, and image path. Additionally, a separate /module/contact/types endpoint allows users to add, update, and remove specific contact types linked to a contact, handling the storage of type details, names, and icons within the contact's JSON data structure.
src/Action/Modules/Contacts · high confidence
New ModuleData entity for storing module metadata
A new ModuleData entity has been introduced to store descriptive metadata (such as descriptions and headers) associated with specific modules and records. This entity supports unique identification via record type, module name, and record identifier, enabling the system to maintain structured data like descriptions for upload-based categories and other module-specific entries.
src/Entity/Modules · high confidence
New ModuleData repository for managing module-specific records
A new \ModuleDataRepository\ class has been introduced to handle persistence and retrieval of \ModuleData\ entities. This repository provides specific methods to find module data by record type, module name, and record identifier, as well as standard operations to save entities and fetch them by ID, enabling the application to store and query metadata associated with specific modules.
src/Repository/Modules · high confidence
New My Issues module with CRUD endpoints for issues, contacts, and progress
This change introduces the My Issues module, providing backend API endpoints to manage issues and their associated data. Users can now create, update, and delete issues (including name, description, and dashboard visibility flags) via the MyIssuesAction controller. Additionally, dedicated endpoints allow for the management of issue contacts and progress records through MyIssuesContactAction and MyIssuesProgressAction, enabling the tracking of dates and informational updates linked to specific issues.
src/Action/Modules/Issues · high confidence
New array and text processing utilities in TypeProcessor service
The TypeProcessor service now includes two new helper classes: ArrayHandler and TextHandler. ArrayHandler provides static methods to safely retrieve array keys with optional defaults or exceptions, and to generate cartesian products of input arrays. TextHandler offers utilities to shorten strings with ellipses and convert camelCase or PascalCase identifiers into human-readable titles, which is used for clearer error messaging when required fields are missing.
src/Services/TypeProcessor · high confidence
New backend API for managing calendar schedules and settings
This change introduces new controller actions that enable users to create, update, and delete calendar schedules and manage calendar settings via the backend. The \SchedulesAction\ handles schedule CRUD operations, including the creation of reminders associated with each schedule, while \ManageCalendarsAction\ allows for the management of calendar groups (names and colors) and provides a consolidated view of all schedules for the frontend dashboard.
src/Action/Modules/Calendar · high confidence
New backend endpoints for job afterhours, holidays, and holiday pools
The system now exposes dedicated API endpoints for managing job-related time-off data. Users can create, read, update, and delete afterhours entries (tracking spent and made minutes against goals), holiday days spent records, and company holiday pool settings via new controller actions at /module/job/afterhours, /module/job/holidays/days-spent, and /module/job/settings/holidays/pool. The holidays days-spent endpoint includes server-side validation for create and update operations, while the afterhours and holiday pool endpoints handle basic CRUD operations without additional validation logic.
src/Action/Modules/Job · high confidence
New command to send schedule reminders via Discord webhooks
A new console command, \schedules:send-reminders\, has been added to handle sending notifications for upcoming schedule events. The command retrieves pending reminders from the database and dispatches them through configured notification handlers, specifically supporting delivery via Discord webhooks using the \DiscordService\. Upon successful processing, each reminder is marked as handled in the system to prevent duplicate notifications.
src/Command/Module/Schedules · high confidence
New command to sync storage files to database entities
A new console command, \storage:upload-files-into-entities\, has been added to automatically create database entries for files currently present in storage. When executed, the command iterates through all storage modules, retrieves the file tree, and uses the storage file service to map each file to an entity, handling file paths and extensions correctly. This ensures that the database reflects the actual state of uploaded files, adding new records only if they do not already exist.
src/Command/Module/Storage · high confidence
New cron commands for backups, resource monitoring, and data synchronization
This update introduces several new scheduled tasks in the application. Administrators can now use \cron:make-backup\ to create archives of the database and uploaded files, and \cron:make-config-backup\ to separately back up configuration files and the .env file. A new \cron:check-server-resources\ command monitors disk space and logs an emergency alert if free space falls below a specified threshold. Additionally, \cron:transfer-data-to-pms-io\ synchronizes notes and passwords to the PMS-IO service, while \cron:transfer-schedules-to-notifier-proxy-logger\ sends schedule reminders via email or Discord.
src/Command/Crons · high confidence
New data structure for incoming schedule details
A new \IncomingScheduleDTO\ class has been introduced in the Schedules module to encapsulate incoming schedule data. This data transfer object defines the structure for schedule items, including fields for the schedule ID, reminder ID, title, date, icon, body content, and schedule type, providing a standardized way to handle schedule information within the application.
src/DTO/Modules/Schedules · high confidence
New database entities for schedules, calendars, and reminders
The system now persists schedule data using new Doctrine entities: MySchedule (representing individual calendar events with title, body, timing, and category), MyScheduleCalendar (managing calendar collections with color/icon settings), and MyScheduleReminder (handling per-event reminders with a unique constraint on schedule and date). These entities support soft deletion and establish the data model required for saving, loading, and managing schedules in the database.
src/Entity/Modules/Schedules · high confidence
New database export and Doctrine utility services
Added DatabaseExporter, a new service that performs database dumps via shell commands with safety checks (such as minimum file size validation and unique timestamped file prefixes) and configurable backup directories. Also added DoctrineService, a utility class extending AbstractController that provides a static helper to verify if an object implements EntityInterface.
src/Services/Database · high confidence
New demo data fixtures for users, settings, and file tags
The application now includes new data fixtures that seed the database with initial demo content upon installation or reset. Specifically, \UserFixtures\ creates a default admin user with the email '[e-mail redacted]' and the 'ROLE\_USER' role. \SettingFixtures\ initializes financial settings by inserting default currencies (PLN, EUR, and Cash) into the database. Additionally, \FilesTags\ provides a fixture for populating file-tag associations, and a shared \Fixtures\ class defines a group constant for migrations with demo data.
src/DataFixtures · high confidence
New demo data providers for Modules
The application now includes a set of new data fixture providers in the Modules area to populate the system with realistic demo data. These providers define static content for various modules, including Achievements (categorized by difficulty), Contact details (background colors, groups, and social media types), Goals (payment-related), Issues (with progress and contact logs), Job holidays, and Job after-hours. Additionally, a ModuleData provider establishes a predefined directory structure for Files, Videos, and Images modules, providing users with a pre-configured starting point for these features.
src/DataFixtures/Providers/Modules · high confidence
New entity marker and validation interfaces introduced
This change introduces a set of new PHP interfaces in the \src/Entity/Interfaces\ directory to standardize entity behavior and validation. \EntityInterface\ serves as a marker to identify classes as entities. \SoftDeletableEntityInterface\ defines methods for soft deletion status (\isDeleted\, \setDeleted\). A validation hierarchy is established with \ValidateEntityInterface\ as the base, extended by \ValidateEntityForCreateInterface\ and \ValidateEntityForUpdateInterface\ to distinguish validation logic based on the operation (create vs. update). Additionally, \FileStorageAssociationInterface\ provides a contract for entities to manage associations with \StorageFile\ objects via getter/setter methods.
src/Entity/Interfaces · high confidence
New entity traits for timestamps, file associations, and soft deletion
Three new entity traits have been added to the codebase to standardize common entity behaviors. CreateModifyFieldAwareTrait adds automatic tracking of creation and modification timestamps via Doctrine-mapped datetime columns. FileStorageAssociationTrait provides a mechanism for entities to associate with multiple StorageFile objects, including methods to add, remove, and retrieve files while preventing duplicates. SoftDeleteAwareTrait introduces a boolean 'deleted' flag, enabling soft-delete functionality for entities that include this trait.
src/Entity/Trait · high confidence
New enums for monthly payment import field and rule types
The monthly payment import module now defines explicit enumerations for import field types (date, money, description, currency) and rule matching strategies (regex, exact, partial). This provides a structured, type-safe way to configure how incoming payment data is mapped and filtered during monthly imports.
src/Enum/Modules/Payments · high confidence
New exception logging and serialization traits added
Two new traits have been introduced in the src/Traits directory to standardize cross-cutting concerns. ExceptionLoggerAwareTrait provides a logException method that logs critical exceptions with code, trace, and custom data bags, throwing an exception if the logger is not configured. SerializerAwareTrait introduces private serialize and deserialize methods that leverage Symfony's Serializer component to handle JSON encoding/decoding with circular reference limits, simplifying object-to-JSON and JSON-to-object conversions for classes that use the trait.
src/Traits · high confidence
New external services for Discord notifications and PMS-IO data transfer
The \src/Services/External\ directory now includes three new services: \DiscordService\ sends webhook messages to Discord for reminders; \NotifierProxyLoggerService\ bridges schedule data to the NPL system, adding a '\[PMS Calendar schedule\]' prefix to message titles for both Discord and email notifications; and \PmsIoService\ handles the transfer of passwords, password groups, notes, and note categories to PMS-IO, ensuring fields are encrypted before transmission and checking insertion permissions.
src/Services/External · high confidence
New file archiving service for creating zip backups
A new \Archivizer\ service has been introduced to handle the creation of zip archives for system backups. This feature allows users to package specified directories and individual files into a single \.zip\ archive, with support for recursive directory traversal and configurable target directories. The implementation includes safety checks, such as verifying the existence of source files and ensuring the resulting archive meets a minimum size threshold, to prevent the creation of empty or invalid backup files.
src/Services/Files/Archivizer · high confidence
New file path and storage module services
Added FilesHandler and PathService classes to centralize file path manipulation and storage module directory resolution. FilesHandler provides utilities for normalizing directory paths by trimming leading/trailing slashes and conditionally adding them back, while PathService manages upload directory paths for video, image, and file modules, resolves storage modules based on file paths, and enforces path safety by rejecting directory traversal attempts.
src/Services/Files · high confidence
New file upload service with configuration-driven validation and tagging support
The application now uses a new upload infrastructure in src/Services/Files/Upload that centralizes upload rules via FileUploadConfigurator and enforces them through FileUploadValidator. Users can upload profile pictures (up to 2 MB, single file, no tagging), images, videos, and general files to storage (multi-upload, naming allowed, tagging allowed), and import monthly payments via CSV or XLSX (single file, no naming, tagging allowed). The system validates file size, extensions, and MIME types, checks file integrity after moving, and supports attaching tags to uploaded files stored in the database.
src/Services/Files/Upload · high confidence
New file upload, configuration, and deletion endpoints
The application now exposes a new set of file management capabilities via the UploadedFileAction controller. Users can upload files (including profile pictures) with optional custom names and tags through the /upload/send/ endpoint, retrieve upload configuration details via /upload/get-configuration/{id}, and remove files using /upload/delete/{filePath}. The upload process supports base64-encoded content, handles temporary file storage, and applies file tagging. In demo mode, uploaded files are automatically deleted after processing to prevent persistence. The delete endpoint includes path safety validation to prevent unauthorized file access.
src/Action/File · high confidence
New holiday tracking entities and enhanced after-hours calculations
This change introduces new data models for tracking job-related holidays and settings, specifically adding the MyJobHolidays entity to record days spent and information, and the MyJobSettings entity for key-value configuration. The existing MyCar entity has been repurposed and renamed to MyJobHolidaysPool, now storing pool-specific details like year, days in pool, company name, and a frozen status, while removing previous car-related fields. Additionally, the MyJobAfterhours entity has been updated to support soft deletion and now provides calculated properties for hours and days based on stored minutes, alongside a fix to ensure the date field correctly handles DateTime objects.
src/Entity/Modules/Job · high confidence
New import profile and filter rule entities for monthly payments
Added the \ImportProfile\ and \ImportFilterRule\ entities to the monthly payments module, enabling users to define import configurations. The \ImportProfile\ entity stores mapping details for date, money, description, and currency fields, while the \ImportFilterRule\ entity allows specifying filtering logic with an optional description. A one-to-many relationship links filter rules to their parent import profile, providing the data structure required for configurable monthly payment imports.
src/Entity/Modules/Payments/Monthly · high confidence
New payment report endpoints for historical debts and monthly totals
This change introduces three new API endpoints under the Reports module to expose payment data: a historical view of owed money (GET /module/reports/money-owed/historical/all), a monthly breakdown of total payments (GET /module/reports/payments/total-per-month/all), and a monthly breakdown of payments grouped by type (GET /module/reports/payments/total-per-type/all). The monthly endpoints utilize a charting service to ensure time-series data is continuous (filling missing months) and sorted chronologically, while the historical endpoint returns a flat list of debt records including target, amount, currency, and date.
src/Action/Modules/Reports/Payments · high confidence
New payment settings endpoints for currency, types, and recurring payments
The payment settings module now exposes dedicated API endpoints to manage currency multipliers, payment types, and recurring payment schedules. Users can retrieve and update the global currency multiplier, as well as create, read, update, and delete payment types and recurring payment entries (including day of month, amount, and description) through the new \CurrencyMultiplierAction\, \PaymentTypeAction\, and \RecurringPaymentAction\ controllers.
src/Action/Modules/Payments/Settings · high confidence
New payment tracking capabilities for income, monthly, owed, and product prices
The Payments module now supports tracking four distinct types of financial data through new backend actions: income, monthly payments, money owed, and product prices. Users can now create, read, update, and delete income records and owed entries, manage monthly payments with support for importing data via a dedicated endpoint, and maintain a list of product prices with automatic conversion to the home currency. These changes enable more granular financial tracking within the application.
src/Action/Modules/Payments · high confidence
New private deployment and infrastructure management scripts
Added three new shell scripts to the private directory to streamline local development and deployment workflows. deploy.bash enables one-command synchronization of code to either a Raspberry Pi or a demo server, handling file exclusions and post-deployment container tasks like cache clearing. docker-compose.bash provides a unified interface for managing Docker containers across different architectures (ARM for Pi, AMD64 for demo) via command-line arguments. Additionally, git-diff-last-tag-vs-now.bash generates a formatted summary of changes since the last release tag for quick review.
private · high confidence
New reports repository for payment summaries and historical debt
Added ReportsRepository to provide data for financial reporting, including methods to calculate monthly payment summaries (combining monthly payments and bills), fetch total payments grouped by type, and retrieve historical owed money records.
src/Repository/Modules/Reports · high confidence
New repository layer for schedules, calendars, and reminders
The application now uses dedicated Doctrine repositories to manage schedule data, introducing \MyScheduleCalendarRepository\, \MyScheduleReminderRepository\, and \MyScheduleRepository\. These components provide the backend logic for storing and retrieving schedule details, handling calendar associations, and managing reminder states (including processing and deletion), which supports the dashboard widget and notification features.
src/Repository/Modules/Schedules · high confidence
New request, response, and utility service classes introduced
This change introduces three new service classes in the application's service layer: RequestService, ResponseService, and Utils. RequestService provides a static method to safely parse JSON request bodies, throwing an exception if the content is invalid. ResponseService handles HTTP response formatting, including adding CORS headers to allow frontend communication and determining whether a route should be handled as a standard JSON base response. Utils offers helper methods for array manipulation (getting random elements or non-repeating values) and type conversion (parsing boolean strings and stringified arrays). These services consolidate common logic previously scattered or missing, improving code organization and reusability across the application.
src/Services · high confidence
New response listeners for JWT token refresh and validation
Added three new event subscribers in the response layer: FrontResponseListener, JwtTokenResponseListener, and ResponseValidityListener. FrontResponseListener ensures frontend responses always return a 200 status code and includes CORS headers. JwtTokenResponseListener automatically refreshes JWT tokens in successful API responses and handles token expiration errors. ResponseValidityListener validates that all JSON responses conform to the expected BaseResponse structure, ensuring required fields are present and returning an internal server error if validation fails.
src/Listeners/Response · high confidence
New routing services for URL matching and profiler exclusion
Added UrlMatcherService to handle controller and route matching for URLs, including logic to strip query parameters and suppress warnings for OPTIONS requests. Added UrlService to provide a utility for excluding development and system URIs (such as the Symfony profiler, web debug toolbar, and fragments) from processing.
src/Services/Routing · high confidence
New savings report endpoint
A new SavingsAction controller has been added to handle the /module/reports/savings/all route, providing a savings report that calculates the difference between monthly income and expenses.
src/Action/Modules/Reports · high confidence
New service classes for formatting My Issues and My Todo data
Added MyIssuesService and MyTodoService to handle data preparation for the frontend. MyIssuesService now aggregates issue details, including associated contacts, progress logs, and related todo elements (with access control checks), into a structured array. MyTodoService provides methods to retrieve assignable modules and entries for relation purposes and builds the final data structure for todo items, including their elements and linked module information.
src/Services/Module/Issues · high confidence
New service for managing doctor appointment file associations
A new DoctorService has been added to the Health module to handle the association of storage files with doctor appointments. This service allows users to update file links for multiple appointments in a single operation, ensuring that the correct storage files are linked to specific appointment records within the system.
src/Services/Module/Health · high confidence
New settings endpoints for contact groups and types
Added new API controllers for managing contact groups and contact types within the Contacts module settings. The GroupAction controller exposes endpoints to create, read, update, and soft-delete contact groups, now supporting a color field (defaulting to 'BFDBFE') alongside the name. The TypeAction controller provides similar CRUD operations for contact types, including validation for image paths (supporting both URLs and local file paths) and ensuring that updates to a type's name or image trigger a synchronized update of associated contacts via the settings service.
src/Action/Modules/Contacts/Settings · high confidence
New shell service to expose directory structure as JSON
A new shell service layer has been introduced, featuring a base abstract service for executing external binaries and a concrete \ShellTreeService\ that wraps the \tree\ command. This service reads the file system structure of a specified directory and returns it as a JSON-formatted array (including file sizes, absolute paths, and hidden files), enabling the frontend to visualize the storage directory hierarchy.
src/Services/Shell · high confidence
New storage file entity and polymorphic module association
Added the StorageFile entity to persist file metadata (path, name, module) in a new storage\_file table, and introduced the StorageFile2Module entity to create a polymorphic link between any module entity and a stored file via a new storage\_file\_2\_module table. This enables associating uploaded files with specific module records and retrieving the original filename with extension.
src/Entity/Modules/Storage · high confidence
New storage management endpoints for files and folders
This change introduces new API endpoints under /module/storage/file and /module/storage/folder to handle file and directory operations. Users can now rename, remove, and move files, as well as create, rename, and lock/unlock directories. The endpoints also provide methods to retrieve the full storage tree structure, with locking mechanisms preventing modifications to locked resources.
src/Action/Modules/Storage · high confidence
New structured DTOs for Settings modules (Dashboard, Finances, Lock, Notifications)
The Settings area now uses a set of new Data Transfer Objects to manage configuration data for specific modules. Dashboard settings are handled by SettingsDashboardDto and SettingsWidgetSettingsDto, which store widget visibility preferences. Financial settings use SettingsFinancesDto and SettingsCurrencyDto to manage currency definitions, including name, symbol, default status, and multiplier. Module locking is supported via SettingsModulesDTO and SettingsModuleLockDTO, allowing individual modules to be locked or unlocked. Notification settings are managed through SettingNotificationDto and ConfigDto, supporting configuration items like Discord webhooks and reminder flags. All DTOs provide JSON serialization/deserialization and array conversion methods to facilitate data exchange.
src/DTO/Settings · high confidence
New system entities for resource locking and module management
The application now includes new database entities to support system-level features. The \LockedResource\ entity tracks locked items by type, target, and record, enabling concurrent access control for menu nodes and other resources. Additionally, the \Module\ entity manages application modules, tracking their names and active status, and links to user-specific todo items.
src/Entity/System · high confidence
Notes module: CRUD operations, locking, and category validation
The Notes module now supports full create, read, update, and delete operations for both notes and their categories via new API endpoints. Users can lock and unlock individual notes, with visibility controlled by the locking status. Category management includes support for nested hierarchies (up to 4 levels deep) and enforces validation rules to prevent duplicate child names within the same parent and self-referencing parent IDs.
src/Action/Modules/Notes · high confidence
Support for linking storage files to multiple modules
The Storage module now allows storage files to be associated with various application modules through a new polymorphic relationship. This change introduces a dedicated repository for managing these associations, enabling features such as updating file paths during directory renames, finding files related to specific entities, and correctly unlinking files when they are removed. Users can now attach storage assets to different parts of the application, with the system handling the underlying database joins and raw SQL inserts required to maintain these flexible connections.
src/Repository/Modules/Storage · high confidence
System module now includes search and notification endpoints
The System module now exposes two new API endpoints: a global search at /module/system/search/all that queries storage files (including tag-based matching) and notes, while respecting module lock status to hide results for locked modules, and a notification endpoint at /module/system/notification/all that retrieves schedule-related alerts categorized by severity (info, warn, error, critical) based on days remaining.
src/Action/Modules/System · high confidence
User settings for personal data, profile image, email, and passwords are now functional
Users can now update their personal data (username), change their profile image, modify their email address, and update both their login and lock passwords through the user settings interface. The system validates required fields and email syntax, handles password confirmation matching, and securely hashes new passwords. These actions are blocked in demo environments to prevent unintended modifications.
src/Action/User · high confidence
Removals
Removal of MyCar schedule form types
The form classes MyCarSchedule and MyCarScheduleType, which previously handled the creation and editing of car maintenance schedules and schedule types, have been removed from the application. This eliminates the user-facing capability to manage these specific schedule records through the existing form interface.
src/Form/Modules/Car · high confidence
Removal of Plus Icon Widget Template
The Twig template for the plus icon widget has been removed from the system. This eliminates the specific UI component previously rendered by this file, which displayed a circular plus icon used to trigger modal actions or create new items.
templates/page-elements/components/widgets · high confidence
Removal of Twig-based global message component
The \messages.twig\ template, which previously rendered flash messages (specifically 'danger' level) and initialized Bootstrap notifications via inline JavaScript, has been deleted. This indicates that the system no longer relies on this specific server-side rendered component for displaying global messages, likely shifting message handling to a different mechanism such as client-side scripts or other components.
templates/page-elements/components/messages · high confidence
Removal of bundled Font Awesome assets
The local copy of Font Awesome Free 5.8.2, including its CSS files and license documentation, has been removed from the project. This change eliminates the bundled icon library from the source tree, meaning the application will no longer load these specific static assets directly from the local \src/scss/libs/fontawesome\ directory.
(repo-wide) · high confidence
Removal of custom login form template
The custom login form template for the FOSUserBundle has been removed from the application. This change eliminates the previously maintained custom view for the login page, likely reverting to the default FOSUserBundle login behavior or relying on a different template structure not present in this specific file path.
templates/bundles/FOSUserBundle/Security · high confidence
Removal of legacy Furcan Iconpicker assets
The static library files for the Furcan Iconpicker (specifically \WIP - iconpicker-1.0.0.json\ and \all.js\) have been removed from the public assets. This cleanup eliminates the previous Font Awesome 5.8.2 icon set and associated JavaScript implementation from this location, likely as part of the broader icon picker updates and dialog rewrites mentioned in the commit history.
public/assets\ · high confidence_
Removal of legacy Goals module controllers
The GoalsListController, GoalsPaymentsController, and MyGoalsSettingsController files have been deleted from the application. This removes the backend endpoints and logic previously used to manage the list, payments, and settings for the 'My Goals' module, indicating that this legacy functionality is no longer supported or has been replaced by other components.
src/Controller/Modules/Goals · high confidence
Removal of legacy My Notes controllers
The \MyNotesCategoriesController\ and \MyNotesController\ files have been deleted from the application. This removes the legacy controller logic that previously handled the rendering and submission of the My Notes settings form, as well as the creation, updating, and deletion of notes and categories via the \/my-notes/\*\ routes.
src/Controller/Modules/Notes · high confidence
Removal of legacy My Travels Ideas controller
The \MyTravelsIdeasController\ has been deleted from the application. This change removes the specific controller logic that previously handled the display, creation, update, and removal of travel ideas via the \/my/travels/ideas\ route and its associated AJAX endpoints. Users relying on this specific controller for managing travel ideas will no longer have this backend component available, indicating a shift in how this feature is handled (likely moved to a different controller or architecture as suggested by the commit history).
src/Controller/Modules/Travels · high confidence
Removal of legacy MyJob Afterhours controller
The dedicated controller for the MyJob Afterhours module has been deleted, removing the previous implementation of the afterhours display, update, and removal endpoints. This change eliminates the legacy code path for managing afterhours records within the job module.
src/Controller/Modules/Job · high confidence
Removal of legacy MyPayments form types
The legacy form type classes for the MyPayments module (MyPaymentsMonthlyType, MyPaymentsProductsType, MyPaymentsSettingsCurrencyMultiplierType, and MyPaymentsTypesType) have been removed. This change eliminates the previous form definitions used for managing monthly payments, product payments, currency multipliers, and payment types, indicating a shift in how these specific payment configuration and entry interfaces are handled within the application.
src/Form/Modules/Payments · high confidence
Removal of legacy MyTravelsIdeasType form class
The \MyTravelsIdeasType\ form class, which previously handled travel idea submissions with dynamic category selection via \DatalistType\, has been removed from the application. This deletion eliminates the specific form logic for creating travel ideas, including its integration with the \DatalistLogicOverride\ events and category choice handling.
src/Form/Modules/Travels · high confidence
Removal of legacy Twig extensions
Several custom Twig extensions have been removed from the application, including Calculations, CssClasses, GlobalVariables, RecursiveMenuElements, TemplatesLoader, and Utils. This eliminates previously available template functions such as calculateHomeProductPrice, isCategoryActive, getClassForAchievementType, getMyNotesCategories, and keepMenuOpen, which may impact templates relying on these specific helpers.
src/Twig · high confidence
Removal of legacy Twig template files
The base layout template, blank template, sidebar component, topbar component, and sidebar menu demo examples have been deleted from the templates directory. This removes the underlying structure for the application's main page layout, navigation menus, and AJAX content containers.
templates · high confidence
Removal of legacy Twig templates for My Payments and My Shopping modules
The legacy Twig template files for the My Payments and My Shopping modules have been completely removed. This includes the main view templates for monthly payments, product prices, settings, and shopping plans, as well as the component templates used to render their respective data tables. These files are no longer part of the application's rendering layer.
templates/modules/my-payments · high confidence
Removal of legacy achievements table template
The \table.html.twig\ component for the My Achievements module has been deleted. This removes the previous implementation that rendered achievements in an HTML table with inline styles and specific data attributes, indicating a shift away from this rendering approach in the module's UI.
templates/modules/my-achievements/components · high confidence
Removal of legacy and unused controller classes
The application has removed several controller files that are no longer part of the active codebase. Specifically, \AdminController\, \AppController\, \UtilsController\, and the \MyCar\ module controllers (\MyCarController\ and \MyCarSettingsController\) have been deleted. This cleanup removes the generic admin page router, the main login redirect, the base64 utility endpoint, and the entire 'MyCar' scheduling feature (including its settings and CRUD operations), likely in preparation for or as a result of the module being renamed or replaced by 'MySchedules'.
src/Controller · high confidence
Removal of legacy dashboard and settings templates
The legacy Twig templates for the My Dashboard module, specifically the main dashboard layout (dashboard.html.twig) and the settings placeholder (settings.twig), have been removed from the codebase. This deletion eliminates the previous static rendering structure for dashboard widgets and the associated settings UI component.
templates/modules/my-dashboard · high confidence
Removal of legacy demo page templates
The standalone Twig templates for the demo application's core pages—including the 404 and 500 error screens, dashboard, charts, calendar, chat, email compose, and various data table views—have been deleted. This change removes the static HTML structures for these specific demo routes, indicating a shift away from these standalone template files in the current codebase.
templates/demo-pages · high confidence
Removal of legacy frontend asset bundles
The legacy compiled frontend assets, including the main \app.css\ and \app.js\ bundles, the TinyMCE editor stylesheet, and various icon font files (FontAwesome, Themify, and arrow SVGs), have been removed from the \public/assets\ directory. This cleanup eliminates outdated static files that are no longer part of the current build pipeline.
public/assets · high confidence
Removal of legacy frontend asset scripts
The frontend asset bundle in src/assets/scripts has been significantly reduced by deleting numerous legacy JavaScript modules, including bootstrap-notify, charts, chat, constants, datatable, datepicker, email, fullcalendar, googleMaps, jquery-ui, loading-bar, masonry, my-goals, and the main initializer. This cleanup removes unused or deprecated client-side logic and dependencies from the application's build.
src/assets/scripts · high confidence
Removal of legacy sidebar header and menu templates
The legacy Twig templates for the sidebar header (containing the logo and mobile toggle) and the main menu structure (listing dashboard and various module links like goals, notes, and contacts) have been deleted from the codebase. This indicates that the sidebar's visual structure and navigation logic are now handled by different templates or components elsewhere in the application.
templates/page-elements/components/sidebar · high confidence
Removal of legacy sidebar menu node templates
The sidebar menu templates for Achievements, Goals, Integrations, My Car, My Contacts, My Job, My Passwords, My Payments, My Shopping, My Travels, Notes, and Notes Categories have been deleted. This removes the specific Twig components that previously rendered these sections in the application's sidebar navigation.
templates/page-elements/components/sidebar/menu-nodes · high confidence
Removal of legacy topbar components and Twig templates
The topbar layout has been stripped of its previous modular structure, with the deletion of all component templates (emails, notifications, search, sidebar-hamburger, user) and the parent layout files (left-topbar, right-topbar). This removes the hardcoded email and notification dropdowns, the search toggle, the sidebar hamburger menu, and the user profile/logout dropdown from the topbar, effectively clearing the navigation area of these specific UI elements.
templates/page-elements/components/topbar · high confidence
Removal of recursive sidebar menu template
The Twig template responsible for rendering recursive nested menu items within the sidebar has been removed. This change eliminates the specific logic that iterated through child categories to generate hierarchical links with icons, titles, and active states, effectively removing this component from the sidebar's rendering structure.
templates/page-elements/components/sidebar/components · high confidence
Removal of the Travel Ideas list and form templates
The Twig templates responsible for rendering the 'Ideas for traveling' list and the 'Add idea' form within the My Travels module have been deleted. This removes the UI components that previously displayed travel ideas categorized by type and provided the form interface for users to input new ideas.
templates/modules/my-travels · high confidence
Removal of user settings page template
The Twig template for the user profile settings page (settings.html.twig) has been deleted. This removes the UI component that previously displayed forms for changing the user's avatar, password, and nickname, along with the avatar preview section.
templates/page-elements/user · high confidence
Removed My Goals module Twig templates
The Twig templates for the My Goals module (list, payments, and settings pages) have been deleted. This removes the server-side rendered views for displaying goal lists, payment progress, and goal configuration forms from this location.
templates/modules/my-goals · high confidence
Removed My-Achievements and My-Job Afterhours templates
The Twig templates for the My-Achievements module (index.html.twig) and the My-Job Afterhours section (afterhours.html.twig) have been deleted. This removes the UI components that previously displayed achievement tables, forms, and the breakdown of remaining afterhours per goal, as well as the ability to add or spend afterhours through these specific views.
templates/modules/my-job · high confidence
Removed MyJobAfterhours form type
The MyJobAfterhoursType form class has been removed from the application. This form previously handled the creation and editing of job after-hours entries, including fields for date, description, minutes, goal, and type. Its removal indicates that this specific form interface is no longer supported or has been replaced by a different mechanism.
src/Form/Modules/Job · high confidence
Removed SCSS specification files
Deleted the entire \src/scss/spec\ directory, including all component styles (sidebar, topbar, forms, etc.), settings (colors, breakpoints, fonts), utility helpers (flex, layout, border), and screen-specific styles (chat, email).
src/scss/spec · high confidence
Removed custom form event logic and utility helpers
The \DatalistLogicOverride\ class and the \Utils\ helper class in \src/Form/Events\ have been deleted. This removes the custom logic that previously allowed DataList form fields to accept user-entered values not present in the predefined list, as well as the underlying utility methods used to modify form event data. Users relying on this specific override behavior for data entry flexibility will no longer have it available in these form events.
src/Form/Events · high confidence
Removed legacy Achievement form type class
The \AchievementType\ class, which previously defined the Symfony form structure for creating and editing achievements (including fields for Name, Description, and Type), has been removed from the codebase. This deletion indicates that the form handling logic for achievements is being migrated away from this specific class-based definition, likely as part of a broader refactoring of the form modules.
src/Form/Modules/Achievements · high confidence
Removed legacy AchievementController
The legacy AchievementController has been deleted from the codebase. This removal eliminates the previous implementation of the achievements module's display, update, and remove endpoints, indicating that the functionality has been migrated to a different controller or architectural pattern.
src/Controller/Modules/Achievements · high confidence
Removed legacy Afterhours table template
The \afterhours.table.html.twig\ component, which previously rendered the MyJob Afterhours data table with inline editing and deletion actions, has been removed from the codebase. This change eliminates the specific frontend rendering logic for this table view.
templates/modules/my-job/components · high confidence
Removed legacy Dashboard controller
The legacy DashboardController has been deleted from the application. This removal eliminates the previous implementation that rendered the dashboard view and fetched car schedules, goals, and goal payments directly within the controller class, indicating a shift in how dashboard data is handled or served.
src/Controller/Modules/Dashboard · high confidence
Removed legacy FOSUserBundle layout template
The default layout template for the FOSUserBundle has been deleted. This removes the previous implementation that included a custom loading spinner, inline CSS styles, and specific JavaScript logic for fading out the loader, effectively changing the base structure of the user-facing pages.
templates/bundles/FOSUserBundle · high confidence
Removed legacy My Notes template components
The \categories-settings.table.html.twig\ and \note-edit-modal.html.twig\ files within the My Notes module have been deleted. This removes the previous Twig-based rendering logic for the categories management table and the note editing modal dialog, indicating a shift away from these specific UI implementations.
templates/modules/my-notes/components · high confidence
Removed legacy MyCar template files
The template files for the MyCar module have been deleted, including the main view (my-car.html.twig), the settings page (settings.html.twig), and the associated table components (table.html.twig and schedule-types-settings.table.html.twig). This removes the previous implementation of the car schedule table and type management UI from this location.
templates/modules/my-car · high confidence
Removed legacy MyGoals component templates
The Twig template files for the MyGoals module's component layer have been deleted. This includes the checklist view, the settings tables for goals, payments, and subgoals, the modal dialog structure, and the individual display components for payments and parent tasks. These removals eliminate the previous inline table and modal rendering logic for managing goals and their associated payments.
templates/modules/my-goals/components · high confidence
Removed legacy MyShoppingPlansController
The \MyShoppingPlansController\ class has been deleted from the application. This removes the previous implementation for managing shopping plans, including its routes for displaying, updating, and removing plans, as well as its associated form handling and AJAX response logic.
src/Controller/Modules/Shopping · high confidence
Removed legacy Notes form types
The \MyNotesCategoriesType\ and \MyNotesType\ form classes have been removed from the application. This deletion eliminates the previous form definitions used for creating and editing notes and their associated categories, indicating a shift in how these entities are handled within the Notes module.
src/Form/Modules/Notes, src/Form/User · high confidence
Removed legacy Symfony form types for Goals and Shopping modules
The form type classes for MyGoals, MySubgoals, MyGoalsPayments, and MyShoppingPlans have been removed from the application. This cleanup eliminates the underlying form definitions that previously handled data binding and validation for these specific modules, likely as part of a broader migration or refactoring effort to modernize the form handling logic.
src/Form/Modules/Goals · high confidence
Removed legacy Twig templates for My Contacts and My Passwords modules
The standalone Twig templates for the My Contacts and My Passwords modules (including their settings pages) have been deleted. This removal eliminates the previous server-side rendered views that handled contact/credential lists and group management via standard form submissions, indicating a shift toward the new JavaScript/TypeScript-based UI and AJAX-driven interactions described in the associated commit history.
templates/modules/my-contacts · high confidence
Removed legacy contact form types
The \MyContactsGroupsType\ and \MyContactsType\ form classes in the Contacts module have been removed. These classes previously handled form building for contact groups and individual contacts (including phone, email, and other types) with specific label logic and group selection. Their removal indicates a cleanup of old contacts logic, likely as part of a broader refactoring or migration to a new contact management implementation.
src/Form/Modules/Contacts · high confidence
Removed legacy contacts and groups table templates
The legacy Twig templates for the contacts table (\contacts-table.html.twig\) and groups settings table (\groups-settings.table.html.twig\) have been deleted. These files previously rendered the HTML structure for displaying and editing contact records and group settings, including specific table headers, data attributes for JavaScript interaction, and action icons. Their removal indicates a shift away from this specific rendering implementation, likely as part of the cleanup and renaming from 'contacts2' to 'contacts' mentioned in the commit history.
templates/modules/my-contacts/components · high confidence
Removed legacy controller utility classes
Deleted the \GeneralMessagesController\, \Ajax\, \Application\, \Forms\, and \Repositories\ classes from the \src/Controller/Utils\ directory. These files contained hardcoded message constants, stubbed AJAX endpoints, and a large container-like class holding repository and form instances, which are no longer part of the application structure.
src/Controller/Utils · high confidence
Removed legacy dashboard widget templates
The dashboard widget templates for incoming car schedules, goals payments, and goals progress have been deleted from the templates/modules/my-dashboard/widgets directory. This removal eliminates the UI components that previously displayed lists of upcoming car maintenance schedules, financial goal payment progress, and subgoal completion statuses on the user's dashboard.
templates/modules/my-dashboard/widgets · high confidence
Removed legacy form type classes
The DatalistType and FontawesomepickerType form classes have been removed from the application. These legacy types, which previously extended Symfony's ChoiceType and TextType respectively, are no longer part of the form handling logic.
src/Form/Type · high confidence
Removed legacy password form types
The legacy form types for managing individual passwords and password groups (MyPasswordsType and MyPasswordsGroupsType) have been removed from the application. This cleanup eliminates the previous Symfony form definitions that handled password creation and group association, aligning with the broader removal of legacy todo and password forms.
src/Form/Modules/Passwords · high confidence
Removed legacy password management controllers
The legacy \MyPasswordsController\ and \MyPasswordsGroupsController\ files have been deleted from the application. This removes the previous implementation for managing user passwords and password groups, which previously handled routes for displaying, creating, updating, and removing these records via both standard HTTP requests and AJAX calls.
src/Controller/Modules/Passwords · high confidence
Removed obsolete and legacy Contacts controllers
The MyContactsController, MyContactsGroupsController, and MyContactsSettingsController files have been deleted from the application. This removes the legacy routing and logic for managing individual contacts, contact groups, and the associated settings page, indicating these functionalities have been migrated or replaced by other components in the Contacts module.
src/Controller/Modules/Contacts · high confidence
Architecture
Centralized environment, locking, and security logic in System services
The System service layer now consolidates previously scattered logic into three new classes: EnvReader handles all environment variable access (including parsing database credentials and checking demo/dev modes), LockedResourceService manages resource locking states and module access permissions, and SecurityService provides a dedicated interface for password validation. This refactoring moves these responsibilities out of controllers and utilities into a dedicated service layer, improving code organization and separation of concerns.
src/Services/System · high confidence
Behavioural changes
Added module provider for demo data generation
A new ModuleProvider class has been introduced in the system data fixtures to define the list of supported modules (Issues and Goals) used for populating demo data. This change ensures that the demo data generators include the necessary module entries, addressing a previous omission in the test fixtures.
src/DataFixtures/Providers/System · high confidence
Automated recurring payments and scheduled backups via cron
The system now includes automated cron jobs for recurring payments and data protection. A new 'pms' crontab entry executes the 'cron:set-recurring-payments' command hourly. Additionally, the 'pms-pi' crontab schedules daily tasks: sending schedule reminders at midnight, creating configuration backups at 01:00, performing database backups at 01:15, and executing file backups every third day at 02:00.
docker/php-fpm/crontab · high confidence
Automatic hydration and synchronization of storage file associations
A new Doctrine event subscriber has been introduced to automatically manage the relationship between entities and their associated storage files. This change ensures that when an entity is loaded, its related storage files are fetched and set, and during flush operations, the many-to-many relations are correctly synchronized in the database. This resolves issues where new entities failed to hydrate storage files or where unlinking files did not properly update the association.
src/Listeners/Entity · high confidence
Centralized settings management for dashboard, finances, notifications, and module locks
The application now uses a dedicated service layer in src/Services/Settings to manage system configuration, replacing previous ad-hoc handling. Users can now persist and retrieve settings for dashboard widget visibility, financial currencies (including default currency selection and validation), notification configurations, and module access locks. This change ensures that settings are correctly loaded from and saved to the database, fixes issues where new settings were incorrectly created instead of updating existing ones, and provides a unified mechanism for validating unique values like currency names.
src/Services/Settings · high confidence
Contacts module refactored with soft-delete support and new grouping entities
The Contacts module has been restructured to introduce a new MyContact entity that supports soft deletion and stores contact details as JSON, alongside a new MyContactGroup entity for organizing contacts. The previous MyContactsGroups entity has been renamed to MyContactType, now includes an image path field, and also implements soft-delete capabilities. These changes enable better data integrity, logical deletion of records, and improved organization of contact types and groups within the application.
src/Entity/Modules/Contacts · high confidence
Contacts module repository layer refactored and renamed
The repository layer for the Contacts module has been restructured to align with updated entity naming and Doctrine standards. Old repositories (\MyContactsRepository\, \MyContactsGroupsRepository\) using the legacy \RegistryInterface\ have been removed and replaced with new, strongly-typed repositories (\MyContactRepository\, \MyContactGroupRepository\, \MyContactTypeRepository\) that extend \ServiceEntityRepository\ with \ManagerRegistry\. This change introduces specific data access capabilities, including soft-delete filtering (e.g., \findAllNotDeleted\), UUID-based lookups, and JSON-based contact type searches within \MyContactRepository\, while also adding a \saveEntity\ method to handle entity persistence and reconstruction from form data.
src/Repository/Modules/Contacts · high confidence
Custom JWT authentication logic with URI exclusion support
The security layer now uses a custom \LexitBundleJwtTokenAuthenticator\ to handle JWT validation, which explicitly checks for token validity, expiration, and user existence before granting access, and returns standardized JSON error responses on failure. This authenticator integrates with a new \UriAuthenticator\ class that allows specific URIs (defined in \UrlService::EXCLUDED\_DEV\_AND\_SYSTEM\_URI\_REGEXES\) to bypass authentication entirely, while a \LoginUserChecker\ is introduced to support the Symfony security lifecycle, although it currently performs no additional checks.
src/Security · high confidence
Dashboard now aggregates widget data with visibility and lock-state checks
The dashboard endpoint now fetches and returns data for four specific widgets: Goal Payments, Goal Progress, Issues, and Schedules. This data is only included if the corresponding module is accessible (checked via DashboardService) and the widget is enabled. Additionally, the response includes a lock state for each widget, indicating whether the associated module is locked by system settings, allowing the frontend to display appropriate UI states.
src/Action/Modules/Dashboard · high confidence
Dashboard widgets now respect module access locks
The new DashboardService enforces that dashboard widgets only return data when their underlying module is accessible to the user. By checking the module's lock status via LockedResourceService, the system prevents users from viewing widget content for modules they do not have permission to access, ensuring that visibility settings are properly gated by access rights.
src/Services/Module/Dashboard · high confidence
Database schema migrations for new modules and structural refactors
This update applies a series of database migrations that introduce several new features and restructure existing data models. New capabilities include a Job Holidays module (tracking pools and settings), a unified Scheduling system (replacing the previous car-specific logic with a generic calendar and schedule type structure), and a new Issue tracking module with progress and contact associations. The database schema is also significantly refactored: numerous tables are renamed to singular forms (e.g., \my\_goals\ to \my\_goal\), the Goals and Subgoals tables are migrated into a generic Todo system, and the Owed Payments amount field is changed from integer to float to support precise currency values. Additionally, contact management is overhauled with new groups and types, and recurring payments are adjusted to use a specific day-of-month field instead of a full date.
src/Migrations · high confidence
Docker deployment restructured for Raspberry Pi and new mail service
The project now provides a dedicated \docker-compose-pi.yml\ for Raspberry Pi (ARM) deployments using \linuxserver/mariadb:arm32v7\ and \yobasystems/alpine-nginx:armhf\, while the standard \docker-compose.yml\ updates the database to MariaDB 11.5.2, switches the mail service from Mailcrab to Mailpit, and adjusts container ports. The configuration also introduces an \opencode.json\ file to define AI coding assistant rules and permissions, and removes legacy Heroku deployment files (\Procfile\) and the old Webpack configuration (\webpack.config.js\).
(repo-wide) · high confidence
Extracted business logic for contacts and notes into dedicated services
Moved specific business logic out of controllers into new service classes to improve code organization. For contacts, a new service handles the synchronization of contact type updates, ensuring that when a contact type's name or image path changes, all associated contacts are updated accordingly. For notes, a new service provides methods to check for duplicate category names within a parent category and to retrieve all non-deleted notes categories.
src/Services/Module/Contacts, src/Services/Module/Notes · high confidence
Goals module repository cleanup and dashboard data access
The MyGoalsRepository and MyGoalsSubgoalsRepository classes have been removed, eliminating legacy direct database queries for checking subgoal completion and updating goal status. The MyGoalsPaymentsRepository has been updated to use the modern ManagerRegistry interface and now includes new methods, getGoalsPaymentsForDashboard and getAllNotDeleted, to explicitly fetch payment data for the dashboard and retrieve non-deleted records respectively.
src/Repository/Modules/Goals · high confidence
Introduce PHP 8 AttributeReaderService for route and class attribute inspection
A new AttributeReaderService has been added to handle reading and checking PHP 8 attributes on classes and methods. This service replaces the previous annotation-based approach, allowing the system to inspect specific attributes on route methods (via URI matching) and class definitions. It provides methods to check for the presence of attributes and retrieve them by name, supporting a more modern and native PHP attribute syntax for configuration and metadata.
src/Services/Attribute · high confidence
Introduce new validation service architecture
The validation layer in src/Services/Validation has been restructured with new services to handle different validation scenarios. A new ConstraintValidationService processes Symfony validator violations into a ValidationResultDto, while a new EntityValidatorService manages entity-specific validation by mapping entities to dedicated validators (currently for MyJobHolidays and MyRecurringPaymentMonthly) and supporting create/update actions. Additionally, a new ValidationService provides a static utility for JSON string validation, and an AbstractValidator base class establishes the pattern for module-specific validators.
src/Services/Validation · high confidence
Introduce request-scoped system lock state storage
Added a new \RequestSessionStorage\ class in the storage service layer to manage system lock state during frontend requests. This class provides static properties (\IS\_SYSTEM\_LOCKED\ and \IS\_TOGGLE\_LOCK\_CALL\) to store lock-related data for the current request lifecycle, addressing issues where standard session storage was not functioning correctly with frontend requests.
src/Services/Storage · high confidence
Introduce structured configuration loaders for system and security settings
The application now uses dedicated configuration loader classes to manage specific settings, replacing ad-hoc handling. A new \ConfigLoaderSecurity\ class exposes restricted IP addresses via a \getRestrictedIps\ method, parsing the string-based environment variable into an array. Additionally, a \ConfigLoaderSystem\ class provides access to the system's 'from' email address. These loaders extend a new \AbstractConfigLoader\ base class, establishing a standardized pattern for loading these specific configuration values.
src/Services/ConfigLoaders · high confidence
Introduce system resource locking and secure file access endpoints
The system now supports locking and unlocking resources via a new toggle endpoint that hides locked items from users unless they provide a valid lock password, enhancing data privacy. Additionally, file downloads are now routed through a dedicated action that validates file paths against allowed directories to prevent directory traversal attacks, ensuring that only permitted files are served. A new registration endpoint allows creating the first user account with both login and lock passwords, while JWT token refresh logic is centralized in a listener triggered by a specific security route.
src/Action/System · high confidence
Introduces backend enums for file uploads, storage modules, and user permissions
This change adds several new PHP enums to the backend to support file management and access control features. UploadStatusEnum defines success and error states for file uploads, while UploadedFileSourceEnum categorizes sources such as profile images and storage modules. StorageModuleEnum lists available storage types (videos, images, files), and RelatableModuleEnum maps user-specific contexts like My Issues and My Goals. Additionally, UserModuleRightEnum establishes granular permission flags for accessing various modules, including the new Health module, ensuring these rights are synchronized with the frontend.
src/Enum · high confidence
Migrate User entity to Symfony Security and introduce file tagging and dashboard settings
The User entity has been decoupled from the FOSUserBundle and now implements Symfony's native UserInterface and PasswordAuthenticatedUserInterface, introducing explicit fields for username, email, roles, and a new lockPassword feature for system-wide access control. Additionally, a new FilesTags entity enables tagging files by full path with soft-delete support, while a new Setting entity defines configuration constants for dashboard widget visibility (including lock state) and notification settings.
src/Entity · high confidence
Migrate authentication to JWT and restructure Symfony configuration
The application replaces the FOSUserBundle with LexikJWTAuthenticationBundle for authentication, removing legacy user management and web server bundles while enabling JWT-based login and registration. Configuration is updated for Symfony 5.4, introducing environment-driven settings for restricted IPs, system email, and JWT token lifetime, alongside new service definitions for notifier proxy logging and external IO bridges. Legacy routing and test service configurations are cleaned up, and a development debug route is added for backend testing.
config · high confidence
MyGoalsPayments entity now supports soft deletion and structured frontend data export
The MyGoalsPayments entity has been updated to implement SoftDeletableEntityInterface, enabling cascade soft delete logic for these records. Additionally, the deadline and collectionStartDate fields are now mapped as date types with setters that automatically parse string inputs into DateTime objects, and a new asFrontendData method has been added to provide a standardized array of goal payment details (including start/end dates, goal amount, and collected amount) for dashboard consumption.
src/Entity/Modules/Goals · high confidence
MyTravelsIdeas entity implements soft-delete and standardizes interface methods
The MyTravelsIdeas entity now implements SoftDeletableEntityInterface and EntityInterface, enabling cascade soft-delete logic for travel ideas. Additionally, the getter method for the deleted status has been renamed from getDeleted to isDeleted to align with the new interface contract.
src/Entity/Modules/Travels · high confidence
New JWT-based authentication and module access control
The security service layer has been replaced with a new implementation centered on JWT tokens. JwtAuthenticationService now handles token extraction, validation, and refresh logic, while JwtUserRightsHandler dynamically calculates user permissions based on module lock states, ensuring that access rights (such as for storage, goals, or health modules) are accurately reflected in the token payload. Additionally, PasswordHashingService has been introduced to manage password encoding using Symfony's password hasher, supporting the new registration and authentication flows.
src/Services/Security · high confidence
New exception classes for account status, file uploads, and missing data
Added three new exception classes to the application's exception hierarchy: DeletedUserException extends Symfony's AccountStatusException to handle deleted user scenarios; UploadValidationException extends the base Exception to indicate issues with uploaded files; and MissingDataException includes a configurable 'front' flag to distinguish between frontend and backend error handling contexts.
src/Exception · high confidence
New exception listener for structured error responses
A new ExceptionListener has been added to handle application exceptions by mapping them to specific HTTP responses. NotFoundHttpException and specific MissingDataException cases now return a 400 Bad Request response with the exception message, while other exceptions return a 500 Internal Server Error. Additionally, exceptions containing the message 'Full authentication is required to access this resource.' are excluded from logging to reduce noise.
src/Listeners/Exception · high confidence
New repository layer for MyTodo and MyTodoElement entities
The application now uses dedicated Doctrine repositories (MyTodoRepository and MyTodoElementRepository) to manage todo data, replacing previous direct or legacy access patterns. MyTodoRepository provides specific methods to fetch todos by module name (with optional dashboard filtering), retrieve all todos while respecting soft-delete states, and check if all elements within a specific todo are completed. This change centralizes data access logic for the MyTodo module.
src/Repository/Modules/Todo · high confidence
New repository layer for the MyIssue module
The Issues module now includes dedicated Doctrine repositories for MyIssue, MyIssueContact, and MyIssueProgress, replacing legacy repository calls. MyIssueRepository introduces specific query methods to filter issues by deletion status, resolution state, and dashboard visibility, enabling the system to correctly display pending issues and manage soft-deletable records.
src/Repository/Modules/Issues · high confidence
New structured data providers for shop and product fixtures
Added new fixture provider classes to organize test data into logical groups. The \Shops\ provider defines supermarket and domestic shop names, while the \Products\ namespace now includes \Domestic\ (chemicals, personal care, other), \ExpensiveProducts\ (high-value items with price ranges), and \Food\ (categorized by vegetables, fruits, meat, etc.). These providers replace or supplement previous fixture structures by offering grouped constants and aggregated lists for easier reference in data seeding.
src/DataFixtures/Providers/Business, src/DataFixtures/Providers/Products · high confidence
New validation rules for job holidays and recurring payments
Added dedicated validators for the Job and Payments modules to enforce specific business constraints. The MyJobHolidaysValidator now checks that days spent are greater than zero and do not exceed the available pool for the year, accounting for updates to existing records. The MyRecurringPaymentsValidator ensures that the day of the month for recurring payments falls within the allowed range defined by the entity's minimum and maximum constants.
src/Services/Validation/Validators/Modules/Job, src/Services/Validation/Validators/Modules/Payments · high confidence
Notes and Passwords entities adopt soft-delete pattern and naming conventions
The MyNotes, MyNotesCategories, MyPasswords, and MyPasswordsGroups entities now implement the SoftDeletableEntityInterface, enabling soft deletion capabilities for these records. This change includes renaming the deletion status accessor from getDeleted to isDeleted across all affected classes, updating the MyNotesCategories relationship mapping from 'setting' to 'category', and enforcing stricter parent-child validation to prevent circular references. Additionally, table names are explicitly defined (e.g., my\_note, my\_password) and PHP property naming is standardized to camelCase.
src/Entity/Modules/Notes · high confidence
Notes and Passwords repositories modernized to use Doctrine QueryBuilder and ManagerRegistry
The repository layer for Notes and Passwords modules has been refactored to replace raw SQL queries with Doctrine's QueryBuilder and EntityManager, and to update dependency injection from the deprecated Symfony RegistryInterface to Doctrine's ManagerRegistry. This change improves code maintainability and type safety for users by ensuring that category trees, note searches, and password lookups are handled through the ORM, which also standardizes how soft-deleted records are filtered across these modules.
src/Repository/Modules/Notes · high confidence
Optimize public asset caching and migrate Symfony debug component
The public entry point now uses the updated Symfony ErrorHandler Debug component, replacing the deprecated Debug class to ensure compatibility with newer Symfony versions. Additionally, the .htaccess file has been updated to include HTTP caching headers for static assets (images, scripts, stylesheets) and HTML files, as well as enabling mod\_gzip compression, which improves page load performance for end users.
public · high confidence
Passwords module: new controller actions for managing passwords and groups
The Passwords module now exposes dedicated controller actions to manage password entries and their groups via the API. Users can create, update, and soft-delete individual passwords (including login, URL, description, and group association) and manage password groups (with duplicate name validation). These changes replace legacy controller/repository calls with a structured action-based approach, ensuring that password data is properly persisted and that group names remain unique.
src/Action/Modules/Passwords · high confidence
Payments module entities refactored and expanded with new income, bills, and owed money tracking
The payment tracking entities have been restructured to support a more granular view of personal finances. New entities have been introduced: MyPaymentsIncome for recording income sources, MyPaymentsBills and MyPaymentsBillsItems for managing recurring bill schedules and their individual line items, and MyPaymentsOwed for tracking money owed to or by the user. Existing entities have been standardized by implementing the SoftDeletableEntityInterface and EntityInterface, ensuring consistent soft-delete behavior across the module. The MyRecurringPaymentMonthly entity has been repurposed from a generic contact model to specifically handle recurring payment schedules with validation interfaces, while MyPaymentsSettings now defines specific configuration types for payment and currency handling.
src/Entity/Modules/Payments · high confidence
Payments module repository modernization and income calculation logic
The Payments module repositories have been migrated from the deprecated Symfony Doctrine Registry to the standard Doctrine ManagerRegistry, ensuring compatibility with current framework standards. New repository classes have been introduced for bills, bill items, income, owed amounts, and recurring monthly payments to support the new MyReports and MyPaymentsOwed features. Specifically, the income repository now provides a method to sum income amounts by year and month, which is used to correctly calculate savings based on income inputs. Additionally, the monthly payments repository has been refactored to optimize loading times by grouping payments by year and providing unique dates for income alignment, while legacy controllers and unused repository methods have been removed.
src/Repository/Modules/Payments · high confidence
Refactored Job module repositories and introduced new holiday tracking capabilities
The Job module's data access layer has been significantly restructured. New repositories for MyJobHolidaysPool and MyJobHolidays have been added to support tracking and spending of job-related holidays, including logic to calculate remaining days per calendar year. The existing MyJobAfterhoursRepository was refactored to replace the deprecated Symfony RegistryInterface with Doctrine's ManagerRegistry, and its query logic was simplified to return distinct goal names rather than complex time summaries, while adding new methods for filtering by type and finding entities by ID. Additionally, a new MyJobSettingsRepository was introduced.
src/Repository/Modules/Job · high confidence
Refactored custom exception classes for validation and security
The application's exception handling has been updated by introducing new specific exception classes while removing obsolete ones. A new \ExceptionValueNotAllowed\ class has been added to handle validation errors, specifically distinguishing between numeric values that must be higher than zero and string values that must not be empty. Additionally, a \SecurityException\ class has been introduced to represent security-related errors. The previous \ExceptionRepository\ class, which provided a generic message for missing properties or data in repository AJAX CRUD operations, has been removed.
src/Services/Exceptions · high confidence
Refactored storage file and folder management into dedicated services
The storage logic for handling files and folders has been reorganized into new dedicated services: StorageFileService, StorageFolderService, and StorageService. This change introduces specific capabilities for managing storage entities, including validating and executing file moves and copies, updating database records (such as file tags and module data) when paths change, and ensuring that file removals correctly unlink related entities. It also adds logic to read the storage directory structure and send it to the frontend, while enforcing path safety to prevent manipulation of files outside the designated upload directory.
src/Services/Module/Storage · high confidence
Refactored travel ideas repository with modern Doctrine interfaces and new query methods
The MyTravelsIdeasRepository has been updated to use modern Doctrine interfaces (ManagerRegistry instead of RegistryInterface) and includes new methods for specific data access patterns: findOneById for retrieving a single entity, getAllNotDeleted for fetching active records, and save for persisting changes. The previous getAllCategories method, which used raw SQL to extract distinct categories, has been removed.
src/Repository/Modules/Travels · high confidence
Removal of Font Awesome Picker Twig template
The Twig template for the Font Awesome Picker form type has been removed from the codebase. This change eliminates the server-side rendered HTML structure for the icon selection widget, indicating that the frontend implementation for this component has been migrated to a different rendering approach or removed entirely.
templates/core/form-types/fontawesomepicker · high confidence
Removal of FontAwesome and Themify SVG icon fonts
The static SVG font files for FontAwesome and Themify icon sets have been removed from the application. This change eliminates the legacy icon font assets, which will likely require a corresponding update to the UI to use an alternative icon delivery method (such as CSS classes, inline SVGs, or a different font format) to ensure icons continue to display correctly.
src/assets/static · high confidence
Removal of custom DataList form field template
The custom Twig template for the DataList form type has been removed. This template previously rendered a standard HTML input element paired with a datalist tag to provide autocomplete suggestions based on available choices. Its removal means the form field will now rely on the default rendering behavior provided by the underlying framework or parent templates, potentially changing how the input and its options are displayed or styled.
templates/core/form-types/datalist · high confidence
Removal of custom SCSS overrides for Bootstrap Notifications, FontAwesome, and TinyMCE
The custom styling overrides for Bootstrap notifications, FontAwesome icons, and the TinyMCE editor have been removed from the codebase. Specifically, the z-index adjustment for notification containers, the forced FontAwesome font-family application, and various TinyMCE layout fixes (such as status bar background, padding, and image/link wrapping) are no longer applied via these specific SCSS files. Users will now rely on the default styles provided by these libraries or other global stylesheets, which may result in visual changes to notification positioning, icon rendering, and editor layout within modals.
src/scss/libs/customization-for-liblaries · high confidence
Removal of custom error page templates
The custom Twig templates for HTTP error pages (403, 404, 500, and the generic error page) have been deleted from the application. Users will no longer see the previously styled error screens with specific branding and messaging; instead, the application will fall back to the default error handling provided by the underlying framework or server configuration.
templates/bundles/TwigBundle · high confidence
Removal of default asset entry points
The default JavaScript and CSS entry files (app.js and app.css) have been removed from the assets directory. This eliminates the pre-configured Webpack Encore setup that previously provided a basic layout style and a console log, requiring users to provide their own asset entry points if they wish to use the asset pipeline.
assets · high confidence
Removal of legacy SCSS entry point and bundled CSS
The \src/scss/index.scss\ entry point and the bundled \src/scss/app.css\ file have been deleted. This removes the static aggregation of external libraries (such as MDB, FontAwesome, and TinyMCE skins) and internal UI modules that were previously imported through this single file, indicating a shift away from the monolithic CSS bundle structure in this directory.
src/scss · high confidence
Removal of legacy Twig templates in My Notes module
The My Notes module has removed its legacy Twig template files (category.html.twig, new-note.html.twig, note-details.html.twig, and settings.html.twig). This change eliminates the server-side rendered views for note categories, creation, details, and settings, indicating a shift away from traditional Twig-based rendering for these specific module interfaces.
templates/modules/my-notes · high confidence
Removal of legacy UI styling modules
The UI styling for several specific modules has been removed from the codebase. The SCSS files for Achievements, Buttons, General layout, My Monthly Payments, My Travels Ideas, and Notes have been deleted. This eliminates custom styles for table actions, toggle switches, quick-access circles, scrollbar customization, sidebar logo positioning, accordion heights, travel idea hover effects, and note list layouts, likely as part of a broader interface scaling or component library migration.
src/scss/ui · high confidence
Removal of legacy charting scripts
The JavaScript initialization files for Chart.js, EasyPieChart, and jQuery Sparkline have been removed from the assets directory. This change eliminates the client-side code responsible for rendering line, bar, area, scatter, pie, and sparkline charts on the dashboard, meaning these visualizations will no longer be rendered by these specific scripts.
src/assets/scripts/charts/chartJS, src/assets/scripts/charts/easyPieChart, src/assets/scripts/charts/sparkline · high confidence
Removal of legacy monthly, product, and settings payment controllers
The \MyPaymentsMonthlyController\, \MyPaymentsProductsController\, and \MyPaymentsSettingsController\ files have been deleted from the application. This removes the legacy PHP controller logic that previously handled the rendering, form submission, and data persistence for monthly payments, product payments, and payment settings (including payment types and currency multipliers). Users relying on these specific controller endpoints for managing these payment aspects will no longer have access to this legacy code path, as the functionality is being migrated to repository-based logic.
src/Controller/Modules/Payments · high confidence
Removed legacy Twig table templates for passwords and groups
The \groups-settings.table.html.twig\ and \passwords-table.html.twig\ files have been deleted from the \templates/modules/my-passwords/components\ directory. These templates previously rendered the HTML tables for displaying password entries (including login, password, URL, description, group assignment, and action icons) and group settings. Their removal indicates that the rendering logic for these lists has been migrated to a different implementation, likely a new component or JavaScript-driven approach, as part of the ongoing rewrite and cleanup of the module.
templates/modules/my-passwords/components · high confidence
Renamed Goals module to Todo and introduced soft-delete support
The entity previously located at src/Entity/Modules/Goals has been renamed to src/Entity/Modules/Todo, with MyGoals becoming MyTodo and MyGoalsSubgoals becoming MyTodoElement. This change includes renaming the database table to my\_todo, updating the namespace, and implementing the SoftDeletableEntityInterface to enable soft-deletion behavior. The data model has also been refactored to support a new relationship with MyIssue and a binding to a generic System Module, while removing the previous subgoal hierarchy.
src/Entity/Modules/Todo · high confidence
Renamed MyCar module to MySchedules
The MyCar repository and its associated schedule types repository have been removed, reflecting the renaming of the MyCar module to MySchedules. This change updates the underlying data access layer to align with the new module naming convention.
src/Repository/Modules/Car · high confidence
Repository layer refactored and extended with new query methods
The repository layer has been updated to use the standard Doctrine ManagerRegistry instead of the Symfony-specific RegistryInterface, affecting MyShoppingPlansRepository and UserRepository. New query capabilities have been added: FilesTagsRepository now supports retrieving tags by file path, updating paths when folders are renamed, and filtering tags by directory; SettingRepository can fetch settings by name; UserRepository includes methods to find users by email or active status; and MyShoppingPlansRepository adds a convenience method to find a plan by ID.
src/Repository · high confidence
Updated Symfony routing configuration and added PHP preloading support
The application now uses Symfony's RoutingConfigurator instead of the deprecated RouteCollectionBuilder, simplifying route imports to YAML files in the config directory. Additionally, a new .preload.php file has been added to support PHP 7.4 preloading by conditionally requiring the preloaded container file if it exists, which may improve performance in production environments.
src · high confidence
User profile settings now use the logged-in user instead of a hardcoded ID
The User profile settings controller has been updated to retrieve the user entity based on the currently authenticated user rather than a static, hardcoded ID (previously \const USER\_ID = 1\). This change ensures that the settings page correctly displays and updates the profile for the specific user who is logged in, preventing crashes or incorrect data access that occurred when multiple users existed or when the hardcoded ID did not match the active session.
src/Controller/User · high confidence
Fixes
Added missing system module fixtures for demo data
The demo data generation process now correctly populates the system modules table. A new fixture class has been added to persist all supported module names defined in the module provider, ensuring that the application starts with the expected set of active modules in development and testing environments.
src/DataFixtures/System · high confidence
Fixes missing date gaps in payment chart data
The payment chart now correctly handles time series data where some months are missing from the input sets. Previously, lines could be drawn incorrectly or values assigned to the wrong dates when datasets had different date ranges. This change introduces a data handler that automatically fills in missing months with a default value (zero), ensuring continuous and accurate line rendering across the entire date range.
src/Services/Chart · high confidence
Refactored request handling with dedicated kernel listeners and OPTIONS support
The request processing logic in src/Listeners/Request has been reorganized into specific, prioritized kernel listeners to improve modularity and fix existing issues. A new OptionsRequestListener now intercepts browser-generated OPTIONS preflight requests, returning a 200 OK with CORS headers to prevent method-not-allowed errors. Additionally, three new kernel listeners handle distinct concerns: KernelRequestResourceLock (priority 1) enforces module and related-module access restrictions based on locked resources; KernelRequestIpBlock (priority 2) blocks requests from IPs listed in the security configuration; and KernelRequestLogger (priority 3) records detailed request metadata including URL, method, headers, and body content for auditing purposes.
src/Listeners/Request · high confidence
Dependencies
Major platform upgrade: Symfony 4 to 5.4, PHP 7.2 to 8.3, and dependency overhaul
The project has been significantly upgraded, raising the minimum PHP version from 7.2 to 8.3 and migrating the Symfony framework from version 4 to 5.4. This change includes updating core bundles (such as Framework, Security, Mailer, and Form) to their 5.4 equivalents, replacing deprecated packages like SwiftMailer with Symfony Mailer, and removing obsolete dependencies like FOSUserBundle and WebServerBundle. Additionally, the project name has been updated from 'Symfonator' to 'Personal Management System', and new packages for JWT authentication, image resizing, and custom bridges have been added to support the new architecture.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 48.
Lenses
- Code Health 98
- Architecture 93
- Maturity 54
- Readiness 27
- Security 67
Changes since last survey
- 300 commits — 265 feature/other, 35 fixes
By area
- src/Action — 81 commits
- src/Controller — 56 commits
- src/Services — 37 commits
- src/Form — 17 commits
- (root) — 13 commits
- docker/php-fpm — 13 commits
- src/Entity — 10 commits
- src/Command — 9 commits
- config/packages — 7 commits
- src/Repository — 6 commits
- .github/ISSUE_TEMPLATE — 5 commits
- src/Listeners — 5 commits
- src/DTO — 4 commits
- .opencode/rules — 3 commits
- private/deploy.bash — 3 commits
- src/Enum — 3 commits
- src/Migrations — 3 commits
- translations/legacy — 3 commits
- config/services.yaml — 2 commits
- private/deploy-pi.bash — 2 commits
Notable commits
- fix: :bug: Assign storage function module annotations
- fix: :bug: Contact type never updated
- fix: :bug: Correct paths for deploy script for
- fix: :bug: Crontab file pms-pi doing broken backups
- fix: :bug: Ensure user hasher is bcrypt
- fix: :bug: Files tags not update when moving files
- fix: :bug: Global search not returning all data
- fix: :bug: GoalPayment showOnDashboard was mandatory
- fix: :bug: In query jwt token never worked
- fix: :bug: Inaccessible profiler route
- fix: :bug: Job holidays pool not validated on update
- fix: :bug: Make mailbox work for pi
- fix: :bug: Messed up payments-each-month chart dates
- fix: :bug: Migration for profiles/filters crashing
- fix: :bug: Missing msg on dir removal
- fix: :bug: Monthly payment amount stored as int instead of float
- fix: :bug: MonthlyPayments description trim
- fix: :bug: Private demo script fixes
- fix: :bug: Recurring payments day of month not validated
- fix: :bug: Reminders command not marking reminder as handled
- …and 280 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
Volmarg/personal-management-system was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 19 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit da8d93d957aa248630abda655a8f5b1722d9a350 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-13a154b7f5d1.