In my first three years at Genius, I introduced lots of software, templates, and guides to improve the design, handoff, and implementation processes.
I introduced Sketch and Origami, and created a library of components, plugins, and data files to make rote tasks easier. This transformed mockups at Genius from rough illustrator files with lots of cropped screenshots and duplication, to high fidelity mockups and prototypes that take less time to make.
Using Sketch templates and a library of symbols decreased project startup time, gave us more fine-grained control over every element, improved each mockup’s consistency with the real product, and made it easy to hand off a project to another designer.
As the engineering and mobile teams grew, the design team was less and less likely to implement its designs. I introduced Zeplin and Origami to improve the way we communicated our design choices to other teams.
Origami allowed us to spend more time in the design phase figuring out how things should behave, and gave us a great preview tool on iOS so interactive prototypes could be passed around at meetings, before implementation ever began.
A few months after I started, we released a new brand and design. Behind the scenes, we also overhauled the song page front-end with Angular and a new approach to CSS.
I introduced a variant of BEM syntax and wrote a styleguide detailing how to do everything from order properties to organize files. When I started, Genius’ CSS was hard to reuse, nested under body classes, and used to enforce permissions by showing or hiding page elements. I pushed to move logic and high-level states out of CSS and into JS, and now Genius’ CSS is highly componentized and reusable.
component_name
component_name-descendant
component_name-descendant-descendant
component_name--modifier
component_name-descendant--modifier
imports/z_index_variables.scss
.z_index()
mixin.z_index_variables
and end its name with _context
._x_variables.scss
or _y_mixins.scss
.@mixins
, %extends
, or $variables
, otherwise they’ll render their contents as many times as they’re imported.imports/_helper_mixins.scss
doesn’t indicate the role of its contents very clearly, and imports/_song_page_padding_variables.scss
is too specific and can’t be reused._leaderboard.scss
should style the .leaderboard
component and all its modifiers and descendants.mobile/_leaderboard.scss
to mobile/_mobile_leaderboard.scss
.mobile/_leaderboard.scss
, desktop/_leaderboard.scss
, and shared/_leaderboard.scss
— in these cases, the shared version should be the master reference, with the platform-specific overrides/additions being as small as possible.