I haven't been following the various build system work being done in each app Makefile/build.js files, but I see a bunch of duplicated and hardcoded efforts.

 * For example, this makefile (and all similar ones) look useless. It sounds simplier to just run the `@$(call run-app-js-command, build)` from the root Makefile.
If I followed your plan correctly, you are going to get rid of all app Makefile and replace them with some copy.mk, right? And may be even get rid of copy.mk to have a pure 100% way of doing?

 * Also, in build.js files, ideally the app itself wouldn't define its stage dir. Currently we do that:
STAGE_DIR = build_stage
```
  var stageDir = config.STAGE_DIR;
  var init = utils.getFile(stageDir, 'calendar', 'js', 'presets.js');
```
But ideally, it would just receive somehow from env variable or anything else, its final own stage dir:
STAGE_DIR = build_stage
APP_STAGE_DIR = build_stage/calendar
```
  var stageDir = config.APP_STAGE_DIR;
  var init = utils.getFile(stageDir, 'js', 'presets.js');
```

 * In Makefile/copy.mk, we duplicate those and we shouldn't:
```
ifndef STAGE_DIR
  BUILD_DIR=../../build_stage/$(APP)
else
  BUILD_DIR=$(STAGE_DIR)/$(APP)
endif
```
`JS_RUN_ENVIRONMENT` definitions.
The calls to build.js and/or r.js.


I think we can simplify various things by saying that if you want to build one app, you have to do this `APP=myapp make` from the root directory. Then we can safely assume that various precious environment variable are set!

I'm fine improving these things in followups, I mainly want to ensure we are on the same page.