TL;DR — Prioritize is a self-hostable Spring Boot platform for organizing people, devices, and work. Its twist: NFC tags and MQTT sensors are first-class domain objects, not bolted-on integrations. Bind a tag to a task, tap it, and the task's time tracking starts — over a single REST call.
docker compose upand you're running. Built for the self-hosted / homelab / maker crowd.
The friction nobody mentions
Time tracking and status updates don't fail because the software is bad. They fail because of one more thing: one more app to open, one more login, one more context switch. On a shop floor, at a workbench, in a lab or a makerspace, that little bit of friction is enough that it just… doesn't happen. The timesheet gets reconstructed from memory on Friday, and everyone knows how accurate that is.
So what if the trigger were physical? Tap a sticker on the machine you're working on, and the clock starts. Tap it again when you walk away, and it stops — session saved.
That's a real recording. Both taps in it are genuine REST calls against a running instance — nothing faked.
The idea: NFC and MQTT as first-class citizens
Most project tools treat the physical world as an afterthought. You get there through an integrations page, a webhook, a Zapier zap glued onto the side.
Prioritize is built the other way around. An NFC tag and an MQTT sensor are domain objects that live right next to your projects, tasks, resources, and skills:
- A TIMETRACKER tag is bound to a task; scanning it toggles that task's clock.
- A resource (a machine, a sensor) can register itself over MQTT and stream telemetry.
- A telemetry state rule (e.g. temperature crosses a threshold →
ALARM) can fire without any glue code. - Skills exist for people and devices alike — because on a shop floor, "who/what can do this" applies to both.
The physical world isn't an integration. It's part of the model.
What actually happens on a scan
A scan is one REST call:
POST /api/v1/nfc/scan/{uuid}
For a TIMETRACKER tag, that toggles the bound task's time tracking — start on the first tap, stop on the next — and the completed work session is saved automatically. Here it is with curl:
curl -X POST http://localhost:8080/api/v1/nfc/scan/TT-9F3A-01 \
-u admin:p@ssword
# -> { "uuid": "TT-9F3A-01", "type": "TIMETRACKER",
# "action": "TRACKING_STARTED", "taskId": 42, "tracking": true }
Now the honest part, because this is exactly the question a self-hoster asks next:
Prioritize is the backend — you bring the reader. A scan is just that one REST call. Whatever reads the tag and fires it — an NFC-capable phone app, a fixed reader at a workstation, an ESP32 or a Raspberry Pi, or a three-line shell script — is up to you. Prioritize provides the endpoint (and can broadcast every scan over MQTT so other systems can react); it does not ship a reader app.
That's the whole contract. If you can make an HTTP POST, you can wire up a physical trigger.
Beyond the tap
The NFC trick is the fun part, but it sits on a real platform:
- MQTT telemetry with state-transition rules and alarms — sensors self-register and stream values.
- BPMN orchestration via Flowable — model order, waiting, and responsibility across tasks and devices.
- Recurring (cron) task schedules — spawn tasks on a cadence.
- Documents with versioning, org/role/permission management, and skills for people and resources.
- A REST API throughout (OpenAPI/Swagger) plus a Vaadin admin GUI for the org, resource, document, skill, scheduling and process subsystems.
Run it yourself in one command
docker compose up
That gives you the app plus PostgreSQL. Want zero dependencies? The standalone image runs on an embedded H2 database with no external services at all. MQTT and Keycloak are opt-in profiles. The admin GUI and Swagger UI are up as soon as the container is.
Where it fits (and where it doesn't)
Prioritize is a platform, not a turnkey vertical app. It's a good fit if you're self-hosting and want projects, devices, and physical triggers to live in one honest, REST-driven model — maintenance, labs, workshops, makerspaces, small-industry setups. It's not trying to out-feature a dedicated PM SaaS; the point is the interlock between work and the physical world.
Your turn
Would you tap a sticker to start your timer? And if you had a "physical trigger for anything" endpoint sitting in your homelab — what would you wire it to? A 3D printer finishing a job? A lab freezer? The coffee machine? I'd genuinely like to hear it in the comments.
If the idea resonates, a ⭐ on the repo helps more people find it:
phaller222
/
Prioritize
IoT-ready, neutral platform for project & resource management with NFC, MQTT and BPMN process orchestration (Flowable) — Spring Boot REST backend + Vaadin admin GUI.
Prioritize
Open-source framework for organizing companies, employees, devices (IoT), and their tasks — Spring Boot 4 / Java 21.
Find the right people — and things — for the right job. Prioritize models organizational structures (companies, departments, users, roles), manages documents with versioning, represents skills for people and devices, controls IoT resources over MQTT and REST, and organizes work as projects, tasks and goals with NFC-driven time tracking. It exposes a REST API throughout, against which arbitrary clients can be built.
Status
Released and self-hostable — a Spring Boot platform you can get running in one command (see Quickstart). The runnable Spring Boot core covers: company/user management, documents with versioning, skills for people and devices, resource control (MQTT/REST), telemetry state-transition rules, recurring (cron) task schedules, BPMN orchestration via Flowable, and the project subsystem — projects, blackboards, tasks, goal-driven progress, task time tracking, and NFC tags as physical triggers (including…

Top comments (0)