Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
3c5a3bd
feat: mission control MVP (agents, comments, activities, artifacts)
Feb 5, 2026
c384815
CI: add branding check for user-facing ClawDeck strings
Feb 6, 2026
2930b8c
test: tolerate invalid live_feed before cursor
Feb 7, 2026
c35ec45
feat: live feed v1 (api + ui)
Feb 7, 2026
c4b7236
fix: stabilize live feed cursor parsing + docs
Feb 7, 2026
daac9d2
ui: add kanban card metadata row (id/counts/updated)
Feb 7, 2026
21869c4
Kanban: stable tooltip timestamp for updated_at
Feb 7, 2026
03b1bcc
Test: Kanban task card metadata row
Feb 7, 2026
25758b4
Harden branding guard + macOS test note (#15)
donnydongchen Feb 8, 2026
5b87a22
Add @mention persistence + notifications
Feb 9, 2026
ac45fb4
chore(dev): make bin/setup enforce Ruby/Bundler + add DEV_SETUP
Feb 9, 2026
7c54040
test: add API notifications controller tests
Feb 9, 2026
739dae6
chore(dev): document Homebrew Ruby and fix bundler platforms
Feb 9, 2026
c6f71cf
fix: suppress self mention notifications
Feb 9, 2026
99950c2
feat: include comment body_html + case-insensitive agent actor lookup
Feb 10, 2026
63b756f
feat(api): include comment mentions in task comments responses
Feb 10, 2026
2fd036e
fix: autoload task comment serializer in production
Feb 10, 2026
874b0c5
fix: make notification rename migration idempotent
Feb 10, 2026
02fddae
fix: mention notifier autoload + constant resolution
Feb 10, 2026
e3949ab
fix: include deep-link fields in notifications API
Feb 10, 2026
7e9f2fe
Fix real @mentions using agent handles
Feb 10, 2026
473c5a4
feat: add unauthenticated /health endpoint
Feb 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,16 @@ jobs:
- name: Lint code for consistent style
run: bin/rubocop -f github

branding_check:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v5

- name: Ensure no user-facing ClawDeck branding remains
run: bash script/check_user_facing_branding.sh

test:
runs-on: ubuntu-latest

Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@
# Ignore key files for decrypting credentials and more.
/config/credentials/*.key

# Bundler vendored gems (local dev)
/vendor/bundle/

# Ignore Kamal secrets
/.kamal/secrets

Expand Down
2 changes: 1 addition & 1 deletion .ruby-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
ruby-3.3.1
3.3.1
4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co

## Project Overview

ClawDeck is a Rails 8.1 todo application with passwordless email authentication (6-digit verification codes via Resend). It's deployed to DigitalOcean VPS with automatic CI/CD via GitHub Actions.
PokéDeck is a Rails 8.1 todo application with passwordless email authentication (6-digit verification codes via Resend). It's deployed to DigitalOcean VPS with automatic CI/CD via GitHub Actions.

## Development Commands

Expand Down Expand Up @@ -83,7 +83,7 @@ tail -f /var/log/clawdeck/solid_queue.log # View job logs
### Application Structure
The application follows standard Rails 8 conventions with these key components:

- **Module Name**: `ClawDeck` (config/application.rb:9)
- **Module Name**: `PokéDeck` (config/application.rb:9)
- **Solid Stack**: Uses solid_cache, solid_queue, and solid_cable instead of Redis
- **Hotwire-first**: Built for Turbo Drive navigation with minimal JavaScript
- **Asset Pipeline**: Propshaft for static assets, importmap-rails for JavaScript modules
Expand Down
12 changes: 8 additions & 4 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# Contributing to ClawDeck
# Contributing to PokéDeck

Thank you for your interest in contributing to ClawDeck! 🦞
Thank you for your interest in contributing to PokéDeck! 🦞

## Getting Started

1. Fork the repository
2. Clone your fork: `git clone https://github.com/YOUR_USERNAME/clawdeck.git`
2. Clone your fork: `git clone https://github.com/YOUR_USERNAME/pokedeck.git`
3. Create a branch: `git checkout -b feature/your-feature`
4. Make your changes
5. Run tests: `bin/ci`
Expand All @@ -15,11 +15,15 @@ Thank you for your interest in contributing to ClawDeck! 🦞
## Development Setup

```bash
brew install ruby@3.3
export PATH="/opt/homebrew/opt/ruby@3.3/bin:$PATH"
bundle install
bin/rails db:prepare
bin/dev
```

For the full setup flow (including version-manager options), see `DEV_SETUP.md`.

## Code Style

- Follow existing code patterns
Expand All @@ -46,4 +50,4 @@ Open a Discussion or join our Discord.

---

Thank you for helping make ClawDeck better! 🦞
Thank you for helping make PokéDeck better! 🦞
6 changes: 3 additions & 3 deletions DEPLOYMENT.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# ClawDeck Deployment Guide
# PokéDeck Deployment Guide

Simple, fast deployment to DigitalOcean VPS. No Docker overhead.

Expand Down Expand Up @@ -42,8 +42,8 @@ This installs: Ruby, PostgreSQL, Nginx, and creates databases.

```bash
cd /var/www
git clone https://github.com/yourusername/clawdeck.git
cd clawdeck
git clone https://github.com/yourusername/pokedeck.git
cd pokedeck
```

### 4. Create Production Environment File
Expand Down
58 changes: 58 additions & 0 deletions DEV_SETUP.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# Developer Setup

Use Ruby 3.3.x for this repo. macOS system Ruby 2.6 cannot run Rails 8.1 in this project.

## Requirements

- Ruby `3.3.1` (or newer `3.3.x`)
- Bundler `2.5.9` (pinned in `Gemfile.lock`)
- PostgreSQL

## Preferred: Homebrew Ruby (macOS arm64)

```bash
brew install ruby@3.3
echo 'export PATH="/opt/homebrew/opt/ruby@3.3/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
ruby -v
bundle -v
```

You can also use a version manager if you prefer:

### Option A: rbenv

```bash
brew install rbenv ruby-build
eval "$(rbenv init - zsh)"
rbenv install 3.3.1
```

`rbenv` will use the repo's `.ruby-version` automatically.

### Option B: mise

```bash
brew install mise
mise install ruby@3.3.1
```

## Project bootstrap

```bash
bin/setup --skip-server
```

`bin/setup` will:
- verify Ruby version is new enough,
- install Bundler `2.5.9` if missing,
- run `bundle install`,
- run `bin/rails db:prepare`.

## Daily commands

```bash
bundle install
bin/rails db:migrate
bin/rails test
```
9 changes: 6 additions & 3 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
source "https://rubygems.org"

ruby "~> 3.3.1"

# Bundle edge Rails instead: gem "rails", github: "rails/rails", branch: "main"
gem "rails", "~> 8.1.0"
# The modern asset pipeline for Rails [https://github.com/rails/propshaft]
Expand All @@ -22,8 +24,9 @@ gem "jbuilder"
# Use Active Model has_secure_password [https://guides.rubyonrails.org/active_model_basics.html#securepassword]
gem "bcrypt", "~> 3.1.7"

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem "tzinfo-data", platforms: %i[ windows jruby ]
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem.
# Keep platform symbols compatible with older Bundler parsers (system Ruby 2.6).
gem "tzinfo-data", platforms: %i[ mingw mswin x64_mingw jruby ]

# Use the database-backed adapters for Rails.cache, Active Job, and Action Cable
gem "solid_cache"
Expand All @@ -46,7 +49,7 @@ gem "omniauth-rails_csrf_protection"

group :development, :test do
# See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem
gem "debug", platforms: %i[ mri windows ], require: "debug/prelude"
gem "debug", platforms: %i[ mri mingw mswin x64_mingw ], require: "debug/prelude"

# Audits gems for known security defects (use config/bundler-audit.yml to ignore issues)
gem "bundler-audit", require: false
Expand Down
3 changes: 3 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -468,5 +468,8 @@ DEPENDENCIES
tzinfo-data
web-console

RUBY VERSION
ruby 3.3.10p183

BUNDLED WITH
2.5.9
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2026 ClawDeck Contributors
Copyright (c) 2026 PokéDeck Contributors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
8 changes: 4 additions & 4 deletions QUICKSTART.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Quick Start: Deploy ClawDeck in 10 Minutes
# Quick Start: Deploy PokéDeck in 10 Minutes

## What You'll Get

Expand Down Expand Up @@ -29,12 +29,12 @@ ssh root@YOUR_VPS_IP
export DB_PASSWORD="choose_a_secure_password"

# Run setup script
curl -fsSL https://raw.githubusercontent.com/andresmax/clawdeck/main/script/setup_vps.sh | bash
curl -fsSL https://raw.githubusercontent.com/andresmax/pokedeck/main/script/setup_vps.sh | bash

# Clone repository
cd /var/www
git clone https://github.com/YOUR_GITHUB_USERNAME/clawdeck.git
cd clawdeck
git clone https://github.com/YOUR_GITHUB_USERNAME/pokedeck.git
cd pokedeck

# Create environment file
cp .env.production.example .env.production
Expand Down
110 changes: 97 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# 🦞 ClawDeck
# PokéDeck

**Open source mission control for your AI agents.**

ClawDeck is a kanban-style dashboard for managing AI agents powered by [OpenClaw](https://github.com/openclaw/openclaw). Track tasks, assign work to your agent, and collaborate asynchronously.
PokéDeck is a kanban-style dashboard for managing AI agents powered by [OpenClaw](https://github.com/openclaw/openclaw). Track tasks, assign work to your agent, and collaborate asynchronously.

> 🚧 **Early Development** — ClawDeck is under active development. Expect breaking changes.
> 🚧 **Early Development** — PokéDeck is under active development. Expect breaking changes.

## Get Started

Expand Down Expand Up @@ -47,24 +47,33 @@ PRs welcome! See [CONTRIBUTING.md](CONTRIBUTING.md).
## Self-Hosting

### Prerequisites
- Ruby 3.3.1
- Ruby 3.3.1+
- PostgreSQL
- Bundler
- Bundler 2.5.9 (installed automatically by `bin/setup` if missing)

On macOS arm64, prefer Homebrew Ruby:

```bash
brew install ruby@3.3
echo 'export PATH="/opt/homebrew/opt/ruby@3.3/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
```

See `DEV_SETUP.md` for full local setup (`ruby -v`, `bundle install`, migrations, tests).

### Setup
```bash
git clone https://github.com/clawdeckio/clawdeck.git
cd clawdeck
bundle install
bin/rails db:prepare
git clone https://github.com/clawdeckio/pokedeck.git
cd pokedeck
bin/setup --skip-server
bin/dev
```

Visit `http://localhost:3000`

### Authentication Setup

ClawDeck supports two authentication methods:
PokéDeck supports two authentication methods:

1. **Email/Password** — Works out of the box
2. **GitHub OAuth** — Optional, recommended for production
Expand All @@ -74,7 +83,7 @@ ClawDeck supports two authentication methods:
1. Go to [GitHub Developer Settings](https://github.com/settings/developers)
2. Click **New OAuth App**
3. Fill in:
- **Application name:** ClawDeck
- **Application name:** PokéDeck
- **Homepage URL:** Your domain
- **Authorization callback URL:** `https://yourdomain.com/auth/github/callback`
4. Add credentials to environment:
Expand All @@ -95,7 +104,7 @@ bin/rubocop

## API

ClawDeck exposes a REST API for agent integrations. Get your API token from Settings.
PokéDeck exposes a REST API for agent integrations. Get your API token from Settings.

### Authentication

Expand Down Expand Up @@ -161,6 +170,79 @@ PATCH /api/v1/tasks/:id/assign
PATCH /api/v1/tasks/:id/unassign
```

### Agents

```bash
# List agents
GET /api/v1/agents

# Get agent
GET /api/v1/agents/:id

# Create agent
POST /api/v1/agents
{ "name": "BuildBot", "status": "idle" }

# Update agent
PATCH /api/v1/agents/:id

# Delete agent
DELETE /api/v1/agents/:id
```

### Task Comments

```bash
# List comments
GET /api/v1/tasks/:task_id/comments

# Get comment
GET /api/v1/tasks/:task_id/comments/:id

# Create comment
POST /api/v1/tasks/:task_id/comments
{ "body": "Working on this now." }

# Update comment
PATCH /api/v1/tasks/:task_id/comments/:id

# Delete comment
DELETE /api/v1/tasks/:task_id/comments/:id
```

### Activity Feed

```bash
# List all activities
GET /api/v1/activities

# List activities for a task
GET /api/v1/tasks/:task_id/activities

# Get activity
GET /api/v1/activities/:id
```

### Task Artifacts

```bash
# List artifacts
GET /api/v1/tasks/:task_id/artifacts

# Get artifact
GET /api/v1/tasks/:task_id/artifacts/:id

# Create artifact (file path or blob_id)
POST /api/v1/tasks/:task_id/artifacts
{ "name": "Build Log", "artifact_type": "log", "file_path": "/tmp/build.log" }

# Update artifact
PATCH /api/v1/tasks/:task_id/artifacts/:id

# Delete artifact
DELETE /api/v1/tasks/:task_id/artifacts/:id
```

### Task Statuses
- `inbox` — New, not prioritized
- `up_next` — Ready to be assigned
Expand All @@ -175,6 +257,8 @@ PATCH /api/v1/tasks/:id/unassign

## Contributing

See [`docs/BRANDING_IDENTIFIERS.md`](docs/BRANDING_IDENTIFIERS.md) for the branding-vs-identifiers policy.

We welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.

## License
Expand All @@ -185,7 +269,7 @@ MIT License — see [LICENSE](LICENSE) for details.

- 🌐 **Website & App:** [clawdeck.io](https://clawdeck.io)
- 💬 **Discord:** [Join the community](https://discord.gg/pqffNjdY)
- 🐙 **GitHub:** [clawdeckio/clawdeck](https://github.com/clawdeckio/clawdeck)
- 🐙 **GitHub:** [clawdeckio/pokedeck](https://github.com/clawdeckio/pokedeck)

---

Expand Down
Loading