Skip to content

AstonMartinez/astons-capstone

Repository files navigation

QuestForge

QuestForge is a project created by Aston Martinez and based on the style of Habitica. It serves to gamify your habits, daily tasks, and productivity to keep you on track and ensure your well-being. By allowing you to visualize your tasks and goals, as well as the impact of sticking to them or falling behind (via health, experience, and gold for your avatar), QuestForge helps increase motivation and sets you up for success.

You can access the live app here: https://questforge-capstone.onrender.com Screenshot 2023-09-17 at 3 17 04 PM

Screenshot 2023-09-17 at 3 18 40 PM

Technologies / Frameworks Used

Backend

  • Flask

  • Alembic

  • SQLAlchemy

Frontend

  • React.js
  • Redux

Core Features

  • Habits
  • Registered users can create new Habits, which appear on their user dashboard.
  • Registered users can view their Habit details from within their user dashboard.
  • Registered users can edit/update their Habit details from within a modal on the user dashboard by clicking on a specific Habit.
  • Registered users can delete Habits from their user dashboard by clicking on the Habit and viewing its details.
  • Dailies
  • Registered users can create new Dailies, which appear on their user dashboard.
  • Registered users can view their Daily details from within their user dashboard.
  • Registered users can edit/update their Daily details from within a modal on the user dashboard by clicking on a specific Daily.
  • Registered users can delete Dailies from their user dashboard by clicking on the Daily and viewing its details.
  • To-Dos
  • Registered users can create new To-Dos, which appear on their user dashboard.
  • Registered users can view their To-Do details from within their user dashboard.
  • Registered users can edit/update their To-Dp details from within a modal on the user dashboard by clicking on a specific To-Do.
  • Registered users can delete To-Dos from their user dashboard by clicking on the To-Do and viewing its details.
  • Avatar Customization
  • Registered users are assigned a default avatar, which they can then customize by clicking the 'Edit Avatar' button within the user dropdown in the top right corner.
  • Rewards
  • Registered users can create new Rewards, which appear on their user dashboard.
  • Registered users can view their Reward details from within their user dashboard.
  • Registered users can edit/update their Reward details from within a modal on the user dashboard by clicking on a specific Reward.
  • Registered users can delete Rewards from their user dashboard by clicking on the Reward and viewing its details.
  • Shops
  • Registered users can buy new items for their avatar, which will later have uses (by equipping or using a specified item).

Future Implementation Goals

  • Quests:
  • Registered users will be able to go on epic quests to increase their stats, find new equipment, and level up.
  • Parties
  • Registered users will be able to join parties with other users, go on quests together, and increase their rewards.
  • Drag and Drop
  • Registered users will be able to drag and drop items within the same list (i.e., Habits, Dailies, To-Dos, Rewards)
  • More Shop items
  • Registered users will have more item options to purchase with the gold they earn.

Contact Information

You can contact Aston via email, GitHub, or LinkedIn:

API Endpoints

Request Purpose Return Value
GET /api/auth/ This fetch is sent upon initial load and on subsequent refreshes. It returns an object representing the current user, if user is logged in {
'id': INT,
'username': STRING,
'email': STRING,
'bio': STRING,
'experience_points': INT,
'level': INT,
'date_joined': DATE,
'gold': INT,
'health': INT
'avatar': {
     'id': INT,
      'user_id': INT,
      'shirt': STRING,
      'hair': STRING,
      'bangs': STRING,
      'skin': STRING,
      'background': STRING
  }
}
POST /api/auth/login This fetch attempts to log in a user with the provided credentials. It returns an object representing the current user, if validation succeeds. {
'id': INT,
'username': STRING,
'email': STRING,
'bio': STRING,
'experience_points': INT,
'level': INT,
'date_joined': DATE,
'gold': INT,
'health': INT
'avatar': {
     'id': INT,
      'user_id': INT,
      'shirt': STRING,
      'hair': STRING,
      'bangs': STRING,
      'skin': STRING,
      'background': STRING
  }
}
GET /api/auth/logout Logs out a user. {
  'message': 'User logged out'
}
POST /api/auth/signup Creates a new user and logs them in. Returns an object representing the newly created user. {
'id': INT,
'username': STRING,
'email': STRING,
'bio': STRING,
'experience_points': INT,
'level': INT,
'date_joined': DATE,
'gold': INT,
'health': INT
'avatar': {
     'id': INT,
      'user_id': INT,
      'shirt': STRING,
      'hair': STRING,
      'bangs': STRING,
      'skin': STRING,
      'background': STRING
  }
}
GET /api/auth/unauthorized Returns unauthorized JSON when flask-login authentication fails. {
 'errors':
   [
     'Unauthorized'
   ]
}
GET /api/avatar/current Fetches a logged-in user's avatar details. {
   'id': INT,
   'user_id': INT,
   'shirt': STRING,
   'hair': STRING,
   'bangs': STRING,
   'skin': STRING,
   'background': STRING
}
PUT /api/avatar/update Updates a logged-in user's avatar details after changing them in the customization modal. {
   'id': INT,
   'user_id': INT,
   'shirt': STRING,
   'hair': STRING,
   'bangs': STRING,
   'skin': STRING,
   'background': STRING
}
GET /api/dailies/:id Fetches the details of a specified Daily. {
  'id': INT,
  'user_id': INT,
  'title': STRING,
  'notes': STRING,
  'checklist': STRING,
  'difficulty': STRING,
  'start_date': DATE,
  'repeats': STRING,
  'num_repeats': INT,
  'day_of_repeat': STRING,
  'count': INT,
  'tags': STRING,
  'status': STRING
}
DELETE /api/dailies/:id/delete Deletes a logged-in user's specified Daily. {
  'id': INT,
  'user_id': INT,
  'title': STRING,
  'notes': STRING,
  'checklist': STRING,
  'difficulty': STRING,
  'start_date': DATE,
  'repeats': STRING,
  'num_repeats': INT,
  'day_of_repeat': STRING,
  'count': INT,
  'tags': STRING,
  'status': STRING
}
PUT /api/dailies/:id/update Updates the details of user's specified Daily. {
  'id': INT,
  'user_id': INT,
  'title': STRING,
  'notes': STRING,
  'checklist': STRING,
  'difficulty': STRING,
  'start_date': DATE,
  'repeats': STRING,
  'num_repeats': INT,
  'day_of_repeat': STRING,
  'count': INT,
  'tags': STRING,
  'status': STRING
}
POST /api/dailies/new Creates a new Daily. {
  'id': INT,
  'user_id': INT,
  'title': STRING,
  'notes': STRING,
  'checklist': STRING,
  'difficulty': STRING,
  'start_date': DATE,
  'repeats': STRING,
  'num_repeats': INT,
  'day_of_repeat': STRING,
  'count': INT,
  'tags': STRING,
  'status': STRING
}
GET /api/docs Returns all API routes and their doc strings. {
  "route": [
   [
      "method"
   ],
   [
     "purpose"
   ]
 ]
}
POST /api/equipment/:id/buy Allows a user to purchase an item, then adds the item to their inventory. Returns an object with the user's id and the equipment item's id. {
  'id': INT,
  'user_id': INT,
  'equipment_id': INT
}
POST /api/features/new Allows a user to create and submit a new Feature Request. {
  'id': INT,
  'email': STRING,
  'category': STRING,
  'response': STRING,
  'description': STRING
}
GET /api/habits/:id Fetches the details of a specific Habit. {
  'id': INT,
  'user_id': INT,
  'title': STRING,
  'notes': STRING,
  'type': STRING,
  'difficulty': STRING,
  'tags': STRING,
  'pos_count': INT,
  'neg_count': INT,
  'status': STRING
}
GET /api/habits/:id Fetches the details of a specific Habit. {
  'id': INT,
  'user_id': INT,
  'title': STRING,
  'notes': STRING,
  'type': STRING,
  'difficulty': STRING,
  'tags': STRING,
  'pos_count': INT,
  'neg_count': INT,
  'status': STRING
}
DELETE /api/habits/:id/delete Allows a user to delete a specified Habit. {
  'id': INT,
  'user_id': INT,
  'title': STRING,
  'notes': STRING,
  'type': STRING,
  'difficulty': STRING,
  'tags': STRING,
  'pos_count': INT,
  'neg_count': INT,
  'status': STRING
}
PUT /api/habits/:id/update Updates the details of a specified Habit. {
  'id': INT,
  'user_id': INT,
  'title': STRING,
  'notes': STRING,
  'type': STRING,
  'difficulty': STRING,
  'tags': STRING,
  'pos_count': INT,
  'neg_count': INT,
  'status': STRING
}
POST /api/habits/new Allows a logged-in user to create a new Habit. {
  'id': INT,
  'user_id': INT,
  'title': STRING,
  'notes': STRING,
  'type': STRING,
  'difficulty': STRING,
  'tags': STRING,
  'pos_count': INT,
  'neg_count': INT,
  'status': STRING
}
PUT /api/reports/:id/status Updates a Bug Report's status to resolved or unresolved. {
  'id': INT,
  'user_email': STRING,
  'bug_description': STRING,
  'status': STRING
}
POST /api/reports/new Allows a user to create a new Bug Report. {
  'id': INT,
  'user_email': STRING,
  'bug_description': STRING,
  'status': STRING
}
GET /api/rewards/:id Fetches the details of a specified Reward. {
  'id': INT,
  'user_id': INT,
  'title': STRING,
  'notes': STRING,
  'cost': INT,
  'tags': STRING
}
DELETE /api/rewards/:id/delete Allows a user to delete a specified Reward. {
  'id': INT,
  'user_id': INT,
  'title': STRING,
  'notes': STRING,
  'cost': INT,
  'tags': STRING
}
PUT /api/rewards/:id/update Updates the details of a specified Reward. {
  'id': INT,
  'user_id': INT,
  'title': STRING,
  'notes': STRING,
  'cost': INT,
  'tags': STRING
}
POST /api/rewards/new Allows a user to create a new Reward. {
  'id': INT,
  'user_id': INT,
  'title': STRING,
  'notes': STRING,
  'cost': INT,
  'tags': STRING
}
GET /api/search/:tags Filters a user's Habits, Dailies, To-Dos, and Rewards based on the specified tags. {
  'habits': {
    'id': INT,
    'user_id': INT,
    'title': STRING,
    'notes': STRING,
    'type': STRING,
    'difficulty': STRING,
    'tags': STRING,
    'pos_count': INT,
    'neg_count': INT,
    'status': STRING
   }
  'dailies': {
    'id': INT,
    'user_id': INT,
    'title': STRING,
    'notes': STRING,
    'checklist': STRING,
    'difficulty': STRING,
    'start_date': DATE,
  'repeats': STRING,
  'num_repeats': INT,
  'day_of_repeat': STRING,
    'count': INT,
    'tags': STRING,
    'status': STRING
 }
  'toDos': {
    'id': INT,
    'user_id': INT,
    'title': STRING,
    'notes': STRING,
    'difficulty': STRING,
    'checklist': STRING,
    'due_date': DATE,
    'tags': STRING,
    'status': STRING
 }
  'rewards': {
    'id': INT,
    'user_id': INT,
    'title': STRING,
    'notes': STRING,
    'cost': INT,
    'tags': STRING
 }
}
GET /api/search/custom/:query Filters a user's Habits, Dailies, To-Dos, and Rewards based on keywords in the item's title or notes. {
  'habits': {
    'id': INT,
    'user_id': INT,
    'title': STRING,
    'notes': STRING,
    'type': STRING,
    'difficulty': STRING,
    'tags': STRING,
    'pos_count': INT,
    'neg_count': INT,
    'status': STRING
   }
  'dailies': {
    'id': INT,
    'user_id': INT,
    'title': STRING,
    'notes': STRING,
    'checklist': STRING,
    'difficulty': STRING,
    'start_date': DATE,
  'repeats': STRING,
  'num_repeats': INT,
  'day_of_repeat': STRING,
    'count': INT,
    'tags': STRING,
    'status': STRING
 }
  'toDos': {
    'id': INT,
    'user_id': INT,
    'title': STRING,
    'notes': STRING,
    'difficulty': STRING,
    'checklist': STRING,
    'due_date': DATE,
    'tags': STRING,
    'status': STRING
 }
  'rewards': {
    'id': INT,
    'user_id': INT,
    'title': STRING,
    'notes': STRING,
    'cost': INT,
    'tags': STRING
 }
}
GET /api/todos/:id Fetches the details of a specified To-Do. {
  'id': INT,
  'user_id': INT,
  'title': STRING,
  'notes': STRING,
  'difficulty': STRING,
  'checklist': STRING,
  'due_date': DATE,
  'tags': STRING,
  'status': STRING
}
DELETE /api/todos/:id/delete Allows users to delete a specified To-Do.
  'id': INT,
  'user_id': INT,
  'title': STRING,
  'notes': STRING,
  'difficulty': STRING,
  'checklist': STRING,
  'due_date': DATE,
  'tags': STRING,
  'status': STRING
}
PUT /api/todos/:id/update Updates the details of a specified To-Do.
  'id': INT,
  'user_id': INT,
  'title': STRING,
  'notes': STRING,
  'difficulty': STRING,
  'checklist': STRING,
  'due_date': DATE,
  'tags': STRING,
  'status': STRING
}
POST /api/todos/new Allows a user to create a new To-Do.
  'id': INT,
  'user_id': INT,
  'title': STRING,
  'notes': STRING,
  'difficulty': STRING,
  'checklist': STRING,
  'due_date': DATE,
  'tags': STRING,
  'status': STRING
}
GET /api/todos/user-to-dos Fetches all of a logged-in user's To-Dos. Fetches all of a logged-in user's To-Dos.
GET /api/users Query for all users and returns them in a list of user dictionaries. [
  {
    'id': INT,
    'username': STRING,
    'email': STRING,
    'bio': STRING,
'experience_points': INT,
   'level': INT,
    'date_joined': DATE,
    'gold': INT,
    'health': INT
'avatar': {
     'id': INT,
      'user_id': INT,
      'shirt': STRING,
      'hair': STRING,
      'bangs': STRING,
      'skin': STRING,
      'background': STRING
    }
 }
]
GET /api/users/:id Query for a user by id and returns that user in a dictionary object. {
  'id': INT,
  'username': STRING,
  'email': STRING,
  'bio': STRING,
  'experience_points': INT,
  'level': INT,
  'date_joined': DATE,
  'gold': INT,
  'health': INT
  'avatar': {
    'id': INT,
    'user_id': INT,
    'shirt': STRING,
    'hair': STRING,
    'bangs': STRING,
    'skin': STRING,
    'background': STRING
  }
}
GET /api/users/inventory Fetches all of a logged-in user's inventory items. {
  'id': {
    'id': INT,
      'name': STRING,
      'description': STRING,
      'strength': INT,
      'str_gear_num': INT,
      'str_class_bonus': INT,
      'constitution': INT,
      'const_gear_num': INT,
      'const_class_bonus': INT,
      'intelligence': INT,
      'int_gear_num': INT,
      'int_class_bonus': INT,
      'perception': INT,
      'perc_gear_num': INT,
      'perc_class_bonus': INT,
      'cost': INT,
      'image': STRING
  }
}
PUT /api/users/update-user-stats Updates a user's stats and information. {
  'id': INT,
  'username': STRING,
  'email': STRING,
  'bio': STRING,
  'experience_points': INT,
  'level': INT,
  'date_joined': DATE,
  'gold': INT,
  'health': INT
  'avatar': {
    'id': INT,
    'user_id': INT,
    'shirt': STRING,
    'hair': STRING,
    'bangs': STRING,
    'skin': STRING,
    'background': STRING
  }
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages