feat: Mongo-backed Pods with full CRUD + member management

Pods are persisted in MongoDB and CRUD'd via /api/pods (list/create/get/
update/delete + add/remove member). Shared Pod reshaped to a persisted entity
(members: string[], description, timestamps) + PodInput. Backend seeds Demo/
Frontend/Backend Pods on first run (Squad -> Pod rename). Frontend replaces
hardcoded teams with live data: PodCard (member chips add/remove, inline edit,
delete, join) + CreatePodForm; App fetches+mutates via API. Removes teams.ts/
TeamCard; gitignores test artifacts.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Kartikeya
2026-06-27 15:48:55 -07:00
parent 789f0da61b
commit 5a03ad4d6b
13 changed files with 708 additions and 148 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
export type { Pod, Engineer } from './pod.js';
export type { Pod, PodInput, Engineer } from './pod.js';
export type { EngineerContext } from './engineer.js';
export type { Collision, CollisionSeverity, GithubStateSnapshot } from './collision.js';
export type {
+17 -2
View File
@@ -1,11 +1,26 @@
/** A pod is one room of engineers working together (one LiveKit room per pod). */
/**
* A pod is one room of engineers working together (one LiveKit room per pod).
* Persisted in MongoDB; CRUD'd via /api/pods.
*/
export interface Pod {
/** URL-safe slug, e.g. "frontend-pod". Stable id used everywhere. */
id: string;
name: string;
/** GitHub repo the pod is working in, as "owner/name". */
repo: string;
members: Engineer[];
description?: string;
/** Engineer display names PodMan uses when it speaks. */
members: string[];
createdAt: string;
updatedAt: string;
}
/** Fields accepted when creating or updating a pod. */
export interface PodInput {
name?: string;
repo?: string;
description?: string;
members?: string[];
}
export interface Engineer {