This is a modern portfolio built with Next.js and React, featuring rich animations, interactive components, and Markdown-powered content management. It provides a scalable, performant foundation for creative professionals to showcase their work and publish engaging content.
- Modern UI built with Next.js + React + Sass
- Dynamic animations powered by GSAP and Parallax.js
- Interactive carousels with Swiper
- Markdown-based content management for posts and projects
- Component-based architecture (Hero, About, Services, Team, Testimonials, etc.)
- Responsive design and smooth page transitions
- Blog with pagination and dynamic routing
- Project portfolio with masonry and grid layouts
- Contact forms with Formik validation
- Date utilities with date-fns
- Cursor effects and scroll animations
- SEO-optimized pages
mwakidenis-Next.js-Template/
βββ src/
β βββ common/ # Shared utilities & hooks
β β βββ cursor.js # Custom cursor effects
β β βββ preloader.js # Page preloader
β β βββ scrollAnims.js # Scroll animations
β β βββ sliderProps.js # Slider properties
β β βββ useClickOutside.js # Hook for click outside detection
β β βββ useLocalStorage.js # Local storage hook
β β βββ utilits.js # Utility functions
β β
β βββ components/ # Reusable UI components
β β βββ ImageView.jsx # Image viewer component
β β βββ PageBanner.jsx # Page banner section
β β βββ PageBannerDark.jsx # Dark theme banner
β β βββ PaginatedBlog.jsx # Paginated blog posts
β β βββ Pagination.jsx # Pagination controls
β β βββ ProjectInner[One-Six].jsx # Project detail templates
β β βββ ProjectsGrid.jsx # Grid layout for projects
β β βββ ProjectsMasonry.jsx # Masonry layout for projects
β β β
β β βββ sections/ # Page sections
β β β βββ About.jsx
β β β βββ CallToAction.jsx
β β β βββ HeroOne.jsx & HeroTwo.jsx
β β β βββ LatestPosts.jsx
β β β βββ PopularPosts.jsx
β β β βββ Pricing.jsx
β β β βββ RelatedPosts.jsx
β β β βββ RelatedServices.jsx
β β β βββ Services.jsx
β β β βββ Subscribe.jsx
β β β βββ Team.jsx
β β β
β β βββ sliders/ # Slider components
β β βββ Partners.jsx
β β βββ Projects.jsx
β β βββ Testimonial.jsx
β β
β βββ data/ # Content & configuration
β β βββ app.json # App configuration
β β βββ posts/ # Markdown blog posts
β β β βββ *.md # Individual post files
β β βββ projects/ # Project data
β β βββ sections/ # Section configurations
β β βββ services/ # Services data
β β βββ sliders/ # Slider data
β β
β βββ layouts/ # Layout components
β β βββ Layouts.js # Main layout wrapper
β β βββ back-to-top/ # Back to top button
β β βββ cursor/ # Cursor layout
β β βββ footers/ # Footer components
β β βββ headers/ # Header components
β β βββ pentagon/ # Pentagon shape layout
β β βββ preloader/ # Preloader component
β β βββ scrollbar-progress/ # Scrollbar progress indicator
β β βββ svg-icons/ # SVG icon components
β β
β βββ lib/ # Helper libraries
β β βββ categories.js # Category utilities
β β βββ date.js # Date utilities
β β βββ posts.js # Blog post utilities
β β βββ projects.js # Project utilities
β β βββ services.js # Services utilities
β β βββ usePagination.js # Pagination hook
β β
β βββ pages/ # Next.js pages
β β βββ _app.js # App wrapper
β β βββ _document.js # Document wrapper
β β βββ index.jsx # Home page
β β βββ 404.jsx # 404 error page
β β βββ blog.jsx # Blog listing
β β βββ contact.jsx # Contact page
β β βββ projects.jsx # Projects page
β β βββ projects-2.jsx & projects-3.jsx # Project layout variants
β β βββ services.jsx # Services page
β β βββ team.jsx # Team page
β β βββ home-2.jsx # Alternative home layout
β β βββ api/ # API routes
β β βββ blog/ # Dynamic blog routes
β β βββ projects/ # Dynamic project routes
β β βββ services/ # Dynamic service routes
β β
β βββ styles/ # Styles
β βββ globals.css # Global styles
β βββ scss/ # SCSS files
β
βββ public/ # Static assets
β βββ css/ # CSS assets
β β βββ plugins/ # Third-party CSS
β β βββ bootstrap-grid.css
β β βββ font-awesome.min.css
β β βββ magnific-popup.css
β β βββ swiper.min.css
β β
β βββ img/ # Images
β βββ blog/ # Blog images
β βββ faces/ # Profile images
β βββ icons/ # Icon assets
β βββ partners/ # Partner logos
β βββ photo/ # General photos
β βββ works/ # Portfolio work images
β
βββ Documentation/ # Project documentation
β βββ index.html
β βββ css/ # Documentation styles
β βββ fonts/ # Fonts
β βββ img/ # Documentation images
β βββ js/ # Documentation scripts
β
βββ jsconfig.json # JavaScript path aliases
βββ next.config.js # Next.js configuration
βββ package.json # Project dependencies
βββ LICENSE # License file
βββ SECURITY.md # Security guidelines
-
Clone the repository
git clone https://github.com/AymaneMehdi/mwakidenis-Next.js-Template.git cd mwakidenis-Next.js-Template
2. **Install dependencies**
```bash
npm install
npm run devRuns the project on http://localhost:3000
npm run build
npm start| Tool / Library | Version | Description |
|---|---|---|
| Next.js | 13.4.3 | React framework for production apps |
| React | 18.2.0 | UI library |
| Sass | 1.49.7 | CSS preprocessor for styling |
| GSAP | 3.11.5 | Animation library for smooth effects |
| Parallax.js | 3.1.0 | Parallax scrolling effects |
| Swiper | 9.0.0 | Modern carousel/slider component |
| Formik | 2.4.2 | Form management and validation |
| Gray-matter | 4.0.3 | Markdown frontmatter parser |
| Remark | 14.0.3 | Markdown processor |
| Remark-HTML | 15.0.2 | Convert Markdown to HTML |
| date-fns | 2.30.0 | Modern date utility library |
| Command | Description |
|---|---|
npm run dev |
Run development server |
npm run build |
Build for production |
npm start |
Start production server |
npm run lint |
Run ESLint for code quality |
Blog posts are written in Markdown format and stored in src/data/posts/. Each post file includes:
- Frontmatter (title, date, author, category, image, etc.)
- Markdown content for the post body
Example: src/data/posts/my-blog-post.md
---
title: "My Blog Post Title"
date: "2024-01-15"
author: "Author Name"
category: "Design"
image: "/img/blog/post-image.jpg"
description: "Post description..."
---
# Blog content goes here...Projects are stored in src/data/projects/ with similar structure to blog posts, supporting both grid and masonry layouts.
Service information is managed in src/data/services/ for the services page.
Use GSAP in your components:
import { useEffect } from 'react';
import gsap from 'gsap';
export default function MyComponent() {
useEffect(() => {
gsap.to('.element', { duration: 1, opacity: 1 });
}, []);
return <div className="element">Animated content</div>;
}Global styles are in src/styles/scss/. Create component-specific styles and import them into your components.
Use provided hooks in src/common/:
useClickOutside()- Detect clicks outside elementsuseLocalStorage()- Manage local storage
This project is licensed under the Strict Proprietary License.