{ "_comment": "OneRound API - Pterodactyl Egg", "meta": { "version": "PTDL_v2", "update_url": "http://git.hep.gg/sticks/eggs/raw/branch/master/egg-oneround-api.json" }, "exported_at": "2026-05-31T00:00:00+00:00", "name": "OneRound API", "author": "sticks@hep.gg", "description": "OneRound golf platform API server. Requires a PostgreSQL database with PostGIS.", "features": null, "docker_images": { "Latest": "git.hep.gg/sticks/oneround-api:latest" }, "file_denylist": [], "startup": "API_LISTEN_ADDR=:{{SERVER_PORT}} entrypoint.sh", "config": { "files": "{}", "startup": "{\"done\": \"OneRound API is ready\"}", "logs": "{}", "stop": "^^C" }, "scripts": { "installation": { "script": "#!/bin/ash\necho \"OneRound API - nothing to install, binary is baked into the Docker image.\"\necho \"Set your environment variables in the Startup tab.\"", "container": "alpine:3.21", "entrypoint": "ash" } }, "variables": [ { "name": "Database URL", "description": "PostgreSQL connection string (e.g. postgres://user:pass@host:5432/oneround)", "env_variable": "DATABASE_URL", "default_value": "", "user_viewable": true, "user_editable": true, "rules": "required|string", "sort": 0, "field_type": "text" }, { "name": "JWT Secret", "description": "HS256 signing key for auth tokens. Generate with: openssl rand -base64 32", "env_variable": "JWT_SECRET", "default_value": "", "user_viewable": true, "user_editable": true, "rules": "required|string", "sort": 1, "field_type": "text" }, { "name": "Apple Bundle ID", "description": "iOS app bundle identifier for Apple Sign-In verification", "env_variable": "APPLE_BUNDLE_ID", "default_value": "gg.hep.oneround", "user_viewable": true, "user_editable": true, "rules": "required|string", "sort": 2, "field_type": "text" }, { "name": "Log Level", "description": "Logging verbosity: debug, info, warn, error", "env_variable": "LOG_LEVEL", "default_value": "info", "user_viewable": true, "user_editable": true, "rules": "required|string|in:debug,info,warn,error", "sort": 3, "field_type": "text" }, { "name": "CORS Origins", "description": "Allowed CORS origins (comma-separated, or * for all)", "env_variable": "API_CORS_ORIGINS", "default_value": "*", "user_viewable": true, "user_editable": true, "rules": "required|string", "sort": 4, "field_type": "text" }, { "name": "Production Mode", "description": "Enable production safety checks (true/false)", "env_variable": "PRODUCTION", "default_value": "false", "user_viewable": true, "user_editable": true, "rules": "required|string|in:true,false", "sort": 5, "field_type": "text" }, { "name": "No-Auth Mode", "description": "Skip authentication for development (true/false). Never enable in production.", "env_variable": "NOAUTH", "default_value": "false", "user_viewable": true, "user_editable": true, "rules": "required|string|in:true,false", "sort": 6, "field_type": "text" }, { "name": "ID Generator URL", "description": "URL of the ID generation service", "env_variable": "IDGEN_URL", "default_value": "https://id.hep.gg/", "user_viewable": true, "user_editable": true, "rules": "nullable|string", "sort": 7, "field_type": "text" }, { "name": "ID Generator Username", "description": "Username for the ID generation service", "env_variable": "IDGEN_USERNAME", "default_value": "oneround-api", "user_viewable": true, "user_editable": true, "rules": "nullable|string", "sort": 8, "field_type": "text" }, { "name": "ID Generator Token", "description": "Auth token for the ID generation service", "env_variable": "IDGEN_TOKEN", "default_value": "", "user_viewable": true, "user_editable": true, "rules": "nullable|string", "sort": 9, "field_type": "text" }, { "name": "Email API URL", "description": "URL of the email sending service", "env_variable": "EMAIL_API_URL", "default_value": "https://hep.gg/api/v1/email/send", "user_viewable": true, "user_editable": true, "rules": "nullable|string", "sort": 10, "field_type": "text" }, { "name": "Email API Key", "description": "Auth key for the email sending service", "env_variable": "EMAIL_API_KEY", "default_value": "", "user_viewable": true, "user_editable": true, "rules": "nullable|string", "sort": 11, "field_type": "text" }, { "name": "Email From", "description": "Sender address for outgoing emails", "env_variable": "EMAIL_FROM", "default_value": "OneRound ", "user_viewable": true, "user_editable": true, "rules": "nullable|string", "sort": 12, "field_type": "text" }, { "name": "Add Region", "description": "Named region to ingest on startup (e.g. michigan, florida, california). Leave empty to skip.", "env_variable": "ADD_REGION", "default_value": "", "user_viewable": true, "user_editable": true, "rules": "nullable|string", "sort": 13, "field_type": "text" }, { "name": "Add Region BBox", "description": "Custom bounding box to ingest on startup as min_lat,min_lon,max_lat,max_lon. Used when Add Region is empty.", "env_variable": "ADD_REGION_BBOX", "default_value": "", "user_viewable": true, "user_editable": true, "rules": "nullable|string", "sort": 14, "field_type": "text" }, { "name": "Tile Size", "description": "Tile size in degrees for region ingestion (default 0.5)", "env_variable": "TILE_SIZE", "default_value": "0.5", "user_viewable": true, "user_editable": true, "rules": "nullable|string", "sort": 15, "field_type": "text" } ] }