Skip to content

Commit 70438e6

Browse files
feat: add BoutiqueBot project and screenshots for all featured projects
1 parent de1e1ce commit 70438e6

8 files changed

Lines changed: 42 additions & 1 deletion
628 KB
Loading
578 KB
Loading
532 KB
Loading
618 KB
Loading
602 KB
Loading
581 KB
Loading

src/data/projects.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,27 @@ export interface Project {
44
description: string;
55
articleUrl: string;
66
repoUrl?: string;
7+
image?: string;
78
techStack: string[];
89
}
910

1011
export const featuredProjects: Project[] = [
12+
{
13+
title: "BoutiqueBot - Automated Retail & Telegram E-Commerce Bot",
14+
name: "boutiquebot",
15+
description: "Automated e-commerce & retail bot with real-time stock notifications, instant order alerts via Telegram, and automated inventory sync.",
16+
articleUrl: "https://www.youtube.com/watch?v=LjT4EP2kYHo",
17+
repoUrl: "https://github.com/networkandcode/boutique-bot",
18+
image: "/images/projects/boutique_bot_screenshot_1786124950528.jpg",
19+
techStack: ["Node.js", "Telegram Bot API", "E-Commerce", "Automation"]
20+
},
1121
{
1222
title: "BrailleBoard Web Application",
1323
name: "brailleboard",
1424
description: "Text-to-Braille conversion web application built with Appwrite backend, Next.js frontend, and Web Speech API for accessibility.",
1525
articleUrl: "https://networkandcode.hashnode.dev/text-to-braille-webpp-with-appwrite-nextjs-and-web-speech-api",
1626
repoUrl: "https://github.com/networkandcode/brailleboard",
27+
image: "/images/projects/brailleboard_screenshot_1786124966684.jpg",
1728
techStack: ["Next.js", "Appwrite", "Web Speech API", "React"]
1829
},
1930
{
@@ -22,6 +33,7 @@ export const featuredProjects: Project[] = [
2233
description: "Live cricket match scoring app with real-time score updates, match stats, and database management.",
2334
articleUrl: "https://dev.to/networkandcode/cricket-scoring-app-using-appwrite-nextjs-3730",
2435
repoUrl: "https://github.com/networkandcode/cricscore",
36+
image: "/images/projects/cricscore_screenshot_1786124994883.jpg",
2537
techStack: ["Next.js", "Appwrite", "TailwindCSS", "Node.js"]
2638
},
2739
{
@@ -30,6 +42,7 @@ export const featuredProjects: Project[] = [
3042
description: "Full-stack notes application featuring instant search, dynamic tags, and cloud database persistence.",
3143
articleUrl: "https://dev.to/networkandcode/notes-app-with-nextjs-2l4g",
3244
repoUrl: "https://github.com/networkandcode/notes-app",
45+
image: "/images/projects/notes_app_screenshot_1786125224920.jpg",
3346
techStack: ["Next.js", "Serverless", "React", "REST API"]
3447
},
3548
{
@@ -38,6 +51,7 @@ export const featuredProjects: Project[] = [
3851
description: "Comprehensive school administrative dashboard deployed on Linode cloud with student records, attendance, and role-based access.",
3952
articleUrl: "https://networkandcode.hashnode.dev/school-admin-app-with-nextjs-on-linode",
4053
repoUrl: "https://github.com/networkandcode/sms",
54+
image: "/images/projects/school_admin_screenshot_1786125016041.jpg",
4155
techStack: ["Next.js", "TypeScript", "Linode Cloud", "Docker"]
4256
},
4357
{
@@ -46,6 +60,7 @@ export const featuredProjects: Project[] = [
4660
description: "E-commerce web application backed by HarperDB NoSQL/SQL database and Next.js frontend rendering.",
4761
articleUrl: "https://networkandcode.hashnode.dev/online-shop-with-nextjs-and-harperdb",
4862
repoUrl: "https://github.com/networkandcode/shop",
63+
image: "/images/projects/shop_app_screenshot_1786125244408.jpg",
4964
techStack: ["Next.js", "HarperDB", "GraphQL", "React"]
5065
}
5166
];

src/pages/projects.astro

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ import { featuredProjects } from '../data/projects';
2424
<div class="projects-grid">
2525
{featuredProjects.map(proj => (
2626
<div class="glass-card project-card">
27+
{proj.image && (
28+
<div class="card-image-wrapper">
29+
<img src={proj.image} alt={`${proj.title} Screenshot`} class="project-image" loading="lazy" />
30+
</div>
31+
)}
2732
<div class="card-top">
2833
<span class="tag-badge">{proj.name}</span>
2934
<div class="pill-group">
@@ -36,7 +41,7 @@ import { featuredProjects } from '../data/projects';
3641
<p class="project-desc">{proj.description}</p>
3742
<div class="card-bottom">
3843
<a href={proj.articleUrl} target="_blank" rel="noopener" class="btn btn-primary btn-sm">
39-
Read Technical Case Study &rarr;
44+
{proj.articleUrl.includes('youtube') ? 'Watch Demo Video →' : 'Read Case Study '}
4045
</a>
4146
{proj.repoUrl && (
4247
<a href={proj.repoUrl} target="_blank" rel="noopener" class="repo-link">
@@ -121,6 +126,27 @@ import { featuredProjects } from '../data/projects';
121126
flex-direction: column;
122127
justify-content: space-between;
123128
gap: 1.25rem;
129+
overflow: hidden;
130+
}
131+
132+
.card-image-wrapper {
133+
width: calc(100% + 3.5rem);
134+
margin: -1.75rem -1.75rem 0.5rem -1.75rem;
135+
height: 180px;
136+
overflow: hidden;
137+
background: rgba(15, 23, 42, 0.6);
138+
border-bottom: 1px solid var(--border-glass);
139+
}
140+
141+
.project-image {
142+
width: 100%;
143+
height: 100%;
144+
object-fit: cover;
145+
transition: transform 0.4s ease;
146+
}
147+
148+
.project-card:hover .project-image {
149+
transform: scale(1.04);
124150
}
125151

126152
.card-top {

0 commit comments

Comments
 (0)