Skip to content

pcakhilnadh/akhilnadhpc_portfolio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

59 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Akhil Nadh PC Portfolio

A modern, full-stack personal portfolio application featuring a React (Vite + TypeScript + Tailwind CSS) frontend and a FastAPI backend. Built with clean architecture, modular design, and a focus on developer experience and maintainability.

πŸš€ Features

  • Dynamic Portfolio: All content (profile, skills, projects, certifications, timeline) is loaded from a backend API and CSV data
  • Modern UI/UX: Responsive, accessible, and beautiful design with dark/light mode
  • Profile Image Support: Dynamic profile images with fallback to initials
  • Welcome Text System: Personalized welcome text for each page
  • POST-based APIs: Secure, consistent API design
  • CSV Data Source: Easily update your data without code changes
  • TypeScript & Pydantic: Type safety across the stack
  • Clean Architecture: SOLID principles, separation of concerns, and modularity

πŸ—οΈ Monorepo Structure

akhilnadhpc_portfolio/
β”œβ”€β”€ back_end/          # FastAPI backend (Python)
β”‚   β”œβ”€β”€ app/           # Application code
β”‚   β”œβ”€β”€ csv_data/      # CSV data files
β”‚   β”œβ”€β”€ requirements.txt
β”‚   └── README.md
β”œβ”€β”€ front_end/         # React frontend (Vite + TypeScript)
β”‚   β”œβ”€β”€ src/           # Source code
β”‚   β”œβ”€β”€ package.json
β”‚   β”œβ”€β”€ tailwind.config.ts
β”‚   β”œβ”€β”€ vite.config.ts
β”‚   └── README.md
β”œβ”€β”€ Dockerfile         # Multi-stage Docker build
β”œβ”€β”€ nginx.conf         # Nginx configuration
β”œβ”€β”€ start.sh           # Container startup script
└── README.md          # Root documentation (this file)

πŸ›οΈ Application Architecture

The portfolio follows a clean, layered architecture with clear separation of concerns:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                              Frontend Layer                                  β”‚
β”‚                         (React + TypeScript + Vite)                         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”‚
β”‚  β”‚   Pages     β”‚  β”‚ Components  β”‚  β”‚    Hooks    β”‚  β”‚    Types    β”‚        β”‚
β”‚  β”‚             β”‚  β”‚             β”‚  β”‚             β”‚  β”‚             β”‚        β”‚
β”‚  β”‚ β€’ Home      β”‚  β”‚ β€’ UI        β”‚  β”‚ β€’ useAbout  β”‚  β”‚ β€’ Data      β”‚        β”‚
β”‚  β”‚ β€’ About     β”‚  β”‚ β€’ Layout    β”‚  β”‚ β€’ useSkills β”‚  β”‚ β€’ API       β”‚        β”‚
β”‚  β”‚ β€’ Skills    β”‚  β”‚ β€’ Cards     β”‚  β”‚ β€’ useProjectsβ”‚ β”‚ β€’ Componentsβ”‚        β”‚
β”‚  β”‚ β€’ Projects  β”‚  β”‚ β€’ Modals    β”‚  β”‚ β€’ useTimelineβ”‚ β”‚             β”‚        β”‚
β”‚  β”‚ β€’ Timeline  β”‚  β”‚ β€’ Charts    β”‚  β”‚             β”‚  β”‚             β”‚        β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β”‚
                                    β–Ό HTTP POST /api/*
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                              Backend Layer                                   β”‚
β”‚                           (FastAPI + Python)                                β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”‚
β”‚  β”‚   Routers   β”‚  β”‚  Services   β”‚  β”‚Repositories β”‚  β”‚   Models    β”‚        β”‚
β”‚  β”‚             β”‚  β”‚             β”‚  β”‚             β”‚  β”‚             β”‚        β”‚
β”‚  β”‚ β€’ /api/     β”‚  β”‚ β€’ Business  β”‚  β”‚ β€’ Data      β”‚  β”‚ β€’ Pydantic  β”‚        β”‚
β”‚  β”‚ β€’ /api/aboutβ”‚  β”‚ β€’ Logic     β”‚  β”‚ β€’ Access    β”‚  β”‚ β€’ Validationβ”‚        β”‚
β”‚  β”‚ β€’ /api/skillsβ”‚ β”‚ β€’ Processingβ”‚  β”‚ β€’ CSV       β”‚  β”‚ β€’ Serializationβ”‚      β”‚
β”‚  β”‚ β€’ /api/projectsβ”‚ β”‚             β”‚  β”‚ β€’ Reading   β”‚  β”‚             β”‚        β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β”‚
                                    β–Ό CSV Files
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                              Data Layer                                      β”‚
β”‚                              (CSV Files)                                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”‚
β”‚  β”‚   Personal  β”‚  β”‚   Skills    β”‚  β”‚  Projects   β”‚  β”‚Work Experienceβ”‚       β”‚
β”‚  β”‚             β”‚  β”‚             β”‚  β”‚             β”‚  β”‚             β”‚        β”‚
β”‚  β”‚ β€’ Profile   β”‚  β”‚ β€’ Skills    β”‚  β”‚ β€’ Projects  β”‚  β”‚ β€’ Experienceβ”‚        β”‚
β”‚  β”‚ β€’ Education β”‚  β”‚ β€’ Categoriesβ”‚  β”‚ β€’ Achievementsβ”‚ β”‚ β€’ Companies β”‚        β”‚
β”‚  β”‚ β€’ Hobbies   β”‚  β”‚ β€’ Levels    β”‚  β”‚ β€’ ML Models β”‚  β”‚ β€’ References β”‚        β”‚
β”‚  β”‚ β€’ Social    β”‚  β”‚             β”‚  β”‚ β€’ Skills    β”‚  β”‚             β”‚        β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Architecture Principles:

  • Separation of Concerns: Each layer has a specific responsibility
  • Clean Architecture: Dependencies flow inward (Frontend β†’ Backend β†’ Data)
  • Type Safety: TypeScript frontend + Pydantic backend models
  • Data-Driven: All content comes from CSV files, no hardcoded data
  • Modular Design: Components, services, and repositories are loosely coupled
  • API-First: Backend provides consistent POST-based API endpoints

✨ Key Advantages & Achievements

πŸ—οΈ Architecture Benefits

  • Clean Architecture: Follows SOLID principles with clear separation of concerns
  • Scalable Design: Easy to add new features without affecting existing code
  • Type Safety: End-to-end type safety with TypeScript + Pydantic validation
  • Modular Components: Loosely coupled, reusable components and services
  • API-First Approach: Consistent, well-documented REST API endpoints

πŸ”„ Data Layer Flexibility

  • Database Agnostic: CSV layer can be easily replaced with any database system
  • Cloud Integration Ready: Can switch to Google Drive, AWS S3, or other cloud storage
  • No Code Changes: Data updates require only CSV file modifications
  • Version Control Friendly: CSV files can be tracked in Git for data history
  • Easy Migration: Simple adapter pattern allows switching data sources

πŸš€ Development Experience

  • Hot Reload: Fast development with Vite's instant refresh
  • Auto-Generated Docs: FastAPI automatically generates interactive API documentation
  • TypeScript Integration: Full IntelliSense and compile-time error checking
  • Modern Tooling: ESLint, Prettier, and modern build tools
  • Docker Ready: Production-ready containerization with multi-stage builds

🎨 User Experience

  • Responsive Design: Works perfectly on desktop, tablet, and mobile
  • Dark/Light Mode: Automatic theme switching with system preferences
  • Smooth Animations: Framer Motion for polished user interactions
  • Accessibility: WCAG compliant with proper ARIA labels and keyboard navigation
  • Performance Optimized: Lazy loading, code splitting, and optimized builds

πŸ”§ Maintenance & Operations

  • Single Container Deployment: Easy deployment with Docker
  • Nginx Reverse Proxy: High-performance static file serving and API routing
  • Health Checks: Built-in container health monitoring
  • Environment Agnostic: Works in development, staging, and production
  • Easy Updates: Update content without redeploying the application

πŸ“Š Data Management

  • Structured Data: Well-organized CSV files with clear relationships
  • No Database Setup: Zero configuration required for data storage
  • Easy Backup: Simple file-based backup and restore
  • Collaborative Editing: Multiple people can edit CSV files simultaneously
  • Data Validation: Pydantic models ensure data integrity

🌟 Technical Achievements

  • Full-Stack TypeScript: Type safety from frontend to backend
  • Modern React Patterns: Custom hooks, context, and functional components
  • FastAPI Best Practices: Dependency injection, middleware, and error handling
  • Production Ready: Docker, Nginx, and cloud deployment ready
  • SEO Friendly: Server-side rendering capabilities with React

πŸŽ“ What I Learned

🐍 Backend Development

  • FastAPI Mastery: Built robust APIs with automatic documentation, validation, and error handling
  • Clean Architecture: Implemented SOLID principles with proper separation of concerns
  • Pydantic Models: Created type-safe data validation and serialization
  • Repository Pattern: Designed data access layer for easy database switching
  • Dependency Injection: Used FastAPI's dependency system for clean service management

βš›οΈ Frontend Development

  • Modern React: Mastered hooks, context, and functional components
  • TypeScript: Implemented end-to-end type safety across the application
  • Vite Build System: Optimized development experience with fast hot reload
  • Custom Hooks: Created reusable data fetching and state management hooks
  • Component Architecture: Built modular, reusable UI components

🎨 UI/UX Design

  • Tailwind CSS: Built responsive, accessible designs with utility-first CSS
  • shadcn/ui: Integrated modern component library with consistent design system
  • Framer Motion: Added smooth animations and micro-interactions
  • Dark/Light Mode: Implemented theme switching with system preference detection
  • Responsive Design: Created mobile-first, cross-device compatible layouts

🐳 DevOps & Deployment

  • Docker: Created multi-stage builds for optimized production images
  • Nginx Configuration: Set up reverse proxy and static file serving
  • Container Orchestration: Managed multiple services in single container
  • Health Checks: Implemented container monitoring and reliability
  • Cloud Deployment: Prepared for Google Cloud Run and other cloud platforms

πŸ“Š Data Management

  • CSV Processing: Built efficient data access layer for structured files
  • Data Modeling: Designed normalized data structures with relationships
  • Type Safety: Ensured data integrity with Pydantic validation
  • File Organization: Created maintainable data structure with clear naming

πŸ”§ Development Tools

  • ESLint & Prettier: Maintained consistent code quality and formatting
  • Git Workflow: Managed version control with proper branching and commits
  • Package Management: Handled dependencies for both Python and Node.js
  • Build Optimization: Optimized bundle sizes and loading performance

πŸ—οΈ System Design

  • API Design: Created RESTful endpoints with consistent patterns
  • Error Handling: Implemented comprehensive error management
  • Performance Optimization: Applied lazy loading and code splitting
  • Security Best Practices: Used proper CORS, validation, and input sanitization

πŸš€ Problem Solving

  • Debugging: Resolved complex issues across frontend, backend, and deployment
  • Integration: Connected multiple technologies seamlessly
  • Performance Tuning: Optimized both development and production environments
  • User Experience: Focused on creating intuitive, accessible interfaces

πŸ“š Learning Methodology

  • Documentation: Created comprehensive READMEs and inline documentation
  • Code Organization: Structured large codebases with clear architecture
  • Testing Strategies: Implemented type safety as testing methodology
  • Continuous Learning: Adapted to new technologies and best practices

🐳 Docker & Nginx

This project is fully containerized with a multi-stage Docker build, using Nginx for high-performance static file serving and as a reverse proxy to the FastAPI backend.

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Docker Container                         β”‚
β”‚                     (Port 8080)                            β”‚
β”‚                                                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                β”‚
β”‚  β”‚     Nginx       β”‚    β”‚    FastAPI      β”‚                β”‚
β”‚  β”‚   (Port 8080)   β”‚    β”‚   (Port 8000)   β”‚                β”‚
β”‚  β”‚                 β”‚    β”‚                 β”‚                β”‚
β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚    β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚                β”‚
β”‚  β”‚ β”‚   React     β”‚ β”‚    β”‚ β”‚   API       β”‚ β”‚                β”‚
β”‚  β”‚ β”‚  Frontend   β”‚ β”‚    β”‚ β”‚ Endpoints   β”‚ β”‚                β”‚
β”‚  β”‚ β”‚  (Static)   β”‚ β”‚    β”‚ β”‚             β”‚ β”‚                β”‚
β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚    β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚                β”‚
β”‚  β”‚                 β”‚    β”‚                 β”‚                β”‚
β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚    β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚                β”‚
β”‚  β”‚ β”‚   Reverse   β”‚ β”‚    β”‚ β”‚   CSV       β”‚ β”‚                β”‚
β”‚  β”‚ β”‚   Proxy     β”‚ β”‚    β”‚ β”‚   Data      β”‚ β”‚                β”‚
β”‚  β”‚ β”‚  (/api/*)   β”‚ β”‚    β”‚ β”‚             β”‚ β”‚                β”‚
β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚    β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚                β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
                              β–Ό
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚   External      β”‚
                    β”‚   Requests      β”‚
                    β”‚                 β”‚
                    β”‚ GET /           β”‚ β†’ React App
                    β”‚ GET /about      β”‚ β†’ React App (Client-side routing)
                    β”‚ POST /api/      β”‚ β†’ FastAPI Home
                    β”‚ POST /api/about β”‚ β†’ FastAPI About
                    β”‚ GET /api/docs   β”‚ β†’ FastAPI Swagger UI
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

How it works:

  • Nginx handles all incoming traffic on port 8080
  • Static files (React app) are served directly by Nginx
  • API requests (/api/*) are proxied to FastAPI running on internal port 8000
  • Single container contains both services for easy deployment

⚑ Quick Start (Docker)

This is the recommended way to run the application.

Prerequisites

  • Docker installed and running.

1. Build the Docker Image

This command builds the final, production-ready image, which includes building the frontend, installing backend dependencies, and setting up Nginx.

docker build -t akhilnadhpc-portfolio:final .

2. Run the Docker Container

This command starts the container, mapping your local port 8080 to the container's port 8080.

docker run --name portfolio-app -p 8080:8080 akhilnadhpc-portfolio:final

3. Access the Application


πŸ’» Local Development (Without Docker)

Use this method if you want to run the frontend and backend services separately for development.

1. Backend (FastAPI)

cd back_end
pip install -r requirements.txt
python -m uvicorn app.main:app --reload
  • The backend will be available at http://localhost:8000
  • See back_end/README.md for full API docs and configuration

2. Frontend (React)

cd front_end
npm install
npm run dev
  • The frontend will be available at http://localhost:5173
  • Edit front_end/src/config.yml to set your username
  • See front_end/README.md for full usage and customization

πŸ“š Documentation

🧩 Tech Stack

  • Frontend: React, TypeScript, Vite, Tailwind CSS, shadcn/ui, Framer Motion
  • Backend: FastAPI, Pydantic, Python, CSV data
  • Dev Tools: ESLint, Prettier, Docker (optional)

🀝 Contributing

  1. Read the frontend and backend READMEs for architecture and guidelines
  2. For development, use the "Local Development (Without Docker)" method
  3. Follow the existing code style and patterns
  4. Add type hints and docstrings (backend) or TypeScript types (frontend)
  5. Test your changes
  6. Open a pull request with a clear description

πŸ“„ License

This project is part of the personal portfolio of Akhil Nadh PC. Feel free to use as a template for your own portfolio!

About

Personal Portfolio site of Akhil Nadh PC , Data Scientist

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors