This is a modern, animated, and fully responsive portfolio template built with nextjs, typescript, Tailwind CSS, and Framer Motion. It's designed to be easily customizable and provides a great starting point for developers who want to create a stunning personal portfolio.
- Modern UI/UX: Clean and visually appealing design.
- Smooth Animations: Engaging animations powered by Framer Motion.
- Responsive Design: Looks great on all devices, from mobile to desktop.
- Easy to Customize: All portfolio data is centralized in a single file for easy updates.
- Component-Based: Built with reusable React components.
- Node.js (v18 or higher)
- npm or yarn
-
Clone the repository:
git clone https://github.com/Sofiane-Bahmed/portfolio-template.git cd portfolio-template -
Install dependencies:
npm install # or yarn install -
Run the development server:
npm run dev # or yarn devThe application will be available at
http://localhost:3000.
To create a production build, run:
npm run build
# or
yarn buildThis will generate a dist directory with the optimized and minified files for deployment.
All the data for the portfolio (personal information, projects, skills, etc.) is located in data/index.ts. You can easily customize the content by modifying this file.
This file exports a DATA object that contains all the information for your portfolio. Here's a breakdown of the structure:
home: Content for the home page, including the hero section, skills overview, and testimonials.about: Information for the about page, including your profile, education, experience, and technologies.projects: A list of your featured projects, including details, images, and links.contact: Contact information and the Google Maps source for the contact page.morphingTexts: The texts used in the morphing text animations on each page.navigation: The links for the main navigation menu.footer: Content for the footer, including social links and services.
Simply update the values in this file to personalize your portfolio.
How to Add Your CV
-
Upload Your CV: Place your CV file in thepublicfolder of the project. -
Update the Download Link: Modify thehrefattribute of the "Download CV" button in thehero.tsxfile to point to your uploaded CV.
Here's an example
<Link
download
aria-label="Download CV in PDF format"
className="w-full sm:w-auto"
href="/your-cv-filename.pdf"
>
<Button
fullWidth
aria-label="Downoald CV"
color="primary"
endContent={<Icon icon="lucide:download" />}
size="lg"
variant="shadow"
>
Download CV
</Button>
</Link>This template uses Email.js for handling contact form submissions without a backend. To set it up:
-
Create an Email.js account: If you don't have one, sign up at Email.js.
-
Create a new Email Service: Go to Email Services and add a new service (e.g., Gmail, Outlook). Follow the instructions to connect your email account.
-
Create a new Email Template: Go to Email Templates and create a new template. You can use the default template or customize it. Make note of your Template ID.
Here's an example template you can use:
<div style="font-family: system-ui, sans-serif, Arial; font-size: 12px">
<div>
A message by <strong>{{name}}</strong> ({{email}}) has been received with the subject
"<strong>{{subject}}</strong>". Kindly respond at your earliest convenience.
</div>
<div
style="
margin-top: 20px;
padding: 15px 0;
border-width: 1px 0;
border-style: dashed;
border-color: lightgrey;
"
>
<table role="presentation">
<tr>
<td style="vertical-align: top">
<div
style="
padding: 6px 10px;
margin: 0 10px;
background-color: aliceblue;
border-radius: 5px;
font-size: 26px;
"
role="img"
>
📧
</div>
</td>
<td style="vertical-align: top">
<div style="color: #2c3e50; font-size: 16px">
<strong>{{name}}</strong> — <a href="mailto:{{email}}" style="color: #3498db">{{email}}</a>
</div>
<div style="color: #999999; font-size: 13px"><em>Subject:</em> {{subject}}</div>
<p style="font-size: 16px; margin-top: 10px">{{message}}</p>
</td>
</tr>
</table>
</div>
</div>
-
Get your Public Key: You can find your Public Key under Account -> API Keys.
-
Configure Environment Variables: Create a
.env.localfile in the root of your project (if it doesn't exist) and add the following environment variables:NEXT_PUBLIC_EMAILJS_SERVICE_ID=your_service_id NEXT_PUBLIC_EMAILJS_TEMPLATE_ID=your_template_id NEXT_PUBLIC_EMAILJS_PUBLIC_KEY=your_public_keyReplace
your_service_id,your_template_id, andyour_public_keywith the values from your Email.js account. -
Restart your development server: After adding the environment variables, restart your development server (
npm run devoryarn dev) for the changes to take effect.
- Next.js: A React framework for production.
- React: A JavaScript library for building user interfaces.
- Tailwind CSS: A utility-first CSS framework.
- Framer Motion: A library for creating animations in React.
- HeroUI: A React UI library for beautiful and accessible components.
- Iconify: A library for using icons from various icon sets.
- TypeScript: A typed superset of JavaScript.
This project is licensed under the MIT License. See the LICENSE file for more details.