DEV Community

Cover image for Team workspaces on orkestr, and the ownership-transfer problem
Stefan Iancu
Stefan Iancu

Posted on • Originally published at blog.orkestr.eu

Team workspaces on orkestr, and the ownership-transfer problem

Introducing the Team Plan on orkestr

Imagine this scenario: You signed up for a Team plan a year ago. Your card is on file. You hired two engineers, invited them, and they've shipped most of the production work since. Now, you're leaving the company.

On most SaaS platforms, this is the moment you have to open a support ticket:

"Hi, can the new tech lead take over the subscription? Also all 12 projects. Also the domains. Also the audit log." Three business days later, you get an email asking for "verification" of something.

The Team plan launched on orkestr today. The entire flow is built right into the dashboard, and an ownership transfer takes about 90 seconds end-to-end.

Here is what is shipping today, and why building it was harder than it looks.


What Ships Today

  • Explicit Team Workspaces: Create a team, invite members by email, and switch workspaces from the top bar. Personal projects stay personal; team projects are visible to the team.
  • Shared Plan Budgets: Your Team plan's 15-project allowance is shared across your personal workspace and the team. The team owner's plan applies to team projects automatically.
  • Role-Aware Features: Members can see who created each project. To protect infrastructure, members cannot delete team projects—only the owner can. Additionally, the activity feed shows team-tagged actions to all members.
  • Seamless Ownership Transfer: If the owner wants out, they can hand the team (and every project and function inside it) to another member atomically. This requires a quick 1 EUR card verification from the new owner. The old owner's subscription gets canceled, and the new owner's billing cycle seamlessly picks up on the original renewal date.

Pricing: Team is available for 29.99 EUR/month or 299 EUR/year via the Pricing Page. It features the same EU-hosted infrastructure as every other plan, with no US data transfers.


The Workspace Model

The word "workspace" is heavily overloaded in SaaS, so it's worth specifying how it works here.

orkestr features exactly two workspace contexts: Personal and Team. An early draft included a third context called "All Workspaces"—a unified dashboard showing everything across every team you are in. After testing it on staging for a week, it was completely ripped out. It made security scoping invisible, and data scoping is a detail that should be explicit, not implicit.

The active workspace is now part of every backend request. If you are a member of a team and you open the projects page, you will not see the owner's untagged personal projects. This isn't hidden by the UI; the backend simply never returns them.

Expanding Scope for Plan Limits

The one place where scope expands automatically is plan limits. A project's plan is tied to whoever owns it. If you are on the free tier but working on a project within a paid Team workspace, you get full Team-plan limits on that project:

  • Rollbacks
  • Custom domains
  • Expanded CPU and memory budgets
  • IP allowlists

You won't hit any "upgrade to Pro" walls inside a team that is already being paid for.


Shared Budgets and Role-Aware Counts

The 15-project limit on the Team plan is a single budget split across both personal and team contexts.

If you (the owner) have 5 personal projects and your team has 8 team projects, you have used 13 of your 15 allowed projects. However, your team members will only see "8 of 15" on their dashboard. Their personal projects do not count against the team's budget, and they shouldn't see how many personal projects you hold. Even leaking the raw count feels like a privacy violation.


Total Team Budget: 15 Projects
├── Owner's View:   5 Personal + 8 Team = 13/15 Used
└── Member's View:  8 Team Projects     =  8/15 Used

Enter fullscreen mode Exit fullscreen mode

This is the kind of detail that nobody notices when it's right, and everyone notices when it's wrong. The same logic applies to the activity feed: members see team-tagged actions from everyone plus their own personal actions, but never the owner's personal actions. The same goes for domains, add-ons, and deployments.


Solving the Invite Flow & Email Mismatch

Invites are entirely email-based. The owner enters an email, the system creates a TeamInvite row, and the invitee gets a link. Standard practice.

However, a common, annoying edge case occurs when an invitee already has an orkestr account, but under a different email. For example, they signed up with firstname@gmail.com for personal use, but you invited their work email: firstname@company.com. Most platforms either silently match the accounts (which is dangerous, as emails are not identity) or hard-fail and tell the owner to try again.

orkestr handles this gracefully. The acceptance page displays:

"This invite was sent to firstname@company.com. Your account email is firstname@gmail.com. Are these the same person?"

If the invitee confirms, the system logs both emails on the membership row and grants access. If they say no, the invite stays open for whoever actually controls that email address. This tiny UX detail eliminated roughly half of the anticipated support tickets.


Re-engineering Ownership Transfer

Until recently, if a Team-plan owner wanted to leave a team, they had one option: remove every member, delete every team project, cancel their subscription, and let the data evaporate. That isn’t an ownership transfer; that's burning down the office and leaving.

Here is how the new, 90-second automated flow works:

  1. Owner Requests Transfer: The current owner selects a team member and checks a consent box acknowledging they will lose access to all team projects and functions.
  2. Target Notified: If the target teammate isn't on a Team plan yet, they are prompted to subscribe. A team cannot be handed over to an account whose plan limits cannot support the existing resources.
  3. Target Pays 1 EUR: This is a Mollie card verification, not a real charge. It serves two purposes: it proves the new card is valid before handing over a subscription, and it satisfies EU consumer protection rules requiring an explicit, attributed action before initiating a recurring charge.
  4. Atomic Swap: Once Mollie confirms the verification, a single database transaction reassigns the team, every project, and every function in one go. Either every write succeeds, or the entire transaction rolls back.
  5. Subscription Handover: The new owner's billing cycle starts exactly on the day the old owner's subscription would have renewed. The old owner's subscription is canceled, and the 1 EUR verification fee is refunded.

Aligning the start date to the original renewal date prevents both parties from double-paying or losing paid days, completely eliminating a common customer service trap.


What’s Not in This Release

To be completely transparent, a few features didn't make the cut for today's launch:

  • No Automatic Expiry on Pending Transfers: Right now, transfer requests sit open indefinitely until someone explicitly cancels or accepts them. A 7-day default expiration will be added soon.
  • No Multi-Owner Teams: There is a strict limit of one owner per team. Co-ownership introduces entirely different database invariants and security complexities, and we didn't want to ship a half-baked version of it.

If you’ve been waiting for team collaboration features, you can get started right now at orkestr.eu/pricing. If you’re already on a Pro plan and want to bring your engineers onboard, you can find the upgrade toggle directly in your workspace settings.

Top comments (1)

Collapse
 
ianqqu profile image
Stefan Iancu

Did we miss anything on the Team plan?