Skip to content

AdiKsOnDev/Portfolio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

43 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Portfolio - Next.js Modern Portfolio Website

A high-performance, SEO-optimized portfolio website built with Next.js 14, TypeScript, Tailwind CSS, and Shadcn UI. Features include authentication, admin panel, static export capabilities, comprehensive analytics, and accessibility compliance.

πŸš€ Features

Core Features

  • Modern Tech Stack: Next.js 14, TypeScript, Tailwind CSS, Shadcn UI
  • Static Export: Optimized for GitHub Pages deployment
  • Responsive Design: Mobile-first design with dark mode support
  • Performance Optimized: Lighthouse performance score >90
  • SEO Optimized: Comprehensive meta tags, structured data, sitemap
  • Accessibility: WCAG AA compliant with keyboard navigation

Portfolio Sections

  • Home: Hero section with introduction and key highlights
  • About: Professional background, skills, and journey
  • Projects: Showcase of development projects with live demos
  • Research: Academic publications and research work
  • Recommendations: Professional testimonials and endorsements

Admin Features (Optional)

  • Authentication: NextAuth.js integration with multiple providers
  • Content Management: Admin panel for managing portfolio content
  • Dynamic Updates: Real-time content updates without code changes
  • Secure: Environment-based feature toggles

Performance & Analytics

  • Web Vitals: Real-time performance monitoring
  • Google Analytics: Privacy-compliant analytics with consent management
  • Error Tracking: Comprehensive error monitoring and reporting
  • Bundle Optimization: Code splitting and lazy loading

πŸ“ Project Structure

src/
β”œβ”€β”€ app/                    # Next.js App Router pages
β”‚   β”œβ”€β”€ api/data/          # API routes for content access
β”‚   β”œβ”€β”€ about/             # About page
β”‚   β”œβ”€β”€ projects/          # Projects page  
β”‚   β”œβ”€β”€ research/          # Research papers page
β”‚   β”œβ”€β”€ experience/        # Experience page
β”‚   └── recommendations/   # Recommendations page
β”œβ”€β”€ components/            # React components
β”‚   β”œβ”€β”€ ui/               # Shadcn UI components
β”‚   └── layout/           # Layout components
β”œβ”€β”€ data/                 # Content data (JSON files)
β”‚   β”œβ”€β”€ projects.json     # Project data
β”‚   β”œβ”€β”€ research.json     # Research papers data
β”‚   β”œβ”€β”€ experience.json   # Work experience data
β”‚   β”œβ”€β”€ recommendations.json # Recommendations data
β”‚   └── about-me.json     # Personal information
β”œβ”€β”€ lib/                  # Utility libraries
β”‚   β”œβ”€β”€ data-access.ts    # Data access layer
β”‚   β”œβ”€β”€ content-service.ts # React hooks and API
β”‚   β”œβ”€β”€ content-utils.ts  # Validation and utilities
β”‚   └── utils.ts          # General utilities
β”œβ”€β”€ types/                # TypeScript type definitions
β”‚   └── content.ts        # Content model types
└── public/               # Static assets
    └── images/           # Image assets

πŸ› οΈ Content Management System

Content Models

The portfolio uses comprehensive TypeScript models for all content types:

Projects

  • Project information: Title, description, technologies, status
  • Media assets: Screenshots, demos, architecture diagrams
  • Links: GitHub, live demo, documentation
  • Metadata: Timeline, team size, achievements, metrics

Research Papers

  • Publication details: Title, abstract, authors, venue
  • Academic metadata: DOI, citation count, keywords
  • Supporting materials: PDFs, supplementary data, code

Professional Experience

  • Job details: Company, position, duration, responsibilities
  • Achievements: Quantified impact, recognition, metrics
  • Technologies: Skills and tools used

Recommendations

  • Testimonials: Content, author information, relationship
  • Metadata: Platform, rating, featured status

About Me

  • Personal info: Bio, contact, availability
  • Skills: Categorized technical skills with proficiency levels
  • Education: Degrees, certifications, achievements

Data Access Layer

Server-Side Access

import { ContentService } from '@/lib/data-access';

// Get all projects with filtering and pagination
const projects = await ContentService.getProjects({
  published: true,
  featured: true
}, { field: 'startDate', direction: 'desc' }, 1, 10);

// Get single project
const project = await ContentService.getProject('project-id');

Client-Side Hooks

import { useProjects, useProject } from '@/lib/content-service';

// Use projects with automatic loading states
const { data: projects, loading, error } = useProjects({
  published: true,
  featured: true
});

// Use single project
const { data: project, loading, error } = useProject('project-id');

Content Validation

All content is validated using TypeScript interfaces and runtime validation:

import { ContentValidator } from '@/lib/content-utils';

const validationResult = ContentValidator.validateProject(projectData);
if (!validationResult.isValid) {
  console.log('Validation errors:', validationResult.errors);
}

Utilities

Date Formatting

import { DateUtils } from '@/lib/content-utils';

DateUtils.formatDate('2024-01-15'); // "Jan 15, 2024"
DateUtils.calculateDuration('2023-06-01', '2024-01-30'); // "7 months"
DateUtils.getRelativeTime('2023-12-01'); // "2 months ago"

Text Processing

import { TextUtils } from '@/lib/content-utils';

TextUtils.truncate(text, 150); // Truncate with ellipsis
TextUtils.generateExcerpt(text, 2); // Extract first 2 sentences
TextUtils.slugify('Project Title'); // "project-title"

Image Handling

import { ImageUtils } from '@/lib/content-utils';

ImageUtils.getImageUrl('/images/project.jpg', 'medium'); // Optimized URL
ImageUtils.getPlaceholderImage(400, 300, 'Project Image'); // Placeholder

🎯 Adding New Content

1. Projects

Edit src/data/projects.json and add a new project:

{
  "id": "my-new-project",
  "title": "My Awesome Project",
  "description": "Detailed description...",
  "shortDescription": "Brief summary...",
  "technologies": ["React", "Node.js", "PostgreSQL"],
  "category": "web",
  "status": "completed",
  "featured": true,
  "images": [...],
  "links": [...],
  "startDate": "2024-01-01",
  "endDate": "2024-03-01",
  ...
}

2. Experience

Edit src/data/experience.json:

{
  "id": "new-job",
  "company": "Tech Company",
  "position": "Senior Developer",
  "location": "San Francisco, CA",
  "locationType": "hybrid",
  "startDate": "2024-01-01",
  "isCurrent": true,
  ...
}

3. Research Papers

Edit src/data/research.json:

{
  "id": "paper-new",
  "title": "Novel Research Paper",
  "abstract": "Research abstract...",
  "authors": [...],
  "venue": "Conference Name",
  "venueType": "conference",
  ...
}

πŸš€ Deployment

GitHub Pages Deployment

  1. Enable GitHub Pages in your repository settings
  2. Set source to "GitHub Actions"
  3. Push to main branch - deployment happens automatically

The site will be available at: https://username.github.io/repository-name

Environment Variables

Copy .env.example to .env.local and configure:

NEXT_PUBLIC_SITE_URL=https://username.github.io
NEXT_PUBLIC_SITE_NAME="Your Name - Portfolio"
NEXT_PUBLIC_SITE_DESCRIPTION="Your professional tagline"
NEXT_PUBLIC_CONTACT_EMAIL=your.email@example.com

Custom Domain

To use a custom domain with GitHub Pages:

  1. Add CNAME file to the public directory with your domain
  2. Configure DNS settings with your domain provider
  3. Enable "Enforce HTTPS" in GitHub Pages settings

πŸ”§ Development

Prerequisites

  • Node.js 18+
  • npm or yarn

Getting Started

  1. Clone the repository
git clone https://github.com/username/portfolio.git
cd portfolio
  1. Install dependencies
npm install
  1. Run development server
npm run dev
  1. Open browser to http://localhost:3000

Available Scripts

npm run dev          # Start development server
npm run build        # Build for production
npm run start        # Start production server
npm run lint         # Run ESLint
npm run lint:fix     # Fix ESLint errors
npm run format       # Format code with Prettier
npm run type-check   # Run TypeScript type checking

Adding Custom Components

  1. Create component in src/components/
  2. Use Shadcn UI components from src/components/ui/
  3. Follow existing patterns for styling and TypeScript

API Routes

API routes are available at /api/data/:

  • GET /api/data/projects - List projects with filtering
  • GET /api/data/projects/[id] - Get single project
  • GET /api/data/projects/featured - Get featured projects
  • GET /api/data/research - List research papers
  • GET /api/data/experience - List experience
  • GET /api/data/recommendations - List recommendations
  • GET /api/data/about-me - Get about me data
  • GET /api/data/search?q=query - Search all content
  • GET /api/data/analytics - Get analytics data

🎨 Customization

Theme Colors

Modify theme colors in src/app/globals.css:

:root {
  --background: 0 0% 100%;
  --foreground: 222.2 84% 4.9%;
  --primary: 222.2 47.4% 11.2%;
  /* ... */
}

Fonts

Configure fonts in src/app/layout.tsx:

import { Inter } from 'next/font/google';

const inter = Inter({ subsets: ['latin'] });

Layout

Modify layout components in src/components/layout/:

  • header.tsx - Navigation header
  • footer.tsx - Site footer
  • main-layout.tsx - Page layout wrapper

πŸ“Š Analytics & SEO

SEO Features

  • Dynamic meta tags for each page
  • Open Graph and Twitter Card support
  • Structured data for projects and research
  • Sitemap generation
  • Robots.txt

Analytics Integration

Add Google Analytics by setting NEXT_PUBLIC_GA_ID in environment variables.

🀝 Contributing

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/amazing-feature
  3. Make changes and commit: git commit -m 'Add amazing feature'
  4. Push to branch: git push origin feature/amazing-feature
  5. Open a Pull Request

πŸ“ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ™ Acknowledgments


Built with ❀️ using modern web technologies

About

No description, website, or topics provided.

Resources

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •