# Project 001 - Web App UI ➜ [See codepen demonstration](https://codepen.io/jyo2105/pen/jOrOaXP) ## :memo: Problem I like to code along while learning a new programming language by books or through online tutorials. Later when I need to work on projects independently, I often find it difficult to recall the correct syntax. ## :memo: Solution The web application I created, codingCards, is a flashcard application targeting programmers who are learning new programming languages, to help them engage in active recalls of syntaxes, terms, concepts, and processes. ## :memo: User Interface codingCards contains three major components: *create card*, *my collections*, and *study cards*. ### :lower_left_crayon: *create card*: - The top section is *create card*. - It includes three text fields and a *create card* button. - The three text fields are for user inputs of *collection*, *deck*, and *code*. ### :lower_left_crayon: *my collections*: - The middle section is *my collections*. - It is a collection of card views of decks that users have created. - Each deck card view includes three parts: header, body, and footer. - The header shows the collection which the deck belongs to. - The body contains information regarding the name of the deck, the number of flashcards created, and the deck creation date. It also contains a review button. - The footer includes two pieces of information: progress and accuracy. - Progress indicates the percentage of the deck that users have already answered. - Accuracy indicates the percentage of questions users answered correctly. ### :lower_left_crayon: *study cards*: - The bottom section is the *study cards*. - It includes two major parts: a group of progress buttons a list view of flashcards. - There are four progress buttons: *All*, *X To Go*, *Y Correct*, and *Z Wrong*. - *All* represent all flashcards of the current deck. - *X To Go* represents that there are X flashcards to be learned. - *Y Correct* indicates that users have answered Y flashcards correctly. - *Z Wrong* indicates that users have answered Z flashcards incorrectly. - The second part of the *study cards* is a list view of flashcards, and each flashcard is displayed in two parts. - The left part with black background is the content of the flashcard, and the code that users want to be tested when creating the card using ```{{}}``` is replaced by a text area where users can type in their answers. - The right part contains three buttons: a yellow *Answer* button, a green *Correct* button, and a red *Wrong* button. ## :memo: Specification ### :lower_left_crayon: creating a card: - Users can choose to either enter existing collection and deck names to create a new flashcard, which will change the number of cards in the deck card view in *my collections*; or enter new collection or deck names to create a flashcard to, which will add a new deck card view in *my collection* section. - Entering values in the code text field will change the content of a flashcard. Users can use the markdown syntax ```{{}}``` surrouding the code that they want to be tested on, then the content surrounded by ```{{}}``` will be replaced by a text field in the flashcard in the *study cards* section. - Pushing the *create card* button will create a flashcard. Once a flashcard is created, a success message will appear at the top of *create card*, and contents of the collection, deck, and code text fields in the text fields of *create card* will disappear. ### :lower_left_crayon: selecting a deck: - When users push the *review* button on the deck card view, it will take them to the *study cards* section. ### :lower_left_crayon: studying a flashcard: - Users can interact with the four progress buttons at the top of the *study cards* section. - Pushing the *All* button will display all flashcards of the deck. - Pushing the *To Go* button will filter the deck to show flashcards that users haven't answered. - Pushing the *Correct* button will change the flashcard list to display those that are answered correctly by users. - Pushing the *Incorrect* button will change the flashcard list to display those that users had answered incorrectly. - Inside each flashcard, users can provide their answers in the text field. - Users can check their answers manually by clicking on the yellow *Answer* button, the answer will be displayed. - If their answer is correct, they can click on the green *Correct* button, which will increase the number on the green progress button by 1 unit. - If their answer is incorrect, they can click on the red *Wrong* button, which will cause the number on the red progress button to increase by 1 unit. - Regardless of the correctness of users' answers, pushing the yellow *Answer* button will lead to a decrease in the number of flashcards on the *To Go* button by 1 unit. - Every time users answer a flashcard question, the progress and accuracy information on the deck card view in *my collections* will be updated. ## :memo: Reflection My next step forward is learning about Javascript to make *codingCards* functional and interactive, and the back-end of web development such as databases. Furthermore, I want to learn how to make the flashcards in *my collection* interactive so that it can run on a Python server for a Python flashcard or an R server for R, and to replace manual answer check-up with an auto check. This project provides me a great opportunity to learn how to build a website from scratch. Personally, one of the challenges comes from the UI/UX aspect, because I don't have much experience in this area. I have tried to build three different versions of *codingCards*. It occurs to me that web development is not just about coding, it also touches on UI/UX design, psychology, instructional design, and other areas. To become a good web designer and developer, I need to extend my knowledge.