feat: add procedural flows with intake forms, navigation, and seed templates

Adds a new "procedural" tree type for linear step-by-step project workflows
(domain controller setup, M365 onboarding, VPN config, etc). Includes intake
form builder, two-panel step navigation, variable resolution, procedural
exports, 3 seed templates, and UI rename from "Trees" to "Flows".

Also archives 19 implemented plan docs and creates deferred features backlog.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
chihlasm
2026-02-14 04:13:52 -05:00
parent 303570ca2c
commit 350c977eda
58 changed files with 11686 additions and 167 deletions

View File

@@ -8,7 +8,7 @@ import { usePermissions } from '@/hooks/usePermissions'
interface TreeGridViewProps {
trees: TreeListItem[]
onStartSession: (treeId: string) => void
onStartSession: (treeId: string, treeType?: string) => void
onTagClick: (tag: string) => void
onFolderCreated: (parentId?: string | null) => void
onDeleteTree: (tree: TreeListItem) => void
@@ -119,7 +119,7 @@ export function TreeGridView({
)}
<button
type="button"
onClick={() => onStartSession(tree.id)}
onClick={() => onStartSession(tree.id, tree.tree_type)}
className={cn(
'rounded-md bg-white px-3 py-2 text-sm font-medium text-black',
'hover:bg-white/90'

View File

@@ -8,7 +8,7 @@ import { usePermissions } from '@/hooks/usePermissions'
interface TreeListViewProps {
trees: TreeListItem[]
onStartSession: (treeId: string) => void
onStartSession: (treeId: string, treeType?: string) => void
onTagClick: (tag: string) => void
onFolderCreated: (parentId?: string | null) => void
onDeleteTree: (tree: TreeListItem) => void
@@ -123,7 +123,7 @@ export function TreeListView({
)}
<button
type="button"
onClick={() => onStartSession(tree.id)}
onClick={() => onStartSession(tree.id, tree.tree_type)}
className={cn(
'rounded-md bg-white px-3 py-1.5 text-sm font-medium text-black',
'hover:bg-white/90 whitespace-nowrap'

View File

@@ -9,7 +9,7 @@ import { usePermissions } from '@/hooks/usePermissions'
interface TreeTableViewProps {
trees: TreeListItem[]
onStartSession: (treeId: string) => void
onStartSession: (treeId: string, treeType?: string) => void
onTagClick: (tag: string) => void
onFolderCreated: (parentId?: string | null) => void
onDeleteTree: (tree: TreeListItem) => void
@@ -227,7 +227,7 @@ export function TreeTableView({
)}
<button
type="button"
onClick={() => onStartSession(tree.id)}
onClick={() => onStartSession(tree.id, tree.tree_type)}
className={cn(
'rounded-md bg-white px-3 py-1.5 text-xs font-medium text-black',
'hover:bg-white/90 whitespace-nowrap'