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
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -92,3 +92,6 @@ worktrees/
.impeccable/
DESIGN.md
PRODUCT.md

# cortexkit tool artifacts
.cortexkit/
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/).

## [Unreleased]

### Added

- Homepage **Reviews** section with testimonial cards (Product Hunt, App Store, and X quotes), trust badges, and prev/next navigation
- Content-driven reviews via `content/review.json` with Zod validation

## [v1.2.0] - 2026-03-11

### Changed
Expand Down
67 changes: 67 additions & 0 deletions content/review.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
{
"eyebrow": "Loved by our community",
"headline": "What people say after actually using what we build.",
"trustBadges": [
{
"id": "product-hunt",
"label": "Product Hunt",
"rating": "5.0",
"source": "product-hunt"
},
{
"id": "app-store",
"label": "App Store",
"rating": "5.0",
"source": "app-store"
}
],
"reviews": [
{
"id": "muhammad-yasir",
"quote": "I've been part of the Volvox community for a while, and I also had the chance to be one of the beta testers for Volvox Bot. Watching it evolve from the early builds to what it is now has been genuinely exciting. What stood out to me during testing wasn't just the moderation features themselves, but how much the team actually listened to feedback. If you manage a Discord server, you know that good moderation tools need to be reliable first — and that's something Volvox Bot has consistently focused on.",
"name": "Muhammad Yasir",
"role": "Beta tester, Volvox Bot",
"profilePicUrl": "https://media.discordapp.net/attachments/1526645020935848016/1527068732923314177/1773444230028.jfif?ex=6a59f9d5&is=6a58a855&hm=f0113572d44612377c2bb9c47c502b36a3f8af3f109e3fead03c85d26c15a02f&=&format=webp&width=533&height=533",
"rating": 5,
"source": "product-hunt",
"product": "Volvox Bot",
"featured": true
},
{
"id": "great-game-202",
"quote": "Decision Jar is an absolute game-changer AI decision maker app that instantly eliminates decision fatigue for couples. It's the 'why didn't this exist sooner' tool we've been missing.",
"name": "Great game 202",
"role": "Verified App Store Review",
"rating": 5,
"source": "app-store",
"product": "Decision Jar"
},
{
"id": "kathy-mchugh",
"quote": "Finally an app that reduces my headaches instead of adds to them. This app helps me and my partner decide dinner every night — the AI suggestions brought up ideas we would've never thought of.",
"name": "KathyMcHugh",
"role": "Verified App Store Review",
"rating": 5,
"source": "app-store",
"product": "Decision Jar"
},
{
"id": "thebapes",
"quote": "This app helped me and my girlfriend finally decide what we're going to do for dinner. And it even suggested ideas we didn't even think of.",
"name": "TheBapes",
"role": "Verified App Store Review",
"rating": 5,
"source": "app-store",
"product": "Decision Jar"
},
{
"id": "chimemaram1",
"quote": "Volvox the best bot ever",
"name": "@Chimemaram1",
"role": "on X",
"rating": 5,
"source": "x",
"product": "Volvox Bot"
}
Comment thread
rabden marked this conversation as resolved.
]
}
46 changes: 26 additions & 20 deletions content/team.json
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@
"id": "rabden",
"slug": "rabden",
"name": "Hossain Jahed",
"role": "Frontend Developer",
"role": "Developer",
"tagline": "Frontend Developer and builder.",
"bio": "I am a frontend developer excelling at modern web design and web motion. I am also a member of the Volvox community.",
"avatar": "https://github.com/rabden.png",
Expand All @@ -102,6 +102,12 @@
"Expo"
],
"projects": [
{
"name": "EaseMize UI",
"description": "A collection of 60+ high-fidelity reusable UI components with millions of monthly views and thousands of users.",
"role": "Frontend Developer",
"url": "https://easemize.21st.dev/"
},
{
"name": "Volvox Website",
"description": "Company website built with Next.js 15, React 19, and Tailwind CSS v4, framer motion and gsap",
Expand All @@ -115,43 +121,43 @@
"url": "https://img2m3.vercel.app"
},
{
"name": "AVE Engineers",
"description": "Professional engineering services for MEP, HVAC, and civil engineering benchmarks.",
"name": "Elegant Signature",
"description": "Web utility for creating beautiful animated digital signatures.",
"role": "Frontend Developer",
"url": "https://ave-engineers.vercel.app/"
"url": "https://signtature.vercel.app/"
},
{
"name": "ChintaPoradh",
"description": "Offline-capable platform for thought-provoking articles and literature.",
"name": "Volvox Bot",
"description": "Landing page and app UI for an AI-powered Discord bot with AI chat, auto-moderation, leveling, tickets, and a web dashboard.",
"role": "Frontend Developer",
"url": "https://chintaporadh-delta.vercel.app/"
"url": "https://volvox.bot/"
},
{
"name": "Elegant Signature",
"description": "Web utility for creating beautiful animated digital signatures.",
"name": "Sobers",
"description": "Landing page for a cross-platform recovery app connecting sponsors and sponsees in 12-step programs with sobriety tracking and progress timelines.",
"role": "Frontend Developer",
"url": "https://signtature.vercel.app/"
"url": "https://sobers.app/"
},
{
"name": "webcodeir",
"description": "Modern Web development platform for Static HTML/CSS/Javascript Site development.",
"name": "The Muslim Businesses",
"description": "Landing page for a movement building an independent Muslim trading bloc across tech, finance, energy, and manufacturing.",
"role": "Frontend Developer",
"url": "https://webcodeir.vercel.app/"
"url": "https://themuslimbusinesses.com/"
},
{
"name": "grochatt",
"description": "Dark-themed AI chat interface and prompt box UI component.",
"name": "Fifth Season",
"description": "Landing page for Fifth Season, Vivaldi Group's proprietary AI platform for building systems that compound business value.",
"role": "Frontend Developer",
"url": "https://grochatt.vercel.app/"
"url": "https://5thseason.vercel.app/"
},
{
"name": "EaseMize UI",
"description": "A collection of modern reusable UI components hosted on 21st.dev.",
"name": "Hone Compose",
"description": "Open-source Grammarly-alternative Chrome extension that fixes grammar and tone and paraphrases text in any field using your own LLM API.",
"role": "Frontend Developer",
"url": "https://21st.dev/easemize"
"url": "https://github.com/rabden/hone-compose"
}
],
"type": "marketer",
"type": "builder",
"githubUrl": "https://github.com/rabden",
"linkedinUrl": "",
"email": "easemize@gmail.com",
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
"@ai-sdk/openai": "^3.0.67",
"@ai-sdk/openai-compatible": "^2.0.48",
"@ai-sdk/react": "^3.0.198",
"@gsap/react": "^2.1.2",
"@next/third-parties": "^16.2.6",
"@phosphor-icons/react": "^2.1.10",
"@radix-ui/react-avatar": "^1.1.11",
Expand Down
14 changes: 14 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file added public/images/UI/calendar_cutout.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/UI/floating_ui_elements_cutout.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/UI/handshake_cutout.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/UI/laptop_cutout.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/UI/two_speech_bubble_cutout.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 0 additions & 12 deletions src/app/globals.css
Original file line number Diff line number Diff line change
Expand Up @@ -229,18 +229,6 @@
}

@layer base {
.noise {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.7' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.04'/%3E%3C/svg%3E");
pointer-events: none;
z-index: 9999;
opacity: 0.4;
}

.text-aurora {
background: linear-gradient(
110deg,
Expand Down
1 change: 0 additions & 1 deletion src/app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,6 @@ export default function RootLayout({
<body
className={`${jetbrainsMono.variable} ${manrope.variable} ${spaceGrotesk.variable} antialiased font-sans`}
>
<div className="noise" />
<SmoothScroll>
<SkipLink />
<CookieConsentProvider>
Expand Down
16 changes: 14 additions & 2 deletions src/app/page.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
import type { Metadata } from "next";
import { HomepageClient } from "@/components/homepage-client";
import { getAllPosts } from "@/lib/blog";
import { getAllExtendedProducts, getAllTeamMembers } from "@/lib/content";
import {
getAllExtendedProducts,
getAllTeamMembers,
getReviewsContent,
} from "@/lib/content";
import { reportError } from "@/lib/logger";

export const metadata: Metadata = {
Expand All @@ -16,11 +20,12 @@ export const revalidate = 3600;
* Renders the homepage server component with resilient data fetching.
*/
export default async function HomePage() {
const [blogPostsResult, teamResult, productsResult] =
const [blogPostsResult, teamResult, productsResult, reviewsResult] =
await Promise.allSettled([
getAllPosts(),
Promise.resolve(getAllTeamMembers()),
Promise.resolve(getAllExtendedProducts()),
Promise.resolve(getReviewsContent()),
]);

const blogPosts =
Expand All @@ -43,11 +48,18 @@ export default async function HomePage() {
reportError("Failed to load products for HomePage", productsResult.reason);
}

const reviewsContent =
reviewsResult.status === "fulfilled" ? reviewsResult.value : null;
if (reviewsResult.status === "rejected") {
reportError("Failed to load reviews for HomePage", reviewsResult.reason);
}

return (
<HomepageClient
blogPosts={blogPosts}
teamMembers={teamMembers}
products={products}
reviewsContent={reviewsContent}
/>
);
}
Loading