A full-featured blogging API built with Node.js, Express, PostgreSQL, and Prisma ORM, structured as a monorepo with both an admin and user-facing frontend.
This project is part of The Odin Project's Node.js curriculum, showcasing RESTful API design, modern database integration, and clean backend architecture.
- RESTful API with full CRUD functionality for:
- Posts
- Comments
- Users (Create, Read, Update only)
- Clean, modular backend with Express
- PostgreSQL database access via Prisma
- Form validation and error handling
- Monorepo with:
backend/(Node.js + Express + Prisma)user-frontend/(user-facing blog UI)blogger-frontend/(CMS/admin dashboard)
- Node.js
- Express.js
- PostgreSQL
- Prisma ORM
- dotenv
- bcrypt/uuid
- JWT passwport strategy
- CORS
- React
- Tailwind
- Shadcn/UI
- Lucide-react
blog-API/
│
├── backend/ # Express backend with Prisma + PostgreSQL
│ ├── controllers/ # Request handlers
│ ├── db/ # Prisma/SQL queries
│ ├── routes/ # Route definitions
│ ├── prisma/ # Prisma schema and migrations
│ ├── app.js # Express app setup
│ └── .env # Environment variables
│
├── blogger-frontend/ # React + Tailwind + Shadcn/UI Admin dashboard
│
├── frontend-user/ # React + Tailwind + Shadcn/UI Public-facing blog frontend
│
└── README.md # Project overview
GET /api/v1/users— Fetch all usersGET /api/v1/users/:id— Fetch user by IDPOST /api/v1/users— Register a new userPUT /api/v1/users/:id— Update user detailsDELETE /api/v1/users/:id— Delete user
GET /api/v1/posts— List all postsGET /api/v1/posts/:id— View a single postPOST /api/v1/posts— Create a postPUT /api/v1/posts/:id— Edit a postDELETE /api/v1/posts/:id— Delete a post
GET /api/v1/posts/:postId/comments— Get comments on a postPOST /api/v1/posts/:postId/comments— Add a commentPUT /api/v1/posts/:postId/comments— Edit a commentDELETE /api/v1/comments/:id— Delete a comment
# Clone the repo
git clone https://github.com/jonorl/blog-API.git
cd blog-API
# Navigate to backend
cd backend
# Install dependencies
npm install
# Set up database and run migrations
npx prisma migrate dev --name init
# Start the server
node --watch app.jsServer runs at: http://localhost:3000
- Build and organize a monorepo project
- Design and implement RESTful APIs with Express
- Model relational data using Prisma and PostgreSQL
- Validate inputs and handle errors gracefully
- Implement user authentication and session management
- Support role-based authorization (admin/user)
- Prepare and deploy full-stack apps (Netlify + Koyeb)
🚀 Deployment
- Frontend: Netlify --> https://users-frontend.netlify.app/
- Backend + PostgreSQL: Koyeb --> https://bold-corabella-jonorl-a167c351.koyeb.app/
Jonathan Orlowski *GitHub *LinkedIn
📚 This project is part of The Odin Project, a free and open-source curriculum for aspiring full-stack web developers.
