# Capstone Project

For this project your team will have **completely free reign** to design and build a full-stack application to provide a service or solve a problem that you want to work on. You have **two weeks** to work on this and you will need to consider all of the steps involved in the previous projects. On the final day you will present your work to your colleagues, instructors and clients.

For this project you will be able to self-select your groups. There will be time on day 1 to pitch your project ideas to each other, after which there will be a vote to find the most popular ideas. You will then have the opportunity to choose the project you want to work on in groups of 4/5.

## Tech Stack

This is a full-stack project, meaning it must include both front and back ends. We recommend building a React app connecting to a Spring back-end to consolidate the work done so far on the course, but you can build on that by incorporating any additional functionality which you are interested in exploring.

You are free to use any additional libraries as necessary (eg. for state management, authentication, CSS libraries) but only do so if everyone in the group understands what they are for, how they work and how they fit in to the overall picture.

Planning is still an important part of the process. We want to see lots of diagrams - entity relationship diagrams, class diagrams, wireframes, relationships between components. As always we recommend using an online tool such as Miro or Figma to make collaboration easier, but which one you use is up to you.

If you plan on using an external API in your projects make sure you can get all the information you need from it before you commit to using it. Likewise with any new libraries or code examples you find online. The trainers will be available to help throughout the two weeks but we'll likely be learning alongside you, so make sure you have taken the time to fully investigate everything so that you can explain your problem better.

## Project Management

You should create a **public** GitHub repository **before you start writing any code** and post the link on the Discord submissions channel. It is up to you how to manage your branch structure, but we expect to see contributions from **every** member of the group. Make sure that the most up-to-date working version of your project is merged to the `main` branch ahead of your presentation.

We recommend using something like a [Kanban board](https://kanbanize.com/kanban-resources/getting-started/what-is-kanban-board) to help you manage your time. You can use a free service such as Trello or the built-in tools on GitHub, even something like Google Drive to facilitate collaboration.

How tasks are assigned is up to each group. If you are working individually or in pairs remember that communication is the most important tool you have at your disposal and that many problems will be averted if the whole team has regular check-ins.

You can work on the project outside of normal working hours, but there is no expectation of this. It will be up to each group to decide on how to structure the week to ensure everyone is able to contribute effectively. Don't be tempted to rush off and do extra work without keeping your colleageus in the loop, but also make sure you stick to any commitments you make. Trainers and mentors **will not be available** outside of working hours.

When asking for help please use the tech-questions channel on Discord and try to give as much detail as possible. If any of your colleagues have had a similar issue they may be able to help, plus more detail makes it easier for the trainers to help too.

## Presentation

The project will culminate in a presentation to the rest of the cohort along with some invited guests from industry. Each group will have **10 minutes** to present their work, plus some time for questions from the audience. Your presentation should include:

* A discussion of your planning
* A demo of your app
* Discussion of some of the code. What were you particularly proud of? Were there any bugs you found really difficult to squash?
* Contributions from **everyone** on the team

Do not go through the code line by line, you won't have time. Try to avoid showing the editor during the presentation as jumping between files can be very confusing for the viewer and time-consuming for the presenter. Instead use a tool such as [Carbon](https://carbon.now.sh/) or the [Polacode](https://marketplace.visualstudio.com/items?itemName=pnp.polacode) extension for VSCode to generate screenshots of code you want to talk about and add them to your slides.

## Next Steps

When you finish work on your app you should make sure that it has been thoroughly tested and that there are no hidden bugs. Create a `README` file with any instructions for using your app. Take a look at [this article](https://www.freecodecamp.org/news/how-to-write-a-good-readme-file/) for some tips on writing a good README.
