One platform · eight modules
Company operations,
in one place.
The plan in one tool, the hours in another, the pipeline in a third — and someone stitching them together every Friday. Opelli runs it all in one place, so the whole company adds up to one context: readable by you today, by your agents tomorrow.
The project wiki
Where the work gets written down.
Every project carries a wiki — nested pages, meeting notes and PRDs. It's multiplayer, it draws diagrams, it turns meeting decisions into real tasks without leaving the page, and you can hand your customer the pages that concern them without showing them anything else.
- Multiplayer editingShared live sessions over WebSockets — peers' cursors, selections and mouse pointers render in place.
- Meetings that produce tasksMeeting notes carry attendees and a date; "/task" in the text creates real tasks that link back to the note.
- Share pages with your customerInvite a guest by email to any page — they sign in with their own Google account and see that subtree, nothing else. Every shared page carries a visible mark for the team.
- Comment on the exact sentenceSelect a passage and comment on it — the quote highlights in the page and jumps to the thread and back. @mentions notify over Mattermost or email.
- Diagrams, images & galleries"/flow" draws flow charts, interactive in the reading view; paste or drop images; several at once become a gallery — grid or filmstrip.
- Nothing gets lostNew pages autosave as visible drafts, a local cache catches the keystrokes, important pages lock. Pages travel as markdown — import, export, even saved HTML files as read-only pages.
Projects
The whole project on one page.
When the schedule, the timesheets and the board live in separate tools, "how is the project doing?" takes an afternoon. Here it's one page: team & capacity, the task snapshot, linked repos, the customer, the wiki — every number comes from the module that owns it, so they always agree.
- Allocated vs tracked per person and month, with verdicts
- Burn rate: the month's hours against the allocated budget
- A Deadlines card: due tasks and deal next steps, soonest first, overdue in red
- GitHub repos — commits mentioning a task key land on the task
- Time-review, customer and Mattermost-channel tiles
- Task snapshot with one click into the filtered board
Tasks
A board that stays small.
Types, six statuses — "Won't do" is an answer too — one owner, one level of subtasks. Everything else the board could grow was deliberately left out.
- Task keysWEB-7 style, per project. Moving a task re-keys it and the old key keeps redirecting.
- SprintsOne active sprint per project; closing keeps finished and cancelled work recorded and carries the rest forward or back to the backlog.
- Read-firstOpening a task shows the assignment, comments and activity — editing is an explicit action.
- Commits drive the boardA push webhook links commits by task key; a mention pulls the task into In Progress, "Fixes WEB-7" sends it to review.
- Due dates & stalenessA red chip the day an open task slips; untouched cards grow a quiet "10d" pill that reddens as weeks pass.
- Wiki back linksA task shows the notes it was created from or linked into.
Planning
Who works on what, at a glance.
A Float-style schedule: a swimlane per person, a bar per allocation, bar height is the share of a day. Everything is drag — create, move, resize dates, resize hours.
- Drag to allocate
- Bar height = FTE
- Overallocation glows
- hours/month
- hours/day
- FTE
- man-days
- Adjustable row height
Allocations are entered in the unit the engagement was agreed in and the bars are labelled the same way — everything downstream computes from the derived hours per day. Flexible contractors get monthly contract caps instead of forced per-project splits: utilization reads tracked-of-cap, and the overallocation zone follows each person's cap.
Time
Track the week, close the month.
A calendar for the week's work and a list for the numbers. At month end, a contractor sends their hours on a project for review — approval locks the month, so the hours you invoice are the hours that were signed off.
- Drag-to-create, 15-minute snapping
- External calendars mirrored via their secret iCal URLs
- When a meeting starts, a gentle card offers its meeting note — prefilled from the invite
- Week/month list with a per-project volume chart
- Planned vs tracked as one stacked occupancy bar, per week and month
- Send for review → approve, or send back with a note → approval locks the month
- Toggl push and monthly XLSX export
- Personal by default — team numbers are an explicit grant
People
The directory that knows the numbers.
Everyone gets a page: their projects, schedule, tasks and tracked time, pulled together from the other modules — the month reads as one stacked bar, each project in its own color.
- Three viewsSortable list, teams grouped by project, and a pure-CSS org chart — all searchable.
- Live load & utilizationFTE today and tracked-of-planned per person, straight from planning and time.
- Skills & locations cloudsThe team's top values as chips, sized by how many people share them.
- Person pagesSchedule, tracked time, owned tasks and meetings attended, composed on one page.
- Self-service profilesEveryone edits their own contacts, name and photo; admins shape the org.
- Contact actionsEmail, call, or plan a meeting — scheduler URL or a prefilled calendar invite.
Customers
A pipeline that remembers.
Deals move Lead → Prospect → Qualified → Proposal → Won on a drag-and-drop board; an account can run several deals at once. Every stage change is recorded per deal — that history is what the reports are computed from.
- Funnel conversion, time-in-stage and win-rate reports
- Accounts with contacts and their buying roles
- Activity timeline: stage moves, edits, logged calls and notes
- Czech companies fill themselves in from the ARES registry
- Won deals link straight to a delivery project
- Monetary figures masked below the highest permission level
Marketing
Campaigns, from the same context.
The people you'd write to are already in the CRM, and the voice you'd write in is already on file. A campaign is markdown on the left, the finished email on the right — restyled live as you switch themes.
- Lists with custom columnsImport contacts from the CRM in two clicks or paste email, name lines; every list carries merge columns you fill per member.
- Merge variables{{first_name}}, {{company}}, the unsubscribe link — preview arrows step through real recipients, body and subject rendered as each person will get them.
- Themes, structuredFive presets and a no-code theme editor — fonts, colors, a three-layer background. React Email renders HTML that holds up in Gmail, Apple Mail and Outlook.
- A send you can walk away fromServer-side batch at a relay-friendly pace; close the tab, deploy mid-campaign — it resumes where it stopped and never mails anyone twice.
- Live delivery reportThe progress bar advances recipient by recipient over a WebSocket, each with their variables just merged; every send lands in a per-campaign log.
- Unsubscribe that sticksOne-click unsubscribe (RFC 8058) and List-Unsubscribe headers; an opt-out applies across every list, permanently.
Access
Share the work without oversharing.
Every feature carries a permission level — none, read, write, delete — per role or per person, and row scope keeps data inside the projects people actually belong to. The server re-checks every request.
- Documented, not impliedEach feature declares what every level allows — expandable in the grid, generated into the repo's permission matrix.
- Google sign-inOAuth with PKCE, ID tokens verified server-side. Only invited emails get in.
- Roles & overridesAdmin, manager, member and guest out of the box; custom roles and per-person overrides in the same grid.
- The external boundaryCustomer-side guests are badged everywhere, see only the wiki pages shared with them, and are hard-blocked from the CRM server-side — no permission grant can open it.
- Locked monthsAn approved time statement freezes its month — no silent edits after sign-off.
- API keysModule-scoped tokens for scripts: shown once, stored hashed, rotatable in one click.
- No secrets in the clientTokens and calendar URLs never come back from the server after saving.
The small things
Fast by default.
Keyboard first
N new, E edit, T today, V switch view, ⌘K search — the same keys in every module, ? shows them.
Works on a phone
Every screen has a dedicated mobile treatment, re-checked at 390 px by the test suite on every change.
Who's online
Live presence avatars in the top bar, filtered by the same visibility rules as the directory. Opting out is one switch.
The Opelli Bot speaks up
A task assigned to you, a month approved, a page shared — key moments arrive as a bot DM in Mattermost, email as the fallback, with per-module mute switches like a phone.
Search everything
One ⌘K field across projects, wiki pages, tasks (keys included), people and customers — permission-filtered.
Hosted or self-hosted
Your company at you.opelli.dev minutes after the invite — or on your own domain, certificate handled. Prefer your own box? docker compose up.
Where this is heading
One context, ready for agents.
Agents are only as useful as the context they stand on — and after a few months of running on Opelli, that context exists in one place: what was decided (the wiki), what's committed (the schedule), what happened (tracked time, task history), who matters (the pipeline) and how the company speaks (the tone guidelines). The next layer is agents that research customers, draft follow-ups and prepare reports through the same permissioned, audited APIs — with people reviewing what ships. The platform works today; the agents arrive on top of it.
Get early access.
Opelli is in private beta with a handful of teams — hosted, your company at its own opelli.dev address minutes after the invite. Leave an email and we'll reach out as seats open up.
You're on the list. We'll be in touch.