A full-stack blogging platform inspired by Vocal Media, built with Next.js 14.
- Framework: Next.js 14 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS
- Authentication: NextAuth.js with Google OAuth
- Database: MongoDB with Mongoose
- Image Storage: Cloudinary
- State Management: Recoil
- Node.js 18+
- MongoDB database
- Google OAuth credentials
- Cloudinary account
- Clone the repository:
git clone <repository-url>
cd medium-clone- Install dependencies:
yarn install- Set up environment variables:
cp .env.example .env.local- Fill in your environment variables in
.env.local:
NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=<your-secret>
CLIENT_ID=<google-client-id>
CLIENT_SECRET=<google-client-secret>
MONGODB_URI=<mongodb-connection-string>
CLOUDINARY_NAME=<cloudinary-cloud-name>
CLOUDINARY_API_KEY=<cloudinary-api-key>
CLOUDINARY_SECRET=<cloudinary-api-secret>
- Run the development server:
yarn dev- Open http://localhost:3000 in your browser.
src/
├── app/ # Next.js App Router pages and API routes
├── components/ # React components
│ ├── pages/ # Page-specific components
│ └── shared/ # Reusable components
├── lib/ # Database and service configurations
├── models/ # Mongoose models
└── utils/ # Helpers and state atoms
MIT