diff --git a/src/install.php b/src/install.php
new file mode 100644
index 0000000..30dfeff
--- /dev/null
+++ b/src/install.php
@@ -0,0 +1,287 @@
+<?php
+if (php_sapi_name() != "cli") {
+  exit();
+}
+
+// Classes autoload
+spl_autoload_register(function($className) {
+  if ($className == "lbuchs\WebAuthn\Binary\ByteBuffer") include_once(__DIR__."/lib/WebAuthn/Binary/ByteBuffer.php");
+  else include_once(__DIR__."/inc/".$className.".php");
+});
+
+require_once("config.php");
+$con = @mysqli_connect($conf["db"]["server"], $conf["db"]["user"], $conf["db"]["password"], $conf["db"]["database"]) or die("There was an error connecting to the database.");
+mysqli_set_charset($con, "utf8mb4");
+
+echo "Benvingut a l'instal·lador de l'aplicació 'Hores'.\n\n";
+echo "Entra els detalls del primer usuari administrador de l'aplicació:\n";
+echo "Nom d'usuari: ";
+$username = mysqli_real_escape_string($con, trim(fgets(STDIN)));
+
+echo "Contrasenya: ";
+system('stty -echo');
+$pw = mysqli_real_escape_string($con, password_hash(trim(fgets(STDIN)), PASSWORD_DEFAULT));
+system('stty echo');
+echo "\n";
+
+echo "Nom complet: ";
+$name = mysqli_real_escape_string($con, trim(fgets(STDIN)));
+
+echo "DNI: ";
+$dni = mysqli_real_escape_string($con, trim(fgets(STDIN)));
+
+echo "Correu electrònic: ";
+$email = mysqli_real_escape_string($con, trim(fgets(STDIN)));
+
+echo "\nGenerant taules de la base de dades:\n";
+
+$sql = [];
+
+$sql["people"] = "CREATE TABLE people (
+  id INT NOT NULL AUTO_INCREMENT,
+  PRIMARY KEY(id),
+  username VARCHAR(50) NOT NULL UNIQUE,
+  password VARCHAR(255) NOT NULL UNIQUE,
+  type INT,
+  name VARCHAR(255) NOT NULL,
+  dni VARCHAR(10) NOT NULL,
+  email VARCHAR(255) NOT NULL,
+  category INT DEFAULT -1,
+  INDEX(category),
+  secondfactor INT DEFAULT 0
+)";
+
+$sql["companies"] = "CREATE TABLE companies (
+  id INT NOT NULL AUTO_INCREMENT,
+  PRIMARY KEY(id),
+  name VARCHAR(100) NOT NULL UNIQUE,
+  cif VARCHAR(100) NOT NULL
+)";
+
+$sql["workers"] = "CREATE TABLE workers (
+  id INT NOT NULL AUTO_INCREMENT,
+  PRIMARY KEY(id),
+  person INT NOT NULL,
+  INDEX(person),
+  company INT NOT NULL,
+  INDEX(company)
+)";
+
+$sql["workhistory"] = "CREATE TABLE workhistory (
+  id INT NOT NULL AUTO_INCREMENT,
+  PRIMARY KEY(id),
+  worker INT NOT NULL,
+  INDEX(worker),
+  day INT NOT NULL,
+  status INT NOT NULL
+)";
+
+$sql["categories"] = "CREATE TABLE categories (
+  id INT NOT NULL AUTO_INCREMENT,
+  PRIMARY KEY(id),
+  name VARCHAR(100) NOT NULL UNIQUE,
+  parent INT NOT NULL,
+  emails TEXT
+)";
+
+$sql["calendars"] = "CREATE TABLE calendars (
+  id INT NOT NULL AUTO_INCREMENT,
+  PRIMARY KEY(id),
+  category INT NOT NULL,
+  begins INT NOT NULL,
+  ends INT NOT NULL,
+  details TEXT NOT NULL
+)";
+
+$sql["scheduletemplates"] = "CREATE TABLE scheduletemplates (
+  id INT NOT NULL AUTO_INCREMENT,
+  PRIMARY KEY(id),
+  name VARCHAR(50) NOT NULL UNIQUE,
+  begins INT NOT NULL,
+  ends INT NOT NULL
+)";
+
+$sql["scheduletemplatesdays"] = "CREATE TABLE scheduletemplatesdays (
+  id INT NOT NULL AUTO_INCREMENT,
+  PRIMARY KEY(id),
+  template INT NOT NULL,
+  INDEX(template),
+  day INT NOT NULL,
+  typeday INT NOT NULL,
+  beginswork INT NOT NULL,
+  endswork INT NOT NULL,
+  beginsbreakfast INT,
+  endsbreakfast INT,
+  beginslunch INT,
+  endslunch INT
+)";
+
+$sql["schedules"] = "CREATE TABLE schedules (
+  id INT NOT NULL AUTO_INCREMENT,
+  PRIMARY KEY(id),
+  worker INT NOT NULL,
+  INDEX(worker),
+  begins INT NOT NULL,
+  ends INT NOT NULL,
+  active INT NOT NULL
+)";
+
+$sql["schedulesdays"] = "CREATE TABLE schedulesdays (
+  id INT NOT NULL AUTO_INCREMENT,
+  PRIMARY KEY(id),
+  schedule INT NOT NULL,
+  INDEX(schedule),
+  day INT NOT NULL,
+  typeday INT NOT NULL,
+  beginswork INT NOT NULL,
+  endswork INT NOT NULL,
+  beginsbreakfast INT,
+  endsbreakfast INT,
+  beginslunch INT,
+  endslunch INT
+)";
+
+$sql["typesincidents"] = "CREATE TABLE typesincidents (
+  id INT NOT NULL AUTO_INCREMENT,
+  PRIMARY KEY(id),
+  name VARCHAR(100) NOT NULL UNIQUE,
+  present INT NOT NULL,
+  paid INT NOT NULL,
+  workerfill INT NOT NULL DEFAULT 0,
+  notifies INT NOT NULL DEFAULT 0,
+  autovalidates INT NOT NULL DEFAULT 0,
+  hidden INT NOT NULL DEFAULT 0
+)";
+
+$sql["incidents"] = "CREATE TABLE incidents (
+  id INT NOT NULL AUTO_INCREMENT,
+  PRIMARY KEY(id),
+  worker INT,
+  INDEX(worker),
+  creator INT,
+  updatedby INT DEFAULT -1,
+  confirmedby INT DEFAULT -1,
+  type INT NOT NULL,
+  day INT NOT NULL,
+  INDEX(day),
+  begins INT NOT NULL,
+  ends INT NOT NULL,
+  details TEXT,
+  workerdetails TEXT DEFAULT NULL,
+  attachments TEXT,
+  verified INT DEFAULT 0,
+  invalidated INT DEFAULT 0,
+  INDEX(invalidated),
+  workervalidated INT DEFAULT 0,
+  INDEX(workervalidated),
+  workervalidation TEXT
+)";
+
+/*$sql["recurringincidents"] = "CREATE TABLE recurringincidents (
+  id INT NOT NULL AUTO_INCREMENT,
+  PRIMARY KEY(id),
+  worker INT,
+  creator INT,
+  type INT NOT NULL,
+  firstday INT NOT NULL,
+  lastday INT NOT NULL,
+  typedays TEXT,
+  begins INT NOT NULL,
+  ends INT NOT NULL,
+  details TEXT
+)";*/ // NOTE: No longer needed
+
+$sql["records"] = "CREATE TABLE records (
+  id INT NOT NULL AUTO_INCREMENT,
+  PRIMARY KEY(id),
+  worker INT NOT NULL,
+  INDEX(worker),
+  day INT NOT NULL,
+  INDEX(day),
+  created INT NOT NULL,
+  creator INT NOT NULL,
+  beginswork INT NOT NULL,
+  endswork INT NOT NULL,
+  beginsbreakfast INT NOT NULL,
+  endsbreakfast INT NOT NULL,
+  beginslunch INT NOT NULL,
+  endslunch INT NOT NULL,
+  invalidated INT DEFAULT 0,
+  INDEX(invalidated),
+  invalidatedby INT DEFAULT -1,
+  workervalidated INT DEFAULT 0,
+  INDEX(workervalidated),
+  workervalidation TEXT
+)";
+
+$sql["logs"] = "CREATE TABLE logs (
+  id INT NOT NULL AUTO_INCREMENT,
+  PRIMARY KEY(id),
+  realtime INT NOT NULL,
+  day INT NOT NULL,
+  logdetails TEXT,
+  executedby INT DEFAULT -1
+)";
+
+$sql["recovery"] = "CREATE TABLE recovery (
+  id INT NOT NULL AUTO_INCREMENT,
+  PRIMARY KEY(id),
+  user INT NOT NULL,
+  token VARCHAR(64) NOT NULL UNIQUE,
+  timecreated INT NOT NULL,
+  expires INT NOT NULL,
+  used INT DEFAULT 0
+)";
+
+$sql["help"] = "CREATE TABLE help (
+  id INT NOT NULL AUTO_INCREMENT,
+  PRIMARY KEY(id),
+  place INT NOT NULL UNIQUE,
+  url VARCHAR(256) NOT NULL
+)";
+
+$sql["totp"] = "CREATE TABLE totp (
+  id INT NOT NULL AUTO_INCREMENT,
+  PRIMARY KEY(id),
+  person INT NOT NULL UNIQUE,
+  secret VARCHAR(256) NOT NULL
+)";
+
+$sql["securitykeys"] = "CREATE TABLE securitykeys (
+  id INT NOT NULL AUTO_INCREMENT,
+  PRIMARY KEY(id),
+  person INT NOT NULL,
+  name VARCHAR(100),
+  credentialid VARBINARY(500),
+  credentialpublickey TEXT,
+  added INT NOT NULL,
+  lastused INT
+)";
+
+$sql["signinattempts"] = "CREATE TABLE signinattempts (
+  username VARCHAR(100) NOT NULL,
+  KEY username (username),
+  remoteip VARBINARY(16) NOT NULL,
+  KEY remoteip (remoteip),
+  remoteipblock VARBINARY(16) NOT NULL,
+  KEY remoteipblock (remoteipblock),
+  signinattempttime DATETIME NOT NULL,
+  KEY signinattempttime (signinattempttime)
+)";
+
+foreach ($sql as $table => $sentence) {
+  if (mysqli_query($con, $sentence)) {
+    echo "Taula ".$table." creada satisfactòriament.\n";
+  } else {
+    die("Hi ha hagut un error creant la taula ".$table.": ".mysqli_error($con)."\n");
+  }
+}
+
+echo "\n";
+
+if (mysqli_query($con, "INSERT INTO people (username, password, type, name, dni, email) VALUES ('".$username."', '".$pw."', 0, '".$name."', '".$dni."', '".$email."')")) {
+  echo "Afegit el primer usuari satisfactòriament.\n\n";
+  echo "Instal·lació completada correctament.\n";
+} else {
+  echo "Hi ha hagut un error afegint el primer usuari.\n";
+}
