These contribution guidelines are designed to ensure a consistent and maintainable structure for contributions to the KeyFortress and KF_Desktop repositories. Adhering to these guidelines helps maintain the MVVM design pattern, minimizes third-party dependencies, and promotes collaboration across the project.
-
MVVM Design Pattern:
- Follow the MVVM (Model-View-ViewModel) design pattern in both the KeyFortress and KF_Desktop repositories. Keep views and viewmodels separate, focusing on clear responsibilities for each layer.
-
Minimize Third-Party Dependencies:
- Minimize the use of third-party packages. If a package is deemed necessary for your changes, initiate a discussion with the community before adding it. Prioritize packages with open-source licenses.
-
Discuss Major Changes:
- For substantial changes or additions not in the Figma scope, initiate discussions with administrators or core maintainers before starting the implementation.
-
Page Creation:
- When creating new pages, ensure that you follow the structure of both solutions. Create views and viewmodels for the page in the respective folders within the Presentation layer.
-
Component Creation:
- If KF_Components lacks necessary components for your page, create them. Ensure these components are added as a separate pull request in the KF_Components submodule.
-
Router Integration:
- Integrate your new page into the router by creating a route and attaching it to the appropriate button.
-
Business Logic Limitation:
- Do not add business logic beyond the standard Button clicked or field updated functionalities.
-
Figma Scope:
- Limit page creation to those defined in the Figma scope for the current iteration. Discuss any deviations with administrators or core maintainers.
-
Discussion for New Pages:
- Before starting on pages not part of the Figma scope, initiate discussions to ensure alignment with project goals.
-
Service Creation:
- For business logic such as API calls or external interactions, create a service in the KF_Infrastructure submodule.
-
Application Implementation:
- Implement the application inside
KF_Application/Implementations
for the business logic. Ensure the interface is registered in the KF_Shared project within the locator.
- Implement the application inside
- Model/Record/Enum/Exception:
- For any model, record, enum, or exception needed, create it inside the KF_Domain submodule.
-
Fork the Repository:
- Fork the respective repository to your GitHub account.
-
Create a Branch:
- Create a new branch for your contribution with a descriptive and concise name.
-
Make Changes:
- Implement the desired changes following the guidelines mentioned above.
-
Commit Changes:
- Commit your changes with clear and descriptive commit messages.
-
Push to Your Fork:
- Push your changes to your forked repository on GitHub.
-
Submit a Pull Request:
- Open a pull request from your branch to the
main
branch of the original repository.
- Open a pull request from your branch to the
-
Participate in Review:
- Actively participate in the review process, addressing feedback and collaborating with maintainers and contributors.
-
Ensure Proper Documentation:
- Document any new components, services, or interfaces as needed.
By contributing to KeyFortress, you agree to abide by our Code of Conduct to maintain a positive and inclusive community.