Skip to content

HB's Thoughts is a personal blog featuring articles mostly about Vue, Nuxt, TailwindCSS, and TypeScript, but not limited to — more on the front-end and less on the back-end. The blog supports multiple languages (English and Bulgarian) and is optimized for performance and user experience.

License

Notifications You must be signed in to change notification settings

howbizarre/hbsthoughts

Repository files navigation

HB's Thoughts

Screenshot

🌍 Choose Language / Изберете Език

🇬🇧 English (README_EN.md)

A simple blog system built with Nuxt 4, focused on articles about Vue, Nuxt, TailwindCSS, TypeScript, and front-end development.

🌐 Live Site

Visit the blog at: thoughts.bizarre.how

📖 About

HB's Thoughts is a personal blog featuring articles mostly about Vue, Nuxt, TailwindCSS, and TypeScript, but not limited to — more on the front-end and less on the back-end. The blog supports multiple languages (English and Bulgarian) and is optimized for performance and user experience.

✨ Features

  • Modern Tech Stack: Built with Nuxt 4, Vue 3, and TypeScript
  • Multilingual Support: Available in English and Bulgarian with i18n
  • Content Management: Powered by Nuxt Content for markdown-based articles
  • Modern UI: Styled with Nuxt UI and TailwindCSS
  • Search Functionality: Full-text search with Fuse.js
  • Tag System: Articles organized by tags and competencies
  • SEO Optimized: Server-side rendering with optimized meta tags
  • Structured Data: JSON-LD structured data for blog posts, listings, and breadcrumbs
  • Cloud Deployment: Deployed on Cloudflare Workers
  • Responsive Design: Mobile-first responsive layout

🛠 Tech Stack

🚀 Getting Started

Prerequisites

  • Node.js (v18 or higher)
  • npm or yarn
  • Wrangler CLI (for Cloudflare deployment)

Installation

  1. Clone the repository:
git clone https://github.com/hristobotev/hbsthoughts.git
cd hbsthoughts
  1. Install dependencies:
npm install
  1. Start the development server:
npm run dev

The site will be available at http://localhost:7410

📝 Available Scripts

  • npm run dev - Start development server on port 7410
  • npm run build - Build the application for production
  • npm run generate - Generate static files
  • npm run preview - Build and preview with Wrangler
  • npm run deploy - Build and deploy to Cloudflare Workers
  • npm run cf-typegen - Generate Cloudflare types

📁 Project Structure

├── app/                    # Nuxt app directory
│   ├── components/         # Vue components
│   ├── composables/        # Vue composables (JSON-LD, utilities)
│   ├── layouts/           # Layout components
│   ├── pages/             # Page components and routing
│   └── assets/            # Static assets
├── content/               # Markdown content
│   ├── bg/                # Bulgarian articles
│   ├── en/                # English articles
│   ├── seo/               # SEO configurations
├── i18n/                  # Internationalization
├── public/                # Public assets
└── server/                # Server-side code

🌍 Content Management

Articles are written in Markdown and stored in the content/ directory:

  • /content/en/articles/ - English articles
  • /content/bg/articles/ - Bulgarian articles
  • /content/en/static/ - English static pages (like help pages)
  • /content/bg/static/ - Bulgarian static pages (like help pages)

Article Format

Each article follows this frontmatter structure:

---
title: "Article Title"
date: "2024-02-06T12:01:53.293Z"
draft: false
tags: ["vue", "nuxt"]
slug: "article-slug"
navigation: false
competence: "frontend"
---

Article content here...

🔍 SEO & Structured Data

The blog implements comprehensive SEO optimization with JSON-LD structured data:

JSON-LD Implementation

The application includes three types of structured data using Schema.org vocabulary:

  1. Blog Listing (useJsonLdBlogListing):

    • Generates Blog schema for article listing pages
    • Includes all articles with their metadata
    • Automatically updates when articles are loaded
  2. Blog Posts (useJsonLdBlogPost):

    • Generates BlogPosting schema for individual articles
    • Includes author, publisher, dates, and article metadata
    • Supports optional featured images
  3. Breadcrumbs (useJsonLdBreadcrumbs):

    • Generates BreadcrumbList schema for navigation
    • Works with Nuxt UI breadcrumb components
    • Handles multilingual routes and dynamic content

Usage

The JSON-LD composables are automatically imported and can be used in any page:

<script setup>
// For article listings
useJsonLdBlogListing(title, description, articles, locale);

// For individual blog posts
useJsonLdBlogPost(article, locale);

// For breadcrumb navigation
useJsonLdBreadcrumbs(breadcrumbItems);
</script>

All structured data is reactive and updates automatically when content changes.

Site Maps

The blog generates a sitemap for SEO (Search Engine Optimization) purposes, which includes all articles and static pages. The sitemap is automatically updated when new content is added, thanks to the Nuxt Sitemap module.

🚀 Deployment

The application is configured for deployment on Cloudflare Workers:

  1. Configure Wrangler:
npm run cf-typegen
  1. Deploy:
npm run deploy

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/amazing-feature
  3. Commit your changes: git commit -m '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.md file for details.

👤 Author

howbizarre

🙏 Acknowledgments

🇧🇬 Български (README_BG.md)

Малка блог система построен с Nuxt 4, фокусиран върху статии за Vue, Nuxt, TailwindCSS, TypeScript и фронт-енд разработка.

🌐 Живо Сайт

Посетете блога на: thoughts.bizarre.how

📖 За Проекта

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 инсталация)

Инсталация

  1. Клонирайте хранилището:
git clone https://github.com/hristobotev/hbsthoughts.git
cd hbsthoughts
  1. Инсталирайте зависимостите:
npm install
  1. Стартирайте development сървъра:
npm run dev

Сайтът ще бъде достъпен на http://localhost:7410

📝 Налични Скриптове

  • npm run dev - Стартира development сървър на порт 7410
  • npm run build - Билдва приложението за продукция
  • npm run generate - Генерира статични файлове
  • npm run preview - Билдва и прегледва с Wrangler
  • npm run deploy - Билдва и инсталира на Cloudflare Workers
  • npm 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 речника:

  1. Blog Listing (useJsonLdBlogListing):

    • Генерира Blog схема за страници с листинг на статии
    • Включва всички статии с техните метаданни
    • Автоматично се актуализира когато статиите се заредят
  2. Blog Posts (useJsonLdBlogPost):

    • Генерира BlogPosting схема за отделни статии
    • Включва автор, издател, дати и метаданни на статията
    • Поддържа опционални featured изображения
  3. 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:

  1. Конфигурирайте Wrangler:
npm run cf-typegen
  1. Инсталирайте:
npm run deploy

🤝 Сътрудничество

  1. Направете fork на хранилището
  2. Създайте feature branch: git checkout -b feature/amazing-feature
  3. Commit-нете промените си: git commit -m 'Add amazing feature'
  4. Push-нете към branch-а: git push origin feature/amazing-feature
  5. Отворете Pull Request

📄 Лиценз

Този проект е лицензиран под MIT лиценза - вижте LICENSE.md файла за подробности.

👤 Автор

howbizarre

🙏 Благодарности

About

HB's Thoughts is a personal blog featuring articles mostly about Vue, Nuxt, TailwindCSS, and TypeScript, but not limited to — more on the front-end and less on the back-end. The blog supports multiple languages (English and Bulgarian) and is optimized for performance and user experience.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •