4141 </v-btn >
4242 </div >
4343
44- <!-- Section 1.5: Demo videos (tabbed ) -->
44+ <!-- Section 1.5: Demo videos (active player + thumbnail picker ) -->
4545 <div class =" mb-10" >
46- <v-tabs v-model =" videoTab" align-tabs =" center" color =" primary" density =" compact" >
47- <v-tab value =" setup" >Setup walkthrough</v-tab >
48- <v-tab value =" slack" >Slack triage & ; MCP tools</v-tab >
49- <v-tab value =" estimation" >Requirements & ; estimation</v-tab >
50- <v-tab value =" design" >Design phase & ; agent prompts</v-tab >
51- <v-tab value =" world" >Inside the virtual world</v-tab >
52- </v-tabs >
53- <v-card class =" mt-3" variant =" outlined" >
54- <v-window v-model =" videoTab" >
55- <v-window-item value =" setup" >
56- <div class =" methodology-video-frame" >
57- <iframe
58- src =" https://www.youtube-nocookie.com/embed/ot-BmKxRgRA"
59- title =" Bodhiorchard — Setup walkthrough"
60- allow =" accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
61- allowfullscreen
62- loading =" lazy"
63- ></iframe >
64- </div >
65- <p class =" text-caption text-center text-medium-emphasis py-3 mb-0" >
66- Clone, configure, and bring the stack up locally.
67- </p >
68- </v-window-item >
69- <v-window-item value =" slack" >
70- <div class =" methodology-video-frame" >
71- <iframe
72- src =" https://www.youtube-nocookie.com/embed/i8kZdcL1bME"
73- title =" Bodhiorchard — Slack triage & ; MCP tools"
74- allow =" accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
75- allowfullscreen
76- loading =" lazy"
77- ></iframe >
78- </div >
79- <p class =" text-caption text-center text-medium-emphasis py-3 mb-0" >
80- Chat-to-BUD in Slack: the Triage Agent drafts the spec, Claude Code drives the BUD lifecycle through MCP tools.
81- </p >
82- </v-window-item >
83- <v-window-item value =" estimation" >
84- <div class =" methodology-video-frame" >
85- <iframe
86- src =" https://www.youtube-nocookie.com/embed/YBwdTes0Fno"
87- title =" Bodhiorchard — Requirements & ; estimation"
88- allow =" accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
89- allowfullscreen
90- loading =" lazy"
91- ></iframe >
92- </div >
93- <p class =" text-caption text-center text-medium-emphasis py-3 mb-0" >
94- AI-drafted requirements, AI-PERT + Monte Carlo cycle-time forecasts, and the collaborative editor with full version history.
95- </p >
96- </v-window-item >
97- <v-window-item value =" design" >
98- <div class =" methodology-video-frame" >
99- <iframe
100- src =" https://www.youtube-nocookie.com/embed/lV71qhmfzzw"
101- title =" Bodhiorchard — Design phase & ; agent prompts"
102- allow =" accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
103- allowfullscreen
46+ <v-card variant =" outlined" >
47+ <div class =" methodology-video-frame" >
48+ <iframe
49+ :key =" activeVideo.youTubeId"
50+ :src =" `https://www.youtube-nocookie.com/embed/${activeVideo.youTubeId}`"
51+ :title =" `Bodhiorchard — ${activeVideo.title}`"
52+ allow =" accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
53+ allowfullscreen
54+ loading =" lazy"
55+ ></iframe >
56+ </div >
57+ <p class =" text-caption text-center text-medium-emphasis py-3 mb-0 px-4" >
58+ {{ activeVideo.caption }}
59+ </p >
60+ </v-card >
61+
62+ <v-row class =" mt-3" dense >
63+ <v-col v-for =" v in videos" :key =" v.value" cols =" 6" sm =" 4" md =" 2" >
64+ <v-card
65+ :variant =" v.value === videoTab ? 'flat' : 'outlined'"
66+ :color =" v.value === videoTab ? 'primary' : undefined"
67+ class =" methodology-video-thumb"
68+ :class =" { 'methodology-video-thumb--active': v.value === videoTab }"
69+ @click =" videoTab = v.value"
70+ >
71+ <div class =" methodology-video-thumb-img-wrap" >
72+ <img
73+ :src =" `https://img.youtube.com/vi/${v.youTubeId}/mqdefault.jpg`"
74+ :alt =" v.title"
10475 loading =" lazy"
105- ></iframe >
76+ class =" methodology-video-thumb-img"
77+ />
78+ <v-icon
79+ v-if =" v.value !== videoTab"
80+ class =" methodology-video-thumb-play"
81+ icon =" mdi-play-circle"
82+ size =" 36"
83+ />
10684 </div >
107- <p class =" text-caption text-center text-medium-emphasis py-3 mb-0" >
108- Generating wireframes and the tech architecture — and how the AI agent prompts shape each handoff.
109- </p >
110- </v-window-item >
111- <v-window-item value =" world" >
112- <div class =" methodology-video-frame" >
113- <iframe
114- src =" https://www.youtube-nocookie.com/embed/OxoqBI7BNxU"
115- title =" Bodhiorchard — Inside the virtual world"
116- allow =" accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
117- allowfullscreen
118- loading =" lazy"
119- ></iframe >
85+ <div
86+ class =" text-caption text-center px-2 py-2"
87+ :class =" v.value === videoTab ? 'font-weight-bold' : 'text-medium-emphasis'"
88+ >
89+ {{ v.title }}
12090 </div >
121- <p class =" text-caption text-center text-medium-emphasis py-3 mb-0" >
122- The Living Tree: your org as a tended orchard.
123- </p >
124- </v-window-item >
125- </v-window >
126- </v-card >
91+ </v-card >
92+ </v-col >
93+ </v-row >
12794 </div >
12895
12996 <!-- Section 1.6: Platform screenshots -->
544511</template >
545512
546513<script setup lang="ts">
547- import { ref } from ' vue'
514+ import { computed , ref } from ' vue'
548515import LifecycleFlowchart from ' @/components/setup/LifecycleFlowchart.vue'
549516import AgentCard from ' @/components/setup/AgentCard.vue'
550517import { agents } from ' @/data/agents'
@@ -553,7 +520,60 @@ const emit = defineEmits<{
553520 startBuilding: []
554521}>()
555522
556- const videoTab = ref <string >(' setup' )
523+ interface DemoVideo {
524+ value: string
525+ title: string
526+ youTubeId: string
527+ caption: string
528+ }
529+
530+ const videos: DemoVideo [] = [
531+ {
532+ value: ' setup' ,
533+ title: ' Setup walkthrough' ,
534+ youTubeId: ' ot-BmKxRgRA' ,
535+ caption: ' Clone, configure, and bring the stack up locally.' ,
536+ },
537+ {
538+ value: ' slack' ,
539+ title: ' Slack triage & MCP tools' ,
540+ youTubeId: ' i8kZdcL1bME' ,
541+ caption:
542+ ' Chat-to-BUD in Slack: the Triage Agent drafts the spec, Claude Code drives the BUD lifecycle through MCP tools.' ,
543+ },
544+ {
545+ value: ' estimation' ,
546+ title: ' Requirements & estimation' ,
547+ youTubeId: ' YBwdTes0Fno' ,
548+ caption:
549+ ' AI-drafted requirements, AI-PERT + Monte Carlo cycle-time forecasts, and the collaborative editor with full version history.' ,
550+ },
551+ {
552+ value: ' design' ,
553+ title: ' Design phase & agent prompts' ,
554+ youTubeId: ' lV71qhmfzzw' ,
555+ caption:
556+ ' Generating wireframes and the tech architecture — and how the AI agent prompts shape each handoff.' ,
557+ },
558+ {
559+ value: ' dev' ,
560+ title: ' Development & retrospective' ,
561+ youTubeId: ' YjRihN_SKaw' ,
562+ caption:
563+ ' Development, automated code review, post-deploy retrospective, and the Learning Agent feeding insights back into estimation.' ,
564+ },
565+ {
566+ value: ' world' ,
567+ title: ' Inside the virtual world' ,
568+ youTubeId: ' OxoqBI7BNxU' ,
569+ caption: ' The Living Tree: your org as a tended orchard.' ,
570+ },
571+ ]
572+
573+ const videoTab = ref <string >(videos [0 ].value )
574+ const activeVideo = computed <DemoVideo >(
575+ () => videos .find ((v ) => v .value === videoTab .value ) ?? videos [0 ],
576+ )
557577
558578const lightboxOpen = ref (false )
559579const lightboxSrc = ref (' ' )
@@ -764,6 +784,47 @@ const budFeatures = [
764784 border : 0 ;
765785 display : block ;
766786}
787+ .methodology-video-thumb {
788+ cursor : pointer ;
789+ transition : transform 0.18s ease , border-color 0.18s ease , box-shadow 0.18s ease ;
790+ overflow : hidden ;
791+ height : 100% ;
792+ }
793+ .methodology-video-thumb :hover {
794+ transform : translateY (-2px );
795+ border-color : rgb (var (--v-theme-primary )) !important ;
796+ }
797+ .methodology-video-thumb--active {
798+ box-shadow : 0 0 0 2px rgb (var (--v-theme-primary ));
799+ }
800+ .methodology-video-thumb-img-wrap {
801+ position : relative ;
802+ width : 100% ;
803+ aspect-ratio : 16 / 9 ;
804+ background : #0d1b0f ;
805+ overflow : hidden ;
806+ }
807+ .methodology-video-thumb-img {
808+ display : block ;
809+ width : 100% ;
810+ height : 100% ;
811+ object-fit : cover ;
812+ }
813+ .methodology-video-thumb-play {
814+ position : absolute ;
815+ top : 50% ;
816+ left : 50% ;
817+ transform : translate (-50% , -50% );
818+ color : rgba (255 , 255 , 255 , 0.92 );
819+ text-shadow : 0 0 8px rgba (0 , 0 , 0 , 0.55 );
820+ pointer-events : none ;
821+ opacity : 0.85 ;
822+ transition : opacity 0.18s ease , transform 0.18s ease ;
823+ }
824+ .methodology-video-thumb :hover .methodology-video-thumb-play {
825+ opacity : 1 ;
826+ transform : translate (-50% , -50% ) scale (1.08 );
827+ }
767828.methodology-shot-card {
768829 cursor : zoom-in ;
769830 transition : transform 0.18s ease , border-color 0.18s ease ;
0 commit comments