You will work with a group to develop a full stack web application with a django backend, and hosted publicly.
Your app idea must be approved by the instructor.
Your app should have at least 2 kinds of users (roles) (e.g. admin vs. regular).
Your app should support the creation, reading, updating, and deleting (CRUD) of data in a database that the user can expect to persist their data for at least a month.
Your app should have different functionality for authenticated vs anonymous users.
You must either use django allauth and its provided functionality for user registration, login, and logout unless you have instructor approval to do otherwise.
The 3 primary parts of the project are Planning, Implementation, and Presentation (see links below for details).
1 - Possible Project Ideas
Please feel encouraged to select a project from the list below, to propose a riff on one of these, or to propose your own idea.
This page is under construction, and undergoing frequent updates. Please check back soon for more ideas. If an idea has no “client” it doesn’t mean no one cares, it means it’s the default care-a-lot: Dr. Stewart.
1. Scanner/Gallery
Some parents/guardians have kids/charges/wards. In some of these contexts, those children may create a lot of art or other artifacts that demonstrate their recent schoolwork. What if there was a web app that kids could use on a tablet that:
Made it super simple for them to take a picture of/scan their art/work
evaporated it into a cloud
autotagged with simple things (e.g. date/time)
provided a view that cycled through the collection of art/work in and interesting way
show recent things more often, and older things slightly less often
assumes there are several displays near each other and shows things that go together or animates the transition of a photo from 1 display to the next
could have a way to pause, skip, remove from the rotation, decrease the frequency, increase the frequency
could have the ability to setup pre-planned themes
1. show things from approximately this date range in previous years around this time
1. show things on a certain topic/photos with certain content/objects
1. show photos that are tagged as “from” a particular kid or featuring that kid e.g. on their brithday, or while they’re viewing it
Stretch Topic
3P APIs
Fun namestorming
Home 🍳 Skillet Stash Gallery
min-hoard
Hoarding 101
DigiHoard
Wezibit
Artifactory
2. Bin It!
game for learning html
binning text/content fragments into different html buckets like:
swipe left/right style?
or 4-8 home row bins?
or like loads a known page or screenshot of page and highlights a region and the learner presses the corresponding key on the keyboard to categorize how they might mark the item up. is it:
main
article
section
aside
nav
header
footer
h1-6
p
a
img
ul
ol
dl
li…
3. Xylophone library
users can create (and publish) xylophone designs (maybe some textual properties to describe, maybe a photo as well) it should also know how many keys it has, what colors they are, whether/how they’re labeled, what approximate notes they are, maybe the app helps them identify the notes by listening through mic
the users can search (and crate/publish) songs that can be played if someone has a certain set of notes
once the app knows which notes they have and how they appear on the xylophone, the app can display the songs to learn/play in a way that matches the user’s own xylophone
the app can also help the user learn to play the songs by showing the notes/highlighting the keys on screen as they should be played and maybe even playing the notes for the user to mimic
You know how all these sheeple bow to the tyranny of the decimal system, and celebrate like 1-year anniversaries in their relationship or community or workplace or whatever, and then maybe it’s a big deal to hit 5, 10, 20 years? Yeah? Well, those years aren’t even special! How about I celebrate when I’ve been in a relationship for 1/16 OF.MY.LIFE?! 1/4? 1/2 (i.e. longer than I wasn’t)?
How about I give you a date (1st date? facebook status changed? tinder account hibernate? nvm that’s mono-normative I guess) and a reference point (date of birth), and you calculate the the future dates that correspond to different functions of time.
user can add future functions?
1/2s
log?/exp?
else?
user can add dates of interest with corresponding reference dates
app calculates the future dates that correspond to the functions of time for those dates of interest/reference dates
app offers to add them to the google/outlook/thunderbird calendar
5. eldood
The “reverse” of a “doodle” (i.e. scheduling) poll. Rather than the initiator trying to find a time when the maximum number of respondents can attend all together, they wish to schedule the respondents in to mutually exclusive times in the initiator’s availability such that they are able to schedule the maximum number of respondents.
Examples
prof wants to schedule 1:1s with 90 students over the course of a few weeks.
fancy pants conference rooms has some feature that makes it much better for presenting/working/whatever. every group that would like to reserve the room responds to the poll with their availability and the application schedules them into the room such that the most groups get to use the room
Something something game theory and mixed/counter incentives
Maybe like when solutions are impossible certain respondents can be deprioritized (those with the fewest availabilities woudl sort of prevent the bad behavior of people only giving 1 time, but that would also pretty much eliminate the usefulness of this app, which can otherwise surface that fact that some folks are just legitimately more scheduled during the resource’s availability and perhaps by giving them the only time they can make, the system can schedule more people… else?)
6. multi-video transcription app
In qualitative data analysis in HCI research for example, sometimes video of participants in a research study will be used to support transcription (computers are helping majorly these days) and/or “coding” (tagging moments or time ranges of a video with a label, “annotating”).
In many cases there may be several video sources that actually coincide in time (e.g. 3 camera angles on the group in the lab, and if each was using a laptop, 3 videos of their screens). It might be nice to have an app that could facilitate lining these up in time, and then playing/pausing, rewinding them all in sync, and would tie the transcription and coding to the times in the video.
7. crowd sourcing audio/video route walkthroughs
Have you seen google street view? Can we crowdsource it? What if you took a video of your walk to work, home, grocery store, between classes? Then someone who hasn’t been to the place could watch the video or travel the same route along with the video.
In particular, this might be interesting to people who are blind or visually impaired, especially if they have learned or are practicing with auditory object perception. They could use the app to learn a route before they go, or to experience a place they’ve never been.
8. milestone countdown
I’ll project this thing in my class, or at the club/concert, or some event.
I’ll put in the itinerary and it will show some nice visualization/timeline that updates as the time passes/event progresses.
9. google calendar zipper
Google Calendars let me publish a feed of a calendar, but if I use several calendars to organize my events, and I want someone to be able to see my availability, they need to know about all the calendars. Let me sign in to your app and authorize you to work with my calendar, then you show me the list of calendars, I select which ones, and you re-publish a single calendar feed that aggregates all the selected calendars.
10. app to (re)instantiate “plans” in our calendar
Say I’m going to travel to a conference, I need to do a predictable set/sequence of things, many relative to the date of departure/return. How about I add these tasks to a list/template in my account on your app, then when I tell you the start date or whatever parameters, and you copy those tasks onto my (e.g. google) calendar at the correct dates/times
Other Examples
cleaning up for visitors
going on vacation
preparing for career fair
11. Make Amazon Wishlist
Amazon’s wishlist no longer supports adding items from arbitrary places on the web (e.g. some URL). That sucks. build their wishlist feature as it shoulda always been.
…
12. Canvas prof hub
Prof auths to app with canvas credentials, can execute tasks that are not supported by canvas in its GUI.
13. Digitize a board game you (I?) like that isn’t available online
14. Ethilogical
Continue past work on research in teaching CS+Ethics and the ACM code of ethics (Dr. Kirkpatrick + Dr. Stewart + students):
make an app in which students take on the role of app store reviewers presented with applications for admission/publication to the app store, and the student should approve or reject and should justify their decision in part with support from the ACM code of ethics.
15. Yo I’ll Solve It
user adds a set of resources
with user-defined properties
user can characterize the property as (at least) the below (adapted from https://groupeng.org)
user adds a set of candidates
with user-defined properties
user specifies a range of how candidates can be assigned a single resource (1? 3? 2-4?)
app tries to assign resources to the candidates
Candidate property categories
This is adapted from groupeng
Distribute: Spread candidates with this property across all candidate-resource assignemnts so that resource has about the same number of candidates with this property
Aggregate: Assign candidates with some property to the same resource as each other
Cluster: Ensure that candidates with some attribute are not isolated in a set of candidates assigned to a resource
Balance: Ensure equal strength across sets-of-candidate-assigned-the-same-resource based on some numeric score (as a function of candidate properties)
Examples
I imagine this could be a general app that would actually solve:
Assigning employees (eg TAs) to shifts based on the need # of people per shift and the students availablity
Assigning students in a course into project teams based on how they responded to a survey about their preferences, e.g.:
availability
Mondays 8-10am
Mondays 10am-12pm
Mondays 12pm-2pm
Mondays 2-4pm
…
top 5 project ideas
top 5 stretch topics
your goal for the project (C, B, A)
people you need to not work with
people you prefer to work with
working style (start early, start late)
Namestorming
“99probs”?
Problematic
Problematizer
Framer
16. cooking quest
start with the fewest staples and equipment (prescriptive), and the simplest techniques and recipes, then when ready like level up and buy just these few or those few ingredients or equipment and unlock this other set of recipes or go a different route
17. course planner
Beware: 374 is maybe doing this as an entire class right now 😅
Help students who can’t make it in to meet with their advisor or who have, but now have collaborated with their advisor.
System helps student choose a template (starting CS 149 in Spring sem of sophomore)
student selects courses they intend to take and when (which semester) for all remaining semesters
system can give suggestions
courses maybe don’t take together
courses offered infrequently/irregularly (maybe don’t count on them in plan)
taking 261? have you considered joining UUG?
22. Spotreon
have users auth with spotify
have them give you a credit card or paypal or something and pay you monthly (whatever they can afford)
as Jack Stratton says in the embedded video below, divide the money up among the artists they listen to.
24. JMU Coin Museum Web App
… more soon…
Client(s) (other than Dr. Stewart)
Dr. Forsyth
25. Who Dat?
Sort of flashcards/quizzing to help learn peoples names/face for profs, clubs, whatever.
I'd like something to help me both take attendance AND memorize students' names. It should allow me to upload a roster, photos, enter students' preferred names, their pronouns, tell me if multiple students have the same first name and subsequently display their last names too (so I don't say John and get three people respond), etc. I want to use it in-class so I have a better way of taking attendance than relying on paper or Canvas' attendance feature.
Outside of class, the app should also have the ability to show “flashcards” of either the student’s face or name and I need to select the matching face/name. This will help me memorize my students’ names.
Client(s) (other than Dr. Stewart)
Dr. I. Wang
Dr. Stewart
Dr. Johnson
26. Roanoke/Historical map thing
open app on mobile while i’m at a place
show a historical map of the place and my position as i walk around
parse recipes into steps and make a flow chart-like dependency tree for distributing tasks across multiple helpers etc. … more soon…
29. peer instruction
Not sure about this one yet since we’re doing Kahoot in class…
I would like a free and open source, easy-to-use tool for doing peer instruction. I want to write questions in Markdown and have students connect with a QR code and be able to do peer instruction in class without having to use Mentimeter, Slido, Runestone, or whatever. Ideally the tool would support the traditional workflow of students answering the same question twice, once before and after discussion with their peers.
Dr. Bowers currently uses a bunch of things (including e.g. zwift and https://intervals.icu/ ) for his cycling.
Much of the data that he gets right now is for post-hoc analysis, but he wants something that is more toward planning the ride in advance:
Input:
Rider’s biometrics of many kinds and past performance data
an intended route to bike
elevation along the route
division of the route into “segments”
intended power (wattage) for that segment
process: simulate the rider with the past performance data and biometrics and attempting the planned wattage
extra: interface that is used during the ride to tell the cyclist that in the current segment/position, they’re supposed to be aiming for a particular wattage, maybe showing them whether they’re +/- the time estimate from the plan
Client (other than Dr. Stewart)
Dr. Bowers
32. Bike Transit Map
Dr. Bowers wants to be able to create a map of a community (e.g. Harrisonburg) that encodes vetted/safe/efficient bike routes.
Then a visitor to the app, planning their ride would tell the thing the begin and end, and the app would try to keep them on the vetted routes as much as possible.
Client (other than Dr. Stewart)
Dr. Bowers
33. Office Hours Queue
Profs can create accounts
Students scan qr code or click link or whatever and are enqueued
students can see their position in the q (like a restaurant table tracker thing)
student gets Push notification when the person before them gets their turn
Facilitates students working in comfort while waiting for their turn in office hours, can also help if prof offers simultaneous virtual and in-person office hours.
34. Retracer
Maps for directions, but try to go slightly less optimally to help me learn more regularly rely on some of the earliest/most frequent routes.
35. Community Sports App
(see your email from Dr. Johnson on 8/26)
Hi, computer science majors. Dr. Sandy Manjunath (who teaches sport management classes in the Hart School) and I are collaborating on the development of a web app to help communities run sporting events. We are looking to hire a student or two.
Dr. Manjunath has big dreams for the app long-term, but we are starting small. The task for this semester is to build a management system for a basketball tournament held here in Harrisonburg. We’ll be using a reactive front-end, TypeScript, databases, and cloud services. Use of AI is encouraged.
We can support the student developers in one of several ways: as an independent study (which can count toward general CS electives), as part of an Honors project, or as a position funded by Dr. Manjunath (I don’t know the pay rate yet).
Please send me a message if you might be interested, and we can talk further.
NOT DEPICT USER REGISTRATION, SIGN IN, NOR SIGNOUT
depict the main “screens” for an unauthenticated user (e.g. landing page, else?)
include possible url for each of these screens
depict the main “screens” for an authenticated user
include possible url for each of these screens
depict user interface elements necessary to perform CRUD operations.
depict a navigation menu that will be present on all pages.
Narrative
Your project narrative must begin with the project title, your team name, and the student names and include the following sections (about 200 words each):
Purpose
Clearly state the main idea and intended purpose of your application.
Explain a problem your application aims to solve and why it is important.
Users
Identify the primary users of your application, including their background or needs.
Justify how your application will benefit these users and improve their experience.
Features
Outline the core functionalities of your application and explain how they will work.
Provide a concrete example demonstrating how the application fulfills its purpose.
Data
Describe the types of data that users will create, read, update, and delete (CRUD).
Include an example of this data using either real or representative sample values.
Include objects and their properties with some notion of those properties types
Include your intended relationships between your objects.
References are optional, but you may include “Works Cited” if that simplifies the explanation.
What to Turn In
Commit your files to your instructor-provided git repo and submit the URL to the commit to the corresponding canvas assignments.
3 - Final Project: Implementation
Final Project Implementation
Teams will build a useful backend web application in Django with a functional and attractive frontend. To earn points, teams make “claims” - concrete accomplishments toward their application. All teams must deploy their application to a hosting service to receive a grade.
Grading Scheme
Each claim is worth a certain number of points. The grading scale is as follows:
Points
Letter Grade
900-1000
A
800-899
B
700-799
C
600-699
D
Below 600
F
In addition, the following requirements must be met for a letter grade:
Application must be deployed and accessible via URL to receive a D or higher.
A deployed application with only partial Basic Claims implemented will receive a D (650).
Application must implement all Basic Claims to receive a C or higher (700).
Application must implement all Basic and eight Intermediate Claims to receive a B or higher (800).
Application must implement all Basic, eight Intermediate, and one Stretch Claim to receive an A (900).
Each extra Intermediate Claim beyond the required eight adds 10 points. A second Stretch claim adds 50 points. No more that two Stretch claims can be counted. A team’s score is capped at 1000 points.
Three-Person Teams
Teams of three students face slightly higher requirements:
Application must be deployed and accessible via URL to receive a D or higher.
A deployed application with only partial Basic Claims implemented will receive a D (650).
Application must implement all Basic Claims to receive a C or higher (700).
Application must implement all Basic and ten Intermediate Claims to receive a B or higher (800).
Application must implement all Basic, ten Intermediate, and two Stretch Claims to receive an A (900).
Each extra Intermediate Claim beyond the required ten adds 10 points. A third Stretch claim adds 50 points. No more that three Stretch claims can be counted. A team’s score is capped at 1000 points.
When to Make Claims
A claim should be made when the feature is fully implemented and tested. Claims can be made at any time during the project, but it is recommended to make claims as soon as possible to ensure they are evaluated before the project deadline.
Claims may generally be made at two times:
During a lab or work session: Ask the instructor to evaluate your claim. He will check the feature and, if it meets the requirements, mark it as completed and award points.
In office hours: If you are unable to make a claim during a lab or work session, you can visit the instructor during office hours to have your claim evaluated.
Note: No more than three non-Basic claims can be made in a week. Plan accordingly. Claims cannot be made once final exam week begins.
Claims marked with an asterisk (*) indicate that the claim should be evaluated at the end of the project, not during development.
🚨 Claims are not yet updated for Fall 2026!
These were the claims from Spring 2026, they aren’t yet updated for Fall, but I’m publishing them now to give you an idea.
Basic Claims
Core Application Structure
B1: Application has a front page - Landing page that loads successfully Assessment: Homepage URL loads without errors and displays content
B2: Application has navigation - Menu or navigation system linking multiple pages Assessment: Navigation menu visible on multiple pages with working links
B3: Application uses Django admin interface - Admin panel accessible and functional for all models Assessment: /admin/ URL accessible, can log in, all models visible and manageable
B4: Application has 3 distinct models - At least three different Django models with appropriate fields, other than User Assessment: Three custom models defined in models.py with meaningful fields
B5: Models are stored in database - Data persists between sessions using Django ORM Assessment: Data added through app persists after server restart
*B6: Application handles 404 errors gracefully - Custom 404 page or appropriate error handling Assessment: Invalid URLs show custom 404 page or appropriate error message
*B7: Models have meaningful relationships - Foreign keys, many-to-many, or one-to-one relationships implemented Assessment: At least one relationship defined between models and functioning
*B8: Application has proper URL routing - Clean, meaningful URLs using Django’s URL patterns Assessment: URLs are readable and follow RESTful conventions
User Interface & Templates
B9: Application uses Django templates - HTML rendered using Django’s template system Assessment: Pages use .html templates in templates/ directory with Django template syntax
B10: Templates use template inheritance - Base template with child templates extending it Assessment: Base template exists and at least 2 templates extend it using {% extends %}
*B11: Application has consistent styling - CSS applied across multiple pages with cohesive design Assessment: CSS file linked and consistent styling visible across 3+ pages
*B12: Forms are styled and user-friendly - Form inputs have labels, styling, and clear layout Assessment: Forms have proper labels, styling, and submit buttons
CRUD Operations
Note: CRUD operations do not need to be implemented for all models, but at least one model must have full CRUD functionality. Make your interfaces as natural as possible – not just forms and tables, for instance.
B13: Create functionality works - Users can add new records through the web interface Assessment: Can create new records via web form, data appears in database
B14: Read functionality works - Users can view lists and details of records Assessment: Can view list of records and individual record details
B15: Update functionality works - Users can edit existing records through the web interface Assessment: Can edit existing records via web form, changes persist
B16: Delete functionality works - Users can remove records through the web interface Assessment: Can delete records via web interface, records removed from database
Authentication & Security
B17: Application has user login/logout - Users can sign in and out of the system Assessment: Login/logout forms work, user session maintained
B18: Application enforces authentication - Some pages require login to access Assessment: At least one page redirects to login when accessed anonymously
*B19: Application has basic security measures - CSRF protection and secure forms Assessment: Forms include {% csrf_token %} and CSRF middleware enabled
Intermediate Claims
Advanced Features
I20: Application handles file uploads - Users can upload and store files (images, documents, etc.) Assessment: File upload form works, files stored and retrievable
I21: Application has search functionality - Users can search and filter content Assessment: Search form returns relevant results, filters work
I22: Application has user profiles - Users can view and edit their profile information Assessment: User profile page exists and is editable
I23: Application has pagination - Large lists are broken into pages for better UX Assessment: Lists with 10+ items show pagination controls
Data & Relationships
I24: Application validates user input - Form validation with appropriate error messages Assessment: Forms show error messages for invalid input
I25: Application has data import/export - Ability to import data from files or export data Assessment: Can import/export data via CSV, JSON, or similar format
API Integration
I26: Application integrates external API - Uses at least one third-party API (weather, maps, social media, etc.) Assessment: External API data displayed and functional in app
I27: Application provides its own API - RESTful endpoints that return JSON data
Assessment: API endpoints return valid JSON and respond to requests
Assessment: API endpoints require appropriate authentication
Polish & Usability
*I28: Application is mobile-responsive - Works well on mobile devices and tablets Assessment: App layout adapts to mobile screen sizes (test at 375px width)
I29: Application has in-app documentation - Help pages, tooltips, or user guides within the app Assessment: Help content accessible within app interface
I30: Application has advanced forms - Multi-step forms, dynamic forms, or complex form widgets Assessment: Forms use advanced widgets or multi-step functionality
I31: Application has custom middleware - Custom Django middleware for logging, authentication, or other functionality Assessment: Custom middleware class defined and functioning
I32: Application has data visualization - Charts, graphs, or other visual data representations Assessment: Data displayed in charts/graphs using libraries like Chart.js
I33: Application implements permissions system - Fine-grained permissions beyond basic authentication Assessment: Different user types have different access levels
I34: Application has bulk operations - Users can perform actions on multiple records at once Assessment: Can select and act on multiple items simultaneously
I35: Application has audit trail - Track changes to important data with timestamps and user info Assessment: Changes logged with user and timestamp information
*I36: Application has internationalization - Support for multiple languages or locales Assessment: App displays in at least 2 languages using Django i18n
*I37: Application has comprehensive logging - Detailed logging system for debugging and monitoring Assessment: Application events logged to files or console
Stretch Claims
Advanced Architecture
*S38: Application uses a frontend framework - Frontend framework (React, Vue, Angular) with Django REST backend Assessment: Frontend framework implemented with Django REST API backend
S39: Application is a Single Page Application (SPA) - Dynamic frontend with client-side routing Assessment: SPA functionality with client-side routing and dynamic content loading
S40: Application uses WebSockets - Real-time features like chat, live updates, or notifications Assessment: Real-time functionality working with WebSocket connections
Complex Features
S41: Application has advanced user roles - Multiple user types with different permissions and capabilities Assessment: 3+ distinct user roles with different interface/functionality
S42: Application has real-time communication - Multiple users can meaningfully communicate with each other via the app (audio and or video) Assessment: Multiple users can join a “call” via WebRTC
S43: Application has real-time collaboration - Multiple users can work on the same content simultaneously Assessment: Multiple users can edit same content with live updates
S44: Application canvas Canvas API - makes meaningful use of (Instructure’s) Canvas API
Assessment: External API data displayed and functional in app
Innovation & Polish
S45: Application has unique or innovative features - Creative functionality not included here Assessment: Feature approved by instructor and successfully implemented
Note: Propose your own unique feature for approval BEFORE you start working on it
S46: Application has machine learning integration - Uses ML models for recommendations, predictions, or classification Assessment: ML model integrated and providing useful predictions/recommendations
S47: Application has LLM integration - Uses large language models (e.g., GPT) for advanced text generation, summarization, or conversation Assessment: LLM API integrated and providing text generation functionality
Note: You will need to find a free tier or educational access to an LLM API
S48: WebAssembly - Frontend written in a language other than js and deployed via webassembly
Assessment: …
S49: 3D - Frontend uses Three.js or other to have an immersive 3D User Interface
Assessment: …
4 - Final Project: Presentation
Final Project Presentation
You will present your final project in our usual classroom during our registrar-scheduled final exam time slot.