Project One: Due Thursday, October 14, 2021

A Basic WebRTC Application

Project Description

For this project, you will work individually to build a small app that is powered by WebRTC.

ITMD 469 students will build an app that allows students to seek help from an instructor or TA in real time, something like virtual office hours. The app must include both audio and video, and make some worthwhile use of a data channel.

ITMD 545 students will build an app that includes some combination of streaming audio, video, and data.

Deliverables and Deadlines

  1. Due by Thursday, September 16: Pitch your Project One idea to the Project Showcase Basecamp. Post a brief pitch of your Project One idea on Basecamp for peer and instructor feedback and instructor approval.
  2. Due by Thursday, September 16: Schedule a one-on-one conference with the instructor. Sometime during the week of September 20, you will meet individually with the instructor to discuss your Project One idea.
  3. Due by Thursday, September 30: Post your Project One progress to Basecamp. Include a link to your GitHub repository. Be sure and also respond to the progress of other projects.
  4. Due by Thursday, October 7: Post your Project One progress to Basecamp. Include a link to your GitHub repository. Be sure and also respond to the progress of other projects.
  5. Due by Thursday, October 14: Submit your final Project One. Submissions should be both public on Basecamp and private to the instructor’s email. Your email should include:
    • The link to your project’s repository
    • A self-critique memo, written in the body of the email, about your work on the project and your progress in class to this point.
    • ITMD 545 only: a short write-up of the Web API you included, and what you learned about it.

Project Requirements

  • Valid, semantic HTML; valid, custom CSS; error-free vanilla JavaScript (no client-side libraries)
  • Intelligent use of feature detection for WebRTC and any Web APIs you use
  • A signaling server written in Socket.IO or pure WebSockets, powered by ExpressJS or another Node.js-based framework (discuss with instructor)
  • An intelligently written package.json file including all server-side dependencies
  • Ability for two peers to connect to each other over a local network
  • Use of the perfect-negotiation pattern, with necessary fallbacks for browsers with older or incomplete implementations of RTCPeerConnection
  • A meticulously organized Git repository with frequent atomic commits and meaningful commit messages that accurately reflect each set of changes that you make
  • Ability for instructor and others to easily clone, set up, and run your project over HTTPS on a local network

Project Goals

  • Gain experience working with the fundamental WebRTC objects and APIs
  • Learn to set up and use a namespaced signaling channel for establishing WebRTC connections
  • Learn to write WebRTC connection code according to the perfect-negotiation pattern
  • ITMD 545 only: learn about and implement a Web API that complements or extends your work with WebRTC
Project Two: Due Thursday, November 18, 2021

Real-Time Collaboration Alpha Release

Project Description

For this project, you and your chosen team will create a multipeer chat-based application that enables realtime audio, video, and text/data communication over a WebRTC connection. The signaling portion must enable multiple users to connect to each other in a mesh network, and your app should allow multiple separate groups of users to join calls on their own namespaces.

In addition to its chat features, your app must also enable teams of users to engage in some kind of shared realtime activity: playing a game, listening to music or watching videos, or collaborating on a document or some other kind of work.

The shared-activity part of your app can either be a feature that your team builds itself, or it can leverage the open API of any service that makes itself available. For example, if you decide to create an app for listening to music in pairs, you might have a way to share mp3 files with users as streaming data, using the RTCDataChannel, from one user’s computer—or you might leverage something like the Spotify API. While there may be particular use cases for something like the HTML <iframe> element, the shared-activity part of your app must be more technologically sophisticated than simply loading the same web resource in the browsers of both users.

Finally, while you will almost certainly have need of WebSockets/socket.io for certain signaling tasks, your app should leverage WebRTC peer connections to ensure that the bulk of peer-to-peer communication and data sharing takes place browser to browser, rather than through your app’s third-party server. For example, if you build a game that two users can play together, various moves and states of game play should be transferred from player to player over WebRTC. You may, however, opt to additionally store game-state information on a server for the purposes of game recovery, score keeping, etc.

Deliverables and Deadlines

  1. Due by Thursday, October 21: Organize into groups of three or four students for Project Two. Use Basecamp to find team members for yourself.
  2. Due by Thursday, October 28: Formally pitch your Project Two idea on Basecamp. Once you and your team have organized yourselves, formally pitch your Project Two idea on Basecamp for instructor feedback and approval.
  3. Due by Thursday, November 4: Weekly Project Two check-in. Include a link to your GitHub repository. Be sure and also respond to the progress of other group projects.
  4. Due by Thursday, November 11: Meet with the instructor for team conferences on Wednesday, November 10. See sign-up on Basecamp.
  5. Due by Thursday, November 18: Submit your final Project Two. Final submission will be both public, on Basecamp, and private via email. On Basecamp, post your work and include a link to your GitHub repository and a short video where your group talks through your project running in two web browsers. Your email should include:
    • Links to your group and individual repositories
    • A self-critique memo, written in the body of the email, about your work on the project and your progress in class to this point
    • A short critique of each of your group members, also written in the body of the email

Project Requirements

  • Your app should work with the latest implementations of the WebRTC specification and its protocols, but you must also make use of adapter.js and “perfekted negotiation” fallbacks for older browsers
  • Your app must be able to auto-generate obfuscated, hard-to-guess namespaces for users
  • You should use progressively enhanced, standards-compliant HTML, CSS, and JavaScript to build a satisfying mobile-first, responsive interface for your users
  • You should do the appropriate feature- and constraint-detection steps necessary to ensure the smoothest, interoperable, platform-neutral operation of your app as possible
  • The shared-activity part of your app should either be something of your group’s creation (like a simple game) or leverage a third-party API or service
  • You must maintain a centralized group repository that contains your ExpressJS app, which can be cloned and run locally
  • You must also maintain a personal fork of the group repository in your GitHub account where you do most of your work
  • You should make obsessive use of feature branches on your fork of the group repository
  • You should never commit directly on the main branch
  • All work submitted to the group repository must be done through pull requests on GitHub, which is how commits get onto the main branch

Project Goals

  • Increase your command of real-time communication APIs, including WebRTC, Web Workers, Web Sockets, and Web Notifications
  • Learn to build a WebRTC-based application that functions over a local-area network or a carefully configured wide-area network, with temporarily opened high-numbered ports and port-forwarding on your local network (if possible)
  • Improve your ability to work with a centralized group repository and an individual fork
  • ITMD 545 Only: Learn to develop long-term monitoring of the performance and effects of your WebRTC app on the networks of individual users
Project Three: Due Thursday, December 9, 2021

Real-Time Collaboration Beta Release

Project Description

This project will be a refinement of Project Two. Your group will make some kind of targeted revision, refactoring, or other improvement to your Real-Time Collaboration Alpha Release (Project Two). Additionally, your group will write a ~500-word proposal outlining a significant future improvement to your project.

Deliverables and Deadlines

  1. Due by Thursday, December 2: Pitch your Project Three revisions on Basecamp. Your Basecamp post should include plans both for your targeted revision that your group will undertake, as well as a rough idea of the significant future improvement your group will write about.
  2. Due by Thursday, December 9: (Firm deadline.) Email instructor with final project deliverables. The email should contain:
    • Links to your group and individual repositories
    • Links to your group and individual feature branch for Project Three
    • A self-critique memo, written in the body of the email, about your work on the project and your progress in class this semester
    • A short critique of each of your group members, also written in the body of the email

Project Requirements

  • All the requirements for Project Two
  • A targeted revision to your Project Two, isolated on a feature branch in your upstream repository; you may elect to merge that revision in with your main branch, but preserve the feature branch for your final project submission
  • A document outlining a significant future improvement to your project. Write this as a markdown file in your project’s repository. Name it something like PLANS.md or something else that the instructor can find easily.

Project Goals

  • Revise a previous project based on instructor feedback and any additional knowledge that you have gained since its original submission
Project Four: Due Thursday, December 9, 2021

ITMD 545 Only: Academic Research in WebRTC

Project Description

This project, required only of ITMD 545 students, will expose you to the academic research going on in relation to WebRTC and related technologies. Each student will find a peer reviewed article from ACM, IEEE, or another respected venue that publishes academic research in computing, and then write and post to Basecamp a 250-word summary of the article.

Deliverables and Deadlines

  1. Due by Thursday, November 18: Find and get instructor approval on an academic article on WebRTC.
  2. Due by Thursday, December 9: Post article summary to the Project Showcase Basecamp, in its own thread. Be sure to include:
    • The full citation to the article
    • A direct link to the article
    • Your 250-word summary of the article

Project Requirements

  • Your chosen article must be between 3 and 8 pages in length.
  • Your chosen article must be published in English.
  • Your summary should be as close to 250 words long as possible (neither substantially longer nor shorter).

Project Goals

  • Learn to search in the academic research surrounding WebRTC.
  • Learn to read academic research effectively.
  • Learn to write concise but comprehensive summaries of academic research.

Course Information

Instructor