Skip to content

quangnd2203/quangit.dev

Repository files navigation

quangit.dev Portfolio

Next.js TypeScript Tailwind CSS Framer Motion React

Live Demo Status

A modern, professional portfolio website built with Next.js 14+ and Clean Architecture

Showcasing 5+ years of mobile engineering experience with Flutter, iOS, and React Native


πŸ“‹ Overview

This is a professional portfolio website showcasing the work and expertise of Nguyen Dang Quang, a Mobile Engineer with 5+ years of experience specializing in Flutter, iOS (SwiftUI), and React Native. The portfolio is built using Clean Architecture principles with a feature-based module structure, ensuring maintainability, scalability, and code quality.

Key Highlights

  • ✨ Modern UI/UX with smooth animations and responsive design
  • πŸ—οΈ Clean Architecture with feature-based modules for maintainability
  • ⚑ Performance Optimized with Next.js 14+ App Router and code splitting
  • 🎨 Professional Design with light theme and glassmorphism effects
  • πŸ“± Fully Responsive - works seamlessly on all devices
  • πŸ”’ Type-Safe with TypeScript throughout the codebase

✨ Features

🏠 Home Section

  • Hero Section with gradient background and decorative elements
  • Professional avatar display
  • Key highlights and achievements badges
  • Call-to-action buttons (Contact, View Projects, Download CV)
  • Smooth fade-in and stagger animations

πŸ’Ό Experience Section

  • Minimal List Design (LinkedIn-inspired, clean and professional)
  • Work history with company, role, and period
  • "Current" badge for present positions
  • Achievement bullet points
  • Technology tags with hover effects
  • Auto-sorted by date (Present positions first)

πŸ› οΈ Skills Section

  • 5 Skill Categories: Mobile, Native, Web, Database, DevOps
  • Color-coded Proficiency Badges: Expert, Advanced, Intermediate, Beginner
  • Glassmorphism card design with hover effects
  • 3-tier sorting: Proficiency > Priority > Alphabetical
  • Responsive grid layout (1/2/3 columns)
  • Visual legend showing proficiency levels

πŸš€ Projects Section

  • Card Grid Layout with featured projects prioritized
  • Project thumbnails with fallback handling
  • Interactive modal with image gallery
  • Project achievements with check icons
  • Technology stack display
  • GitHub and Demo links (when available)
  • Smooth animations and transitions

πŸ“§ Contact Section

  • Split Layout: Contact info on left, form on right
  • Contact form with validation
  • Rate limiting (30 seconds between submissions)
  • Success/error message handling
  • Loading states and user feedback
  • Responsive stack on mobile devices

πŸ› οΈ Tech Stack

Core Technologies

Architecture

  • Clean Architecture - Separation of concerns with layered architecture
  • Feature-Based Modules - Independent, reusable feature modules
  • Repository Pattern - Data access abstraction
  • Use Cases - Business logic orchestration
  • MVVM Pattern - Hooks as ViewModels

Development Tools

  • ESLint - Code linting
  • TypeScript Compiler - Type checking
  • PostCSS - CSS processing

πŸ—οΈ Architecture

This project follows Clean Architecture principles with a feature-based module structure:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  Presentation Layer                      β”‚
β”‚              (src/app/ - Next.js Pages)                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                     β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              Feature Layer                              β”‚
β”‚    (src/features/ - Business Logic & UI Components)     β”‚
β”‚  β€’ home β€’ skills β€’ experience β€’ projects β€’ contact     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                     β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                 Core Layer                              β”‚
β”‚  (src/core/ - Domain Entities, Use Cases, Interfaces)  β”‚
β”‚  β€’ entities β€’ use-cases β€’ interfaces                    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                     β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚            Infrastructure Layer                          β”‚
β”‚  (src/infrastructure/ - Data Access, External Services) β”‚
β”‚  β€’ repositories β€’ services                               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Architecture Flow

Component (UI)
    ↓ uses
Hook (ViewModel - UI State Management)
    ↓ calls
Use Case (Business Logic Orchestration)
    ↓ uses
Repository Interface (Port)
    ↓ implemented by
Repository (Data Access - Infrastructure)

Key Principles

  1. Dependency Rule: Dependencies point inward (toward core)
  2. Feature Independence: Features don't depend on each other
  3. Separation of Concerns: UI, business logic, and data access are separated
  4. Type Safety: TypeScript interfaces ensure type safety across layers

πŸ“ Project Structure

quangit.dev/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ app/                    # Next.js App Router (Presentation Layer)
β”‚   β”‚   β”œβ”€β”€ layout.tsx          # Root layout with Header, Footer
β”‚   β”‚   β”œβ”€β”€ page.tsx            # Home page composing all sections
β”‚   β”‚   β”œβ”€β”€ globals.css         # Global styles, Tailwind config
β”‚   β”‚   └── ...
β”‚   β”‚
β”‚   β”œβ”€β”€ features/               # Feature Modules (Business Logic Layer)
β”‚   β”‚   β”œβ”€β”€ home/               # Home/Hero section
β”‚   β”‚   β”‚   β”œβ”€β”€ components/
β”‚   β”‚   β”‚   β”œβ”€β”€ hooks/
β”‚   β”‚   β”‚   └── index.ts
β”‚   β”‚   β”œβ”€β”€ skills/             # Skills section
β”‚   β”‚   β”œβ”€β”€ experience/         # Experience section
β”‚   β”‚   β”œβ”€β”€ projects/           # Projects section
β”‚   β”‚   └── contact/            # Contact section
β”‚   β”‚
β”‚   β”œβ”€β”€ core/                   # Core Domain Layer
β”‚   β”‚   β”œβ”€β”€ entities/           # Domain entities (7 entities)
β”‚   β”‚   β”œβ”€β”€ use-cases/          # Business use cases (6 use cases)
β”‚   β”‚   └── interfaces/          # Repository interfaces (6 interfaces)
β”‚   β”‚
β”‚   β”œβ”€β”€ infrastructure/         # Infrastructure Layer
β”‚   β”‚   └── repositories/       # Data repositories
β”‚   β”‚
β”‚   └── shared/                 # Shared Resources
β”‚       β”œβ”€β”€ components/         # Reusable UI components
β”‚       β”‚   β”œβ”€β”€ layout/         # Header, Footer, Navigation
β”‚       β”‚   └── ui/            # Base UI components
β”‚       β”œβ”€β”€ hooks/              # Shared React hooks
β”‚       β”œβ”€β”€ utils/              # Utility functions
β”‚       β”œβ”€β”€ constants/          # App-wide constants
β”‚       └── data/               # Mock data
β”‚
β”œβ”€β”€ public/                     # Static assets
β”‚   └── hero/                   # Hero images
β”‚
β”œβ”€β”€ .cursor/                    # Cursor IDE rules
β”‚   └── rules/                  # Architecture and build rules
β”‚
β”œβ”€β”€ package.json
β”œβ”€β”€ tsconfig.json
β”œβ”€β”€ next.config.mjs
β”œβ”€β”€ tailwind.config.ts
└── README.md

πŸš€ Getting Started

Prerequisites

  • Node.js >= 22.0.0
  • npm >= 10.0.0

Installation

  1. Clone the repository

    git clone https://github.com/quangnd2203/quangit.dev.git
    cd quangit.dev
  2. Install dependencies

    npm install
  3. Run development server

    npm run dev
  4. Open your browser Navigate to http://localhost:3000

Build for Production

# Build the application
npm run build

# Start production server
npm start

Other Commands

# Type checking
npm run type-check

# Linting
npm run lint

🎨 Design Highlights

Theme

  • Light Theme Only - Clean, professional appearance
  • Color Palette:
    • Primary: #3b82f6 (Professional Blue)
    • Accent: #10b981 (Tech-friendly Green)
    • Background: White with subtle gray sections

Typography

  • Font: Inter (loaded via next/font)
  • Headings: Bold, large sizes for hierarchy
  • Body: Readable sans-serif with good line height

Layout

  • Container: Max-width 1280px, centered
  • Section Padding: Responsive (py-16 md:py-24)
  • Grid Gaps: Consistent spacing (gap-6, gap-8)

Animations

  • Framer Motion for all animations
  • Fade-in on scroll for sections
  • Stagger effects for lists
  • Smooth transitions for interactions
  • Hover effects on interactive elements

Responsive Design

  • Mobile-first approach
  • Breakpoints: sm, md, lg, xl
  • Flexible layouts that adapt to all screen sizes

πŸ“ Scripts

Command Description
npm run dev Start development server with hot reload
npm run build Build production bundle
npm start Start production server
npm run lint Run ESLint for code linting
npm run type-check Run TypeScript type checking

πŸ”§ Development Guidelines

Code Standards

  • Arrow Functions: All React components and functions use arrow function syntax
  • TypeScript: Full type safety throughout the codebase
  • Clean Architecture: Follow the established architecture patterns
  • Feature Modules: Each feature is self-contained and independent

Architecture Rules

  • βœ… Components use Hooks (ViewModels) for state management
  • βœ… Hooks call Use Cases for business logic
  • βœ… Use Cases use Repository Interfaces
  • βœ… Repositories implement interfaces from core layer
  • ❌ Features should not depend on each other
  • ❌ Components should not directly call repositories

πŸ“„ License

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


πŸ“§ Contact

Nguyen Dang Quang - Mobile Engineer


πŸ™ Acknowledgments


Made with ❀️ by Nguyen Dang Quang

GitHub Website

About

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages