⚠️ Note: This project is my personal portfolio and is NOT Open Source. All rights reserved.
"A photographer's portfolio shouldn't be slowed down by heavy frameworks."
Chagai.pro is a custom-built photography portfolio designed for speed and ease of management. Instead of relying on rigid website builders or complex third-party CMS integrations, I engineered a bespoke solution using Astro for frontend performance and Firebase for backend management.
This architecture allows me to manage my gallery via a secure Admin Dashboard without touching a single line of code, while delivering a blazing-fast browsing experience to visitors.
This project utilizes Astro's Island Architecture to mix static HTML with dynamic interactivity:
- Static Shell (Astro): The layout, SEO metadata, and initial paint are statically generated for maximum performance.
- Dynamic Islands (React): The Gallery grid and Admin Dashboard are hydrated as React components only when needed.
- Serverless Backend (Firebase):
- Firestore: Stores metadata (titles, categories, dates).
- Storage: Hosting for high-resolution images.
- Auth: Secure authentication for the Admin portal.
- Masonry Gallery Layout: A responsive, auto-adjusting grid that respects the aspect ratio of each photograph.
- Performance First: Optimized asset loading and minimal JavaScript for the end-user.
- Dark/Light Mode: Full theming support with system preference detection.
- Immersive Lightbox: Full-screen image viewing experience.
- Secure Dashboard: Protected route (
/admin) for content management. - Drag & Drop Upload: Seamless interface to upload new photos directly to Firebase Storage.
- Metadata Editing: Edit titles, descriptions, and visibility status in real-time.
- Toast Notifications: Real-time feedback for all CRUD operations.
- Core Framework: Astro (v5)
- UI Components: React (TypeScript)
- Styling: Tailwind CSS
- Backend Services: Google Firebase (Auth, Firestore, Storage)
- State Management: React Hooks & Context API
- Error Handling: Custom Error Boundaries
-
Clone the repository:
git clone [https://github.com/Chagai33/chagai.pro.git](https://github.com/Chagai33/chagai.pro.git) cd chagai.pro -
Install Dependencies:
npm install
-
Environment Setup: Create a
.envfile in the root directory with your Firebase config:PUBLIC_FIREBASE_API_KEY=your_api_key PUBLIC_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com PUBLIC_FIREBASE_PROJECT_ID=your_project_id PUBLIC_FIREBASE_STORAGE_BUCKET=your_bucket PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_sender_id PUBLIC_FIREBASE_APP_ID=your_app_id
-
Run Development Server:
npm run dev
Chagai Yechiel
- Website: Chagai.pro
- GitHub: @Chagai33
- LinkedIn: Chagai Yechiel