A reusable platform for running protein design competitions using AlphaFold3 structure prediction.
If you're in the SeokLab GitHub organization and want to run your own competition, follow these steps. The self-hosted runner on galaxy4 is already available for all seoklab repos.
- Create a new repo under
seoklaborg (e.g.,seoklab/designcomp-kidds) - Clone this template:
git clone https://github.com/seoklab/design-test.git designcomp-kidds cd designcomp-kidds git remote set-url origin https://github.com/seoklab/designcomp-kidds.git
Files to edit:
-
.github/workflows/process_submission.yml(lines ~23, ~59):# Change: SUBMISSION_DIR="/data/galaxy4/user/j2ho/kidds2026/protein-competition/submissions/..." QUEUE_DIR="/data/galaxy4/user/j2ho/job_queue" # To: SUBMISSION_DIR="/data/galaxy4/user/yubeen/my-competition/submissions/..." QUEUE_DIR="/data/galaxy4/user/yubeen/job_queue"
-
.github/workflows/check_completion.yml(lines ~15-17):# Change: SUBMISSIONS_BASE: /data/galaxy4/user/j2ho/kidds2026/protein-competition/submissions PUBLIC_RESULTS: /data/galaxy4/user/j2ho/kidds2026/protein-competition/public_results SITE_URL: https://seoklab.github.io/design-test # To: SUBMISSIONS_BASE: /data/galaxy4/user/yubeen/my-competition/submissions PUBLIC_RESULTS: /data/galaxy4/user/yubeen/my-competition/public_results SITE_URL: https://seoklab.github.io/designcomp-kidds
-
scripts/run_af3.py- Update AF3 paths if different
SSH into galaxy4 and create your directories:
mkdir -p /data/galaxy4/user/yubeen/my-competition/submissions
mkdir -p /data/galaxy4/user/yubeen/my-competition/public_results
mkdir -p /data/galaxy4/user/yubeen/job_queue
chmod 777 /data/galaxy4/user/yubeen/my-competition/submissions
chmod 777 /data/galaxy4/user/yubeen/my-competition/public_resultsAdd to your crontab on galaxy4 (crontab -e):
*/15 * * * * for f in /data/galaxy4/user/yubeen/job_queue/*.sh; do [ -f "$f" ] && sbatch "$f" && mv "$f" "$f.done"; done- Go to your repo → Settings → Pages
- Source: Deploy from a branch
- Branch:
main, Folder:/docs - Your site will be at
https://seoklab.github.io/designcomp-kidds/
- Create account at netlify.com
- Add new site → Import an existing project → Connect to GitHub
- Select your
seoklab/designcomp-kiddsrepo - Go to Site settings → Environment variables, add:
GITHUB_TOKEN: Create at github.com/settings/tokens (needreposcope)GITHUB_OWNER:seoklabGITHUB_REPO:designcomp-kidds
- Note your Netlify URL (e.g.,
https://your-site-name.netlify.app)
Edit docs/index.html, find and update:
const SUBMIT_URL = 'https://your-site-name.netlify.app/api/submit';Edit docs/index.html:
- Title and subtitle
- Competition info (goal, dates, deadline)
- Footer
git add -A
git commit -m "Configure for my competition"
git push origin mainTest by submitting a sequence at your GitHub Pages URL.
User → Web Form → Netlify Function → GitHub Issue
(GitHub Pages) ↓
Process Submission
(GitHub Actions on galaxy4)
↓
SLURM Job Queue → AlphaFold3
↓
Check Completion
(GitHub Actions)
↓
Email + Viewer Link → User
├── .github/workflows/
│ ├── process_submission.yml # Handles new submissions
│ └── check_completion.yml # Checks for completed jobs
├── docs/ # GitHub Pages (public site)
│ ├── index.html # Submission form
│ ├── viewer.html # Mol* structure viewer
│ └── results/ # Packaged results
├── netlify/functions/
│ └── submit.js # Form submission API
├── scripts/
│ ├── parse_submission.py # Parse issue → submission.json
│ ├── prepare_af3_input.py # Generate AF3 input JSON
│ ├── run_af3.py # Generate SLURM script
│ └── package_results.py # Package results with token
├── submissions/ # (gitignored) On galaxy4
└── public_results/ # (gitignored) On galaxy4
In .github/workflows/check_completion.yml:
on:
# Comment out schedule to disable automatic checks
schedule:
- cron: '* * * * *' # Every minute
workflow_dispatch: # Keep this for manual triggersActions → Check Job Completion → Run workflow
- Changes to
docs/→ Auto-deploy via GitHub Pages - Changes to
netlify/functions/→ Need to redeploy on Netlify
| Issue | Solution |
|---|---|
| Git push rejected | git pull --rebase && git push |
| Permission denied | Run chmod 777 on submission directories |
| Form not submitting | Check Netlify env vars and function logs |
| No emails | Check sendmail config, verify email in submission.json |
| Workflow not running | Check Actions tab for errors, verify runner is online |
- AlphaFold3 - Structure prediction
- PDBe-Molstar - 3D visualization
- SeokLab