7.08.2025 г.
HB's Thoughts

Малка блог система построен с Nuxt 4, фокусиран върху статии за Vue, Nuxt, TailwindCSS, TypeScript и фронт-енд разработка.
📖 За Проекта
HB's Thoughts е личен блог със статии главно за Vue, Nuxt, TailwindCSS и TypeScript, но не само - повече фронт-енд и по-малко бек-енд. Блогът поддържа множество езици (английски и български) и е оптимизиран за производителност и потребителско изживяване.
✨ Функционалности
- Модерен Технологичен Стек: Построен с Nuxt 4, Vue 3 и TypeScript
- Многоезична Поддръжка: Достъпен на английски и български с i18n
- Управление на Съдържание: Задвижван от Nuxt Content за статии в markdown формат
- Модерен UI: Стилизиран с Nuxt UI и TailwindCSS
- Функционалност за Търсене: Пълнотекстово търсене с Fuse.js
- Система за Тагове: Статиите са организирани по тагове и компетенции
- SEO Оптимизация: Рендериране от страна на сървъра с оптимизирани мета тагове
- Структурирани Данни: JSON-LD структурирани данни за блог постове, листинги и навигация
- Облачна Инсталация: Инсталиран на Cloudflare Workers
- Адаптивен Дизайн: Mobile-first адаптивен лейаут
🛠 Технологичен Стек
- Фреймуърк: Nuxt 4
- Фронт-енд: Vue 3 с TypeScript
- Стилизиране: TailwindCSS + Nuxt UI
- Съдържание: Nuxt Content за markdown статии
- Интернационализация: Nuxt i18n
- Търсене: Fuse.js за размито търсене
- База данни: Better SQLite3
- Инсталация: Cloudflare Workers
- Build Tool: Vite
🚀 Започване
Изисквания
- Node.js (v18 или по-нова версия)
- npm или yarn
- Wrangler CLI (за Cloudflare инсталация)
Инсталация
- Клонирайте хранилището:
git clone https://github.com/hristobotev/hbsthoughts.git
cd hbsthoughts
- Инсталирайте зависимостите:
npm install
- Стартирайте development сървъра:
npm run dev
Сайтът ще бъде достъпен на http://localhost:7410
📝 Налични Скриптове
npm run dev
- Стартира development сървър на порт 7410npm run build
- Билдва приложението за продукцияnpm run generate
- Генерира статични файловеnpm run preview
- Билдва и прегледва с Wranglernpm run deploy
- Билдва и инсталира на Cloudflare Workersnpm run cf-typegen
- Генерира Cloudflare типове
📁 Структура на Проекта
├── app/ # Nuxt app директория
│ ├── components/ # Vue компоненти
│ ├── composables/ # Vue composables (JSON-LD, utilities)
│ ├── layouts/ # Layout компоненти
│ ├── pages/ # Page компоненти и routing
│ └── assets/ # Статични ресурси
├── content/ # Markdown съдържание
│ ├── bg/ # Български статии
│ ├── en/ # Английски статии
│ ├── seo/ # SEO конфигурации
├── i18n/ # Интернационализация
├── public/ # Публични ресурси
└── server/ # Server-side код
🌍 Управление на Съдържанието
Статиите са написани в Markdown и съхранени в content/
директорията:
/content/en/articles/
- Английски статии/content/bg/articles/
- Български статии/content/en/static/
- Английски статични страници (като help страници)/content/bg/static/
- Български статични страници (като help страници)
Формат на Статия
Всяка статия следва тази frontmatter структура:
---
title: "Заглавие на Статията"
date: "2024-02-06T12:01:53.293Z"
draft: false
tags: ["vue", "nuxt"]
slug: "slug-na-statiata"
navigation: false
competence: "frontend"
---
Съдържание на статията тук...
🔍 SEO & Структурирани Данни
Блогът имплементира цялостна SEO оптимизация със JSON-LD структурирани данни:
JSON-LD Имплементация
Приложението включва три типа структурирани данни използвайки Schema.org речника:
- Blog Listing (
useJsonLdBlogListing
):- Генерира
Blog
схема за страници с листинг на статии - Включва всички статии с техните метаданни
- Автоматично се актуализира когато статиите се заредят
- Генерира
- Blog Posts (
useJsonLdBlogPost
):- Генерира
BlogPosting
схема за отделни статии - Включва автор, издател, дати и метаданни на статията
- Поддържа опционални featured изображения
- Генерира
- Breadcrumbs (
useJsonLdBreadcrumbs
):- Генерира
BreadcrumbList
схема за навигация - Работи с Nuxt UI breadcrumb компонентите
- Обработва многоезични маршрути и динамично съдържание
- Генерира
Използване
JSON-LD composables се импортират автоматично и могат да се използват в която и да е страница:
<script setup>
// За листинги на статии
useJsonLdBlogListing(title, description, articles, locale);
// За отделни блог постове
useJsonLdBlogPost(article, locale);
// За breadcrumb навигация
useJsonLdBreadcrumbs(breadcrumbItems);
</script>
Всички структурирани данни са реактивни и се актуализират автоматично при промяна на съдържанието.
Карти на Сайта
Блогът генерира карта на сайта за SEO (Search Engine Optimization) цели, която включва всички статии и статични страници. Картата на сайта се актуализира автоматично, когато се добави ново съдържание, благодарение на Nuxt Sitemap модула.
🚀 Инсталация
Приложението е конфигурирано за инсталация на Cloudflare Workers:
- Конфигурирайте Wrangler:
npm run cf-typegen
- Инсталирайте:
npm run deploy
🤝 Сътрудничество
- Направете fork на хранилището
- Създайте feature branch:
git checkout -b feature/amazing-feature
- Commit-нете промените си:
git commit -m 'Add amazing feature'
- Push-нете към branch-а:
git push origin feature/amazing-feature
- Отворете Pull Request
📄 Лиценз
Този проект е лицензиран под MIT лиценза.
🙏 Благодарности
- Построен с Nuxt 4
- UI компоненти от Nuxt UI
- Съдържание от Nuxt Content
- Многоезична поддръжка с Nuxt i18n
- Икони от Heroicons
- Шрифтове от Google Fonts
- Back-end Cloudflare Workers