// Iron & Ink · Digital Design Factory · Command Center

DESIGN FACTORY

"Raw inputs. Clean outputs."

Total Packs
Total Assets
Workers Online
Active Exports

// 01 — Asset Packs

FORGE A NEW PACK.

new-pack.sh
USE CASES (TAGS)

// YOUR PACKS

// 02 — Master Sheet

VISUAL OVERVIEW.

Select a pack to view all assets in a master sheet. Click any asset to see full metadata.

Select a pack above to load the master sheet.

// 03 — Worker Fleet

CONNECTED WORKERS.

Register Android phones, WSL2 processes, and desktops as workers. Workers poll for export jobs and process them using FOSS tools (ImageMagick, FFMPEG). Run the heartbeat script on each device to keep status live.

register-worker.sh

// WORKER STATUS

// ACTIVITY LOG

worker-log.sh
// waiting for worker data...

// HEARTBEAT SCRIPT (run on each worker)

heartbeat.sh
# Run this on your Android (Termux) or WSL2/Linux machine
# Replace WORKER_ID with the ID shown in the dashboard above

WORKER_ID="your-worker-uuid-here"
SUPABASE_URL="https://ekwruqvjpnbjmzsrgecr.supabase.co"
ANON_KEY="your-anon-key"

while true; do
  curl -sX PATCH "$SUPABASE_URL/rest/v1/workers?id=eq.$WORKER_ID" \
    -H "apikey: $ANON_KEY" \
    -H "Content-Type: application/json" \
    -d "{\"status\":\"online\",\"last_seen\":\"$(date -Iseconds)\"}"
  echo "[$(date)] Heartbeat sent"
  sleep 60
done

// 04 — Export Queue

EXPORT PIPELINE.

Queue export jobs for any pack. Workers poll for queued jobs and process them using ImageMagick or FFMPEG. Each format spec defines the exact output requirements for its target platform.

queue-export.sh

// ACTIVE JOBS

No export jobs yet.

// FORMAT SPECS REFERENCE

// WORKER EXPORT SCRIPT

worker-export.py
# Python worker script — runs on Android (Termux), WSL2, or Linux
# Polls for queued export jobs, processes with ImageMagick, updates status

import requests, subprocess, time, os

SUPABASE_URL = "https://ekwruqvjpnbjmzsrgecr.supabase.co"
HEADERS = {"apikey": "ANON_KEY", "Content-Type": "application/json"}

def poll_and_process():
  r = requests.get(f"{SUPABASE_URL}/rest/v1/export_jobs",
    params={"status":"eq.queued","limit":"1"}, headers=HEADERS)
  jobs = r.json()
  if not jobs: return
  job = jobs[0]
  # claim job, process with ImageMagick, update to done/failed
  ...

while True:
  poll_and_process()
  time.sleep(30)
♪ Loading track...
VOL
// FREE · CC LICENSE