Privacy policy

This site users Google Analytics without custom variables. Feel free to block Google Analytics if you want to use this service without being tracked by Google.

The username you provide, and your predictions will become public for anyone to browse.

A hash of the password you provide is stored using password_hash() with the algorithm PASSWORD_BCRYPT. The password it self is never stored, and exists only in memory to generate/verify the hash. Neither the password or the password hash will be shared with anyone.

If you choose to be a part of one or more rooms, other people in those rooms can see that you are a member.

When signing up/in your current IP address will be stored along with your user profile. The IP address will not be shared with anyone.

When signing up/in your current user agent string will be stored with your user profile. The user agent string will not be shared with anyone.

If you decide to provide a timezone, the timezone you select will be stored with your user profile. Your timezone will not be shared with anyone.

A timestamp of when you sign up will be stored along with your user profile. The timestamp will not be shared with anyone.

A timestamp of your last activity will be stored along with your user profile. The timestamp will not be shared with anyone.

This site does not want your phone number, your e-mail address, or any other data that can be used to identify you as a person. Hence there is no functionality to reset your password in case you forget it.

Data related to your user profile is saved to the following database tables:

CREATE TABLE system.user (
	id UUID NOT NULL,
	username VARCHAR(64) NOT NULL UNIQUE,
	passwordHash VARCHAR(255) NOT NULL,
	ipAddress VARCHAR(255),
	userAgent VARCHAR(255),
	timezone VARCHAR(255),
	lastActive INTEGER,
	created INTEGER,
	rememberKey VARCHAR(255),
	rememberValueHash VARCHAR(255),
	PRIMARY KEY(id)
);

CREATE TABLE soccer.prediction (
	id UUID NOT NULL,
	userId UUID NOT NULL,
	gameId UUID NOT NULL,
	tournamentId UUID NOT NULL,
	outcome CHAR(1) NOT NULL,
	PRIMARY KEY (id),
	FOREIGN KEY (userId) REFERENCES system.user(id) ON DELETE CASCADE,
	FOREIGN KEY (gameId) REFERENCES soccer.game(id) ON DELETE CASCADE,
	FOREIGN KEY (tournamentId) REFERENCES soccer.tournament(id) ON DELETE CASCADE,
	UNIQUE(userId, gameId, TournamentId)
);

CREATE TABLE soccer.topscorerprediction (
	id UUID NOT NULL,
	userId UUID NOT NULL,
	tournamentId UUID NOT NULL,
	playerId UUID NOT NULL,
	PRIMARY KEY (id),
	FOREIGN KEY (userId) REFERENCES system.user(id) ON DELETE CASCADE,
	FOREIGN KEY (playerId) REFERENCES soccer.player(id) ON DELETE CASCADE,
	FOREIGN KEY (tournamentId) REFERENCES soccer.tournament(id) ON DELETE CASCADE,
	UNIQUE(userId, tournamentId)
);

CREATE TABLE soccer.yellowcardsprediction (
	id UUID NOT NULL,
	userId UUID NOT NULL,
	tournamentId UUID NOT NULL,
	yellowCards INTEGER NOT NULL,
	PRIMARY KEY (id),
	FOREIGN KEY (userId) REFERENCES system.user(id) ON DELETE CASCADE,
	FOREIGN KEY (tournamentId) REFERENCES soccer.tournament(id) ON DELETE CASCADE,
	UNIQUE(userId, tournamentId)
);

CREATE TABLE soccer.room (
	id UUID NOT NULL,
	userId UUID NOT NULL,
	tournamentId UUID NOT NULL,
	room VARCHAR(64) NOT NULL,
	PRIMARY KEY (id),
	FOREIGN KEY (userId) REFERENCES system.user(id) ON DELETE CASCADE,
	FOREIGN KEY (tournamentId) REFERENCES soccer.tournament(id) ON DELETE CASCADE,
	UNIQUE(userId, tournamentId, room)
);

Database backups are carried out manually. Each database table is saved to a CSV. The backup will be stored on a different location than the web/database server.

In case you no longer want to use this service, you can choose to delete your profile. If deleting your profile, any record in the database that contains your system.user.id or has a reference to it will be deleted. However, in the event of a system crash, deleted users may be restored as a part of the backup-restoration process. In case of such an event, delete the profile again, and hopefully a second system crash does not happen.

There is a prize for the winner. Claming the prize is optional, and can be done by sending an e-mail with a secret code. The secret code (and where to send it) is only displayed to the winner. At some point shipping details will need to be exchanged.

All users may be subject to statistics and calculations.

All users are subject to default Apache web server logs