A personal website combining a professional portfolio (CV) and an AI-focused blog.
- Public Section:
- Author profile (CV) with contacts and bio.
- Responsive design (Mobile/Desktop).
- Light and Dark themes.
- Blog:
- Article feed with Markdown and HTML support.
- Read time estimation.
- Nested comments and likes.
- Infinite scroll.
- Admin Panel:
- Profile management.
- Post CRUD with WYSIWYG editor.
- Image upload.
- Security:
- OAuth authentication (Google, GitHub, VK ID).
- Role-Based Access Control (Admin/User).
- Rate Limiting.
- Language: Go 1.25
- Framework: Chi v5
- Database: PostgreSQL 15
- Auth: OAuth 2.0/2.1
- Framework: React 18, Vite
- Language: TypeScript
- UI: Tailwind CSS, shadcn/ui
- State: TanStack Query
- Containerization: Docker, Docker Compose
- Web Server: Nginx
- CI/CD: GitHub Actions
Prerequisites: Docker, Docker Compose, Make.
-
Initialize the project:
make init
This sets up the necessary configuration files (
.envandbackend/config/local.yaml). Important: Openbackend/config/local.yamlto configure your local credentials (OAuth client IDs/secrets, session keys, etc.). -
Start development environment:
make dev
The application will be available at:
- Frontend: http://localhost:5173
- Backend API: http://localhost:8080
To deploy in production mode with Nginx and SSL support:
docker-compose -f docker-compose.prod.yml up -d --buildEnsure you have configured backend/config/production.yaml (for application secrets) and set the necessary environment variables in .env (for infrastructure settings like domain and initial database credentials).
make logs- View logsmake stop- Stop containersmake reset- Reset environment (delete containers and volumes)
Default users have the user role. To assign admin rights:
docker compose exec -T db psql -U postgres -d pwp_db -c "UPDATE users SET role = 'admin' WHERE email = 'YOUR_EMAIL@gmail.com'".
├── backend/ # Go API server
│ ├── config/ # Configuration
│ └── migrations/ # SQL migrations
├── frontend/ # React application
├── docs/ # Documentation
├── docker-compose.yml
├── nginx.conf
└── Makefile