Long-time lurker, first-time contributor — open-sourcing three tools I built for Kanboard

Hello Kanboard community,

My name is Brad Campbell, and I’ve been a daily Kanboard user for the past three years — which means I’ve been lurking here for almost exactly as long. It’s past time I introduced myself.


My story with Kanboard

A few years ago I made the decision to home-school my two junior-high-age kids while working full-time. Most parents don’t take that path — and if they did, they’d quickly be scrambling for a way to organize the chaos. What made it workable for us — genuinely, concretely workable — was Kanboard.

I set up a single shared project with a swimlane per child. Due dates, columns tracking assignment → submitted → graded, automatic actions for color-coding — my kids could see exactly what was expected of them and I could see exactly where things stood without being physically present for every moment of the school day. That combination of structure and async visibility is something most tools don’t offer, and Kanboard delivered it without getting in the way.

I’m not exaggerating when I say this setup made our home school work. It was the difference between chaos and something we could all rely on.


Why I’m here today

More recently I’ve started using Kanboard to manage a broader portfolio of personal projects — engineering work, research, long-horizon planning. As my use expanded I kept running into the same gaps: no way to see tasks across multiple projects at once, no cross-project dependency visualization, no milestones, no scriptable CLI for automation. I searched the plugin directory and found partial solutions but nothing that addressed the full picture.

So I built what I needed. Kanboard gave me something real over the past three years, and these tools exist because of that. Open-sourcing them is my way of giving something back.


What I’m releasing

1. AssignColorsByDayOfWeek — automatic action for day-of-week task coloring

This one is the oldest of the three — it’s been running in our home-school project for nearly three years, which is actually where it came from. We used color to encode the day of the week a task was due (Monday yellow, Tuesday green, and so on), which kept due date reasoning simple and made the board instantly scannable by two kids who weren’t yet thinking in calendar dates.

The plugin registers a single automatic action: on task creation, if the task has a due date, it sets the card color based on the day of week of that due date — not the creation date. Color-per-day is configurable per project using the standard automatic action UI, with a “No change” option for any day you want to leave alone. Timezone-aware. Small, stable, and genuinely used in production for years despite the version number.


2. Kanboard Portfolio Plugin — cross-project portfolio management

Kanboard already supports cross-project task links (blocks / is blocked by) — but provides no tooling to see or manage them. This plugin fills that gap.

Named portfolio groups with dashboards and health indicators; cross-project milestones with automatic progress tracking and at-risk detection; interactive D3.js dependency graph, blocked task lists, and critical path views; an aggregate board and task list across all portfolio projects with board-level blocking indicators (:red_circle: on cards blocked by work in other projects); Gantt timeline and roadmap views; and a full JSON-RPC API including a structured status report endpoint designed for scripting and automation. Hook-only integration — no template overrides, minimal conflict surface.

This is a recent build. Testing, bug reports, and feedback are very much welcome.


3. kanboard-cli — standalone Python SDK and CLI

Kanboard ships a CLI of its own, but using it requires the full Kanboard project installed locally — or constantly logging into a server or execing into a container every time you want to run a command. I wanted something I could just run from my own machine against any Kanboard instance.

kanboard-cli is a standalone Python package: full coverage of the Kanboard JSON-RPC API across all 158 methods, installable with pip install kanboard-cli, no Kanboard installation required. It works as both an importable SDK (import kanboard, typed models, structured exceptions) and a kanboard command-line tool with subcommand groups for every resource, four output formats (table, json, csv, quiet), named profiles for multiple instances, shell completions, and a workflow plugin system for drop-in automation scripts. Both include a cross-project orchestration layer — portfolio management, milestones, dependency graph traversal, and critical-path computation — with a dual-backend design: local JSON file (no plugin required, offline-capable) or server-side via the Portfolio plugin.

Also recent. Feedback and testing very welcome.


What’s coming

I’m also actively working on a few more plugins. The one furthest along is an Epics plugin — a Jira-style epic layer that sits between projects and tasks. First-class Epic entities with a four-state lifecycle, hierarchical nesting, score-weighted progress rollup, dedicated board and tree views, and board card badges. When the Portfolio plugin is installed it gains cross-project scope, Gantt integration, and dependency graph coloring. I’ll post a proper introduction when it’s ready to share.


A note on maturity

The colors plugin has been quietly running in production for nearly three years — battle-tested even if the version number doesn’t suggest it. The Portfolio plugin and the CLI are recent; they’re functional and reasonably well-tested, but I’d genuinely appreciate community eyes on them. Issues and PRs are open on all three repos.

All three are MIT-licensed. If any of this is useful to you, or if you’ve been building in a similar direction, I’d love to hear from you.

Thank you for building and sustaining a tool that made a real difference for my family.

All three repositories are on my GitHub profile: github.com/geekmuse
MIT-licensed. Issues and PRs welcome on all repos.

— Brad

2 Likes

I wanted to drop a quick note here that it looks like (some of?) these plugins were authored with AI. I see AGENTS.md and CLAUDE.md in at least one of the repositories (didn’t check them all).

To be clear about where I stand personally: I will not touch AI with a ten-foot pole and I will not let it, or anything written with it, near anything that matters to me. I think it’s worth flagging AI-authored projects accordingly, not to continuously re-litigate the use of AI, but so folks who feel similarly, and folks who are skeptical, can make informed choices.

I do not see that as a problem as long as you test and verify the code as much as possible.

1 Like

Like I said, the point isn’t to re-litigate the use of AI, it’s to inform people who, like me, wish to avoid it.

Obviously there are a lot of people who are fine with it—browse LinkedIn if you’re not convinced—and having them all pipe in with affirmations doesn’t offer anything unless one is inclined to follow the herd.

Noted. Use them or don’t, but I would encourage you to try them out on a test instance rather than automatically dismissing them “because AI” – your choice, though. The AssignColorsByDay plugin was hand-written, but I absolutely had an AI audit it before I released it (which led to the fixing of a few bugs).

1 Like

Thanks for the extra information about how you used the AI. That’s legitimately useful context for making an informed choice.

Like I said, I’m not here to re-lititgate any of this on this forum. I’m here to draw out information, like the above, that’s useful.

However: None of us needs to hear condescending suggestions like “dismissing…because AI”. There are principled reasons to reject this technology because of how it’s been made, forced out, and marketed as well as because of the productivity and cognitive deficits its use induces, which is now pretty well established. If someone were growing and distributing eggplants in the same way, or if eggplants caused measurable cognitive loss, I’d be taking a principled stance against eggplants. I take an equally principled stance against eating lead. Many of us have put considerable thought and consideration into how to react to this technology, and suggesting we’re “dismissing” “because AI” is trvializing. There is no call for that.

1 Like

I hate that it took a snide remark on my part to have you expound on your position – so, my apologies for the snide remark – you’re right. And also, thanks for clearly articulating your position.