profile / README.md
n0w0f's picture
Replace FastAPI with React portfolio
c990683
metadata
title: Profile
emoji: 🐨
colorFrom: yellow
colorTo: green
sdk: docker
pinned: false

Nawaf Portfolio Website

A modern, responsive personal website built with React for academic and professional portfolios.

Features

  • πŸ“± Fully responsive design
  • πŸ“ Markdown support for blog posts and publications
  • 🎨 Modern UI with customizable theme
  • πŸ“Š Sections for publications, projects, experience, and education
  • πŸ” SEO optimized
  • πŸ’» Easy to deploy on Hugging Face Spaces

Repository Structure

nawaf-portfolio/
β”œβ”€β”€ .gitignore
β”œβ”€β”€ README.md
β”œβ”€β”€ app.py                  # Gradio server for HF Spaces
β”œβ”€β”€ package.json            # Project dependencies
β”œβ”€β”€ requirements.txt        # Python dependencies for Gradio
β”œβ”€β”€ public/
β”‚   β”œβ”€β”€ favicon.ico
β”‚   β”œβ”€β”€ index.html
β”‚   β”œβ”€β”€ manifest.json
β”‚   └── assets/
β”‚       └── img/
β”‚           β”œβ”€β”€ profile.jpg
β”‚           └── ...
└── src/
    β”œβ”€β”€ index.js            # Entry point
    β”œβ”€β”€ App.js              # Main App component
    β”œβ”€β”€ theme.js            # Theme configuration
    β”œβ”€β”€ data/               # All content in JSON format
    β”‚   β”œβ”€β”€ about.js
    β”‚   β”œβ”€β”€ education.js
    β”‚   β”œβ”€β”€ experience.js
    β”‚   β”œβ”€β”€ projects.js
    β”‚   β”œβ”€β”€ publications.js
    β”‚   β”œβ”€β”€ skills.js
    β”‚   └── blogs.js
    β”œβ”€β”€ components/         # Reusable components
    β”‚   β”œβ”€β”€ Header.js
    β”‚   β”œβ”€β”€ Footer.js
    β”‚   β”œβ”€β”€ Navigation.js
    β”‚   β”œβ”€β”€ EducationCard.js
    β”‚   β”œβ”€β”€ ExperienceCard.js
    β”‚   β”œβ”€β”€ ProjectCard.js
    β”‚   β”œβ”€β”€ PublicationCard.js
    β”‚   β”œβ”€β”€ BlogCard.js
    β”‚   β”œβ”€β”€ Section.js
    β”‚   └── SkillTag.js
    └── pages/              # Page components
        β”œβ”€β”€ Home.js
        β”œβ”€β”€ Publications.js
        β”œβ”€β”€ Projects.js
        β”œβ”€β”€ Blog.js
        └── Resume.js

Installation

  1. Clone this repository:
git clone https://github.com/yourusername/nawaf-portfolio.git
cd nawaf-portfolio
  1. Install dependencies:
npm install
  1. Start the development server:
npm start

Deployment on Hugging Face Spaces

Option 1: Using the Gradio Interface (Recommended)

  1. Create a new Space on Hugging Face:

    • Go to Hugging Face Spaces
    • Click "Create new Space"
    • Choose a name (e.g., "nawaf-portfolio")
    • Select "Gradio" as the SDK
    • Choose "Public" visibility
    • Click "Create Space"
  2. Push your code to the Space's repository:

git remote add space https://huggingface.co/spaces/yourusername/nawaf-portfolio
git push space main
  1. The Space will automatically build and deploy your application.

Option 2: Using Static React Build

  1. Build your React application:
npm run build
  1. Create a new Space on Hugging Face with "Static" as the SDK.

  2. Push your build folder to the Space's repository.

Customization

Content

All content is stored in the src/data directory. Edit these files to update your personal information:

  • about.js - Bio, contact info, and social links
  • education.js - Academic history
  • experience.js - Work experience
  • projects.js - Research projects
  • publications.js - Academic publications
  • skills.js - Technical skills
  • blogs.js - Blog posts in markdown format

Theme

Edit src/theme.js to customize colors, fonts, and other styling variables.

Adding Blog Posts

To add a new blog post:

  1. Create a new entry in src/data/blogs.js:
{
  id: "unique-id",
  title: "Your Blog Title",
  date: "March 9, 2025",
  excerpt: "Short description of your blog post",
  content: `
# Your Blog Title

This is the content of your blog post in Markdown format.

## Subheading

More content here...
  `
}

Adding Publications

Add new publications to src/data/publications.js:

{
  id: "unique-id",
  title: "Publication Title",
  authors: "Author 1, Author 2, et al.",
  venue: "Journal or Conference Name",
  year: "2025",
  link: "https://doi.org/..."
}

License

MIT