Imagineer Technology Group

Global Search Filtering - HTML, CSS, React

Clients requested the ability to filter our search page to only return specific types of results, or results with user-entered tags. I was responsible for implementing the entire user interface for this feature.

The biggest challenge was creating an intuitive design -- I found some of the expected behavior of the initial designs confusing once I started implementing them, so I worked with our product design team to iron out some of the wrinkles. After some back and forth on how best to display the types of results that could be displayed and how to present potentially dozens of available tags to the user, we settled on the final design collaboratively.

I also found the technical challenge of presenting tags interesting. In order to avoid overwhelming the user, we created a separate modal with all tags available to filter on; once some tags have been selected, they appear on the main search page. Moving data from component to component was a fun challenge.

As part of this project, I created nicely styled checkboxes and 3-state checkboxes for checking/unchecking an entire group of checkboxes.

Screenshots

Search filter with kinds only
Results can be filtered by type or by tag. Generally, clients only had between 5-15 available types; some clients had more than a hundred tags. In order to keep the tag section from overwhelming the screen, only tags being used to filter results were shown.
Tag modal view
Both the general filter section and the tag modal feature a 3-state checkbox. Clicking a blank checkbox selects all options. Clicking a checked checkbox or a "-" checkbox deselects all options.
Selected tags are displayed
Selected tags are included in the sidebar so users can see at a glance what they have selected.

Global Search Mobile View - HTML, CSS, React

In addition to filtering on desktop, we implemented mobile-specific filtering and design around the search page.

Instead of a sidebar with filtering options, I implemented an action sheet. This element and the button controlling it are both hidden in desktop view, and only displayed on small screen sizes. I worked with design on how to display tags without needing a modal.

One of the biggest challenges was adjusting the the layout of search results. A teammate and I used CSS Grid to lay out elements of each result, which let us easily adjust how information is displayed in desktop versus mobile views.

Screenshots

Note views on the timeline
On the desktop view, the filter section is to the right of the search results. Tags (the colored lozenges on each result) are displayed on the right side of each result.
Note view with comments
Mobile results have a different structure. Some design elements are adjusted using CSS Grid, while others are only displayed on mobile or on desktop.
Note view without comments
Mobile filtering is a drawer, accessed via the funnel button.

Modal Style Unification - HTML, CSS, React

Before I started on this project, modal implementation was somewhat scattershot -- some modals had headers and some didn't, some modals had buttons at the top and some had buttons at the bottom, and so on. After I implemented the new tag modal design, I went through the app to update all modals to a single unified style.

The biggest challenge here was actually around pulling out existing styles -- our modal had originally been a Foundation modal with some built-in styling. Several of the modals in the app had a lot of brittle styling designed to override the existing modal styles. I removed as much styling as I could from the base modal, adding component-specific CSS as needed.

I also created a new ModalHeader component that put buttons and other functionality into the modal header. This gave us a consistent style and functionality for all our modals, allowing easier maintenance and unified user experience.

Screenshots

Old modals
Old modals had a variety of styles and functionalities.
New modals
Updated modal styles always include buttons in the header and more elegant formatting.
Example modal
The new modal styling matches the overall look and feel of the app.

Entity Mapping Modal - Ruby on Rails, HTML, CSS, React

The application features integrations with 3rd party data; one of the main integrations is with Solovis, an institutional investment management program. Prior to the addition of this feature, mapping entities to Solovis had to be done by a member of the team and could not be done independently by users of the app.

A teammate and I worked together to create the necessary internal API endpoints, update an API client used to communicate with the Solovis API, and implement a mapping modal on the front end. Major challenges included figuring out what information was and was not available in the Solovis API, working out some implementation details around around the user interface, and handling hand-offs of the project between two different people.

One of the meatier technical challenges was around creating a text input that filtered a dropdown list of existing entities in Solovis that were available for mapping. I had to get clever with using tabindex along with mouse down events to group the dropdown with the text box, allowing them to be treated as a single distinct component with unified focus and blur behavior instead of two completely separate elements.

Screenshots

Blank entity mapping modal
Once a mapping has been selected, the disabled text boxes are filled automatically with the relevant information.
Filter list example
Clicking on the search field brings up a full list of all available entities. Typing filters the list.
Mapped entity display
Once an entity has been mapped, that relationship is displayed in the modal.

Standalone Note View - HTML, CSS, React

Clients requested a print-specific view of notes. Prior to this feature, users needed to either screencap notes in the application, which would be inconvenient for longer notes and would include visually distracting design elements; or copy and paste information from the application to a printable document, which would not be formatted correctly and could potentially not have all the information the user needed.

I created a separate section of the application solely for print views, removing unnecessary features of the main app. I only implemented design elements and information necessary to display the note, while also still including useful features, like the ability to follow links to other parts of the app.

I also added functionality to hide the comments associated with a note as needed.

Screenshots

Note views on the timeline
Note views on the main timeline include headers and sidebars and do not print nicely.
Note view with comments
Clicking the pop-out icon takes you to a print view.
Note view without comments
Comments on the print view can be hidden or shown, depending on what the user needs.