survy

Survy is a web platform that allows you to create, manage, share and analyze surveys. It is a tool for market research, customer feedback, and more. With Survy, your customers can answer surveys on their own and you can analyze the results in real-time.

I created Survy as a side project to gain more freedom when creating surveys for my own projects. Current tools have limited options when it comes to how the users interact with the survey and how the results are analyzed.
The analysis of the results can be done inside Survy or you can export the results in .csv or .json formats.
Data relationships

I planned this project with a data-first approach. I wanted the database to allow for flexibility in the type of questions that can be posed.
User is the survey creator
The table user relates to the person that creates the survey. Only one person can create a survey. The participants do not need to be signed in and, depending on the settings of the survey, they can be anonymous (more on that later).
A survey as a whole
One survey is regarded as a group of questions. The questions are ordered and may be optional. The creator must enter a title and can enter a description as an introduction for the survey.
Questions inside the Survey
A survey contains questions. Each question is stored in the table question. There is a one-to-many relationship between survey and question.
Question Types
Depending on the type of question selected by the creator, some options can be changed (e.g. the min/max value in a scale question). If a question is a multiple choice question, the options are stored a separate table that references the question. The answer of the user later references the id of the question and the option.
Visibility settings

Public
Anyone can participate in a public survey. They only need the link to it to be able to answer the questions. This can be useful for large-scale surveys.
Private (password protected)
A password protected survey can only be accessed with the correct password. This can be useful for surveys that are only accessible to a limited group of people. Since participants do not need to be signed in, we are technically limited in how we block them from participating more than once. This is not a problem for most surveys, but if you need to be more strict, you can use the "Private (token)" setting.
Private (token)
A token protected survey can only be accessed with a valid token. This token is generated by the creator and can only be used once. This is useful if you want to limit the number of participants or if you want to be more strict about who can participate.
Creating questions

Every question needs a Question Prompt. This is the text that will be asked to the participant. A question also needs to have a type. Think of it as the way the participant will answer the question. Current question types are:
- Text
- Boolean
- Scale
- Multiple choice
In addition to the question type, a question can also have a description. This is the text will be shown to the participant in the form of a helper text or, depending on the question type, a tooltip.
The creator of the survey can also decide if the question is required or not. If it is required, the participant will not be able to submit the survey without answering the question.
Participant view

When the survey is taking place, this is the view that the participant will see. Here they can answer the questions one by one (from top to bottom) and submit the survey when they are done. If a question is optional, the participant can skip it and continue to the next question.
Viewing Responses

The responses to the survey are stored in the table response. There is a one-to-many relationship between survey and response. In this page, the responses can be either grouped by participants or by question. This is useful to see the overall answers to the survey, but also to see the answers to each question. Here you can also export the responses to a .csv file.
Creating a new survey

When creating a new survey, the creator enters a title and, optionally, a description and icon. If the creator enables the "Anonymous Survey" setting, the participants will not be asked to enter their name. The "Show Banner" setting allows the creator to choose whether to show an introductory page before enetering the survey.
Impact of the project
This project was a great learning experience. I learned a lot about the process of building a full-stack web application from scratch. I also improved my skills in backend and database design, including logic for different settings and flows throughout the usage of the app.
A live link to Survy can be found here.