Skip to content

Instantly share code, notes, and snippets.

@EndlessHypnosis
Last active October 26, 2017 00:41
Show Gist options
  • Save EndlessHypnosis/0f5438ef0062402fee79c6edd897e9b2 to your computer and use it in GitHub Desktop.
Save EndlessHypnosis/0f5438ef0062402fee79c6edd897e9b2 to your computer and use it in GitHub Desktop.

Capstone Project Proposal

Nick Svetnicka - Mod 4 - FE1705

Project Name: YouCompleteMe

Overview

This is a proposal to pivot my Capstone Project into a continuation of my Personal Project from mod 3, codenamed SnorLab. The complete SnorLab spec can be found here. A demo of the current state of the application can be done in person...working on Heroku hosting The premise of SnorLab is that features are slowely unlocked as the user interacts with and uses the application. These features are primarily pretty simple productivity tools such as tasks and reminders.

There are other features associated with this unlocking system. These are more of fun, non-functional rewards granted upon completing tasks/reminders and leveling up; incentivising the user to continue using the app, and enhancing the UI/Customizability.

Rational For Revisiting Personal Project

Time Saving: Every new project goes through an initial phase that involves:

  • brainstorming features and functionality
  • setting up directory architecture
  • package selection, installation, and resolution of conflicts
  • achieving a simple hello world state with all technologies in place

While I fully appreciate the experience awarded for going through these steps, I don't feel that I am lacking in my understanding of this process (apart from the mod4 additions, see tech stack section) The time spent in this stage of the project can instead be put into deeper feature buildout, DRYing up and refactoring code, and generally working on a more polished project. In addition, the Front-End tech stack I would ideally choose for YouCompleteMe is nearly the same as SnorLab. And by swapping out some of the backend components, I get experience in refactoring that part of an existing code-base.

Merging of Ideas: Several of the major components planned for this YouCompleteMe project could be incorporated as additional feature unlocks in SnorLab, with some rework (see more on features below). Of course, one big difference is the linking of students together around a scheduled time rather than simply scheduling time for myself...as would be the continued direction of the SnorLab project.

Motivation: SnorLab was a project I was excited and interested in creating. When building out the specs for the project, I added several features, knowing I would have to sacrifice many of them to achive an MVP in mod3. I feel this would be a great opporutnity to continue building out the planned features, and also incorporating new features based on topics learned from mod4.

Features

Existing functionality of SnorLab

Full account creation, sign-in/sign-out (using firebase auth)

Persisted user data including tasks/reminders/avatars, profile info (using firebase database and storage)

Progression of unlocking features, including:

  • Simple tasks with single description field
  • Advanced tasks with title and description
  • Ability to edit/delete/complete existing tasks
  • Basic reminders with description and time
  • Notification system with on-screen notices of reminders that are due
  • Avatars: Generates random robot avatars from https://robohash.org

Tokens: re-roll tokens are rewarded for task/reminder completion which can be used to generate a new avatar image.

Feature Extensions for YouCompleteMe

More sophisticated reminders, including the ability to view scheduled events on a UI calendar (implementation strategy for calendar tbd). Currently reminders only work for same-day scheduling...this would properly build out the feature.

Checklists. It was originally planned to have the option of attaching either a description or a checklist to a task...the description was fully implemented, this would complete the need for a list-based task.

Moods: Similar to the avatar implementation, moods would be user configurable Statuses for their tasks & reminders...essentially allowing the user to group tasks/reminders into categories by assigning a mood. A mood consists of a user defined description, and a random icon generated from http://avatars.adorable.io/

Quotes: Involves generating random quotes (sourced from 3rd party API or similar) which would be displayed in the header of the application...mostly targeted at short, inspirational messages. These would rotate based on some trigger (tbd).

Full Loot Bag Support: Currently, there is rudimentary support for issuing re-roll tokens used to generate new Avatars. Building out this feature in its entirety would involve a randomized loot bag awared from completing tasks/reminders, in which the user would be granted re-roll tokens for Avatars, Moods, Quotes, and any other non-functional features.

Possible Extensions

Admin/God Powers Entering an admin state would provide some UI controls to quickly bypass the built in leveling system, and unlock any desired feature. This particularly helps demonstrate the complex React Routing the application is doing, as well as making it easier to demo the project.

Themes This could involve a number of things, from being able to select the desired font, colors, layout of the site.

Technology Stack Migration

In order to leverage some of the concepts learned in mod 4, the technology stack for SnorLab would receive a revamp/rework as it transitions into its new name, YouCompleteMe.

Existing Tech Stack in SnorLab

React, Redux, Router

Webpack

redux-promise as middleware

React Notification System

Firebase used for:

  • User Auth: Basic email/password registration
  • Real-Time-Database: User profile info, tasks/reminders
  • Storage: Avatars

Tech Stack Changes for YouCompleteMe

The react-related techs would for the most part stay intact. I would however, experiment with a new middleware, possibly Thunk or redux-promise-middleware.

Backend: I would build a server.js file and create my own API layer. This could support everything from user account creation to CRUDS for tasks/reminders/avatars/moods/quotes. While under the hood, these endpoints would either communicate with Firebase or a local PostgreSQL + Knex.js + Bookshelf.js

  • Firebase would still handle user auth, user profile info, and image asset storage (avatars, moods).
  • Postgres would take over all data entered into the application by the user...all the tasks, reminders, checklists, quotes

Remote APIs:

  • Possibly a calendar API for generating the front end calendar display
  • Possibly an API for sourcing the quotes, although there are basic HTTP options for this data.

Biggest Challenges

Building the UI and event creation functionality for a calendar could be a big undertaking, depending on what 3rd party packages/libraries exist for this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment