Note: The
siteUrlindata/config.jsonis the source of truth. Update it there when switching domains.
A modern, dynamic portfolio website built with vanilla JavaScript and JSON-based content management. Hosted on GitHub Pages with easy-to-update content files.
β¨ Fully Dynamic Content - Update all portfolio content by editing JSON files
π± Responsive Design - Beautiful on desktop, tablet, and mobile devices
β‘ Zero Build Process - No build tools needed, works directly on GitHub Pages
π¨ Modern Styling - Clean, professional design with smooth animations
π§ Contact Form - Formspree integration for easy form submissions
π Google Analytics - Built-in analytics tracking
π SEO Optimized - Meta tags, Open Graph, and structured data
techcrafter/
βββ index.html # Main HTML template
βββ css/
β βββ style.css # Complete stylesheet
βββ js/
β βββ app.js # Main application logic
βββ data/
β βββ config.json # Site configuration & social links
β βββ projects.json # Portfolio projects
β βββ experience.json # Work experience
β βββ skills.json # Technical skills
β βββ certificates.json # Courses & certifications
βββ assets/
β βββ images/
β βββ logo.webp
β βββ profile.jpg
β βββ projects/ # Project images
βββ .gitignore
βββ README.md
Contains site-wide configuration:
- Site URL (dynamic for domain changes)
- Author information
- Social media links
- CTA buttons
- About description
Array of project objects with:
- Title and description
- GitHub links
- Project images (local paths)
- Technology tags
Array of job experience with:
- Position and company
- Date range
- Job description
Grouped skills by category:
- Programming languages
- Frameworks & tools
- Databases
- Other technical skills
Array of certifications with:
- Certificate title
- Issuing organization
- External links to credentials
# Create a new repository named eslam5464.github.io
git clone https://github.com/eslam5464/eslam5464.github.io.git
cd eslam5464.github.io
# Copy all files from this project
cp -r techcrafter/* .
# Initialize git and push
git add .
git commit -m "Initial commit: Tech Crafter portfolio"
git push origin main- Go to repository Settings
- Scroll to "GitHub Pages"
- Select "main" branch as source
- Your site will be live at
https://eslam5464.github.io
-
Go to formspree.io
-
Sign up or log in
-
Create a new form for
eslam@techcrafter.dev -
Get your Form ID (looks like:
f/xxxxxxxx) -
Update
data/config.jsonwith your Form ID:"contact": { "formEmail": "eslam@techcrafter.dev", "formspreeId": "YOUR_ACTUAL_FORM_ID" }
- Go to analytics.google.com
- Create a new property for your website
- Get your GA ID (looks like:
G-XXXXXXXXXX) - Replace
G-XXXXXXXXXXinindex.htmlwith your actual ID
Simply edit the JSON files in the data/ folder:
To add a new project:
// data/projects.json
{
"id": 6,
"title": "New Project",
"description": "Project description",
"image": "assets/images/projects/new-project.jpg",
"github": "https://github.com/eslam5464/project",
"tags": ["Technology", "Stack"]
}To update experience:
// data/experience.json
{
"id": 1,
"position": "Your Position",
"company": "Company Name",
"startDate": "Jan 2025",
"endDate": "Present",
"description": "Job description"
}To add a new certificate:
// data/certificates.json
{
"id": 6,
"title": "New Certificate",
"issuer": "Issuing Organization",
"url": "https://certificate-url",
"date": "2025"
}Edit css/style.css to customize:
- Color scheme (variables at the top)
- Typography and font sizes
- Spacing and padding
- Responsive breakpoints
- Add images to
assets/images/ - Reference them in JSON files with relative paths
- Supported formats: JPG, PNG, WebP
When ready to use your own domain (e.g., techcrafter.dev):
- Purchase domain from registrar
- In GitHub repo Settings β Pages β Custom domain
- Add your domain name
- Update
data/config.jsonsiteUrlto your domain - Configure DNS settings at your registrar
- Chrome/Edge 90+
- Firefox 88+
- Safari 14+
- Mobile browsers (iOS Safari 14+, Chrome Android)
- Lighthouse Score: 90+
- Zero external dependencies
- ~30KB total size (minified)
- Fast page load times
- Update content: Edit JSON files directly on GitHub
- Change styling: Modify CSS in
css/style.css - Add sections: Edit HTML in
index.htmland add rendering injs/app.js
Form not receiving emails?
- Verify Formspree Form ID in config.json
- Check spam folder
- Ensure email is verified in Formspree
Images not loading?
- Check image paths in JSON files are correct
- Verify images exist in
assets/images/folder - Use relative paths starting with
assets/
Analytics not tracking?
- Verify GA ID is correct in index.html
- Wait 24 hours for first data to appear
- Check Google Analytics property settings
This project is free to use and customize for personal use.
For issues or questions, check the following:
- GitHub Issues in the repository
- Formspree documentation: https://formspree.io/docs
- Google Analytics Help: https://support.google.com/analytics