14 months building a self-hosted Slack + Notion + Linear + Zoom replacement. Shipped v2 today with GitHub sync, webhooks, and admin archiving. Here's what I learned.
Been building OneCamp in public for about 14 months now. It's a self-hosted all-in-one workspace. Chat, tasks, docs, video calls, calendar, AI assistant. Your server, one-time payment, no per-seat fees.
Shipped v2 today. Here's what's new and what building it actually taught me.
What's new in v2
GitHub bi-directional sync. Admins connect their GitHub org via OAuth. Repos get linked to projects. Issues and PRs import as tasks. Webhooks flow both ways with per-link HMAC secrets and delivery deduplication via postgres to prevent double-processing. Automation rules let you map GitHub labels to OneCamp task statuses automatically.
Slack-compatible incoming webhooks. I reverse-engineered the Slack webhook spec so any tool that already posts to Slack can post to OneCamp without code changes. URL verification challenge, HMAC v1 timestamped signatures, slash commands, block rendering. Outgoing webhooks fire on events like task status changes, channel creation, user joins.
Admin archiving. Policy-based with configurable retention, per-entity-type jobs, full undo history, and Redis-backed rate limiting to prevent runaway jobs. Admins can restore individual items or roll back an entire archive job.
Full UI redesign. Cut a lot of visual noise from the old design. Much cleaner.
What building this actually taught me
The hardest part was not the code. It was resisting the urge to keep adding features instead of shipping. I probably have 3 months of "almost done" features I still haven't shipped because I kept rebuilding them.
The second hardest part was the real-time layer. Getting MQTT, Yjs CRDTs, and LiveKit to all coexist without stepping on each other took way longer than I expected. Especially collaborative doc editing, where the WebSocket from Hocuspocus and the MQTT pub/sub messages needed very different conflict resolution strategies.
The thing I'm most proud of is the AI layer. It uses RAG with OpenSearch embeddings, SSE streaming, per-user rate limiting, a circuit breaker, and session memory. The "Catch Me Up" feature that summarizes what happened in a channel while you were away is something I use every single day myself now.
Current state
Live demo: https://onecamp.onemana.dev Product: https://onemana.dev/onecamp-product Frontend OSS: https://github.com/OneMana-Soft/OneCamp-fe One-time price: Rs 1499 ($19) lifetime
Stack for anyone curious: Go (Chi) + PostgreSQL + Redis + OpenSearch + Dgraph + LiveKit + EMQX (MQTT) + Hocuspocus + Next.js 16 + React 19 + Redux Toolkit + Tiptap
What I'm building next: proper mobile app (currently PWA with push notifications), better onboarding flow, and a hosted cloud option for teams that don't want to self-host.
If anyone's building something similar or has questions about any of the architecture decisions, happy to get into the weeds.