A modern, responsive personal portfolio website built with Angular and Angular Material, featuring interactive Q&A and Blog sections powered by Firebase.
- Modern Responsive Design - Built with Angular Material for a professional look
- Q&A Section - Ask questions about my research (with authentication & approval workflow)
- Blog & Thoughts - Read my reflections on physics and science (with comments)
- Contact Information - Easy access to email, GitHub, LinkedIn, ORCID, and Google Scholar
- Project Showcase - Highlights of my active research projects
- Dark/Light Theme Support - Comfortable viewing experience
- Frontend: Angular 20, Angular Material, RxJS, SCSS
- Backend: Firebase (Firestore, Authentication)
- Deployment: GitHub Pages
- Build Tool: Angular CLI
src/
βββ app/
β βββ components/
β β βββ header/ # Header with profile info
β β βββ navigation/ # Main navigation bar
β β βββ home/ # Home page (about, projects, experience)
β β βββ talks/ # Talks & presentations
β β βββ publications/ # Publications
β β βββ about/ # About me
β β βββ outreach/ # Outreach activities
β β βββ qa/ # Q&A section
β β βββ blog/ # Blog & comments
β βββ services/
β β βββ auth.ts # Firebase authentication
β β βββ firestore.ts # Firestore data management
β β βββ firebase.config.ts # Firebase initialization
β βββ app.routes.ts # Routing configuration
β βββ app.config.ts # Application configuration
β βββ app.ts # Root component
βββ environments/
β βββ environment.ts # Development config
β βββ environment.prod.ts # Production config
βββ styles.scss # Global styles
βββ main.ts # Application bootstrap
- Node.js 18+ and npm
- Firebase project (free tier available)
- GitHub account (for deployment)
# Clone the repository
git clone https://github.com/rreho/rreho.github.io.git
cd rreho.github.io
# Install dependencies
npm install
# Update Firebase configuration
# Edit src/environments/environment.ts with your Firebase credentials# Start the dev server
npm start
# Navigate to http://localhost:4200/
# The app will automatically reload when you modify files# Build for production
npm run build:prod
# Output is in dist/rreho-portfolio/browser/- Go to Firebase Console
- Create a new project
- Enable Authentication (Email/Password)
- Create a Firestore Database (production mode)
Update your Firebase credentials in:
src/environments/environment.ts(development)src/environments/environment.prod.ts(production)
export const environment = {
production: false,
firebase: {
apiKey: 'YOUR_API_KEY',
authDomain: 'YOUR_AUTH_DOMAIN',
projectId: 'YOUR_PROJECT_ID',
storageBucket: 'YOUR_STORAGE_BUCKET',
messagingSenderId: 'YOUR_MESSAGING_SENDER_ID',
appId: 'YOUR_APP_ID'
}
};In Firebase Console β Firestore β Rules, apply the rules from FIREBASE_SECURITY_RULES.md
id(auto-generated)authorId(user ID)authorEmail(user email)title(string)content(string)approved(boolean)createdAt(timestamp)
id(auto-generated)authorId(user ID)authorEmail(user email)title(string)excerpt(string)content(string)approved(boolean)createdAt(timestamp)
id(auto-generated)postId(blog post ID)authorId(user ID)authorEmail(user email)content(string)approved(boolean)createdAt(timestamp)
# Install angular-cli-ghpages if not already installed
npm install -g angular-cli-ghpages
# Build and deploy
npm run build:prod
ngh --dir=dist/rreho-portfolio/browser- Build the project:
npm run build:prod - Copy contents of
dist/rreho-portfolio/browser/to your GitHub Pages branch - Push to
gh-pagesbranch or commit tomain(depending on your GitHub Pages settings)
- API Keys: Never commit Firebase credentials to version control. Use environment variables.
- Data Validation: All inputs are validated on client AND server side (via Firestore rules)
- Authentication: Required for submitting questions, posts, and comments
- Approval Workflow: All user-generated content requires admin approval before public display
- Use environment-specific builds
- Never expose secrets in source code
- Keep Firestore security rules up-to-date
- Implement rate limiting via Cloud Functions (optional)
- Monitor Firestore usage and costs
ng generate component components/my-componentng generate service services/my-servicenpm testng lint- SETUP_GUIDE.md - Detailed setup and configuration guide
- FIREBASE_SECURITY_RULES.md - Firestore security rules
This is a personal portfolio, but feel free to fork and customize for your own use!
This project is open source and available for personal use.
- Email: r.reho@uu.nl
- GitHub: rreho
- LinkedIn: Riccardo Reho
- ORCID: 0009-0002-3703-1292
- Built with Angular
- Styled with Angular Material
- Powered by Firebase
- Deployed on GitHub Pages
Last updated: November 2025