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
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.
- β¨ 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
- 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
- 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)
- 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
- 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
- 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
- Next.js 14+ - React framework with App Router
- TypeScript 5.5 - Type-safe JavaScript
- React 18.3 - UI library
- Tailwind CSS 4.0 - Utility-first CSS framework
- Framer Motion 11.0 - Animation library
- 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
- ESLint - Code linting
- TypeScript Compiler - Type checking
- PostCSS - CSS processing
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 β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Component (UI)
β uses
Hook (ViewModel - UI State Management)
β calls
Use Case (Business Logic Orchestration)
β uses
Repository Interface (Port)
β implemented by
Repository (Data Access - Infrastructure)
- Dependency Rule: Dependencies point inward (toward core)
- Feature Independence: Features don't depend on each other
- Separation of Concerns: UI, business logic, and data access are separated
- Type Safety: TypeScript interfaces ensure type safety across layers
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
- Node.js >= 22.0.0
- npm >= 10.0.0
-
Clone the repository
git clone https://github.com/quangnd2203/quangit.dev.git cd quangit.dev -
Install dependencies
npm install
-
Run development server
npm run dev
-
Open your browser Navigate to http://localhost:3000
# Build the application
npm run build
# Start production server
npm start# Type checking
npm run type-check
# Linting
npm run lint- Light Theme Only - Clean, professional appearance
- Color Palette:
- Primary:
#3b82f6(Professional Blue) - Accent:
#10b981(Tech-friendly Green) - Background: White with subtle gray sections
- Primary:
- Font: Inter (loaded via
next/font) - Headings: Bold, large sizes for hierarchy
- Body: Readable sans-serif with good line height
- Container: Max-width 1280px, centered
- Section Padding: Responsive (py-16 md:py-24)
- Grid Gaps: Consistent spacing (gap-6, gap-8)
- Framer Motion for all animations
- Fade-in on scroll for sections
- Stagger effects for lists
- Smooth transitions for interactions
- Hover effects on interactive elements
- Mobile-first approach
- Breakpoints: sm, md, lg, xl
- Flexible layouts that adapt to all screen sizes
| 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 |
- 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
- β 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
This project is licensed under the MIT License - see the LICENSE file for details.
Nguyen Dang Quang - Mobile Engineer
- π§ Email: quangnd22398.dev@gmail.com
- π± Phone: (+84) 34 781 1798
- π Website: quangit.dev
- π» GitHub: @quangnd2203
- Built with Next.js
- Styled with Tailwind CSS
- Animated with Framer Motion
- Icons and assets from various sources