TDDD27 Advanced Web Programming
Requirements
Project Requirements:
Heavy focus on interactivity and data added to the system by users. Applications that focus solely on presenting and searching in online databases are not sufficient.
Having to reload pages to get data from the server is not ok.
Your project must have a rellativelly large volume and unique functionality. This is a *new requirement* from 2024, in light of modern sharing of content and the ease with which these "bolier-plate projects" can be downloaded and/or generated. Examples of boiler-plate proejcts what will not be passable in 2024 are:
* Social network with basically sening messages to one another or version there of (such as sending information about transactions).
* Databases that are serached and where a user can save a list of bookmarks such as a food recepie service.
* Forms based system for registring such as a booking system.
Boiler-plate proejcts must have much more unique feautres, more interactive features, and for instance multi-user support whre multiple users can work like in Google Docs at the same time on the samve view.
Speding time on non-web, web APIs has low value. Such as working extensivelly with the the Spotify API, which is JavaScript eposing another komplex system. Use it, but focus on developing the web system around it.
Using generative AI to cerate content in the app has low value (inte terms of grading). Use it, but focus on developing the system around it.
### *Client-side* requirements:
Your framwork should be a framwork that is used to produce larger and more advanced applications (interactive systems) and have more functionality than simply UI-components. E.g.g Bootstrap is, for instance, not sufficient. Something like React or more advanced, basically.
Examples of frontend (browser) frameworks to use:
* [React](https://reactjs.org/)
* [Vue](https://vuejs.org/)
* [Angular](https://angular.io/)
* [Next](https://nextjs.org/)
* [Nuxt](https://nuxt.com/)
* [Svelte](https://svelte.dev/)
* [Solid](https://www.solidjs.com/)
* [Lit](https://lit.dev/)
... or find something. Put your proposal on the repo and I will get back to you. This should not be someting simpler that React or Svelte.
An important limitation is that the frameworks **must be javascript- or typscript-based** and not e.g. rust-based and not **flutter** since they live outside the normal web-development space and are not in line with the learnign goals of the course even though it can run on the web. With C++ anything can run on the web, so that cannot be our focus. Also, in most cases WEBGL and Canvas are not the relevant parts of the web for the course larning goals
---
### *Server-side*:
You must use a backend which stores data and manages the system and/or user state. USer-based interaction should change this data extensivelly.
You may use Micro framworks to create your backend. Check out this list [Wikipedia Microframworks](https://en.wikipedia.org/wiki/Microframework) or more large scale backends like Ruby on Rails and Django. (only remember to run your backend as REST or API) [Azure functions](https://azure.microsoft.com/en-us/services/functions/), [AWS lambda](https://aws.amazon.com/lambda/) and [Firebase Cloud functions](https://firebase.google.com/docs/functions) with some form of datastorage option.
You may use a serverless backends such as [Firebase](www.firebase.com), [Azure functions](https://azure.microsoft.com/en-us/services/functions/), [AWS lambda](https://aws.amazon.com/lambda/), [Google Cloud](https://cloud.google.com/?hl=en).
You may also use a [GrapQL](https://graphql.org/)-backend to manage your server endpoint work like [Apollo](https://www.apollographql.com/).
**Adding and mixing many different APIs and REST-services directly from the client *and* from the backend is really the perfect project. The mix of system running independently is a centera part of web development. But it should be both on the frontend (web browser) and on REST/API servers.**
---
### Additional focus arease of benefit to you (but not a strict requirement)
*Deployment*
In the course, deployment is not a factor. You may run local development only. But if you work on deployment that is a plus. Also, advanced deployment work with CI/CD-integration and containers and so forth ... yes by all means.
*User managment and Persistent storage*
Look at best practice for your framework and use that. Look for intelligent use of tools and plugins to minimize the amount of code you have to write.
*Auth services*
Tehcologies that enable you to separate your server logic from user data, even at different servers and systems, is interesting. Here is a good place to use things like [Firebase](http://firebase.com) or [Stormpath](https://stormpath.com/), [auth0.com](https://auth0.com/), [UserApp](https://www.userapp.io/) and [AuthRocket](https://authrocket.com/)
Issues of personal data handling, GDPR, and PCI-II complicence pushes the technology area towards separing user data from system data, even personal data from state-information. Joining data in the client securly without passing it via servers is really relevant for web development.
**If you know what you're doing and want to try other things that is large scale web development - YES! Put it into your proposal on the proejct repo.**
Page responsible: Erik Berglund
Last updated: 2024-03-26