Luke Jones

Laravel Experimentation

Mon Mar 09 2026Boards and Games

The other day I decided to get into trying to create a few projects using Laravel. It’s actually pretty easy to get into. I initially decided to try creating my own (very simple) imageboard software.

Creating this was pretty simple as I decided to just completely avoid implementing any sort of user-authentication, or user-system at all. It’s literally just ended up becoming a front-end to post threads and replies to an imageboard. For the sake of maintaining my own reputation, I refuse to put this online, but check out these screenshots:

The homepage of my imageboard An example view of a board on my imageboard An example view of a reply on my imageboard

The example posts are all produced by DataSeeders, which it turns out are really fun to write! It did take me writing my own implementation of what is essentially just Model factories before realising they were already a thing, and they were pretty messy too.

class TestBoardSeeder extends Seeder 
{
	public function run()
	{
		$this->createBoard('Random', 'b', 'A place for random/uncategorised posts.', 3, 6, 'Other');
		$this->createBoard('Videogames', 'vg', 'A place for discussion about videogames or gaming.', 10, 10, 'Interests');
		$this->createBoard('Empty board', 'e', 'This is a board which is empty, for testing purposes.', 10, 10, 'Other');
	}

	private function createBoard(string $name, string $slug, string $description, int $max_threads, int $max_replies, string $category): Board
	{
		return Board::create([
			'name' => $name,
			'slug' => $slug,
			'description' => $description,
			'max_threads' => $max_threads,
			'max_replies' => $max_replies,
			'category' => $category,
		]);
	}
}

Before tidying that I decided to move onto something a little more fun. I thought I’d try and create one of those online daily-puzzle type games. I ended up deciding on a game where you’d be given a list of historical events, and have to sort them into chronological order, from earliest to most-recent.

The good news is that I did it! I got away with storing a simple table which stores historical events against an ID, date, and brief description. When the user visits the page, the current day and chosen difficulty are used to generate a seed, which is then used to pick a set of random events from the database. I went with using a seed as it meant each game is fully deterministic based on the date, so you can come back and play previous games.

The bad news is that it’s surprisingly difficult to find a dataset online which can provide enough data for this game to be reasonably replayable while also being simple enough to parse through. My first go-to was WikiData, but unfortunately there seems to be some unspoken rule that for every item featured in a dataset, the schema usage has to become a little more inconsistent. Pulling event data from WikiData is pretty difficult to get your head around. I didn’t really feel like spending ages learning SPARQL just so I could get a CSV of data JUST tangible enough for me to go through manually to remove events which have dates in their names, don’t have English event names, don’t have names at all, so-on so-forth.

I did, however, create a tool which could parse through a CSV and load the data into the events table, so if I do ever get my hands on a good enough dataset I could probably squish it around a bit with a Python script and throw it in for some proper testing. Having this tool meant I could write a pretty simple example CSV for future reference;

date,description
2020-01-01,New year's day 2020
1900-01-01,First day of the 1900s
2007-01-09,iPhone first unveiled to the public
1991-12-26,Dissolution of the Soviet Union
1998-09-04,Google is founded
1969-07-20,Apollo 11 lander touches down on the surface of the Moon
1939-09-01,Germany invades Poland
1986-04-26,Chernobyl reactor 4 explodes
1969-01-30,The Beatles perform a concert for the last time atop Apple Corps headquarters

The reason I write this is that while I’m not making a live-demo, I have put it on GitHub, with the creative and original name idea, “Intervle”. Feel free to pull it in and try some things - maybe you’ll find a good dataset. If you do, as usual, [contact](let me know)!.