A Node.js Express backend for a React-Redux client application utilizing Passport.js, Twilio, and Mailgun.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


CryptoKeeper (API)

Fullstack (React) Capstone Project from Thinkful's Fullstack Web Development program.

Project Requirements

Project Must:

  • Do something interesting or useful.
  • Be a fullstack app using HTML, CSS, React, Node, Express, and Mongoose.
  • The client and API should be deployed separately and stored in separate GitHub repos.
  • Both client- and server-side code should be tested, and you should use TravisCI for continuous integration and deployment.
  • Your app should be responsive, and should work just as well on mobile devices as it does on desktop devices.
  • All code should be high quality, error free, commented as necessary, and clean.
  • The styling on your client should be polished.
  • Your app should have a landing page that explains what the app does and how to get started, in addition to pages required to deliver the main functionality.
  • provide DEMO account credentials


  • username: demo
  • password: demopassword


CryptoKeeper is a cryptocurrency tracking application using real-time market data via Socket.IO and Cryptocompare. The current cryptocurrencies tend be quite volatile compared to more traditional currencies and stocks with prices sometimes dropping or increasing drastically in a matter of hours. By registering for an account, users can overcome the uncertaintity of keeping up with the market by creating custom events to monitor a given currency for a specific condition.

               (e.g. Bitcoin just reached $12k, Ethereum dropped 5%)

If and when a condition is eventually met, a notification will be sent to the user via text message and/or email indicating the current price. User's have control over each event condition as well as the method of deilvery and custom message that will be displayed with the notification.

This API provides services to send notifications as text messages via Twilio and emails via Mailgun. It also handles user authentication using Passport.js and JWT auth tokens


  • Production:
  • Development:
    • Mocha.js
      • A JavaScript test framework running on Node.js and in the browser, handles asynchronous testing with ease
    • Chaijs
      • A BDD / TDD assertion library for node and the browser, works seamlessly with Mocha testing framework among others
      • chai-http
        • A plugin for Chaijs that integrates HTTP testing with Chai assertions
    • faker.js
      • Node package, JavaScript library that generates fake data to be used in testing API
    • TravisCI
      • Continuous Integration testing that tests latest build before deploying to production environment
    • Gulp
      • Task manager
      • gulp-nodemon
        • Node package that restarts server and made for use with Gulp tasks
    • Browsersync
      • Automation tool to make the development process faster.
      • Allows for multiple screens to reload live and all interactions are in synchronization, mirroring actions across every browser on any device located on local network.
      • compatible with Gulp
    • Gulp + gulp-nodemon + Browsersync combine to streamline the entire development process


  • Hosted on Heroku's Cloud Application Platform
    • (PaaS) platform as a service
  • Cloud MongoDB hosting provided by mLab
  • All tests handled by Mocha.js using Chaijs and chai-http assertion libraries to test API endpoints
    • Used by TravisCI to test master branch before deploying to production environment on Heroku
  • A cron job is dispatched every 10min to check all user event conditions against the current cryptocurrency prices. If a condition passes, notifications are sent to users via sms text message using Twilio services and / or via email using Mailgun services.
  • User authentication is handled using Passport.js with a JWT authentication token strategy. User requests must provide a valid JWT auth token in header to access protected endpoints. Token renews itself automatically and expires after 7 days.
  • Image files are stored in base64 binary encoding using GridFS, a MongoDB specification that saves larger files in chunks and combines these chunks on request to serve the original file back to client. Video file storage to be implemented soon.
  • APIs