Open comments for this post
I built AdiBot, a custom Slack bot for the Hack Club workspace that responds to slash commands. Anyone in the Hack Club Slack can use it by typing one of three commands in any channel:
/adibot-ping — checks if the bot is online and shows latency
/adibot-joke — fetches a random joke from an API
/adibot-help — lists all available commands
I built it using Python and the Slack Bolt library, with Socket Mode so no public URL was needed. The bot pulls jokes from the Official Joke API using the requests library. I stored my tokens securely in a .env file and kept them out of GitHub using .gitignore.
For hosting, I deployed it on Hack Club Nest, a free Linux server for students. I set it up as a systemd service so it runs 24/7 and automatically restarts if it ever crashes, even when my laptop is closed.
The trickiest part was dealing with an SSL certificate error on Mac when first running the bot locally, and setting up GitHub authentication on the Nest server. Both were good debugging experiences!
Open comments for this post
I built AdiBot, a custom Slack bot for the Hack Club workspace that responds to slash commands. Anyone in the Hack Club Slack can use it by typing one of three commands in any channel:
/adibot-ping — checks if the bot is online and shows latency
/adibot-joke — fetches a random joke from an API
/adibot-help — lists all available commands
I built it using Python and the Slack Bolt library, with Socket Mode so no public URL was needed. The bot pulls jokes from the Official Joke API using the requests library. I stored my tokens securely in a .env file and kept them out of GitHub using .gitignore.
For hosting, I deployed it on Hack Club Nest, a free Linux server for students. I set it up as a systemd service so it runs 24/7 and automatically restarts if it ever crashes, even when my laptop is closed.
The trickiest part was dealing with an SSL certificate error on Mac when first running the bot locally, and setting up GitHub authentication on the Nest server. Both were good debugging experiences!
Open comments for this post
Building a World Cup Match Outcome Predictor
The idea is simple: give it two national teams, get back a win probability for each side; actual math.
The model pulls from four inputs:
- ELO ratings (a numerical strength score that updates after every match)
- Recent form (average points earned across the last 5 games)
- Goal differential (how many a team scores vs. concedes on average)
- Venue advantage (neutral ground vs. true home)
All of that gets fed into a logistic regression model trained on 10 years of international match data.
The stack is pandas for cleaning and merging datasets, scikit-learn for the model, requests for pulling live match data, and seaborn for charts and heatmaps.
Right now I’m in the data pipeline phase. The trickiest part so far is merging ELO scores to matches by date; you have to make sure the model only sees ELO ratings that existed before each match was played, otherwise you’re leaking future information into the training data.
Next up is feature engineering, then model training, then actual predictions.
Open comments for this post
Building a World Cup Match Outcome Predictor
The idea is simple: give it two national teams, get back a win probability for each side; actual math.
The model pulls from four inputs:
- ELO ratings (a numerical strength score that updates after every match)
- Recent form (average points earned across the last 5 games)
- Goal differential (how many a team scores vs. concedes on average)
- Venue advantage (neutral ground vs. true home)
All of that gets fed into a logistic regression model trained on 10 years of international match data.
The stack is pandas for cleaning and merging datasets, scikit-learn for the model, requests for pulling live match data, and seaborn for charts and heatmaps.
Right now I’m in the data pipeline phase. The trickiest part so far is merging ELO scores to matches by date; you have to make sure the model only sees ELO ratings that existed before each match was played, otherwise you’re leaking future information into the training data.
Next up is feature engineering, then model training, then actual predictions.