Repository navigation
Stack
The technology stack is generally made up of some items that I have never worked with before. This project is, among other things, an excuse to use libraries that I am curious about.
The goal was to make this a 100% client-side app. However, I can only realistically make this 99% client-side, due to Github's OAuth flow. In order to make privileged requests against Github's API, I am going to use their OAuth2 web application flow. Ultimately, I need to include a bearer token with all privileged requests to Github's API. This is a 3-step process:
- Redirect the user to a Github login/access page where they will need to allow nimble to make Github API requests on their behalf.
- Handle the redirect from Github's authorize page (in step 1). Here, I will need to verify that this is tied to the request I sent in step 1.
- If everything looks good, I'll need to send a POST request back to Github, asking for the token. This step in particular MUST happen server side. Why? First, the POST request must include a secret key assigned to nimble. In most cases, secrets shouldn't be made available to the browser since they can be easily viewed. Second, Github's API doesn't allow accept cross-origin JavaScript based requests for this particular POST request, ostensibly since you should NOT make this request directly from the browser. JSONP is also not possible, since this is a POST.
- Ember.js will drive the front-end.
- Handlebars, which is a templating engine that Ember depends on.
- jQuery is also an Ember dependency.
-
Ember Data is a JavaScript ORM that runs in the browser. This will be sitting between nimble and the Github API servers. It will also be used to grab application-specific metadata stored in issue/milestone records.(Ember Data isn't a great choice for APIs that don't follow its specific rules, such as Github's API. I'm going to write my own persistence layer). -
Foundation is a responsive UI framework.(Foundation does not play nicely with SPAs and has some notable bugs in their latest version). - Bootstrap is a responsive UI framework.
- jQuery UI (only necessary components, such as interactions for drag & drop).
- node.js, but I expect (my) server footprint to be extremely limited.
For development, I'd like to give Cloud9 IDE a spin. I wanted to use Cloud9, but experienced far too much latency when typing code in the web-based IDE. I'm using Web Storm for now, and will continue if I can get a free OSS license.