/mars-rover-image-viewer

Small webapp to view Mars Rover photos using NASA APIs

Primary LanguageJavaScript

Mars Rover Image Viewer

https://simon-lang.github.io/mars-rover-image-viewer/

Requirements

Requires Node to develop. Installer available here.

Development

Install dependencies and build client by running make build.

If make is not available on your machine, you can use npm install && npm run build.

The client can be edited with live reload using the webpack-dev-server by running make dev or npm run dev and visiting http://localhost:8080/webpack-dev-server/ in your browser.

Running the Tests

Run tests with make test or npm test.

Linting

Use make lint to lint the Coffeescript source.

Technology Used

  • Coffeescript and Node for all scripting
  • Stylus for CSS pre-processing
  • Pug for HTML templating (previously called Jade)
  • NPM for dependency management
  • Webpack for building/bundling
  • Bootstrap as a CSS Framework
  • Angular JS for a JS Framework. lodash and moment for utility
  • Mocha, Chai, Sinon for testing, assertions and spies
  • Coffeelint for linting
  • Make for providing a simple API for installing, testing, running
  • Express.js was used for the now-defunct http proxy

TODO

  • Using sol dates from the manifest could grey out days on the calendar that do not have photos
  • Send page param to NASA API. Add pagination controls
  • Better error handling for bad API calls
  • Add routing (so clicking browser back/forward will navigate between tabs)
  • Server Side Persistence
  • Smooth Image loading angular directive
  • Add unit tests that actually showcase proper ui testing

Known Issues

  • Date filter is one day off date on photos received.
  • Share Code not working yet

Disclaimer

My motivation in approaching this demo is to showcase a range of typical technologies I use and approach to structuring a webapp.

For such a small app, this probably seems like an excess of technology. It could easily be achieved more elegantly with simple HTML+CSS+JS with no pre-processors, frameworks, unit tests, etc. However for real world projects, these things do make life easier. So I've aimed to showcase my typical approach to a single page app.

This also doesn't mean I think these are the best technologies to use. In the future I'd probably use React+Redux over Angular, and ES6 over Coffeescript. Usually I use grunt, jade and html2js. In this app I have used webpack, pug and pug-html-loader.

Similarly, while this doesn't have a huge amount of polish, or perfectly functional, I've tried to strike a reasonable amount of polish and functionality in the time I allowed for this development.

You'll notice code commenting has been kept to a minimum. I try to write code that is readable and self-explanatory to anyone familiar with the technology, and only comment when I am doing something that isn't immediately obvious - like with the hasCamera method in main.coffee.