Rate-limit the export endpoint
How it works
From an empty workspace to a finished project
Nine stages, each one a screen in the product. Read it once and you know what Vorkhurry is.
An illustration of a Vorkhurry board with To do, In progress, In review and Done columns, showing issue cards with keys, priorities, estimates, assignees and linked pull requests.
Create the organization
Signing up creates a workspace, not just a user account. Everything else — projects, roles, issues, documents — belongs to it, and there is no path into the product that produces a user without one.
On a plan that needs no payment the workspace exists immediately. On a paid plan nothing is written until the payment provider's signed webhook confirms it, so a forged success callback reaches no code that creates anything.
Set up people and access
Add departments, teams and designations; invite people with a role attached; group members so access is granted to a set rather than to a list.
146 named permissions, 20 role templates from Owner to Guest, and per-member overrides when one person genuinely needs one thing more. Every change lands in the audit log.
Create a project
A project gets its own key — the string that appears in every issue id and, later, in branch names. Add its members, its milestones, its epics and its components.
Issue types, statuses, priorities and the transitions between them are your organization's data. Edit them before you have a thousand issues rather than after.
Build the backlog
Create issues, or import them from Jira, Linear or a CSV through a wizard that previews, maps, validates and resolves conflicts row by row.
Ordering uses lexorank strings, so moving one backlog item rewrites one row rather than renumbering the list.
Plan and start a sprint
Pull work from the backlog, set the goal, estimate on a scale you configure, and start it.
Starting a sprint snapshots the commitment. That is what makes the report afterwards mean something — it compares against what was committed, not against what the scope drifted into.
Do the work
Board, list or calendar, whichever fits the question. Comment, attach files, watch an issue, check items off a checklist, log time against it.
Changes appear live over a WebSocket channel per organization, project and issue, and you can see who else is looking at the same thing.
Connect the repository
Branch with the issue key. Commits and the pull request appear on the issue, and a merge can move it to Done through a transition your workflow already allows.
Vorkhurry connects as a GitHub App scoped to the repositories you install it on. Only the installation id is stored; every call mints a token that expires in an hour.
Track the schedule
The Gantt draws bars from start and due dates, milestones on the same axis, progress inside the bars, and finish-to-start arrows between dependent work.
A dependency that would create a cycle is rejected, because a cycle is not a drawing problem — it is a plan that cannot be executed in any order.
Read what happened
Throughput, open work, cycle time and flow efficiency; burndown per sprint, velocity per project, cumulative flow from daily rolled-up metrics; portfolio progress and workload across people.
Search covers issues, projects, epics, sprints, employees, documents, comments, meetings and announcements in one ranked result set, permission-filtered inside the query rather than after it.
The schedule, drawn
Stage eight, in the product's own view: bars, milestones, progress and dependency arrows.
An illustration of the Vorkhurry Gantt view: six issue rows across a thirty-day window, each with a bar showing its start date, due date and progress, dashed arrows between dependent rows, and a milestone diamond at the end of the window.
Where the architecture shows
Three decisions a visitor will not see on a screen, but will feel.
Tenant isolation lives in one place
Not in several hundred query filters. PostgreSQL row-level security is a second, independent backstop.
Search reads one index
One weighted document per entity gives one ranked result set across nine entity types, instead of nine differently-shaped queries.
Delivery happens on a queue
Chat notifications, webhook deliveries, imports and integration events all run as background jobs, so a provider outage never slows the application down.
Start with your team, not with a sales call
Create a workspace, invite the people you work with, and bring your existing issues in from Jira, Linear or a CSV.