{"id":51509369,"url":"https://github.com/wekan/weless","last_synced_at":"2026-07-08T04:30:34.427Z","repository":{"id":367630529,"uuid":"1281656257","full_name":"wekan/weless","owner":"wekan","description":"HaxeUI Serverless WeKan kanban prototype","archived":false,"fork":false,"pushed_at":"2026-06-26T19:38:19.000Z","size":28,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-26T21:15:08.785Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Haxe","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wekan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-26T19:29:19.000Z","updated_at":"2026-06-26T19:38:27.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/wekan/weless","commit_stats":null,"previous_names":["wekan/weless"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/wekan/weless","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wekan%2Fweless","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wekan%2Fweless/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wekan%2Fweless/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wekan%2Fweless/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wekan","download_url":"https://codeload.github.com/wekan/weless/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wekan%2Fweless/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35252324,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-08T02:00:06.796Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-08T04:30:33.708Z","updated_at":"2026-07-08T04:30:34.414Z","avatar_url":"https://github.com/wekan.png","language":"Haxe","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WeKan — Haxe + HaxeUI full-stack Kanban\n\nA Trello/WeKan-style Kanban board built as a **single Haxe codebase** that compiles to\nboth an HTML5 frontend (HaxeUI) and a portable, type-safe backend (tink_web) targeting\neither **PHP** (traditional web hosting) or **JavaScript** (AWS Lambda / Cloudflare\nWorkers). See [`docs/design.md`](docs/design.md) for the original brief.\n\n## Tech stack\n\n| Layer    | Technology |\n|----------|------------|\n| Language | Haxe 5.0.0-preview.1 (via [lix](https://github.com/lix-pm/lix.client)) |\n| Frontend | HaxeUI (`haxeui-core`, `haxeui-html5`) — XML layouts + macro-built components |\n| Backend  | tink_web / tink_http — type-safe routing, dual PHP/JS targets |\n| Database | PostgreSQL (PDO on PHP) — schema in [`src/db/schema.sql`](src/db/schema.sql) |\n\n## Layout\n\n```\nsrc/\n  shared/Models.hx        Board / Column / Card types — shared by client and server\n  client/                 HaxeUI HTML5 app\n    ClientMain.hx         entry point (Toolkit.init + mount)\n    MainView.hx           board view + drag-and-drop controller\n    ColumnView.hx         a list\n    CardView.hx           a draggable card\n    BoardStore.hx         client state (seeded; syncs to the API best-effort)\n    RestClient.hx         calls the backend\n    assets/*.xml          HaxeUI layouts\n    assets/styles/        custom CSS\n  server/                 tink_web backend\n    ServerMain.hx         picks the container per target and runs the router\n    Api.hx                @:get / @:post / @:put routes\n    Db.hx                 storage interface\n    MemoryDb.hx           in-memory store (default; runs anywhere)\n    PostgresDb.hx         real PostgreSQL via PDO (#if php, -D wekan_postgres)\n    php/PDO*.hx           minimal PDO externs\n  db/schema.sql           PostgreSQL schema + indexes\n```\n\n## Build\n\nInstall the toolchain (Node 24, Haxe 5, lix) then restore the pinned libraries:\n\n```bash\nnpx lix download          # restores haxe_libraries/*.hxml (HaxeUI + tink stack)\n```\n\n\u003e The pinned versions are mutually compatible and known to build on Haxe\n\u003e 5.0.0-preview.1. Installing \"latest\" of each library instead pulls\n\u003e incompatible versions, so prefer `lix download`.\n\n| Command | Output |\n|---------|--------|\n| `npx haxe build.hxml` | both: client → `deploy/www/html5/app.js`, PHP server → `deploy/www/api` |\n| `npx haxe build.client.hxml` | HTML5 client only |\n| `npx haxe build.server.php.hxml` | PHP backend only |\n| `npx haxe build.server.js.hxml` | JS / serverless backend only |\n\n`build.sh` / `build.bat` wrap these in a menu.\n\n## Run\n\nThe easiest way is the `build.sh` / `build.bat` menu, which builds and launches the\nwhole app (client + backend) on one origin so the client's default `/api` base URL\nworks with no CORS setup:\n\n| Menu | What it runs |\n|------|--------------|\n| `7` | HTML5 client + **PHP** backend → http://127.0.0.1:8080 |\n| `8` | HTML5 client + **JS/Node** backend → http://127.0.0.1:8080 |\n\nEquivalent commands:\n\n```bash\n# Client + PHP backend (one PHP process serves static files and /api)\nnpx haxe build.client.hxml \u0026\u0026 npx haxe build.server.php.hxml\nphp -S 127.0.0.1:8080 tools/dev-router-php.php\n\n# Client + JS backend (a Node HTTP dev server serves static files and /api)\nnpx haxe build.client.hxml \u0026\u0026 npx haxe build.devserver.node.hxml\nPORT=8080 WWW_DIR=deploy/www/html5 node deploy/local/devserver.js\n```\n\nThen open http://127.0.0.1:8080 and try the API:\n\n```bash\ncurl http://127.0.0.1:8080/api/boards/1\ncurl -X POST http://127.0.0.1:8080/api/cards -H 'Content-Type: application/json' \\\n     -d '{\"columnId\":1,\"title\":\"Hello\"}'\ncurl -X PUT http://127.0.0.1:8080/api/cards/1/move -H 'Content-Type: application/json' \\\n     -d '{\"columnId\":2,\"position\":0}'\n```\n\n\u003e The production serverless build (`build.server.js.hxml`) compiles to an AWS Lambda\n\u003e *handler*, not a server — so local runs use the Node dev server\n\u003e ([`build.devserver.node.hxml`](build.devserver.node.hxml) →\n\u003e [`src/server/DevServerMain.hx`](src/server/DevServerMain.hx)) instead.\n\nTo persist to PostgreSQL, create the schema and build with the PDO store:\n\n```bash\npsql \"$DATABASE_URL\" -f src/db/schema.sql\nnpx haxe build.server.php.hxml -D wekan_postgres\n# configure via env: DATABASE_DSN, DATABASE_USER, DATABASE_PASSWORD\n```\n\n## API\n\n| Method | Path | Body | Returns |\n|--------|------|------|---------|\n| GET  | `/boards/:id`     | —                            | board + columns + cards |\n| POST | `/columns`        | `{ boardId, title }`         | created column |\n| POST | `/cards`          | `{ columnId, title, description? }` | created card |\n| PUT  | `/cards/:id/move` | `{ columnId, position }`     | moved card |\n\nAll requests/responses are JSON.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwekan%2Fweless","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwekan%2Fweless","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwekan%2Fweless/lists"}