Home

Awesome

Dudestack

Packagist Build Status

Dudestack is a modern WordPress toolkit that helps you get started with the best development tools and project structure - just like Bedrock.

The idea is to have just one command for starting the project. Saves dozens of hours easily in each project start when DRY (Dont-Repeat-Yourself) stuff are fully automated!

After setting up, you can start a new project just by running:

createproject

TL;DR: You can test dudestack right away in just two minutes by following our Air starter theme instructions.

Please note: The main focus of dudestack is on how it works for our company and staff. This means it may not work for you without tweaking. Please ask a question by addressing an issue if something goes south.

Documentation & guides

Table of contents

  1. Background
  2. How it's different, why should I use this?
  3. Features
  4. Requirements
  5. Installation
  6. Documentation
    1. Starting a new project with createproject bash script
    2. What createproject.sh does
    3. What you most probably need to edit in every project
    4. Getting started
    5. Paid or Premium plugins
      1. Advanced Custom Fields Pro
      2. Object Cache Pro
      3. Polylang Pro
      4. Relevanssi
    6. WP-CLI alias
    7. SEO Plugin
    8. Issues

Background

We're constantly developing our development workflow. Honestly, we've been through hundreds of articles, tools and scripts. Went with regular WordPress structure, different wp-configs and Dandelion for a long time, but realized in some point we have to get some sense to it all. Setting up things should not be the most time consuming task when starting a new project.

We love Bedrock, which is a is a modern WordPress stack that helps you get started with the best development tools and project structure. Bedrock contains the tools we've been already using, but more. In fact, we are proud to say that most of this stack is based on Bedrock.

Like bedrock, dudestack saves you hours when starting a new project.

How it's different, why should I use this?

Well, this is mainly a toolbox for a web design/development agency for a local Finnish WordPress-company, Digitoimisto Dude Oy as well as backup purposes and to show off how we roll. You should use this only if you really like how we do things.

Despite the fact we love most of Bedrock, we noticed there are some things we don't like.

Features

Requirements

Installation

  1. Install prequisites, xcode-select --install and homebrew with latest updates
  2. Install latest Composer and mkcert
  3. Clone this repo to your ~/Projects directory:
mkdir -p $HOME/Projects && cd $HOME/Projects && git clone git@github.com:digitoimistodude/dudestack.git
  1. Go to dudestack directory and run setup script:
cd $HOME/Projects/dudestack/bin && bash macos.sh

If you use WSL/Windows:

cd $HOME/Projects/dudestack/bin && bash wsl.sh

Documentation

Starting a new project with createproject bash script

Creating a new project has a lot of configs to do. We wanted to automate most of it by creating a bash script called createproject.sh. The script assumes:

What createproject.sh does

When you run createproject it looks like this:

createproject.sh

  1. First it runs composer create-project with dudestack settings
  2. Installs our default WordPress plugins and updates them
  3. Creates MySQL repository automatically with project name (assumes by default that you have macos-lemp installed)
  4. Installs capistrano deployment tool
  5. Generates default capistrano configs (config/deploy.rb, config/deploy/staging.rb, config/deploy/production.rb) with your GitHub project details and paths
  6. Sets up WordPress configs (wp-config credentials to .env) and salts automatically
  7. Installs WordPress under its own subdirectory /wp (thus, admin located in example.test/wp/wp-admin)
  8. Sets up default admin user as not "admin" for security (extra users can be configured in bin/createproject.sh)
  9. Removes default WordPress posts, themes and plugins and everything else not so useful
  10. Activates default plugins, timezones, permalinks
  11. Flushes rewrites, adds support for permalinks and webfonts
  12. Sets up file permissions
  13. Inits a GitHub repository
  14. Creates a HTTPS certificate
  15. Sets up a virtual host for development environment
  16. Updates /etc/hosts file
  17. Restarts development server

What you most probably need to edit in every project

Please note:

Getting started

  1. Everything assumes your projects are in ~/Projects. You should make sure that folder exists. You can also decide to use another folder, but then you need a lot of search&replace and using this would be quite pointless.
  2. Run macos-lemp-stack (if you use other development environment like MAMP Pro server, you need to edit bin/createproject.sh accordingly. We don't provide support for all environments)
  3. Edit createproject.sh and composer.json based on your own needs.

To start a new project, run createproject and have fun.

Paid or Premium plugins

Edit your composer.json and add these lines inside respository, separated by commas:

Advanced Custom Fields Pro

As per pivvenit/acf-composer-bridge, add to "repositories" section:

    {
      "type": "composer",
      "url": "https://pivvenit.github.io/acf-composer-bridge/composer/v3/wordpress-plugin/"
    },

Then to "requires":

    "advanced-custom-fields/advanced-custom-fields-pro": "*",

Gravity Forms

As per gtap-dev/gravityforms-composer-installer, add to "repositories" section (remember to update to the latest version from here):

{
  "type": "package",
  "package": {
    "name": "gravityforms/gravityforms",
    "version": "2.5.14.3",
    "type": "wordpress-plugin",
    "dist": {
      "type": "zip",
      "url": "https://www.gravityhelp.com/wp-content/plugins/gravitymanager/api.php?op=get_plugin&slug=gravityforms&key={%WP_PLUGIN_GF_KEY}"
    },
    "require": {
      "composer/installers": "^1.4",
      "gotoandplay/gravityforms-composer-installer": "^2.3"
    }
  }
},

Then to "requires":

    "gravityforms/gravityforms": "*",

Object Cache Pro

You will need Redis and PHP Redis installed in order to install this package.

Add to "repositories":

{
  "type": "composer",
  "url": "https://objectcache.pro/repo/"
}

Then to "requires":

"rhubarbgroup/object-cache-pro": "^1.13.0"

Relevanssi

Add to "repositories":

{
      "type": "package",
      "package": {
        "name": "relevanssi/relevanssi-premium",
        "version": "2.20.3",
        "type": "wordpress-plugin",
        "dist": {
          "type": "zip",
          "url": "https://www.relevanssi.com/update/get_version.php?api_key=xxx&version=2.20.3"
        }
      }
    },

Then to "requires":

    "relevanssi/relevanssi-premium": "2.20.3",

Polylang Pro (and others that don't have a repo)

Add to "repositories":

,
    {
      "type": "package",
      "package": {
        "name": "polylang/polylang-pro",
        "type": "wordpress-plugin",
        "version": "3.2.5",
        "dist": {
          "type": "zip",
          "url": "https://plugins.dude.fi/polylang-pro_3.2.5.zip"
        }
      }
    },

Then to "requires":

    "polylang/polylang-pro": "3.2.5",

In the similar manner you can add other paid plugins that don't have composer repository. We've covered with this almost every such plugin we use.

When getting the new zip, I use this function in my ~/.bashrc:

function plugin() { scp -r $@ 'username@yoursite.com:~/path/to/plugins/'; }

So with simple ssh-pairing (passwordless login), I can upload a plugin by simple command: plugin gravityforms_1.8.20.5.zip and then just change version and composer update. DRY, you see.

WP-CLI alias

WP-Cli is included in dudestack per project via composer.json and won't work by default globally. You'll need this alias on your Mac or Linux .bashrc or .bash_profile file:

alias wp='./vendor/wp-cli/wp-cli/bin/wp'

SEO Plugin

Our default choice for the SEO plugin is The SEO Framework whihc is nice, clean and simple solution that suits most of the projects.

In case client is familiar with Yoast, requests it or the project is blog-centric, switching to Yoast SEO is possible. In that case, replace the wpackagist-plugin/autodescription package in composer.json with wpackagist-plugin/wordpress-seo. It's also highly recommended to install wpackagist-plugin/so-clean-up-wp-seo to clean the bloat from UI.

Issues

Feel free to post any issue or question if you have one.