Project for UCLA Computer Science 97
[97 home]
For the main project, you will creating a full-stack web app.
Features
  Although the app is your choice, it should:
  - Display dynamic data to the user. That is, some part of the
    webpage changes based on data received from the server.
 
  - Upload data from the client to the back-end,
    which persists
    (saves) the data to the server’s file system.
    This data can be as simple as strings or numbers that you save to a text file, or files that the user uploads such as images.
 
  - Meaningfully search through server-side data.
    
      - Examples of meaningful search include searching for certain file names, data content, upload dates, etc.
 
      - These files could be ones that the user has uploaded, or could be ones that you have placed in the server directory yourself. For example, if you were making an informational app for prospective dog owners you might have a single file containing information about various dog breeds.
 
      - The front-end must contain let the user enter a query conveniently.
 
  
 
In addition to the above functionality requirements, your web app
should contain at least 3 more distinct features. For example, if you
were implementing Instagram for the first time, the features might
be:
  - Like and comment on photos
 
  - Visit user profiles that show name, bio, and the user’s uploaded
  photos
 
  - Follow other users.
 
If you were implementing the MyUCLA Class Planner, the features might be:
  - Add/remove classes from your current plan.
 
  - Enroll in classes.
 
  - List additional information about classes such as days, time,
  location, instructor, and units.
 
App ideas include: fitness, social media, cooking, ride-sharing,
messaging, music, banking, dating, productivity, COVID-19 tracking
with privacy, etc. Don’t think about it too hard; you are being
evaluated on the quality of your implementation, not the app idea
itself! It’s totally okay to choose an app idea that already
exists.
Though we do not expect your apps to be completely polished and
visually aesthetic, we do expect it to be relatively organized and
easy to use.
Technology
Node.js
  and React.
If you would like to try a different technology stack (i.e. build
an iOS/Android app, use a different back-end framework such as
Python/Django, etc.), you may provided you receive permission from an
instructor by the end of Week 6. Your project is valid as long as it
meets the requirements outlined above. Please note that choosing a
different technology stack may limit the amount of help that
instructors can provide you.
You must use Git and GitHub (or similar Git-based repository) to
track the progress of your work. The project can receive a full grade
only if the submission includes Git history no shorter than five
commits from each group member.  Commit history may be checked to
ensure participation.  “Participation” does not mean commits or lines
of code, but rather the quality of work.
As is usual in this class, your work should be your own. Of course
  by using Node.js etc. you will be building on the work of others,
  and you will be working in a group project, but each of your own
  commits should be your own work. You should use a private GitHub
  repository (not visible to outsiders) to help ensure this.
Since you will submit your repository, it should also contain a
README file (plaintext or Markdown) describing in detail how someone
who cloned it can run your app. This should, of course, include any
shell commands needed for setup.
Finally, each student must also submit a personal three-page final
  report that includes:
  - Your app’s purpose
 
  - A brief overview of your app’s architecture and the technologies
    you used
 
  - A description of the features supported by your app
 
  - A description of your individual contribution to the project
 
  - Any notable difficulties or challenges you and/or the team faced
 
  - Any improvements or additional features you’d make if you had
    more time. Improvements can include things that you would do
    differently if you had the opportunity to build this project
    again.
 
See the USENIX templates in Resources
    for written reports and oral presentations for
  good report formats.
Grading
The project is worth half of the total class grade.
  Project grading will consist of the following components.
  All percentages below are percentages of the project, so
  divide by two to get the weighting for the total class grade.
Group project components (one per group):
  -   2% – 1- to 2-page project proposals (due 04-29).
 
  -   2% – 1- to 2-page initial schedule and project plan (due 05-05).
    This should specify at least one (preferably two)
    intermediate milestones for the project.  The point of the
    milestones is to have running code early, that implements some
    project features and can be demonstrated. For an example, see Lucy
    Deckard’s
    “Developing
    timelines and milestone charts for your proposal” although we
    don’t expect anything that fancy.  Plus, we don’t expect the plan
    to be perfect!  It’s just a plan, and will no doubt be adjusted as
    the project evolves.
 
  -   8% – App can display dynamic data to the user.
 
  -   8% – App can upload data from the client to the back-end.
 
  -   8% – User can meaningfully search through server data.
 
  - 24% – Three more distinct features.
 
  -  5% – Meaningful understanding of Git is exemplified
    through version control.
 
  -  6% – Detailed README file that accurately and completely
    describes how to run the app locally.
 
  -  6% – Project is generally visually pleasing and easy to
    navigate.
 
  - 16% – Project presentations and demos
    (see Resources for advice about
    presentations). 
 
Final report (one per student):
  -   3% – Project description and overview is an accurate
    account of the project submitted.
 
  -   5% – Report details individual contribution in a meaningful
    way, and can be verified by git history.
 
  -   4% – Thoughtful reflections of difficulties faced, along
    with descriptions of how you overcame them.
 
  -   3% – Discussion of improvements/things you would have done
    differently and additional features you would have liked to
    implement.
 
  Submission
You will present and demo your project during the course.
One team member must submit a compressed tarball of your GitHub
repository to CCLE. This should contain all your group’s work,
including any documentation, presentations, etc. The repository should
not include generated files, only source code; the README file should
explain how to generate any files (e.g., node modules) buildable from
the source (adding their names to your
.gitignore file can help you avoid submitting them
by mistake). You should be able to obtain such a tarball directly
  from GitHub. Name the file UID-project.tar.gz,
where UID is your student ID.
In addition, each group member must submit a final report to CCLE
individually. Ensure that your report is in PDF format and is named
  UID-report.pdf.
  Glossary
  - Front-end/Client:
 
  - Two terms that are often interchangeably used to refer to the
  user-facing part of your application, or everything that the user
  actual sees. In the context of web apps, this means the actual look
  of your website and all of its contents (buttons, tables, text,
  etc.).
 
  - Back-end/Server:
 
  - Two terms that are often interchangeably used to refer to the
  “behind-the-scenes” part of your application that handles business
  logic such as saving user data or generating the appropriate data to
  send back to the client. In the real world, servers typically run on
  their own dedicated hardware (really just another computer) and the
  client and server communicate via HTTP.
 
  - Dynamic:
 
  - Changing. In the context of web apps, dynamic content refers to
  anything (text, images, tables, etc.) that can change. That is, if
  you visit the website at different times or perform certain actions,
  the contents of the website may change. Dynamic is the opposite of
  static.
 
  - JavaScript:
 
  - The so-called “language of the Internet”. It is the language
  that virtually all websites use to perform things
  dynamically. Technically, it’s an interpreted language whose syntax
  borrows quite a few elements from C.
 
  - Node.js:
 
  - Node.js is a JavaScript run-time environment. In the same way
  that Bash allows you to execute shell commands, node.js is simply a
  program that allows you to execute JavaScript statements. node.js
  contains additional syntax and features that browsers do not
  have.
 
  - React:
 
  - React is (at the current time of writing) the most popular
  JavaScript framework for building user interfaces, and is maintained
  by Facebook alongside a group of individual contributors and
  developers. React provides you with a declarative way of creating
  user interface components (such as custom buttons, menus, etc.) and
  is written using JSX, which stands for JavaScript XML. JSX is an
  extension of JavaScript which incorporates HTML, and can be
  transpiled (converted) to regular JavaScript.