A modern, responsive portfolio website built with Next.js 15, TypeScript, and Tailwind CSS, inspired by Linear's design aesthetic.
- 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
- 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
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)
- Node.js 18.0.0 or higher
- npm 8.0.0 or higher
-
Clone the repository
git clone https://github.com/SengdowJones/portfolio.git cd portfolio -
Install dependencies
npm install
-
Start the development server
npm run dev
-
Open your browser Navigate to http://localhost:3000
npm run dev- Start development servernpm run build- Build for productionnpm run start- Start production servernpm run lint- Run ESLintnpm run lint:fix- Fix ESLint errorsnpm run format- Format code with Prettiernpm run format:check- Check code formattingnpm run type-check- Run TypeScript type checking
This project follows Conventional Commits for commit messages:
<type>(<scope>): <subject>
- 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.
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 dependenciesAll content is centralized in src/lib/constants.ts:
- Personal Information: Update
siteConfigobject - Navigation: Modify
navigationarray (now uses semantic<a>tags for anchor navigation) - Skills: Update
skillsarray with your expertise - Experience: Add/modify entries in
experiencearray - Projects: Update
projectsarray with your work - Education: Modify
educationarray
- Navigation bar uses semantic
<a>tags for anchor navigation, improving accessibility and SEO. - All major sections (
Hero,About,Experience,Projects,Contact) usescroll-mt-20for 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.
- The codebase is TypeScript-first for type safety and maintainability, but can be adapted for plain React/JavaScript if preferred.
- ESLint is configured to enforce code quality, catch unused variables, and encourage accessibility best practices.
- Run
npm run lintto check for issues before committing or deploying.
- Colors: Customize in
tailwind.config.ts - Typography: Update font families and sizes in
globals.css - Animations: Modify scroll reveal animations in
hooks.ts
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
- Component Structure: Each section is a separate component for maintainability
- Custom Hooks: Business logic is extracted into reusable hooks
- Utility Functions: Common functions are centralized in
utils.ts - Type Safety: Full TypeScript implementation with strict typing
- 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
- Create Component: Add new component in appropriate directory
- Add Types: Define TypeScript interfaces if needed
- Update Constants: Add any new content to
constants.ts - Test: Ensure responsive design and accessibility
- Document: Update README if adding new functionality
- Build:
npm run build - Start:
npm run start - Deploy: Upload to your hosting provider
This project is licensed under the MIT License - see the LICENSE file for details.
Sengdao Inthavong
- Email: imsengdao@gmail.com
- LinkedIn: sengdao-inthavong
- GitHub: SengdowJones
Built with β€οΈ using Next.js, TypeScript, and Tailwind CSS