Site where there are simulations of the theoric part of unitn exam "linguaggi di programmazione - mod 1"
Site where there are simulations of the theoric part of unitn exam "linguaggi di programmazione - mod 1".
link to the site: https://unitn-tronchet.euber.dev
The UniTN's "Programming Languages" exam's theoric part consists in some code examples in wich the student must find errors or write the output whether there are none and some true or false questions. On the professor's site there are only few examples and the repository with all the old exams has not all the solutions. This is why I made this site, where not only can students see the old exams with the solution, but can enjoy a real simulation, with time and final score.
Unitn Tronchet is also a PWA. This means that the site is cached and can be (partially) used even offline. On android devices the user is asked if he wants to add the site to the home screen, on mac os it can be added by the chrome menu.
The site's frontend has been made with Vue.js and Typescript, in particular by using the Vuetify.js ui framework. vue-router has been used for the routing, Vuex as the data store and a service-worker was added to make the site a PWA. With a Firebase Cloud Messaging", if the user agrees when the site gets entered for the first time, I can send Push Notifications when for instance I add a new exam or fix a bug. The server was made with Node.js, it simply serves the site, hosted with Heroku.
To build the project:
Node.js
npm i
to download the node modulesfrontend
folder of the repo, execute npm i
and npm run build
to build the frontendmain.local.js
file is the local server, without all Heroku trash. Without the decrypted firebase config file, push notification will not work. Run node main.local
on the root folder to run the local serverhttp://localhost:8080
Made with dree
unitn-tronchet
├── firebase-decrypted.json
├── firebase-encrypted.txt
├─> frontend
│ ├── .browserslistrc
│ ├── .env
│ ├── babel.config.js
│ ├── package-lock.json
│ ├── package.json
│ ├── postcss.config.js
│ ├─> public
│ │ ├── favicon.ico
│ │ ├── favicon.png
│ │ ├── firebase-messaging-sw.js
│ │ ├─> img
│ │ │ └─> icons
│ │ ├── index.html
│ │ ├── manifest.json
│ │ ├── read_the_fucking_manual.png
│ │ └── robots.txt
│ ├── README.md
│ ├─> src
│ │ ├── App.vue
│ │ ├─> assets
│ │ │ └── content-copy.svg
│ │ ├── auth.ts
│ │ ├── cloud-messaging.ts
│ │ ├─> components
│ │ │ ├─> confirm-dialog
│ │ │ │ ├── ConfirmDialog.enum.ts
│ │ │ │ └── ConfirmDialog.vue
│ │ │ ├─> content
│ │ │ │ └── Content.vue
│ │ │ ├─> drawer
│ │ │ │ └── Drawer.vue
│ │ │ ├─> exam
│ │ │ │ ├─> exam-card
│ │ │ │ │ ├─> exam-card-bottom
│ │ │ │ │ │ └── ExamCardBottom.vue
│ │ │ │ │ ├─> exam-card-exercise
│ │ │ │ │ │ ├─> exam-card-code-exercise
│ │ │ │ │ │ │ ├─> exam-card-code
│ │ │ │ │ │ │ │ └── ExamCardCode.vue
│ │ │ │ │ │ │ ├─> exam-card-code-answer
│ │ │ │ │ │ │ │ └── ExamCardCodeAnswer.vue
│ │ │ │ │ │ │ └── ExamCardCodeExercise.vue
│ │ │ │ │ │ ├─> exam-card-true-or-false-exercise
│ │ │ │ │ │ │ └── ExamCardTrueOrFalseExercise.vue
│ │ │ │ │ │ └── ExamCardExercise.vue
│ │ │ │ │ ├─> exam-card-score
│ │ │ │ │ │ └── ExamCardScore.vue
│ │ │ │ │ └── ExamCard.vue
│ │ │ │ └── Exam.vue
│ │ │ ├─> footer
│ │ │ │ └── Footer.vue
│ │ │ ├─> home
│ │ │ │ ├─> home-card
│ │ │ │ │ └── HomeCard.vue
│ │ │ │ └── Home.vue
│ │ │ ├─> login
│ │ │ │ ├─> login-card
│ │ │ │ │ ├─> login-card-form
│ │ │ │ │ │ ├── credentials.interface.ts
│ │ │ │ │ │ └── LoginCardForm.vue
│ │ │ │ │ └── LoginCard.vue
│ │ │ │ └── Login.vue
│ │ │ ├─> not-found
│ │ │ │ └── NotFound.vue
│ │ │ └─> toolbar
│ │ │ ├─> state-bar
│ │ │ │ └── StateBar.vue
│ │ │ └── Toolbar.vue
│ │ ├── firebase.ts
│ │ ├─> locales
│ │ │ ├── en.json
│ │ │ └── it.json
│ │ ├── main.ts
│ │ ├─> plugins
│ │ │ ├── i18n.ts
│ │ │ └── vuetify.ts
│ │ ├── registerServiceWorker.ts
│ │ ├── router.ts
│ │ ├─> schema
│ │ │ ├─> data
│ │ │ │ ├── esame_2005-06.ts
│ │ │ │ ├── esame_2005-07.ts
│ │ │ │ └── exams.ts
│ │ │ └─> types
│ │ │ ├── answer.interface.ts
│ │ │ └── exam.interface.ts
│ │ ├── shims-tsx.d.ts
│ │ ├── shims-vue.d.ts
│ │ ├── store.ts
│ │ ├── valutation.ts
│ │ └─> views
│ │ ├── ExamView.vue
│ │ ├── HomeView.vue
│ │ ├── LoginView.vue
│ │ └── NotFound.vue
│ ├── tsconfig.json
│ ├── tslint.json
│ └── vue.config.js
├── local.json
├── main.js
├── main.local.js
├── package-lock.json
├── package.json
├── Procfile
├── README.md
├─> utilities
│ ├── firebase-credentials.js
│ ├── firebase-encryption.js
│ └── redirect.js
└─> vuejs