Skip to main content

Hollanov Site

A fan site celebrating the rivalry between Shane Hollander and Ilya Rozanov.

Features

  • The Rivalry Overview
  • Team Shane and Team Ilya profiles
  • Head-to-head stats and timeline
  • Vote system with localStorage persistence
  • Easter egg: Konami code (up up down down left right left right B A)

Technologies

  • Pure HTML5, CSS3, vanilla JavaScript
  • No build process — open index.html in a browser

VPS Deployment

The site lives in hollanov/ and deploys to a VPS with nginx + GitHub webhook auto-deploy.

Quick Setup

# On the VPS (Arch Linux)
curl -fsSL https://raw.githubusercontent.com/langhalsb/clawdbot/main/hollanov/setup-vps.sh | bash

# Or with a pre-defined webhook secret
export GITHUB_WEBHOOK_SECRET="your-secret-here"
curl -fsSL https://raw.githubusercontent.com/langhalsb/clawdbot/main/hollanov/setup-vps.sh | bash

The script will:

  1. Install nginx, git, webhook, and certbot
  2. Clone the repo to /var/www/clawdbot
  3. Configure nginx for your domain
  4. Set up the webhook listener for auto-deploy
  5. Configure the firewall
  6. Create the GitHub webhook (if gh is authenticated)

After the script completes, add SSL:

certbot --nginx -d hollanov.cloud -d www.hollanov.cloud
systemctl enable certbot-renew.timer

Manual Setup

1. Install nginx and git

# Arch Linux
pacman -Syu && pacman -S nginx git
systemctl enable --now nginx

# Ubuntu/Debian
apt update && apt upgrade -y && apt install nginx git -y
systemctl enable --now nginx

2. Clone the repo

cd /var/www
git clone https://github.com/langhalsb/clawdbot.git

3. Configure nginx

Create /etc/nginx/sites-available/hollanov:

server {
listen 80;
server_name your-domain.com www.your-domain.com;

root /var/www/clawdbot/hollanov;
index index.html;

location / {
try_files $uri $uri/ =404;
}

location /webhook {
deny all;
return 404;
}

location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
}

Enable the site:

# Arch: add `include /etc/nginx/sites-enabled/*;` to nginx.conf http block
mkdir -p /etc/nginx/sites-available /etc/nginx/sites-enabled
ln -s /etc/nginx/sites-available/hollanov /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx

4. Set permissions

chown -R www-data:www-data /var/www/clawdbot
chmod -R 755 /var/www/clawdbot
chmod +x /var/www/clawdbot/hollanov/webhook/deploy.sh

5. Configure firewall

# Arch Linux (iptables)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 9000 -j ACCEPT
iptables-save > /etc/iptables/iptables.rules

# Ubuntu/Debian (UFW)
ufw allow 'Nginx Full'
ufw allow 9000
ufw enable

6. Add SSL

# Arch
pacman -S certbot certbot-nginx
certbot --nginx -d your-domain.com -d www.your-domain.com
systemctl enable certbot-renew.timer

# Ubuntu/Debian
apt install certbot python3-certbot-nginx -y
certbot --nginx -d your-domain.com -d www.your-domain.com

7. Set up auto-deploy webhook

Install webhook server:

# Arch
pacman -S webhook

# Ubuntu/Debian
apt install webhook -y

Generate a secret and configure:

openssl rand -hex 32
nano /var/www/clawdbot/hollanov/webhook/webhook.conf
# Replace CHANGE_THIS_SECRET with your token
cp /var/www/clawdbot/hollanov/webhook/webhook.conf /etc/webhook.conf

Create systemd service at /etc/systemd/system/webhook.service:

[Unit]
Description=GitHub webhook listener
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/webhook -hooks /etc/webhook.conf -port 9000 -verbose
Restart=on-failure
User=root

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now webhook

Create the GitHub webhook:

gh api repos/langhalsb/clawdbot/hooks \
-X POST \
-F 'name=web' \
-F 'active=true' \
-f 'events[]=push' \
-f 'config[url]=http://YOUR_SERVER_IP/hooks/deploy' \
-f 'config[content_type]=json' \
-f 'config[secret]=YOUR_WEBHOOK_SECRET'

Troubleshooting

ProblemFix
Default nginx page showingComment out the default server {} block in /etc/nginx/nginx.conf
Git "dubious ownership" errorgit config --global --add safe.directory /var/www/clawdbot
Webhook returns 502/timeoutPort 9000 blocked by CDN — route through nginx (location /hooks/ { proxy_pass http://127.0.0.1:9000; })
DNS not resolvingCheck dig hollanov.cloud +short — should return VPS IP only

Useful commands

systemctl status nginx       # Check nginx
systemctl status webhook # Check webhook
journalctl -u webhook -f # Follow webhook logs
curl -I http://localhost # Test if site is served
nginx -t # Validate nginx config