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.
- Host: GitHub
- URL: https://github.com/sheshiyer/team-forge-ts
- Owner: Sheshiyer
- Created: 2026-04-06T09:37:36.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2026-06-10T18:36:54.000Z (about 1 month ago)
- Last Synced: 2026-06-10T19:16:49.150Z (about 1 month ago)
- Topics: clockify, dashboard, desktop-app, employee-tracking, huly, lcars, macos, react, rust, star-trek, tauri, time-tracking
- Language: Rust
- Homepage: https://thoughtseed.com
- Size: 5.97 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README

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







---
> **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

### Settings

### Activity


## 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**