Skip to content

feekool/feekool.github.io

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

75 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

😎 The Best Open Source Starter Template 😎 GitHub Pages Simple Forum πŸ”«

https://feekool.github.io

Getting Started

  1. Copy .env.example to .env and configure your environment variables
  2. Run npm install
  3. Run npm run dev

Console Information

When you run the application, you'll see helpful information in the browser console:

Bundle Size Information

πŸ“¦ Bundle Size: 245.67 KB (12 JS files, 3 CSS files)

Contact Information

🌟 GitHub Forum Platform v0.0.1
   Template created by: Semyon Fedoseev
   GitHub: https://github.com/fedoseevsm
   Contact: Feel free to reach out for questions or contributions!

πŸ’‘ This platform is built with React, TypeScript, and Tailwind CSS
   Features: GitHub API integration, Markdown support, Mobile responsive
   Security: Service Worker token protection, CSP headers

For more details about bundle analysis and performance monitoring, see BUNDLE_INFO.md

Security

This application implements several security measures to protect sensitive data:

API Token Security

  • βœ… GitHub access tokens (Personal Access or fine-grained tokens) are stored in environment variables only
  • βœ… Service Worker Protection: Tokens are stored in IndexedDB and injected by service worker
  • βœ… Network Tab Security: Authorization headers are not visible in DevTools Network tab
  • βœ… Tokens are never logged in console output or error messages
  • βœ… All error messages are sanitized to prevent token leakage
  • βœ… Content Security Policy (CSP) headers prevent unauthorized script execution
  • βœ… Server-side security headers (XSS protection, frame options, etc.)

Service Worker Architecture

  • βœ… Secure Token Storage: GitHub tokens stored in IndexedDB within service worker
  • βœ… Request Interception: Service worker intercepts GitHub API calls and adds auth headers
  • βœ… Token Isolation: Main app never directly accesses the token after initial setup
  • βœ… Automatic Cleanup: Tokens cleared from storage on logout

Rate Limit Handling

  • βœ… Automatic Detection: Rate limit errors are automatically detected from GitHub API responses
  • βœ… User-Friendly Modal: Shows helpful modal with VPN/IP change instructions
  • βœ… Multilingual Support: Messages in English and Russian
  • βœ… Non-Blocking: Users can continue using the app after acknowledging the modal
  • βœ… Secure Logging: Rate limit events are logged without exposing sensitive data

For detailed information about rate limit handling, see RATE_LIMIT_HANDLING.md

Environment Variables

Create a .env file based on .env.example:

cp .env.example .env

Required environment variables:

  • VITE_API_KEY: GitHub Personal Access Token or fine-grained token with repository access (repo or contents permissions)

Security best practices:

  • Never commit .env files to version control
  • Rotate tokens regularly
  • Use minimum required permissions
  • Monitor token usage in GitHub settings

Error Handling

  • βœ… Sensitive data is automatically redacted from error logs
  • βœ… Safe logging functions prevent accidental token exposure
  • βœ… Network errors are sanitized before display to users

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° русского языка

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ созданиС постов ΠΈ Ρ‚ΠΎΠΏΠΈΠΊΠΎΠ² Π½Π° русском языкС с автоматичСской транслитСрациСй:

  • βœ… Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠΏΠΈΠΊΠΎΠ² Π½Π° русском языкС
  • βœ… Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ постов с русским тСкстом
  • βœ… АвтоматичСская транслитСрация Π½Π°Π·Π²Π°Π½ΠΈΠΉ (русский β†’ Π»Π°Ρ‚ΠΈΠ½ΠΈΡ†Π°)
  • βœ… Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ тСкста ΠΈ транслитСрированной вСрсии

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ: "Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ?"
ВранслитСрация: "kak-ispolzovat-freymuork"

Мобильная адаптация

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ для ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… устройств:

  • βœ… ΠŸΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π·ΡƒΠΌΠ° ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ тСкста
  • βœ… ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ touch targets (ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 44px)
  • βœ… АдаптивныС Ρ„ΠΎΡ€ΠΌΡ‹ для ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… экранов
  • βœ… ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° устройств с Π²Ρ‹Ρ€Π΅Π·Π°ΠΌΠΈ (notch)
  • βœ… Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с iOS Safari ΠΈ Android Chrome

ВСхничСскиС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ:

  • Viewport meta tag с maximum-scale=1.0 ΠΈ user-scalable=no
  • CSS ΠΏΡ€Π°Π²ΠΈΠ»Π° для прСдотвращСния Π·ΡƒΠΌΠ° Π½Π° фокус
  • Font-size 16px для input ΠΏΠΎΠ»Π΅ΠΉ (iOS Safari requirement)

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС: см. MOBILE_ADAPTATION.md

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ состояния

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ оптимистичноС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ состояния для ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠ³ΠΎ отобраТСния Π½ΠΎΠ²Ρ‹Ρ… элСмСнтов:

  • βœ… МгновСнноС ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ созданных Ρ‚ΠΎΠΏΠΈΠΊΠΎΠ² ΠΈ постов
  • βœ… ΠžΠΏΡ‚ΠΈΠΌΠΈΡΡ‚ΠΈΡ‡Π½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…
  • βœ… Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π½Π°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ UX
  • βœ… Π‘Π½ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° сСрвСр

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

  1. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ создаСт Ρ‚ΠΎΠΏΠΈΠΊ/пост
  2. Π–Π΄Π΅ΠΌ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π° сСрвСра
  3. МгновСнно добавляСм элСмСнт Π² локальноС состояниС
  4. UI обновляСтся Π±Π΅Π· Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС: см. STATE_OPTIMIZATION.md

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ Π°Π²Π°Ρ‚Π°Ρ€ΠΊΠΈ Gravatar

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ страницу профиля с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Π°Π²Π°Ρ‚Π°Ρ€ΠΎΠΊ Gravatar:

  • βœ… ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ профиля
  • βœ… АвтоматичСскоС созданиС Gravatar ΠΏΡ€ΠΈ рСгистрации (новая функция)
  • βœ… Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° собствСнной Π°Π²Π°Ρ‚Π°Ρ€ΠΊΠΈ (JPG, PNG, GIF, WebP Π΄ΠΎ 2MB)
  • βœ… Кнопка сброса Π°Π²Π°Ρ‚Π°Ρ€ΠΊΠΈ Π½Π° Gravatar ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
  • βœ… ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π°Π²Π°Ρ‚Π°Ρ€ΠΎΠΊ Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² Π² Ρ‚ΠΎΠΏΠΈΠΊΠ°Ρ… ΠΈ постах
  • βœ… ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠ΅ имя ΠΈ настройки ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
  • βœ… Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с GitHub для хранСния ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

  1. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ автоматичСски гСнСрируСтся Π°Π²Π°Ρ‚Π°Ρ€ΠΊΠ° Gravatar Π½Π° основС username
  2. Клик Π½Π° имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² шапкС β†’ страница профиля /profile
  3. Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° собствСнной Π°Π²Π°Ρ‚Π°Ρ€ΠΊΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΈΠΊΠΎΠ½ΠΊΡƒ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ)
  4. Кнопка "Reset to Gravatar Avatar" для восстановлСния ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Gravatar
  5. Аватарки Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ автоматичСски Π²ΠΎ всСх Ρ‚ΠΎΠΏΠΈΠΊΠ°Ρ… ΠΈ постах

ОбновлСния (May 2026):

  • ✨ АвтоматичСскоС созданиС Π°Π²Π°Ρ‚Π°Ρ€ΠΊΠΈ Gravatar ΠΏΡ€ΠΈ рСгистрации Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ
  • ✨ ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π°Π²Π°Ρ‚Π°Ρ€ΠΎΠΊ Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² Π² Ρ‚Π΅ΠΌΠ°Ρ… обсуТдСния
  • ✨ Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сброса Π½Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Gravatar ΠΈΠ· профиля

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС: см. USER_PROFILE.md

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Markdown

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Markdown синтаксис для создания красивых сообщСний:

  • βœ… ΠŸΠ°Ρ€ΡΠ΅Ρ€ Markdown с подсвСткой ΠΊΠΎΠ΄Π° ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ
  • βœ… Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ с подсказками ΠΈ горячими клавишами
  • βœ… ПанСль инструмСнтов для быстрого форматирования
  • βœ… ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ просмотр сообщСний
  • βœ… ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° GFM (GitHub Flavored Markdown)

ВозмоТности Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°:

  • Π–ΠΈΡ€Π½Ρ‹ΠΉ/курсив: **text**, *text* ΠΈΠ»ΠΈ Ctrl+B/Ctrl+I
  • Код: `code` ΠΈΠ»ΠΈ Ctrl+`
  • Бсылки: [text](url) ΠΈΠ»ΠΈ Ctrl+K
  • Бписки: - item ΠΈΠ»ΠΈ Ctrl+Shift+8
  • Π¦ΠΈΡ‚Π°Ρ‚Ρ‹: > text ΠΈΠ»ΠΈ Ctrl+Shift+>
  • Π’Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС: см. MARKDOWN_SUPPORT.md