diff --git a/.github/styles/config/vocabularies/Mautic/accept.txt b/.github/styles/config/vocabularies/Mautic/accept.txt index 4f67c182..732370c1 100644 --- a/.github/styles/config/vocabularies/Mautic/accept.txt +++ b/.github/styles/config/vocabularies/Mautic/accept.txt @@ -37,6 +37,7 @@ Dripflow Dynamic Web Content Etherpad FALSE +Figma Focus Item Focus Items Froala @@ -88,6 +89,7 @@ OAuth Packagist PATCH patch +Payoneer PHP PHPUnit Pipedrive diff --git a/docs/conf.py b/docs/conf.py index e9eee2ca..3ed92bd1 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -67,5 +67,9 @@ # A little context on the reason for ignoring is greatly appreciated! linkcheck_ignore = [ - # Anchors are picked up as broken - r"https://github.com/abiosoft/colima?tab=readme-ov-file#installation",] \ No newline at end of file + # Anchors are picked up as broken + r"https://docs.mautic.org/policies/financial-policy#10-foreign-assets-control", + r"https://github.com/abiosoft/colima?tab=readme-ov-file#installation", + # The GitHub Search UI requires users to be authenticated with session cookies, which we can't set up programmatically + r"https://github.com/search*", +] diff --git a/docs/contributing/mautic_bounty_programme.rst b/docs/contributing/mautic_bounty_programme.rst new file mode 100644 index 00000000..70c6a3af --- /dev/null +++ b/docs/contributing/mautic_bounty_programme.rst @@ -0,0 +1,71 @@ +Mautic bounty programme +####################### + +What follows is the Mautic project's approach to operating a bounty program for contributions to Mautic Core and officially supported Plugins via relevant GitHub repositories. + +If you have feedback on this policy, please join the next team meeting on Slack in #t-product. Get an invite at :xref:`Mautic Community Slack`. + +About the program +***************** + +The Mautic core team is very small and always looking for new contributors to the Open Source codebase. Mautic's bounty program is an opportunity to address neglected yet important issues and also allows Mautic members to bring attention to issues they care about by providing a financial incentive. Contributors who fix issues with an associated bounty receive financial compensation through invoices on Open Collective, provided that their contribution meets all requirements and a core team member merges their pull request. + +No compromise on quality +======================== + +Mautic requires all contributions to meet high standards. Pull requests are only accepted if they're: + +* Completed to a high standard +* Fully covered by automated tests +* Prepared in a reasonable time frame, including prompt responses to feedback +* Resolving the linked issue in its entirety +* For bug fixes, submit the pull request against the upcoming major release branch - for example, 6.x - with a companion PR against the current minor release branch - for example, 5.1. You must meet all quality criteria, and wait for a maintainer to merge the PRs, for payout eligibility. + +Mautic seeks **quality contributions only**. For general pull request guidelines, see the :xref:`Mautic-pr-requirements`. + +A contribution is only approved for payment after a maintainers has merged all related pull requests. + +Developers should only request to work on tasks and projects that they're confident of completing in their entirety, seen through to completion, and which they're capable of working on at their current knowledge and skill level. + +Mautic's Product Team is happy to answer questions and provide some limited support, but don't have the capacity to mentor junior developers working on bounty issues - it's expected developers work on the task **without requiring direct support from the team**. + +Workflow for bounty program contributors +**************************************** + +1. Verify that you can receive payments from Open Collective and create an account on :xref:`Open Collective`. +2. Look for issues with attached bounties: browse :xref:`bounty issues`. +3. Express interest by commenting on the issue and asking the Core Team to assign it to you. +4. Open a Pull Request **within 7 days** of assignment and request feedback and review. +5. Address feedback from the Core Team, if applicable, **within 7 days** of receiving it. +6. Wait for the core team to review the PR, approve it, and merge it. +7. Submit an invoice on Open Collective with links to the issue and PRs. +8. The Mautic Legal & Finance team reviews and approves payment requests where appropriate. +9. Receive payment from Open Collective - processed twice a week on Tuesdays and Thursdays. + + If you live in certain countries, you may need to use a workaround like Payoneer. Review :xref:`Open Collective Payout Method` for more information. + +Important notes +*************** +* Some regions may not be eligible for Open Collective payments due to payment provider restrictions or trade limitations. Review the :xref:`Mautic Financial Policy` for details. +* Contributors are responsible for any tax obligations from program earnings. Open Collective may require :xref:`relevant tax forms` for withdrawals exceeding $600 per year. +* Discuss your participation with your employer to ensure that it complies with your employment terms. + +Workflow for bounty providers +***************************** + +If you wish to sponsor a bounty for a specific issue, follow these steps. + +.. note:: + + Providing a bounty doesn't guarantee issue resolution, Core Team acceptance, prioritization, or a specific release date. + +The Core Team or any Mautic member may contribute funds to the :xref:`Bounties Project` on Open Collective for a specific issue. Here's how: + +1. Log in on Open Collective. +2. Navigate to the :xref:`Bounties Project`, then scroll to the Donation button. +3. Enter your donation amount, and select the appropriate :xref:`Organization` on the next screen if you want an organization to pay and/or display as the funding source. Otherwise it's associated to your individual profile. +4. Provide the necessary payment details and complete payment. +5. Comment on the issue with a link to the transaction and the amount added. A Triage Team member can update the issue title with the bounty amount and add the Bounty label. +6. Wait for a developer to work on the issue, or search for one. +7. When a pull request is available, test it thoroughly and provide an approval review on GitHub; this is **mandatory** for the Core Team to consider it for merging. +8. After merging the pull request and any companion pull requests, the contributor submits an invoice on Open Collective. The Core Team's Legal & Finance representative reviews and approves it for payment. \ No newline at end of file diff --git a/docs/index.rst b/docs/index.rst index 08486bb6..b81296d8 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -29,7 +29,15 @@ The vision is that it grows over time as the teams and governance structure evol :hidden: teams/legal_and_finance_team + teams/product_team/product_team_overview teams/education_team/education_team + +.. toctree:: + :maxdepth: 2 + :caption: Policies + :hidden: + + policies/request_for_proposals_(RFP)_process .. toctree:: :maxdepth: 2 @@ -37,6 +45,7 @@ The vision is that it grows over time as the teams and governance structure evol :hidden: contributing/google_summer_of_code + contributing/mautic_bounty_programme contributing/contributing_docs_rst .. toctree:: @@ -59,4 +68,4 @@ The vision is that it grows over time as the teams and governance structure evol community_leadership/community_leadership_overview community_leadership/current_leadership_team community_leadership/leadership_role_definitions - community_leadership/community_council \ No newline at end of file + community_leadership/community_council diff --git a/docs/links/Mautic_pull_request_requirements.py b/docs/links/Mautic_pull_request_requirements.py new file mode 100644 index 00000000..90177c38 --- /dev/null +++ b/docs/links/Mautic_pull_request_requirements.py @@ -0,0 +1,7 @@ +from . import link + +link_name = "Mautic-pr-requirements" +link_text = "Mautic-pr-requirements" +link_url = "https://contribute.mautic.org/contributing-to-mautic/developer/code/pull-requests" + +link.xref_links.update({link_name: (link_text, link_url)}) \ No newline at end of file diff --git a/docs/links/bounty_issues.py b/docs/links/bounty_issues.py new file mode 100644 index 00000000..97914ed5 --- /dev/null +++ b/docs/links/bounty_issues.py @@ -0,0 +1,7 @@ +from . import link + +link_name = "bounty issues" +link_text = "bounty issues" +link_url = "https://github.com/search?q=label%3Abounty+owner%3Amautic&type=issues&state=open" + +link.xref_links.update({link_name: (link_text, link_url)}) \ No newline at end of file diff --git a/docs/links/bounty_project.py b/docs/links/bounty_project.py new file mode 100644 index 00000000..b23f65d2 --- /dev/null +++ b/docs/links/bounty_project.py @@ -0,0 +1,7 @@ +from . import link + +link_name = "Bounties Project" +link_text = "Bounties Project" +link_url = "https://opencollective.com/mautic/projects/bounties" + +link.xref_links.update({link_name: (link_text, link_url)}) \ No newline at end of file diff --git a/docs/links/idea_forum.py b/docs/links/idea_forum.py new file mode 100644 index 00000000..18794ff0 --- /dev/null +++ b/docs/links/idea_forum.py @@ -0,0 +1,7 @@ +from . import link + +link_name = "Ideas and Feature Requests" +link_text = "Ideas and Feature Requests" +link_url = "https://forum.mautic.org/c/ideas" + +link.xref_links.update({link_name: (link_text, link_url)}) \ No newline at end of file diff --git a/docs/links/mautic_community_partners.py b/docs/links/mautic_community_partners.py new file mode 100644 index 00000000..1e5bb6b6 --- /dev/null +++ b/docs/links/mautic_community_partners.py @@ -0,0 +1,7 @@ +from . import link + +link_name = "Mautic Community Partners" +link_text = "Mautic Community Partners" +link_url = "https://mautic.org/mautic-community-partners" + +link.xref_links.update({link_name: (link_text, link_url)}) \ No newline at end of file diff --git a/docs/links/mautic_community_portal_roadmap.py b/docs/links/mautic_community_portal_roadmap.py new file mode 100644 index 00000000..ba69c0e6 --- /dev/null +++ b/docs/links/mautic_community_portal_roadmap.py @@ -0,0 +1,7 @@ +from . import link + +link_name = "Mautic community portal roadmap process" +link_text = "Community Portal roadmap process" +link_url = "https://community.mautic.org/processes/roadmap/f/4/" + +link.xref_links.update({link_name: (link_text, link_url)}) diff --git a/docs/links/mautic_financial_policy.py b/docs/links/mautic_financial_policy.py new file mode 100644 index 00000000..baeb9e85 --- /dev/null +++ b/docs/links/mautic_financial_policy.py @@ -0,0 +1,7 @@ +from . import link + +link_name = "Mautic Financial Policy" +link_text = "Mautic Financial Policy" +link_url = "https://docs.mautic.org/policies/financial-policy#10-foreign-assets-control" + +link.xref_links.update({link_name: (link_text, link_url)}) \ No newline at end of file diff --git a/docs/links/mautic-google-drive.py b/docs/links/mautic_google_drive.py similarity index 100% rename from docs/links/mautic-google-drive.py rename to docs/links/mautic_google_drive.py diff --git a/docs/links/mautic_mail.py b/docs/links/mautic_mail.py new file mode 100644 index 00000000..aa5fdfb5 --- /dev/null +++ b/docs/links/mautic_mail.py @@ -0,0 +1,7 @@ +from . import link + +link_name = "Mautic Mail" +link_text = "Mautic Mail" +link_url = "mailto:security@mautic.org" + +link.xref_links.update({link_name: (link_text, link_url)}) \ No newline at end of file diff --git a/docs/links/mautic-meeting-parser.py b/docs/links/mautic_meeting_parser.py similarity index 100% rename from docs/links/mautic-meeting-parser.py rename to docs/links/mautic_meeting_parser.py diff --git a/docs/links/mautic_product_team_slack.py b/docs/links/mautic_product_team_slack.py new file mode 100644 index 00000000..591bcdd5 --- /dev/null +++ b/docs/links/mautic_product_team_slack.py @@ -0,0 +1,7 @@ +from . import link + +link_name = "Mautic product team Slack" +link_text = "#t-product on Slack" +link_url = "https://mautic.slack.com/archives/CQMKV0RU1" + +link.xref_links.update({link_name: (link_text, link_url)}) diff --git a/docs/links/obs_model.py b/docs/links/obs_model.py new file mode 100644 index 00000000..4a62d516 --- /dev/null +++ b/docs/links/obs_model.py @@ -0,0 +1,7 @@ +from . import link + +link_name = "OBS open-source project's model" +link_text = "OBS open-source project's model" +link_url = "https://github.com/obsproject/obs-studio/wiki/OBS-Project-Bounty-Program" + +link.xref_links.update({link_name: (link_text, link_url)}) \ No newline at end of file diff --git a/docs/links/open_collective.py b/docs/links/open_collective.py new file mode 100644 index 00000000..478eab62 --- /dev/null +++ b/docs/links/open_collective.py @@ -0,0 +1,7 @@ +from . import link + +link_name = "Open Collective" +link_text = "Open Collective" +link_url = "https://opencollective.com" + +link.xref_links.update({link_name: (link_text, link_url)}) \ No newline at end of file diff --git a/docs/links/open_collective_organization.py b/docs/links/open_collective_organization.py new file mode 100644 index 00000000..820a6d7c --- /dev/null +++ b/docs/links/open_collective_organization.py @@ -0,0 +1,7 @@ +from . import link + +link_name = "Organization" +link_text = "Organization" +link_url = "https://docs.opencollective.com/help/financial-contributors/organizations" + +link.xref_links.update({link_name: (link_text, link_url)}) \ No newline at end of file diff --git a/docs/links/open_collective_payment_mtd.py b/docs/links/open_collective_payment_mtd.py new file mode 100644 index 00000000..499c6712 --- /dev/null +++ b/docs/links/open_collective_payment_mtd.py @@ -0,0 +1,7 @@ +from . import link + +link_name = "Open Collective Payout Method" +link_text = "Open Collective Payout Method" +link_url = "https://opencollective.com" + +link.xref_links.update({link_name: (link_text, link_url)}) \ No newline at end of file diff --git a/docs/links/relevant_tax_forms.py b/docs/links/relevant_tax_forms.py new file mode 100644 index 00000000..8c6d758a --- /dev/null +++ b/docs/links/relevant_tax_forms.py @@ -0,0 +1,7 @@ +from . import link + +link_name = "relevant tax forms" +link_text = "relevant tax forms" +link_url = "https://docs.opencollective.com/help/expenses-and-getting-paid/tax-information" + +link.xref_links.update({link_name: (link_text, link_url)}) \ No newline at end of file diff --git a/docs/links/suicide-prevention-lifeline.py b/docs/links/suicide_prevention_lifeline.py similarity index 74% rename from docs/links/suicide-prevention-lifeline.py rename to docs/links/suicide_prevention_lifeline.py index daa28521..0c4dc1c9 100644 --- a/docs/links/suicide-prevention-lifeline.py +++ b/docs/links/suicide_prevention_lifeline.py @@ -2,6 +2,6 @@ link_name = "Suicide Prevention Lifeline" link_text = "Suicide Prevention Lifeline" -link_url = "http://www.suicidepreventionlifeline.org/" +link_url = "https://988lifeline.org/" link.xref_links.update({link_name: (link_text, link_url)}) \ No newline at end of file diff --git a/docs/policies/request_for_proposals_(RFP)_process.rst b/docs/policies/request_for_proposals_(RFP)_process.rst new file mode 100644 index 00000000..8a1f03a7 --- /dev/null +++ b/docs/policies/request_for_proposals_(RFP)_process.rst @@ -0,0 +1,122 @@ +Request for Proposals (RFP) process +#################################### + +Background +********** +In 2020, Mautic launched several Strategic Initiatives announced at Mautic Conference Global. Over the past two years, there have also been numerous community-generated ideas for new features. Some of these ideas require funding and are at various stages of development. + +Through experience, Mautic has learned the importance of a well-defined Request for Proposals - RFP - process to manage projects that introduce new features or address major bug fixes in Mautic. This approach takes inspiration from the :xref:`OBS open-source project's model`. + +Why does Mautic need an RFP process? +************************************ +This process aims to establish an open and transparent workflow for large community-driven projects, whether they focus on new features or significant issue resolutions in Mautic. It provides a clear lifecycle from the initial idea through to release, allowing those who use Mautic to see how features and larger projects get proposed, worked on, and completed. + +Additionally, the RFP process helps Mautic better manage compensation for contributors working on these larger projects and provides a means for the community to financially support projects they value. + +Workflow +******** +The following steps outline the RFP workflow for new projects in Mautic: + +1. A project idea thread begins in the Mautic Community Forums under the :xref:`Ideas and Feature Requests` section for community discussion. +2. The Product Team reviews requested features with the Project Lead quarterly and determines which are candidates for consideration on the roadmap. Note that bugs - such as an Integration needing upgrading or something else requiring considerable work - as well as features can also start life as an RFP. +3. The Product Team considers the feedback from the community, and where there's clear interest in moving forward with an idea, collaborates with the original proposer to prepare a detailed proposal, including budget estimates from the Product Team and any necessary community fundraising. The Project Lead reviews this. +4. If the proposal impacts any areas covered by Tiger Teams, the Tiger Teams are key stakeholders throughout the process of the RFP and must sign off before release. +5. Where the Product Team and proposer create the proposal, it's uploaded to the :xref:`Mautic community portal roadmap process` for wider discussion and debate. The proposer tags the key stakeholders in the proposal to ensure they're aware of the proposal, and they must formally endorse it prior to acceptance. +6. If the budget exceeds what the Product Team can provide, the Proposal Status 'Funding required' applies until such a time as the required funds become available. Mautic can create an Open Collective project to raise the necessary funds. +7. When reaching the funding target, the proposal Status moves to 'ready for development'. +8. Where the proposer is a developer, they commence work. Where a developer isn't yet identified, Mautic creates a post in the Commercial forum category and Jobs channel on Slack advertising the project opportunity. The proposer can also source their own developers to work on the project. +9. The Mautic Core Team works with interested developers within the Community Portal to clarify and refine their proposals for implementing the feature. +10. A developer is selected. They become responsible for the proposal work to implement the feature according to their proposal. +11. Proposal status changed to In Progress +12. Pull requests submitted by the developers to implement the proposal. +13. Proposal status changed to Under Review +14. Pull requests reviewed by the Core Team, and the pull request developers make any changes to the pull requests accordingly. +15. Pull requests merged into the appropriate branch. +16. Developers submit an invoice to the Mautic Project Open Collective project for the amount associated with the RFP, which the Project Lead reviews and approves for payment. +17. Proposal status changed to Completed +18. Payment disbursed to developers by the Open Source Collective from Mautic Project collective funds. + +.. note:: + :xref:`Mautic Community Partners` may propose up to three features per calendar year for consideration as an RFP without going through community voting. These features still require approval by the Product Team and Project Lead. + +How to claim a project +*********************** +To ensure multiple contributors aren't competing on the same project, and to streamline the merging process, follow these steps: + +1. Read the Proposal document completely. +2. If you want to move forward, submit a pitch via the comments on the proposal to the Product Team on your suggested implementation. Be sure to include as many details as requested by the spec, and be sure to address each of the completion criteria. For proposals that include UI changes, mock-ups are strongly encouraged - we use Figma but whatever tool you use, please ensure that it has the ability for everyone to collaborate and provide feedback. +3. Be sure to consult the :ref:`Tips for writing a good pitch` for advice on how to write a good pitch. +4. Work with the Product Team to finalize plans for the best implementation. The Core Team judges pitches on their maintainability, design quality, and adherence to spec. Note that other developers may submit competing pitches at this time. +5. If the Core Team accepts your pitch, you may begin code implementation that adheres to your proposal and following the Mautic contributing guidelines. +6. Submit code as a draft PR in the appropriate Mautic repositories so that the Core Team can track progress. +7. Once code is complete, remove draft status and notify the Core Team - use ``@mautic/core-team`` to ping them. +8. Update code with feedback from the Core Team as needed. +9. Write the documentation required - this might include developer and/or end-user documentation. +10. Wait for the maintainers to merge your code into the appropriate branch. +11. Submit an expense to Open Collective for the amount of the project. + +.. vale off + +Collaboration with the Mautic Product Team +****************************************** + +.. vale on + +Collaborating with the Product and Core Teams is essential for successful code integration into Mautic. During the proposal process, address any questions early on. During development, use the pull request comment feature for feedback. For additional communication, the #dev channel in :xref:`Mautic Community Slack` is available, though it's encouraged to keeping discussions on the RFP and PRs for transparency. + +Deadlines +********* +If no code commits or interactions happen over two weeks in an accepted project, the Core Team may reassign the RFP to another developer. If the task remains in the Accepting Proposals state, and the team can demonstrate work on the feature, they can reclaim the task. Notify the Product Team if you wish to withdraw from a granted project, allowing it to be reset to "Accepting Proposals." + +Funding evaluation +****************** +The Mautic team uses a basic rubric to determine RFP pricing, Generally speaking, the team evaluates requests for proposals based on two main criteria: + +* How complex is the project? + * How long is it expected that it may take to complete? + * How much specialized knowledge is it expected that the developer requires to implement? +* How high a demand is there for this project? + * How many people is it going to impact? + * How frequently do people ask about this feature or bug? + * How urgently does this need implementing? + +In general, issues that are higher in complexity and higher in demand attract greater value. + +The Product Team has a fixed allocation each year to use for funding these projects, which is directly related to the amount of funds available in the budget. In the event that a project requires more funds than the Product Team has available, a project on Open Collective can help to raise the required amount. + +.. vale off + +What about Strategic Initiatives? +********************************* + +.. vale on + +Strategic Initiatives follow the same proposal process but they're separately funded. Proposed by the Project Lead, they don't undergo community voting. + +As Strategic Initiatives are larger projects, they may consist of smaller projects. The RFP should clarify how each project fits into the larger initiative. + +How do Mautic budget for funding requests for proposals? +******************************************************** + +Starting in 2022, the Council may allocate a portion of the budget to the Product Team to fund the RFP process. These funds exist in a separate project on Mautic Open Collective, allowing targeted donations. + +If an RFP or Strategic Initiative requires additional funds, a dedicated fundraising project or seeking grant funding may help. Strategic Initiatives continue to have a separate budget and may have their own Open Collective project. + +Tips for writing a good pitch +***************************** + +The Mautic Community is now soliciting proposals for a number of features and bugs that need work. A 'Request For Proposals' system as detailed previously is in use, whereby each proposal acts as a specification, and requests that potential developers submit a pitch for how they would approach the design and development of the specified feature or bug. + +It's intended that this proposal be a guide for would-be contributors to the project who wish to submit a pitch to ensure their pitch has sufficient detail for consideration. + +Tips +==== +* Be sure your proposal addressed all requirements in the 'Request For Proposal' section of the RFP. +* If your proposal includes changes to the UI, include mock-ups where possible. These don't need to be fancy, but should at least communicate the concept behind what you intend to change so that the UX/UI Tiger Team can provide input and direction. +* If your proposal requires the use of a new library, please include a discussion of why you chose the given library, and why you didn't go with alternatives. Ideally this should happen as a debate on the Community Portal. +* Implementation details should err on the side of specificity. Details on any new planned API endpoints, data structures, and architectural considerations can be helpful. +* Time estimates help the Product Team to plan releases, and while it's understood that commitment level can vary given open source work is largely done during people's free time, you must provide a rough estimate of when the work should be ready for testing. + +Credits +******* +This process is heavily inspired by the :xref:`OBS open-source project's model`, which uses a similar workflow for its bounty program. \ No newline at end of file diff --git a/docs/teams/product_team/product_team_overview.rst b/docs/teams/product_team/product_team_overview.rst new file mode 100644 index 00000000..d9804da9 --- /dev/null +++ b/docs/teams/product_team/product_team_overview.rst @@ -0,0 +1,74 @@ +Product Team +############ + +.. vale off + +Missions and expectations for the Product Team +********************************************** + +.. vale on + +Manage all aspects of the product release cycle and roadmap for the Mautic Open Source project. + +Managing Mautic's security +-------------------------- + +* Manage the :xref:`Mautic Mail` inbox. +* Monitor dependency updates for potential security issues. +* Address security issues via pull requests on the private security repository. +* Release security patches or coordinate with the Release Working Group for security fixes. +* Maintain a historical list of security advisories. + +.. vale off + +Managing Mautic's releases +-------------------------- + +.. vale on + +* Oversee the release timeline once confirmed including defining the testing period, locking assigned pull requests, merging, packaging, and conducting pre-release and release activities. +* Test pull requests and review code included in the release. +* Establish criteria for testing, quality assurance, and ensure all code adheres to coding standards. + +Coding +------ + +* Develop features requested by the Roadmap and Features Definition Working Group. +* Review pending pull requests. +* Resolve reported issues. + +Features definitions +-------------------- + +* Benchmark competitors. +* Stay informed on market trends. +* Define user stories for new features. + +Roadmap design +-------------- + +* Technical Roadmap - Security and Patches: + * Prioritize bug fixes and issues. + * Establish a patch release schedule. + +* Feature Roadmap - Minor & Major Versions: + * Prioritize feature development in coordination with the Feature Definition Working Group. + * Define release cadence and long-term support (LTS) versions. + +.. vale off + +Profiles of contributors needed in the Product Team +*************************************************** + +.. vale on + +The product team needs individuals with the following skills and expertise: + +* Developers/Engineers +* Marketers - for features definition +* Mautic users - for testing within the Releases Working Group +* Project Coordinators - to support Releases Working Groups + +**Interested in joining this team?** + +Connect with the Product Team on Slack at :xref:`Mautic product team Slack`.