Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 9 additions & 34 deletions resources/js/components/Footer.vue
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { Link } from '@inertiajs/vue3';
import {
Github,
Facebook,
BookOpen,
Layers,
Users,
UserPlus,
ExternalLink,
Expand Down Expand Up @@ -64,14 +64,7 @@ import AppLogo from './AppLogo.vue';
<p
class="mt-4 hidden text-xs font-medium text-slate-400 md:block dark:text-gray-500"
>
A concern of
<a
href="https://tajimz.xyz"
target="_blank"
rel="noopener noreferrer"
class="text-slate-600 underline transition-colors hover:text-indigo-600 dark:text-gray-300 dark:hover:text-indigo-400"
>Tajim</a
>
A concern of HSCStack
</p>
</div>

Expand All @@ -87,13 +80,13 @@ import AppLogo from './AppLogo.vue';
<ul class="mt-5 space-y-3.5">
<li>
<Link
href="/guide"
href="/"
class="inline-flex items-center gap-1.5 text-sm font-medium text-slate-600 transition-colors duration-150 hover:text-indigo-600 dark:text-gray-400 dark:hover:text-indigo-400"
>
<BookOpen
<Layers
class="h-4 w-4 text-indigo-500 dark:text-indigo-400"
/>
<span>Documentation</span>
<span>Main Platform</span>
</Link>
</li>
<li>
Expand Down Expand Up @@ -130,17 +123,15 @@ import AppLogo from './AppLogo.vue';
</Link>
</li>
<li>
<a
href="https://tajimz.xyz/projects"
target="_blank"
rel="noopener noreferrer"
<Link
href="/projects"
class="inline-flex items-center gap-1.5 text-sm font-medium text-slate-600 transition-colors duration-150 hover:text-indigo-600 dark:text-gray-400 dark:hover:text-indigo-400"
>
<ExternalLink
class="h-4 w-4 text-indigo-500 dark:text-indigo-400"
/>
<span>More From Us</span>
</a>
</Link>
</li>
</ul>
</div>
Expand Down Expand Up @@ -168,15 +159,6 @@ import AppLogo from './AppLogo.vue';
Terms of Service
</Link>
</li>

<li>
<Link
href="/content-policy"
class="text-sm font-medium text-slate-600 transition-colors duration-150 hover:text-indigo-600 dark:text-gray-400 dark:hover:text-indigo-400"
>
Content Policy
</Link>
</li>
</ul>
</div>
</div>
Expand All @@ -188,14 +170,7 @@ import AppLogo from './AppLogo.vue';
<p
class="text-center text-xs font-medium text-slate-400 md:hidden dark:text-gray-500"
>
A concern of
<a
href="https://tajimz.xyz"
target="_blank"
rel="noopener noreferrer"
class="text-slate-600 underline transition-colors hover:text-indigo-600 dark:text-gray-300 dark:hover:text-indigo-400"
>Tajim</a
>
A concern of HSCStack
</p>

<p
Expand Down
7 changes: 7 additions & 0 deletions resources/js/components/NavBar.vue
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,13 @@ onBeforeUnmount(() => {
</div>

<div class="flex items-center gap-4">
<Link
href="/projects"
class="text-sm font-medium text-slate-600 transition-colors hover:text-slate-900 dark:text-gray-400 dark:hover:text-gray-100"
>
Projects
</Link>

<Link
href="/blogs"
class="text-sm font-medium text-slate-600 transition-colors hover:text-slate-900 dark:text-gray-400 dark:hover:text-gray-100"
Expand Down
143 changes: 143 additions & 0 deletions resources/js/pages/Projects.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
<script setup lang="ts">
import { Head, Link } from '@inertiajs/vue3';
import { ArrowLeft, ExternalLink, ArrowRight, Users } from 'lucide-vue-next';
</script>

<template>
<Head title="Our Products" />

<header
class="mx-auto max-w-4xl px-4 pt-12 pb-8 text-center sm:pt-16 sm:pb-12"
>
<Link
href="/"
class="group mb-4 inline-flex items-center gap-2 text-xs font-bold text-slate-500 transition-colors hover:text-indigo-600 dark:text-gray-400 dark:hover:text-indigo-400"
>
<ArrowLeft
class="h-3.5 w-3.5 transition-transform group-hover:-translate-x-1"
/>
Back to Home
</Link>

<h1
class="mb-3 text-3xl font-black tracking-tight text-slate-950 sm:text-5xl dark:text-gray-100"
>
Our
<span class="text-indigo-600 dark:text-indigo-400">Products</span>
</h1>

<p
class="mx-auto max-w-md text-sm font-medium text-slate-500 dark:text-gray-400"
>
Explore platforms and tools built by HSCStack
</p>
</header>

<main class="mx-auto max-w-5xl px-4 pb-20 sm:px-6">
<div class="grid grid-cols-1 gap-6 sm:grid-cols-2 lg:gap-8">
<!-- Product 1: Main Platform -->
<div
class="group flex flex-col justify-between overflow-hidden rounded-2xl border border-slate-200 bg-white p-5 shadow-xs transition-all duration-200 hover:-translate-y-0.5 hover:shadow-md sm:p-6 dark:border-gray-800 dark:bg-gray-900 dark:hover:border-gray-700"
>
<div>
<div
class="aspect-[16/9] overflow-hidden rounded-xl bg-slate-100 dark:bg-gray-800"
>
<img
src="https://cdn.hscstack.site/images/og.png"
alt="HSCStack Main Platform"
class="h-full w-full object-cover transition-transform duration-300 group-hover:scale-105"
/>
</div>

<div class="mt-5 flex items-center justify-between gap-2">
<h2
class="text-xl font-bold text-slate-900 dark:text-gray-100"
>
HSCStack
</h2>
<span
class="inline-flex items-center gap-1.5 rounded-lg bg-indigo-50 px-2.5 py-1 text-xs font-bold text-indigo-700 dark:bg-indigo-500/10 dark:text-indigo-300"
>
<Users class="h-3.5 w-3.5" />
1000+ Users
</span>
</div>

<p
class="mt-2.5 text-sm leading-relaxed text-slate-600 dark:text-gray-400"
>
HSC ও SSC শিক্ষার্থীদের পড়াশোনা গোছানোর জন্য সম্পূর্ণ
ফ্রি ও পরিচ্ছন্ন স্টাডি রিপোজিটরি। বিষয় ও অধ্যায়ভিত্তিক
হ্যান্ডনোট, লেকচার ক্লাস ও রিসোর্স।
</p>
</div>

<div
class="mt-6 border-t border-slate-100 pt-4 dark:border-gray-800"
>
<Link
href="/"
class="inline-flex w-full items-center justify-center gap-2 rounded-xl bg-indigo-600 px-4 py-2.5 text-sm font-bold text-white shadow-xs transition-all hover:bg-indigo-700 active:scale-98"
>
<span>Visit Platform</span>
<ArrowRight class="h-4 w-4" />
</Link>
</div>
</div>

<!-- Product 2: ResultRank -->
<div
class="group flex flex-col justify-between overflow-hidden rounded-2xl border border-slate-200 bg-white p-5 shadow-xs transition-all duration-200 hover:-translate-y-0.5 hover:shadow-md sm:p-6 dark:border-gray-800 dark:bg-gray-900 dark:hover:border-gray-700"
>
<div>
<div
class="aspect-[16/9] overflow-hidden rounded-xl bg-slate-100 dark:bg-gray-800"
>
<img
src="https://cdn.hscstack.site/images/og_resultrank.png"
alt="ResultRank"
class="h-full w-full object-cover transition-transform duration-300 group-hover:scale-105"
/>
</div>

<div class="mt-5 flex items-center justify-between gap-2">
<h2
class="text-xl font-bold text-slate-900 dark:text-gray-100"
>
ResultRank
</h2>
<span
class="inline-flex items-center gap-1.5 rounded-lg bg-blue-50 px-2.5 py-1 text-xs font-bold text-blue-700 dark:bg-blue-500/10 dark:text-blue-300"
>
<Users class="h-3.5 w-3.5" />
2500+ Users
</span>
</div>

<p
class="mt-2.5 text-sm leading-relaxed text-slate-600 dark:text-gray-400"
>
বাংলাদেশের সকল শিক্ষা বোর্ডের মেধা তালিকা, সেরা
প্রতিষ্ঠান ও বিস্তারিত GPA পরিসংখ্যান বিশ্লেষণ করুন একটি
সমন্বিত প্ল্যাটফর্মে।
</p>
</div>

<div
class="mt-6 border-t border-slate-100 pt-4 dark:border-gray-800"
>
<a
href="https://resultrank.hscstack.site"
target="_blank"
rel="noopener noreferrer"
class="inline-flex w-full items-center justify-center gap-2 rounded-xl bg-blue-600 px-4 py-2.5 text-sm font-bold text-white shadow-xs transition-all hover:bg-blue-700 active:scale-98"
>
<span>Visit ResultRank</span>
<ExternalLink class="h-4 w-4" />
</a>
</div>
</div>
</div>
</main>
</template>
1 change: 1 addition & 0 deletions routes/web.php
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@
Route::inertia('/join', 'platform/JoinTeam');
Route::inertia('/guide', 'ContributorGuide');
Route::inertia('/ai', 'ai/Index');
Route::inertia('/projects', 'Projects');

Route::get('/about-us', [AboutUsController::class, 'index']);

Expand Down
6 changes: 6 additions & 0 deletions tests/Feature/PublicPagesTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@
$response->assertStatus(200);
});

test('the projects page loads successfully', function () {
$response = $this->get('/projects');

$response->assertStatus(200);
});

test('non-existent public resources render the 404 error page', function () {
$response = $this->get('/resources/999999');

Expand Down