Skip to content

The 1st iteration of Sengdao Inthavong's personal website. Built with Next.js, TypeScript, and Tailwind CSS.

Notifications You must be signed in to change notification settings

SengdowJones/portfolio

Repository files navigation

Sengdao Inthavong - Portfolio

A modern, responsive portfolio website built with Next.js 15, TypeScript, and Tailwind CSS, inspired by Linear's design aesthetic.

πŸš€ Features

  • Modern Tech Stack: Next.js 15 with App Router, TypeScript, and Tailwind CSS
  • Responsive Design: Mobile-first approach with beautiful animations
  • Performance Optimized: Fast loading with optimized images and code splitting
  • Accessibility: WCAG compliant with proper semantic HTML and ARIA labels
  • SEO Ready: Meta tags, structured data, and optimized for search engines
  • Smooth Animations: Custom scroll reveal animations and micro-interactions
  • Dark Theme: Elegant dark theme with subtle gradients and effects

πŸ› οΈ Tech Stack

  • Framework: Next.js 15.4.2
  • Language: TypeScript 5
  • Styling: Tailwind CSS 3.4.17
  • Icons: Lucide React 0.525.0
  • Deployment: Vercel
  • Code Quality: ESLint, Prettier

πŸ“ Project Structure

src/
β”œβ”€β”€ app/                    # Next.js App Router
β”‚   β”œβ”€β”€ globals.css        # Global styles and animations
β”‚   β”œβ”€β”€ layout.tsx         # Root layout component
β”‚   └── page.tsx           # Main page component (simplified)
β”œβ”€β”€ components/            # Reusable UI components
β”‚   β”œβ”€β”€ sections/          # Page sections
β”‚   β”‚   β”œβ”€β”€ AboutSection.tsx
β”‚   β”‚   β”œβ”€β”€ ContactSection.tsx
β”‚   β”‚   β”œβ”€β”€ CodeShowcaseSection.tsx
β”‚   β”‚   β”œβ”€β”€ ExperienceSection.tsx
β”‚   β”‚   β”œβ”€β”€ HeroSection.tsx
β”‚   β”‚   └── ProjectsSection.tsx
β”‚   └── ui/               # Base UI components
β”‚       β”œβ”€β”€ button.tsx
β”‚       β”œβ”€β”€ card.tsx
β”‚       β”œβ”€β”€ container.tsx
β”‚       β”œβ”€β”€ navigation.tsx
β”‚       β”œβ”€β”€ section.tsx
β”‚       └── index.ts      # Component exports
β”œβ”€β”€ lib/                  # Utilities and configuration
β”‚   β”œβ”€β”€ constants.ts      # Site content and configuration
β”‚   β”œβ”€β”€ hooks.ts          # Custom React hooks
β”‚   β”œβ”€β”€ theme.tsx         # Theme configuration
β”‚   └── utils.ts          # Utility functions
└── styles/               # Additional styles (if needed)

πŸš€ Getting Started

Prerequisites

  • Node.js 18.0.0 or higher
  • npm 8.0.0 or higher

Installation

  1. Clone the repository

    git clone https://github.com/SengdowJones/portfolio.git
    cd portfolio
  2. Install dependencies

    npm install
  3. Start the development server

    npm run dev
  4. Open your browser Navigate 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 format:check - Check code formatting
  • npm run type-check - Run TypeScript type checking

πŸ“ Commit Convention

This project follows Conventional Commits for commit messages:

Format

<type>(<scope>): <subject>

Types

  • feat: New feature for the user
  • fix: Bug fix for the user
  • docs: Changes to documentation
  • style: Formatting, missing semicolons, etc.
  • refactor: Refactoring production code
  • test: Adding or refactoring tests
  • chore: Updating build tasks, dependencies, etc.

Examples

feat(hero): add new animation component
fix(nav): resolve mobile menu toggle issue
refactor(styles): optimize CSS classes
style: format code with prettier
docs: update README with new features
test: add unit tests for utils
chore: update dependencies

🎨 Customization

Content Updates

All content is centralized in src/lib/constants.ts:

  • Personal Information: Update siteConfig object
  • Navigation: Modify navigation array (now uses semantic <a> tags for anchor navigation)
  • Skills: Update skills array with your expertise
  • Experience: Add/modify entries in experience array
  • Projects: Update projects array with your work
  • Education: Modify education array

Navigation & Accessibility

  • Navigation bar uses semantic <a> tags for anchor navigation, improving accessibility and SEO.
  • All major sections (Hero, About, Experience, Projects, Contact) use scroll-mt-20 for consistent anchor offset with the fixed navbar.
  • Focus states and keyboard navigation are supported for all interactive elements.
  • Linting is enforced for code quality and accessibility best practices.

TypeScript & JavaScript

  • The codebase is TypeScript-first for type safety and maintainability, but can be adapted for plain React/JavaScript if preferred.

Linting & Best Practices

  • ESLint is configured to enforce code quality, catch unused variables, and encourage accessibility best practices.
  • Run npm run lint to check for issues before committing or deploying.

Styling

  • Colors: Customize in tailwind.config.ts
  • Typography: Update font families and sizes in globals.css
  • Animations: Modify scroll reveal animations in hooks.ts

Components

Each section is modular and can be easily modified:

  • HeroSection: Landing page with call-to-action
  • AboutSection: Personal info, skills, and achievements
  • ExperienceSection: Work history timeline
  • ProjectsSection: Featured projects showcase
  • ContactSection: Contact information and social links

πŸ”§ Development Guidelines

Code Organization

  1. Component Structure: Each section is a separate component for maintainability
  2. Custom Hooks: Business logic is extracted into reusable hooks
  3. Utility Functions: Common functions are centralized in utils.ts
  4. Type Safety: Full TypeScript implementation with strict typing

Best Practices

  • Component Props: Use TypeScript interfaces for all component props
  • Error Handling: Implement proper error boundaries and fallbacks
  • Performance: Use React.memo and useCallback for expensive operations
  • Accessibility: Include proper ARIA labels and semantic HTML
  • Responsive Design: Test on multiple screen sizes

Adding New Features

  1. Create Component: Add new component in appropriate directory
  2. Add Types: Define TypeScript interfaces if needed
  3. Update Constants: Add any new content to constants.ts
  4. Test: Ensure responsive design and accessibility
  5. Document: Update README if adding new functionality

πŸš€ Deployment

Manual Deployment

  1. Build: npm run build
  2. Start: npm run start
  3. Deploy: Upload to your hosting provider

πŸ“„ License

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

πŸ‘€ Author

Sengdao Inthavong


Built with ❀️ using Next.js, TypeScript, and Tailwind CSS

About

The 1st iteration of Sengdao Inthavong's personal website. Built with Next.js, TypeScript, and Tailwind CSS.

Resources

Stars

Watchers

Forks

Packages

No packages published