{"id":37662745,"url":"https://github.com/vividsystem/pos-todo","last_synced_at":"2026-01-16T11:52:05.430Z","repository":{"id":316899928,"uuid":"1065271339","full_name":"vividsystem/pos-todo","owner":"vividsystem","description":"A simple web app to print your todos and messages directly to a POS Printer","archived":false,"fork":false,"pushed_at":"2025-11-07T19:11:22.000Z","size":190,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-11-07T19:13:18.084Z","etag":null,"topics":["software"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/vividsystem.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":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-27T11:42:28.000Z","updated_at":"2025-11-02T18:14:55.000Z","dependencies_parsed_at":"2025-09-27T13:26:36.704Z","dependency_job_id":"1c947cfb-4658-49ff-9dca-b26d088b052a","html_url":"https://github.com/vividsystem/pos-todo","commit_stats":null,"previous_names":["vividsystem/pos-todo"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/vividsystem/pos-todo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vividsystem%2Fpos-todo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vividsystem%2Fpos-todo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vividsystem%2Fpos-todo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vividsystem%2Fpos-todo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vividsystem","download_url":"https://codeload.github.com/vividsystem/pos-todo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vividsystem%2Fpos-todo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28478387,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T06:30:42.265Z","status":"ssl_error","status_checked_at":"2026-01-16T06:30:16.248Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["software"],"created_at":"2026-01-16T11:52:05.346Z","updated_at":"2026-01-16T11:52:05.415Z","avatar_url":"https://github.com/vividsystem.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# pos-todo\nPrint your ideas, todos, or whatever other text you like to a receipt printer!\n\n\nUnfortunately I can't give anyone acces to my printer right now, because I need to figure out some networking-security stuff beforehand.\nSo watch this cool demo video to see the website working!\n[cool frontend demo video here](https://hc-cdn.hel1.your-objectstorage.com/s/v3/8f13d6fc73214885a3d00f43c2b1ff3d57e945db_img_0923.mp4)\n\n\n## Features\nPrint via a:\n- (pretty fall-themed) website \n    -\u003e supports customized footer and header\n- slackbot to print slack messages\n\n\n## Hardware Requirements\n- a computer/raspberry pi to run the webserver\n- ESC/POS-compatible printer (connected to the previously mentioned computer)\n\n## Software Requirements\n### Backend\n- python\n- uv (recommended for easy setup and running)\n- cups\n### Frontend\n- bun\n\n## Installation\n(for all instances the repo has to be cloned first)\n### Backend\n2. Setup a MQTT Server (you can use the docker compose for that)\n3. Setup your POS-Printer\nIf you have a USB-Printer make a udev rule for it.\nFor that find out your product id and vendor id using for example `lsusb`\nThen create a udev rule in `/etc/udev/rules.d/99-pos-todo.rules`\nwith this content:\n```\nSUBSYSTEM==\"usb\", ATTRS{idVendor}==\"\u003cYOURVENDORID\u003e\", ATTRS{idProduct}==\"\u003cYOURPRODUCTID\u003e\", MODE=\"0664\", GROUP=\"dialout\"\n```\nmake sure to replace `\u003cYOURVENDORID\u003e` and `\u003cYOURPRODUCTID\u003e` (do not use a `0x` prefix. just the hex number) with your actual ids.\nafter that do `sudo service udev restart` or `sudo udevadm control --reload` to restart udev\n\n### Frontend\n```bash\ncd frontend\nbun i\n```\n2. Add `VITE_MQTT_SERVER=\"mqtt://YOURMQTTHOST\"` to `frontend/.env`\n### Slack\n1. Modify the manifest.json to have the correct name, etc.\n2. add your slack tockens and auth to `slack/.env` like so:\n```\nSLACK_CLIENT_ID=YOURSLACKCLIENTID\nSLACK_CLIENT_SECRET=YOURSLACKCLIENTSECRET\nSLACK_SIGNING_SECRET=YOURSLACKSIGNINGSECRET\nSLACK_APP_TOKEN=YOURSLACKAPPTOKEN\nSLACK_BOT_TOKEN=YOURSLACKBOTTOKEN\nMQTT_HOST=\"mqtt://YOURHOST:YOURPORT\"\n```\n```bash\ncd slack\nbun i\n```\n\n## Deploying\n### Backend\n```bash\ncd backend\nuv run src\n```\n### Frontend\n```bash\ncd frontend\n```\nFor testing:\n```\nbun run dev\n```\nOtherwise:\n```bash\nbun run build\nbun run start\n```\n\n### Slack\n```bash\nbun run start\n```\n\n## Configuration (for the backend)\nThis file uses a `.env` in `backend/` file for configuration\n\n| Field            | Type                  | Description                           | Required                         |\n| ---------------- | --------------------- | ------------------------------------- | -------------------------------- |\n| `PRINTER__PROFILE` | string                | [Printer profile](https://python-escpos.readthedocs.io/en/latest/printer_profiles/available-profiles.html) | No                               |\n| `PRINTER__CONNECTION`     | `\"USB\"` \\| `\"NETWORK\"` | Type of connection to the printer     | Yes                              |\n| `PRINTER__USB__VENDOR_ID`  | hex-string (no `0x` prefix) | Vendor ID of the USB printer          | Required if `PRINTER__CONNECTION=USB`     |\n| `PRINTER__USB__PRODUCT_ID` | hex-string (no `0x` prefix) | Product ID of the USB printer         | Required if `PRINTER__CONNECTION=USB`     |\n| `PRINTER__NETWORK__IP`     | string                | IP address of the network printer     | Required if `PRINTER__CONNECTION=NETWORK` |\n\n\n## Usage\n- Go to the website \n- type `/pos-todo \u003cxour text\u003e` \n- or use the `Print to pos-todo` shortcut on an already sent slack mesage\n\n## Acknowledgments\nThis project is only possible thanks to [python-escpos](https://github.com/python-escpos/python-escpos)! Go leave them a star. \n\n\n## License\nThis project is licensed under the MIT License (see [LICENSE](./LICENSE) or https://opensource.org/licenses/MIT)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvividsystem%2Fpos-todo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvividsystem%2Fpos-todo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvividsystem%2Fpos-todo/lists"}