Skip to content

virus231/tech-stack

Repository files navigation

📝 Ukrainian Mini Blog

Next.js TypeScript Express.js Prisma PostgreSQL Deployed on Vercel

🌐 Live Demo: https://tech-stack-green.vercel.app/

A modern, responsive mini-blog application built with Next.js 15 and Express.js, featuring user authentication, post management, and a beautiful Ukrainian interface.


🌟 Features

🔐 Authentication System

  • User Registration & Login - Secure authentication with JWT tokens
  • Protected Routes - Access control for authenticated users only
  • Auto-logout - Automatic session management on token expiration

📚 Post Management

  • Create Posts - Rich text posts with title, description, and content
  • View Posts - Beautiful, responsive post listing with pagination
  • Edit Posts - Full post editing for post authors
  • Query-based Routing - SEO-friendly URLs with query parameters

👤 User Profile

  • Profile Management - Update user information and password
  • Account Settings - Secure password changes with validation
  • Account Deletion - Complete account removal with confirmation

🎨 Modern UI/UX

  • Responsive Design - Mobile-first approach with TailwindCSS 4
  • ShadcnUI Components - Beautiful, accessible UI components
  • Loading States - Skeleton loaders and smooth transitions
  • Toast Notifications - User-friendly feedback system
  • Ukrainian Localization - Full Ukrainian language support

🚀 Tech Stack

Frontend

Backend

  • Express.js - Fast, minimalist web framework
  • TypeScript - Type-safe server development
  • Prisma - Next-generation ORM
  • PostgreSQL - Reliable relational database
  • JWT - Secure authentication tokens
  • bcryptjs - Password hashing
  • CORS - Cross-origin resource sharing

Development Tools

  • Biome - Fast linter and formatter
  • pnpm - Efficient package manager
  • Turbopack - Fast development builds

🌐 Live Demo

🚀 Experience the app: https://tech-stack-green.vercel.app/

Demo Features:

  • ✅ User registration and login
  • ✅ Create, view, and edit posts
  • ✅ Responsive design on all devices
  • ✅ Ukrainian interface
  • ✅ Real-time notifications

🛠️ Installation & Setup

Prerequisites

  • Node.js 18+ and npm/pnpm
  • PostgreSQL database
  • Git for version control

📦 Quick Start

  1. Clone the repository
git clone <repository-url>
cd tech-test
  1. Install dependencies
# Backend dependencies
cd backend
pnpm install

# Frontend dependencies
cd ../frontend
pnpm install
  1. Environment Setup

Backend (backend/.env):

DATABASE_URL="postgresql://username:password@localhost:5432/miniblog"
JWT_SECRET="your-super-secret-jwt-key"
PORT=3001
NODE_ENV=development
CORS_ORIGINS="http://localhost:3000"

Frontend (frontend/.env):

NEXT_PUBLIC_API_URL=http://localhost:3001/api
  1. Database Setup
cd backend
npx prisma generate
npx prisma db push
  1. Start Development Servers
# Terminal 1 - Backend
cd backend
pnpm dev

# Terminal 2 - Frontend
cd frontend
pnpm dev
  1. Open your browser 🌐

🌐 Deployment

Production Deployment

  • Frontend: Deployed on Vercel
  • Backend: Deployed with database hosting
  • Database: PostgreSQL with connection pooling

Custom Deployment

Vercel (Frontend)

  1. Connect your repository to Vercel
  2. Set environment variables:
    • NEXT_PUBLIC_API_URL=https://your-backend-url/api
  3. Deploy! 🚀

Railway/Render (Backend)

  1. Connect your repository to Railway or Render
  2. Set environment variables (DATABASE_URL, JWT_SECRET, etc.)
  3. Deploy the backend service
  4. Update frontend NEXT_PUBLIC_API_URL to point to your backend

📁 Project Structure

tech-test/
├── backend/                 # Express.js API Server
│   ├── src/
│   │   ├── controllers/     # Route handlers
│   │   ├── middleware/      # Custom middleware
│   │   ├── routes/         # API routes
│   │   ├── config/         # Configuration files
│   │   └── index.ts        # Server entry point
│   ├── prisma/             # Database schema & migrations
│   └── package.json
├── frontend/               # Next.js Application
│   ├── src/
│   │   ├── app/           # App Router pages
│   │   ├── components/    # Reusable UI components
│   │   ├── contexts/      # React contexts
│   │   ├── hooks/         # Custom React hooks
│   │   └── lib/           # Utility functions
│   └── package.json
└── README.md

🔑 API Endpoints

Authentication

  • POST /api/auth/register - User registration
  • POST /api/auth/login - User login

Posts

  • GET /api/posts - Get all posts
  • GET /api/posts/:id - Get post by ID
  • POST /api/posts - Create new post (auth required)
  • PUT /api/posts/:id - Update post (owner only)

Users

  • GET /api/users/me - Get current user (auth required)
  • PUT /api/users/me - Update user profile (auth required)
  • DELETE /api/users/me - Delete user account (auth required)

🚀 Git Workflow & CI/CD

Branching Strategy

The project uses Git Flow with automated releases:

main/master     ←── Production releases (stable)
    ↑
develop         ←── Integration branch (beta releases)  
    ↑
feature/*       ←── Feature development
hotfix/*        ←── Urgent production fixes

Semantic Release

Automated versioning with conventional commits:

feat: add new feature          # minor version bump
fix: bug fix                   # patch version bump
docs: update documentation     # patch version bump
refactor: code refactoring     # patch version bump

GitHub Actions

  • CI Pipeline: Build, lint, type-check on PRs
  • Release Pipeline: Automated releases to production
  • PR Validation: Full validation before merge

🤝 Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'feat: add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.


📞 Support

If you have any questions or need help with setup, please open an issue or contact the development team.

Happy coding! 🎉


📝 Український Міні-Блог

🌐 Демо-версія: https://tech-stack-green.vercel.app/

Сучасний, адаптивний додаток міні-блогу, створений з Next.js 15 та Express.js, з автентифікацією користувачів, управлінням постами та красивим українським інтерфейсом.


🌟 Можливості

🔐 Система Автентифікації

  • Реєстрація та Вхід - Безпечна автентифікація з JWT токенами
  • Захищені Маршрути - Контроль доступу тільки для авторизованих користувачів
  • Авто-вихід - Автоматичне управління сесіями при закінченні токена

📚 Управління Постами

  • Створення Постів - Багатий текстовий контент з заголовком, описом і змістом
  • Перегляд Постів - Красивий, адаптивний список постів з пагінацією
  • Редагування Постів - Повне редагування для авторів постів
  • Query-based Маршрутизація - SEO-дружні URL з query параметрами

👤 Профіль Користувача

  • Управління Профілем - Оновлення інформації користувача та пароля
  • Налаштування Акаунта - Безпечна зміна пароля з валідацією
  • Видалення Акаунта - Повне видалення акаунта з підтвердженням

🎨 Сучасний UI/UX

  • Адаптивний Дизайн - Mobile-first підхід з TailwindCSS 4
  • ShadcnUI Компоненти - Красиві, доступні UI компоненти
  • Стани Завантаження - Скелетони завантаження та плавні переходи
  • Toast Сповіщення - Зручна система зворотного зв'язку
  • Українська Локалізація - Повна підтримка української мови

🚀 Технологічний Стек

Фронтенд

  • Next.js 15 - React фреймворк з App Router
  • TypeScript - Типобезпечний JavaScript
  • TailwindCSS 4 - Utility-first CSS фреймворк
  • ShadcnUI - Красива бібліотека UI компонентів
  • TanStack React Query - Потужне отримання даних
  • Axios - HTTP клієнт з інтерцепторами
  • React Hook Form - Продуктивна обробка форм
  • Zod - Валідація схем
  • Sonner - Toast сповіщення
  • date-fns - Форматування дат з українською локаллю

Бекенд

  • Express.js - Швидкий, мінімалістичний веб-фреймворк
  • TypeScript - Типобезпечна розробка сервера
  • Prisma - ORM нового покоління
  • PostgreSQL - Надійна реляційна база даних
  • JWT - Безпечні токени автентифікації
  • bcryptjs - Хешування паролів
  • CORS - Спільний доступ до ресурсів різних доменів

Інструменти Розробки

  • Biome - Швидкий лінтер та форматер
  • pnpm - Ефективний менеджер пакетів
  • Turbopack - Швидка збірка для розробки

🌐 Демо-версія

🚀 Спробуйте додаток: https://tech-stack-green.vercel.app/

Демо-функції:

  • ✅ Реєстрація та авторизація користувачів
  • ✅ Створення, перегляд та редагування постів
  • ✅ Адаптивний дизайн на всіх пристроях
  • ✅ Український інтерфейс
  • ✅ Сповіщення в реальному часі

🛠️ Встановлення та Налаштування

Вимоги

  • Node.js 18+ та npm/pnpm
  • PostgreSQL база даних
  • Git для контролю версій

📦 Швидкий Старт

  1. Клонувати репозиторій
git clone <repository-url>
cd tech-test
  1. Встановити залежності
# Залежності бекенду
cd backend
pnpm install

# Залежності фронтенду
cd ../frontend
pnpm install
  1. Налаштування Середовища

Бекенд (backend/.env):

DATABASE_URL="postgresql://username:password@localhost:5432/miniblog"
JWT_SECRET="your-super-secret-jwt-key"
PORT=3001
NODE_ENV=development
CORS_ORIGINS="http://localhost:3000"

Фронтенд (frontend/.env):

NEXT_PUBLIC_API_URL=http://localhost:3001/api
  1. Налаштування Бази Даних
cd backend
npx prisma generate
npx prisma db push
  1. Запуск Серверів Розробки
# Термінал 1 - Бекенд
cd backend
pnpm dev

# Термінал 2 - Фронтенд
cd frontend
pnpm dev
  1. Відкрити у браузері 🌐

🌐 Деплоймент

Продакшн Деплоймент

  • Фронтенд: Деплоїто на Vercel
  • Бекенд: Деплоїто з хостингом бази даних
  • База Даних: PostgreSQL з пулом з'єднань

Власний Деплоймент

Vercel (Фронтенд)

  1. Підключити репозиторій до Vercel
  2. Встановити змінні середовища:
    • NEXT_PUBLIC_API_URL=https://your-backend-url/api
  3. Деплоїти! 🚀

Railway/Render (Бекенд)

  1. Підключити репозиторій до Railway або Render
  2. Встановити змінні середовища (DATABASE_URL, JWT_SECRET, тощо)
  3. Деплоїти бекенд сервіс
  4. Оновити NEXT_PUBLIC_API_URL фронтенду, щоб вказувати на ваш бекенд

📁 Структура Проекту

tech-test/
├── backend/                 # Express.js API Сервер
│   ├── src/
│   │   ├── controllers/     # Обробники маршрутів
│   │   ├── middleware/      # Користувацький middleware
│   │   ├── routes/         # API маршрути
│   │   ├── config/         # Файли конфігурації
│   │   └── index.ts        # Точка входу сервера
│   ├── prisma/             # Схема бази даних та міграції
│   └── package.json
├── frontend/               # Next.js Додаток
│   ├── src/
│   │   ├── app/           # Сторінки App Router
│   │   ├── components/    # UI компоненти для повторного використання
│   │   ├── contexts/      # React контексти
│   │   ├── hooks/         # Користувацькі React хуки
│   │   └── lib/           # Допоміжні функції
│   └── package.json
└── README.md

🔑 API Точки Доступу

Автентифікація

  • POST /api/auth/register - Реєстрація користувача
  • POST /api/auth/login - Вхід користувача

Пости

  • GET /api/posts - Отримати всі пости
  • GET /api/posts/:id - Отримати пост за ID
  • POST /api/posts - Створити новий пост (потрібна авторизація)
  • PUT /api/posts/:id - Оновити пост (тільки власник)

Користувачі

  • GET /api/users/me - Отримати поточного користувача (потрібна авторизація)
  • PUT /api/users/me - Оновити профіль користувача (потрібна авторизація)
  • DELETE /api/users/me - Видалити акаунт користувача (потрібна авторизація)

🚀 Git Workflow та CI/CD

Стратегія Гілок

Проект використовує Git Flow з автоматизованими релізами:

main/master     ←── Продакшн релізи (стабільні)
    ↑
develop         ←── Інтеграційна гілка (бета релізи)
    ↑
feature/*       ←── Розробка функцій
hotfix/*        ←── Термінові виправлення

Семантичні Релізи

Автоматична версійність з конвенційними комітами:

feat: add new feature          # minor version bump
fix: bug fix                   # patch version bump
docs: update documentation     # patch version bump
refactor: code refactoring     # patch version bump

GitHub Actions

  • CI Pipeline: Збірка, лінтинг, перевірка типів на PR
  • Release Pipeline: Автоматичні релізи в продакшн
  • PR Validation: Повна валідація перед злиттям

🤝 Внесок

  1. Форкнути репозиторій
  2. Створити гілку з функцією (git checkout -b feature/amazing-feature)
  3. Закомітити зміни (git commit -m 'feat: add amazing feature')
  4. Пушнути до гілки (git push origin feature/amazing-feature)
  5. Відкрити Pull Request

📄 Ліцензія

Цей проект ліцензовано під MIT License - дивіться файл LICENSE для деталей.


📞 Підтримка

Якщо у вас є питання або потрібна допомога з налаштуванням, будь ласка, відкрийте issue або зв'яжіться з командою розробки.

Щасливого кодування! 🎉