LUMINUS' Developer Operations
Any developer who glances at these class names immediately interprets what each class is doing for what job. We can already assume this module is given 1 unit of top padding, the list styles are reset and it's given a container. This ultimately creates a leaner CSS code base as a nice side effect.
By using expressive class names it makes it that much easier for everyone involved to understand what your markup is attempting to do. For example…
<ul class"pad1-top list-reset container">…</ul>
When applicable always start a custom class using the clients name followed by a hyphen. For example a client named "red rocket" requiring some custom component not within the system itself would look like so…
<div class="rr-[component-name]"></div> .rr-[component-name] {…}
By enforcing a system of principles our codebase becomes meaningful and semantically rich making developing and introducing new developers to the codebase simple and intuitive.
BEM is the chosen methodology for naming throughout CSS. BEM stands on principles of uniformity in code by creating consistency that can be understood by seasoned and fresh developers to a project.
<ul class"prefix-widget prefix-widget--modifier">
<li class="prefix-widget__item"></li>
</ul>
If it needs a hook for JS then use a prefix like so…
.js-[name]
<div class="js-[name] another class name here too">…</div>
This helps to alleviate the fright of removing something that could hurt the rest of the system and isolates the event itself so we know what to expect by adding or removing this class name to the markup. This prefixed class name should never show up in the CSS.
A Content pattern describes the types of elements within and can be rendered in multiple forms
A Display pattern describes a specific rendering and can be applied to multiple types of Content patterns
“Embracing the difference in pattern types is the key to making a modular design system infinitely more scalable” ~ Dan Mall
strive to reduce cognitive friction for different authors scanning the code using a shared set of rules and principles.
OOP Approach by grouping similar tasks into classes
utility - usable classes throughout the entire system for a specific job and used atleast once.
toolbox - custom snippets and ui helpers
functions - return some result in order to execute the desired functionality
mixins - helpers for changing properties and passing args
vars - globals variables for the system
plugins - 3rd party code like Flickity, fancybox etc.
typography - font styles contained for easy updating.
atoms - small bits of the UI such as buttons, inputs and page titles.
molecules - a unit of smaller atoms combined together. Think search form component
organisms - much larger in size and contains atoms along with molecules and used throughout the system. Think headers, footers for example.
templates - treatments based on visual characteristics of each page variation
states - event driven visual styles based on user interaction
template-parts/
- global/
- {file}.php : partials (chunks of html and php) used throughout the entire system
- page_name/
- content.php : content returned through WP Admin Dashboard
inc/
- theme-setup/
- [wp_method]-[template_helper].php : required files to generate baseline theme functionality
functions/
- [file_name].php : custom developer functions
functions-dev/
- [file_name].php : custom local developer functions for env.
js/
- libs/
- [lib_name].js : global library used such as Modernizr for example.
- src/
- [functional_name][-[method]].js : isolated script used for specific event driven behavior.
This structure also allows for use with Async Modular Loaders such as RequireJS and is the preferred directory structure going forward into EcmaScript 2015 where modular loading is encouraged.
Isolating bug fixes, hot fixes, feature releases become less cumbersome to manage and deployment and isolation are easier to handle in order to avoid collisions between production and development life cycle.
WordPress Plugins
- Advanced Custom Fields
- Gravity Forms
- Events Calendar
Front-end
- Normalize
- Modernizr
Development
- MAMP
- Vagrant+Vaprobash Apache
- Sequel Pro
Deployment Services
- Springloops
- Flywheel
Storage & Communication
- Google Drive
- Gmail
- Slack
- Google Calendar
Developer Tooling
- Gulp
- NPM
- Node
- Git
- Bower