An open API service indexing awesome lists of open source software.

https://github.com/sheshiyer/team-forge-ts

LCARS mission-control desktop app with a Cloudflare-backed TeamForge project control plane for GitHub, Huly, and Clockify operations.
https://github.com/sheshiyer/team-forge-ts

clockify dashboard desktop-app employee-tracking huly lcars macos react rust star-trek tauri time-tracking

Last synced: about 1 month ago
JSON representation

LCARS mission-control desktop app with a Cloudflare-backed TeamForge project control plane for GitHub, Huly, and Clockify operations.

Awesome Lists containing this project

README

          

```
____________ ___ __ ________ ____ ___ _____________
/_ __/ __/ |/ / / / / / __/ / / / / / _ \/ ___/ __/
/ / / _// /|_/ / / /_/ /\ \/ /_/ / / / , _/ (_ / _/
/_/ /___/_/ /_/ \____/___/\____/_/_/_/|_|\___/___/
STARDATE 2026.098 — SYSTEMS NOMINAL
```

![Build](https://img.shields.io/badge/build-passing-33cc66?style=flat-square&logo=rust&logoColor=white)
![Release](https://img.shields.io/github/v/tag/Sheshiyer/team-forge-ts?style=flat-square&color=ff9900)
![Platform](https://img.shields.io/badge/platform-macOS-ff9900?style=flat-square&logo=apple&logoColor=white)
![License](https://img.shields.io/github/license/Sheshiyer/team-forge-ts?style=flat-square&color=9999cc)
![Tauri](https://img.shields.io/badge/tauri-v2-cc6699?style=flat-square&logo=tauri&logoColor=white)
![React](https://img.shields.io/badge/react-19-6688cc?style=flat-square&logo=react&logoColor=white)
![Rust](https://img.shields.io/badge/rust-2021-cc9966?style=flat-square&logo=rust&logoColor=white)


Tech Stack

---

> **Tracking your team shouldn't require switching between 6 browser tabs.** TeamForge unifies Clockify time tracking, Huly execution workflows, Paperclip runtime visibility, and a Cloudflare-backed TeamForge project registry into a single native Mac app — with a Star Trek LCARS interface that makes mission control feel like the bridge of the Enterprise.

## Highlights

### Unified Time Intelligence
Cross-reference Clockify hours with Huly time reports. Spot discrepancies. Track quota compliance with business-day-aware calculations.

### Live Presence Monitoring
30-second polling shows who has active Clockify timers and recent Huly activity. Combined status: Active, Idle, Offline.

### Shared Project Registry
Cloudflare Worker + D1 now own TeamForge project identity, GitHub repo links, Huly project links, artifacts, and sync policy metadata.

### Hybrid GitHub + Huly Orchestration
Engineering issues stay GitHub-owned, execution/admin issues stay Huly-owned, and milestones remain GitHub-authoritative by default.

### Weekly Timeline
Activity now rolls up into a compact 7-day timeline so you can read motion at the team level before diving into the raw feed.

### Calendar Ops Route
Leave tracking and yearly holidays now live on a dedicated Calendar route, keeping schedule operations separate from org editing while still using the same cache-first Huly snapshot.

## Architecture Updates — 2026-06-09 (Four Planes + CF Access + MultiCA + Handoffs)

The operating model is now explicitly four planes:

- **Obsidian Vault** (`thoughtseed-labs/`) — durable human-readable documents, handoffs/, standups/.
- **Paperclip** — 6-agent orchestration plane (CEO, Scientist, Engineer, Designer, Synthesist, Hermes).
- **TeamForge** (this repo + Cloudflare Worker at `forge.thoughtseed.space`) — canonical project/client slug registry and control plane.
- **Co-founders via Hermes** — Telegram-first command surface (`/ts-*` commands) and external delivery.

**Security note (CF Access):** The TeamForge Worker is protected by Cloudflare Zero Trust Access. Service token `teamforge-multica-bridge-v2` is the authenticated bridge for MultiCA and automated callers.

Example authenticated call (both CF Access headers + app Bearer are required):

```bash
CF_ACCESS_CLIENT_ID="21ad48de5aefe985ef5bddbe42a07b8e.access"
CF_ACCESS_CLIENT_SECRET="e90d3c459f1e8565a44e5ac42ec03704500ae0faf842b3765e31c3e8759095ed"

curl -H "CF-Access-Client-Id: $CF_ACCESS_CLIENT_ID" \
-H "CF-Access-Client-Secret: $CF_ACCESS_CLIENT_SECRET" \
-H "Authorization: Bearer $TF_CREDENTIAL_ENVELOPE_KEY" \
https://forge.thoughtseed.space/v1/projects
```

**Temporary internal shared-secret bridge (for m2m when service tokens have Worker compatibility issues):**

For local parity runs or Hermes on IP-bypass allowed machines, set `TF_INTERNAL_SHARED_SECRET` (long random value, also configurable in Worker vars) and use `--internal-secret` (or the env). The script will send `X-TeamForge-Internal-Secret` header.

The Worker accepts it as alternative to the regular Bearer for app routes (after the request passes Access policy, e.g. via IP allowlist).

Example (from machine with IP bypass):

```bash
TF_INTERNAL_SHARED_SECRET="your-long-random-secret-here" \
node scripts/teamforge-vault-parity.mjs --apply ...
```

This is a temporary workaround (see debugging notes for service token 302 issues on Worker routes). Prefer service tokens or IP when possible. For MultiCA/AWS callers, service token or future non-Access path recommended.

**MultiCA (AI gateway + agent backend):** Runs on AWS ECS Fargate behind Global Accelerator.

- Static IPs: `166.117.29.182`, `76.223.32.238`
- GA endpoint (HTTP for agents): `http://a2d8a7ed58f172583.awsglobalaccelerator.com`
- App: `https://multica.thoughtseed.space`
- Workspace: `Thoughtseedlabs` (`e0ffc9e2-7848-447f-933f-cc743deedfd0`)

See `cloudflare/worker/src/lib/env.ts` for `MULTICA_*` settings.

**Handoff Protocol:** Agent stage-to-stage transitions live in `thoughtseed-labs/handoffs/` (HO-NNN.md). TeamForge now owns the status machine and registry surface so Hermes `/ts-handoffs`, `/ts-approve`, `/ts-reject` can act on them.

**Hermes Telegram commands (13):** `ts-status`, `ts-agents`, `ts-agent`, `ts-projects`, `ts-project`, `ts-run`, `ts-handoffs`, `ts-approve`, `ts-reject`, `ts-vault`, `ts-standup`, `ts-digest`, `ts-help`.

Group: `-1003698657291`. Co-founders (equal authority): `1371522080`, `926168615`.

See the full backfill checklist in `ARCHITECTURE_CHANGES_2026-06-09.md`.

## New In v0.2.6

- **Paperclip daily operations now live much more fully inside TeamForge.**
`Inbox`, `Goals`, `Routines`, richer `Agents/Hermes`, and upgraded `Issues`
absorb the main founder control flows that previously required a separate
Paperclip dashboard.
- **Issues are now actionable, not just visible.** TeamForge can load live
GitHub comments, show attachment links, maintain sub-issue relationships, and
edit issue title/body/state/labels/assignees directly from the native app.
- **Canonical intake is now available from multiple founder surfaces.**
Overview, Inbox, Hermes ingest, and the `Issues` route all feed the shared
TeamForge intake/percolation model instead of creating scattered local-only
workflows.
- **Paperclip source-of-truth edits can happen in TeamForge.** Agent
`TASKS.md` and `MANIFEST.yaml` files are now directly editable from the
dedicated `Goals` and `Routines` routes.
- **Release metadata is now at `0.2.6`** across the frontend package, Tauri
config, Rust crate, and local lockfile.

## Preview

### Overview

![TeamForge Overview](docs/images/preview-overview.png)

### Settings

![TeamForge Settings](docs/images/preview-settings.png)

### Activity

![TeamForge Activity](docs/images/preview-activity.png)

## Quick Start

```bash
git clone https://github.com/Sheshiyer/team-forge-ts.git
cd team-forge-ts
pnpm install
cargo tauri dev
```

**Prerequisites:** Node.js 20+, Rust 1.75+, pnpm

On first launch:
1. Navigate to **Settings** (or `Cmd+=`)
2. Enter your **Clockify API key** and select workspace
3. Confirm or edit the **Ignored Clockify Emails** list
4. Enter your **Huly JWT token**
5. Paste the **Slack Bot User OAuth Token** (`xoxb-...`) if you want Slack-backed chat activity in **Comms**
6. Hit **Sync Now** — data populates across all views
7. Open **Projects** for delivery summaries and project setup, **Team** for org mapping and employee summaries, then **Calendar** for leave and holiday operations

## Tauri Agent Skills

This repo carries a reproducible wrapper around the installed Tauri skill suite
from `dchuk/claude-code-tauri-skills`.

```bash
pnpm skills:tauri:list
pnpm skills:tauri:refresh
```

Workflow guidance and the canonical skill names to reference live in
[docs/runbooks/tauri-agent-skills.md](docs/runbooks/tauri-agent-skills.md).
The repo-pinned 39-skill manifest lives at
[`config/tauri-skill-suite.txt`](config/tauri-skill-suite.txt).

## Releases

- **Current app version in repo:** `0.2.6`
- **Latest published tag:** `v0.2.6` after the next release push
- **Release trigger:** pushing a tag that matches `v*`
- **Canonical OTA signing/publish path:** [`.github/workflows/release.yml`](.github/workflows/release.yml)
- **Artifacts:** macOS `.app` and `.dmg` bundles built by GitHub Actions for Apple Silicon and Intel targets
- **Download page:** [GitHub Releases](https://github.com/Sheshiyer/team-forge-ts/releases)

## Architecture

```mermaid
graph LR
A["React Frontend
WebView"] <-->|"Tauri IPC"| B["Rust Backend
Tauri Core"]
B -->|"reqwest"| C["Clockify REST API"]
B -->|"JSON-RPC + REST"| D["Huly.io Transactor"]
B -->|"HTTP"| E["Cloudflare Worker
TeamForge API"]
E <-->|"D1"| F[("Canonical Project Graph")]
E -->|"Queues + DO Locks"| G["Sync Orchestration"]
B <-->|"sqlx"| H[("SQLite Cache / Projection")]
B -->|"30s/5m/60m"| I["Background Scheduler"]
I --> C
I --> D
B -->|"Notifications"| J["macOS Alerts"]
B -->|"Tray"| K["Menu Bar Icon"]
```

## Thoughtseed Data Flow

TeamForge becomes useful when it does more than just display API responses. The real value is in **cross-populating three layers of truth**:

1. **Clockify** answers who is working, for how long, and whether they are active right now.
2. **Huly** answers what the work is, why it matters, what changed, and who is blocked.
3. **Thoughtseed operating structure** answers how the work should be interpreted: client, project stream, sprint, onboarding flow, knowledge asset, and delivery rhythm.

```mermaid
graph TD
C["Clockify
time entries, timers, projects, users"] --> DB["SQLite mission cache"]
H["Huly
issues, milestones, departments, chat, meetings"] --> DB
T["Thoughtseed operating model
clients, onboarding flow, sprints, knowledge, devices"] -. enriches .-> DB

DB --> O["Overview
capacity, utilization, active crew"]
DB --> L["Live
real-time people check"]
DB --> A["Activity
weekly timeline + event feed"]
DB --> S["Sprints / Insights
delivery health"]
DB --> TM["Team / Comms / Boards
operating rhythm"]
```

### Cross-Population Strategy

- **People layer:** map Clockify users and Huly persons into one employee record so presence, work logs, and Huly activity can sit on the same card.
- **Time layer:** let Clockify remain the source of actual effort while Huly remains the source of task semantics and collaboration context.
- **Meaning layer:** enrich raw operational data with Thoughtseed concepts such as Axtech vs Tuya vs OASIS, client onboarding flow, knowledge article lineage, and sprint rhythm.
- **Fallback ops layer:** keep local SQLite-backed leave and holiday overrides available so the Team page still works when Huly HR coverage is incomplete or a manual correction is needed.
- **Dashboard layer:** expose the fused dataset differently by page, rather than trying to force every concept into one giant table.

### How This Maps Onto The Current Dashboard

- **Overview** should answer: Are we staffed correctly? Are people active? Are hours landing where they should?
- **Live** should answer: Who is actually moving right now?
- **Activity** should answer: What changed this week, and what is the shape of team motion over time?
- **Sprints / Insights** should answer: Are delivery promises, estimates, and priorities converging?
- **Team / Comms / Boards** should answer: Is the organization functioning, talking, and unblocking itself?

This is the intended direction for the Thoughtseed workspace normalization work tracked in the repository backlog.

## System Design

The rollout is now documented in-repo instead of living only in chat and GitHub issues:

- [Changelog](CHANGELOG.md)
- [Thoughtseed Huly System Design](docs/huly-system-design.md)
- [Huly Rollout Implementation Plan](docs/plans/2026-04-06-huly-rollout.md)
- [Cloudflare Project Sync Architecture](docs/plans/2026-04-17-cloudflare-project-sync-design.md)
- [Cloudflare Project Backend Implementation Plan](docs/plans/2026-04-17-cloudflare-project-backend-implementation.md)

The first Cloudflare project-registry tranche tracked in GitHub is now implemented on the current `0.2.6` line:

- milestone propagation from GitHub into Huly with drift-review conflict records
- Huly-owned execution/admin issue propagation
- GitHub-owned engineering issue propagation
- sync journal and conflict records for GitHub/Huly activity
- operator UI for registry editing, conflict review, classification overrides, and sync controls

## Dashboard Views

| View | Shortcut | Source | What It Shows |
|:-----|:--------:|:------:|:--------------|
| **Overview** | `Cmd+1` | Clockify | Quota compliance, team hours, utilization rate, metric cards |
| **Timesheet** | `Cmd+2` | Clockify | Time entries with employee/date filtering, CSV export |
| **Projects** | `Cmd+3` | Clockify + Worker | Per-project delivery breakdown, utilization export, and TeamForge project setup |
| **Sprints** | `Cmd+4` | Huly | Milestone tracking, progress bars, on-track/delayed status |
| **Insights** | `Cmd+5` | Both | Time discrepancies, estimation accuracy, priority queue health |
| **Team** | `Cmd+6` | Huly + SQLite | Drag-and-drop org chart mapping, department structure, and employee operations summaries |
| **Calendar** | `Cmd+7` | Huly + SQLite | Local leave tracking, yearly holiday management, and cache-first schedule ops |
| **Comms** | `Cmd+8` | Huly + Slack | Chat activity volume, meeting load with ratio analysis |
| **Activity** | `Cmd+0` | Both | Weekly timeline, combined feed, engagement heatmap |
| **Agents** | `Cmd+-` | Paperclip + local ops | Runtime health, telemetry, personal context, rooms, escalations, and crew presence |
| **Settings** | `Cmd+=` | Local + Worker | Integrations, desktop workspace, updater, and sync controls |

## Project Structure

```
team-forge-ts/
DESIGN.md # Linear design system reference
src/ # React frontend
components/ui/ # Avatar, Skeleton, DateRangePicker
pages/ # 12 app pages including Team + Calendar split
hooks/ # Typed Tauri invoke layer + viewport helpers
stores/appStore.ts # Zustand state
lib/ # Types, formatting, CSV export, shared LCARS page styles
cloudflare/worker/ # Shared TeamForge Worker + D1 project registry
src-tauri/ # Rust backend
src/clockify/ # HTTP client, sync, rate limiter
src/huly/ # REST client, types, sync
src/commands/ # Tauri command surface
src/sync/ # Background scheduler, alerts, TeamForge Worker bridge
src/db/ # SQLite cache/projection models, queries, migrations
migrations/ # SQLite schema, including local Team calendar storage
sidecar/ # Node.js Huly SDK (reserved)
```

## Huly Integration Details

TeamForge connects to Huly via **direct REST API calls** (no SDK required). We reverse-engineered the endpoint structure from the official `@hcengineering/api-client` source:

1. Fetch `huly.app/config.json` for accounts URL
2. JSON-RPC `selectWorkspace` call with JWT token
3. REST queries to transactor: `GET /api/v1/find-all/{workspace}?class=...`

| Huly Class | Integration |
|:-----------|:------------|
| `tracker:class:Issue` | Issue tracking, priority distribution, estimation accuracy |
| `tracker:class:Milestone` | Sprint/milestone progress |
| `tracker:class:TimeSpendReport` | Time logging cross-reference with Clockify |
| `hr:class:Department` | Organization structure |
| `hr:class:Request` | Leave/PTO tracking |
| `hr:class:Holiday` | Company holiday calendar |
| `chunter:class:ChunterMessage` | Chat activity metrics |
| `board:class:Card` | Kanban board card tracking |
| `calendar:class:Event` | Meeting load analysis |

## Sync Strategy

| Data | Source | Frequency |
|:-----|:------:|:---------:|
| Active timers | Clockify | 30s |
| Time entries | Clockify | 5 min |
| Summary reports | Clockify | 15 min |
| Users/Projects | Clockify | 60 min |
| Huly issues | Huly | 5 min |
| Huly presence | Huly | 60s |
| TeamForge project graph | Cloudflare Worker | On demand |

Cloudflare Worker + D1 are now the shared source of truth for TeamForge project graph and sync policy state. Frontend reads still go through Tauri IPC, and local SQLite remains the desktop cache/offline projection for operational reads.

Menu bar quick actions:
- **Show TeamForge** brings the app to the front
- **Live Crew Check** jumps straight to the Agents runtime view
- **Weekly Timeline** jumps to the last-7-days activity view
- **Sync Now** runs a manual sync sweep

## Project Health

| Category | Status | Score |
|:---------|:------:|------:|
| Type Safety | ████████████████████ | 100% |
| Build | ████████████████████ | 100% |
| Architecture | ██████████████████░░ | 90% |
| Documentation | ████████████████░░░░ | 80% |
| Tests | ████████░░░░░░░░░░░░ | 40% |

> **Overall: 82%** — Operational

## Contributing

Contributions welcome. Please open an issue first to discuss what you'd like to change.

```bash
# Development
pnpm install
cargo tauri dev

# Build for production
cargo tauri build
```

## License

ISC

**Built by [Thoughtseed](https://thoughtseed.com) | Powered by Clockify + Huly.io**