Professional portfolio ecosystem featuring a Next.js personal website, Svelte blog platform, and Preact admin dashboard. Built with TypeScript, Turborepo, and modern web standards for optimal performance and maintainability.
Deliver a high-performance, accessible, and SEO-optimized portfolio platform that showcases technical expertise while providing seamless content management and exceptional user experience across all devices.
Repository | Purpose | Technology | Live URL |
---|---|---|---|
MishraShardendu22 | Root monorepo | Turborepo + PNPM | - |
PersonalWebsite | Main portfolio site | Next.js 15 | https://mishrashardendu22.is-a.dev |
BlogWebsite | Blog platform | Svelte 5 | https://mishrashardendu22.is-a.dev/blog |
AdminWebsite | Admin dashboard | Preact | https://mishrashardendu22.is-a.dev/admin |
Backend-PersonalWebsite | Personal site API | Go/Fiber | API endpoint |
Backend-BlogWebsite | Blog API | JS/Node.js | API endpoint |
This monorepo contains a complete portfolio platform ecosystem built with cutting-edge technologies. The architecture leverages Turborepo for efficient builds, PNPM workspaces for dependency management, and a modular design with shared packages for maximum code reuse.
mishrashardendu22/
├── apps/
│ ├── MishraShardendu22-Frontend-PersonalWebsite/ # Next.js 15 - Main portfolio
│ ├── MishraShardendu22-Frontend-BlogWebsite/ # Svelte 5 - Blog system
│ └── MishraShardendu22-Frontend-AdminWebsite/ # Preact - Admin panel
├── packages/
│ ├── shared-ui/ # Shared React components
│ ├── shared-utils/ # Common utilities
│ ├── shared-types/ # TypeScript type definitions
│ ├── auth-shared/ # Authentication logic
│ ├── ui/ # UI component library
│ └── typescript-config/ # Shared TypeScript configurations
├── public/ # Shared public assets (icons, manifests)
├── docs/ # Documentation
├── scripts/ # Build and deployment scripts
└── turbo.json # Turborepo configuration
All applications share a common set of icons and assets located in the root public/
directory:
Each application maintains its own copy of these assets in their respective public/
directories, optimized for their specific needs. See public/README.md
for detailed icon specifications.
The main portfolio application showcasing projects, experiences, skills, and certifications. Built with Next.js 15 App Router and React 19.
Technology Stack:
Features:
A high-performance blog platform with markdown support and content management capabilities.
Technology Stack:
Features:
A lightweight admin interface for managing all platform content.
Technology Stack:
Features:
Shared ESLint configurations for consistent code quality across all applications.
Shared TypeScript configurations for consistent type checking across projects.
Technology | Version | Purpose |
---|---|---|
Node.js | 18+ | Runtime environment |
PNPM | 9.0.0 | Package manager |
Turborepo | 2.5.8 | Monorepo build system |
TypeScript | 5.8 | Type safety |
Framework | Version | Application |
---|---|---|
Next.js | 15.5.3 | Personal Website |
Svelte | 5.14.4 | Blog Website |
Vite | 7.1.9 | Admin Dashboard |
React | 19.2.0 | UI Library |
Preact | 10.27.2 | Admin Dashboard |
Technology | Version | Purpose |
---|---|---|
PostgreSQL | 15+ | Blog content storage |
MongoDB | 7.0+ | Portfolio data storage |
Drizzle ORM | Latest | Type-safe database queries |
Technology | Purpose |
---|---|
Tailwind CSS 4 | Utility-first styling |
shadcn/ui | Component library |
Radix UI | Headless UI primitives |
Lucide React | Icon library |
# Clone the monorepo
git clone https://github.com/MishraShardendu22/MishraShardendu22.git
cd MishraShardendu22
# Install all dependencies
pnpm install
# Set up environment variables
# Copy .env.example to .env.local in each app directory
# Configure database URLs, API endpoints, and authentication secrets
# Start all applications in development mode
pnpm dev
# Build all applications
pnpm build
# Lint all packages
pnpm lint
# Type check all packages
pnpm typecheck
# Clean build artifacts
pnpm clean
Each application requires specific environment variables:
PersonalWebsite (.env.local):
DATABASE_URL=postgresql://user:password@localhost:5432/portfolio
NEXTAUTH_SECRET=your-secret-key
API_URL=https://api.mishrashardendu22.is-a.dev
BlogWebsite (.env):
VITE_API_URL=https://api-blog.mishrashardendu22.is-a.dev
AdminWebsite (.env):
VITE_API_URL=https://api.mishrashardendu22.is-a.dev
VITE_AUTH_TOKEN=your-admin-token
The monorepo uses Turborepo for optimized build caching and parallel execution:
{
"pipeline": {
"build": {
"dependsOn": ["^build"],
"outputs": [".next/**", "dist/**", "build/**"]
},
"dev": {
"cache": false,
"persistent": true
},
"lint": {},
"typecheck": {}
}
}
All frontend applications are deployed to Vercel with automatic deployments on push to main:
Personal Website: Deployed from apps/MishraShardendu22-Frontend-PersonalWebsite
cd ../.. && pnpm turbo run build --filter=ms22-main
.next
Blog Website: Deployed from apps/MishraShardendu22-Frontend-BlogWebsite
cd ../.. && pnpm turbo run build --filter=ms22-blog
dist
Admin Website: Internal deployment
cd ../.. && pnpm turbo run build --filter=ms22-admin
dist
Add the following environment variables in Vercel project settings for each application:
DATABASE_URL
(Personal Website)NEXTAUTH_SECRET
(Personal Website)VITE_API_URL
(Blog and Admin)This monorepo implements comprehensive SEO and accessibility optimizations:
/sitemap.xml
for all applicationsContributions are welcome. Please follow these guidelines:
git checkout -b feature/your-feature
git commit -am 'Add new feature'
git push origin feature/your-feature
Ensure all tests pass and code follows the existing style guide (ESLint + Prettier).
This project is licensed under the MIT License. See LICENSE file for details.
Shardendu Mishra
For bug reports and feature requests, please use the GitHub issue tracker in the respective repository.
# Start all apps in dev mode
pnpm dev
# Build all apps
pnpm build
# Lint
pnpm lint
# Format
pnpm format
# Type check
pnpm typecheck
# Clean builds and node_modules
pnpm clean
Application | URL | Description |
---|---|---|
Personal Website | http://localhost:3000 |
Main portfolio |
Blog Website | http://localhost:4321 |
Blog platform |
Admin Dashboard | http://localhost:5173 |
Admin panel |
Each app has its own environment configuration. See docs/DEVELOPMENT_GUIDE.md for details.
# Build all applications for production
pnpm build
# Test production builds locally
pnpm start
See docs/DEPLOYMENT_GUIDE.md for full instructions.
# Run all tests
pnpm test
# Coverage
pnpm test:coverage
# End-to-end
pnpm test:e2e
We welcome contributions. Please read docs/CONTRIBUTING.md before submitting pull requests.
git checkout -b feature/AmazingFeature
git commit -m "feat: add AmazingFeature"
git push origin feature/AmazingFeature
MIT. See LICENSE for details.
Shardendu Mishra
Software Engineer | Software Engineer
Email: mishrashardendu22@gmail.com
Built with Next.js, Svelte, React, TypeScript, Tailwind CSS, Turborepo, PostgreSQL, Drizzle, and more.
Last Updated: October 2025 - Version 3.0.0 - Monorepo Architecture
pnpm install
pnpm build # optional warm cache
.nvmrc
with 18
or define engines
in package.json.Create per-app environment files based on provided examples:
Store secrets securely. Do not commit environment files.
# Personal Website
cd apps/MishraShardendu22-Frontend-PersonalWebsite
pnpm db:push
# Blog Website
cd ../MishraShardendu22-Frontend-BlogWebsite
pnpm db:push
cd ../../
pnpm dev
Access apps:
http://localhost:3000
http://localhost:4321
http://localhost:5173
Common tasks are defined at the root.
pnpm dev
: runs all app dev servers in parallelpnpm build
: builds all packages and apps with cachingpnpm typecheck
: runs TypeScript across workspacepnpm lint
/ pnpm format
: code qualityUse --filter
to scope tasks:
pnpm --filter @apps/personal dev
pnpm --filter @apps/blog build
feat:
, fix:
, docs:
, refactor:
, test:
, chore:
feature/*
, fix/*
, chore/*
Commands:
pnpm test
pnpm test:coverage
pnpm test:e2e
--inspect
.env
or dev scriptspnpm clean && rm -rf node_modules/.cache
pnpm build
pnpm start # optional local preview if configured
Each app produces a build:
.next/
output; use output: standalone if configured.dist/
for static or SSR build output.dist/
static assets.Set production environment variables for each app, mirroring development but with production credentials and URLs.
Ensure proper SSR/edge runtimes if used.
dist/
.Run migrations during deployment:
# From app directory
pnpm db:push
Consider using a migration step in CI/CD before switching traffic.
Example GitHub Actions workflow (simplified):
name: ci
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v3
with:
version: 9
- uses: actions/setup-node@v4
with:
node-version: 18
cache: pnpm
- run: pnpm install --frozen-lockfile
- run: pnpm typecheck
- run: pnpm lint
- run: pnpm build
Add deployment jobs per platform and app.
This document outlines API routes used by the platform. Adjust paths as needed per deployment.
application/json
{
"email": "[email protected]",
"password": "string"
}
{
"token": "jwt",
"user": {
"id": "uuid",
"email": "[email protected]",
"role": "admin"
}
}
Authorization: Bearer <token>
Query:
tag
(optional)limit
, offset
(optional)Response 200:
{
"items": [
{
"id": "uuid",
"title": "string",
"tags": ["go", "react"],
"description": "string",
"url": "string",
"createdAt": "2025-10-01T00:00:00.000Z"
}
],
"total": 42
}
Authorization: Bearer <token>
{
"title": "string",
"description": "string",
"tags": ["string"],
"url": "string"
}
{ "id": "uuid" }
Query:
q
full-text searchtag
, category
limit
, offset
Response 200:
{
"items": [
{
"id": "uuid",
"slug": "my-first-post",
"title": "string",
"excerpt": "string",
"tags": ["svelte", "nextjs"],
"publishedAt": "2025-10-01T00:00:00.000Z"
}
],
"total": 123
}
{
"id": "uuid",
"slug": "my-first-post",
"title": "string",
"content": "markdown or html",
"tags": ["string"],
"publishedAt": "2025-10-01T00:00:00.000Z"
}
Authorization: Bearer <token>
{
"title": "string",
"slug": "kebab-case",
"content": "markdown or html",
"tags": ["string"],
"publishedAt": "2025-10-01T00:00:00.000Z"
}
{ "id": "uuid" }
[
{
"id": "uuid",
"author": "string",
"message": "string",
"createdAt": "2025-10-01T00:00:00.000Z"
}
]
{
"author": "string",
"message": "string"
}
{ "id": "uuid" }
Authorization: Bearer <token>
{
"users": 1200,
"projects": 25,
"posts": 80,
"comments": 460
}
feature/<short-description>
.pnpm typecheck && pnpm lint && pnpm test
pass.feat: add analytics panel
fix: correct drizzle migration path
docs: update deployment guide
refactor: extract table component
test: add e2e for auth flow
We pledge to make participation a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity, level of experience, nationality, personal appearance, race, religion, or sexual identity.
Unacceptable behavior includes harassment, trolling, insults, or other conduct that could reasonably be considered inappropriate.
Project maintainers are responsible for clarifying standards and taking corrective action in response to unacceptable behavior.
This Code of Conduct applies within project spaces and in public spaces when representing the project.
Report issues to the maintainer at mishrashardendu22@gmail.com. All complaints will be reviewed and investigated, resulting in a response deemed necessary and appropriate to the circumstances.
Security fixes are applied to the latest major version.
A Postman collection is provided to test API endpoints for projects, posts, comments, auth, and admin metrics.
baseUrl
: http://localhost:3000
or your deployment URLauthToken
: a valid JWT for protected routes# List posts
curl -s GET http://localhost:3000/api/posts
# Create post (requires auth)
curl -s -X POST http://localhost:3000/api/posts \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"title":"Hello","slug":"hello","content":"Hi","tags":["intro"]}'
async function listPosts() {
const res = await fetch('/api/posts')
return res.json()
}