A professional, responsive portfolio website for economists, academic researchers, and policy advisors.
This project is a modern, clean portfolio website designed specifically for economists to showcase their research, publications, experience, and academic credentials. The design emphasizes professionalism while maintaining visual appeal and user engagement.
- Professional Design: Clean, academic-focused design with a modern aesthetic
- Responsive Layout: Works seamlessly on desktop, tablet, and mobile devices
- Research Showcase: Dedicated section to highlight research interests and specialties
- Publications Section: Interactive publication listing with filtering by type
- Experience Timeline: Visual representation of career progression
- Smooth Animations: Subtle animations to enhance user experience
- Contact Form: Professional contact form with validation
- Bilingual Support: Toggle between English and Spanish
index.html- The main HTML file with the portfolio structure and contentcss/styles.css- Comprehensive styling with a professional color schemejs/script.js- Interactive features including publication filtering, smooth scrolling, and form validationimages/- Directory for storing profile photos and other image assets
The codebase has been cleaned up and organized for better maintainability:
The JavaScript code is organized into logical sections:
- Core Initialization: All initialization functions are grouped in the
initCore()function - Event Listeners: Event listeners are set up in the
setupEventListeners()function - Scroll Handling: All scroll-related functions are managed through a single
handleScroll()function - Feature-specific Functions: Each feature has its own dedicated function
- Utility Functions: Helper functions are organized at the bottom
The CSS is organized into logical sections:
- Base Styles: Reset and base element styling
- Utility Classes: Reusable utility classes for margins, animations, etc.
- Button Styles: Styling for all button types
- Layout Components: Styling for layout elements like navigation and sections
- Section-specific Styles: Styling for individual sections
- Responsive Styles: Media queries for different screen sizes
To customize this portfolio for a specific economist:
-
Replace the placeholder content in
index.htmlwith actual information:- Update the name, title, and contact information
- Add relevant publications with links to papers
- Modify the research focus areas to match specializations
- Update the experience timeline with actual career history
- Add educational background and credentials
-
Personalize the design in
css/styles.css:- Modify the color scheme variables in the
:rootsection - Adjust typography, spacing, and layout as needed
- Add custom styles for any additional sections
- Modify the color scheme variables in the
-
Add personal images:
- Replace the placeholder profile icon with an actual photo
- Add institutional logos if desired
-
JavaScript:
- Add new initialization code to the
initCore()function - Add new event listeners to the
setupEventListeners()function - Create dedicated functions for new features
- Use null checks before accessing DOM elements to prevent errors
- Add new initialization code to the
-
CSS:
- Add new styles in the appropriate section
- Use the existing CSS variables for colors, spacing, etc.
- Follow the existing naming conventions
-
JavaScript:
- Avoid unnecessary DOM manipulations
- Use event delegation where possible
- Consider using IntersectionObserver for scroll animations
- Clear intervals and event listeners when components are removed
-
CSS:
- Use hardware-accelerated properties for animations (transform, opacity)
- Avoid expensive properties like box-shadow in animations
- Use media queries to reduce complexity on mobile devices
The website is compatible with:
- Chrome (latest)
- Firefox (latest)
- Safari (latest)
- Edge (latest)
This project is available for personal and commercial use.
Feel free to use this template as a starting point for creating a professional economist portfolio!
A professional portfolio website for Dr. Jane Smith, showcasing her academic leadership experience, research, publications, and vision for university leadership.
- Responsive design for all devices
- Bilingual support (English and Spanish)
- Interactive sections for research, publications, and leadership experience
- Testimonials carousel
- Contact form with Firebase integration
- User authentication with Firebase
This project uses Firebase for:
- Authentication: User login, signup, and password reset functionality
- Firestore Database: Storing contact form submissions
- Cloud Functions: Sending emails from contact form submissions
-
Create a Firebase Project:
- Go to Firebase Console
- Click "Add project" and follow the setup steps
- Enable Google Analytics if desired
-
Set Up Authentication:
- In your Firebase project, go to "Authentication" in the left sidebar
- Click "Get started"
- Enable "Email/Password" authentication method
-
Create a Firestore Database:
- In your Firebase project, go to "Firestore Database" in the left sidebar
- Click "Create database"
- Start in production mode or test mode as needed
- Choose a location for your database
-
Set Up Security Rules:
- In Firestore, go to the "Rules" tab
- Update the rules to allow authenticated users to write to the contactMessages collection:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /contactMessages/{message} { allow read: if request.auth != null; allow write: if true; // Allow anyone to submit contact messages } match /{document=**} { allow read, write: if request.auth != null; } } } -
Set Up Cloud Functions for Email:
- Install Firebase CLI:
npm install -g firebase-tools - Login to Firebase:
firebase login - Initialize Firebase in your project:
firebase init - Select Firestore, Functions, and Hosting
- Update the email configuration in
functions/index.js:- Replace
your-email@gmail.comwith your actual email - Replace
your-app-passwordwith your app password (for Gmail, create one at https://myaccount.google.com/apppasswords)
- Replace
- Deploy the functions:
firebase deploy --only functions
- Install Firebase CLI:
-
Error Handling for Cloud Functions:
- The project includes robust error handling for email sending:
- Limited retry attempts (maximum of 2 retries)
- Timeout configuration (60 seconds)
- Specific error handling for different failure scenarios
- Status tracking in Firestore to prevent duplicate emails
- Client-side error handling with specific error messages
- Non-retryable errors are identified to prevent endless retries
- The project includes robust error handling for email sending:
-
Get Your Firebase Configuration:
- In your Firebase project, click on the gear icon (Project settings)
- Scroll down to "Your apps" section
- If you haven't added an app yet, click on the web icon (
</>) - Register your app with a nickname
- Copy the firebaseConfig object
-
Update Configuration in Your Project:
- Open
js/firebase-config.js - Replace the placeholder configuration with your actual Firebase configuration:
const firebaseConfig = { apiKey: "YOUR_ACTUAL_API_KEY", authDomain: "YOUR_ACTUAL_PROJECT_ID.firebaseapp.com", projectId: "YOUR_ACTUAL_PROJECT_ID", storageBucket: "YOUR_ACTUAL_PROJECT_ID.appspot.com", messagingSenderId: "YOUR_ACTUAL_MESSAGING_SENDER_ID", appId: "YOUR_ACTUAL_APP_ID", measurementId: "YOUR_ACTUAL_MEASUREMENT_ID" };
- Open
- Web server (local or hosted)
- Firebase account
- Clone the repository
- Set up Firebase as described above
- Open the project in your preferred code editor
- Serve the files using a local web server
- Update the Firebase configuration with your production Firebase project details
- Deploy the website to your hosting provider
- Ensure all Firebase services are properly configured for production
- HTML5
- CSS3
- JavaScript
- Firebase (Authentication, Firestore)
- Font Awesome icons
This project is licensed under the MIT License - see the LICENSE file for details.
- Font Awesome for the icons
- Firebase for authentication and database services