Skip to content

ThomasJHLees/Team0Project

Repository files navigation

Word Salad Flashcard App

CSPB 3308 Project for Team 0

Team Name:

Word Salad

Team Members:

  • Thomas Lees, ThomasJHLees
  • Janet Matthews-Derrico, j-derrico
  • Atreyu Sutton, asutton01
  • Tyler Kinkade, tyknkd

Weekly Meeting:

Mondays, 18:00 MDT, Zoom

Vision Statement:

Create a web-based dynamic flashcard study app which implements a spaced-repetition algorithm to review user-input content

Motivation:

Traditional blocked learning (i.e., "cramming") is inefficient compared to spaced interleaved learning (Dunlosky et al., 2013; Kornell & Bjork, 2008; Mondria & Mondria-De Vries, 1994), but very few flashcard apps incorporate spaced-repetition with user content. Therefore, we want to create an easy-to-use app to enable users to study the content they want to study efficiently using spaced-repetition.

Risks to Completion:

  • New languages/working environment (e.g., HTML, CSS, SQL, JavaScript, Flask, Heroku)
  • No prior experience working with team members
  • No experience implementing web-based app with user input
  • No experience implementing spaced-repetition algorithms
  • Scope of project (could fail to deliver working project due to high number of desired features)

Mitigation Strategies:

  • Take advantage of documentation--while the languages and working environments are new to us, they aren't new, and there is extensive documentation and online resources available
  • Close communication via multiple channels (Email, Google Chat, Zoom, Google Docs, GitHub Projects)
  • Weekly meetings to check in, discuss challenges/obstacles, and make sure everyone is on track
  • Take advantage of team member knowledge on spaced-repetition, research available open source spaced-repetition platforms
  • Focus first and foremost on minimum viable product, then prioritize additional desired, but not required features. This will ensure ability to deliver a functional project on deadline

Minimum Viable Product:

  • Website interface with a premade English-English vocabulary flashcard set and no user tracking

Product Stretch Goals:

  1. Methods for adding flashcards from the website interface
  2. Categorization of flash cards and ability to organize by category from the website
  3. A flashcard "deck" concept to organize cards
  4. User accounts
  5. Saving decks to user profiles
  6. Public and Private card decks
  7. Searching

Development Method:

We plan to use an Agile framework and borrow pieces of several development idealogies to complete our project.

For our meeting schedule we will largely borrow what Scrum recommends, but condensed into a single weekly meeting. We wil give updates about what we've worked on, what we're going to work on and any blockers that may be in place (standup), host a retrospective of our last sprint period, and complete any required sprint planning. Unfortunately, a daily standup and additional scrum meetings do not make the most sense in a classroom environment.

For our planning and prioritization pieces, we will be using more of a Kanban model. We will define user stories, and organize them in a prioritized backlog. New stories will only be pulled into the board to be worked on when the current work has been completed (within reason). We will also adopt some lean principles in planning where we will only be creating new stories slightly before they are needed instead of trying to map out our entire process. Because of our inexperience in developing programs it makes sense to leave planning to the latest possible second so that we have opportunities to learn pieces that we did not know that we did not know.

The following is a summarized list of the practices we hope to implement on our team:

Agile

  • Scrum
    • Practices - combined into a single weekly meeting
      • Release planning
      • Sprint planning
      • Sprint review
      • Sprint retrospective
    • Deliverables
      • Product backlog
      • Sprint backlog
      • Burndown charts
      • Shippable functionality
  • Extreme Programming
    • Team-wide coding standard
    • Collective team ownership
    • Continuous integration via GitHub
    • Test-driven development
    • Simple design/code
    • Small, frequent releases
    • Sustainable work pace
    • Whole team understands whole project
  • Kanban - with our GitHub project board
    • Visualize workflow
    • Limit work in progress
  • Agile Modeling
    • Requirements envisioning
    • Implement in priority order
    • Unified information source (GitHub)
    • Document late as possible
    • Just barely good enough artifacts

(Adapted from Ambler & Holitza, 2012)

Project Tracking Software:

GitHub Projects

Directory Tree

This project has the following directory tree:

.  
├── wordsalad/
│   ├── __init__.py
│   ├── db.py
│   ├── schema.sql
│   ├── auth.py
│   ├── home.py
│   ├── decks.py
│   ├── cards.py
│   ├── templates/
│   │   ├── base.html
│   │   ├── index.html
│   │   ├── about.html
│   │   ├── decks/
│   │   │   ├── index.html
│   │   │   ├── create.html
│   │   │   ├── edit.html
│   │   │   └── cards/
|   │   │       ├── index.html
|   │   │       ├── add.html
│   |   │       └── edit.html
│   │   └── auth/
│   │       ├── login.html
│   │       └── register.html
│   ├── static/
│   |   ├── style.css
│   |   ├── js/
|   │   |   └── cards.js
|   │   └── images/
|   │       ├── logo.jpg
|   │       ├── salad.png
|   │       ├── GRE.png
|   │       ├── LSAT.png
|   │       └── SAT.png
├── instance/  
│   └── wordsalad.sqlite  
├── tests/  
│   ├── data.sql  
│   ├── conftest.py  
│   ├── setup.cfg  
│   ├── test_factory.py  
│   ├── test_db.py  
│   ├── test_auth.py  
│   ├── test_home.py  
│   ├── test_decks.py  
│   └── test_cards.py  
├── .docs/
|   ├── _build/
|   |   ├── doctrees/
|   |   └── html/
|   ├── Makefile
|   ├── README.md
|   ├── conf.py
|   ├── index.rst
│   └── make.bat
├── csv/
|   ├── source_info.csv
|   ├── SAT_vocab.csv
|   ├── GRE_vocab.csv
│   └── LSAT_vocab.csv
├── images/  
│   ├── db_schematic.png  
│   ├── kanban/  
│   │    └── kanban20220*.png
│   └── mockups/  
│        ├── about.png
│        ├── createcard.png
│        ├── decks.png
│        ├── flashcard.png
│        ├── home.png
│        ├── homepage.jpg
│        └── login.png
├── Procfile 
├── requirements.txt 
├── run.py 
├── setup.py 
├── MANIFEST.in 
├── README.md 
├── WEEKLY_STATUS.md 
├── PAGE_TESTING.md 
├── SQL_TESTING.md 
└── FINAL_REPORT.md 
File Description
wordsalad/ Application directory
   __init__.py Flask application factory
   db.py Database initialization script
   schema.sql SQL database schema
   auth.py Blueprint to handle authorization requests
   home.py Blueprint to handle home/about page requests
   decks.py Blueprint to handle view/add/edit/delete deck requests
   cards.py Blueprint to handle view/add/edit/delete card requests
   templates/ Web app templates directory
      base.html Base web app page template
      index.html Main web app page
      about.html About web app page
      decks/ Web app flashcard decks directory
         index.html Web app flashcard decks main page
         create.html Web app page to add new deck
         edit.html Web app page to edit existing deck
         cards/ Web app flashcard deck directory
            index.html Web app flashcard deck cards page
            add.html Web app page to add flashcards to deck (incl. via CSV)
            edit.html Web app page to edit flashcard in deck
      auth/ Web app user authentication directory
         login.html Web app user authentication login page
         register.html Web app user registration page
   static/ Web app static files directory
      style.css Cascading style sheet
      js/ JavaScript directory
         cards.js Card flipping JavaScript
      images/ Web app images directory
         *.png Web app images files
instance/ Database directory
   wordsalad.sqlite SQLite sample database for Heroku deployment
tests/ Unit tests directory
   data.sql Unit test SQL data
   conftest.py Unit test configuration script (runs for every test)
   setup.cfg Unit test setup configuration file
   test_factory.py App factory unit tests
   test_db.py Database unit tests
   test_auth.py Authentication unit tests
   test_home.py Home page unit tests
   test_decks.py Decks pages unit tests
   test_cards.py Cards pages unit tests
.docs/ Autodocumenter directory
   _build/ Build files directory
      doctrees/ Document trees directory
      html/ HTML files directory
   Makefile Make file
   README.md Instructions for installing autodocumenter
   conf.py Configuration script
   index.rst Documentation index page
   make.bat Make batch file
csv/ Flashcard CSV files directory
   source_info.csv Source data information
   SAT_vocab.csv SAT vocabulary source data
   GRE_vocab.csv GRE vocabulary source data
   LSAT_vocab.csv LSAT vocabulary source data
images/ Documentation images directory
   db_schematic.png Database schematic diagram
   kanban/ Kanban screenshots directory
      kanban2022*.png Weekly Kanban screenshots
   mockups/ Web page mockup directory
      *.png Web page mockups
Procfile Heroku procfile
requirements.txt Dependencies for deploying to Heroku
run.py Script for Heroku deployment
setup.py Script to install app
MANIFEST.in List of other files to include at installation
README.md Summary of project
WEEKLY_STATUS.md Summary of weekly meeting, progress, tasks
PAGE_TESTING.md Summary of web pages, testing to implement
SQL_TESTING.md Summary of database schema, methods, testing
FINAL_REPORT.md Final project report

References:

Ambler, S. W., & Holitza, M. (2012). Agile for dummies, IBM limited edition. Wiley.

Dunlosky, J., Rawson, K. A., Marsh, E. J., Nathan, M. J., & Willingham, D. T. (2013). Improving students’ learning with effective learning techniques: Promising directions from cognitive and educational psychology. Psychological Science in the Public Interest, 14(1), 4-58. https://doi.org/10.1177/1529100612453266

Kornell, N., & Bjork, R. A. (2008). Learning concepts and categories: Is spacing the “enemy of induction”? Psychological Science, 19(6), 585-592. https://doi.org/10.1111/j.1467-9280.2008.02127.x

Mondria, J-A., & Mondria-De Vries, S. (1994). Efficiently memorizing words with the help of word cards and “hand computer”: Theory and applications. System, 22(1), 47–57. https://doi.org/10.1016/0346-251X(94)90039-6