A modern, full-featured portfolio application built with Next.js 15, featuring a complete admin dashboard for dynamic content management. Built for developers and creatives who want a professional online presence without touching code after initial setup.
Complete CRUD operations for all content sections:
Frontend
Backend & Database
AI & Integrations
graph LR
User["👤 User"] --> App["⚡ Next.js App<br/>Port 9002"]
App --> |"Read Data"| Firebase["🔥 Firebase<br/>Realtime DB"]
App --> |"Update Content"| Actions["🔄 Server Actions<br/>+ Zod Validation"]
Actions --> Firebase
App --> Email["📧 Email<br/>EmailJS + Resend"]
App -.-> UI["🎨 UI Layer<br/>Tailwind + shadcn/ui"]
style User fill:#4A90E2,stroke:#2E5C8A,stroke-width:2px,color:#fff
style App fill:#06B6D4,stroke:#0891B2,stroke-width:2px,color:#fff
style Actions fill:#10B981,stroke:#059669,stroke-width:2px,color:#fff
style Firebase fill:#FFA000,stroke:#FF6F00,stroke-width:2px,color:#fff
style Email fill:#8B5CF6,stroke:#6D28D9,stroke-width:2px,color:#fff
style UI fill:#EC4899,stroke:#DB2777,stroke-width:2px,color:#fff
🔑 Key Points:
git clone https://github.com/KunalGupta25/Bytefolio.git
cd Bytefolio
npm install
Create .env.local in the root directory:
# Firebase Admin SDK (from downloaded JSON file)
FIREBASE_SERVICE_ACCOUNT_TYPE="service_account"
FIREBASE_SERVICE_ACCOUNT_PROJECT_ID="your-project-id"
FIREBASE_SERVICE_ACCOUNT_PRIVATE_KEY_ID="your-private-key-id"
FIREBASE_SERVICE_ACCOUNT_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nYOUR_KEY_HERE\n-----END PRIVATE KEY-----\n"
FIREBASE_SERVICE_ACCOUNT_CLIENT_EMAIL="[email protected]"
FIREBASE_SERVICE_ACCOUNT_CLIENT_ID="your-client-id"
FIREBASE_SERVICE_ACCOUNT_AUTH_URI="https://accounts.google.com/o/oauth2/auth"
FIREBASE_SERVICE_ACCOUNT_TOKEN_URI="https://oauth2.googleapis.com/token"
FIREBASE_SERVICE_ACCOUNT_AUTH_PROVIDER_X509_CERT_URL="https://www.googleapis.com/oauth2/v1/certs"
FIREBASE_SERVICE_ACCOUNT_CLIENT_X509_CERT_URL="https://www.googleapis.com/robot/v1/metadata/x509/YOUR_EMAIL_ENCODED"
FIREBASE_SERVICE_ACCOUNT_UNIVERSE_DOMAIN="googleapis.com"
# Firebase Realtime Database
FIREBASE_DATABASE_URL="https://your-project-default-rtdb.firebaseio.com"
# Admin Credentials
ADMIN_EMAIL="[email protected]"
ADMIN_PASSWORD="your-secure-password"
# Email Service (Optional)
CONTACT_FORM_RECIPIENT_EMAIL="[email protected]"
RESEND_API_KEY="re_xxxxxxxxxxxx"
# Analytics (Optional)
NEXT_PUBLIC_GA_MEASUREMENT_ID="G-XXXXXXXXXX"
# Site Configuration
NEXT_PUBLIC_SITE_URL="https://yourdomain.com"
In Firebase Console → Realtime Database → Rules, set:
{
"rules": {
".read": false,
".write": false
}
}
The Admin SDK bypasses these rules, keeping your data secure.
npm run dev
Visit http://localhost:9002 to see your portfolio.
Navigate to http://localhost:9002/admin/login and use the credentials from your .env.local file.
npm run dev # Start development server on port 9002
npm run build # Build for production
npm start # Start production server
npm run lint # Run ESLint
npm run typecheck # Run TypeScript type checking
npm run genkit:dev # Start Genkit AI development server
Bytefolio/
├── src/
│ ├── app/
│ │ ├── actions.ts # Server actions for CRUD operations
│ │ ├── layout.tsx # Root layout with metadata
│ │ ├── page.tsx # Homepage
│ │ ├── robots.ts # SEO robots configuration
│ │ ├── sitemap.ts # Dynamic sitemap generation
│ │ ├── admin/ # Admin dashboard
│ │ │ ├── login/ # Admin authentication
│ │ │ ├── about/ # About Me management
│ │ │ ├── skills/ # Skills management
│ │ │ ├── education/ # Education management
│ │ │ ├── projects/ # Projects management
│ │ │ ├── certifications/ # Certifications management
│ │ │ ├── settings/ # Site settings
│ │ │ └── integrations/ # Third-party integrations
│ │ └── components/ # Page-specific components
│ ├── components/
│ │ └── ui/ # Reusable UI components (shadcn)
│ ├── lib/
│ │ ├── data.ts # Data interfaces and queries
│ │ ├── firebase-admin.ts # Firebase Admin initialization
│ │ ├── site-url.ts # URL utilities
│ │ └── utils.ts # Helper functions
│ ├── hooks/ # React hooks
│ └── ai/ # Genkit AI configuration
├── public/ # Static assets
├── docs/ # Documentation
└── .env.local.example # Environment variables template
.env.local.env.localnpm run build.nextThe project includes netlify.toml for automatic Netlify configuration.
Edit tailwind.config.ts to customize colors:
#24292F#E5E5E5#008080All content is managed through the admin dashboard at /admin:
All UI components are in src/components/ui/ and can be customized following shadcn/ui patterns.
ByteFolio supports dual email configuration:
NEXT_PUBLIC_GA_MEASUREMENT_ID to track visitorsGoogle Genkit is integrated for potential AI features:
npm run genkit:dev # Start AI development server
Contributions are welcome! Please feel free to submit a Pull Request.
This project is open source and available under the MIT License.
Built with:
For issues and questions:
/docsMade with ❤️ by Kunal Gupta