Recommendations on launching applications and setting up workspace based on location?
For this problem, I use https://github.com/jigish/slate, as this allows to position windows based on the current monitor configuration which is currently attached. The monitor configuration can be recognised by the resolutions of the the screens. A simple example with configurations for "laptop+external monitor" and "laptop only": 

# Configs
config defaultToCurrentScreen true
config menuBarIconHidden true
config checkDefaultsOnLoad true

# Monitor Aliases
alias mon-extern 1920x1080
alias mon-laptop 1280x800

# Concrete positions
alias 0-mail        move screenOriginX;screenOriginY       screenSizeX;screenSizeY          ${mon-extern}
alias 1-mail        move screenOriginX+0.17*screenSizeX;screenOriginY       0.83*screenSizeX;screenSizeY         ${mon-laptop}

# layouts
layout 2monitor 'Calendar':REPEAT              ${1-mail}
layout 1monitor 'Calendar':REPEAT               ${0-mail}

# Default Layouts
default 2monitor resolutions:${mon-laptop};${mon-extern};
default 1monitor  resolutions:${mon-laptop}


This will move the window of mail from full screen to part of the screen. But see the documentation of the program for more features and examples.