Working Name |
Based on existing |
Examples |
Work Package |
Related WP |
|---|---|---|---|---|
Color Picker |
Text Field |
|
||
Fieldset |
Group |
Styled fieldsets on Unprimerized pages |
||
Select Panel |
ActionMenu |
|||
Select Tree Panel |
ActionMenu |
This is a working document to expand on ideas and themes we should explore in our design manifesto and core values. Please note that at this stage, they are in no particular order.
OpenProject is a complex, powerful tool. One of its key strengths its customisability and its ability to adapt to a range of different needs. It offers users a high level of control and advanced features to allow them to tailor the tool to their needs. This includes complex filtering options, custom statuses, custom fields and a range of work package options.
Nevertheless, it is very important for ensure that OpenProject is intuitive for new users who might not necessarily need that complexity, or indeed be overwhelmed by it.
Our design approach to deal with striking the right balance between making something powerful versus making something easy to use is to have a two-tiered approach: apply sane defaults by standard via an intuitive and straightforward view, but allow advanced users the option (accessible via an additional click) to dig deeper and customise should they wish to.
OpenProject is not primarily designed for mobile use or with a mobile-first approach, despite the software adapting fairly well to smaller screens in most cases. The majority of features and views are designed to take advantage of a larger screen and more complex interactions (including keyboard shortcuts).
However, we recognise that certain features are particularly adapted to and are useful in a mobile context. These might include accessing notifications on the go, viewing work package contents. viewing and responding to comments and changing a work package attribute. These features will be given particular attention to make sure they are optimised for mobile use.
We consider project planning, scheduling and organisation to not be priority use cases on mobile.
OpenProject has evolved considerable from the time it forked off ChiliProject and Redmine. As an open source project with a considerably long history and a large number of contributors, it still has parts that could be considered "legacy", or parts that have evolved at different paces. There are also similar components that are implemented somewhat differently in different parts of the software. This is quite normal for a large open-source project.
One of the goals of the design system is to introduce more coherence and bring the design up to date. Ideally, we would be able to update everything at the same time and push the new design system to the entire software; nevertheless, we recognise the need for a more pragmatic approach. The design system will be rolled out in phases, with a careful study of the consequences of updating each component or UI token, and the potential dependencies that will be affected.
We recognise that UI/UX has not always been the highest priority for open-source projects and is often neglected, which is somewhat understandable given how open source projects have relatively fewer resources dedicated to it than commercial products. Our goal is to do our part to improve that situation as much as we can, and document our process in the hope that it might help other open source projects looking to implement their own design system.
Term |
How we use it at OpenProject |
Example |
Example URL |
|---|---|---|---|
Primer ViewComponent |
A subset of components that is provided and maintained by the Primer Design System. Some components exist only as ViewComponents, other only as React components. (cf., Component status) We use these components unchanged from our primer_view_components fork. |
Primer::Beta::Button ![]() |
|
Primer React Component |
Additional components designed and documented in Primer, but (currently) not available for use in OpenProject We will have to rebuild these or evaluate complexity and costs of integrating primer react components |
Primer::Alpha::SelectPanel |
|
OP-Primer ViewComponent |
A reusable component using maintained by OpenProject that extends Primer. It is developed and tested in the primer_view_components fork to get all benefits of the primer test suite (accessibility, performance, visual differences). It is documented in our Lookbook. |
OpPrimer::PageHeader |
|
Reusable OP ViewComponent |
A custom OpenProject ViewComponent that is reusable, either due to temporary being reused or due to functionality binding us to it. It might be related or unrelated to Primer. It is documented in our Lookbook |
Users::AvatarComponent Primer::OpenProject::Forms::Dsl::Autocompleter (rendering CKEditor) |
|
Custom component |
This is a custom OpenProject ViewComponent that is only used by us. (Example: MeetingAgendaItem) It is developed, tested, and documented in our core. |
Meetings::AgendaItem |
|
OP Primer Figma Component |
All components we use in Figma that also include the Primer View Components that are not provided by Github. |
||
Primer Figma Component |
All components provided by GitHub. |
| --------- | --|
| my page | |
| my time tracking | |
| activity ||
| work packages (list) ||
| work package (detail) ||
| gantt charts ||
| team planners (list) ||
| team planner (show) ||
| boards (list) ||
| board (show) ||
| board configuration modal ||
| board filters ||
| meetings (list) ||
| news (list) ||
| news (show) ||
| news (edit) ||
| time and costs (new cost report) ||
| time and cost filters ||
| export xls dialog ||
| export pdf timesheet dialog ||
| my time tracking ||
| activity ||
| work packages (list) ||
| work package (detail) ||
| gantt charts ||
| team planners (list) ||
| team planner (show) ||
| boards (list) ||
| board (show) ||
| board configuration modal ||
| board filters ||
| meetings (list) ||
| news (list) ||
| news (show) ||
| news (edit) ||
| time and costs (new cost report) ||
| time and cost filters ||
| export xls dialog ||
| --------- |
| overview ||
| users and permissions | |
| users (list) ||
| user (edit) ||
| general ||
| projects ||
| groups ||
| global roles ||
| notification settings | |
| email reminders ||
| rate history ||
| avatar ||
| two-factor authenticat|ion |
| work packages ||
| projects ||
| custom fields ||
| attribute help texts ||
| calendars and dates ||
| system settings ||
| emails and notificatio|ns |
| api and webhooks ||
| authentication ||
| announcement ||
| design ||
| colors ||
| enterprise edition ||
| time and costs ||
| backlogs ||
| github integration ||
| documents ||
| files ||
| plugins ||
| backup ||
| information||
A design system is an invaluable tool to any team of designers and developers. It does not have to be a complicated, convoluted system; in fact, at its most basic level, it is simply necessarily documentation at a design level.
Each design component -- a button, a dialogue box, a checkbox, a drop-down list -- has certain properties and variations. These need to be documented and specified somewhere, so that each time it is used:
- the design team can use it in future designs to maintain consistency
- the dev team knows how it should behave, without having to re-define its behaviour each time it is used
- the QA team can verify that the implementation corresponds to specifications
This is crucial to maintain consistency and avoid having multiple implementations of similar elements, which adds both design and development overhead. While the design team has started working on components and defined variations, no design component is properly specified today. Today, the dev and QA team need specifications per work package or per feature, and each new one can potentially include clarifications, modifications and variations.
Today, there is no documentation on how any design component should act or behave, a "single point of truth" that any designer, dev or QA person can look into. There are no ways to define variations over time, and therefore no way to have an existing component evolve over time to cover different needs.
Not having this documentation, this single point of truth, translates to a lot of time spent on communicating between designers and devs, a lot of effort to come to a common understanding and even more time spent in the future when trying to understand design decisions taken in previous discussions. The lack of proper documentation is not only inefficient but expensive and time-consuming.
At its most basic form, this is the problem the design system seeks to solve. It allows a team to work more efficiently across the design and development cycles. Planning, mockups, coding, and QA become cheaper and faster.
As we work on new features and optimisations, which we are already doing, we need to document these changes and behaviours somewhere. The design system, at its most basic form, doesn't have to much more than simply these necessarily specifications and documentation that facilitates communication between the design and dev teams.
In its smallest form for the first iteration, the design system is simply a common base shared between the design and dev teams with work and time that both teams are doing anyway each time a new feature is worked on. It is a necesasry a common base that reduces that effort both teams spend when working on future features and optimisation.