Archive
All posts
Engineering notes from building OneCamp: what I shipped, what broke, and what I learned fixing it.
October 2026
-
Projects with roles, tables with undo, events that repeat
Everyone in a project now has a role, and its members add and change its tasks without waiting for an admin. Tables keep every change, so you can undo it, read a row's history and bring back what was deleted, and a ro...
-
Docs for the whole team, and a security update to install today
Since the chat post, OneCamp has had four releases, with AI and without. The biggest gives docs room for a whole team: pages in a tree, comments on the exact words, sharing by person or team until a date you choose, v...
-
A close look at OneCamp's chat found more than fifty things wrong
I set out to compare OneCamp's chat with Slack, one part at a time. Before I got to anything Slack has, the review found more than fifty things our chat got wrong by its own rules: thread replies that told the wrong p...
-
Docs on the demo now: toggles, tables, equations, find and replace
OneCamp's docs have the blocks people who write in Notion reach for without thinking: toggles that each reader opens for themselves, simple tables, equations, callouts, a table of contents, code blocks that draw Merma...
-
A workspace with nothing in the way
OneCamp's third look: no top bar, one sidebar that holds the workspace, search and you, a single command palette that can also answer, and every screen rebuilt to one standard. Typing in a message box does a third of ...
-
OneCamp has colour now, and it's faster where you feel it
A colour for every person, project and channel. Themes that recolour the whole frame. Illustrations where a screen is empty. Then the speed work: a sent message shows in 16 ms instead of 489, and typing in a long doc ...
-
Three bugs the redesign turned up
Going through every OneCamp screen for the redesign meant opening a lot of tasks and running a lot of imports. Three things happened that shouldn't have: opening a task could record an edit nobody made, an import coul...
-
Everyone has a handle now
OneCamp people have three names: a display name, a full name and an @handle. Until this release the app picked between them differently on every screen, and anyone who joined before handles existed had none. Now there...
-
Your team arrives ready to write
A new teammate in OneCamp now lands in #general with the message box ready, however they get in: an invitation, Google, GitHub, single sign-on or the directory. Invitations say where they stand, a whole company can jo...
-
An agent can only reach what the person asking can
An AI agent in OneCamp used to run every tool with its owner's access, for anyone who could message it. Now each run knows who asked, and reaches only what both that person and the owner can. Text from outside your wo...
-
Move your team over, and bring everyone with it
OneCamp's imports from Slack, Jira, Asana, Trello, monday.com, Notion, Linear, ClickUp and Todoist now finish with the people who came across, ready to invite in one step. A Slack import keeps your channels as they we...
-
The demo worked. Every install didn't.
Messages never arrived live on a single self-hosted install, calls never started on a fresh one, and make install could stop before printing the one password it never shows again. The demo showed none of it, because t...
-
I went through OneCamp's permission checks. Over thirty were wrong.
A member could join any private channel by its id, edit anyone's message, or follow every conversation live through the message broker. GitHub sign-in took addresses GitHub hadn't verified. Here is what going through ...
-
Link your tables, and add up what's linked
OneCamp's tables now link to each other: each deal to its company, each budget line to its vendor, seen from both sides. Rollups add up what's linked. Free, self-hosted, on every plan.
-
Formulas, sorting and filters for your tables
OneCamp's tables now have formula fields, worked out from each row's other fields with Airtable's functions, and they sort and filter. Free, self-hosted, on every plan.
-
Say it in a clip
Record a voice note, a video of yourself or your screen with your voice over it, right from OneCamp's message box, and send it like any file. Up to five minutes, on your own server, free.
-
See where work piles up
OneCamp's Reports now draw the flow of work: where the tasks stood at the end of each week, as stacked bands, rebuilt from every task's history. Free, self-hosted, on every plan.
-
Seen: read receipts in DMs and group chats
OneCamp now shows Seen under your latest message in a DM, and who has read it in a group chat, live. Each person can turn theirs off, and admins can turn them off for everyone.
-
Dependencies for plans that overlap
OneCamp dependencies can now be start to start, finish to finish or start to finish, with a lag in days, and the timeline and the date shifting keep to each one.
-
Invoices you can follow to paid
OneCamp invoices are now saved: numbered in sequence, kept as billed, and marked sent, paid or void, with what's owed and what's overdue in each project's time report.
-
Move to OneCamp with your fields intact
Imports from monday.com, Asana, ClickUp, Notion, Trello and Jira now bring custom fields across with every task's values. Jira and Todoist imports work again, and the app's first screen loads about 40% less code.
-
Fields of your own, and a burndown for every cycle
OneCamp tasks now take fields of your own (a budget, a channel, a reviewer, a sign-off), shown as list columns, filters and card details. And every cycle has a burndown and the project's velocity.
-
How did the week go?
OneCamp now has reports across every project you're in: what got done and what came in each week, what's open and overdue and whose it is, how much was done on time, and the hours logged. No dashboard to build first.
-
Standups without the meeting
OneCamp channels can now ask their people a question on a schedule, like "What did you work on today?" every weekday at 17:00. Everyone answers in the thread, with no extra bot to install or pay for.
-
Bill your time at the right rate
OneCamp projects can now have rates: one for everyone and one for anyone who bills differently. The time report says what the billable time comes to, and invoices start from it.
-
Goals that fill in by themselves
OneCamp now has goals: an outcome with one owner and a due date, whose progress comes from the projects serving it, from its sub-goals or from a number. Check-ins are drafted for the owner, and a tick on the progress ...
-
Plan in hours, count time off, and bring your monday.com boards
OneCamp tasks can now carry an estimate, the workload can count hours instead of tasks, and time off on the calendar comes out of each person's week. And you can bring your boards from monday.com, with ClickUp and Lin...
-
Tasks that wait on each other, and who has too much this week
OneCamp tasks can now wait on each other: draw an arrow on the timeline, and when a task slips, the tasks waiting on it move along. The Projects page shows every project on one timeline, and a workload view shows who ...
-
See every project on one page, and every plan on a timeline
OneCamp projects now have a timeline: tasks as bars across the weeks, dragged to a new date, stretched at either end, or dropped in from a list of tasks with no dates. Clients see it on their link too. And the Project...
-
Describe a project in a sentence, start with its plan
In OneCamp with AI, New project can now draft a plan from one sentence: tasks in order, what done looks like, and dates that fit the timeframe you wrote. Every built-in template also has its own page on onemana.dev th...
-
Start a project with its plan already in it
OneCamp projects can now start from a template: seven built in (client project, product launch, website redesign, feature build, event, new hire onboarding, security audit prep), or any project you've run before. Date...
-
Work through your tasks from the keyboard
OneCamp's task lists and boards now work from the keyboard: J and K to move, Enter to open, X to select, and one key to change the status, assignee, tags or priority of many tasks at once. Calls now open beside the co...
-
Tell your client where the project stands, in a minute
OneCamp projects now have updates: where the project stands and what changed, drafted from its tasks so writing one takes a minute. The team is told, a channel can get it, and your client can read it on their link wit...
-
Your chat, your doc and your board, side by side
OneCamp now opens a channel, a doc, a project board, a chat or a task next to whatever you're looking at, up to three at once, and you move between them from the keyboard. Also new: tags you can pick and filter by, sw...
-
See who has what, and hand it over with a drag
A OneCamp board can now show a column per person instead of per status, so you can see who is overloaded and move work by dragging a card to someone else. Boards also stay fast with hundreds of tasks, work on a phone,...
-
Deleting a doc said done and kept the doc
Every test was green, and deleting a doc in OneCamp did nothing. So now a browser walks through the product every morning the way a buyer would, and tells me when something breaks. Plus two new things: focus time that...
-
Your client approves the work, then you send the invoice
Two steps at the end of every piece of client work now happen in OneCamp: the client approves it (or says what to change) from the project link you already sent them, and you turn the hours into an invoice you can pri...
-
Sign in with your fingerprint, and other things that stopped getting in the way
OneCamp now signs you in with a passkey: your fingerprint, face or device PIN instead of a password. Activity can be filtered to people, agents or apps. And a handful of small things that stopped new teams in their fi...
-
Stop writing status emails. Send your client the project
Clients ask 'where are we?' because they can't see. OneCamp now gives a client a link to their project: what's in progress, what's done, what's due, and the task comments if you allow it. Time on those tasks goes into...
-
Our clients lived in four other tools. Now they get a link
An agency runs on its clients: their messages, their requests, their calls. In most workspaces every one of those happens somewhere else. OneCamp now gives clients a channel they open from a link with no account, a fo...
-
My agents kept saying done when they had only started
I assigned real work to OneCamp's AI teammates for a week and kept a list of every time one said it had finished when it had not: it had started a coding job, or offered me three options, or written 'ready for the nex...
-
Half the team was still in Slack, and everyone's email was in another tab
Nobody moves a whole team off Slack in a day, and a move that strands half the team in the old tool usually does not happen at all. OneCamp now has a live Slack bridge, so a Slack channel and a OneCamp channel carry o...
-
I said the server would stay closed. Today all of it is open source
OneCamp's server is now open source under AGPL-3.0, both editions, including the AI one I had said would stay commercial. There is also a free plan for teams of up to 25, an installer that serves the whole workspace f...
September 2026
-
Most people who tried to connect an agent failed at the first step
OneCamp has had an MCP server for months, and connecting Claude or ChatGPT to it meant pasting a token into a header field that most of them do not have. So most people who tried stopped at step one. Agents now connec...
-
Every team had its own steps. My board had six.
A project board in OneCamp had six columns and no way to add a seventh, so every team that has a QA step, a Blocked lane or a Waiting on client pile was bending its work to fit mine. Projects can now have their own st...
-
Every agent row said who it acted for. None said whether anyone was watching.
My audit log could always tell you whose authority an agent acted on. It could not tell you whether that person was in the room. That is the question an auditor actually asks, and it had no field, so I added one and i...
-
I spent a week comparing my agents to everyone else's. Then I let theirs in.
The new crop of AI coworkers can do things mine cannot, and I went looking for what. The answer was not a feature. It was that they accept an agent built anywhere, and I only accepted my own. So a OneCamp agent can no...
-
My agents could already ask a question. They just couldn't offer the answers.
An AI teammate that guesses when it should ask is the failure everyone has met. Mine could already stop and ask, and had been able to for months. What it could not do was offer you the answers, so it wrote the choices...
-
Six things were quietly off and none of them threw an error
Push notifications were off on every install that followed my own guide. Video calls had no certificate because the documentation told you not to create the record. Telemetry was going nowhere because I read a URL as ...
-
A changelog is useless without directions
124 commits in two weeks across the backend and the frontend. A changelog tells you what changed and almost never tells you where the change lives, which is how software ends up full of features nobody can find. So th...
-
AI governance is mostly boring plumbing
The AI Act's transparency rules took effect on 2 August 2026. ServiceNow bought a company to watch what agents do at runtime. Only 23% of organisations report significant ROI from agents. All three are the same story:...
-
Every feature worked and nobody could reach it
Last week I wrote about features that were lying. This week is the sequel with a different shape: features that were telling the truth and were unreachable. The meeting recap needed a recording nobody made. Browser tr...
August 2026
-
Every test passed and the feature was lying
Last week I wrote about things that broke silently. This week nothing broke. The build was green, the frontend's 618 tests passed, and three features were telling customers things that were not true: a meeting recap t...
-
One dead hostname took video calls down for 26 days
A customer churned in July. Their DNS record was deleted and their hostname stayed in a Traefik rule, which meant the certificate covering every customer's video service could no longer renew. It expired on 29 July an...
-
Every health check was green and nobody could download my product
I made the build server's Docker image smaller, which is a good idea, and it removed two binaries that appear in no import statement. The service compiled, started, stayed healthy, answered its install script from mem...
-
The update downloaded fine, and never ran
Shipping self-hosted software means the update runs on a machine you cannot see, at a moment you do not choose, on a database you must not break. OneCamp's updater downloaded the new version and stopped there, leaving...
-
One server per customer, and the four times the obvious design was wrong
OneCamp has always been self-hosted: you buy a licence, you run it. Managed hosting adds the other option — you pay monthly and a whole server gets provisioned for you, one machine per customer, no shared database any...
-
Shipping two editions, and the customer install that actually works
OneCamp now ships as two tracked editions: one without AI, and one with AI. That sounds like a packaging change until you try to install it. The published guide told customers to run make targets that did not exist, t...
-
Two-factor, SCIM, and the config file nothing was checking
OneCamp now has TOTP two-factor sign-in and SCIM 2.0 provisioning, so Okta or Entra can create and deactivate members and a stolen password is no longer enough. Writing them turned up four decisions where the obvious ...
-
The same one-line fault, five times, and the test that missed it too
Every document and board in the workspace showed 'Reconnecting to collaboration server...' for two weeks, because one unhandled rejection killed a container that had no restart policy. Fixing that one service was the ...
-
A failed signup burned the email address forever
Creating a user wrote to Postgres, then to Dgraph, and on a Dgraph failure it logged and returned — leaving a row that owns the email address and an account nobody can see. Every retry then failed on the unique constr...
-
We opened OneCamp to outside AI agents, and every gate we added found a bug
Claude Desktop, Cursor and anything else speaking MCP can now reach a OneCamp workspace — through an authority rule that is an intersection with a real person's live permissions, never a union, re-evaluated per call. ...
-
One context window for every model was quietly wrong
OneCamp lets an admin allow several models, and a member, a channel or an agent can each pick a different one. But there was exactly one context window setting, and every budget read it no matter which model actually ...
-
The code was written. Nothing called it.
Four times in one week I found the same thing: a mechanism that was finished, correct, documented, unit-tested — and unreachable. Two of them were hiding real bugs, including one where forwarding a message to a group ...
-
Regex is not a sanitiser, and other things I got wrong about text
Four fixes about handling text and media, none of which involve AI. Truncating a string by bytes was splitting characters and producing invalid UTF-8, and the guard around it was appending an ellipsis to text it had n...
-
What we fixed so you never notice: a search outage, a coding agent that couldn't run, and 31 screens that lied to you
No new features in this one. A search node was killed by someone pasting a screenshot into a document. The coding agent turned out to be unable to work in the exact configuration it shipped with. And 31 screens told p...
July 2026
-
Agents that can ask each other for help — without laundering permissions
Your specialist agents couldn't talk to each other. Not by oversight — by a deliberate mute that stopped one agent replying to itself forever. This release replaces that blanket mute with a budget, so an agent can pul...
-
AI teammates you can interrupt: stop it, steer it, and actually watch it work
Handing work to an AI agent has had one uncomfortable property from the start: once it goes, it's gone. You watch a spinner, you can't change your mind, and if it's heading the wrong way you wait for it to finish bein...
-
OneCamp AI teammates reach your whole workspace: external databases, documents, voice, and governed code
Last week OneCamp's agents learned to open pull requests. This stretch was about reach: an agent can now query your real production databases (Postgres, MySQL) read-only through a plan you can inspect and re-run, read...
-
OneCamp AI teammates open pull requests: a coding agent that ships on your own infra, not someone else's cloud
This week OneCamp's agents learned to write code and open a pull request, the same way you'd hand the job to a teammate: @mention one, describe the change, and it clones the repo, edits, builds, tests, and opens a PR ...
-
OneCamp AI teammates get senses and skills: vision, data analysis, sandboxed code, and agents that watch your work
Last week I gave OneCamp's agents a place in the room and the governance to make handing one to a team responsible. This week was about senses and skills: native tool-calling that works on modest local models, an agen...
June 2026
-
OneCamp AI teammates: agents that live in your channels, with governance you can audit
The next chapter for OneCamp's agents: instead of a separate chatbot, an agent becomes a real, named member of a channel or a DM you can @mention, with its own model and permissions. You can now assign it a task and t...
-
Putting a budget on AI: workspace and per-user token caps for a self-hosted workspace
How I added enterprise-grade cost control to OneCamp's AI: metering and gating every model call at one provider chokepoint, daily token budgets for the whole workspace and per individual user, a per-run token cap and ...
-
Making OneCamp programmable: a public API, scoped tokens, an MCP server, and a TypeScript SDK
Turning a self-hosted workspace into a platform: scoped, hashed personal access tokens with per-token rate limiting and audit, a /v1 API that reuses the app's own permission-checked business layer, OneCamp as an MCP s...
-
OneCamp tables: Notion-style databases your AI and API can actually use
Why a table in OneCamp is its own first-class entity rather than a blob inside a doc: a jsonb row model that survives schema changes, fractional ordering, grid/board/calendar views, a relation field that links rows to...
-
OneCamp collaborative boards: a Miro-class whiteboard on your own infrastructure
How I built a real-time, multiplayer whiteboard into OneCamp: Excalidraw bound to Yjs over the same collaboration server the docs use, live cursors, an AI that draws diagrams and UI mockups, pinned comments with menti...
-
OneCamp AI agents: from a chatbot that answers to a coworker that does the work
How I turned OneCamp's workspace AI from a question-answering assistant into an agent that creates and updates tasks, drafts docs, manages projects, and chains reads into actions, all while respecting the exact permis...
-
Workflows in OneCamp: Slack-class automation without the sprawl
Welcome messages, keyword auto-replies, turning a message into a task, lightweight moderation — the automation every team eventually wants. I built a Workflow Builder for OneCamp that does it without a single extra ru...
-
The AI that sits in your calls: how OneCamp turns meetings into notes, decisions, and memory
Every call you have is full of decisions and action items that evaporate the second it ends. OneCamp puts an ambient AI assistant in the room — it transcribes live, then writes the recap, posts it where the call happe...
-
AI nudges in OneCamp: a workspace that remembers what you promised
Most software waits for you to remember. OneCamp's AI Nudges flip that — a quiet engine that notices the commitment you made in a Tuesday call, sees it's overdue, and taps you on the shoulder. Here's how I built it, w...
-
OneCamp connectors: I gave the workspace AI access to Gmail, Google Calendar, and GitHub
How I built per-user OAuth connectors for Gmail, Google Calendar, and GitHub so OneCamp's AI can read emails, check your calendar, and surface pull requests — all on your own infrastructure, without a single byte of y...
-
I built a full Slack-style app platform for OneCamp. Here's every decision I made.
How I designed and built a slash-command and app platform for OneCamp — a data-driven external-app webhook system, built-in first-party apps, a curated marketplace, and a per-app encrypted secret store — without requi...
-
Hardening a self-hosted workspace: zero-trust ingestion and client resilience
How I built a zero-trust ingestion layer for OneCamp—implementing magic-byte file signatures, zip-slip and zip-bomb decompression protection, ClamAV socket scanning, and designed a visibility-aware exponential backoff...
-
How I built a self-hosted, AI-agnostic workspace with active memory layering
How I re-engineered OneCamp to support hot-swappable local and cloud LLMs, implemented a self-calibrating EWMA token budget to prevent context truncation, and designed a structured workspace memory layer spanning Post...
May 2026
-
How I built a universal import engine supporting 8 different productivity platforms
How I engineered a high-throughput, chunk-based, multi-database migration engine for OneCamp that seamlessly unifies, de-duplicates, and ingests workspace data from Slack, Notion, Asana, Jira, Linear, Trello, ClickUp,...
-
OneCamp: GitHub sync, custom webhooks, data archiving, and a complete frontend redesign
The biggest OneCamp update since launch. Bidirectional GitHub integration, production-grade webhook infrastructure, admin data archiving with undo, and a ground-up frontend redesign — 38,000+ lines of new code across ...
April 2026
-
OneCamp vs. the world: a deep technical comparison of self-hosted workspace tools
A brutally honest, technically deep comparison of OneCamp against Slack, Mattermost, Rocket.Chat, Zulip, Notion, and Huly. Architecture, pricing models, AI capabilities, data ownership, and what none of the marketing ...
March 2026
-
I spent a year building OneCamp. Here's the complete architecture.
The honest, technical story of building OneCamp - a self-hosted all-in-one workspace. Full system architecture, real tech choices, and the reality of launch day.
February 2026
-
Why I used MQTT for team chat (not WebSockets) - and what that taught me about broker-based architectures
Deep dive into OneCamp's real-time messaging layer - why MQTT beat raw WebSockets, how topics map to workspace entities, the Redux pattern that keeps UI and transport completely decoupled, and the scroll position pr...
January 2026
-
Streaming AI in Go: SSE, circuit breakers, and the nginx buffering bug that aged me
The real technical details behind OneCamp's streaming AI feature - Server-Sent Events in Go's net/http, a fast-path optimization for conversational inputs, post-stream tool call parsing, circuit breakers, and the Re...
December 2025
-
Why OneCamp uses both Postgres AND Dgraph (and whether that was a mistake)
Most apps get away with one database. OneCamp uses two - Postgres for users and config, Dgraph for the social graph. Here's the reasoning, the tradeoffs, the distributed write problem, and whether I'd do it again.
October 2021
-
Multiuser whiteboard
Multiuser whiteboard drawing app was trying to mock Miro
June 2020
-
Blockchain Use Case: Coffee Supply Chain
Used by Customer/Buyer to verify the Authenticity of the Coffee Beans by knowing Location of Growth using Blockchain.
May 2020
-
Simplifying Real Estate Title Registration Using Ethereum Blockchain
server health monitoring using raft algorithm also submitted as mini project in my college assignment. Raft algorithm for distributed systems.
February 2020
-
Server Health Monitoring Using Raft Algorithm
server health monitoring using raft algorithm also submitted as mini project in my college assignment. Raft algorithm for distributed systems.
September 2019
-
Server Health Check Using Pure NodeJS
The app is a REST API for Making Health Checks and Notifies the User if there is Any Change in the Status of the response code.It is made using pure NodeJS ( No third-party packages).