Commission Website
  • Svelte 68.2%
  • TypeScript 31.6%
  • HTML 0.1%
  • JavaScript 0.1%
Find a file
probablysleeping 30385ca295 development
2026-04-26 15:49:02 +02:00
src development 2026-04-26 15:49:02 +02:00
static/media/sketchsaturday development 2026-04-26 15:49:02 +02:00
.env development 2026-04-26 15:49:02 +02:00
.env.example initial commit 2026-04-16 21:04:28 +02:00
.gitignore stuff? 2026-04-24 01:38:59 +02:00
deploy.bat initial commit 2026-04-16 21:04:28 +02:00
dev-bot.db development 2026-04-26 15:49:02 +02:00
dev-bot.db-shm development 2026-04-26 15:49:02 +02:00
dev-bot.db-wal development 2026-04-26 15:49:02 +02:00
dev-site.db development 2026-04-26 15:49:02 +02:00
dev-site.db-shm development 2026-04-26 15:49:02 +02:00
dev-site.db-wal development 2026-04-26 15:49:02 +02:00
nvm development 2026-04-26 15:49:02 +02:00
package-lock.json development 2026-04-26 15:49:02 +02:00
package.json development 2026-04-26 15:49:02 +02:00
README.md teehee 2026-04-24 12:01:26 +02:00
svelte.config.js initial commit 2026-04-16 21:04:28 +02:00
tsconfig.json initial commit 2026-04-16 21:04:28 +02:00
velte-kit  .gitignore more 2026-04-24 02:25:10 +02:00
vite.config.ts development 2026-04-26 15:49:02 +02:00

impforhire — current state

Infrastructure

  • VPS: Hetzner 135.181.100.23, Ubuntu 24, Nginx, PM2
  • Site: /root/impforhire — SvelteKit 2 + Svelte 5, port 3001
  • Bot: /root/bot — Tabb Discord bot, port 4040
  • DB: /root/db/bot.db — shared SQLite WAL (commissions, media, users, discord_meta, queues)
  • DB: /root/db/site.db — site sessions + users only
  • Media: /root/media/ — commission finals, WIPs, refs, legacy images
  • Git: Forgejo at git.impforhire.com, deploy via git push + SSH hook
  • PM2: impforhire (site), tabb (bot)

Nginx config

/etc/nginx/sites-enabled/impforhire (main site + media)

server {
    listen 80;
    server_name impforhire.com www.impforhire.com;

    location /media/ {
        alias /root/media/;
    }

    location / {
        proxy_pass http://localhost:3001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
# SSL block added by certbot

/etc/nginx/sites-enabled/impforhire-images (bot assets)

server {
    server_name images.impforhire.com;

    location /commissions/legacy-media/ {
        alias /root/media/commissions/legacy-media/;
    }

    location / {
        proxy_pass http://127.0.0.1:4040/assets/;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
    }
    # SSL block managed by certbot
}

/etc/nginx/sites-enabled/forgejo-ip (IP access + Forgejo)

server {
    listen 80;
    server_name 135.181.100.23;

    location /git/ {
        proxy_pass http://localhost:3000/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location /media/ {
        alias /root/media/;
    }

    location / {
        proxy_pass http://localhost:3001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

File permissions required

chmod o+x /root
chmod o+x /root/media/commissions/legacy-media
chmod o+x /root/media/commissions/legacy-media/imported_*/finals
# Files themselves are 644 (root:root) — readable by www-data

Env vars (/root/impforhire/.env)

BOT_API_SECRET=grimsby_has_big_horns
BOT_API_URL=https://tabb.impforhire.com
ASSET_BASE_URL=https://images.impforhire.com
BOT_MEDIA_PATH=/root/media
BOT_DB_PATH=/root/db/bot.db
SITE_DB_PATH=/root/db/site.db
SESSION_SECRET=...
NODE_ENV=production
PORT=3001
SITE_URL=https://impforhire.com

Media layout

/root/media/
  commissions/
    9/finals/9_final_v4.png          ← real bot commissions (served via images.impforhire.com/commissions/...)
    10/finals/...
    legacy-media/
      imported_223/finals/imported_223_final.png   ← legacy imports (served via images.impforhire.com/commissions/legacy-media/...)
      imported_77/finals/...

DB key conventions

  • discord_meta key art_finalpath_<commission_id> → absolute local path to final image
  • discord_meta key import_old_<supabase_id> → new commission ID (marks legacy as imported)
  • commission_media.local_path → absolute local path (mirrors art_finalpath_ for legacy rows)

Known issues / next steps

  • Many bot test commissions are published and showing in gallery — need per-commission publish toggle
  • /admin/commissions overview page not yet built — needed for bulk publish management
  • DNS for impforhire.com not yet propagated to VPS IP (currently accessible via IP only)
  • Old impforhire.com site still live at old host until DNS cutover