Web and Software Architecture
Bachelors in ACSAI
•3rd Year, 1st Semester
Instructor:
Prof. Emanuele Panizzi
Friday 12 June 2026
Exam schedule of the June appeal is available
The appeal is on Tuesday, June 16th, 2026 The list of admitted students is available here: Schedule for June 2026 exams.
IMPORTANT: exams will be in our lab: GamificationLab, via dei Volsci 122.
IMPORTANT! Remind to bring an identity document and a laptop with you. More information in the exam page.
Friday 10 April 2026
Exam schedule available for the April Extra-ordinary appeal
The appeal is on Tuesday, April 14th, 2026
The exam schedule for oral discussions is available here: Schedule for April 2026 exams.
IMPORTANT: exams will be in our lab: GamificationLab, via dei Volsci 122.
IMPORTANT! Remind to bring an identity document and a laptop with you. More information in the exam page.
Wednesday 25 February 2026
Extraordinary appeal information
The appeal will be on Tuesday, April 14th, 2026
Hoewver, due to the Easter holidays, the daily evaluations will be anticipated as follows:
- daily from Wednesday March 25th to Wednesday, April 1st included
- then, Wednesday April 8th and Thursday April 9th (in the morning, last evaluation).
Remember to push your final submission by Wed 8 night or Thu 9 early morning.
Registrations on Infostud are already open and will close on Wednesday 8 at 23:59.
Monday 16 February 2026
Final exam schedule of the February appeal is available
The appeal is on Tuesday, February 17th, 2026 The list of admitted students is available here: Schedule for February 2026 exams.
IMPORTANT: exams will be in our lab: GamificationLab, via dei Volsci 122.
IMPORTANT! Remind to bring an identity document and a laptop with you. More information in the exam page.
Friday 13 February 2026
Tentative Exam schedule available for the February appeal
The appeal is on Tuesday, February 17th, 2026
The list of students who passed the homework is available here: Schedule for February 2026 exams.
Unfortunately, due to last week’s ransomware attack, the Infostud system is currently unavailable. As a result, we do not have access to the list of registered students.
If you wish to participate in the oral appeal, you must register again using this Google Form
Students who do not complete the form will be removed from the list next Monday, when the final schedule will be published.
If you are planning to travel and require confirmation in order to book transportation, please contact Prof. Panizzi directly.
IMPORTANT: exams will be in our lab: GamificationLab, via dei Volsci 122.
IMPORTANT! Remind to bring an identity document and a laptop with you. More information in the exam page.
Monday, February 9 2026
Student Instructions for WASA Homework Submission and Exam Booking During System Downtime
Due to the ransomware attack of last week, the Infostud system is not active. For registering to the WASA exam, if Infostud doesn’t work by Wednesday evening, I will open a Google form.
The submission and evaluation of the WASA homework is back to normal (we missed only one day of evaluations). Remember to push your code to your GitHub repository, and you will receive your evaluation daily (still 4 to go).
evaluation results are available here
Thursday, 22 January 2026
WASAtext homework 3 (Vue) interactive functionality check
We strongly encourage every WASA student to verify that their code correctly performs the main operations required by the project specification, and we provide a checklist for execution.
Friday 16 January 2026
Exam schedule available for the January appeal
The appeal is on Tuesday, January 20th, 2026
The exam schedule for oral discussions is available here: Schedule for January 2026 exams.
IMPORTANT: exams will be in our lab: GamificationLab, via dei Volsci 122.
IMPORTANT! Remind to bring an identity document and a laptop with you. More information in the exam page.
Thursday, 15 January 2026
Notice
The project evaluation process is currently ongoing. The results will presumably be published tomorrow morning.
Thursday, 18 December 2025
Lesson: Antigravity
Topic:
- WASA Vibe coding
Announcements:
- Exams will be on:
- Tuesday, 20 January
- Tuesday, 17 February
- Please book on Infostud today to avoid forgetting it.
- The final evaluations will be on the Thursday morning before the appeals (i.e., 15th January and 12th February)
- This is the last class of our course. Merry Christmas and Happy New Year to all of you.
Exams FAQ
- We can not find the exam on Infostud to register for it. Is there another way to register?
- I opened the appeals; please try again. We also want to know when exactly the oral exams will take place, because on we have a different exam at 14:00.
- The exams will take place the whole day. It is not possible for another exam to be scheduled on that day for the same program and the same year. In fact, they carefully avoided any overlaps, and official exam schedules were published. Should it be so, please contact the secretariat at segreteria.didattica@di.uniroma1.it Is it possible to ensure that we can attend the oral exam before 2:00PM?
- No. As I said, exams might continue till 7 pm, depending on the number of students
Video recording - part 1
Video recording - part 2
Tuesday, 16 December 2025
Lesson: Containers
- Containers introduction
- Homework 4 is open: you must create two
Dockerfiles: one namedDockerfile.frontendfor the frontend part, one namedDockerfile.backendfor the backend part. - On WASA book, chapter 7 you can find a detailed description about how to create the two
Dockerfiles.
ANNOUNCEMENTS
- Tomorrow, I will make the last hw evaluation of 2025. Evaluations will start again on Wednesday, 7 January, 2026.
- Next thursday will be the last lesson, and we will cover a new topic: how to design and code the WASA project using the AI (Antigravity).
Thursday, 11 December 2025
Vue practice
- Vue exercise: independent counters
We want to make a page with many different counters to track the numebr of students in different classes. Each counter has these characteristics:
- has two buttons + and - to increment and decrement
- non-negative
- it has a label (i.e. the class name)
- its background is yellow if it is below 5 or above 100
- it must be possible to add more counters and to remove counters
App.vue
<script>
import Counter from './Counter.vue'
export default {
data() {
return {
coursenames: ['WASA','HCI'],
cname: ""
}
},
methods: {
appendCourse(cname) {
this.coursenames.push(cname);
},
deleteCourse(cname) {
let index = this.coursenames.indexOf(cname);
this.coursenames.splice(index,1);
}
},
// register the component
components: {
Counter
}
}
</script>
<template>
<h1>My counters</h1>
<p>
<Counter v-for="name in coursenames" :coursename="name" />
</p>
New course: <input type="text" v-model="cname" />
<button @click="appendCourse(cname)">ADD</button>
<button @click="deleteCourse(cname)">DEL</button>
</template>
Counter.vue
<script>
export default {
props: ['coursename'],
data() {
return {
count: 0,
counterstyle: "background-color: yellow;"
}
},
methods: {
incr() {
this.count++;
if (this.count < 5 || this.count >= 100) {
this.counterstyle = "background-color: yellow;";
} else {
this.counterstyle = "background-color: white;";
}
},
decr() {
if (this.count > 0) {
this.count--;
}
if (this.count < 5 || this.count >= 100) {
this.counterstyle = "background-color: yellow;";
} else {
this.counterstyle = "background-color: white;";
}
}
}
}
</script>
<template>
<p>
{{coursename}}:
<button @click="decr">-</button>
<span :style="counterstyle">
{{count}}
</span>
<button @click="incr">+</button>
</p>
</template>
<style scoped>
button { font-weight: bold; color:blue;}
</style>
HW3 is now open for submissions
Tuesday, 9 December 2025
Lesson: vue, Axios and CORS
- Vue Reactive
- Vue Router see also WASA book, chapter 6.5
- JavaScript asynchronous
- Vue Axios
- CORS Basics
- SOP and CORS
Announcement: ITMeeting next Monday, Dec 15th.
Thursday, 4 December 2025
Practice: vue
- Vue basics continued from slide 15
- Vue intro continued from Anatomy of a Vue.js SPA
- Vue Template
Vue example
App.vue
<script>
import ButtonCounter from './ButtonCounter.vue'
export default {
// register the component
components: {
ButtonCounter
}
}
</script>
<template>
<h1>My counters</h1>
<p>
<ButtonCounter />
<ButtonCounter />
</p>
</template>
ButtonCounter.vue
<script>
export default {
data() {
return { count: 0 }
}
}
</script>
<template>
<button @click="count++">PUSH ME</button> Count is: {{ count }}<br></br>
</template>
<style scoped>
button { font-weight: bold; color:blue;}
</style>
Please modify it so that we have many counters, each one with a name, with two buttons (for increment and decrement) and with a different style according to the counter value (e.g. red for negative numbers).
Announcement: ITMeeting (Recommended for third year Bachelor’s or Master’s degree students)
On Monday, December 15th, 2024, from 9:30 a.m. to 4:00 p.m. will take place the 54th ITMeeting, the six-monthly meeting between undergraduates and recent graduates of the Sapienza Computer Science Degree Courses and companies producing or large users of IT solutions.
The meeting will be held from 9:30 to 16:00 in Viale Regina Elena 295, Building D and Aula Magna.
During the day, it will be possible to hold 10-minute interviews with each company and to attend the presentations of their activities, job opportunities,and offers for degree theses and internships. Classes for third-year bachelor’s and second-year master’s students will be suspended.
A few days before the event, each student will be provided with a summary document of the day, also containing the times of their own interviews with the individual companies.
Students can participate in the interviews upon registration on the form.
Thursday, 27 November 2025
Announcement: no classes today nor tuesday
Next class will be on Thursday, December 4th.
Tuesday, 25 November 2025
Lesson: Javascript, Vue.js
Thursday, 20 November 2025
Lesson: HTML and CSS
Tuesday, 18 November 2025
Lesson: Go project structure (best practices)
Example:
openapi: 3.0.0
---
# 1) Define the security scheme type (HTTP bearer)
components:
securitySchemes:
bearerAuth: # arbitrary name for the security scheme
type: http
scheme: bearer
# 2) Apply the security globally to all operations
security:
- bearerAuth: [] # use the same name as above
# 3) You can override security scheme in single operations, e.g.:
security: [] # No security
- GO Project structure
- We will discuss this code:
- OPIS questionnaire. Fill out the questionnaire during class. OPIS code: ZRXB15PK
- Implementation of a Hi-Lo game webapp:
Homework2 is officially open to submissions
Note on the login in the project
In the WASAtext project, we asked for a kind of login functionality and provided instructions on how to implement it. Despite its name, we intended it as a means for you to test your web application and to demonstrate it at the exam.
So it is not a proper login and has no security capabilities. It is more of a way to create users in your system and impersonate them to test that it works properly.
For example, after creating two users, Mario and Luigi, you can impersonate Mario and send a message to Luigi, then impersonate Luigi read and reply to Mario’s message.
Please refrain from implementing an entire authentication system, using well-formed tokens, or designing different APIs than the one provided for this functionality!
Thursday, 13 November 2025
Lesson: GO packages, GO exercise
- GO packages
- WASA book, chapter 5.3
- exercise: server web in go
Suggested Go exercises: WASA book, chapter 5.6
Tuesday, 11 November 2025
Lesson: GO interfaces, errors
Thursday, 6 November 2025
Lesson: GO
- How to submit your homework 1
- GO Basics
- GO Structs
- GO Functions
- GO Control Structures
- WASA book, chapter 5.
Friday 31 October 2025
Exam schedule available for the Extra-ordinary appeal
The appeal is on Tuesday, November 4th, 2025
The exam schedule for oral discussions is available here: Schedule for November 2025 exams.
IMPORTANT: exams will be in our lab: GamificationLab, via dei Volsci 122.
IMPORTANT! Remind to bring an identity document and a laptop with you. More information in the exam page.
Thursday, 28 October 2025
WASAText Project: specifications and Homework 1
- Fountain exercise on swagger
openapi: 3.0.0
info:
title: Fountains
description: |
This API allows locating and creating fountains in a town.
version: 0.0.1
paths:
/fountains:
post:
summary: add (create) a new fountain
description: |
add a new fountain and get back the fountain id
requestBody:
description: all the attributes are used but the id
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/fountain"
responses:
"201":
description: new fountain created
content:
application/json:
schema:
type: integer
get:
summary: list all fountains
description: |
obtain the list of all the fountains,
with coordinates (lat and lon), status (good/faulty)
Specifying lat and lon, it returns the 5 nearest fountains
parameters:
- name: lat
required: false
in: query
schema:
type: number
- name: lon
required: false
in: query
schema:
type: number
responses:
"200":
description: |
It is an array of objects
containing the fountain id, its coordinates
and its status
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/fountain"
"400":
description: |
either lat or lon missing or out of range
/fountains/{id}:
parameters:
- name: id
in: path
required: true
description: this is the fountain id
schema:
type: integer
description: |
an incremental number
for each fountain
delete:
summary: remove a fountain
description: |
this deletes the fountain forever
responses:
"200":
description: fountain removed successfully
"404":
description: fountain not found, nothing has been deleted
put:
summary: change fountain data (lat and/or lon and/or status)
description: |
the old attributes will be overriden
requestBody:
description: |
all the attributes are necessary and will override the old
ones (not the id)
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/fountain"
responses:
"204":
description: An existing fountain has been updated
"400":
description: |
one or more fields are incorrect
"404":
description: |
Fountain not found. Nothing has been changed.
"422":
description: |
fountain id in the path and in the body do not match
get:
summary: get fountain information
description: |
Return the attributes of the fountain, lat, lon, status
responses:
"200":
description: |
the fountain is described in the body of this response
content:
application/json:
schema:
$ref: "#/components/schemas/fountain"
"404":
description: fountain not found
components:
schemas:
fountain:
type: object
properties:
id:
type: integer
lat:
type: number
lon:
type: number
status:
type: string
enum:
- good
- faulty
- API best practices and common mistakes WASA book, chapter 4.5
- Exam project specifications
- Homework 1: OpenAPI document
Thursday, 23 October 2025
Practice: Fountains
Exercise

Define the API for the Fountains project (fountains are called Fontanelle or Nasoni in Rome). The Fountains project includes a mobile app that allows citizens and tourists to explore nearby drinking fountains.
In Rome, drinking water is available thanks to little public fountains, also known as “nasoni” (“large noses”, due to their nose-like shape). They were installed in the late 1800 by the local municipalities in the capital city and nearby areas. More than 2500 are still working. The “Fountains” project includes a mobile app that allows citizens and tourists to explore nearby drinking fountains (see their location and status). Also, they will be able to change the status or location of any fountains, add missing fountains, and remove those that are no longer present. A fountain’s status is “good” when it is in working condition and “faulty” if broken. The app will communicate with a central server via REST and JSON - no information is stored locally in the smartphone. No authentication is needed, nor is user identification.
WASA BOOK section 4.3.
Tuesday 21 October 2025
News appello straorinario
Daily assessments begin tomorrow, and the last one will be Thursday morning, October 30th, so the deadline for pushing your code to the github repo is Wednesday evening. Registration for the exam on Infostud must also be completed by Wednesday evening, October 29th. The oral exams, if admitted, will be Tuesday, November 4th.
Practice API
In the exercise we decided to avoid creating a new game using the PUT /games/{id} operation, so we did not define the 201 response; on the other hand we had to define the 404 response as follows:
put:
summary: reset a game
description: |
reset an existing game generating a
new secret number and resetting the
guess counter
responses:
"200":
description: An existing game is reset
"404":
description: |
Game not found. Nothing has been reset
Also, we modified the response content for the POST /games/{id} and the GET /games/{id} to include the guess value:
content:
application/json:
schema:
type: array
items:
type: object
properties:
guess-count:
type: integer
minimum: 1
maximum: 10
guess-value:
type: integer
minimum: 1
maximum: 100
guess-outcome:
type: string
enum:
- hi
- lo
- correct
"404":
description: game not found
and finally these are the components that we defined:
components:
schemas:
guess:
type: object
properties:
guess-count:
type: integer
minimum: 1
maximum: 10
guess-value:
type: integer
minimum: 1
maximum: 100
guess-outcome:
type: string
enum:
- hi
- lo
- correct
final-result:
type: object
properties:
id:
type: integer
outcome:
type: string
enum:
- win
- lose
guesses:
type: integer
- TODO today
- fill out the OPIS form: ZRXB15PK
Internships available (Theses)
Thursday October 16 2025
Practice: API
Tuesday 14 October 2025
Lesson: HTTP, JSON, YAML, API
- IMPORTANT: ROOM CHANGED
- On Tuesdays, starting TODAY, WASA room is changed to Aula 7 Castro Laurenziano see address below. (Room 11 will no longer be used by WASA on tuesdays, but will still be used on thursdays)
Tuesday October 14 2025
Classroom Change on Tuesdays: Room 7 Castro Laurenziano
From now on, every Tuesday starting today, we will be in room 7 via del Castro Laurenziano 7/a.
Monday October 6 2025
No classes this week
Next class will be on Tuesday October 14th.
Thursday October 2 2025
Practice: Git (continued)
Today’s lesson (Thursday October 2 2025) is confirmed in our normal room Aula 11 Via Scarpa.
- practical git WASA book, chapter 2.5
- exercise notes by Marco Realacci
- Useful Git alias:
git lg:
$ git config --global alias.lg "log --graph --abbrev-commit \
--decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) \
- %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- \
%an%C(reset)%C(bold yellow)%d%C(reset)' --all"
Tuesday, September 30 2025
Lesson: Git (continued)
- REMINDER
- today’s lecture is in room Aula 11 Via Scarpa 10c
- Git merge conflicts
- Remote git repos and forges Video recording
BLACKBOARD

Thursday 25 September 2025
Lesson: Git
- REMINDER
- today’s lecture is in room 203 Marco Polo Building
Tuesday 23 September 2025
Lesson: Introduction, Web apps, and REST
This is the first lecture for the new academic year 2025/26. Welcome!
Introduction
Announcements:
- Gamification Lab Website
- ITMeeting
Topics today:
Thursday 17 September 2025
Extra-ordinary appeal
The extraordinary appeal will be on Tuesday, November 4. The deadline for the last homework submission, as well as to register on Infostud, is:
Wednesday, October 29, 23:59
Homework evaluation will be weekly on Wednesday starting again from Wednesday September 24th and then daily from Wednesday October 22nd to Thursday October 30th.
The appeal is already open on Infostud: Please register now!
Thursday 17 September 2025
WASA 2025/2026 will start next week
The classes will be on
- Tuesdays, 3 PM to 6 PM
- Thursdays, 4 PM to 6 PM
For the first week (i.e. 23 and 26 september), the room is:
Aula 203 Marco Polo (second floor) Circonvallazione Tiburtina 4.
