From bb04a4a9d39280b9db2714adc2265adc825e8ad1 Mon Sep 17 00:00:00 2001 From: Ayush Kumar Date: Fri, 12 Sep 2025 23:08:50 +0530 Subject: [PATCH 01/16] feat: enhance `Featured Talk` section with improved layout and video embed --- src/pages/Home.tsx | 58 ++++++++++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx index f613396..e153704 100644 --- a/src/pages/Home.tsx +++ b/src/pages/Home.tsx @@ -1,6 +1,6 @@ import { useEffect, useState } from "react"; import { Button } from "@/components/ui/button"; -import { Github, Linkedin, ArrowRight, Sparkles, Loader2 } from "lucide-react"; +import { Github, Linkedin, ArrowRight, Sparkles, Loader2, Play } from "lucide-react"; import { ContactModal } from "@/components/contact-modal"; import { Link } from "react-router-dom"; import { @@ -163,27 +163,41 @@ export default function Home() {
- {/* Video Embed */} -
-
-
- -
-
-

Featured Talk

-

- Deep dive into modern development practices and cloud architecture -

+ {/* Featured Talk */} +
+
+
+
+
+ Featured +
+
+ +
+
+
+ +
+
+

Featured Talk

+

Deep dive into modern development practices and cloud architecture

+
+
+ +
+ +
+
From 57f7d85d9e9e017e74af73089113c088d426c98a Mon Sep 17 00:00:00 2001 From: Ayush Kumar Date: Fri, 12 Sep 2025 23:21:58 +0530 Subject: [PATCH 02/16] feat: add site configuration and career timeline to portfolio --- src/config/career.config.ts | 157 +++++++++++++++++++++++ src/config/index.ts | 11 ++ src/config/site.config.ts | 246 ++++++++++++++++++++++++++++++++++++ src/pages/Home.tsx | 80 +++++------- 4 files changed, 445 insertions(+), 49 deletions(-) create mode 100644 src/config/career.config.ts create mode 100644 src/config/index.ts create mode 100644 src/config/site.config.ts diff --git a/src/config/career.config.ts b/src/config/career.config.ts new file mode 100644 index 0000000..8f0aab6 --- /dev/null +++ b/src/config/career.config.ts @@ -0,0 +1,157 @@ +export interface TimelineItem { + year: string; + title: string; + company: string; + description: string; + achievements?: string[]; + technologies?: string[]; + milestone?: boolean; +} + +export const careerTimeline: TimelineItem[] = [ + { + year: "2023-Present", + title: "Senior Software Engineer", + company: "Guidewire Software Inc.", + description: "Leading cloud infrastructure initiatives and developing AI-driven solutions for insurance technology platforms.", + achievements: [ + "Architected microservices handling 10M+ requests/day", + "Reduced deployment time by 60% through CI/CD optimization", + "Led team of 5 engineers on critical platform migration" + ], + technologies: ["Java", "Spring Boot", "AWS", "Kubernetes", "PostgreSQL"] + }, + { + year: "2022-2023", + title: "Software Development Engineer", + company: "Amazon", + description: "Developed scalable solutions for AWS services, focusing on distributed systems and performance optimization.", + achievements: [ + "Built service processing 100M+ events daily", + "Improved system latency by 40%", + "Contributed to 3 AWS service launches" + ], + technologies: ["Java", "Python", "DynamoDB", "Lambda", "CloudFormation"] + }, + { + year: "2021-2022", + title: "Software Engineer", + company: "Cleareye.ai", + description: "Pioneered computer vision solutions for quality control in manufacturing, working with cutting-edge AI technologies.", + achievements: [ + "Developed ML pipeline with 95% accuracy", + "Reduced inspection time by 70%", + "Deployed models serving 50+ manufacturing sites" + ], + technologies: ["Python", "TensorFlow", "Docker", "FastAPI", "MongoDB"] + }, + { + year: "2020-2021", + title: "Full Stack Developer", + company: "TechStartup Inc.", + description: "Built end-to-end features for a SaaS platform, from database design to frontend implementation.", + achievements: [ + "Launched 5 major features", + "Increased user engagement by 45%", + "Implemented real-time collaboration features" + ], + technologies: ["React", "Node.js", "PostgreSQL", "Redis", "Socket.io"] + }, + { + year: "2019", + title: "Started Tech Journey", + company: "University Projects", + description: "Began my journey in software development through academic projects and open-source contributions.", + milestone: true, + achievements: [ + "Completed 10+ personal projects", + "Contributed to 5 open-source projects", + "Won 2 hackathons" + ] + } +]; + +export const techStack = { + frontend: [ + "React", + "TypeScript", + "Next.js", + "Tailwind CSS", + "Redux", + "Vue.js", + "Material-UI", + "Framer Motion" + ], + backend: [ + "Node.js", + "Python", + "Java", + "Spring Boot", + "Express.js", + "FastAPI", + "GraphQL", + "PostgreSQL", + "MongoDB", + "Redis" + ], + tools: [ + "Docker", + "Kubernetes", + "AWS", + "Git", + "Jenkins", + "Terraform", + "GitHub Actions", + "Prometheus", + "Grafana", + "ElasticSearch" + ] +}; + +export const education = [ + { + degree: "Master of Science in Computer Science", + institution: "Stanford University", + year: "2019-2021", + description: "Specialized in Distributed Systems and Machine Learning", + achievements: [ + "GPA: 3.9/4.0", + "Research in distributed ML systems", + "Teaching Assistant for Advanced Algorithms" + ] + }, + { + degree: "Bachelor of Technology in Computer Science", + institution: "Indian Institute of Technology", + year: "2015-2019", + description: "Focus on Software Engineering and Data Structures", + achievements: [ + "Dean's List all semesters", + "President of Coding Club", + "Published 2 research papers" + ] + } +]; + +export const communityContributions = [ + { + title: "Open Source Contributor", + description: "Active contributor to various open-source projects including React, Node.js ecosystem, and cloud-native tools.", + stats: ["500+ GitHub stars", "100+ PRs merged", "50+ issues resolved"] + }, + { + title: "Technical Writer", + description: "Writing technical articles and tutorials to help developers learn new technologies and best practices.", + stats: ["20+ articles published", "100K+ views", "5K+ followers"] + }, + { + title: "Community Speaker", + description: "Regular speaker at tech conferences and meetups, sharing knowledge on cloud architecture and AI.", + stats: ["10+ talks delivered", "5 conferences", "3 workshops conducted"] + }, + { + title: "Mentor", + description: "Mentoring junior developers and students, helping them navigate their careers in technology.", + stats: ["20+ mentees", "100+ hours of mentoring", "Career guidance sessions"] + } +]; \ No newline at end of file diff --git a/src/config/index.ts b/src/config/index.ts new file mode 100644 index 0000000..6666c66 --- /dev/null +++ b/src/config/index.ts @@ -0,0 +1,11 @@ +// Central configuration exports +export { siteConfig } from './site.config'; +export type { SiteConfig } from './site.config'; + +export { + careerTimeline, + techStack, + education, + communityContributions +} from './career.config'; +export type { TimelineItem } from './career.config'; \ No newline at end of file diff --git a/src/config/site.config.ts b/src/config/site.config.ts new file mode 100644 index 0000000..5085ab7 --- /dev/null +++ b/src/config/site.config.ts @@ -0,0 +1,246 @@ +export const siteConfig = { + // Personal Information + personal: { + name: "Ayush Kumar", + initials: "AK", + email: "kumar.ayush.cs@gmail.com", + role: "Researcher, Developer, Writer", + tagline: "Engineer by trade, Designer by instinct, and Writer by habit", + shortBio: "Hi, I'm Ayush Kumar", + fullBio: `Hey there, I see you've stumbled across my portfolio. Since you're here, I'm Ayush. I'm a software engineer who likes building backend systems that actually hold up under pressure: scalable, resilient, and clean. I've got a bias for minimalism, so I keep things simple and straightforward wherever I can. Most of the time I'm experimenting with new tech, hacking together projects, or diving deep into cloud infrastructure and distributed systems. I'm also trying to pick up some guitar skills (slowly but surely), and when I need a break, fictional story-driven games have me hooked. Uncharted in particular β€” man, that's some serious storytelling and adventure. + +Pretty much always down to chat about code, cloud architectures, or why AI is either going to save us all or make us completely obsolete β€” haven't decided which yet! What brings you here?`, + aboutBio: `I work mostly with Go, Kubernetes, and cloud infrastructure β€” building backend systems that are meant to scale and stay up. My focus is on clean, maintainable architecture, automation, and performance. I've spent a lot of time designing microservices, setting up CI/CD pipelines, and getting things to run smoothly in production. I have a strong foundation in AI and data systems, with hands-on experience in applying machine learning where it genuinely improves outcomes β€” and the judgment to avoid it where simpler solutions are more effective. + +Outside of code, I write technical articles, contribute to open-source when I can, and keep learning whatever tool or system looks like it'll help me do better work. Not big on fluff. Just here to build useful stuff and keep improving.` + }, + + // Social Links + social: { + github: "https://github.com/roguepikachu", + linkedin: "https://www.linkedin.com/in/cs-ayush-kumar/", + githubUsername: "roguepikachu", + linkedinUsername: "cs-ayush-kumar" + }, + + // External Links + external: { + resumePath: "/resume.pdf", + featuredVideoUrl: "https://www.youtube.com/embed/MOkPoKh0-hA?si=DSxFyJUbzf3PMt9g", + meetupEventUrl: "https://www.meetup.com/collabnix/events/300163572/" + }, + + // Navigation + navigation: { + main: [ + { name: "Home", href: "/" }, + { name: "Projects", href: "/projects" }, + { name: "Publications", href: "/publications" }, + { name: "Blog", href: "/blog" }, + { name: "About", href: "/about" } + ] + }, + + // Page Metadata + pages: { + home: { + title: "Home", + description: "Welcome to my portfolio" + }, + projects: { + title: "Projects", + description: "A collection of my personal and professional projects." + }, + blog: { + title: "Blog", + description: "Sharing ideas, insights, and lessons learned from navigating the tech world." + }, + publications: { + title: "Publications", + description: "Academic papers, articles, and research publications" + }, + about: { + title: "About Me", + description: "Learn more about my journey and experience" + } + }, + + // Section Headings + sections: { + talks: { + title: "My Talks & Presentations", + description: "Sharing knowledge and insights with the community through talks, workshops, and presentations" + }, + featuredTalk: { + title: "Featured Talk", + subtitle: "Deep dive into modern development practices and cloud architecture" + }, + collabnixMeetup: { + title: "Collabnix Meetup", + subtitle: "Community Event", + description: "Engaged with the developer community to share insights on scalable systems, cloud architecture, and modern development practices." + }, + recentPosts: { + title: "Recent Blog Posts", + viewAllText: "View All Posts" + }, + featuredPublications: { + title: "Featured Publications", + viewAllText: "View All Publications" + }, + featuredProjects: { + title: "Featured Projects", + description: "Check out some of my latest work", + viewAllText: "View All Projects" + }, + professionalJourney: { + title: "Professional Journey" + }, + techStack: { + title: "Tech Stack", + categories: { + frontend: "Frontend", + backend: "Backend", + tools: "Tools & DevOps" + } + }, + education: { + title: "Education" + }, + openSource: { + title: "Open Source & Community" + } + }, + + // UI Labels + ui: { + buttons: { + contact: "Contact", + contactMe: "Contact Me", + signIn: "Sign In", + signOut: "Sign Out", + githubProfile: "GitHub Profile", + linkedin: "LinkedIn", + viewOnGithub: "View on GitHub", + code: "Code", + demo: "Demo", + liveDemo: "Live Demo", + downloadResume: "Download Resume", + returnHome: "Return to Home", + sendMagicLink: "Send Magic Link", + postComment: "Post Comment", + viewDetails: "View Details", + readMore: "Read More", + viewProject: "View Project", + featured: "Featured", + liveEvent: "Live Event" + }, + placeholders: { + searchGlobal: "Search blog posts, projects, publications...", + searchProjects: "Search projects...", + searchBlog: "Search blog posts...", + email: "name@example.com", + comment: "Write a comment..." + }, + filters: { + filterByTag: "Filter by tag", + allTags: "All Tags", + searchCategories: { + blog: "Blog Posts", + projects: "Projects", + publications: "Publications" + } + }, + badges: { + featured: "Featured", + liveEvent: "Live Event", + new: "New", + comingSoon: "Coming Soon" + } + }, + + // Loading States + loading: { + home: { + title: "Crafting digital experiences...", + message: "Loading the portfolio with passion, creativity, and a touch of magic" + }, + projects: { + title: "Building something awesome...", + message: "Compiling the latest projects and innovations" + }, + blog: { + title: "Loading amazing content...", + message: "Just a moment while we fetch the latest blog posts" + }, + publications: { + title: "Gathering research...", + message: "Loading publications and academic work" + } + }, + + // Messages & Notifications + messages: { + auth: { + signInRequired: "Please sign in to continue", + signInToVote: "Please sign in to vote", + signInToComment: "Please sign in to leave a comment.", + authFailed: "Authentication failed", + signInSuccess: "Successfully signed in", + signOutSuccess: "Successfully signed out", + magicLinkSent: "πŸŽ‰ Magic link sent! Check your email inbox and click the link to sign in.", + magicLinkDescription: "Enter your email to receive a magic link for instant sign-in" + }, + errors: { + pageNotFound: "Oops! Page not found", + pageNotFoundCode: "404", + voteFailure: "Failed to record vote", + loadError: "Failed to load content", + networkError: "Network error. Please try again.", + genericError: "Something went wrong. Please try again." + }, + success: { + emailCopied: "Email copied to clipboard", + phoneCopied: "Phone copied to clipboard", + linkCopied: "Link copied to clipboard", + saved: "Successfully saved", + deleted: "Successfully deleted" + }, + empty: { + noComments: "No comments yet. Be the first to comment!", + noProjects: "No projects found", + noPosts: "No blog posts found", + noPublications: "No publications found", + noResults: "No results found" + } + }, + + // OAuth Providers + auth: { + providers: { + google: "Google", + github: "GitHub", + facebook: "Facebook" + }, + modalTitle: "Sign in", + modalDescription: "Choose your preferred sign-in method" + }, + + // Footer + footer: { + copyright: "Β© 2024 Ayush Kumar. All rights reserved." + }, + + // Theme + theme: { + storageKey: "devscribe-theme" + }, + + // Router + router: { + basePath: "/portfolio" + } +}; + +// Type-safe config getter +export type SiteConfig = typeof siteConfig; \ No newline at end of file diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx index e153704..a049bcf 100644 --- a/src/pages/Home.tsx +++ b/src/pages/Home.tsx @@ -13,6 +13,7 @@ import { LoadingDots } from "../components/ui/LoadingDots"; import { delay } from "../utils/delay"; import { BlogPostCard } from "@/components/blog-post-card"; import { ProfileSlideshow } from "@/components/ProfileSlideshow"; +import { siteConfig } from "@/config"; export default function Home() { const [contactModalOpen, setContactModalOpen] = useState(false); @@ -64,11 +65,10 @@ export default function Home() {

- Crafting digital experiences... + {siteConfig.loading.home.title}

- Loading the portfolio with passion, creativity, and a touch of - magic + {siteConfig.loading.home.message}

@@ -87,56 +87,39 @@ export default function Home() {

- Researcher, Developer, Writer + {siteConfig.personal.role}

-

- Hey there, I see you’ve stumbled across my portfolio. Since - you’re here, I’m Ayush. I’m a software engineer who likes - building backend systems that actually hold up under pressure: - scalable, resilient, and clean. I’ve got a bias for - minimalism, so I keep things simple and straightforward - wherever I can. Most of the time I’m experimenting with new - tech, hacking together projects, or diving deep into cloud - infrastructure and distributed systems. I’m also trying to - pick up some guitar skills (slowly but surely), and when I - need a break, fictional story-driven games have me hooked. - Uncharted in particular β€” man, that’s some serious - storytelling and adventure. -

-

- Pretty much always down to chat about code, cloud - architectures, or why AI is either going to save us all or - make us completely obsolete β€” haven’t decided which yet! What - brings you here? +

+ {siteConfig.personal.fullBio}


@@ -155,10 +138,10 @@ export default function Home() {

- My Talks & Presentations + {siteConfig.sections.talks.title}

- Sharing knowledge and insights with the community through talks, workshops, and presentations + {siteConfig.sections.talks.description}

@@ -179,8 +162,8 @@ export default function Home() {
-

Featured Talk

-

Deep dive into modern development practices and cloud architecture

+

{siteConfig.sections.featuredTalk.title}

+

{siteConfig.sections.featuredTalk.subtitle}

@@ -188,7 +171,7 @@ export default function Home() {
@@ -187,36 +187,36 @@ export default function Home() { {/* Meetup Event */} -
-
-
-
-
+
+
+
+
+
{siteConfig.ui.badges.liveEvent}
-
-
-
- +
+
+
+
-

{siteConfig.sections.collabnixMeetup.title}

-

{siteConfig.sections.collabnixMeetup.subtitle}

+

{siteConfig.sections.collabnixMeetup.title}

+

{siteConfig.sections.collabnixMeetup.subtitle}

-

+

{siteConfig.sections.collabnixMeetup.description}

-
{/* Additional Talk Placeholder */} -
-
-

More Talks Coming Soon

-
+
+
+

More Talks Coming Soon

+
Coming Soon
-

+

Stay tuned for upcoming presentations and workshop sessions on distributed systems, AI/ML implementations, and cloud-native architectures.

@@ -245,14 +245,14 @@ export default function Home() { {/* Blog Posts Section */} {sectionConfig.blog && ( -
-
-
+
+
+
-

+

{siteConfig.sections.recentPosts.title}

-

+

Thoughts, ideas, and tutorials

@@ -262,7 +262,7 @@ export default function Home() {
-
+
{posts.slice(0, 3).map((post) => ( ))} @@ -273,14 +273,14 @@ export default function Home() { {/* Publications Section - Conditional based on sectionConfig */} {sectionConfig.publications && ( -
-
-
+
+
+
-

+

{siteConfig.sections.featuredPublications.title}

-

+

Academic papers and research articles

@@ -291,7 +291,7 @@ export default function Home() {
-
+
{featuredPublications.map((publication) => ( -
-
+
+
+
-

+

{siteConfig.sections.featuredProjects.title}

-

+

{siteConfig.sections.featuredProjects.description}

@@ -322,40 +322,40 @@ export default function Home() {
-
+
{projects .filter((p) => p.featured) .slice(0, 3) .map((project) => (
-
+
{/* Featured label */} -
+
{siteConfig.ui.badges.featured}
{/* Make the project title a clickable Link */} -

+

{project.title}

-

+

{project.description}

-
+
{project.tags.map((tag) => (
{tag}
))}
-
+
@@ -81,50 +82,50 @@ export default function Project() { } return ( -
-
+
+
{/* Back to projects link */} - + Back to all projects {/* Project header */}
-
-
+
+
{project.featured && ( - + Featured )}
-

{project.title}

+

{project.title}

-
+
{project.tags.map(tag => ( - + {tag} ))}
-
+
{project.demoUrl && ( @@ -132,44 +133,44 @@ export default function Project() {
{/* Voting buttons */} -
+
{/* Project content */} {project.readme ? ( -
+
) : ( -
-

{project.description}

-

For more details about this project, check out the GitHub repository.

+
+

{project.description}

+

For more details about this project, check out the GitHub repository.

)}
{/* Related projects */} {relatedProjects.length > 0 && ( -
-

Related Projects

-
+
+

Related Projects

+
{relatedProjects.map(proj => ( -

{proj.title}

-

{proj.description}

-
+

{proj.title}

+

{proj.description}

+
{proj.tags.slice(0, 2).map(tag => ( - + {tag} ))} - {proj.tags.length > 2 && +{proj.tags.length - 2}} + {proj.tags.length > 2 && +{proj.tags.length - 2}}
))} diff --git a/src/pages/Projects.module.css b/src/pages/Projects.module.css new file mode 100644 index 0000000..82888fd --- /dev/null +++ b/src/pages/Projects.module.css @@ -0,0 +1,201 @@ +/* Projects Page CSS Module */ + +/* Loading Section */ +.loadingContainer { + @apply px-4 py-12 md:px-6 md:py-16 lg:py-24; +} + +.loadingWrapper { + @apply mx-auto max-w-5xl; +} + +.loadingContent { + @apply flex flex-col items-center justify-center space-y-6; +} + +.loadingIconWrapper { + @apply relative; +} + +.loadingIcon { + @apply h-16 w-16 text-primary animate-pulse; +} + +.loadingTextWrapper { + @apply text-center space-y-2; +} + +.loadingTitle { + @apply text-2xl font-semibold; +} + +.loadingMessage { + @apply text-muted-foreground; +} + +/* Main Container */ +.container { + @apply px-4 py-12 md:px-6 md:py-16 lg:py-24; +} + +.wrapper { + @apply mx-auto max-w-5xl; +} + +/* Header Section */ +.headerSection { + @apply space-y-2 text-center; +} + +.title { + @apply text-3xl font-bold tracking-tighter sm:text-4xl md:text-5xl; +} + +.subtitle { + @apply mx-auto max-w-[700px] text-gray-500 md:text-xl/relaxed dark:text-gray-400; +} + +/* Filters Section */ +.filtersSection { + @apply mt-8 space-y-6; +} + +.filtersRow { + @apply flex flex-col gap-4 sm:flex-row; +} + +.searchWrapper { + @apply relative flex-1; +} + +.searchIcon { + @apply absolute left-2.5 top-2.5 h-4 w-4 text-muted-foreground; +} + +.searchInput { + @apply pl-8; +} + +.clearButton { + @apply absolute right-1 top-1/2 h-7 w-7 -translate-y-1/2; +} + +.clearIcon { + @apply h-4 w-4; +} + +.screenReaderOnly { + @apply sr-only; +} + +.selectWrapper { + @apply w-full sm:w-[180px]; +} + +.selectHeader { + @apply flex items-center justify-between; +} + +.selectTitle { + @apply text-sm font-medium sm:hidden; +} + +.clearButtonSmall { + @apply h-7 text-xs hover:bg-transparent hover:underline sm:hidden; +} + +.selectTrigger { + @apply w-full; +} + +/* Selected Tags */ +.selectedTagsHeader { + @apply hidden sm:flex items-center justify-between; +} + +.selectedTagsTitle { + @apply text-sm font-medium; +} + +.selectedTagsClear { + @apply h-7 text-xs hover:bg-transparent hover:underline; +} + +.selectedTagsContainer { + @apply mt-2 flex flex-wrap gap-2; +} + +.selectedTag { + @apply cursor-pointer; +} + +.selectedTagIcon { + @apply ml-1 h-3 w-3; +} + +/* Search Snippet */ +.snippetText { + @apply block text-xs mt-1 text-muted-foreground; +} + +.highlightMatch { + @apply px-1 rounded bg-primary/20 text-primary dark:bg-primary/40 dark:text-primary font-semibold; +} + +/* Project Grid */ +.projectGrid { + @apply mt-8 grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3; +} + +.projectCard { + @apply overflow-hidden rounded-lg border bg-card hover:shadow-md; +} + +.projectCardFeatured { + @apply overflow-hidden rounded-lg border bg-card hover:shadow-md ring-2 ring-primary/20; +} + +.projectCardInner { + @apply p-6 flex flex-col h-full; +} + +.featuredBadge { + @apply inline-flex items-center rounded-full bg-primary/10 px-2.5 py-0.5 text-xs font-semibold text-primary mb-4 self-start; +} + +.featuredSpacer { + @apply mb-4; +} + +.projectTitle { + @apply text-xl font-bold hover:text-primary; +} + +.projectDescription { + @apply mt-2 text-muted-foreground text-sm flex-grow; +} + +.projectTags { + @apply mt-4 flex flex-wrap gap-2; +} + +.projectTag { + @apply inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold; +} + +.projectActions { + @apply mt-6 pt-4 border-t flex items-center gap-3; +} + +.actionIcon { + @apply mr-1 h-3 w-3; +} + +/* No Results */ +.noResults { + @apply mt-16 text-center; +} + +.noResultsText { + @apply text-muted-foreground; +} \ No newline at end of file diff --git a/src/pages/Projects.tsx b/src/pages/Projects.tsx index c239050..ea55650 100644 --- a/src/pages/Projects.tsx +++ b/src/pages/Projects.tsx @@ -9,7 +9,7 @@ import { Project } from '@/types/project'; import { loadProjects } from '@/utils/content-loader'; import { LoadingDots } from '../components/ui/LoadingDots'; import { delay } from '../utils/delay'; -import { projectsStyles } from './projects.styles'; +import styles from './Projects.module.css'; import { siteConfig } from '@/config'; export default function Projects() { @@ -106,9 +106,9 @@ export default function Projects() { const match = plainText.slice(idx, idx + query.length); const after = plainText.slice(idx + query.length, end); return ( - + ...{before} - {match} + {match} {after}... ); @@ -116,15 +116,15 @@ export default function Projects() { if (loading) { return ( -
-
-
-
- +
+
+
+
+
-
-

Building something awesome...

-

Compiling the latest projects and innovations

+
+

Building something awesome...

+

Compiling the latest projects and innovations

@@ -134,24 +134,24 @@ export default function Projects() { } return ( -
-
-
-

Projects

-

+

+
+
+

Projects

+

A collection of my personal and professional projects.

{/* Filters */} -
-
-
- +
+
+
+ setSearchQuery(e.target.value)} /> @@ -159,22 +159,22 @@ export default function Projects() { )}
-
-
-

Filter by tag

+
+
+

Filter by tag

{selectedTags.length > 0 && (
setSearchQuery(e.target.value)} /> @@ -195,25 +196,25 @@ export default function Publications() { )}
-
+
{/* Tags filter */}
-
-

Filter by tag

+
+

Filter by tag

{selectedTags.length > 0 && (
{/* Tags dropdown */} -
+
- + @@ -290,9 +291,9 @@ export default function Publications() {
{/* Publications grid */} -
+
{sortedPublications.length > 0 ? ( -
+
{sortedPublications.map(publication => { let snippet = null; if (searchQuery) { @@ -305,42 +306,40 @@ export default function Publications() { return (
-
+
{/* Featured label (or placeholder) above the title for alignment */} {publication.featured ? ( -
+
Featured
) : ( -
+
)} -

{publication.title}

+

{publication.title}

-

{publication.summary}

+

{publication.summary}

{snippet} -
+
{publication.tags.map(tag => ( -
+
{tag}
))}
-
+
{publication.doiUrl && ( @@ -352,9 +351,9 @@ export default function Publications() { })}
) : ( -
-

No publications found matching your criteria.

-
From f0c9fc5d84442d39950aaf63aa258cef12d9462c Mon Sep 17 00:00:00 2001 From: Ayush Kumar Date: Sat, 13 Sep 2025 00:27:31 +0530 Subject: [PATCH 06/16] chore: remove unused style files for various components and pages to streamline the codebase and improve maintainability. --- src/components/auth-button.styles.ts | 86 -------------- src/components/blog-comment.styles.ts | 44 ------- src/components/blog-post-card.styles.ts | 38 ------ src/components/career-timeline.styles.ts | 70 ------------ src/components/comment-section.styles.ts | 33 ------ src/components/contact-modal.styles.ts | 32 ------ src/components/layout.styles.ts | 22 ---- src/components/main-nav.styles.ts | 101 ---------------- src/components/profile-slideshow.styles.ts | 52 --------- src/components/publication-card.styles.ts | 34 ------ src/components/voting-buttons.styles.ts | 20 ---- src/pages/about.styles.ts | 64 ----------- src/pages/blog.styles.ts | 64 ----------- src/pages/blogPost.styles.ts | 123 -------------------- src/pages/home.styles.ts | 127 --------------------- src/pages/notFound.styles.ts | 10 -- src/pages/project.styles.ts | 84 -------------- src/pages/projects.styles.ts | 82 ------------- src/pages/publication.styles.ts | 78 ------------- src/pages/publications.styles.ts | 105 ----------------- 20 files changed, 1269 deletions(-) delete mode 100644 src/components/auth-button.styles.ts delete mode 100644 src/components/blog-comment.styles.ts delete mode 100644 src/components/blog-post-card.styles.ts delete mode 100644 src/components/career-timeline.styles.ts delete mode 100644 src/components/comment-section.styles.ts delete mode 100644 src/components/contact-modal.styles.ts delete mode 100644 src/components/layout.styles.ts delete mode 100644 src/components/main-nav.styles.ts delete mode 100644 src/components/profile-slideshow.styles.ts delete mode 100644 src/components/publication-card.styles.ts delete mode 100644 src/components/voting-buttons.styles.ts delete mode 100644 src/pages/about.styles.ts delete mode 100644 src/pages/blog.styles.ts delete mode 100644 src/pages/blogPost.styles.ts delete mode 100644 src/pages/home.styles.ts delete mode 100644 src/pages/notFound.styles.ts delete mode 100644 src/pages/project.styles.ts delete mode 100644 src/pages/projects.styles.ts delete mode 100644 src/pages/publication.styles.ts delete mode 100644 src/pages/publications.styles.ts diff --git a/src/components/auth-button.styles.ts b/src/components/auth-button.styles.ts deleted file mode 100644 index b94e107..0000000 --- a/src/components/auth-button.styles.ts +++ /dev/null @@ -1,86 +0,0 @@ -// Auth button component style classes - -export const authButtonStyles = { - // Button states - button: { - loading: "cursor-not-allowed opacity-50" - }, - - // User menu - userMenu: { - trigger: { - wrapper: "flex items-center gap-2", - avatar: "h-8 w-8", - avatarFallback: "text-xs", - name: "hidden sm:inline-block text-sm font-medium" - }, - - dropdown: { - wrapper: "w-56", - - header: { - wrapper: "flex items-center gap-3 p-2", - avatar: "h-10 w-10", - avatarFallback: "text-sm", - info: { - wrapper: "flex-1 space-y-1", - name: "text-sm font-medium", - email: "text-xs text-muted-foreground" - } - }, - - separator: "my-1", - - item: { - base: "relative flex cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors", - default: "hover:bg-accent hover:text-accent-foreground", - destructive: "text-destructive hover:bg-destructive/10" - } - } - }, - - // Auth dialog - dialog: { - content: { - wrapper: "sm:max-w-md", - - header: { - title: "", - description: "" - }, - - providers: { - wrapper: "space-y-3", - - button: { - base: "w-full justify-start", - icon: "mr-2 h-4 w-4" - } - }, - - divider: { - wrapper: "relative my-4", - line: "absolute inset-0 flex items-center", - border: "w-full border-t", - text: { - wrapper: "relative flex justify-center text-xs uppercase", - background: "bg-background px-2 text-muted-foreground" - } - }, - - emailForm: { - wrapper: "space-y-4", - input: "w-full", - button: { - base: "w-full", - loading: "cursor-not-allowed opacity-50" - } - }, - - success: { - wrapper: "rounded-lg bg-green-50 p-4 dark:bg-green-900/20", - text: "text-sm text-green-800 dark:text-green-200" - } - } - } -}; \ No newline at end of file diff --git a/src/components/blog-comment.styles.ts b/src/components/blog-comment.styles.ts deleted file mode 100644 index bd0220e..0000000 --- a/src/components/blog-comment.styles.ts +++ /dev/null @@ -1,44 +0,0 @@ -// Blog comment component style classes - -export const blogCommentStyles = { - comment: { - wrapper: "space-y-3", - - header: { - wrapper: "flex items-start justify-between", - - author: { - wrapper: "flex items-center gap-2", - avatar: "h-8 w-8 rounded-full", - avatarFallback: "text-xs", - name: "font-medium", - date: "text-sm text-muted-foreground" - } - }, - - content: "text-sm", - - actions: { - wrapper: "flex items-center gap-4", - - likeButton: { - base: "flex items-center gap-1 text-sm", - default: "text-muted-foreground hover:text-foreground", - liked: "text-primary" - }, - - replyButton: "text-sm text-muted-foreground hover:text-foreground" - }, - - replyForm: { - wrapper: "mt-3 space-y-3 rounded-lg bg-muted/50 p-3", - textarea: "min-h-[80px] resize-none text-sm", - actions: "flex justify-end gap-2", - button: "h-8 text-xs" - } - }, - - replies: { - wrapper: "ml-8 mt-3 space-y-3 border-l-2 pl-4" - } -}; \ No newline at end of file diff --git a/src/components/blog-post-card.styles.ts b/src/components/blog-post-card.styles.ts deleted file mode 100644 index c771f22..0000000 --- a/src/components/blog-post-card.styles.ts +++ /dev/null @@ -1,38 +0,0 @@ -// Blog post card component style classes - -export const blogPostCardStyles = { - card: { - wrapper: "group relative overflow-hidden rounded-lg border bg-card transition-all hover:shadow-lg", - link: "absolute inset-0 z-10", - content: "p-6", - - badges: { - wrapper: "mb-3 flex items-center gap-2", - pinned: "inline-flex items-center rounded-full bg-primary/10 px-2.5 py-0.5 text-xs font-semibold text-primary", - new: "inline-flex items-center rounded-full bg-green-500/10 px-2.5 py-0.5 text-xs font-semibold text-green-600 dark:text-green-400", - icon: "mr-1 h-3 w-3" - }, - - title: "mb-2 text-xl font-bold group-hover:text-primary", - excerpt: "mb-4 line-clamp-2 text-sm text-muted-foreground", - - tags: { - wrapper: "mb-4 flex flex-wrap gap-2", - tag: "rounded-full border px-2.5 py-0.5 text-xs" - }, - - footer: { - wrapper: "flex items-center justify-between text-xs text-muted-foreground", - author: "flex items-center gap-2", - avatar: "h-6 w-6 rounded-full", - avatarFallback: "text-xs", - - meta: { - wrapper: "flex items-center gap-3", - date: "", - readTime: "flex items-center gap-1", - icon: "h-3 w-3" - } - } - } -}; \ No newline at end of file diff --git a/src/components/career-timeline.styles.ts b/src/components/career-timeline.styles.ts deleted file mode 100644 index 2892b85..0000000 --- a/src/components/career-timeline.styles.ts +++ /dev/null @@ -1,70 +0,0 @@ -// Career timeline component style classes - -export const careerTimelineStyles = { - container: "space-y-8", - - header: { - wrapper: "text-center mb-8", - title: "text-2xl font-bold" - }, - - timeline: { - wrapper: "relative", - line: "absolute left-8 top-0 bottom-0 w-0.5 bg-border", - - item: { - wrapper: "relative flex gap-6 pb-8 last:pb-0", - - marker: { - wrapper: "relative z-10 flex h-16 w-16 items-center justify-center rounded-full border-4 border-background", - default: "bg-muted", - milestone: "bg-primary", - icon: "h-6 w-6", - defaultIcon: "text-muted-foreground", - milestoneIcon: "text-primary-foreground" - }, - - content: { - wrapper: "flex-1 space-y-4", - - header: { - wrapper: "space-y-1", - period: "text-sm text-muted-foreground", - title: "text-xl font-bold", - company: "text-muted-foreground" - }, - - description: "text-muted-foreground", - - role: { - wrapper: "rounded-lg border bg-card p-4 space-y-3", - header: { - wrapper: "flex items-start justify-between", - titleWrapper: "", - title: "font-semibold", - period: "text-sm text-muted-foreground", - badge: "text-xs bg-primary/10 text-primary px-2 py-0.5 rounded-full" - }, - - achievements: { - wrapper: "space-y-2", - title: "text-sm font-medium", - list: "list-disc list-inside space-y-1 text-sm text-muted-foreground" - }, - - responsibilities: { - wrapper: "space-y-2", - title: "text-sm font-medium", - list: "list-disc list-inside space-y-1 text-sm text-muted-foreground" - }, - - milestones: { - wrapper: "flex flex-wrap gap-2", - title: "text-sm font-medium mb-2", - badge: "inline-flex items-center rounded-full bg-secondary/20 px-2.5 py-0.5 text-xs" - } - } - } - } - } -}; \ No newline at end of file diff --git a/src/components/comment-section.styles.ts b/src/components/comment-section.styles.ts deleted file mode 100644 index 2d21e52..0000000 --- a/src/components/comment-section.styles.ts +++ /dev/null @@ -1,33 +0,0 @@ -// Comment section component style classes - -export const commentSectionStyles = { - container: "space-y-6", - - header: { - wrapper: "flex items-center justify-between", - title: "text-xl font-bold", - count: "text-sm text-muted-foreground" - }, - - form: { - wrapper: "space-y-4", - textarea: "min-h-[100px] resize-none", - actions: "flex justify-end", - submitButton: { - base: "", - loading: "cursor-not-allowed opacity-50" - } - }, - - signInPrompt: { - wrapper: "rounded-lg border border-dashed p-6 text-center", - text: "text-muted-foreground", - button: "mt-2" - }, - - comments: { - loading: "py-8 text-center text-muted-foreground", - empty: "py-8 text-center text-muted-foreground", - list: "space-y-4" - } -}; \ No newline at end of file diff --git a/src/components/contact-modal.styles.ts b/src/components/contact-modal.styles.ts deleted file mode 100644 index 83dc581..0000000 --- a/src/components/contact-modal.styles.ts +++ /dev/null @@ -1,32 +0,0 @@ -// Contact modal component style classes - -export const contactModalStyles = { - // Dialog content - content: { - wrapper: "", - header: { - title: "", - description: "" - } - }, - - // Contact info - info: { - wrapper: "space-y-4", - - item: { - wrapper: "flex items-center justify-between rounded-lg border p-4", - label: "text-sm font-medium text-muted-foreground", - valueWrapper: "flex items-center gap-2", - value: "font-medium", - copyButton: "h-8 w-8", - copyIcon: "h-4 w-4" - } - }, - - // Footer - footer: { - wrapper: "flex justify-end", - closeButton: "" - } -}; \ No newline at end of file diff --git a/src/components/layout.styles.ts b/src/components/layout.styles.ts deleted file mode 100644 index bb53f1e..0000000 --- a/src/components/layout.styles.ts +++ /dev/null @@ -1,22 +0,0 @@ -// Layout component style classes - -export const layoutStyles = { - // Main layout - layout: "min-h-screen bg-background", - main: "flex-1", - - // Footer - footer: { - wrapper: "border-t bg-muted/50", - container: "container px-4 py-8 md:px-6", - content: "flex flex-col items-center justify-between gap-4 md:flex-row", - - copyright: "text-sm text-muted-foreground", - - links: { - wrapper: "flex gap-4", - link: "text-sm text-muted-foreground hover:text-foreground", - icon: "h-4 w-4" - } - } -}; \ No newline at end of file diff --git a/src/components/main-nav.styles.ts b/src/components/main-nav.styles.ts deleted file mode 100644 index f0c8f3e..0000000 --- a/src/components/main-nav.styles.ts +++ /dev/null @@ -1,101 +0,0 @@ -// Main navigation component style classes - -export const mainNavStyles = { - // Header - header: "sticky top-0 z-50 w-full border-b bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60", - - // Container - container: "container flex h-16 items-center px-4 md:px-6", - - // Logo/Brand - brand: { - link: "flex items-center gap-2 font-semibold", - avatar: "h-8 w-8", - avatarFallback: "bg-primary text-primary-foreground text-xs", - name: "hidden sm:inline-block" - }, - - // Desktop Navigation - desktop: { - nav: "hidden md:flex md:flex-1 md:items-center md:justify-center", - list: "flex gap-6", - link: { - base: "text-sm font-medium transition-colors hover:text-primary", - inactive: "text-muted-foreground", - active: "text-foreground" - } - }, - - // Search - search: { - wrapper: "ml-auto mr-4 hidden lg:block", - container: "relative w-64", - inputWrapper: "relative", - icon: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground", - input: "w-full pl-10 pr-4 py-2 text-sm", - - // Search results dropdown - results: { - wrapper: "absolute top-full mt-2 w-full rounded-md border bg-popover p-2 shadow-lg", - empty: "p-4 text-center text-sm text-muted-foreground", - - section: { - wrapper: "mb-4 last:mb-0", - title: "mb-2 px-2 text-xs font-semibold text-muted-foreground", - list: "space-y-1", - - item: { - link: "flex items-center justify-between rounded-md px-2 py-1.5 text-sm hover:bg-muted", - title: "font-medium", - type: "text-xs text-muted-foreground" - } - } - } - }, - - // Actions - actions: { - wrapper: "ml-auto flex items-center gap-2", - contactButton: "hidden sm:inline-flex" - }, - - // Mobile menu - mobile: { - trigger: "inline-flex md:hidden", - triggerIcon: "h-5 w-5", - - // Sheet/Drawer - sheet: { - content: "flex flex-col", - - header: { - wrapper: "flex items-center gap-2 px-4 py-6 border-b", - avatar: "h-10 w-10", - avatarFallback: "bg-primary text-primary-foreground", - name: "text-lg font-semibold" - }, - - nav: { - wrapper: "flex-1 px-4 py-6", - list: "space-y-4", - link: { - base: "flex items-center text-lg font-medium transition-colors hover:text-primary", - inactive: "text-muted-foreground", - active: "text-foreground" - } - }, - - search: { - wrapper: "px-4 pb-4", - inputWrapper: "relative", - icon: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground", - input: "w-full pl-10 pr-4" - }, - - actions: { - wrapper: "border-t px-4 py-4", - contactButton: "w-full" - } - } - } -}; \ No newline at end of file diff --git a/src/components/profile-slideshow.styles.ts b/src/components/profile-slideshow.styles.ts deleted file mode 100644 index f10458e..0000000 --- a/src/components/profile-slideshow.styles.ts +++ /dev/null @@ -1,52 +0,0 @@ -// Profile slideshow component style classes - -export const profileSlideshowStyles = { - container: "relative w-full max-w-md", - - slideshow: { - wrapper: "relative aspect-square overflow-hidden rounded-2xl bg-gradient-to-br from-primary/20 to-secondary/20", - - slide: { - base: "absolute inset-0 transition-opacity duration-1000", - active: "opacity-100", - inactive: "opacity-0" - }, - - image: "h-full w-full object-cover", - - overlay: { - wrapper: "absolute inset-0 bg-gradient-to-t from-black/60 via-transparent to-transparent", - - caption: { - wrapper: "absolute bottom-0 left-0 right-0 p-6 text-white", - text: "text-lg font-semibold", - date: "text-sm opacity-90" - } - } - }, - - indicators: { - wrapper: "absolute bottom-4 left-1/2 flex -translate-x-1/2 gap-2", - - dot: { - base: "h-2 w-2 rounded-full transition-all", - active: "w-6 bg-white", - inactive: "bg-white/50" - } - }, - - controls: { - button: { - base: "absolute top-1/2 -translate-y-1/2 rounded-full bg-white/20 p-2 backdrop-blur-sm transition-all hover:bg-white/30", - prev: "left-4", - next: "right-4" - }, - - icon: "h-5 w-5 text-white" - }, - - status: { - wrapper: "absolute top-4 right-4 rounded-full bg-white/20 px-3 py-1 backdrop-blur-sm", - text: "text-xs text-white" - } -}; \ No newline at end of file diff --git a/src/components/publication-card.styles.ts b/src/components/publication-card.styles.ts deleted file mode 100644 index 9edb049..0000000 --- a/src/components/publication-card.styles.ts +++ /dev/null @@ -1,34 +0,0 @@ -// Publication card component style classes - -export const publicationCardStyles = { - card: { - wrapper: "group relative rounded-lg border bg-card p-6 transition-all hover:shadow-lg", - - header: { - wrapper: "mb-3 flex items-start justify-between", - title: "text-lg font-bold group-hover:text-primary", - badge: "inline-flex items-center rounded-full bg-primary/10 px-2.5 py-0.5 text-xs font-semibold text-primary" - }, - - authors: "mb-2 text-sm text-muted-foreground line-clamp-1", - - meta: { - wrapper: "mb-3 flex flex-wrap gap-2 text-xs text-muted-foreground", - conference: "font-medium", - year: "" - }, - - abstract: "mb-4 line-clamp-3 text-sm text-muted-foreground", - - tags: { - wrapper: "mb-4 flex flex-wrap gap-2", - tag: "rounded-full border px-2.5 py-0.5 text-xs" - }, - - actions: { - wrapper: "flex items-center gap-2", - button: "", - icon: "mr-1 h-3 w-3" - } - } -}; \ No newline at end of file diff --git a/src/components/voting-buttons.styles.ts b/src/components/voting-buttons.styles.ts deleted file mode 100644 index 03e9d06..0000000 --- a/src/components/voting-buttons.styles.ts +++ /dev/null @@ -1,20 +0,0 @@ -// Voting buttons component style classes - -export const votingButtonsStyles = { - container: "flex items-center gap-4 rounded-full border bg-card px-4 py-2", - - button: { - base: "group relative rounded-full p-2 transition-colors", - default: "hover:bg-muted", - active: "text-primary", - disabled: "cursor-not-allowed opacity-50" - }, - - icon: { - base: "h-5 w-5 transition-transform", - hover: "group-hover:scale-110", - active: "scale-110" - }, - - count: "min-w-[2rem] text-center font-medium" -}; \ No newline at end of file diff --git a/src/pages/about.styles.ts b/src/pages/about.styles.ts deleted file mode 100644 index 149ec01..0000000 --- a/src/pages/about.styles.ts +++ /dev/null @@ -1,64 +0,0 @@ -// About page style classes organized for better maintainability - -export const aboutStyles = { - // Main Container - container: "container px-4 py-12 md:px-6 md:py-16 lg:py-24", - wrapper: "mx-auto max-w-4xl", - - // Header Section - header: { - wrapper: "space-y-2 text-center", - title: "text-3xl font-bold tracking-tighter sm:text-4xl md:text-5xl", - subtitle: "mx-auto max-w-[700px] text-gray-500 md:text-xl/relaxed dark:text-gray-400" - }, - - // Profile Section - profile: { - grid: "mt-12 grid gap-8 md:grid-cols-2 md:items-start", - imageWrapper: "aspect-square overflow-hidden rounded-xl border", - imageContainer: "h-full w-full flex items-center justify-center bg-muted", - imageContent: "flex items-center justify-center h-full w-full bg-gradient-to-br from-primary/20 to-secondary text-6xl font-bold text-primary", - contentWrapper: "flex flex-col justify-center", - name: "text-2xl font-bold", - bio: "mt-4 text-muted-foreground whitespace-pre-line", - buttons: "mt-6 flex flex-wrap gap-3", - buttonIcon: "mr-2 h-4 w-4" - }, - - // Section Separator - separator: "my-12", - - // Tech Stack Section - techStack: { - section: "space-y-8", - title: "text-2xl font-bold", - grid: "grid gap-6 sm:grid-cols-2 md:grid-cols-3", - card: "rounded-lg border p-6", - cardTitle: "font-bold text-lg mb-4", - badges: "flex flex-wrap gap-2" - }, - - // Education Section - education: { - section: "space-y-8", - title: "text-2xl font-bold", - card: "rounded-lg border p-6", - cardHeader: "flex flex-wrap items-start justify-between gap-2", - degree: "font-bold", - institution: "text-muted-foreground", - period: "", - description: "mt-4 text-muted-foreground" - }, - - // Open Source Section - openSource: { - section: "space-y-8", - title: "text-2xl font-bold", - grid: "grid gap-6 sm:grid-cols-2", - card: "rounded-lg border p-6", - cardTitle: "font-bold text-lg", - cardDescription: "mt-2 text-muted-foreground", - link: "inline-flex items-center", - linkIcon: "ml-1 h-3 w-3" - } -}; \ No newline at end of file diff --git a/src/pages/blog.styles.ts b/src/pages/blog.styles.ts deleted file mode 100644 index a59cfbe..0000000 --- a/src/pages/blog.styles.ts +++ /dev/null @@ -1,64 +0,0 @@ -// Blog page style classes - -export const blogStyles = { - // Loading state - loading: { - container: "container px-4 py-12 md:px-6 md:py-16 lg:py-24", - wrapper: "mx-auto max-w-5xl", - content: "flex flex-col items-center justify-center space-y-6", - iconWrapper: "relative", - icon: "h-16 w-16 text-primary animate-pulse", - textWrapper: "text-center space-y-2", - title: "text-2xl font-semibold", - message: "text-muted-foreground" - }, - - // Main container - container: "container px-4 py-12 md:px-6 md:py-16 lg:py-24", - wrapper: "mx-auto max-w-6xl", - - // Header - header: { - wrapper: "mb-10 text-center", - title: "text-3xl font-bold tracking-tight sm:text-4xl md:text-5xl", - description: "mx-auto mt-3 max-w-2xl text-muted-foreground sm:text-lg" - }, - - // Search and filters - filters: { - wrapper: "mb-8 space-y-4", - searchWrapper: "relative", - searchIcon: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground", - searchInput: "w-full pl-10 pr-10", - clearButton: "absolute right-2 top-1/2 -translate-y-1/2", - clearIcon: "h-4 w-4", - - tagFilter: { - wrapper: "flex flex-col gap-4 sm:flex-row sm:items-center", - label: "text-sm font-medium", - selectWrapper: "flex-1", - clearButton: "px-3" - }, - - selectedTags: { - wrapper: "flex flex-wrap gap-2", - label: "text-sm font-medium text-muted-foreground", - tags: "flex flex-wrap gap-2", - tag: "inline-flex items-center gap-1 rounded-full border bg-primary/10 px-3 py-1 text-sm", - removeButton: "ml-1 rounded-full hover:bg-primary/20", - removeIcon: "h-3 w-3" - } - }, - - // Blog grid - grid: "grid gap-6 sm:grid-cols-2 lg:grid-cols-3", - - // Empty state - empty: { - container: "py-12 text-center", - icon: "mx-auto h-12 w-12 text-muted-foreground/50", - title: "mt-4 text-lg font-semibold", - message: "mt-2 text-sm text-muted-foreground", - clearButton: "mt-4" - } -}; \ No newline at end of file diff --git a/src/pages/blogPost.styles.ts b/src/pages/blogPost.styles.ts deleted file mode 100644 index 23bde4a..0000000 --- a/src/pages/blogPost.styles.ts +++ /dev/null @@ -1,123 +0,0 @@ -// BlogPost page style classes - -export const blogPostStyles = { - // Loading state - loading: { - container: "container px-4 py-12 md:px-6 md:py-16 lg:py-24", - wrapper: "mx-auto max-w-4xl", - content: "flex flex-col items-center justify-center space-y-6", - iconWrapper: "relative", - icon: "h-16 w-16 text-primary animate-pulse", - textWrapper: "text-center space-y-2", - title: "text-2xl font-semibold", - message: "text-muted-foreground" - }, - - // Error state - error: { - container: "container px-4 py-12 md:px-6 md:py-16 lg:py-24", - wrapper: "mx-auto max-w-4xl text-center", - title: "text-2xl font-bold", - link: "mt-4 inline-flex items-center text-primary hover:underline", - icon: "ml-2 h-4 w-4" - }, - - // Main container - container: "container px-4 py-8 md:px-6", - wrapper: "mx-auto max-w-4xl", - - // Back link - backLink: "mb-6 inline-flex items-center text-sm text-muted-foreground hover:text-foreground", - backIcon: "mr-2 h-4 w-4", - - // Article - article: { - wrapper: "", - - header: { - wrapper: "mb-8", - badges: "mb-4 flex flex-wrap gap-2", - badge: { - pinned: "inline-flex items-center rounded-full bg-primary/10 px-3 py-1 text-xs font-semibold text-primary", - new: "inline-flex items-center rounded-full bg-green-500/10 px-3 py-1 text-xs font-semibold text-green-600 dark:text-green-400", - icon: "mr-1 h-3 w-3" - }, - title: "mb-2 text-3xl font-bold tracking-tight sm:text-4xl", - meta: { - wrapper: "flex flex-wrap items-center gap-4 text-sm text-muted-foreground", - author: "flex items-center gap-2", - avatar: "h-8 w-8 rounded-full bg-primary/10", - avatarFallback: "text-xs", - date: "", - readTime: "flex items-center gap-1", - icon: "h-3 w-3" - }, - tags: { - wrapper: "mt-4 flex flex-wrap gap-2", - tag: "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs" - } - }, - - content: { - wrapper: "prose prose-gray dark:prose-invert max-w-none", - styles: ` - prose-headings:scroll-mt-20 - prose-h1:text-3xl - prose-h2:text-2xl - prose-h3:text-xl - prose-a:text-primary - prose-a:no-underline - prose-a:hover:underline - prose-img:rounded-lg - prose-pre:bg-muted - prose-code:rounded - prose-code:bg-muted - prose-code:px-1 - prose-code:py-0.5 - prose-code:before:content-[''] - prose-code:after:content-[''] - ` - } - }, - - // Share section - share: { - wrapper: "my-8 border-y py-6", - label: "mb-3 text-sm font-medium", - buttons: "flex flex-wrap gap-3", - button: "inline-flex items-center gap-2 rounded-full border px-4 py-2 text-sm hover:bg-muted", - icon: "h-4 w-4", - copyButton: { - base: "inline-flex items-center gap-2 rounded-full border px-4 py-2 text-sm", - default: "hover:bg-muted", - copied: "border-green-500 bg-green-500/10 text-green-600 dark:text-green-400" - } - }, - - // Voting section - voting: { - wrapper: "my-8 flex justify-center" - }, - - // Navigation - navigation: { - wrapper: "my-12 grid gap-4 sm:grid-cols-2", - link: { - wrapper: "group relative overflow-hidden rounded-lg border p-4 hover:shadow-md", - label: "text-xs text-muted-foreground", - title: "mt-1 font-semibold group-hover:text-primary" - } - }, - - // Related posts - related: { - wrapper: "my-12", - title: "mb-6 text-2xl font-bold", - grid: "grid gap-6 sm:grid-cols-2 lg:grid-cols-3" - }, - - // Comments - comments: { - wrapper: "my-12" - } -}; \ No newline at end of file diff --git a/src/pages/home.styles.ts b/src/pages/home.styles.ts deleted file mode 100644 index 4d7d638..0000000 --- a/src/pages/home.styles.ts +++ /dev/null @@ -1,127 +0,0 @@ -// Home page style classes organized for better maintainability - -export const homeStyles = { - // Loading Section - loading: { - container: "container px-4 py-12 md:px-6 md:py-16 lg:py-24", - wrapper: "mx-auto max-w-5xl", - content: "flex flex-col items-center justify-center space-y-6", - iconWrapper: "relative", - icon: "h-16 w-16 text-primary animate-pulse", - textWrapper: "text-center space-y-2", - title: "text-2xl font-semibold", - message: "text-muted-foreground" - }, - - // Main Container - main: "flex flex-col min-h-screen", - - // Hero Section - hero: { - section: "flex-1 flex items-center relative overflow-hidden", - container: "container px-4 md:px-6 space-y-10 py-16 md:py-24", - grid: "grid gap-6 lg:grid-cols-[1fr_400px] lg:gap-12 xl:grid-cols-[1fr_500px]", - content: "flex flex-col justify-center space-y-4", - textWrapper: "space-y-2", - title: "text-3xl font-bold tracking-tighter sm:text-4xl md:text-5xl lg:text-6xl/none", - bio: "max-w-[600px] text-gray-500 md:text-xl dark:text-gray-400 whitespace-pre-line", - buttons: "flex flex-col sm:flex-row gap-2", - button: "inline-flex items-center", - buttonIcon: "mr-2 h-4 w-4", - imageWrapper: "flex items-center justify-center", - // Decorative background - handled separately due to complexity - decorativeBg: "absolute inset-0 -z-10 bg-[radial-gradient(rgba(var(--primary-rgb),0.06)_1px,transparent_1px)] dark:bg-[radial-gradient(rgba(255,255,255,0.04)_1px,transparent_1px)] [background-size:20px_20px] [mask-image:radial-gradient(ellipse_at_center,white,transparent)]" - }, - - // Talks Section - talks: { - section: "py-16 bg-gradient-to-br from-primary/5 to-secondary/5", - container: "container px-4 md:px-6", - header: "text-center mb-12", - title: "text-2xl font-bold tracking-tight sm:text-3xl mb-4", - description: "text-muted-foreground max-w-2xl mx-auto", - grid: "grid gap-8 lg:grid-cols-2 items-start", - column: "space-y-6", - - // Talk Card - card: { - wrapper: "group cursor-pointer", - inner: "relative overflow-hidden rounded-xl border bg-card shadow-lg hover:shadow-xl transition-all duration-300 p-6", - badgeWrapper: "absolute top-4 right-4", - badge: "inline-flex items-center rounded-full bg-primary/10 px-3 py-1 text-xs font-semibold text-primary", - content: "space-y-4", - header: "flex items-center gap-3", - iconCircle: "w-12 h-12 rounded-full bg-gradient-to-br from-primary to-secondary flex items-center justify-center", - icon: "w-6 h-6 text-primary-foreground", - title: "font-semibold text-lg", - subtitle: "text-muted-foreground text-sm", - description: "text-muted-foreground", - videoWrapper: "aspect-video rounded-lg overflow-hidden", - video: "w-full h-full", - button: "w-full", - buttonInner: "inline-flex items-center justify-center", - buttonIcon: "ml-2 h-4 w-4" - }, - - // Coming Soon Card - comingSoon: { - card: "relative overflow-hidden rounded-xl border bg-card/50 shadow-sm p-6", - header: "flex items-center justify-between mb-4", - title: "font-semibold", - badge: "inline-flex items-center rounded-full bg-muted px-3 py-1 text-xs font-semibold text-muted-foreground", - text: "text-muted-foreground text-sm" - } - }, - - // Blog Section - blog: { - section: "py-16", - container: "container px-4 md:px-6", - header: "flex flex-col md:flex-row justify-between items-center gap-4 mb-10", - titleWrapper: "", - title: "text-2xl font-bold tracking-tight sm:text-3xl", - description: "text-muted-foreground", - viewAllButton: "inline-flex items-center", - viewAllIcon: "ml-2 h-4 w-4", - grid: "grid gap-6 sm:grid-cols-2 lg:grid-cols-3" - }, - - // Publications Section - publications: { - section: "py-16 bg-muted/30", - container: "container px-4 md:px-6", - header: "flex flex-col md:flex-row justify-between items-center gap-4 mb-10", - titleWrapper: "", - title: "text-2xl font-bold tracking-tight sm:text-3xl", - description: "text-muted-foreground", - viewAllButton: "inline-flex items-center", - viewAllIcon: "ml-2 h-4 w-4", - grid: "grid grid-cols-1 md:grid-cols-2 gap-6" - }, - - // Projects Section - projects: { - section: "bg-muted/50 py-16", - container: "container px-4 md:px-6", - header: "flex flex-col md:flex-row justify-between items-center gap-4 mb-10", - titleWrapper: "", - title: "text-2xl font-bold tracking-tight sm:text-3xl", - description: "text-muted-foreground", - viewAllButton: "inline-flex items-center", - viewAllIcon: "ml-2 h-4 w-4", - grid: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6", - - // Project Card - card: { - wrapper: "group rounded-lg border bg-card shadow-sm hover:shadow-md", - inner: "p-6 flex flex-col h-full", - badge: "inline-flex items-center rounded-full bg-primary/10 px-2.5 py-0.5 text-xs font-semibold text-primary mb-4 self-start", - title: "text-xl font-bold mb-2 hover:text-primary", - description: "text-muted-foreground text-sm flex-grow", - tags: "mt-4 flex flex-wrap gap-2", - tag: "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold", - actions: "flex items-center gap-3 mt-4 pt-4 border-t", - actionIcon: "mr-1 h-3 w-3" - } - } -}; \ No newline at end of file diff --git a/src/pages/notFound.styles.ts b/src/pages/notFound.styles.ts deleted file mode 100644 index a0c803f..0000000 --- a/src/pages/notFound.styles.ts +++ /dev/null @@ -1,10 +0,0 @@ -// NotFound page style classes - -export const notFoundStyles = { - container: "flex min-h-screen flex-col items-center justify-center", - wrapper: "mx-auto max-w-md text-center", - code: "text-6xl font-bold text-primary", - title: "mt-4 text-2xl font-semibold", - link: "mt-6 inline-flex items-center text-primary hover:underline", - icon: "ml-2 h-4 w-4" -}; \ No newline at end of file diff --git a/src/pages/project.styles.ts b/src/pages/project.styles.ts deleted file mode 100644 index eb14ead..0000000 --- a/src/pages/project.styles.ts +++ /dev/null @@ -1,84 +0,0 @@ -// Project detail page style classes - -export const projectStyles = { - // Loading state - loading: { - container: "container px-4 py-12 md:px-6 md:py-16 lg:py-24", - wrapper: "mx-auto max-w-4xl", - content: "flex flex-col items-center justify-center space-y-6", - iconWrapper: "relative", - icon: "h-16 w-16 text-primary animate-pulse", - textWrapper: "text-center space-y-2", - title: "text-2xl font-semibold", - message: "text-muted-foreground" - }, - - // Error state - error: { - container: "container px-4 py-12 md:px-6 md:py-16 lg:py-24", - wrapper: "mx-auto max-w-4xl text-center", - title: "text-2xl font-bold", - link: "mt-4 inline-flex items-center text-primary hover:underline", - icon: "ml-2 h-4 w-4" - }, - - // Main container - container: "container px-4 py-8 md:px-6", - wrapper: "mx-auto max-w-4xl", - - // Back link - backLink: "mb-6 inline-flex items-center text-sm text-muted-foreground hover:text-foreground", - backIcon: "mr-2 h-4 w-4", - - // Article - article: { - header: { - wrapper: "mb-8 space-y-4", - badge: "inline-flex items-center rounded-full bg-primary/10 px-3 py-1 text-xs font-semibold text-primary", - badgeIcon: "mr-1 h-3 w-3", - title: "text-3xl font-bold tracking-tight sm:text-4xl", - description: "text-lg text-muted-foreground", - - tags: { - wrapper: "flex flex-wrap gap-2", - tag: "rounded-full border px-2.5 py-0.5 text-xs" - }, - - actions: { - wrapper: "flex flex-wrap gap-3", - button: "inline-flex items-center", - icon: "mr-2 h-4 w-4" - } - }, - - content: { - wrapper: "space-y-6", - - section: { - wrapper: "rounded-lg bg-muted/30 p-6", - title: "mb-3 text-xl font-semibold", - content: "space-y-4 text-muted-foreground" - }, - - features: { - title: "mb-4 text-xl font-semibold", - list: "list-inside list-disc space-y-2 text-muted-foreground" - }, - - technologies: { - title: "mb-4 text-xl font-semibold", - grid: "grid grid-cols-2 gap-3 sm:grid-cols-3 md:grid-cols-4", - item: "rounded-lg border bg-background px-3 py-2 text-center text-sm" - }, - - fallback: "rounded-lg bg-muted/30 p-8 text-center text-muted-foreground" - } - }, - - // Related projects - related: { - wrapper: "mt-12", - title: "mb-6 text-2xl font-bold", - grid: "grid gap-6 sm:grid-cols-2 lg:grid-cols-3" - } -}; \ No newline at end of file diff --git a/src/pages/projects.styles.ts b/src/pages/projects.styles.ts deleted file mode 100644 index 81adda3..0000000 --- a/src/pages/projects.styles.ts +++ /dev/null @@ -1,82 +0,0 @@ -// Projects page style classes - -export const projectsStyles = { - // Loading state - loading: { - container: "container px-4 py-12 md:px-6 md:py-16 lg:py-24", - wrapper: "mx-auto max-w-5xl", - content: "flex flex-col items-center justify-center space-y-6", - iconWrapper: "relative", - icon: "h-16 w-16 text-primary animate-pulse", - textWrapper: "text-center space-y-2", - title: "text-2xl font-semibold", - message: "text-muted-foreground" - }, - - // Main container - container: "container px-4 py-12 md:px-6 md:py-16 lg:py-24", - - // Header - header: { - wrapper: "mb-10 text-center", - title: "text-3xl font-bold tracking-tight sm:text-4xl md:text-5xl", - description: "mx-auto mt-3 max-w-2xl text-muted-foreground sm:text-lg" - }, - - // Search and filters - filters: { - wrapper: "mb-8 space-y-4", - searchWrapper: "relative", - searchIcon: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground", - searchInput: "w-full pl-10 pr-10", - clearButton: "absolute right-2 top-1/2 -translate-y-1/2", - clearIcon: "h-4 w-4", - - tagFilter: { - wrapper: "flex items-center gap-4", - label: "text-sm font-medium", - selectWrapper: "flex-1", - clearButton: "px-3" - }, - - selectedTags: { - wrapper: "flex flex-wrap gap-2", - label: "text-sm font-medium text-muted-foreground", - tag: "inline-flex items-center gap-1 rounded-full border bg-primary/10 px-3 py-1 text-sm", - removeButton: "ml-1 rounded-full hover:bg-primary/20", - removeIcon: "h-3 w-3" - } - }, - - // Projects grid - grid: { - container: "grid gap-6 sm:grid-cols-2 lg:grid-cols-3", - - card: { - wrapper: "group relative overflow-hidden rounded-lg border bg-card transition-all hover:shadow-lg", - content: "p-6", - badge: "mb-3 inline-flex items-center rounded-full bg-primary/10 px-2.5 py-0.5 text-xs font-semibold text-primary", - title: "mb-2 text-xl font-bold", - description: "mb-4 line-clamp-2 text-sm text-muted-foreground", - - tags: { - wrapper: "mb-4 flex flex-wrap gap-2", - tag: "rounded-full border px-2.5 py-0.5 text-xs" - }, - - actions: { - wrapper: "flex items-center gap-2", - icon: "mr-1 h-3 w-3" - } - } - }, - - // Empty state - empty: { - container: "py-12 text-center", - icon: "mx-auto h-12 w-12 text-muted-foreground/50", - title: "mt-4 text-lg font-semibold", - message: "mt-2 text-sm text-muted-foreground", - button: "mt-4" - } -}; \ No newline at end of file diff --git a/src/pages/publication.styles.ts b/src/pages/publication.styles.ts deleted file mode 100644 index c51f74c..0000000 --- a/src/pages/publication.styles.ts +++ /dev/null @@ -1,78 +0,0 @@ -// Publication detail page style classes - -export const publicationStyles = { - // Loading state - loading: { - container: "container px-4 py-12 md:px-6 md:py-16 lg:py-24", - wrapper: "mx-auto max-w-4xl", - content: "flex flex-col items-center justify-center space-y-6", - iconWrapper: "relative", - icon: "h-16 w-16 text-primary animate-pulse", - textWrapper: "text-center space-y-2", - title: "text-2xl font-semibold", - message: "text-muted-foreground" - }, - - // Error state - error: { - container: "container px-4 py-12 md:px-6 md:py-16 lg:py-24", - wrapper: "mx-auto max-w-4xl text-center", - title: "text-2xl font-bold", - link: "mt-4 inline-flex items-center text-primary hover:underline", - icon: "ml-2 h-4 w-4" - }, - - // Main container - container: "container px-4 py-8 md:px-6", - wrapper: "mx-auto max-w-4xl", - - // Back link - backLink: "mb-6 inline-flex items-center text-sm text-muted-foreground hover:text-foreground", - backIcon: "mr-2 h-4 w-4", - - // Article - article: { - header: { - wrapper: "mb-8 space-y-4", - badge: "inline-flex items-center rounded-full bg-primary/10 px-3 py-1 text-xs font-semibold text-primary", - badgeIcon: "mr-1 h-3 w-3", - title: "text-3xl font-bold tracking-tight sm:text-4xl", - - authors: "text-lg text-muted-foreground", - - meta: { - wrapper: "flex flex-wrap gap-4 text-sm text-muted-foreground", - item: "flex items-center gap-1", - icon: "h-4 w-4" - }, - - tags: { - wrapper: "flex flex-wrap gap-2", - tag: "rounded-full border px-2.5 py-0.5 text-xs" - } - }, - - content: { - abstract: { - wrapper: "mb-8 rounded-lg bg-muted/50 p-6", - title: "mb-3 text-lg font-semibold", - text: "text-muted-foreground" - }, - - actions: { - wrapper: "mb-8 flex flex-wrap gap-3", - button: "inline-flex items-center", - icon: "mr-2 h-4 w-4" - }, - - fallback: "rounded-lg bg-muted/30 p-8 text-center text-muted-foreground" - } - }, - - // Related publications - related: { - wrapper: "mt-12", - title: "mb-6 text-2xl font-bold", - grid: "grid gap-6 md:grid-cols-2" - } -}; \ No newline at end of file diff --git a/src/pages/publications.styles.ts b/src/pages/publications.styles.ts deleted file mode 100644 index 2c5640e..0000000 --- a/src/pages/publications.styles.ts +++ /dev/null @@ -1,105 +0,0 @@ -// Publications page style classes - -export const publicationsStyles = { - // Loading state - loading: { - container: "container px-4 py-12 md:px-6 md:py-16 lg:py-24", - wrapper: "mx-auto max-w-5xl", - content: "flex flex-col items-center justify-center space-y-6", - iconWrapper: "relative", - icon: "h-16 w-16 text-primary animate-pulse", - textWrapper: "text-center space-y-2", - title: "text-2xl font-semibold", - message: "text-muted-foreground" - }, - - // Main container - container: "container px-4 py-12 md:px-6 md:py-16 lg:py-24", - - // Header - header: { - wrapper: "mb-10 text-center", - title: "text-3xl font-bold tracking-tight sm:text-4xl md:text-5xl", - description: "mx-auto mt-3 max-w-2xl text-muted-foreground sm:text-lg" - }, - - // Search and filters - filters: { - wrapper: "mb-8 space-y-4", - searchWrapper: "relative", - searchIcon: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground", - searchInput: "w-full pl-10 pr-10", - clearButton: "absolute right-2 top-1/2 -translate-y-1/2", - clearIcon: "h-4 w-4", - - filterGroup: { - wrapper: "grid gap-4 md:grid-cols-2", - - tagFilter: { - wrapper: "flex items-center gap-2", - label: "text-sm font-medium whitespace-nowrap", - selectWrapper: "flex-1", - clearButton: "" - }, - - yearFilter: { - wrapper: "flex items-center gap-2", - label: "text-sm font-medium whitespace-nowrap", - selectWrapper: "flex-1", - clearButton: "" - } - }, - - activeFilters: { - wrapper: "flex flex-wrap items-center gap-2", - tag: "inline-flex items-center gap-1 rounded-full border bg-primary/10 px-3 py-1 text-sm", - removeButton: "ml-1 rounded-full hover:bg-primary/20", - removeIcon: "h-3 w-3" - } - }, - - // Publications grid - grid: { - container: "grid gap-6 md:grid-cols-2 lg:grid-cols-3", - - card: { - wrapper: "group relative overflow-hidden rounded-lg border bg-card p-6 transition-all hover:shadow-lg", - link: "absolute inset-0 z-10", - badge: "mb-3 inline-flex items-center rounded-full bg-primary/10 px-2.5 py-0.5 text-xs font-semibold text-primary", - title: "mb-2 text-lg font-bold group-hover:text-primary", - - authors: { - wrapper: "mb-2 text-sm text-muted-foreground", - list: "line-clamp-1" - }, - - meta: { - wrapper: "mb-3 flex flex-wrap gap-2 text-xs text-muted-foreground", - conference: "font-medium", - year: "" - }, - - abstract: "mb-4 line-clamp-3 text-sm text-muted-foreground", - - tags: { - wrapper: "mb-4 flex flex-wrap gap-2", - tag: "rounded-full border px-2.5 py-0.5 text-xs" - }, - - actions: { - wrapper: "relative z-20 flex items-center gap-2", - button: "", - icon: "mr-1 h-3 w-3" - } - } - }, - - // Empty state - empty: { - container: "py-12 text-center", - icon: "mx-auto h-12 w-12 text-muted-foreground/50", - title: "mt-4 text-lg font-semibold", - message: "mt-2 text-sm text-muted-foreground", - button: "mt-4" - } -}; \ No newline at end of file From bbb56120fad6c91288e2b65847f562d6a957ac95 Mon Sep 17 00:00:00 2001 From: Ayush Kumar Date: Sat, 13 Sep 2025 00:39:32 +0530 Subject: [PATCH 07/16] feat: add project and publication pages with filtering and loading states - Implemented Project page with project details, related projects, and voting buttons. - Created Projects page with search and tag filtering for project listings. - Developed Publication page displaying publication details and related publications. - Added Publications page with search, tag, and year filtering for publication listings. - Introduced loading states and error handling for data fetching in both Projects and Publications. - Styled components using CSS modules for consistent design across pages. --- src/App.tsx | 20 +++++++++---------- src/pages/{ => about}/About.module.css | 0 src/pages/{ => about}/About.tsx | 0 .../AuthCallback.module.css | 0 src/pages/{ => authcallback}/AuthCallback.tsx | 0 src/pages/{ => blog}/Blog.module.css | 2 +- src/pages/{ => blog}/Blog.tsx | 4 ++-- src/pages/{ => blogpost}/BlogPost.module.css | 0 src/pages/{ => blogpost}/BlogPost.tsx | 4 ++-- src/pages/{ => home}/Home.module.css | 0 src/pages/{ => home}/Home.tsx | 4 ++-- src/pages/{ => index}/Index.module.css | 0 src/pages/{ => index}/Index.tsx | 0 src/pages/{ => notfound}/NotFound.module.css | 0 src/pages/{ => notfound}/NotFound.tsx | 0 src/pages/{ => project}/Project.module.css | 0 src/pages/{ => project}/Project.tsx | 4 ++-- src/pages/{ => projects}/Projects.module.css | 2 +- src/pages/{ => projects}/Projects.tsx | 4 ++-- src/pages/{ => publication}/Publication.tsx | 4 ++-- .../Publications.module.css | 2 +- src/pages/{ => publications}/Publications.tsx | 4 ++-- 22 files changed, 27 insertions(+), 27 deletions(-) rename src/pages/{ => about}/About.module.css (100%) rename src/pages/{ => about}/About.tsx (100%) rename src/pages/{ => authcallback}/AuthCallback.module.css (100%) rename src/pages/{ => authcallback}/AuthCallback.tsx (100%) rename src/pages/{ => blog}/Blog.module.css (99%) rename src/pages/{ => blog}/Blog.tsx (98%) rename src/pages/{ => blogpost}/BlogPost.module.css (100%) rename src/pages/{ => blogpost}/BlogPost.tsx (99%) rename src/pages/{ => home}/Home.module.css (100%) rename src/pages/{ => home}/Home.tsx (99%) rename src/pages/{ => index}/Index.module.css (100%) rename src/pages/{ => index}/Index.tsx (100%) rename src/pages/{ => notfound}/NotFound.module.css (100%) rename src/pages/{ => notfound}/NotFound.tsx (100%) rename src/pages/{ => project}/Project.module.css (100%) rename src/pages/{ => project}/Project.tsx (98%) rename src/pages/{ => projects}/Projects.module.css (99%) rename src/pages/{ => projects}/Projects.tsx (99%) rename src/pages/{ => publication}/Publication.tsx (98%) rename src/pages/{ => publications}/Publications.module.css (99%) rename src/pages/{ => publications}/Publications.tsx (99%) diff --git a/src/App.tsx b/src/App.tsx index a04dc97..7e9674a 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -5,17 +5,17 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { BrowserRouter, Routes, Route, Navigate } from "react-router-dom"; import { ThemeProvider } from "@/components/theme-provider"; import { Layout } from "@/components/layout"; -import Home from "./pages/Home"; -import Projects from "./pages/Projects"; -import Project from "./pages/Project"; -import Blog from "./pages/Blog"; -import BlogPost from "./pages/BlogPost"; -import About from "./pages/About"; -import Publications from "./pages/Publications"; -import Publication from "./pages/Publication"; -import NotFound from "./pages/NotFound"; +import Home from "./pages/home/Home"; +import Projects from "./pages/projects/Projects"; +import Project from "./pages/project/Project"; +import Blog from "./pages/blog/Blog"; +import BlogPost from "./pages/blogpost/BlogPost"; +import About from "./pages/about/About"; +import Publications from "./pages/publications/Publications"; +import Publication from "./pages/publication/Publication"; +import NotFound from "./pages/notfound/NotFound"; import { sectionConfig } from "./config/sectionConfig"; -import AuthCallback from "@/pages/AuthCallback"; +import AuthCallback from "./pages/authcallback/AuthCallback"; const queryClient = new QueryClient(); diff --git a/src/pages/About.module.css b/src/pages/about/About.module.css similarity index 100% rename from src/pages/About.module.css rename to src/pages/about/About.module.css diff --git a/src/pages/About.tsx b/src/pages/about/About.tsx similarity index 100% rename from src/pages/About.tsx rename to src/pages/about/About.tsx diff --git a/src/pages/AuthCallback.module.css b/src/pages/authcallback/AuthCallback.module.css similarity index 100% rename from src/pages/AuthCallback.module.css rename to src/pages/authcallback/AuthCallback.module.css diff --git a/src/pages/AuthCallback.tsx b/src/pages/authcallback/AuthCallback.tsx similarity index 100% rename from src/pages/AuthCallback.tsx rename to src/pages/authcallback/AuthCallback.tsx diff --git a/src/pages/Blog.module.css b/src/pages/blog/Blog.module.css similarity index 99% rename from src/pages/Blog.module.css rename to src/pages/blog/Blog.module.css index d28511d..48398d5 100644 --- a/src/pages/Blog.module.css +++ b/src/pages/blog/Blog.module.css @@ -73,7 +73,7 @@ } .searchInput { - @apply pl-8; + @apply !pl-12; } .clearButton { diff --git a/src/pages/Blog.tsx b/src/pages/blog/Blog.tsx similarity index 98% rename from src/pages/Blog.tsx rename to src/pages/blog/Blog.tsx index 6248478..52642c7 100644 --- a/src/pages/Blog.tsx +++ b/src/pages/blog/Blog.tsx @@ -13,8 +13,8 @@ import { SelectTrigger, SelectValue, } from "@/components/ui/select"; -import { LoadingDots } from '../components/ui/LoadingDots'; -import { delay } from '../utils/delay'; +import { LoadingDots } from '@/components/ui/LoadingDots'; +import { delay } from '@/utils/delay'; import { Link } from "react-router-dom"; import styles from './Blog.module.css'; diff --git a/src/pages/BlogPost.module.css b/src/pages/blogpost/BlogPost.module.css similarity index 100% rename from src/pages/BlogPost.module.css rename to src/pages/blogpost/BlogPost.module.css diff --git a/src/pages/BlogPost.tsx b/src/pages/blogpost/BlogPost.tsx similarity index 99% rename from src/pages/BlogPost.tsx rename to src/pages/blogpost/BlogPost.tsx index 4b240b6..78edabd 100644 --- a/src/pages/BlogPost.tsx +++ b/src/pages/blogpost/BlogPost.tsx @@ -11,8 +11,8 @@ import { MarkdownRenderer, calculateReadingTime } from '@/utils/markdown-utils'; import { toast } from 'sonner'; import { CommentSection } from '@/components/blog/CommentSection'; import { VotingButtons } from '@/components/VotingButtons'; -import { LoadingDots } from '../components/ui/LoadingDots'; -import { delay } from '../utils/delay'; +import { LoadingDots } from '@/components/ui/LoadingDots'; +import { delay } from '@/utils/delay'; import { supabase } from "@/lib/supabase"; import { User } from "@supabase/supabase-js"; import styles from './BlogPost.module.css'; diff --git a/src/pages/Home.module.css b/src/pages/home/Home.module.css similarity index 100% rename from src/pages/Home.module.css rename to src/pages/home/Home.module.css diff --git a/src/pages/Home.tsx b/src/pages/home/Home.tsx similarity index 99% rename from src/pages/Home.tsx rename to src/pages/home/Home.tsx index 96988ce..8e2806b 100644 --- a/src/pages/Home.tsx +++ b/src/pages/home/Home.tsx @@ -9,8 +9,8 @@ import { loadPublications, } from "@/utils/content-loader"; import { PublicationCard } from "@/components/publication-card"; -import { LoadingDots } from "../components/ui/LoadingDots"; -import { delay } from "../utils/delay"; +import { LoadingDots } from "@/components/ui/LoadingDots"; +import { delay } from "@/utils/delay"; import { BlogPostCard } from "@/components/blog-post-card"; import { ProfileSlideshow } from "@/components/ProfileSlideshow"; import { siteConfig } from "@/config"; diff --git a/src/pages/Index.module.css b/src/pages/index/Index.module.css similarity index 100% rename from src/pages/Index.module.css rename to src/pages/index/Index.module.css diff --git a/src/pages/Index.tsx b/src/pages/index/Index.tsx similarity index 100% rename from src/pages/Index.tsx rename to src/pages/index/Index.tsx diff --git a/src/pages/NotFound.module.css b/src/pages/notfound/NotFound.module.css similarity index 100% rename from src/pages/NotFound.module.css rename to src/pages/notfound/NotFound.module.css diff --git a/src/pages/NotFound.tsx b/src/pages/notfound/NotFound.tsx similarity index 100% rename from src/pages/NotFound.tsx rename to src/pages/notfound/NotFound.tsx diff --git a/src/pages/Project.module.css b/src/pages/project/Project.module.css similarity index 100% rename from src/pages/Project.module.css rename to src/pages/project/Project.module.css diff --git a/src/pages/Project.tsx b/src/pages/project/Project.tsx similarity index 98% rename from src/pages/Project.tsx rename to src/pages/project/Project.tsx index aaa3c96..d7678e5 100644 --- a/src/pages/Project.tsx +++ b/src/pages/project/Project.tsx @@ -7,8 +7,8 @@ import { MarkdownRenderer } from '@/utils/markdown-utils'; import { VotingButtons } from '@/components/VotingButtons'; import { loadProjects } from '@/utils/content-loader'; import { Project as ProjectType } from '@/types/project'; -import { LoadingDots } from '../components/ui/LoadingDots'; -import { delay } from '../utils/delay'; +import { LoadingDots } from '@/components/ui/LoadingDots'; +import { delay } from '@/utils/delay'; import styles from './Project.module.css'; export default function Project() { diff --git a/src/pages/Projects.module.css b/src/pages/projects/Projects.module.css similarity index 99% rename from src/pages/Projects.module.css rename to src/pages/projects/Projects.module.css index 82888fd..b92316c 100644 --- a/src/pages/Projects.module.css +++ b/src/pages/projects/Projects.module.css @@ -73,7 +73,7 @@ } .searchInput { - @apply pl-8; + @apply !pl-12; } .clearButton { diff --git a/src/pages/Projects.tsx b/src/pages/projects/Projects.tsx similarity index 99% rename from src/pages/Projects.tsx rename to src/pages/projects/Projects.tsx index ea55650..baf083e 100644 --- a/src/pages/Projects.tsx +++ b/src/pages/projects/Projects.tsx @@ -7,8 +7,8 @@ import { Github, Search, ExternalLink, Folder, Code2, Loader2, X } from 'lucide- import { Link } from 'react-router-dom'; import { Project } from '@/types/project'; import { loadProjects } from '@/utils/content-loader'; -import { LoadingDots } from '../components/ui/LoadingDots'; -import { delay } from '../utils/delay'; +import { LoadingDots } from '@/components/ui/LoadingDots'; +import { delay } from '@/utils/delay'; import styles from './Projects.module.css'; import { siteConfig } from '@/config'; diff --git a/src/pages/Publication.tsx b/src/pages/publication/Publication.tsx similarity index 98% rename from src/pages/Publication.tsx rename to src/pages/publication/Publication.tsx index 3e45600..342a3c2 100644 --- a/src/pages/Publication.tsx +++ b/src/pages/publication/Publication.tsx @@ -7,8 +7,8 @@ import { ArrowLeft, Calendar, ExternalLink, GraduationCap } from 'lucide-react'; import { Publication as PublicationType } from '@/types/publication'; import { MarkdownRenderer } from '@/utils/markdown-utils'; import { VotingButtons } from '@/components/VotingButtons'; -import { LoadingDots } from '../components/ui/LoadingDots'; -import { delay } from '../utils/delay'; +import { LoadingDots } from '@/components/ui/LoadingDots'; +import { delay } from '@/utils/delay'; export default function Publication() { const { id } = useParams<{ id: string }>(); diff --git a/src/pages/Publications.module.css b/src/pages/publications/Publications.module.css similarity index 99% rename from src/pages/Publications.module.css rename to src/pages/publications/Publications.module.css index 844ab30..1b517e5 100644 --- a/src/pages/Publications.module.css +++ b/src/pages/publications/Publications.module.css @@ -69,7 +69,7 @@ } .searchInput { - @apply pl-10; + @apply !pl-12; } .clearButton { diff --git a/src/pages/Publications.tsx b/src/pages/publications/Publications.tsx similarity index 99% rename from src/pages/Publications.tsx rename to src/pages/publications/Publications.tsx index 7287734..873604b 100644 --- a/src/pages/Publications.tsx +++ b/src/pages/publications/Publications.tsx @@ -6,8 +6,8 @@ import { loadPublications } from '@/utils/content-loader'; import { PublicationCard } from '@/components/publication-card'; import { ScrollText, Search, X } from 'lucide-react'; import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; -import { LoadingDots } from '../components/ui/LoadingDots'; -import { delay } from '../utils/delay'; +import { LoadingDots } from '@/components/ui/LoadingDots'; +import { delay } from '@/utils/delay'; import { Link } from 'react-router-dom'; import { FileText, ExternalLink } from 'lucide-react'; import styles from './Publications.module.css'; From 46cc10bf1186905a182f668f33b55cc806d49061 Mon Sep 17 00:00:00 2001 From: Ayush Kumar Date: Sat, 13 Sep 2025 01:08:54 +0530 Subject: [PATCH 08/16] feat: fix timeline for careers --- src/components/CareerTimeline.module.css | 80 ++++++++++++++---------- src/components/CareerTimeline.tsx | 77 +++++++++++------------ 2 files changed, 83 insertions(+), 74 deletions(-) diff --git a/src/components/CareerTimeline.module.css b/src/components/CareerTimeline.module.css index b1c1779..850fa6b 100644 --- a/src/components/CareerTimeline.module.css +++ b/src/components/CareerTimeline.module.css @@ -1,11 +1,11 @@ /* Career Timeline Component CSS Module */ .section { - @apply space-y-8; + @apply space-y-6; } .title { - @apply text-2xl font-bold; + @apply text-xl font-bold; } .timelineContainer { @@ -13,11 +13,11 @@ } .mainTimelineLine { - @apply absolute left-8 top-0 bottom-0 w-0.5 bg-gradient-to-b from-primary via-primary/60 to-primary/20; + @apply absolute left-6 top-0 bottom-0 w-0.5 bg-gradient-to-b from-primary via-primary/60 to-primary/20; } .timelineItems { - @apply space-y-12; + @apply space-y-8; } .companyItem { @@ -25,7 +25,7 @@ } .companyHeader { - @apply relative flex items-start gap-8 mb-6; + @apply relative flex items-start gap-6 mb-4; } .companyNode { @@ -33,15 +33,15 @@ } .companyNodeCircle { - @apply w-16 h-16 rounded-full bg-gradient-to-br from-primary to-primary/60 shadow-lg flex items-center justify-center border-4 border-background; + @apply w-12 h-12 rounded-full bg-gradient-to-br from-primary to-primary/60 shadow-md flex items-center justify-center border-2 border-background; } .companyIcon { - @apply w-6 h-6 text-primary-foreground; + @apply w-4 h-4 text-primary-foreground; } .companyConnector { - @apply absolute top-8 left-16 w-8 h-0.5 bg-gradient-to-r from-primary/60 to-transparent; + @apply absolute top-6 left-12 w-6 h-0.5 bg-gradient-to-r from-primary/60 to-transparent; } .companyContent { @@ -49,11 +49,15 @@ } .companyCard { - @apply shadow-lg border-l-4 border-l-primary bg-primary/5; + @apply shadow-md border-l-4 border-l-primary bg-primary/5; +} + +.companyCard .cardHeader { + @apply px-4 py-3; } .companyCardHeader { - @apply pb-4; + @apply pb-2; } .companyInfo { @@ -65,7 +69,7 @@ } .companyName { - @apply text-2xl font-bold text-foreground; + @apply text-lg font-bold text-foreground; } .locationContainer { @@ -81,7 +85,7 @@ } .periodBadge { - @apply flex items-center gap-1; + @apply flex items-center gap-1 pt-2; } .periodIcon { @@ -93,15 +97,15 @@ } .rolesTimelineLine { - @apply absolute left-6 top-0 bottom-0 w-0.5 bg-gradient-to-b from-secondary via-secondary/60 to-secondary/20; + @apply absolute left-4 top-0 bottom-0 w-0.5 bg-gradient-to-b from-blue-500 via-blue-500/80 to-blue-500/40; } .rolesItems { - @apply space-y-8; + @apply space-y-6; } .roleItem { - @apply relative flex items-start gap-6; + @apply relative flex items-start gap-4; } .roleNode { @@ -109,15 +113,15 @@ } .roleNodeCircle { - @apply w-12 h-12 rounded-full bg-gradient-to-br from-secondary to-secondary/60 shadow-md flex items-center justify-center border-4 border-background; + @apply w-8 h-8 rounded-full bg-gradient-to-br from-secondary to-secondary/60 shadow-sm flex items-center justify-center border-2 border-background; } .roleNodeDot { - @apply w-2 h-2 rounded-full bg-secondary-foreground; + @apply w-1.5 h-1.5 rounded-full bg-secondary-foreground; } .roleConnector { - @apply absolute top-6 left-12 w-6 h-0.5 bg-gradient-to-r from-secondary/60 to-transparent; + @apply absolute top-4 left-8 w-4 h-0.5 bg-gradient-to-r from-secondary/60 to-transparent; } .roleContent { @@ -125,11 +129,19 @@ } .roleCard { - @apply shadow-md hover:shadow-lg transition-all duration-300 border-l-4 border-l-secondary/30; + @apply shadow-sm hover:shadow-md transition-all duration-300 border-l-2 border-l-secondary/30; +} + +.roleCard .cardHeader { + @apply px-4 py-2; +} + +.roleCard .cardContent { + @apply px-4 py-2; } .roleCardHeader { - @apply pb-3; + @apply pb-2 pt-3; } .roleInfo { @@ -137,15 +149,15 @@ } .roleTitle { - @apply text-lg font-bold text-foreground; + @apply text-base font-bold text-foreground pt-2; } .roleCardContent { - @apply pt-0 space-y-4; + @apply pt-3 space-y-2; } .sectionHeader { - @apply font-semibold text-foreground mb-2 flex items-center gap-2 text-sm; + @apply font-semibold text-foreground mb-1 flex items-center gap-2 text-sm; } .sectionDot { @@ -157,15 +169,15 @@ } .responsibilitiesDot { - @apply bg-secondary; + @apply bg-primary/80; } .milestonesDot { - @apply bg-accent; + @apply bg-primary/60; } .list { - @apply space-y-1.5; + @apply space-y-1 ml-2; } .listItem { @@ -177,11 +189,11 @@ } .achievementsListDot { - @apply bg-primary/60; + @apply bg-secondary; } .responsibilitiesListDot { - @apply bg-secondary/60; + @apply bg-secondary/80; } .listItemText { @@ -189,11 +201,11 @@ } .milestonesGrid { - @apply grid gap-2 sm:grid-cols-2; + @apply grid gap-2 sm:grid-cols-2 ml-2; } .milestoneItem { - @apply bg-accent/10 rounded-md p-2 border border-accent/20; + @apply bg-muted/50 rounded-md p-2 border border-muted; } .milestoneText { @@ -201,7 +213,7 @@ } .roleProgression { - @apply mt-4 ml-6 flex items-center gap-2 text-muted-foreground; + @apply mt-3 ml-4 flex items-center gap-2 text-muted-foreground; } .progressionLineBefore { @@ -217,7 +229,7 @@ } .companyProgression { - @apply mt-8 ml-8 flex items-center gap-3 text-muted-foreground; + @apply mt-6 ml-6 flex items-center gap-3 text-muted-foreground; } .companyProgressionLineBefore { @@ -233,9 +245,9 @@ } .timelineEnd { - @apply absolute left-8 bottom-0 w-0.5 h-12 bg-gradient-to-b from-primary/20 to-transparent; + @apply absolute left-6 bottom-0 w-0.5 h-8 bg-gradient-to-b from-primary/20 to-transparent; } .timelineEndDot { - @apply absolute left-6 -bottom-2 w-4 h-4 rounded-full bg-primary/20 border-2 border-background; + @apply absolute left-5 -bottom-1 w-3 h-3 rounded-full bg-primary/20 border-2 border-background; } \ No newline at end of file diff --git a/src/components/CareerTimeline.tsx b/src/components/CareerTimeline.tsx index 0839d08..c8ccf39 100644 --- a/src/components/CareerTimeline.tsx +++ b/src/components/CareerTimeline.tsx @@ -52,20 +52,20 @@ export function CareerTimeline({ items, title = "Career Journey" }: CareerTimeli {/* Company header card */}
- - -
-
-

{item.company}

+ + +
+
+

{item.company}

{item.location && ( -
- - {item.location} +
+ + {item.location}
)}
- - + + {item.overallPeriod}
@@ -75,48 +75,47 @@ export function CareerTimeline({ items, title = "Career Journey" }: CareerTimeli
{/* Roles Sub-timeline */} -
+
{/* Sub-timeline line */} -
+
-
+
{item.roles.map((role, roleIndex) => (
{/* Role timeline node */}
-
-
+
+
{/* Connecting line to content */} -
+
{/* Role content card */}
- - -
-

{role.title}

- - + + +
+

{role.title}

+ + {role.period}
- + {/* Key Achievements */} {role.achievements.length > 0 && (
-
-
+
Key Achievements
-
    +
      {role.achievements.map((achievement, idx) => ( -
    • -
      - {achievement} +
    • +
      + {achievement}
    • ))}
    @@ -126,15 +125,14 @@ export function CareerTimeline({ items, title = "Career Journey" }: CareerTimeli {/* Responsibilities */} {role.responsibilities && role.responsibilities.length > 0 && (
    -
    -
    +
    Core Responsibilities
    -
      +
        {role.responsibilities.map((responsibility, idx) => ( -
      • -
        - {responsibility} +
      • +
        + {responsibility}
      • ))}
      @@ -144,14 +142,13 @@ export function CareerTimeline({ items, title = "Career Journey" }: CareerTimeli {/* Milestones */} {role.milestones && role.milestones.length > 0 && (
      -
      -
      +
      Key Milestones
      -
      +
      {role.milestones.map((milestone, idx) => ( -
      - {milestone} +
      + {milestone}
      ))}
      From 4579db7295ec21a084af654e588b6e2dadd2f89b Mon Sep 17 00:00:00 2001 From: Ayush Kumar Date: Sat, 13 Sep 2025 01:12:52 +0530 Subject: [PATCH 09/16] feat: enhance contact modal with LinkedIn and resume buttons, update email source --- src/components/contact-modal.module.css | 10 ++++++- src/components/contact-modal.tsx | 38 +++++++++++++++++++++---- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/src/components/contact-modal.module.css b/src/components/contact-modal.module.css index 3bc03ea..fe338b3 100644 --- a/src/components/contact-modal.module.css +++ b/src/components/contact-modal.module.css @@ -45,5 +45,13 @@ } .footer { - @apply sm:justify-center; + @apply p-0; +} + +.actionButtons { + @apply flex w-full gap-2; +} + +.fullWidthButton { + @apply flex-1 rounded-md; } \ No newline at end of file diff --git a/src/components/contact-modal.tsx b/src/components/contact-modal.tsx index 31739bc..995a12e 100644 --- a/src/components/contact-modal.tsx +++ b/src/components/contact-modal.tsx @@ -1,8 +1,9 @@ import { useState } from 'react'; import { Button } from '@/components/ui/button'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog'; -import { Mail, Phone, Copy, Check } from 'lucide-react'; +import { Mail, Phone, Copy, Check, Linkedin, Download } from 'lucide-react'; import { toast } from 'sonner'; +import { siteConfig } from '@/config'; import styles from './contact-modal.module.css'; interface ContactModalProps { @@ -14,8 +15,7 @@ export function ContactModal({ open, onOpenChange }: ContactModalProps) { const [emailCopied, setEmailCopied] = useState(false); // const [phoneCopied, setPhoneCopied] = useState(false); - // Replace with your actual contact info - const email = 'kumar.ayush.cs@gmail.com'; + const email = siteConfig.personal.email; // const phone = "+1 (123) 456-7890"; const copyToClipboard = (text: string, type: 'email' | 'phone') => { @@ -83,9 +83,35 @@ export function ContactModal({ open, onOpenChange }: ContactModalProps) {
      */}
      - + From d6a288c4992b1aff9889b5b37333b9c199a15fd3 Mon Sep 17 00:00:00 2001 From: Ayush Kumar Date: Sat, 13 Sep 2025 01:17:49 +0530 Subject: [PATCH 10/16] feat: update deployment workflow to remove pull request trigger and enhance publication card layout --- .github/workflows/deploy.yml | 2 -- src/components/publication-card.module.css | 4 ++-- src/pages/home/Home.module.css | 4 ++++ 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index acd1cda..e3fcd0f 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -4,8 +4,6 @@ name: Deploy to GitHub Pages on: push: branches: [ main ] - pull_request: - branches: [ main ] # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages permissions: diff --git a/src/components/publication-card.module.css b/src/components/publication-card.module.css index f4aca2d..28a8874 100644 --- a/src/components/publication-card.module.css +++ b/src/components/publication-card.module.css @@ -37,7 +37,7 @@ } .footer { - @apply flex flex-col items-stretch gap-4 pt-4; + @apply flex flex-col items-start gap-4 pt-4 !justify-start; } .tagsContainer { @@ -49,7 +49,7 @@ } .buttonsContainer { - @apply flex items-center gap-2; + @apply flex items-start !justify-start w-full; } .icon { diff --git a/src/pages/home/Home.module.css b/src/pages/home/Home.module.css index 1114fdd..7387eb4 100644 --- a/src/pages/home/Home.module.css +++ b/src/pages/home/Home.module.css @@ -219,6 +219,10 @@ @apply grid grid-cols-1 md:grid-cols-2 gap-6; } +.publicationsGrid > * { + @apply justify-self-start; +} + /* Projects Section */ .projectsSection { @apply bg-muted/50 py-16; From 107e441b60d6d5918b70352c3dc6d6af33c9336e Mon Sep 17 00:00:00 2001 From: Ayush Kumar Date: Sat, 13 Sep 2025 01:20:40 +0530 Subject: [PATCH 11/16] feat: add GitHub Actions workflow for testing build process --- .github/workflows/test.yml | 28 ++++++++++++++++++++++++++++ src/pages/home/Home.module.css | 2 +- 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..b2245c8 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,28 @@ +name: Test Build + +on: + pull_request: + branches: [ main ] + +jobs: + test-build: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '18' + cache: 'npm' + + - name: Install dependencies + run: npm ci + + - name: Test Build + run: npm run build + env: + VITE_SUPABASE_URL: ${{ secrets.VITE_SUPABASE_URL }} + VITE_SUPABASE_ANON_KEY: ${{ secrets.VITE_SUPABASE_ANON_KEY }} \ No newline at end of file diff --git a/src/pages/home/Home.module.css b/src/pages/home/Home.module.css index 7387eb4..b8a9ea9 100644 --- a/src/pages/home/Home.module.css +++ b/src/pages/home/Home.module.css @@ -60,7 +60,7 @@ } .heroTitle { - @apply text-3xl font-bold tracking-tighter sm:text-4xl md:text-5xl lg:text-6xl/none; + @apply text-2xl font-bold tracking-tighter sm:text-3xl md:text-4xl lg:text-5xl/none mb-4; } .heroBio { From 1d019f5869d9c277fe296ec5a6b9abccee7779f8 Mon Sep 17 00:00:00 2001 From: Ayush Kumar Date: Sat, 13 Sep 2025 01:31:24 +0530 Subject: [PATCH 12/16] feat: update featured talk section with new title, subtitle, and description; enhance talk badge layout --- src/config/site.config.ts | 8 +++++--- src/pages/home/Home.module.css | 14 +++++++++----- src/pages/home/Home.tsx | 12 +++++++++--- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/config/site.config.ts b/src/config/site.config.ts index f7d609b..55002c3 100644 --- a/src/config/site.config.ts +++ b/src/config/site.config.ts @@ -75,14 +75,16 @@ Outside of code, I write technical articles, contribute to open-source when I ca "Sharing knowledge and insights with the community through talks, workshops, and presentations", }, featuredTalk: { - title: "Platform Engineering with Kubevela", - subtitle: "A tech talk on shipping the Application the Cloud Native Way", + title: "Platform Engineering with Kubevela - Shipping Applications the Cloud Native Way", + subtitle: "Featured Tech Talk", + description: "Explored how KubeVela simplifies application delivery in cloud-native environments by providing a unified platform for developers and operators. Demonstrated practical approaches to managing application lifecycle, deployments, and scaling using modern platform engineering principles.", + badge: "Live Event", }, collabnixMeetup: { title: "jsPolicy - Easier & Faster Kubernetes Policies ", subtitle: "A Show and Tell Collabnix Meetup", description: - "Engaged with the developer community to share insights on scalable systems, cloud architecture, and modern development practices.", + "Presented jsPolicy, a powerful JavaScript-based policy engine for Kubernetes that simplifies policy creation and enforcement. Demonstrated how jsPolicy enables developers to write more intuitive and maintainable admission controllers using familiar JavaScript or TypeScript syntax.", }, recentPosts: { title: "Recent Blog Posts", diff --git a/src/pages/home/Home.module.css b/src/pages/home/Home.module.css index b8a9ea9..2ff83ab 100644 --- a/src/pages/home/Home.module.css +++ b/src/pages/home/Home.module.css @@ -117,7 +117,7 @@ } .talkBadgeWrapper { - @apply absolute top-4 right-4; + @apply absolute top-4 right-4 flex gap-2; } .talkBadge { @@ -125,23 +125,27 @@ } .talkContent { - @apply space-y-4; + @apply space-y-4 mt-6; } .talkHeader { - @apply flex items-center gap-3; + @apply flex items-start gap-3 flex-wrap; } .talkIconCircle { - @apply w-12 h-12 rounded-full bg-gradient-to-br from-primary to-secondary flex items-center justify-center; + @apply w-12 h-12 min-w-[3rem] rounded-full bg-gradient-to-br from-primary to-secondary flex items-center justify-center flex-shrink-0; } .talkIcon { @apply w-6 h-6 text-primary-foreground; } +.talkTextContainer { + @apply flex-1 min-w-0; +} + .talkTitle { - @apply font-semibold text-lg; + @apply font-semibold text-lg break-words; } .talkSubtitle { diff --git a/src/pages/home/Home.tsx b/src/pages/home/Home.tsx index 8e2806b..513182c 100644 --- a/src/pages/home/Home.tsx +++ b/src/pages/home/Home.tsx @@ -153,7 +153,10 @@ export default function Home() {
      - Featured + {siteConfig.ui.badges.liveEvent} +
      +
      + {siteConfig.ui.badges.featured}
      @@ -162,12 +165,15 @@ export default function Home() {
      -
      +

      {siteConfig.sections.featuredTalk.title}

      -

      {siteConfig.sections.featuredTalk.subtitle}

      +

      + {siteConfig.sections.featuredTalk.description} +

      +