The basic requirements for the project are the following:
- Website topic: the choice is completely free
- Development tools: especially for students who haven't any (real) experience in building websites, it is better not to use WYSIWYG tools (i.e. programs that allow visual composition of pages and automatically generate HTML/CSS code) or content management systems (CMS): to properly master web languages, it is necessary to actually practice with them. To locally test PHP and MySQL server-side functionalities, the Apache web server, PHP application server and MySQL DBMS can be downloaded from their websites. Alternatively, the WAMP (Windows), MAMP (OS X) or XAMPP (Windows, Linux, OS X) packages can be used, which install the three components from single executables (indeed XAMPP installs MariaDB, which is a fully compatible fork of MySQL led by its original developers).
- Number of pages: there is not a specific rule; approximately, at least five
- Code: the "look and feel" of the website, including the layout, must be defined through (external) CSS (2 or 3); no deprecated tags or attributes can be used. All links should be relative. The HTML code should be either HTML5 or XHTML 1.0 Strict (the W3C Markup Validation Service can be exploited to check the pages). The direct use of ready-made HTML/CSS templates is of course discouraged, unless a strong (and clearly identifiable) personalization is introduced
- Layout: should not be simply "linear" (i.e., at least one page should use a positioning different from 'normal flow')
- Usability/Accessibility: the website should be designed according to the (very) basic usability and accessibility rules discussed in the course
- Server-side functionalities: a server-side "behavior" resulting from the interaction with an application server and a remote database must be introduced in at least one page (e.g. to process data from a form). Instead of PHP and MySQL, other application servers or similar technologies (e.g., Node.js) and DBMSs can be used, if preferred. Like for client-side functionalities, ready-made examples can be employed, provided that they are personalized in some way