From 4774c6b593901fe33888ee9a726a326e4ee4358a Mon Sep 17 00:00:00 2001 From: Tajim Date: Sun, 2 Aug 2026 16:39:36 +0600 Subject: [PATCH 1/2] feat(ai): add AI coming soon page and banner --- resources/js/components/AIBanner.vue | 52 ++++ resources/js/pages/Home.vue | 2 + resources/js/pages/ai/Index.vue | 386 +++++++++++++++++++++++++++ routes/web.php | 1 + 4 files changed, 441 insertions(+) create mode 100644 resources/js/components/AIBanner.vue create mode 100644 resources/js/pages/ai/Index.vue diff --git a/resources/js/components/AIBanner.vue b/resources/js/components/AIBanner.vue new file mode 100644 index 0000000..8fc5b03 --- /dev/null +++ b/resources/js/components/AIBanner.vue @@ -0,0 +1,52 @@ + + + diff --git a/resources/js/pages/Home.vue b/resources/js/pages/Home.vue index 89653cd..084e028 100644 --- a/resources/js/pages/Home.vue +++ b/resources/js/pages/Home.vue @@ -8,6 +8,7 @@ import HomeHeader from '@/components/HomeHeader.vue'; import NoticeDialog from '@/components/NoticeDialog.vue'; import PwaInstallPrompt from '@/components/PwaInstallPrompt.vue'; import SubjectCard from '@/components/SubjectCard.vue'; +import AIBanner from '@/components/AIBanner.vue'; const props = defineProps({ subjects: Array, @@ -34,6 +35,7 @@ const filteredSubjects = computed(() => {
+
+import { Head, Link } from '@inertiajs/vue3'; +import { + Sparkles, + Bot, + HeartHandshake, + Send, + Zap, + ArrowRight, + Lock, + ChevronRight, + CheckCircle2, + Layers, + MessageSquareText, + Atom, + FlaskConical, + Sigma, +} from 'lucide-vue-next'; +import { ref, computed } from 'vue'; + +// Mock Data for Pure STEM Subjects (Emojis removed, Lucide Icons added) +const mockSubjects = [ + { + id: 'physics', + name: 'Physics', + icon: Atom, + topics: [ + 'Vector', + 'Dynamics', + 'Work, Energy & Power', + 'Gravitation', + 'Thermodynamics', + ], + }, + { + id: 'chemistry', + name: 'Chemistry', + icon: FlaskConical, + topics: [ + 'Qualitative Chemistry', + 'Periodic Properties', + 'Chemical Change', + 'Electrochemistry', + ], + }, + { + id: 'math', + name: 'Higher Math', + icon: Sigma, + topics: [ + 'Matrices & Determinants', + 'Straight Lines', + 'Circles', + 'Calculus (Differentiation)', + ], + }, +]; + +// Interactive Flow State +const selectedSubject = ref(mockSubjects[0]); // Default to Physics +const selectedTopic = ref('Vector'); // Default to Vector +const userPrompt = ref(''); + +const sampleQuestions: Record = { + Vector: [ + 'ভেক্টরের ডট গুণন ও ক্রস গুণনের মধ্যে মূল পার্থক্য কী?', + 'সামান্তরিকের সূত্রের সাহায্যে কীভাবে লব্ধির মান ও দিক নির্ণয় করা যায়?', + 'নদী ও নৌকার ক্ষেত্রে সর্বনিম্ন সময়ে নদী পার হওয়ার শর্ত ব্যাখ্যা করো।', + ], + 'Qualitative Chemistry': [ + 'কোয়ান্টাম সংখ্যা কীভাবে ইলেকট্রনের অবস্থান নির্দেশ করে?', + 'আউফবাউ নীতি ও হুন্ডের নীতির মধ্যে পার্থক্য কী?', + ], + 'Calculus (Differentiation)': [ + 'মূল নিয়মে $\sin(x)$ এর অন্তরীজ নির্ণয় করার ধাপগুলো কী কী?', + 'পরম মান এবং গুরুমান-লঘুমান নির্ণয়ের সহজ উপায় বুঝিয়ে বলো।', + ], +}; + +const currentSamples = computed(() => { + return ( + sampleQuestions[selectedTopic.value] || [ + `${selectedSubject.value.name} এর ${selectedTopic.value} টপিক থেকে গুরুত্বপূর্ণ বোর্ড প্রশ্নগুলো দেখাও।`, + `${selectedTopic.value} সহজে মনে রাখার কোনো শর্টকাট কৌশল আছে?`, + ] + ); +}); + +const handleTopicSelect = (topic: string) => { + selectedTopic.value = topic; + userPrompt.value = ''; +}; + +const handleSubjectSelect = (subject: (typeof mockSubjects)[0]) => { + selectedSubject.value = subject; + selectedTopic.value = subject.topics[0]; + userPrompt.value = ''; +}; + +const handleMockSubmit = (question?: string) => { + if (question) { + userPrompt.value = question; + } +}; + + + diff --git a/routes/web.php b/routes/web.php index ebdc66d..3173f83 100644 --- a/routes/web.php +++ b/routes/web.php @@ -100,6 +100,7 @@ Route::inertia('/support', 'Support'); Route::inertia('/join', 'platform/JoinTeam'); Route::inertia('/guide', 'ContributorGuide'); + Route::inertia('/ai', 'ai/Index'); Route::get('/about-us', [AboutUsController::class, 'index']); From 6da0eac77e8ff69d1d0fa574f2e0037f278fcf92 Mon Sep 17 00:00:00 2001 From: Tajim Date: Sun, 2 Aug 2026 16:40:22 +0600 Subject: [PATCH 2/2] refactor: format code --- resources/js/components/NodeRow.vue | 1 + resources/js/pages/Home.vue | 2 +- resources/js/pages/ai/Index.vue | 2 -- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/resources/js/components/NodeRow.vue b/resources/js/components/NodeRow.vue index cb2790c..e7241a4 100644 --- a/resources/js/components/NodeRow.vue +++ b/resources/js/components/NodeRow.vue @@ -8,6 +8,7 @@ const { node } = defineProps({ }); const href = computed(() => { const path = new URL(window.location.href).pathname.replace(/\/$/, ''); + return `${path}/${node.slug}`; }); diff --git a/resources/js/pages/Home.vue b/resources/js/pages/Home.vue index 084e028..e58494c 100644 --- a/resources/js/pages/Home.vue +++ b/resources/js/pages/Home.vue @@ -1,6 +1,7 @@