Skip to content
This repository was archived by the owner on Nov 19, 2018. It is now read-only.
Ray Nicholus edited this page Feb 9, 2014 · 14 revisions

Why?

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.

Architecture

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:

  1. Redirect the user to a Github login/access page where they will need to allow nimble to make Github API requests on their behalf.
  2. 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.
  3. 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.

Libraries

Client

  • 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).

Server

  • 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.

Clone this wiki locally