DevPress is a modern, full-stack blogging application built to demonstrate a clean, type-safe, and scalable architecture.
It allows users to create, read, edit, and delete blog posts, manage categories, upload images, and search for content β all through a seamless and responsive interface.
π§ Built as part of a 7-day technical assessment focused on code quality, scalability, and modern best practices.
π https://anishvkalbhor-devpress.vercel.app
DevPress successfully implements all Priority 1 & 2 features, plus several Priority 3 βNice-to-Haveβ enhancements for a complete, production-ready experience.
- β Blog Post CRUD (Create, Read, Update, Delete)
- β Category CRUD
- β Assign multiple Categories per post
- β
Blog Listing with pagination (
/blog) - β
Single Post Page (
/posts/[slug]) - β
Category Filtering (
/blog?category=design) - β Responsive, professional UI
- β Mobile navigation with hamburger menu
- β 5-section Landing Page
- β Dashboard for managing posts
- β Draft / Published Status Toggle
- β Fully responsive across devices
- β Rich-text editor using Tiptap
- β Full-text Search (title, content, author)
- β Reading Time estimate on posts
- β Image Uploads with Vercel Blob
- β Dynamic SEO Meta Tags
- β Pagination on blog & dashboard
DevPress is built using a pnpm monorepo structure for clear separation of concerns, modularity, and type safety.
apps/webβ Frontend (Next.js App) + tRPC Clientpackages/apiβ Backend tRPC Routers + Validationpackages/dbβ Drizzle ORM Schema + Database Migrations
.
βββ .eslintrc.js
βββ .gitignore
βββ README.md
βββ apps
β βββ web
β βββ next.config.ts
β βββ postcss.config.js
β βββ tailwind.config.ts
β βββ src
β β βββ app
β β β βββ api/uploadthing
β β β β βββ core.ts
β β β β βββ route.ts
β β β βββ blog/[slug]/page.tsx
β β β βββ blog/page.tsx
β β β βββ categories/page.tsx
β β β βββ dashboard/page.tsx
β β β βββ editor/[postId]/page.tsx
β β β βββ editor/page.tsx
β β β βββ layout.tsx
β β β βββ globals.css
β β β βββ page.tsx
β β βββ components
β β β βββ layout/{footer,header,main,theme-provider}.tsx
β β β βββ tiptap-ui/{index,link-edit-popover,code-block-button}.tsx
β β β βββ ui/{button,card,dialog,form,input,table,textarea,...}.tsx
β β β βββ {editor,file-dialog,icons,pagination,providers,theme-toggle,user-nav}.tsx
β β βββ lib/{editor,fonts,uploadthing,utils}.ts
β β βββ trpc/{client,provider}.ts
β βββ tsconfig.json
βββ packages
β βββ api
β β βββ src/{root,trpc}.ts
β β βββ tsconfig.json
β βββ db
β β βββ prisma/schema.prisma
β β βββ src/index.ts
β β βββ tsconfig.json
β βββ ui
β βββ src/button.tsx
βββ pnpm-lock.yaml
βββ pnpm-workspace.yaml
βββ tsconfig.json
βββ turbo.json| π Router | βοΈ Description |
|---|---|
router/post.ts |
CRUD for blog posts, with search, publish, and image upload logic |
router/category.ts |
CRUD for categories |
validation.ts |
Shared Zod schemas for API + forms |
root.ts |
Combines all routers into the appRouter |
trpc.ts |
Sets up context (DB, procedures) & initializes tRPC server |
git clone https://github.com/anishvkalbhor/fullstack_blogging_application.git
cd fullstack_blogging_applicationpnpm installA. Root .env
BLOB_READ_WRITE_TOKEN="vercel_blob_rw_..."B. packages/db/.env
DATABASE_URL="postgres://..."
BLOB_READ_WRITE_TOKEN="vercel_blob_rw_..."pnpm --filter db db:migratepnpm --filter web devThen open β http://localhost:3000
Chose tRPC for end-to-end type safety and faster development. It eliminates redundant schema definitions, making it ideal for solo or small-team TypeScript projects.
Adopted a pnpm monorepo despite its initial complexity β it pays off in scalability and maintainability.
It enables shared types, isolated packages, and clear boundaries between web, api, and db.
Leveraged Next.js App Router for a hybrid rendering model:
- Server Components for performance and SEO
- Client Components for interactivity (forms, toasts, menus)
Implemented drag-and-drop file uploads with Vercel Blob instead of basic URLs β resulting in a smoother, production-ready UX.
Combined shadcn/ui, Aceternity, and MagicUI for a modern, minimalist design system with complete customization control.
DevPress blends modern web architecture, type safety, and production-grade UI to deliver a fully functional blogging platform β built in just 7 days.
π‘ A project that demonstrates how clean code, tRPC, and Next.js 15 can come together to build a scalable, real-world application.
Anish V. Kalbhor
π GitHub Profile