A simple PHP/Laravel dashboard to display the status of challenges during an event, like a conference village.
After cloning the application, open your terminal and run the following commands from the cloned directory:
cp .env.example .env
composer install
php artisan key:generate
vendor/bin/sail up -d
npm install
npm run devYou can now access the application in your browser at http://localhost.
The vite server will hot-reload any changes you make to village or challenge configurations.
This application (and how I use it) is highly opinionated and may not be suitable for anyone other than me. However, I will try to explain the workflow of the application, as I use it for the Call Center Village use-case.
- I clone this application for each event I run (whether public/private)
- I typically run the application locally using Laravel
sail, but for public events, we use Forge to deploy the application. - I update the village and challenge configurations in the
configdirectory for the particular event/challenge - If I need to pivot a challenge to a demo because nobody can figure it out, I can quickly adjust the php array in the
config/challenges.phpfile - For local events, the change is instant. For public events, I push the changes to the repository, and Laravel Forge automatically deploys the changes to the server.
- Git commits can also be used to write quick feedback notes as changes are made to the live event
- For public events, I will generally put IP restrictions in place so only on-site participants can access the dashboard
While I'm using Laravel Forge for the public events, you could use any normal Laravel hosting option you are comfortable with.
In my opinion, the application shines when ran locally for onsite users. It's a quick and easy way to provide a dashboard for your event, and it's easy to update on the fly.
This application is configuration driven, primarily controlled by two files:
config/village.phpconfig/challenges.php.
- Challenge: A challenge to be solved including hints to help your participants
- Hidden: A hidden challenge. Finding the URL of the challenge is typically the solution.
Challenges can be marked as solved, which will display the solutions and mitigations.
Hidden Challenges can be marked as solved, which will display the mitigations (and show it as solved on the dashboard.) The solution to a hidden challenge is shown before being marked solved, as finding the URL of a hidden challenge is typically the solution.
We also support basic village event types I've used so far:
- Talks: A talk you being given at your village or event
- Demonstrations: A demonstration performed at your village or event
- Parties: Share the details of a party or social event
To update the attributes of your event/village, you can edit the config/village.php file.
Documentation for this will come when I hit a stable "API". For now use the included examples.
To update the challenges, you can edit the config/challenges.php file.
Documentation for this will come when I hit a stable "API". For now use the included examples.
Check out the resources/screenshots directory for screenshots of every event type.
An example dashboard based on the packaged configuration:

Marking a challenge as solved will the solutions and mitigations:

MIT License (MIT). Please see License File for more information.