Coitus.dev · Conduit

Plan it on the board. Ship it from Discord.

Conduit is the Coitus.dev task tracker for teams that run on Discord. Every task in a linked project gets a card and a thread in its channel, with buttons to claim it, block it or close it. Change it on the board and the card in Discord changes with it.

Start your pipeline

You sign in on discord.com. Conduit never sees your password.

What the pipeline does

  • 1 card and 1 thread per task
  • /task create from any project channel
  • Claim, Done and Blocked buttons
  • Live board updates
  • Blockers that release themselves
  • A morning digest at your hour
  • Due-soon and overdue nudges
  • Comments synced both ways
  • HMAC-SHA256 signed webhooks
  • Scoped API keys
  • GitHub and GitLab links
  • 4 roles from Owner to Guest
  • Two-factor codes
  • AES-256-GCM for webhook secrets
  • Session IPs cut to /24 or /48
  • Source on GitHub

Good ideas deserve a brilliant pipeline.

Big idea

The board and the server are one system.

Move a task on the board and its card in the channel changes. Press Done on the card and the board moves it. Nobody copies status updates by hand.

Clear next steps

From sign-in to the first card.

Sign in with Discord, then create a workspace and a project. Add the Conduit bot to your server, run /conduit link, then /conduit setup to give each project its channel. After that, /task create works in any of them.

Make your next move

Your first board is a few minutes away.

Invite the team with a link, assign the first task and watch its card land in your channel.

Start your pipeline

See it move

One board. Every channel in step.

The week's work drops onto the board as you scroll. When WEB-142 lands in Done, the project channel hears about it.

About

We build for teams that run on Discord.

Game studios, server networks, modding crews and open-source projects plan in channels and decide in threads. Their tracker usually sits in a tab nobody has open.

Coitus.dev makes Conduit for those teams, so the people in a thread can see what changed without opening another tab.

Source
Public on GitHub
Every line of Conduit is public in Penawar/CoitusConDuit.
Hosting
One server we run
The web app, the bot and a queue worker share one machine and one Postgres database. No Redis.
Independent
Not part of Discord
Conduit uses Discord's public API and Discord's own sign-in screen. It never sees your Discord password.

Work

Everything a task needs, in both places.

A live board

Drag a card and everyone watching sees it move. Board and list views, task keys like WEB-142, priorities, labels, due dates and assignees.

Cards and threads in Discord

One card per task and a thread for the talk. Claim, Done and Blocked work from the message itself, and comments sync both ways.

Blockers that clear themselves

Mark a task as blocked by another. When the blocker is done, the waiting task is released and its people are told.

A morning digest

One post a day at the hour you choose: what was created, finished and blocked. Due-soon and overdue nudges come on their own.

Commands where you type

/task create, /block and /conduit setup, plus Create task from message on any message.

Locked down

Discord sign-in, two-factor codes a workspace can require, webhook secrets encrypted at rest, and session lists that never show a full IP address.

Signed webhooks and an API

Every outgoing delivery is signed with HMAC-SHA256 over a timestamp and the raw body, and retried if your endpoint fails. Read-only or read-write API keys let your own scripts create and move tasks.

Everything above works in the pipeline today.

Start your pipeline

Method

How a task travels.

Every change takes the same path, whether it starts on the board, in a slash command or in a webhook, so the board and Discord work from the same record.

  1. Something changes

    A task is created on the board, someone runs /task create, a card's Done button is pressed, or a pull request that mentions WEB-142 is opened or merged on GitHub or GitLab.

    web · bot · incoming hooks
  2. It is saved once, with its event

    The change and an event describing it are written to Postgres in a single transaction. If the write fails, nothing is announced.

    transactional outbox
  3. A worker hands out the jobs

    A queue worker picks up the event and fans it out: update the Discord card and thread, deliver signed webhooks, run automations.

    pg-boss queues
  4. Everyone sees the same thing

    Open boards refresh live, the card in Discord shows the new state, and webhook receivers get a signed copy.

    server-sent events
  5. The day gets a summary

    At the hour you pick, the digest posts what was created, finished and blocked to your digest channel.

    daily digest