github2stackfield is an x0 web application that bridges GitHub Issues with Stackfield Tasks.
It lets you search GitHub issues, inspect their details, and create corresponding Stackfield tasks β all from a clean, Bootstrap-styled browser frontend.
| Layer | Technology |
|---|---|
| Browser frontend | x0 JavaScript framework with Bootstrap default theme |
| Backend services | Python WSGI scripts via python-micro-esb |
| Database | PostgreSQL (shared x0 instance) |
| Deployment | Apache2 + mod_wsgi (Docker or bare-metal) |
Configure and verify API access for both platforms.
- GitHub API Credentials β enter your GitHub username and Personal Access Token.
Click Verify GitHub Credentials to validate and store them. - Stackfield API Credentials β enter your Stackfield e-mail and API token.
Click Verify Stackfield Credentials to validate and store them.
Search GitHub issues and select one to map to Stackfield.
- Enter the target repository (
owner/repository) and an optional search term. - Click Search Issues β results populate the issue list below.
- Right-click any row and select Connect Stackfield Task to navigate to Screen 3.
Review the selected GitHub issue and create a Stackfield task.
- GitHub Issue Properties β read-only fields: issue number, state, title, URL.
- Stackfield Task Mapping β editable fields pre-populated from the issue:
- Stackfield Room ID β the target Stackfield room / channel identifier.
- Task Title β editable, defaults to the GitHub issue title.
- Description β editable, defaults to the GitHub issue body.
- Priority β Low / Medium / High / Urgent.
- Click Create New Stackfield Task β a new task is created in Stackfield via the REST API.
| Requirement | Notes |
|---|---|
| Docker Engine | With Compose V2 (docker compose) |
| GitHub Personal Access Token | Needs repo scope for private repos, public_repo for public |
| Stackfield API token | See Stackfield workspace settings β Integrations β API |
The application uses the official x0 container images:
ghcr.io/webcodex1/x0-appβ Apache2 + mod_wsgi web application server with the x0 JavaScript framework pre-installed (packages page)ghcr.io/webcodex1/x0-dbβ PostgreSQL 16 database with the x0 schema pre-installed (packages page)
Both custom images are built automatically on docker compose up --build:
docker/Dockerfileextendsghcr.io/webcodex1/x0-appand copies all static files, Python WSGI scripts, and the Apache2 config snippet into the image.docker/Dockerfile.dbextendsghcr.io/webcodex1/x0-dband runs the github2stackfield SQL init scripts (database/0*.sql) against the x0 database on first start.
cd docker
docker compose up --buildThen open http://localhost:8080/?appid=github2sf.
No further manual configuration is required.
github2stackfield/
βββ static/
β βββ menu.json # x0 navigation menu definition
β βββ object.json # x0 UI objects (formfields, lists, buttons β¦)
β βββ skeleton.json # x0 screen layout
βββ python/
β βββ service_implementation.py # GitHubService + StackfieldService ClassHandlers
β βββ user_routing.py # python-micro-esb ServiceRouter routing functions
β βββ VerifyGitHubCredentials.py # WSGI β verify GitHub credentials
β βββ VerifyStackfieldCredentials.py # WSGI β verify Stackfield credentials
β βββ SearchGitHubIssues.py # WSGI β search issues, populate list
β βββ GetGitHubIssueDetails.py # WSGI β fetch issue details for Screen 3
β βββ CreateStackfieldTask.py # WSGI β create Stackfield task
β βββ POSTData.py # x0 POST body reader helper
β βββ StdoutLogger.py # logging helper
βββ database/
β βββ 01-create-schema.sql # github2sf schema + tables
β βββ 02-insert-config.sql # x0 app configuration rows
β βββ 03-insert-text.sql # UI text / i18n entries
βββ docker/
β βββ Dockerfile # extends x0-app, bakes in static/ python/ apache2.conf
β βββ Dockerfile.db # extends x0-db, auto-inits github2sf schema on startup
β βββ docker-compose.yml
β βββ db-init.sh # startup script used by Dockerfile.db
β βββ apache2.conf
βββ README.md
The backend services are built on the python-micro-esb framework:
service_implementation.pyβ containsGitHubServiceandStackfieldService, both subclassingmicroesb.ClassHandler. Each class exposes service methods (verify,search_issues,get_issue_details,create_task).user_routing.pyβ routing functions consumed byServiceRouter.send(). Each function instantiates the appropriate service class, calls the relevant method, and returns the result.- WSGI scripts β thin wrappers that read the x0 POST payload, call
ServiceRouter.send(), and return JSON to the x0 frontend.
Stackfield's REST API is available at https://www.stackfield.com/api/v1/.
Key endpoints used:
| Endpoint | Purpose |
|---|---|
GET /v1/user |
Verify credentials |
POST /v1/rooms/{room_id}/tasks |
Create a new task |
The Room ID can be found in Stackfield under Room settings β General β Room ID or via the URL slug.
See LICENSE.