A modern, responsive academic portfolio website showcasing the work and achievements of Mohammad Sadegh Sirjani, Ph.D. student in Computer Science at the University of Texas at San Antonio (UTSA).
- Modern Design: Clean, minimal, and visually appealing interface with contemporary UI patterns
- Responsive Layout: Fully optimized for desktop, tablet, and mobile devices
- Dark/Light Mode: Seamless theme switching with user preference persistence
- Smooth Animations: CSS transitions, scroll animations, and intersection observers
- Interactive Sections: Home, Biography, Education, Research, Publications, Teaching, News, Awards, and Contact
- Contact Form: Integrated with Formspree for reliable email functionality
- Downloadable CV: Direct link to academic CV (PDF format)
- SEO Optimized: Meta tags, structured data, and semantic HTML
- Fast Loading: Optimized assets and minimal dependencies
- Progressive Enhancement: Works without JavaScript enabled
- Accessible: ARIA labels, keyboard navigation, and screen reader support
- Cross-Browser Compatible: Tested on all modern browsers
- PWA Ready: Progressive Web App manifest included
Visit the live portfolio at: msadeqsirjani.github.io
ScholarPortfolio/
βββ index.html # Main HTML file with semantic structure
βββ styles.css # CSS styles, animations, and theme variables
βββ script.js # JavaScript functionality and interactivity
βββ manifest.json # PWA manifest for installability
βββ favicon.svg # Scalable vector favicon
βββ images/
β βββ profile.jpg # Profile image (optimized)
β βββ [additional assets] # Other image resources
βββ docs/
β βββ msadeqsirjani-cv.pdf # Academic CV (PDF format)
βββ README.md # Project documentation
βββ LICENSE # MIT License file
- HTML5: Semantic markup, accessibility features, and structured data
- CSS3: Modern styling with Flexbox, Grid, Custom Properties, and animations
- JavaScript (ES6+): Vanilla JS for interactive functionality and form handling
- SVG: Scalable vector graphics for icons and favicon
- Formspree: Contact form backend and email delivery
- GitHub Pages: Static site hosting and continuous deployment
- Git: Version control and collaboration
- No Framework Dependencies: Pure vanilla JavaScript for minimal bundle size
- Optimized Assets: Compressed images and minified resources
- Modern CSS: Native CSS features without preprocessors
- Home: Hero section with profile image and introduction
- Biography: Academic background and research interests
- Education: Academic qualifications and institutions
- Research: Research interests and areas of expertise
- Publications: Academic papers with DOIs and links
- Teaching: Teaching experience and courses
- News: Recent updates and achievements
- Awards: Honors and recognitions
- Contact: Contact information and form
- Web Browser: Chrome, Firefox, Safari, or Edge (latest version)
- Git: Version control system (Download)
- GitHub Account: For hosting and deployment (Sign up)
- Text Editor: VS Code, Sublime Text, or your preferred editor
-
Clone the repository
git clone https://github.com/msadeqsirjani/msadeqsirjani.github.io.git cd msadeqsirjani.github.io -
Local Development Server
Choose one of these methods:
Python 3:
python -m http.server 8000 # Visit http://localhost:8000Node.js (with npx):
npx serve # Visit http://localhost:3000PHP:
php -S localhost:8000 # Visit http://localhost:8000VS Code Live Server Extension:
- Install Live Server extension
- Right-click
index.htmlβ "Open with Live Server"
-
Verify Setup
- Open the portfolio in your browser
- Test theme toggle functionality
- Check responsive design on different screen sizes
- Test contact form (after Formspree setup)
-
Basic Details (
index.html):- Update name, title, and affiliation
- Modify biography and research interests
- Update education history
- Add/edit publications with proper DOI links
-
Profile Image:
- Replace
images/profile.jpgwith your photo - Recommended size: 800x800px or larger
- Format: JPG or PNG (optimized for web)
- Use square aspect ratio for best results
- Replace
-
CV Document:
- Update
docs/msadeqsirjani-cv.pdfwith your CV - Keep file name consistent or update link in HTML
- Ensure PDF is optimized for web viewing
- Update
Modify CSS custom properties in the :root selector:
:root {
--primary-color: #2c3e50; /* Main brand color */
--secondary-color: #3498db; /* Accent color */
--text-color: #333; /* Body text */
--bg-color: #ffffff; /* Background */
/* ... more variables ... */
}Update dark theme variables in [data-theme="dark"]:
[data-theme="dark"] {
--primary-color: #ecf0f1;
--bg-color: #1a1a1a;
/* ... more dark theme colors ... */
}- Modify font families in CSS custom properties
- Adjust font sizes and weights
- Change line heights for better readability
- Customize animation durations in
styles.css - Modify scroll animation triggers in
script.js - Adjust intersection observer thresholds
- Home Section: Hero text and introduction
- Biography: Academic background and interests
- Education: Degrees and institutions
- Research: Research areas and projects
- Publications: Papers with proper citations and links
- Teaching: Courses and teaching experience
- News: Recent updates and achievements
- Awards: Honors and recognitions
- Contact: Contact information and social links
<section id="new-section" class="section">
<div class="container">
<h2 class="section-title">Section Title</h2>
<!-- Your content here -->
</div>
</section>- Update
favicon.svgwith your logo/icon - Modify
manifest.jsonfor PWA branding - Update meta tags for social media sharing
-
Initial Setup
# Create a new repository named: yourusername.github.io git init git add . git commit -m "Initial portfolio commit" git branch -M main git remote add origin https://github.com/yourusername/yourusername.github.io.git git push -u origin main
-
Enable GitHub Pages
- Navigate to repository Settings
- Click on Pages in the sidebar
- Under Source, select branch
main - Click Save
- Your site will be published at
https://yourusername.github.io
-
Custom Domain (Optional)
- Add a
CNAMEfile with your domain name - In repository settings β Pages β Custom domain
- Enter your domain and click Save
- Configure DNS records with your domain provider:
Type: A Name: @ Value: 185.199.108.153 185.199.109.153 185.199.110.153 185.199.111.153 Type: CNAME Name: www Value: yourusername.github.io
- Add a
# Install Netlify CLI
npm install -g netlify-cli
# Deploy
netlify deploy --prod# Install Vercel CLI
npm install -g vercel
# Deploy
vercel --prod- Connect your GitHub repository
- Set build settings:
- Build command: (leave empty)
- Build output directory:
/
- Deploy
- GitHub Pages automatically deploys on push to main branch
- Set up GitHub Actions for advanced build processes
- Configure branch protection rules for production safety
The contact form is integrated with Formspree for email handling:
-
Create Formspree Account
- Visit formspree.io and sign up
- Free tier includes 50 submissions/month
-
Create New Form
- Click "New Form" in your dashboard
- Name your form (e.g., "Portfolio Contact")
- Copy your form endpoint URL
-
Update HTML
<form action="https://formspree.io/f/YOUR_FORM_ID" method="POST"> <!-- form fields --> </form>
Replace
YOUR_FORM_IDwith your actual Formspree form ID -
Configure Form Settings
- Enable reCAPTCHA for spam protection
- Set up email notifications
- Customize autoresponse messages
- Configure form field validation
-
Test the Form
- Fill out the form on your live site
- Check that emails are delivered correctly
- Verify autoresponse functionality
- EmailJS: Client-side email sending
- Netlify Forms: If hosted on Netlify
- Google Forms: Embed Google Forms
- Custom Backend: Build your own API endpoint
| Browser | Version | Status |
|---|---|---|
| Chrome | Latest 2 versions | β Fully Supported |
| Firefox | Latest 2 versions | β Fully Supported |
| Safari | Latest 2 versions | β Fully Supported |
| Edge | Latest 2 versions | β Fully Supported |
| iOS Safari | iOS 13+ | β Fully Supported |
| Chrome Mobile | Latest | β Fully Supported |
| Samsung Internet | Latest | β Fully Supported |
- CSS Grid & Flexbox: All modern browsers
- CSS Custom Properties: All modern browsers
- Intersection Observer: All modern browsers (with polyfill for older versions)
- ES6+ JavaScript: All modern browsers
- Progressive Enhancement: Core content accessible even without JavaScript
For older browsers, consider adding:
- CSS Grid polyfill
- Intersection Observer polyfill
- Babel transpilation for JavaScript
This project is open source and available under the MIT License.
While this is a personal portfolio, suggestions and improvements are welcome! If you'd like to contribute:
-
Fork the Repository
# Click the "Fork" button on GitHub -
Clone Your Fork
git clone https://github.com/your-username/ScholarPortfolio.git cd ScholarPortfolio -
Create a Feature Branch
git checkout -b feature/your-feature-name
-
Make Your Changes
- Follow existing code style
- Test your changes thoroughly
- Update documentation if needed
-
Commit Your Changes
git add . git commit -m "Add: brief description of your changes"
-
Push to Your Fork
git push origin feature/your-feature-name
-
Submit a Pull Request
- Go to the original repository on GitHub
- Click "New Pull Request"
- Select your feature branch
- Describe your changes in detail
- Write clear, descriptive commit messages
- Follow the existing code style and structure
- Test on multiple browsers before submitting
- Update README if adding new features
- Keep changes focused and atomic
- Bug fixes and improvements
- Performance optimizations
- Accessibility enhancements
- Documentation improvements
- New features (discuss first in an issue)
- Email: m.sadeq.sirjani@gmail.com
- LinkedIn: linkedin.com/in/msadeqsirjani
- GitHub: @msadeqsirjani
- Portfolio: msadeqsirjani.github.io
Found a bug or have a suggestion? Please open an issue on GitHub.
How do I change the color scheme?
Edit the CSS custom properties in styles.css:
:root {
--primary-color: #your-color;
--secondary-color: #your-accent;
}Can I use this template for my own portfolio?
Yes! This project is MIT licensed. Fork it, customize it, and make it your own. Attribution is appreciated but not required.
How do I add a new section?
- Add the HTML section in
index.html - Style it in
styles.css - Add navigation link if needed
- Update JavaScript for scroll animations
The contact form isn't working. What should I do?
- Verify your Formspree form ID is correct
- Check that the form action URL is properly set
- Ensure you're testing on a live server (not file://)
- Check browser console for errors
How do I optimize images?
Use tools like:
- β Initial release
- β Dark/Light mode toggle
- β Responsive design
- β Contact form integration
- β Smooth scroll animations
- β PWA manifest
- β SEO optimization
- Blog section integration
- Multi-language support
- Advanced animations
- Project showcase gallery
- Search functionality
- Print-friendly CV version
- Design inspiration from modern academic portfolios
- Icons and assets from open-source libraries
- Community feedback and contributions
Built with β€οΈ by Mohammad Sadegh Sirjani
Last Updated: October 2025
- Before Deployment: Update all personal information, links, and contact details
- Formspree Setup: Configure contact form before going live
- Image Optimization: Compress images for better performance
- Browser Testing: Test on multiple devices and browsers
- Accessibility: Ensure all content is accessible to screen readers