SaaS · Worktray
Worktray
Boards for the work that currently lives in a chat thread.
Work scattered across chatsOne board the team reads
Worktray is a kanban workspace for teams who run projects out of group chats, forwarded photos, and a spreadsheet somebody owns. Boards hold lists, lists hold cards, and a card carries everything the work needs — dates, owners, priority, budget, files, and the conversation. Multi-user, bilingual, and scoped by row-level security so a board is only visible to the people it belongs to.
The board
Four views of the same board
Nobody has to adopt someone else's mental model to find their work. The cards are the same in all four; only the shape of the question changes. Cards can be added from any of them.
- 01
Kanban
Columns you drag cards between — with the mouse, or with the keyboard: focus a card, space to pick it up, arrows to move, space to drop.
- 02
Table
Every card as a row, sortable and scannable. For the weekly review, where a wall of columns is too slow to read down.
- 03
Gantt
Start and due dates on a timeline, so overlap and slippage are visible in advance rather than announced in a meeting.
- 04
Calendar
Deadlines on the month they actually fall in, which is how most people think about a deadline in the first place.
The card
The whole job, on one card
A card is the unit of work and the unit of record. Everything about it is in one place, and changes save as you type.
Detail that survives the handover
Description, start and due dates, priority, labels, colleagues, notes, checklist tasks with their own assignees, an estimated budget, links, and file attachments.
A thread per card
Chat on the card itself, with @mentions, images, and files. Attachments live in a private bucket and are served through short-lived signed URLs, never a public link.
Deadlines you read without reading
The coloured left edge of a card encodes priority; the row tint and the due-date text encode how close the deadline is. The same signal, in all four views.
Closed, not deleted
Work ends as finished, archived, or cancelled, and can be reopened. Hard delete is owner and admin only, so a record does not vanish because someone was tidying up.
LINE sync
The group chat, on the card
Connect a card to one LINE group. What gets said there arrives on the card in real time, with the sender's name and a LINE badge; what the team writes in Worktray is pushed back into the group. The conversation stays where it already happens, and the record ends up where the work is.
- ทีมช่างขอเลื่อนติดตั้งเป็นวันศุกร์
- [หน้างาน-ชั้น3.jpg]
- ok แต่ต้องแจ้งลูกค้าก่อนบ่ายนี้
- ใบเสนอราคาเดิมยังใช้ได้ไหม
- card
- Site install · Phase 2
- chat
- 4 messages · LINE
- photo
- Mirrored to attachments
- due
- Fri 31 Jul — moved
- logged
- Written to board activity
Loops and duplicate deliveries are handled: a LINE-origin message is never pushed back, and every webhook event is processed at most once.
Where the line is
- One active LINE group per card, and one active card per group.
- Inbound media is mirrored — images, video, audio, files. Outbound sync is text only.
- No backfill: sync starts once the bot is in the group and the card is connected.
Across boards
What am I supposed to be doing
The parts that answer that question without opening five boards and reading every column.
My Tray
Every card you created or were added to, from every board, grouped by urgency: overdue, today, this week, later, no date, closed.
Notifications
A live bell fed by board activity and chat @mentions, derived only from data you are already allowed to see — so it cannot leak a board you cannot open.
Board activity log
An append-only history written by database triggers rather than application code, exportable to CSV for the meeting where someone asks what actually happened.
Work schedules
Recurring personal task series — daily, weekly, or monthly — with their due dates generated ahead of time instead of remembered.
Permissions
Who can see what, decided in the database
Every board is scoped by Postgres row-level security. The interface does not decide what you can read; hiding a button is not a permission model.
Three layers of role
An instance operator, an organisation role — admin or member — that governs every board in that organisation at once, and three board tiers of owner, editor, and viewer that apply inside a board regardless of organisation.
MySpace, genuinely private
A board belonging to no organisation lives in the owner's personal space, invisible even to the admins of every organisation they are in. Adding a member to one is refused outright — that is what never shareable means.
Organisations, handled properly
Members, roles, and invitations come from Clerk, and the same signed-in session authenticates the database — so policies key on the actual person, not a shared service key.
Thai and English, per person
The interface language is the user's own setting, not something decided once for the whole organisation by whoever set it up.
Built on
- Framework
- Next.js 16 · React 19 · TypeScript
- Auth
- Clerk — organisations and invitations
- Data
- Supabase Postgres, row-level security
- Files
- Private storage, short-lived signed URLs
- Chat sync
- LINE Messaging API webhook
- Languages
- ไทย · English
Want it running for your team?
Worktray is ours, so we host it, support it, and can shape it around the way your organisation actually runs. Tell us where your project work lives at the moment.
ArtnCo