You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ZestFolio is a dynamic portfolio building platform designed for engineering students, freshers, and self-learners to create professional, shareable portfolios in under 10 minutes without coding. It leverages Next.js, Firebase, and Tailwind CSS to provide a premium, responsive, and secure experience.
Full name, title, bio, domain, contact info, social links
ProjectsForm
projects-form.tsx
Add/edit projects with title, description, tech stack, links, images
SkillsForm
skills-form.tsx
Skill tag management with icon mapping
EducationForm
education-form.tsx
Academic history timeline (degree, institution, dates)
Dashboard Components (src/components/dashboard/)
Component
File
Purpose
Sidebar
sidebar.tsx
Navigation menu with active state indicators
UserProfile
user-profile.tsx
User profile widget with avatar and quick stats
ResumeParser
resume-parser.tsx
Resume upload, parsing (PDF/DOCX), and auto-fill
Template Components (src/components/templates/)
Component
File
Purpose
TemplateRenderer
template-renderer.tsx
Dynamic template selector and renderer
MinimalTemplate
minimal-template.tsx
Clean, minimalist portfolio design
ModernTemplate
modern-template.tsx
Contemporary professional portfolio design
UI Components (src/components/ui/) - Shadcn/Radix
Component
File
Purpose
Button
button.tsx
Styled button with variants (default, destructive, outline, ghost, link)
Input
input.tsx
Text input field with proper styling
Card
card.tsx
Container component with header, content, and footer sections
Dialog
dialog.tsx
Modal dialog with overlay and animations
Label
label.tsx
Accessible form labels
Badge
badge.tsx
Tag/badge component for skills and categories
Alert
alert.tsx
Notification and alert messages
Switch
switch.tsx
Toggle switch for settings
Navigation & Layout Components (src/components/)
Component
File
Purpose
Navbar
navbar.tsx
Top navigation bar with authentication state
Footer
footer.tsx
Footer with links and copyright
ThemeToggle
theme-toggle.tsx
Dark/light mode switcher
Context Providers (src/lib/)
Provider
File
Purpose
AuthContext
auth-context.tsx
Authentication state management and user data
ThemeContext
theme-context.tsx
Theme state (dark/light mode) management
π API Routes
Endpoint
File
Method
Purpose
/api/parse-resume
api/parse-resume/route.ts
POST
Parse uploaded resume (PDF/DOCX) and extract data
/api/portfolio/[username]
api/portfolio/[username]/route.ts
GET
Fetch public portfolio data by username
/api/templates/[templateId]
api/templates/[templateId]/route.ts
GET
Fetch template configuration and assets
π οΈ Utility Functions & Libraries
Core Utilities (src/lib/)
File
Purpose
firebase.ts
Firebase client SDK initialization and configuration
firebase-admin.ts
Firebase Admin SDK for server-side operations
cookie-utils.ts
Cookie parsing, setting, and validation utilities
templates.ts
Template configurations, metadata, and registry
utils.ts
General helper functions (className merging, formatting, etc.)
Constants & Types
File
Purpose
src/constants/mock-data.ts
Mock portfolio data for examples and testing
src/types/index.ts
TypeScript interfaces and type definitions
π¦ Getting Started
Prerequisites
Node.js 18+ installed
Firebase Project created
Installation
Clone the repository:
git clone https://github.com/your-repo/zestfolio.git
cd zestfolio
Install dependencies:
npm install
Set up Environment Variables:
Create a .env.local file with your configuration:
# Firebase (for Firestore/Storage only)NEXT_PUBLIC_FIREBASE_API_KEY=...NEXT_PUBLIC_FIREBASE_PROJECT_ID=...# Google OAuth (optional - for Google authentication)NEXT_PUBLIC_GOOGLE_CLIENT_ID=your_google_client_idGOOGLE_CLIENT_SECRET=your_google_client_secretNEXT_PUBLIC_GOOGLE_REDIRECT_URI=http://localhost:3000/api/auth/google/callback# ZestAcademy SSONEXT_PUBLIC_SSO_AUTH_URL=https://auth.zestacademy.techNEXT_PUBLIC_SSO_CLIENT_ID=zestfolioNEXT_PUBLIC_SSO_REDIRECT_URI=https://zestfolio.tech/api/auth/callbackSSO_CLIENT_SECRET=your_client_secret_here
npm run dev # Start development server on 0.0.0.0:3000 (accessible on network)
npm run build # Create optimized production build
npm run start # Start production server
npm run lint # Run ESLint for code quality checks
π¨ Key Features Explained
Authentication Flow
User clicks "Sign In" on landing page
Chooses between Google OAuth or ZestAcademy SSO
OAuth flow redirects to provider β user authorizes β callback with auth code
Backend exchanges auth code for tokens (client secret never exposed)
Tokens stored in HTTP-Only cookies (secure, not accessible via JavaScript)
User redirected to dashboard with authenticated session
Portfolio Creation Workflow
Profile Setup: Add personal info, bio, contact details, social links
Resume Import (Optional): Upload PDF/DOCX resume for auto-fill
Project Management: Add projects with images, descriptions, tech stack
Skills Management: Tag skills with automatic icon mapping
Education Timeline: Add academic history chronologically
Template Selection: Choose from pre-designed templates
Preview & Publish: Preview portfolio, then make it live
Custom URL: Portfolio accessible at zestfolio.tech/u/[username]
Admin Dashboard Features
User Overview: Total users, active portfolios, average projects per user
User Management: Search and filter by name, username, email
Status Monitoring: View portfolio status (Live/Paused/Draft)
Analytics: Track user activity and registration logs
π System Updates (Change Log)
Latest Update (February 5, 2026)
Zest ID Architecture Implementation:
Unique Zest IDs: Every user now receives a unique Zest ID (format: ZU0001, ZU0002, etc.) upon registration
Portfolio Document Keys: All portfolios are now stored in Firestore using Zest IDs as document keys instead of Firebase UIDs
Backward Compatibility: Automatic fallback loading from old UID-based documents ensures seamless migration for existing users
Data Migration: When existing users save their portfolio, data automatically migrates to the new Zest ID document structure
Admin Dashboard: Updated to match users with portfolios using Zest IDs (with UID fallback for legacy data)
Activity Logging System:
Realtime Database Integration: New user registrations are now logged to Firebase Realtime Database
Registration Tracking: Captures user registration events (Google OAuth and Email-based) with detailed metadata
Log Format: Includes displayName, zestId, uid, timestamp, and action for comprehensive tracking
Activity Path: Logs stored in registration_logs for easy monitoring and analytics
Enhanced Data Organization:
Consistent Identifiers: Both uid and zestId are stored within portfolio documents for reference