       # this must be after the optimization step, since it checks for optimized
       # files and includes them in the config
       if argv.templatepath
-        templateObj = templateCommands.all config
         provide argv.templatepath
+
+        templateObj = configCommands.all config,
+          require: true
+          extra: true
+          config: true
+          baseurl: true
         contextjsonname = join(argv.templatepath, argv.contextjsonname)
-        log "writing context json to #{contextjsonname}"
+        log "writing template context to #{contextjsonname}"
         write contextjsonname, JSON.stringify(templateObj)
+
+        stringBundleName = join(argv.templatepath, "strings.yaml")
+        log "writing string bundle to #{stringBundleName}"
+        write stringBundleName, JSON.stringify(allStringBundles(), null, "    ")
 
   completion:
     description: """

      log "available tests:"
      listTests tests, argv.host, argv.port

  template:
    description: """
    output html snippets for things like the require.js path, can be any of:
    #{(" - " + cmd + "\n" for cmd of templateCommands).join("")}
    """.replace(/\n$/, "")
    action: (cmd, args...) ->
      console.log templateCommands[cmd](getConfig())

  build:
    description: """

      optimizations
    , {}
  baseurl: (config) -> argv.baseurl
  all: (config, which) ->
    _.reduce(configCommands, ((configObj, cmd, name) ->
      return configObj if name is "all"
      if which == null or which[name]
        configObj[name] = configCommands[name](config)
      configObj
    ), {})

buildProfile = () ->
