Project management
Your client portal is a separate login, and the server refuses to start if it isn't.
Most "client portals" are your app with some navigation hidden. Oneop's is a different session principal — its own cookie, its own signing secret — and in production the server throws on boot if the portal secret matches either the staff secret or the operator secret. A client session cannot reach the staff app, and a staff session cannot reach the portal.
Underneath it, the work runs on the same task engine as your deals and tickets, and the time you approve against it becomes an invoice that posts to a real double-entry ledger. Project management is activated separately, with the plan entitlement from Starter up.
No credit card. Free plan, 2 seats.
0
Secrets shared between the staff and portal sessions
1
Atomic ledger transaction per invoice sent
3
Rate tiers, resolved by specificity
3
Rate-limited portal flows — login, invite, reset
5
Independently switched sub-features
Win the work, deliver it with the client in the room, bill what you delivered.
A won deal becomes a project of the same name. The client watches it progress from their own login rather than from a status email. The hours your team logs against it are approved, priced and frozen — and then, once, become an invoice that posts.
Five steps, and no manual re-entry between any of them. The deal that starts it is Winter Collection Expansion on the CRM page and the journal entry that ends it is on the Finance page — the same record, not three systems agreeing after a sync.
What a projects tab does not do
Four things below. Each one is a mechanism you can check, not a capability we claim.
Fixed point 1
A separate security principal — verifiable, not asserted
The portal has its own session cookie and its own signing secret. Production boot fails hard if that secret is missing, or if it matches the staff secret or the operator-console secret, because sharing a secret between realms is what lets a cookie minted in one be replayed as another. Login, invite acceptance and password reset are each independently rate-limited.
Clients get their own application
- Home dashboardWhat needs their attention, first
- Projects & milestonesTime summaries, risks, the team, status updates
- Files & approvalsApprove deliverables directly, not by replying to an email
And their own account
- InvoicesDownloadable PDFs, and payment when Connect is configured
- MessagesThreaded, with your team
- Their own peopleThey add their team members; you do not administer their users
Fixed point 2
A project task and a CRM task are the same object
There is one task engine. Work items run on it alongside deals, tickets, invoices, purchase orders and inventory items, which means dependencies, recurrence, SLA clocks, watchers, @mentions and saved views behave identically wherever the work came from — and a person's workload is one list rather than one list per module.
Every work item gets
- Dependencies that refuse a cycle422, not a deadlock — plus subtasks, checklists and threaded @mentions
- Real recurrenceDaily, weekly on chosen days, or monthly — completing one mints the next, never two open copies
- An SLA clock15-minute sweep: 24h warning, then escalation through three levels
Projects add on top
- Backlog, sprints, milestonesPlus goals, OKRs and per-project collaboration
- Workload and budget viewsList, board or calendar, with saved views and bulk edits
- Reusable project templatesDocuments live per project, not scattered in a drive
Backlog
In progress
In review
Done
Fixed points 3 and 4
Approved time converts once, at a rate that was frozen before it could
Time is tracked against work, approved, priced at a resolved rate, and that rate is written onto the entry — so re-rating a project later cannot silently restate what you already billed. Conversion to a draft invoice runs inside a transaction that locks the entries with SELECT … FOR UPDATE and marks them converted in the same transaction, so a second attempt finds nothing left to convert. Sending the invoice posts debit AR, credit Revenue, credit Tax through the ledger service that enforces debits equal credits.
How a rate resolves
- Project rateBeats everything else on that project
- Role rateAn optional fallback tier, switched on per workspace — never overrides a more specific rate
- Tenant defaultThe floor. Budgets track against actuals throughout.
Fails closed on
- Billing switched offThrows on the first line, before reading anything — no invoice, no journal
- Currency mismatchRefuses to mix rates onto one document
- RetainersA tracking layer only — they draw down against invoices but never post to the GL
Two things we would rather state than hide. Portal payments are not runnable as shipped — the Stripe Connect code is real and complete, but the Connect credentials are not configured, so it needs a setup step and we will not demo it as live. And invoices post to Finance, the same ledger rather than an export; that page says exactly what it does and does not do.
Connected with Oneop
Delivery is the middle of the sentence, not the whole of it
A project is what happens between a deal being won and an invoice being paid, so the two modules on either side of it matter most. But delivery also raises tickets, consumes stock, needs reporting and triggers automations — and none of those are integrations here.
- CRMCustomer and commercial context follows the work.
- Help deskSupport sees the customer, commercial and operational history.
- ReportingEvery module is already a reportable dataset, so nothing has to be exported to be measured.
- FinanceOperational transactions continue into financial records.
- AutomationA trigger in one module can act in another without an integration between them.
The other 6 modules sit on the same record, and reach Project management the same way:
- Live chatConversations become part of customer context.
- SequencesOutreach works from CRM and customer context under controlled automation.
- Inventory & warehouseSales and operations work from the same product and order context.
- AI chatbotAI responds using permitted business context.
- AI agentsAI acts on the same records people do, under limits that are published rather than described.
- AI governanceWhatever AI touches in any other module is metered on the same path first.
Beyond the four
Public intake
A request form you can put in front of clients or the open web. Submissions arrive as triageable intake rather than as email. Its own switch, because it is a public write path.
Retainers and budgets
Retainers draw down against invoices and budgets track against actuals as the work runs. Retainers are deliberately a tracking layer — they never post to the general ledger, so a drawdown can never be mistaken for revenue.
Sprints, goals and OKRs
Backlog, sprints and milestones for teams that plan in iterations, with goals and OKRs above them. Sprints are the one Business-tier capability on this page; the rest of the planning surface is available from Starter.
The AI here cannot write anything
The assistant reads your project's real data and produces a status summary, a health assessment, risks, recommendations and suggested tasks. It is read-only by construction — there is no AI write path in the module at all, so there is no AI-initiated finance or stock action to fail closed against. A person accepts a suggestion through the normal Tasks API, with that API's own permissions.
Every call is metered against your workspace and charges your AI credit balance rather than billing you an overage. It is off until you turn it on and limited to elevated roles, so you control who spends credits. More on AI governance.
Where a project meets the rest of your tools
Seven of the nineteen native connections, chosen because a services engagement passes through all of them: the payment rail, the two mailbox-and-calendar suites, the meeting tool, the signature, the channel your team already talks in, and the site your intake form sits on.
See all integrations- Stripe Connect
- Google Workspace
- Microsoft 365
- Zoom
- DocuSign
- Slack
- WordPress
How this works underneath
Sessions, locks and the ledger
The portal is a second session realm, not a filtered view. It has its own cookie name and its own signing secret, and boot-time validation in production throws if that secret is unset or equal to either the staff session secret or the operator-console secret. Route middleware for the two realms is separate, so a portal session presented to a staff route is rejected as unauthenticated rather than as unauthorised — there is nothing to escalate from.
Time entries carry the rate that priced them. Resolution runs project rate, then role rate if that tier is switched on for the workspace, then the tenant default; the answer is written onto the entry at approval. Nothing downstream re-derives it, which is what makes a later rate change safe.
Conversion to a draft invoice opens a transaction, selects the approved entries FOR UPDATE, writes the invoice lines and marks the entries converted before committing. Two concurrent conversions serialise on the lock and the second one finds no unconverted entries, so it produces nothing rather than a duplicate invoice.
Sending the invoice posts one journal entry — debit Accounts Receivable, credit Revenue, credit Tax — through the same ledger service the rest of Finance uses, which refuses to write an entry whose debits and credits do not balance. Retainers sit outside this: they draw down against invoices in their own tracking layer and never reach the GL.
What it costs
Projects unlock from Starter; time tracking is Pro; sprints are Business. The client portal is on every plan — what changes is how many client logins it includes and whether you can run it on your own domain (Pro and up). Billing, intake, role rates and the AI assistant stay independently switched, because each touches money, a second login realm or metered AI.
See full pricing| Plan | Projects | Time | Sprints | Portal logins |
|---|---|---|---|---|
| Free $0 | Not included | Not included | Not included | 3 |
| Starter $19 | Included | Not included | Not included | 10 |
| Pro $59 | Included | Included | Not included | 50 |
| Business $129 | Included | Included | Included | 250 |
Frequently asked
Do I have to ask for project management?
You do not buy it separately — projects run on the same task engine as your deals and tickets, in the same workspace. Project management is activated separately, because approved time can become an invoice and post to the ledger, and the plan entitlement then starts at Starter. What stays a further, deliberate switch is billing, public intake, role rates and the AI assistant — each touches money or metered AI, so each has its own control. The client portal itself is not one of those switches — it is on for every plan. You can run projects and time without ever turning on billing.
How is the client portal actually separate from the staff app?
It has its own session cookie and its own signing secret. In production, Oneop refuses to boot if that secret is unset, or if it matches the staff session secret or the operator console secret, because sharing a secret between realms lets a cookie from one be replayed as another. A portal session cannot reach staff routes and a staff session cannot reach portal routes.
Are project tasks separate from CRM tasks?
No, and that is deliberate. Work items run on the same task engine as deals, tickets, invoices, purchase orders and inventory items — so dependencies, recurrence, SLA clocks, watchers, @mentions and saved views behave identically, and a person’s workload is one list rather than one per module.
What stops the same approved hours being billed twice?
The conversion itself. Approved billable time becomes a draft invoice inside a transaction that locks the time entries with SELECT … FOR UPDATE and marks them converted in the same transaction, so a second attempt finds nothing left to convert rather than producing a second invoice. The rate is frozen onto the entry at approval, so changing a rate afterwards cannot restate work that has already been billed.
Where does the money go when a client pays an invoice?
Into your own Stripe account, through Stripe Connect. Oneop reconciles the payment into your ledger, can issue a fee-prorated automatic refund, and sweeps for missed webhook events. One caveat we would rather state than hide: the Connect credentials are not configured in the shipped build, so this needs a setup step and we will not demo it as live.
Can the AI assistant change my project?
No. It is read-only by construction — there is no AI write path in the module. It generates a status summary, health assessment, risks, recommendations and suggested tasks; a person accepts those through the normal Tasks API with that API’s own permissions. Every call is metered against your AI credit balance, and the assistant is opt-in.
Start with projects. Grow into the rest.
Projects and the client portal are ready on your first login, and time tracking arrives with Pro. Billing, public intake and the AI assistant are each their own switch — turn them on when you actually need them.
Free forever · 2 seats · No credit card