From f8e8a1244da666379afc9ae514884ca204788511 Mon Sep 17 00:00:00 2001
From: Phelipe Lorran <112786693+httpsphl@users.noreply.github.com>
Date: Sun, 4 Oct 2026 13:03:50 -0300
Subject: [PATCH] feat(routines): a page with every routine, coming up first
The sidebar gets a Routines page once a bot has one: what runs next
across all crews, soonest first, with interval routines keeping watch,
and below, each bot's routines under its mascot, foldable, with a
button for a new one.
---
app/src/features/crews/Sidebar.tsx | 3 +-
app/src/features/crews/SidebarPages.tsx | 30 ++-
app/src/features/routines/RoutinesPage.tsx | 205 ++++++++++++++++++
.../features/routines/routinesPage.test.tsx | 85 ++++++++
app/src/i18n/en/routines.ts | 13 ++
app/src/i18n/es/routines.ts | 12 +
app/src/i18n/pt-BR/routines.ts | 12 +
app/src/shell/Workspace.tsx | 9 +-
app/src/store/app.ts | 4 +-
docs/spec.md | 1 +
10 files changed, 367 insertions(+), 7 deletions(-)
create mode 100644 app/src/features/routines/RoutinesPage.tsx
create mode 100644 app/src/features/routines/routinesPage.test.tsx
diff --git a/app/src/features/crews/Sidebar.tsx b/app/src/features/crews/Sidebar.tsx
index 3e7b3f4c..19fe8307 100644
--- a/app/src/features/crews/Sidebar.tsx
+++ b/app/src/features/crews/Sidebar.tsx
@@ -21,7 +21,7 @@ import { ListAvatar } from "../bots/ListAvatar";
import { toolAction, toolTitle } from "../chat/toolNames";
import { CrewDialog } from "./CrewDialog";
import { setAllCollapsed, setCollapsed, useCollapsed, useCollapsedSet } from "./collapsed";
-import { QuestionsEntry, row, SearchEntry } from "./SidebarPages";
+import { QuestionsEntry, RoutinesEntry, row, SearchEntry } from "./SidebarPages";
/** Crews as sections and their bots as conversations (spec 15.1). */
export function Sidebar() {
@@ -65,6 +65,7 @@ export function Sidebar() {
{r.page.lead}
+