gatsby frontend to display all ideas/projects with a page for each tier of app idea/project

pull/135/head
mcacciano 6 years ago
parent bd4684f148
commit b1cdc1e141

@ -1,3 +1,9 @@
---
path: '/bin2dec'
title: 'Bin2Dec'
tier: 'beginner'
---
# Bin2Dec
**Tier:** 1-Beginner

@ -1,3 +1,9 @@
---
path: '/border-radius-previewer'
title: 'Border-radius Previewer'
tier: 'beginner'
---
# Border-radius Previewer
**Tier:** 1-Beginner

@ -1,3 +1,9 @@
---
path: '/csv-2-json'
title: 'CSV2JSON'
tier: 'beginner'
---
# CSV2JSON
**Tier:** 1-Beginner
@ -12,12 +18,12 @@ that's already present. In additional to providing a useful function, this
challenge will also give you practice in modifying existing applications to
add new functionality.
### Constraints ###
### Constraints
- Read the user stories below carefully. Some of the functionality created
for JSON2CSV will need to be modified.
for JSON2CSV will need to be modified.
- You may not use any libraries or packages designed to perform this type of
conversion.
conversion.
- Nested JSON structures are not supported.
## User Stories
@ -28,6 +34,7 @@ conversion.
- [ ] User can see the converted CSV in the JSON text box
### Stories already implemented in JSON2CSV
- [ ] User can paste JSON syntax into a text box
- [ ] User can click a 'Convert to CSV' button to validate the JSON text box and convert it to CSV
- [ ] User can see an warning message if the JSON text box is empty or if it doesn't contain valid JSON

@ -1,3 +1,9 @@
---
path: '/calculator'
title: 'Calculator'
tier: 'beginner'
---
# Calculator
**Tier:** 1-Beginner
@ -18,33 +24,32 @@ mobile device to better understand basic functionality and edge cases.
## User Stories
- [ ] User can see a display showing the current number entered or the
result of the last operation.
result of the last operation.
- [ ] User can see an entry pad containing buttons for the digits 0-9,
operations - '+', '-', '/', and '=', a 'C' button (for clear), and an 'AC'
button (for clear all).
operations - '+', '-', '/', and '=', a 'C' button (for clear), and an 'AC'
button (for clear all).
- [ ] User can enter numbers as sequences up to 8 digits long by clicking on
digits in the entry pad. Entry of any digits more than 8 will be ignored.
digits in the entry pad. Entry of any digits more than 8 will be ignored.
- [ ] User can click on an operation button to display the result of that
operation on:
* the result of the preceding operation and the last number entered OR
* the last two numbers entered OR
* the last number entered
operation on:
_ the result of the preceding operation and the last number entered OR
_ the last two numbers entered OR \* the last number entered
- [ ] User can click the 'C' button to clear the last number or the last
operation. If the users last entry was an operation the display will be
updated to the value that preceded it.
operation. If the users last entry was an operation the display will be
updated to the value that preceded it.
- [ ] User can click the 'AC' button to clear all internal work areas and
to set the display to 0.
to set the display to 0.
- [ ] User can see 'ERR' displayed if any operation would exceed the
8 digit maximum.
8 digit maximum.
## Bonus features
- [ ] User can click a '+/-' button to change the sign of the number that is
currently displayed.
currently displayed.
- [ ] User can see a decimal point ('.') button on the entry pad to that
allows floating point numbers up to 3 places to be entered and operations to
be carried out to the maximum number of decimal places entered for any one
number.
allows floating point numbers up to 3 places to be entered and operations to
be carried out to the maximum number of decimal places entered for any one
number.
## Useful links and resources

@ -1,3 +1,9 @@
---
path: '/my-calendar'
title: 'My Calendar'
tier: 'beginner'
---
# My calendar
**Tier:** 3-Advanced

@ -1,3 +1,9 @@
---
path: '/cause-effect'
title: 'CauseEffect'
tier: 'beginner'
---
# CauseEffect
**Tier:** 1-Beginner

@ -1,3 +1,9 @@
---
path: '/christmas-lights'
title: 'Christmas Lights'
tier: 'beginner'
---
# Christmas Lights
**Tier:** 1-Beginner

@ -1,3 +1,9 @@
---
path: '/color-cycle'
title: 'ColorCycle'
tier: 'beginner'
---
# ColorCycle
**Tier:** 1-Beginner

@ -1,3 +1,9 @@
---
path: '/countdown-timer'
title: 'Countdown Timer'
tier: 'beginner'
---
# Countdown Timer
**Tier:** 1-Beginner
@ -14,31 +20,31 @@ event.
### Constraints
- Use only builtin language functions for your calculations rather than relying
on a library or package like [MomentJS](https://momentjs.com/). This assumes,
of course, that the language of your choice has adequate date and time
manipulation functions built in.
on a library or package like [MomentJS](https://momentjs.com/). This assumes,
of course, that the language of your choice has adequate date and time
manipulation functions built in.
- You may not use any code generators such as the
[Counting Down To](https://countingdownto.com/) site. You should develop your
own original implementation.
[Counting Down To](https://countingdownto.com/) site. You should develop your
own original implementation.
## User Stories
- [ ] User can see an event input box containing an event name field, an
date field, an optional time, and a 'Start' button.
date field, an optional time, and a 'Start' button.
- [ ] User can define the event by entering its name, the date it is
scheduled to take place, and an optional time of the event. If the time is
omitted it is assumed to be at Midnight on the event date in the local time
zone.
scheduled to take place, and an optional time of the event. If the time is
omitted it is assumed to be at Midnight on the event date in the local time
zone.
- [ ] User can see a warning message if the event name is blank.
- [ ] User can see a warning message if the event date or time are incorrectly
entered.
entered.
- [ ] User can see a warning message if the time until the event data and time
that has been entered would overflow the precision of the countdown timer.
that has been entered would overflow the precision of the countdown timer.
- [ ] User can click on the 'Start' button to see the countdown timer start
displaying the days, hours, minutes, and seconds until the event takes place.
displaying the days, hours, minutes, and seconds until the event takes place.
- [ ] User can see the elements in the countdown timer automatically
decrement. For example, when the remaining seconds count reaches 0 the remaining
minutes count will decrement by 1 and the seconds will start to countdown from 59. This progression must take place from seconds all the way up to the remaining days position in countdown display.
decrement. For example, when the remaining seconds count reaches 0 the remaining
minutes count will decrement by 1 and the seconds will start to countdown from 59. This progression must take place from seconds all the way up to the remaining days position in countdown display.
## Bonus features
@ -50,7 +56,7 @@ minutes count will decrement by 1 and the seconds will start to countdown from 5
## Useful links and resources
- Images of analog tube-based countdown timers can be found
[here](https://nixieshop.com/)
[here](https://nixieshop.com/)
- [`clearInterval` MDN](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/clearInterval)
- [`setInterval` MDN](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setInterval)
- [Date MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)

@ -1,3 +1,9 @@
---
path: '/dollars-to-cents'
title: 'Dollars To Cents'
tier: 'beginner'
---
# Dollars To Cents
**Tier:** 1-Beginner
@ -7,7 +13,7 @@ Your task is to let the user input a dollar value (float), assuming that it can
The challenge: Try this without using any frameworks.
(EX. If you have $0.58, I would have 4 coins: 2 quarters, 0 dimes, 1 nickel and 3 pennies)
(EX. If you have \$0.58, I would have 4 coins: 2 quarters, 0 dimes, 1 nickel and 3 pennies)
## User Stories

@ -1,3 +1,9 @@
---
path: '/dynamic-css-variables'
title: 'Dynamic CSS Variables'
tier: 'beginner'
---
# Dynamic CSS Variables
**Tier:** 1-Beginner
@ -18,30 +24,30 @@ changing them from within the app.
## User Stories
- [ ] User can see three two boxes to be used to enter a User ID and Password
along with 'Cancel' and 'Login' buttons underneath them. The default background
color of the text boxes is white.
along with 'Cancel' and 'Login' buttons underneath them. The default background
color of the text boxes is white.
- [ ] User can enter a user id and password into the text boxes.
- [ ] User can click the 'Login' button to validate the user id and password.
- [ ] User can see a warning message if one or both of the text boxes contains
spaces and the background color of the empty text box will change to light
yellow.
spaces and the background color of the empty text box will change to light
yellow.
- [ ] User can see a warning message if the user id doesn't match 'testuser'
and the background color of the text box will change to light red.
and the background color of the text box will change to light red.
- [ ] User can see a warning message if the password doesn't match 'mypassword'
and the background color of the text box will change to light red.
and the background color of the text box will change to light red.
- [ ] User can click the 'Cancel' button to clear the text boxes and reset
their background colors to white.
their background colors to white.
## Bonus features
- [ ] User can see the color of the text box border change when an error is
detected
detected
- [ ] User can see the size and font of the contents of the text box change
when an error is detected.
when an error is detected.
## Useful links and resources
- [Custom properties (--*): CSS variables (MDN)](https://developer.mozilla.org/en-US/docs/Web/CSS/--*)
- [Custom properties (--\*): CSS variables (MDN)](https://developer.mozilla.org/en-US/docs/Web/CSS/--*)
- [CSSStyleDeclaration (MDN)](https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration)
## Example projects

@ -1,3 +1,9 @@
---
path: '/your-first-db-app'
title: 'Your First DB App'
tier: 'beginner'
---
# Your First DB App
**Tier:** 1-Beginner
@ -15,20 +21,21 @@ cross-session persistance.
### Requirements & Constraints
- The primary use case for a browser based database is to maintain state or
status information that needs to persist across sessions, or as a work area
for temporary data. For example, data retrieved from a server that must be
reformatted or cleansed before it's presented to the user.
status information that needs to persist across sessions, or as a work area
for temporary data. For example, data retrieved from a server that must be
reformatted or cleansed before it's presented to the user.
- It is important to keep in mind that since the client-side browser
environment cannot be secured you should not maintain any confidential or
personal identifying information (PII) in a browser based database.
environment cannot be secured you should not maintain any confidential or
personal identifying information (PII) in a browser based database.
- The following Javascript class is provided with the functionality to allow
your app to initially populate and clear the database from the browser so you
can test the query logic you'll be adding. You'll be required to hook up
buttons on the web page you build to the `clearDB` and `loadDB` functions, and
to write your own `queryDB` handler to connect to the `Query DB` button. You'll
also need to add a `queryAllRows` function to the Customer class.
your app to initially populate and clear the database from the browser so you
can test the query logic you'll be adding. You'll be required to hook up
buttons on the web page you build to the `clearDB` and `loadDB` functions, and
to write your own `queryDB` handler to connect to the `Query DB` button. You'll
also need to add a `queryAllRows` function to the Customer class.
```
class Customer {
constructor(dbName) {
@ -135,40 +142,39 @@ const loadDB = () => {
}
```
## User Stories
- [ ] User can see a web page containing a control panel containing three
buttons - 'Load DB', 'Query DB', and 'Clear DB'.
buttons - 'Load DB', 'Query DB', and 'Clear DB'.
- [ ] User can see a notification panel where status messages will be posted.
- [ ] User can see a scrollable log panel where execution details describing
the apps operation and interface with the Customer instance will be posted.
the apps operation and interface with the Customer instance will be posted.
- [ ] User can see a running history of notification panel messages in the log
panel.
panel.
- [ ] User can see a scrollable query results area where retrieved customer
data will be displayed.
data will be displayed.
- [ ] User can click the 'Load DB' button to populate the database with data.
The 'Load DB' button in your UI should be hooked to the `loadDB` event handler
that's provided.
The 'Load DB' button in your UI should be hooked to the `loadDB` event handler
that's provided.
- [ ] User can see a message displayed in the notification panel when the
data load operation starts and ends.
data load operation starts and ends.
- [ ] User can click the 'Query DB' button to list all customers in the query
results area. The 'Query DB' button in your UI should be hooked to a `queryDB`
event handler you will add to the program.
results area. The 'Query DB' button in your UI should be hooked to a `queryDB`
event handler you will add to the program.
- [ ] User can see a message in the notification panel when the query starts
and ends.
and ends.
- [ ] User can see a message in the query results area if there are no rows
to display.
to display.
- [ ] User can click on the 'Clear DB' button to remove all rows from the
database. The 'Clear DB' button in your UI should be hooked to the `clearDB`
event handler that's provided.
database. The 'Clear DB' button in your UI should be hooked to the `clearDB`
event handler that's provided.
- [ ] User can see a message in the notification panel when the clear
operation starts and ends.
operation starts and ends.
## Bonus features
- [ ] User can see buttons enabled and disabled according to the following
table.
table.
| State | Load DB | Query DB | Clear DB |
|---------------------|----------|----------|----------|
@ -178,8 +184,8 @@ table.
| Clear DB clicked | enabled | enabled | disabled |
- [ ] User can see additional Customer data fields added to those included
in the code provided. Developer should add date of last order and total sales
for the year.
in the code provided. Developer should add date of last order and total sales
for the year.
- [ ] Developer should conduct a retrospection on this project:
- What use cases can you see for using IndexedDB in your frontend apps?
- What advantages and disadvantages can you see over using a file or
@ -187,7 +193,6 @@ for the year.
- In general, what criteria might you use to determine if IndexedDB is right
for your app. (Hint: 100% yes or no is not a valid answer).
## Useful links and resources
- [IndexedDB Concepts (MDN)](http://tinyw.in/7TIr)

@ -1,3 +1,9 @@
---
path: '/flip-image'
title: 'FlipImage'
tier: 'beginner'
---
# FlipImage
**Tier:** 1-Beginner

@ -1,3 +1,9 @@
---
path: '/github-status'
title: 'Github Status'
tier: 'beginner'
---
# GitHub Status
**Tier:** 1-Beginner
@ -18,17 +24,17 @@ to develop it using your language of choice!
## User Stories
- [ ] User can see the current status for GitHub Git operations, API Requests,
Operational Issues, PRs, Dashboard, & Projects, Operational Notifications,
Operational Gists, and Operational GitHub Pages as a list in the main app
window.
Operational Issues, PRs, Dashboard, & Projects, Operational Notifications,
Operational Gists, and Operational GitHub Pages as a list in the main app
window.
- [ ] User can retrieve the most recent status from the GitHub Status web
site by clicking a 'Get Status' button.
site by clicking a 'Get Status' button.
## Bonus features
- [ ] User can see any of the GitHub components that are not in 'Operational'
status highlighted by a different color, background animation, or any other
technique to make it stand out. Use your imagination!
status highlighted by a different color, background animation, or any other
technique to make it stand out. Use your imagination!
## Useful links and resources
@ -37,9 +43,10 @@ technique to make it stand out. Use your imagination!
- [Javascript JSON (MDN)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON)
- [Javascript Object Notation](https://json.org/)
- Hint! You can use the following code to display the JSON for the GitHub Status
web site page from the command line command `node ghstatus`. You can use this
output to determine which JSON element contain the status information you'll
need to develop this app.
web site page from the command line command `node ghstatus`. You can use this
output to determine which JSON element contain the status information you'll
need to develop this app.
```
ghstatus.js

@ -1,3 +1,9 @@
---
path: '/hello-app'
title: 'Hello App'
tier: 'beginner'
---
# Hello
**Tier:** 1-Beginner

@ -1,3 +1,9 @@
---
path: '/iot-mailbox-simulator'
title: 'IOT Mailbox Simulator'
tier: 'beginner'
---
# IOT Mailbox Simulator
**Tier:** 1-Beginner
@ -11,13 +17,14 @@ on one another.
### Requirements & Constraints
- Even though this app is specified using Javascript concepts and terminology
you are free to implement it in the language of your choice.
you are free to implement it in the language of your choice.
- The following Javascript class is provided to start and stop the monitoring
process, and to signal the app web page with the state of the mailbox door
(open or closed) at preset intervals. Keep in mind that the interval you specify
shouldn't exceed the time it normally takes to open or close the door or you
might miss a delivery!
process, and to signal the app web page with the state of the mailbox door
(open or closed) at preset intervals. Keep in mind that the interval you specify
shouldn't exceed the time it normally takes to open or close the door or you
might miss a delivery!
```
/**
* Monitor the light levels inside an IOT enabled snail mailbox to detect
@ -81,32 +88,32 @@ class IOTMailbox {
## User Stories
- [ ] User can see a web page containing a control panel containing three
buttons - 'Start Monitoring', 'Stop Monitoring', and 'Reset'.
buttons - 'Start Monitoring', 'Stop Monitoring', and 'Reset'.
- [ ] User can see a notification panel where the mailbox status will be posted.
- [ ] User can see a scrollable log panel where execution details describing
the apps operation and interface with the IOTMailbox instance will be posted.
the apps operation and interface with the IOTMailbox instance will be posted.
- [ ] User can click the 'Start Monitoring' button to begin receiving state
notifications from the mailbox.
notifications from the mailbox.
- [ ] User can see a message added to the log panel when monitoring starts.
- [ ] User can see a message added to the log panel for light level passed
through the callback function. This should include the numerical light level
and whether the door is open or closed.
through the callback function. This should include the numerical light level
and whether the door is open or closed.
- [ ] User can see a message added to the notification panel when the door has
been opened.
been opened.
- [ ] User can click the 'Stop Monitoring' button to stop receiving state
notifications from the mailbox.
notifications from the mailbox.
- [ ] User can see a message added to the log panel when monitoring stops.
## Bonus features
- [ ] User can see the 'Start Monitoring' button disabled until monitoring is
stopped.
stopped.
- [ ] User can see the 'Stop Monitoring' button disabled until monitoring is
started.
started.
- [ ] User can see an field in the control panel allowing the length of the
monitoring interval to be specified.
monitoring interval to be specified.
- [ ] User can see a message added to the notification panel if the door is
left open.
left open.
- [ ] User can hear an audible alert when the door is opened.
## Useful links and resources

@ -1,3 +1,9 @@
---
path: '/json-2-csv-app'
title: 'JSON2CSV App'
tier: 'beginner'
---
# JSON2CSV
**Tier:** 1-Beginner
@ -12,13 +18,13 @@ The objective of JSON2CSV is to help bridge the gap between JSON and CSV by
converting JSON to CSV to make it easier to review data in a spreadsheet. It
allows the user to paste JSON into a text box to generate its equivalent CSV.
### Constraints ###
### Constraints
- You may not use any libraries or packages designed to perform this type of
conversion.
conversion.
- If you choose to implement this in JavaScript don't use complicated looping
in your first implementation. Instead, use `Object.keys()` and `Object.values`
to generate CSV for the header and data rows.
in your first implementation. Instead, use `Object.keys()` and `Object.values`
to generate CSV for the header and data rows.
- Nested JSON structures are not supported.
## User Stories

@ -1,12 +1,19 @@
---
path: '/javascript-validation-with-regex'
title: 'Javascript Validation With Regex'
tier: 'beginner'
---
# Javascript Validation With Regex
**Tier:** 1-Beginner
In this challenge, you'd create a javascript validation script to validate the inputs entered by a user using RegEx.
You could always refer to the [Regular Expression Library](http://regexlib.com/(X(1)A(GijS7qxVy-6Gyc4cweUyFoK4ZvRn2WnlOe8SSKuq9sT7ps-2nbiTmZZMTCn_rFk4-mNoGnYL-DPU8pJhmNNOtkP-syqWE4WO_1aVt4bPa5nTsQPQe6VRAALnm6QW3YIWbYkVS78JFbZN39vmMI1UYiWlHXKwNMB99WjsZOn0qc_8dcN0unp2KMOBw0P__3OH0))/CheatSheet.aspx?AspxAutoDetectCookieSupport=1) for support
You could always refer to the [Regular Expression Library](<http://regexlib.com/(X(1)A(GijS7qxVy-6Gyc4cweUyFoK4ZvRn2WnlOe8SSKuq9sT7ps-2nbiTmZZMTCn_rFk4-mNoGnYL-DPU8pJhmNNOtkP-syqWE4WO_1aVt4bPa5nTsQPQe6VRAALnm6QW3YIWbYkVS78JFbZN39vmMI1UYiWlHXKwNMB99WjsZOn0qc_8dcN0unp2KMOBw0P__3OH0))/CheatSheet.aspx?AspxAutoDetectCookieSupport=1>) for support
For this project, there'd be three required inputs for validation:
- The first would require the user to enter five (5) capital letters, six (6) symbols and two hyphens (-) in any order. This could be used as a password.
- The second which could be used as username would require the user to enter letters without spaces
- The third which could be used as email address would require the user to enter only email addresses on gmail (...@gmail.com).

@ -1,3 +1,9 @@
---
path: '/key-value-app'
title: 'Key Value App'
tier: 'beginner'
---
# Key Value
**Tier:** 1-Beginner
@ -16,19 +22,19 @@ time a key is pressed on the keyboard.
## User Stories
- [ ] User can see a display panel containing a text area where the key value
and key code will be displayed along with display areas for four other
indicators related to the keys on the keyboard - alt key, control key,
meta key, and shift key.
and key code will be displayed along with display areas for four other
indicators related to the keys on the keyboard - alt key, control key,
meta key, and shift key.
- [ ] User can see the key code and key value displayed in the display panel
corresponding to the key when it is pressed.
corresponding to the key when it is pressed.
- [ ] User can see the appropriate indicator change from 'False' to 'True'
when the alt, control, meta, or shift key is pressed.
when the alt, control, meta, or shift key is pressed.
## Bonus features
- [ ] User can hear a unique tone played when a key is pressed.
- [ ] User can see the background color of the key code and value change when
a key is pressed.
a key is pressed.
## Useful links and resources

@ -1,3 +1,9 @@
---
path: '/lorem-ipsum-generator'
title: 'Lorem Ipsum Generator'
tier: 'beginner'
---
# Lorem Ipsum Generator
**Tier:** 1-Beginner

@ -1,3 +1,9 @@
---
path: '/notes-app'
title: 'Notes App'
tier: 'beginner'
---
# Notes App
**Tier:** 1-Beginner

@ -1,3 +1,9 @@
---
path: '/pearson-regression'
title: 'Pearson Regression'
tier: 'beginner'
---
# Pearson Regression
**Tier:** 1-Beginner
@ -27,17 +33,17 @@ set of car prices this would let the user test whether or not they are related
## User Stories
- [ ] User can see an input panel with two input fields allowing entry of `x`
and `y` coordinates, and 'Add' and 'Calculate' buttons.
and `y` coordinates, and 'Add' and 'Calculate' buttons.
- [ ] User can enter numbers into these boxes where `x` and `y` are observations
from the two data sets.
from the two data sets.
- [ ] User can click the 'Add' button to add the `x` and `y` to a tabular
output area listing the pairs of observations.
output area listing the pairs of observations.
- [ ] User can see and error message if either of the two input fields are
empty or do not contain valid real numbers.
empty or do not contain valid real numbers.
- [ ] User can see the 'Calculate' button is disabled until errors have been
corrected.
corrected.
- [ ] User can click the 'Calculate' button to perform the regression analysis
and to display its results.
and to display its results.
- [ ] User can see results of the calculation which include:
- Arithmetic means for both the `x` and `y` observations
- Standard deviations for both the `x` and `y` observations

@ -1,3 +1,9 @@
---
path: '/pomodoro-clock'
title: 'Pomodoro Clock'
tier: 'beginner'
---
# Pomodoro Clock
**Tier:** 1-Beginner

@ -1,3 +1,9 @@
---
path: '/product-landing-page'
title: 'Product Landing Page'
tier: 'beginner'
---
# Product Landing Page
**Tier:** 1-Beginner

@ -1,3 +1,9 @@
---
path: '/quiz-app'
title: 'Quiz App'
tier: 'beginner'
---
# Quiz App
**Tier:** 1-Beginner

@ -1,3 +1,9 @@
---
path: '/random-meal-generator'
title: 'Random Meal Generator'
tier: 'beginner'
---
# Random Meal Generator
**Tier:** 1-Beginner

@ -1,3 +1,9 @@
---
path: '/recipe-app'
title: 'Recipe App'
tier: 'beginner'
---
# Recipe
**Tier:** 1-Beginner
@ -12,32 +18,32 @@ that will make them easy to follow.
### Constraints
- For the initial version of this app the recipe data may be encoded as a
JSON file. After implementing the initial version of this app you may
expand on this to maintain recipes in a file or database.
JSON file. After implementing the initial version of this app you may
expand on this to maintain recipes in a file or database.
## User Stories
- [ ] User can see a list of recipe titles
- [ ] User can click a recipe title to display a recipe card containing the
recipe title, meal type (breakfast, lunch, supper, or snack), number of people
it serves, its difficulty level (beginner, intermediate, advanced), the list
of ingredients (including their amounts), and the preparation steps.
recipe title, meal type (breakfast, lunch, supper, or snack), number of people
it serves, its difficulty level (beginner, intermediate, advanced), the list
of ingredients (including their amounts), and the preparation steps.
- [ ] User click a new recipe title to replace the current card with a new
recipe.
recipe.
## Bonus features
- [ ] User can see a photo showing what the item looks like after it has
been prepared.
been prepared.
- [ ] User can search for a recipe not in the list of recipe titles by
entering the meal name into a search box and clicking a 'Search' button. Any
open source recipe API may be used as the source for recipes (see The MealDB
below).
entering the meal name into a search box and clicking a 'Search' button. Any
open source recipe API may be used as the source for recipes (see The MealDB
below).
- [ ] User can see a list of recipes matching the search terms
- [ ] User can click the name of the recipe to display its recipe card.
- [ ] User can see a warning message if no matching recipe was found.
- [ ] User can click a 'Save' button on the cards for recipes located through
the API to save a copy to this apps recipe file or database.
the API to save a copy to this apps recipe file or database.
## Useful links and resources

@ -1,3 +1,9 @@
---
path: '/roman-to-decimal-numbers-converter'
title: 'Roman to Decimal numbers Converter'
tier: 'beginner'
---
# Roman to Decimal numbers Converter
**Tier:** 1-Beginner

@ -1,3 +1,9 @@
---
path: '/slider-design'
title: 'Slider Design'
tier: 'beginner'
---
# Slider Design
**Tier:** 1-Beginner

@ -1,3 +1,9 @@
---
path: '/stopwatch-app'
title: 'Stopwatch App'
tier: 'beginner'
---
# Stopwatch App
**Tier:** 1-Beginner

@ -1,3 +1,9 @@
---
path: '/true-or-false-app'
title: 'TrueOrFalse App'
tier: 'beginner'
---
# TrueOrFalse
**Tier:** 1-Beginner

@ -1,3 +1,9 @@
---
path: '/vigenere-cipher'
title: 'Vigenere Cipher'
tier: 'beginner'
---
# Vigenere Cipher
**Tier:** 1-Beginner
@ -20,16 +26,13 @@ Cipher to learn the basics of how ciphers work.
### Requirements & Constraints
- Developers should use only native language features to implement the Vigenere
Cipher. Libraries are not allowed.
Cipher. Libraries are not allowed.
- Developers should design and implement their own solution using only the
description of the steps in the Vigenere Cipher algorithm.
description of the steps in the Vigenere Cipher algorithm.
- After successfully implementing this algorithm Developer should ask
themselves these questions:
- Would you feel confident encrypting your financial information using the
Vigenere Cipher? Why?
- How would you detect that a message had been encrypted using the
Vigenere Cipher?
- How would you go about trying to crack this encryption?
themselves these questions: - Would you feel confident encrypting your financial information using the
Vigenere Cipher? Why? - How would you detect that a message had been encrypted using the
Vigenere Cipher? - How would you go about trying to crack this encryption?
## User Stories
@ -39,24 +42,24 @@ themselves these questions:
- Action buttons - 'Encrypt' and 'Decrypt'
- Resulting encrypted or decrypted message
- [ ] User can enter the text to be encrypted in the plain text message input
field
field
- [ ] User can enter the Encryption key the Vigenere algorithm will use to
encrypt the plain text message.
encrypt the plain text message.
- [ ] User can click see see the 'Decrypt' button disabled until the plain
text has been encrypted.
text has been encrypted.
- [ ] User can click the 'Encrypt' button to encrypt the plain text message
- [ ] User can see the encrypted message displayed in the result field.
- [ ] User can see the 'Decrypt' button enabled after the encrypted message
has been displayed.
has been displayed.
- [ ] User can click the 'Decrypt' button to decrypt the encrypted message
and to display its contents in the result field.
and to display its contents in the result field.
## Bonus features
- [ ] User can see a 'Compare' button after decryption that compares the
original plain text message with the decrypted message
original plain text message with the decrypted message
- [ ] User can see an error message if the 'Compare' detects differences
in the contents of these two fields.
in the contents of these two fields.
## Useful links and resources

@ -1,3 +1,9 @@
---
path: '/windchill-app'
title: 'Windchill App'
tier: 'beginner'
---
# Windchill
**Tier:** 1-Beginner

@ -1,3 +1,9 @@
---
path: '/word-frequency-app'
title: 'Word Frequency App'
tier: 'beginner'
---
# Word Frequency
**Tier:** 1-Beginner

@ -1,3 +1,9 @@
---
path: '/bit-masks-app'
title: 'Bit Masks'
tier: 'intermediate'
---
# Bit Masks
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/book-finder-app'
title: 'Book Finder App'
tier: 'intermediate'
---
# Book Finder App
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/card-memory-game'
title: 'Card-Memory-Game'
tier: 'intermediate'
---
# Card-Memory-Game
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/charity-finder'
title: 'Charity Finder'
tier: 'intermediate'
---
# Charity Finder
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/chrome-theme-extension'
title: 'Chrome Theme Extension'
tier: 'intermediate'
---
# Chrome Theme Extension
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/drawing-app'
title: 'Drawing App'
tier: 'intermediate'
---
# Drawing App
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/emoji-translator-app'
title: 'Emoji Translator App'
tier: 'intermediate'
---
# Emoji Translator
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/flash-cards-app'
title: 'FlashCards App'
tier: 'intermediate'
---
# FlashCards
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/flip-art-app'
title: 'Flip Art App'
tier: 'intermediate'
---
# Flip Art
**Tier:** 2-Intermediate

@ -1,3 +1,8 @@
---
path: '/game-suggestion-app'
title: 'Game Suggestion App'
tier: 'intermediate'
---
# Game suggestion app

@ -1,3 +1,9 @@
---
path: '/github-profiles'
title: 'Github Profiles'
tier: 'intermediate'
---
# GitHub Profiles
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/high-striker-game'
title: 'HighStriker Game'
tier: 'intermediate'
---
# HighStriker
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/image-scanner'
title: 'Image Scanner'
tier: 'intermediate'
---
# Image Scanner
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/markdown-previewer'
title: 'Markdown Previewer'
tier: 'intermediate'
---
# Markdown Previewer
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/markdown-table-generator'
title: 'Markdown Table Generator'
tier: 'intermediate'
---
# Markdown Table Generator
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/meme-generator-app'
title: 'Meme Generator App'
tier: 'intermediate'
---
# Meme Generator App
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/name-generator'
title: 'Name Generator'
tier: 'intermediate'
---
# Name generation using Recurrent Neural Networks
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/password-generator'
title: 'Password Generator'
tier: 'intermediate'
---
# Password Generator
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/podcast-directory-app'
title: 'Podcast Directory App'
tier: 'intermediate'
---
# Podcast Directory
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/qr-code-badge-app'
title: 'QRCode Badge Generator App'
tier: 'intermediate'
---
# QRCode Badge Generator
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/regular-expression-helper-app'
title: 'Regular Expression Helper App'
tier: 'intermediate'
---
# Regular Expression Helper
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/sales-db-app'
title: 'Sales DB App'
tier: 'intermediate'
---
# Sales Reciepts
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/simple-online-store'
title: 'Simple Online Store'
tier: 'intermediate'
---
# Simple Online Store
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/sports-bracket-generator'
title: 'Sports Bracket Generator'
tier: 'intermediate'
---
# Sports Bracket Generator
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/string-art'
title: 'StringArt'
tier: 'intermediate'
---
# StringArt
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/this-or-that-game'
title: 'This or That Game'
tier: 'intermediate'
---
# This or That Game
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/timezone-slackbot'
title: 'Timezone Slackbot - TZ'
tier: 'intermediate'
---
# Timezone Slackbot - TZ
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/to-do-app'
title: 'To-Do App'
tier: 'intermediate'
---
# To-Do App
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/typing-practice-app'
title: 'Typing Practice App'
tier: 'intermediate'
---
# Typing Practice
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/voting-app'
title: 'Voting App'
tier: 'intermediate'
---
# Voting App
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/math-formula-editor'
title: 'Math Formula Editor'
tier: 'intermediate'
---
# Math Formula Editor
**Tier:** 2-Intermediate

@ -1,3 +1,9 @@
---
path: '/battleship-bot'
title: 'Battleship Bot'
tier: 'advanced'
---
# Battleship Bot
**Tier:** 3-Advanced

@ -1,3 +1,9 @@
---
path: '/battleship-game-engine'
title: 'Battleship Game Engine'
tier: 'advanced'
---
# Battleship Game Engine
**Tier:** 3-Advanced

@ -1,3 +1,9 @@
---
path: '/boole-bots-game'
title: 'Boole Bots Game'
tier: 'advanced'
---
# Boole Bots Game
**Tier:** 3-Advanced
@ -25,6 +31,7 @@ continue moving about the arena until only one remains.
- Arena of 8x8 game tiles where the bots battle
### Game Configuration Panel
- [ ] User can see a game configuration panel with these subcomponents:
- Four bot panels with controls to allow the user to input a unique bot
name, select its Boolean value and operation, select the bots speed using a
@ -32,58 +39,61 @@ continue moving about the arena until only one remains.
East, West
- [ ] User can enter a unique name for each bot into an input text box
- [ ] User can see an error message if the name entered is the same name
assigned to another bot.
assigned to another bot.
- [ ] User can select the bots Boolean value (0 or 1) from a dropdown.
- [ ] User can select a bots Boolean operation from a dropdown - AND, OR, XOR,
or NOT.
or NOT.
- [ ] User can move the speed slider to set a bots speed
- [ ] User can select a bots starting direction from the direction dropdown.
- [ ] User can see the bot randomly assigned to a tile in the arena once its
name has been defined.
name has been defined.
### Game Controls
- [ ] User can a button in the game control panel to 'Battle!'
- [ ] User can click the 'Battle!' button to start the bot battle in the arena.
- [ ] User can see bots move based on the speed and direction assigned to them.
- [ ] User can see the 'Battle!' button text change to 'Stop!' once a battle
is started.
is started.
- [ ] User can click the 'Stop!' button to halt gameplay
- [ ] User can see the 'Stop!' button text change back to 'Battle!' once a
single bot wins the match.
single bot wins the match.
### Arena
- [ ] User can see bots bounce off the boundary walls of the arena in a new
direction
direction
- [ ] User can see bots pause for an instant when they collide.
- [ ] User can see a bot disappear after colliding if the result of it's
boolean operation appied to its boolean value and that of the bot is has
collided with result in 0.
boolean operation appied to its boolean value and that of the bot is has
collided with result in 0.
- [ ] User can see a bot that wins a collision resume its path at the same
speed and direction.
speed and direction.
- [ ] User can see both colliding bots resume their paths at the same speed
and direction in the event of a tie. In other words, when the collision resulted
in the same boolean result (0 or 1) for both.
and direction in the event of a tie. In other words, when the collision resulted
in the same boolean result (0 or 1) for both.
- [ ] User can see gameplay stop when only one bot remains.
### Leaderboard
- [ ] User can see the display of wins and losses for each bot on the
leaderboard
leaderboard
- [ ] User can see the tally of wins incremented for bots winning a collision.
- [ ] User can see the tally of losses decremented for bots loosing a collision.
## Bonus features
- [ ] User can see a log panel displaying the details of game milestones.
Hint: This may be useful to the Developer during development and debugging.
Hint: This may be useful to the Developer during development and debugging.
- [ ] User can see a game clock displaying current elapsed game time that is
updated every second.
updated every second.
- [ ] User may choose a bots starting direction as North, Northeast, Southeast,
South, Southwest, West, or Northwest.
South, Southwest, West, or Northwest.
- [ ] User may specify the dimensions of the arena.
- [ ] User may select an unique icon for a bot from a palette of icons. Icons
in the palette are disabled once they are assigned.
in the palette are disabled once they are assigned.
- [ ] User can see the bot with the most wins highlighted in some way in the
Leaderboard.
Leaderboard.
## Useful links and resources

@ -1,3 +1,9 @@
---
path: '/bug-race-game'
title: 'Bug Race Game'
tier: 'advanced'
---
# Bug Race
**Tier:** 3-Advanced
@ -9,14 +15,15 @@ be customized including bug icons, assigning names to the bugs, making a choice
of who the winner might be, and bug speed.
### Constraints
- The developer will need to select the bug icons to be used in the game
- The developer should randomly adjust the speed of each bug before a race
starts so they travel at different rates within the speed selected by the
user (slow, normal, or fast).
starts so they travel at different rates within the speed selected by the
user (slow, normal, or fast).
- It is up to the developer to define the speed ranges associated with the slow,
normal, and fast speed setting.
normal, and fast speed setting.
- You may use an animation library, but you'll get more out of this project
if you try to implement it using native language features.
if you try to implement it using native language features.
## User Stories
@ -29,37 +36,38 @@ if you try to implement it using native language features.
- A 'Start' button.
### Game Controls
- [ ] User can see the following controls in the input panel.
- A list of race lane numbers with radio buttons for each showing
thumbnails for three unique bugs, and a text box the user can use to
give the bug a name.
- An Speed selection control with three radio buttons - Slow, Normal, Fast
- [ ] User can click a radio button to select the bug icon to be assigned
to a lane.
to a lane.
- [ ] User can see an warning message if the same icon is selected for more
than one lane.
than one lane.
- [ ] User can enter a name for the bug in each lane.
- [ ] User can see an error message if the same name is repeated for more than
one bug.
one bug.
- [ ] User can select the bug speed by clicking one of the Speed radio buttons
### Racing
- [ ] User can select a potential winner by clicking on the radio button on
any lane.
any lane.
- [ ] User can start a race by clicking on the 'Start' button
- [ ] User can see the 'Start' button is disabled until the race is over
- [ ] User can see an error message if no winner was selected.
- [ ] User can see bugs race across their assigned lane to the finish line
- [ ] User can see all bugs stop moving when the first one reaches the finish
line
line
- [ ] User can see game metrics updated to show the number of races run in
this session.
this session.
## Bonus features
- [ ] User can see race metrics for each bug showing the number of races
run, number of wins, and number of losses.
run, number of wins, and number of losses.
- [ ] User can see the winning bug bounce when it wins a race
- [ ] User can see loosing bugs flip on their backs when they loose a race
- [ ] User can hear unique sounds played when the race starts and ends.
@ -67,8 +75,7 @@ run, number of wins, and number of losses.
## Useful links and resources
- [3D Bug Images](https://www.google.com/search?q=3d+bug+drawings&tbm=isch&source=hp&sa=X&ved=2ahUKEwjxkNT7--jhAhUI-6wKHW3_CgQQsAR6BAgHEAE&biw=1279&bih=550)
- [Basic Animations (MDN)](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Basic_animations
)
- [Basic Animations (MDN)](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Basic_animations)
- [How to build a simple Sprite animation in Javascript](https://medium.com/dailyjs/how-to-build-a-simple-sprite-animation-in-javascript-b764644244aa)
- [Javascript Animations](https://javascript.info/animation)

@ -1,3 +1,9 @@
---
path: '/calorie-counter-app'
title: 'Calorie Counter App'
tier: 'advanced'
---
# Calorie Counter
**Tier:** 3-Advanced
@ -19,27 +25,27 @@ search at runtime (hint: take a look at the CSV file format).
## User Stories
- [ ] Developer will create a JSON file containing the food items to be
searched. This will be loaded when the app is started.
searched. This will be loaded when the app is started.
- [ ] User can see an panel containing a food description input text box,
a 'Search' button, and a 'Clear' button.
a 'Search' button, and a 'Clear' button.
- [ ] User can enter search terms into the food description input text box.
- [ ] User can click on the 'Search' button to search for the matching food.
- [ ] User can see and warning message if no search terms were entered.
- [ ] User can see a warning message if no matches were found.
- [ ] User can see a list of the matching food items, portion sizes, and
calories in a scrollable results panel that is limited to 25 entries.
calories in a scrollable results panel that is limited to 25 entries.
- [ ] User can click on the 'Clear' button to clear the search terms and
results list.
results list.
## Bonus features
- [ ] User can see the count of the number of matching food items adjacent to
the results list.
the results list.
- [ ] User can use a wildcard character in search terms.
- [ ] User can see more than 25 entries from a search by clicking a Down
icon button to add more matching food items to the search results list.
icon button to add more matching food items to the search results list.
- [ ] Developer will implement load the MyPyramid data into a database or a
data structure other than an array for faster searching.
data structure other than an array for faster searching.
## Useful links and resources

@ -1,3 +1,9 @@
---
path: '/chat-app'
title: 'Chat App'
tier: 'advanced'
---
# Chat App
**Tier:** 3-Advanced

@ -1,3 +1,9 @@
---
path: '/contribution-tracker-app'
title: 'Contribution Tracker App'
tier: 'advanced'
---
# Contribution Tracker
**Tier:** 3-Advanced
@ -12,41 +18,37 @@ purposes. For example, for tax reporting.
### Constraints
- Developers may use Vanilla JS, or a framework of their choice (like React,
VueJS, etc.).
VueJS, etc.).
- Developers should not use libraries for calculating and manipulating monetary
amounts. All calculation and formatting should be done in the language chosen
to develop the application.
amounts. All calculation and formatting should be done in the language chosen
to develop the application.
- Developers may use a graphics presentation library or service of their choice,
like [AMCharts](https://www.amcharts.com/).
like [AMCharts](https://www.amcharts.com/).
- Developers may choose to have transactions persist across sessions using
either files or databases. Sensitive data, like transactions, must not be
maintained in local storage. Remember that although you can implement
protections it is impossible to totally secure browser applications.
either files or databases. Sensitive data, like transactions, must not be
maintained in local storage. Remember that although you can implement
protections it is impossible to totally secure browser applications.
## User Stories
- [ ] User can see a Navigation Bar at the top of each page containing the
application name and a "hamburger" menu with these option:
- Dashboard
- Transactions
application name and a "hamburger" menu with these option: - Dashboard - Transactions
- [ ] User can see a Footer Bar at the bottom of each page containing an
About link
About link
### Dashboard Page
- [ ] User can see the Dashboard page when the app is started containing
graphical summaries of the following key metrics. The graphical representation
for each is left up to the Developer.
- Contributions by month for the current year
- Total contributions by year
- Contribution increase/decrease by year
- Average contribution amount by month and year
graphical summaries of the following key metrics. The graphical representation
for each is left up to the Developer. - Contributions by month for the current year - Total contributions by year - Contribution increase/decrease by year - Average contribution amount by month and year
- [ ] User can return to the Dashboard page, if currently on another page, by
clicking on the 'Dashboard' option in the hamburger menu in the Navigation Bar.
clicking on the 'Dashboard' option in the hamburger menu in the Navigation Bar.
### Transactions Page
- [ ] User can see a transaction input panel containing the following:
- Transaction date
- Payee name
@ -54,50 +56,48 @@ clicking on the 'Dashboard' option in the hamburger menu in the Navigation Bar.
- Memo
- Action buttons - 'Clear', 'Add'
- [ ] User can see a tabular transaction ledger containing previously
entered transactions. Each row will also contain a 'Modify' and a 'Delete'
button.
entered transactions. Each row will also contain a 'Modify' and a 'Delete'
button.
- [ ] User can enter values describing the transaction into the input fields
- [ ] User can click the 'Clear' button to reset all input fields to an
empty state.
empty state.
- [ ] User can click the 'Add' button to validate the input that has been
entered, add the validated entry to the transaction ledger, and clear the input
fields.
entered, add the validated entry to the transaction ledger, and clear the input
fields.
- [ ] User can see a consolidated error message detailing any errors detected
in input fields, including:
- Invalid date
- Blank Payee name
- Non-numeric amount field
in input fields, including: - Invalid date - Blank Payee name - Non-numeric amount field
- [ ] User can click on the 'Update' button to modify a previously entered
transaction. The transaction details will be copied to the transaction input
panel and the 'Add' button will change to 'Modify'.
transaction. The transaction details will be copied to the transaction input
panel and the 'Add' button will change to 'Modify'.
- [ ] User can change values in the input fields and click the 'Modify' to
validate the input and update that transactions entry in the ledger. If
successful the 'Modify' button will change back to 'Add' and the input fields
will be cleared.
validate the input and update that transactions entry in the ledger. If
successful the 'Modify' button will change back to 'Add' and the input fields
will be cleared.
- [ ] User can click the 'Delete' button to remove a previously entered
transaction. A popup dialog will be displayed containing 'Cancel' and 'Okay'
buttons to cancel or confirm the delete. If the delete is confirmed the
transaction will be removed from the ledger.
transaction. A popup dialog will be displayed containing 'Cancel' and 'Okay'
buttons to cancel or confirm the delete. If the delete is confirmed the
transaction will be removed from the ledger.
- [ ] User can return to the Transactions page, if currently on another page,
by clicking on the 'Transactions' option in the hamburger menu in the Navigation
Bar.
by clicking on the 'Transactions' option in the hamburger menu in the Navigation
Bar.
### About Page
- [ ] User can click the About link in the Footer Bar to display information
about the Developer.
about the Developer.
- [ ] User can see links to the Developers GitHub and social media accounts
including social media icons (like the Twitter icon).
including social media icons (like the Twitter icon).
## Bonus features
- [ ] User can click in the transaction date field to display a calendar
the date can be selected from rather than manually entering it.
the date can be selected from rather than manually entering it.
- [ ] User can see alternating row background colors in the transaction ledger.
- [ ] User can click on a column heading in the transaction ledger to toggle
the sort sequence on the values in that column.
the sort sequence on the values in that column.
- [ ] User can see a PDF option near the Transaction Ledger to create a PDF
of all transactions (Hint: checkout how this capability can be implemented via
[Puppeteer](https://github.com/GoogleChrome/puppeteer)).
of all transactions (Hint: checkout how this capability can be implemented via
[Puppeteer](https://github.com/GoogleChrome/puppeteer)).
## Useful links and resources

@ -1,3 +1,9 @@
---
path: '/elevator-app'
title: 'Elevator App'
tier: 'advanced'
---
# Elevator
**Tier:** 3-Advanced
@ -16,48 +22,48 @@ they wish to go to.
### Constraints
- You must implement a single event handler for the up and down buttons on
each floor. For example, if there are 4 floors a single event handler should
be implemented rather than 8 (two buttons per floor).
each floor. For example, if there are 4 floors a single event handler should
be implemented rather than 8 (two buttons per floor).
- Similarly, a single event handler should be implemented for all buttons on
the control panel in the elevator rather than a unique event handler for each
button.
the control panel in the elevator rather than a unique event handler for each
button.
## User Stories
- [ ] User can see a cross section diagram of a building with four floors,
an elevator shaft, the elevator, and an up button on the first floor, up and
down buttons on the second and third floors, and a down button on the fourth
floor.
an elevator shaft, the elevator, and an up button on the first floor, up and
down buttons on the second and third floors, and a down button on the fourth
floor.
- [ ] User can see the elevator control panel with a button for each of the
floors to the side of the diagram.
floors to the side of the diagram.
- [ ] User can click the up and down button on any floor to call the
elevator.
elevator.
- [ ] User can expect that clicking the up and down buttons on any floor
to request the elevator will be queued and serviced in the sequence they were
clicked.
to request the elevator will be queued and serviced in the sequence they were
clicked.
- [ ] User can see the elevator move up and down the shaft to the floor it
was called to.
was called to.
- [ ] User can click the elevator control panel to select the floor it
should travel to.
should travel to.
- [ ] User can expect the elevator to pause for 5 seconds waiting for a
floor button on the control panel to be clicked. If a floor button isn't
clicked within that time the elevator will process the next call request.
floor button on the control panel to be clicked. If a floor button isn't
clicked within that time the elevator will process the next call request.
- [ ] User can expect the elevator to return to the first floor when there
are no requests to process.
are no requests to process.
## Bonus features
- [ ] User can see a warning sound if the number of elevator requests
exceeds the maximum number allowed. This limit is left to the developer.
exceeds the maximum number allowed. This limit is left to the developer.
- [ ] User can hear a sound when the elevator arrives at a floor.
- [ ] User can see an occupant randomly arrive at a floor to indicate when
the user should click the up or down elevator call button on that floor.
the user should click the up or down elevator call button on that floor.
- [ ] User can specify the time interval between new occupants arriving to
call an elevator.
call an elevator.
## Useful links and resources
[First-in, first out queue (Wikipedia)](https://en.wikipedia.org/wiki/FIFO_(computing_and_electronics))
[First-in, first out queue (Wikipedia)](<https://en.wikipedia.org/wiki/FIFO_(computing_and_electronics)>)
## Example projects

@ -1,3 +1,9 @@
---
path: '/fast-food-simulator-app'
title: 'Fast Food Simulator App'
tier: 'advanced'
---
# Fast Food Simulator App
**Tier:** 3-Advanced
@ -26,48 +32,49 @@ interact and incrementally build the app following Agile principles.
### Constraints
- Order tickets can be represented as two different types of Promises - one
the Server waits on while the Cook prepares the order and another the Customer
waits on while in the serving line.
the Server waits on while the Cook prepares the order and another the Customer
waits on while in the serving line.
- Use the native equivalent of JS Promises in whichever language you choose
to develop in. JS developers should use native Promises and not `async/await`.
to develop in. JS developers should use native Promises and not `async/await`.
- Create this app using native language features. You may NOT use a simulation
package or library.
package or library.
- New customers arrive in the order line at a fixed interval of time. In other
words, new customers arrive at a constant rate.
words, new customers arrive at a constant rate.
- Order tickets are fulfilled at a fixed interval of time as well. They are
completed at a constant rate.
completed at a constant rate.
## User Stories
### Application Operation
- [ ] User can see an input area that allows the entry of the time interval
for customer arrival and a time interval for the fulfilment of an
_order ticket_ by the cook.
for customer arrival and a time interval for the fulfilment of an
_order ticket_ by the cook.
- [ ] User can see a customized warning message if the customer arrival
interval or the order fulfilment interval is incorrectly entered.
interval or the order fulfilment interval is incorrectly entered.
- [ ] User can start the simulation by clicking on a Start button.
- [ ] User can see an order line area containing a text box showing the
number of customers waiting to place orders.
number of customers waiting to place orders.
- [ ] User can see an order area containing text boxes showing the
_order number_ currently being taken.
_order number_ currently being taken.
- [ ] User can see a kitchen area containing a text box showing the
_order number_ that's being prepared and a text box listing the waiting
orders in sequence, along with a count of the number of waiting orders.
_order number_ that's being prepared and a text box listing the waiting
orders in sequence, along with a count of the number of waiting orders.
- [ ] User can see a Pickup area containing a text box showing the
_order number_ that's currently available for pickup by the Customer and a
text box showing the number of Customers waiting in the serving line.
_order number_ that's currently available for pickup by the Customer and a
text box showing the number of Customers waiting in the serving line.
- [ ] User can stop the simulation at any time by clicking a Stop button.
## Bonus features
- [ ] User can specify how long it takes for an Order Taker to create an
_order ticket_.
_order ticket_.
- [ ] User can specify how long it takes for the Server to deliver an order
to the customer.
to the customer.
- [ ] User can specify the total amount of time the simulation is to run
once the Start button has been clicked.
once the Start button has been clicked.
- [ ] User can see an animated view of Customers and orders as they move
through the workflow.
through the workflow.
## Useful links and resources

@ -1,3 +1,9 @@
---
path: '/github-timeline-app'
title: 'GitHub Timeline App'
tier: 'advanced'
---
# GitHub Timeline
**Tier:** 3-Advanced

@ -1,3 +1,9 @@
---
path: '/git-tweet-app'
title: 'GitTweet App'
tier: 'advanced'
---
# GitTweet
**Tier:** 3-Advanced
@ -12,37 +18,37 @@ is created for one of your repos.
## User Stories
- [ ] User can see an input area tabular display prepopulated with rows for
each of the GitHub repos she owns and a selection checkbox next to each repo
name, a single input date field, and a 'Scan' button.
each of the GitHub repos she owns and a selection checkbox next to each repo
name, a single input date field, and a 'Scan' button.
- [ ] User can click the checkboxes in the repo list to select or deselect
repos for processing.
repos for processing.
- [ ] User can enter a date into the date field. This defines the point after
which any new PR requests will be tweeted.
which any new PR requests will be tweeted.
- [ ] User can click the 'Scan' button to identify repos that have had a new
PR created that has not been previously tweeted. In other words. Consecutively
entering the same date to scan from should only generate tweets for PR's that
have not yet been tweeted.
PR created that has not been previously tweeted. In other words. Consecutively
entering the same date to scan from should only generate tweets for PR's that
have not yet been tweeted.
- [ ] User can see an error message if no date was entered, if it is not a
valid date, or if it is a future date.
valid date, or if it is a future date.
- [ ] User can see repos highlighted if a tweet will be generated for them
and the 'Scan' button will change to 'Tweet'.
and the 'Scan' button will change to 'Tweet'.
- [ ] User may deselect a repo by clicking on its checkbox. Doing this will
change the button back to 'Scan' and clicking it will repeat the search for
repos that have had new PR's (not yet tweeted) created since the scan date
entered by the user.
change the button back to 'Scan' and clicking it will repeat the search for
repos that have had new PR's (not yet tweeted) created since the scan date
entered by the user.
- [ ] User may enter an new scan date at this point which also changes the
button back to 'Scan'.
button back to 'Scan'.
- [ ] User may click the 'Tweet' button to send a tweet bearing the following
message - `Pull Requst #<pr-number> created for repo <repo name> - <repo description>`.
message - `Pull Requst #<pr-number> created for repo <repo name> - <repo description>`.
- [ ] User can see this tweet send from her Twitter account.
## Bonus features
- [ ] User does not need to manually enter a scan date. If omitted the scan
will resume from the last scan date which must persist across sessions.
will resume from the last scan date which must persist across sessions.
- [ ] User may enter a custom tweet message
- [ ] User repo selections will persist across sessions so they do not have
to be reselected each time.
to be reselected each time.
## Useful links and resources

@ -1,3 +1,9 @@
---
path: '/instagram-clone-app'
title: 'Instagram Clone App'
tier: 'advanced'
---
# Instagram Clone
**Tier:** 3-Advanced

@ -1,3 +1,9 @@
---
path: '/kudos-slackbot'
title: "Kudo's Slackbot"
tier: 'advanced'
---
# Kudo's Slackbot
**Tier:** 3-Advanced

@ -1,3 +1,9 @@
---
path: '/movie-db-app'
title: 'Movie Database App'
tier: 'advanced'
---
# Movie Database App
**Tier:** 3-Advanced

@ -1,3 +1,9 @@
---
path: '/my-podcast-library'
title: 'My Podcast Library'
tier: 'advanced'
---
# My Podcast Library
**Tier:** 3-Advanced
@ -23,63 +29,67 @@ free to use your imagination.
- [ ] User can see their favorite podcasts in a tabular display area
- [ ] User can see the message 'No podcasts added yet' in watermark format
in this area if no podcasts have been added.
in this area if no podcasts have been added.
- [ ] User can see an overview of each favorite podcast that has been added
in this area. This includes the podcast icon, it's name, and the number of
most recent episodes.
in this area. This includes the podcast icon, it's name, and the number of
most recent episodes.
- [ ] User can click on the podcast icon to display a page containing a list
of the most recent episodes.
of the most recent episodes.
### Favorite Podcast Entry
- [ ] User can see a '+' button at the top of the favorite podcast area with
the hover text 'Add a new podcast'
the hover text 'Add a new podcast'
- [ ] User can click the '+' button to display a popup panel to allow a new
favorite podcast added. This panel contains an input area containing a text
input box for the podcasts page on Podbean (e.g.
[Techpoint Charlie](https://www.podbean.com/podcast-detail/k76vd-8adc7/Techpoint-Charlie-Podcast)), a 'Save' button, and a 'Cancel' button.
favorite podcast added. This panel contains an input area containing a text
input box for the podcasts page on Podbean (e.g.
[Techpoint Charlie](https://www.podbean.com/podcast-detail/k76vd-8adc7/Techpoint-Charlie-Podcast)), a 'Save' button, and a 'Cancel' button.
- [ ] User can click the 'Save' button to validate the URL and add the
podcast to the favorite podcast area.
podcast to the favorite podcast area.
- [ ] User can see a warning message if the url doesn't start with
```https://www.podbean.com/podcast-detail/``` or if navigating to the page
results in a 404 error.
`https://www.podbean.com/podcast-detail/` or if navigating to the page
results in a 404 error.
- [ ] User can see valid URLs for favorite podcasts retained across sessions.
- [ ] User can click the 'Cancel' button to discard any data and dismiss the
popup.
popup.
### Most Recent Episodes for a Podcast Page
- [ ] User can see a table of podcast episodes
- [ ] User can see rows in this table showing a clickable episode icon, the
title of the episode, the date it was originally broadcast, and a heart icon
button to mark it as a favorite.
title of the episode, the date it was originally broadcast, and a heart icon
button to mark it as a favorite.
- [ ] User can scroll through the list
- [ ] User can click on the episode icon to display that episodes page on
the Podbean web site.
the Podbean web site.
- [ ] User can click on an episode's heart icon to mark it as a favorite.
- [ ] User can click on an episode's heart icon to remove it as a favorite.
- [ ] User can see the table sorted with most recent episodes at the top,
followed by those previously marked as favorites.
followed by those previously marked as favorites.
- [ ] User can see favorite episodes persist across sessions.
## Bonus features
### Episode Ratings
- [ ] User can see 5 star icons with each episode that denotes how the user
rates it.
rates it.
- [ ] User may click stars from left-to-right to rate an episode. Stars are
filled or changed to a new color when clicked.
filled or changed to a new color when clicked.
- [ ] User may change a rating by clicking on the stars from right-to-left
to deselect them.
to deselect them.
- [ ] User can see the list of favorite episodes on the page sorted in
descending rating sequence.
descending rating sequence.
### Searching & Hashtags
- [ ] User can enter a freeform hashtag with an episode on the most recent
episodes page. This hashtag does not need to be predefined.
episodes page. This hashtag does not need to be predefined.
- [ ] User can see a search box on the main page and a 'Search' button
- [ ] User can enter hashtags in the search box to display a page of episodes
from any podcast with the same format as the most recent episodes page.
from any podcast with the same format as the most recent episodes page.
- [ ] User can click on a cancel button on the search results page to return
to the main page.
to the main page.
## Useful links and resources

@ -1,3 +1,9 @@
---
path: '/nasa-exoplanet-query'
title: 'NASA Exoplanet Query'
tier: 'advanced'
---
# NASA Exoplanet Query
**Tier:** 3-Advanced
@ -13,42 +19,42 @@ for simple queries by its users.
### Requirements & Constraints
- The Developer should implement a means of efficiently loading the exoplanet
CSV data obtained from NASA to minimize any delays when the application starts.
CSV data obtained from NASA to minimize any delays when the application starts.
- Similarly, the Developer should utilize a data structure and search mechanism
that minimizes the time required to query the exoplanet data and display the
results.
that minimizes the time required to query the exoplanet data and display the
results.
- The Developer will need to review the Exoplanet Archive documentation to
understand the format of the data fields.
understand the format of the data fields.
## User Stories
- [ ] User can see an query input panel containing dropdowns allowing the
user to query on year of discovery, discovery method, host name, and discovery
facility.
user to query on year of discovery, discovery method, host name, and discovery
facility.
- [ ] User can also see 'Clear' and 'Search' buttons in the query input panel.
- [ ] User can select a single value from any one or all of the query
dropdowns.
dropdowns.
- [ ] User can click the 'Search' button to search for exoplanets matching
all of the selected query values.
all of the selected query values.
- [ ] User can see an error message if the 'Search' button was clicked, but
no query values were selected.
no query values were selected.
- [ ] User can see the matching exoplanet data displayed in tabular format
in an results panel below the query panel. Only the queriable fields should
be displayed.
in an results panel below the query panel. Only the queriable fields should
be displayed.
- [ ] User can click the 'Clear' button to reset the query selections and
clear any data displayed in the results panel, if a search had been performed.
clear any data displayed in the results panel, if a search had been performed.
## Bonus features
- [ ] User can see the host name as a hyperlink to NASA's Confirmed Planet
Overview Page for that planet
Overview Page for that planet
- [ ] User can click on the host name to display the Confirmed Planet Overview
Page in a new browser tab.
Page in a new browser tab.
- [ ] User can see icons (such as up and down symbols) in the column headers
- [ ] User can click on the up symbol to sort the rows in the results panel
in ascending order on the values in that column.
in ascending order on the values in that column.
- [ ] User can click on the down symbol to sort the rows in the results panel
in descending order on the values in the column.
in descending order on the values in the column.
## Useful links and resources

@ -1,3 +1,9 @@
---
path: '/shell-game'
title: 'Shell Game'
tier: 'advanced'
---
# Shell Game
**Tier:** 3-Advanced
@ -21,26 +27,26 @@ is allowed to continue guessing until the pea is located.
- [ ] User can click the shell the pea is to be hidden under.
- [ ] User can see the pea move under the shell that's been clicked.
- [ ] User can click on a 'Shuffle' button to start an animated shuffling of
the shells for 5 seconds.
the shells for 5 seconds.
- [ ] User can click on the shell she believes the pea is hidden under when
the animation stops.
the animation stops.
- [ ] User can see the shell that has been clicked rise to reveal if the pea
is hidden under it.
is hidden under it.
- [ ] User can continue clicking shells until the pea is found.
- [ ] User can see a congratulations message when the pea is located
- [ ] User can start a new game by clicking a shell the pea is to be hidden
under (step #2 above). The steps above are then repeated.
under (step #2 above). The steps above are then repeated.
## Bonus features
- [ ] User can see a score panel containing the number of wins and the
number of games played.
number of games played.
- [ ] User can see the number of games played increase when the pea is hidden
under a shell
under a shell
- [ ] User can see the number of wins incremented when the pea is found on
the first guess.
the first guess.
- [ ] User can see the shell hiding the pea to animate (color, size, or
some other effect) when it is clicked (a correct guess).
some other effect) when it is clicked (a correct guess).
## Useful links and resources

@ -1,3 +1,9 @@
---
path: '/shuffle-card-deck-app'
title: 'Shuffle Card Deck App'
tier: 'advanced'
---
# Shuffle Card Deck
**Tier:** 3-Advanced
@ -20,30 +26,30 @@ choose to attempt the bonus feature.
## User Stories
- [ ] User can see a panel containing a text box the user can enter the
number of rounds into, three output text boxes to contain the starting time,
ending time, and total time of the test, and two buttons - 'JS Random',
'Xorshift'.
number of rounds into, three output text boxes to contain the starting time,
ending time, and total time of the test, and two buttons - 'JS Random',
'Xorshift'.
- [ ] User can enter a number from 1 to 10,000 to specify the number of
times (or rounds) the selected random number is to be executed.
times (or rounds) the selected random number is to be executed.
- [ ] User can click one of the three buttons to start the evaluation of the
selected random number algorithm. The random number algorithm will be executed
for the number of rounds entered by the user above.
selected random number algorithm. The random number algorithm will be executed
for the number of rounds entered by the user above.
- [ ] User can see a warning message if number of rounds has not been entered,
if it is not within the range 1 to 10,000, or if it is not a valid integer.
if it is not within the range 1 to 10,000, or if it is not a valid integer.
- [ ] User can see a tabular output area where the results of each algorithm
are displayed - algorithm name, time started, time ended, and total time.
are displayed - algorithm name, time started, time ended, and total time.
- [ ] User can see a warning dialog with a 'Cancel' and a 'OK' button if the
number of rounds is changed before all three tests have been run.
number of rounds is changed before all three tests have been run.
- [ ] User can click the 'Cancel' button in the warning dialog to dismiss
the dialog with no changes.
the dialog with no changes.
- [ ] User can click the 'OK' button in the warning dialog to clear the
output area and close the warning dialog.
output area and close the warning dialog.
## Bonus features
- [ ] User can see a third algorithm button - 'WELL512a.c'.
- [ ] Developer should review the output and determine why the fastest
algorithm is faster than the slowest algorithm.
algorithm is faster than the slowest algorithm.
## Useful links and resources

@ -1,3 +1,9 @@
---
path: '/slack-archiver'
title: 'Slack Archiver'
tier: 'advanced'
---
# Slack Archiver
**Tier:** 3-Advanced

@ -1,3 +1,9 @@
---
path: '/spell-it-app'
title: 'Spell-It App'
tier: 'advanced'
---
# Spell-It
**Tier:** 3-Advanced

@ -1,3 +1,9 @@
---
path: '/survey-app'
title: 'Survey App'
tier: 'advanced'
---
# Survey App
**Tier:** 3-Advanced

Loading…
Cancel
Save