nordtheme / web

The official Nord website and documentation
https://www.nordtheme.com
MIT License
97 stars 24 forks source link

Ports Page Sections #119

Closed arcticicestudio closed 5 years ago

arcticicestudio commented 5 years ago

Associated epic: #63 Depends on: #123, #125

This issue documents the implementation of all /ports page sections including required changes to involved components and new dependencies.

Hero

The first section will contain a feature duo container with the pages heading and a summary about Nord's ports. Underneath the static vector graphic that is currently placed in the port section of the landing (/) page will be implemented as interactive animated component. It will use a 3D depth effect for the port project's logos by moving against the direction of the current mouse position where the larger logos will move more to give the impression that they are closer.

Grid Filter

The second section will consist of a input field that allows users to filter available port projects by predefined search terms. Underneath a animated grid of card components will react to the input field by filtering non-matching ports projects. Each card represents one port project and will consist of the logo, the name (with the Nord prefix) as well as a card footer that contains the version of the latest release of the respective project and the number of stars of the GitHub repository.

To prevent UI freezes/frame drops when users typing in the input field while the grid reacts to the change immediately a debounce might be used. It can wait some milliseconds before actually filtering the grid by the given search term. To get the best performance Lodash can be used through gatsby-plugin-lodash which sets up babel-plugin-lodash and lodash-webpack-plugin.

GitHub GraphQL API

To view the metadata about the port project repositories Gatsby's fantastic GraphQL integration will be used through the awesome gatsby-source-graphql plugin. It allows to fire queries that 'll get executed and stitches remote schemas together by adding a type that wraps the remote schema Query type and putting it under field of Gatsby GraphQL Query.

Interactive Animations

To implement components with an interactive animation the awesome react-spring project will be used which allows, like the fantastic and also already used react-pose library, to use spring-physics based animations. The advantage of react-spring is that it bails out of the React renderer to avoid unnecessary renders and instead uses native methods to get the best performance even for complex animations. It comes with first-class support for Hooks, a great and extensive documentation and a lot of examples for inspirations.

Responsive Design

All sections will follow the responsive design concept to adjust the rendered content based on the available width and provide an optimal UX on smaller viewports.

Tasks