This is a personal portfolio website for Deepak Dev Panwar, built with Next.js and the Once UI design system. The portfolio showcases work experience, projects, blog posts, and provides contact information.
# Install dependencies
pnpm install
# Run development server
pnpm dev
# Build for production
pnpm build
# Start production server
pnpm start
# Development tools
pnpm lint # Run ESLint
pnpm lint:fix # Fix linting issues
pnpm format # Format code with Biome
pnpm format:check # Check formatting
pnpm typecheck # Run TypeScript checksdeepakdevp-portfolio/
βββ src/
β βββ app/ # Next.js app directory
β β βββ about/ # About page
β β βββ api/ # API routes (auth, og generation)
β β βββ blog/ # Blog pages and posts
β β β βββ posts/ # MDX blog posts
β β βββ gallery/ # Photo gallery
β β βββ work/ # Work/projects section
β β β βββ projects/ # MDX project files
β β βββ layout.tsx # Root layout
β β βββ page.tsx # Home page
β βββ components/ # React components
β β βββ about/ # About page components
β β βββ blog/ # Blog components
β β βββ gallery/ # Gallery components
β β βββ work/ # Work/project components
β β βββ ContactMe.tsx # Contact form component
β β βββ Footer.tsx # Footer component
β β βββ Header.tsx # Header component
β β βββ ThemeToggle.tsx # Theme switcher
β βββ resources/ # Configuration and content
β β βββ content.js # Main content configuration
β β βββ once-ui.config.js # UI configuration
β β βββ custom.css # Custom styles
β β βββ icons.ts # Icon definitions
β βββ utils/ # Utility functions
βββ public/ # Static assets
β βββ images/ # Images and media
β β βββ avatar.jpg # Profile image
β β βββ gallery/ # Gallery images
β β βββ og/ # Open Graph images
β β βββ projects/ # Project images
β βββ trademarks/ # Brand assets
βββ biome.json # Biome configuration
βββ next.config.mjs # Next.js configuration
βββ package.json # Dependencies and scripts
βββ tsconfig.json # TypeScript configuration
- Next.js 15.3.1 - React framework with App Router
- React 19.0.0 - UI library
- TypeScript 5.8.3 - Type safety
- Sass 1.86.3 - Styling
- @once-ui-system/core 1.2.4 - Design system components
- classnames 2.5.1 - CSS class management
- MDX - Content authoring with React components
- @next/mdx 15.3.1 - Next.js MDX integration
- next-mdx-remote 5.0.0 - Remote MDX rendering
- gray-matter 4.0.3 - Frontmatter parsing
- react-icons 5.5.0 - Icon library
- react-masonry-css 1.0.16 - Gallery layout
- cookie 1.0.2 - Cookie handling
- Biome - Linting and formatting
- ESLint 9.25.0 - Code linting
Edit src/resources/content.js to update:
- Personal details (name, role, email, location)
- Social media links
- Contact information
- Work experience
- Technical skills
- Education
Edit src/resources/once-ui.config.js to customize:
- Site routing and navigation
- Theme and styling options
- Typography (fonts)
- Visual effects (gradients, dots, grid)
- Protected routes
- Base URL for SEO
- Create new
.mdxfile insrc/app/blog/posts/ - Add frontmatter with metadata
- Posts automatically appear on
/blog
- Create new
.mdxfile insrc/app/work/projects/ - Add project details and images
- Projects automatically appear on
/workand home page
- Profile image:
public/images/avatar.jpg - Project images:
public/images/projects/ - Gallery images:
public/images/gallery/ - OG images:
public/images/og/
The project uses Once UI's theme system with:
- Brand color: Cyan
- Accent color: Red
- Neutral color: Gray
- Theme: System (auto dark/light)
- Border style: Playful
- Surface: Translucent
- Custom CSS in
src/resources/custom.css - Component-specific SCSS modules
- Theme tokens via CSS variables
- Mobile-first approach
- Breakpoints defined in
src/components/breakpoints.scss - Flexible layouts using Once UI components
- Password protection available for sensitive routes
- Configure in
once-ui.config.jsprotectedRoutes - Set password in environment variables
- Basic auth endpoints in
src/app/api/ - Cookie-based session management
- Dynamic OG image generation
- SEO-optimized meta tags
- Schema.org structured data
- Automatic sitemap generation (
src/app/sitemap.ts) - Robots.txt configuration (
src/app/robots.ts)
# Production build
pnpm build
# Export static site
pnpm exportRequired for full functionality:
NEXT_PUBLIC_BASE_URL- Site base URLPASSWORD- Route protection password- Mailchimp integration variables (if used)
- Biome - Fast linting and formatting (replaces ESLint + Prettier)
- TypeScript - Type safety and better developer experience
- Husky - Git hooks for automated quality checks
- lint-staged - Run checks only on changed files
- EditorConfig - Consistent formatting across editors
Automatically runs on every commit:
- Format - Biome formats all changed files
- Lint - Biome lints JavaScript/TypeScript files
- Type Check - TypeScript compiler validates types
- Components are modular with co-located SCSS styles
- Content configuration separated in
resources/ - Static assets organized by type in
public/ - Git hooks configured in
.husky/
- Home (
/) - Landing page with featured work - About (
/about) - Professional background and experience - Work (
/work) - Portfolio projects showcase - Blog (
/blog) - Technical writing and articles - Gallery (
/gallery) - Photo collection
- Theme switcher (light/dark/system)
- Masonry gallery layout
- Contact form integration
- Newsletter subscription
- Mobile-responsive navigation
- Static site generation
- Optimized images and assets
- Minimal JavaScript bundle
- CSS-in-JS for critical styles
- Personal Info: Update
personobject incontent.js - Styling: Modify
styleobject inonce-ui.config.js - Navigation: Update
routesobject inonce-ui.config.js - Contact: Configure
contactobject incontent.js
- Work Experience: Edit
about.work.experiencesincontent.js - Projects: Add/edit MDX files in
src/app/work/projects/ - Blog Posts: Add/edit MDX files in
src/app/blog/posts/ - Images: Replace files in
public/images/
This documentation provides a comprehensive guide for understanding and extending the portfolio. The codebase follows modern React/Next.js patterns and is built for easy customization and maintenance.