Modern full-stack blog platform built with Next.js, featuring Drizzle ORM, Better-Auth authentication, Redis (Cache service), internationalization, and containerized deployment.
- TypeScript - Type-safe development
- React - Latest React features
- Next.js - React framework with App Router
- PostgreSQL - Robust relational database
- Tailwind CSS - Utility-first CSS framework
- Docker - Containerized deployment
- Authentication System - Secure user authentication and session management
- Drizzle ORM - Type-safe ORM for PostgreSQL
- Zod & React Hook Form - Form validation and management
- Shadcn UI - Beautiful and accessible components
- Dark Mode - Theme switching with Next Themes
- i18n - Multi-language support (EN / PT-BR / ES) via Next Intl
- Nodemailer - Email functionality
- Sanitize HTML - XSS protection for user inputs
- Rate Limiter Flexible - API endpoint rate limiting and DDoS protection
- Sentry - Error tracking and performance monitoring tool
- Redis Bun API Native - In-memory cache layer for session storage and performance optimization
Before starting, ensure you have the following installed:
- Bun (v1 or higher) – primary runtime & package manager
- Docker – for containerized development and deployment
- Git
Optional: Node.js (v22 or higher), if you prefer running the app with Node or using Node-based global tooling.
git clone https://github.com/Victor-Zarzar/blog-post
cd blog-postzed .Copy the example environment file and configure your credentials:
cp .env-example .envThen edit .env with your actual values. The .env-example file contains detailed comments explaining each variable and how to obtain the necessary credentials.
Key configurations needed:
- Database: PostgreSQL connection string
- Sentry: DSN and authentication token from your Sentry project
- Website URL: Your production domain or
http://localhost:3000for development
Important: Never commit your
.envfile to version control. It's already in.gitignore.
make installOr manually with bun:
bun installmake db-migrateOr manually:
bun db:generate
bun db:migratemake testOr manually with bun:
bun testView all available Make commands:
make helpStart the development server (port 3000):
make devAccess the application at http://localhost:3000
Build the Docker image and start the container:
make runmake stopmake logsOr directly with Docker:
docker logs -f blog-postmake shellRemove containers, images, and build artifacts:
make cleanCheck for code issues with Biomejs:
bun biome checkFormat all files and apply linting fixes:
bunx biome format --writeThis command will automatically format your code according to the project's style rules and fix any auto-fixable linting issues.
# Generate
bun db:generate
# Create a new migration
bun db:migrate
# Open Drizzle Studio (Database GUI)
bun db:studiomake prodThe application is deployed on Vercel for production use.
Important: Don't forget to add all environment variables from .env-example to your Vercel project settings.
- CI/CD Pipeline -
.github/workflows/main.yamlfor automated checks and builds - Dependabot - Monthly dependency updates for GitHub Actions and dependencies
Docker is available as an optional tool for local containerized development:
docker build -t blog-post:production .
docker run -d -p 3000:3000 --name blog-post-prod blog-post:productionContributions are welcome! Please feel free to submit a Pull Request.
- Fork the project
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Fork the project
- Create your feature branch
- Commit your changes
- Push to the branch
- Open a Pull Request
Report issues at: https://github.com/Victor-Zarzar/blog-post/issues
This project is licensed under the MIT License - see the LICENSE file for details.
Victor Zarzar - @Victor-Zarzar
Project Link: https://github.com/Victor-Zarzar/blog-post

