## TODO

### 2020-12-10

- [ ] typescript support
  - [x] install tsconfig.json
  - [x] node -r tsnode/register
    - [x] add to run scripts
  - [-] build script
    - [ ] make sure it brings boltzmann.js in
  - options
    1. leave boltzmann as JS, generate TS for everything else <-- went this route
      1. write a declaration file if they'll let us
      2. somehow make it work without a declaration file
    2. rewrite boltzmann in TS, compile to JS on scaffolding for non-TS targets

CJ and Chris' type goals:

- autocomplete in editor is gold
- typechecking is good
  - but we don't like transpiling server services
    - debugging becomes harder -- what's checked into your repo is not what's running
    - language version becomes something you have to care about (compile target)
    - bitrot: typescript may be a fad
    - explodes the state space
    - as javascript experts, the juice is not worth the squeeze, so to speak
      - rust has better type inference
        - it's not an "infection" of a base language
        - perf/reliability guarantees
- we were asked to add typescript support (scaffolding a typescript project)



### 2020-12-04

- [x] documentation version picker
  - ideally fully static:
    - [x] download all versions of the docs
    - [x] find all version selectors
    - [x] update the selector with the new set of versions
    - [x] create a "latest" tag
    - [x] DONE

### 2020-06-05

- [x] investigate static site generators
    - remark?
- [ ] finish off the docs
    - [ ] add more examples
    - [ ] use github pages
    - [ ] cut docs into some kind of IA
    - [ ] lint the docs somehow
- [ ] releasing
    - [ ] cut a release
    - [ ] release notes
    - [ ] release a npx tool

### 2020-06-03

- [x] write a github CI action for releases
    - [x] create artifacts
    - [ ] cut a release
    - [ ] release a npx tool
- [ ] finish off the docs
    - [ ] add more examples
    - [ ] use github pages
    - [ ] cut docs into some kind of IA
- [ ] add npm run scripts
    - [x] start, if it doesn't exist
    - [x] test, if it doesn't exist
    - [x] boltzmann:upgrade, to upgrade the thing
- [x] call decorators middleware
- [x] maybe make "jwt middleware" a flag
- [x] pick a better linter and install it by default

### 2020-05-28

- [ ] improve tool output
    - answer the following: what does the user care about?
    - what changed. why it changed.
- [x] npm installs (and uninstalls HA HA HA)
- [x] make ping and status controlled by options
- [x] bake templates into CLI binary
- [ ] github releases of the tool
- [ ] release npx package (boltzmann and boltzmann-cli)

### EOD 2020-05-27

CEEJ expresses intent to push docs changes directly to master.
We'll regroup to add information architecture.

Code changes will be PR'd in.

- [ ] CHRIS: ~Add two subcommands: `init` and `update`.~ **Edit**: We ended up not doing this
- [x] CEEJ: detect git state of destination dir, respecting force flag
- [x] CHRIS: load existing package.json
    - [x] implement turning a thing off
- [x] attach "skip if present" data to Nodes (& skip creating them if they're present)
- [x] inspect the flags and map them to npm actions
    - [x] run npm install in a subprocess
- [x] render our actual templates, for real
- [x] run the tests
    - [x] write a github CI action for this repo
- [ ] write a github CI action for releases
- [ ] finish off the docs
    - [ ] add more examples
- [ ] maybe make "jwt middleware" a flag
- [ ] pick a better linter and install it by default

### BOD 2020-05-27

- write the command-line tool lol.
- write examples
- Hide ajv by presenting a better facade for it.

Facts to make true:

- This is a rust tool
- it operates on `.`
- it takes its options as single-word arguments, with `--` in front of them optional
- mentioning a feature turns it on; `=off` removes the feature
- it generates a directory with some files in it
- it makes a package.json if none exists (npm -init -y)
- it installs its deps using bash to run npm
- it stores its options in package.json in the field `boltzmann`
- if you rerun it without options, it'll respect the ones in the package.json if found; cli options override the ones in package.json

`ludwig redis hc pg=off` scaffolds with redis and honeycomb, and turns off postgres.

