fix(lint): remove unused Props and eslint-disable directive
This commit is contained in:
+124
-34
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schema_version": 2,
|
||||
"active_work_id": "seo-blog-categories-9c7476b9",
|
||||
"active_work_id": "blog-typography-fix-c9cf9be1",
|
||||
"works": {
|
||||
"critical-refactor-f063daf0": {
|
||||
"work_id": "critical-refactor-f063daf0",
|
||||
@@ -195,48 +195,138 @@
|
||||
},
|
||||
"ended_at": "2026-05-14T00:35:49.637Z",
|
||||
"elapsed_ms": 3823292
|
||||
},
|
||||
"fill-blog-content-fb2229ab": {
|
||||
"work_id": "fill-blog-content-fb2229ab",
|
||||
"active_plan": "/home/emil/Desktop/Coding/AI/Randify.pro/.sisyphus/plans/fill-blog-content.md",
|
||||
"plan_name": "fill-blog-content",
|
||||
"status": "completed",
|
||||
"started_at": "2026-05-14T09:06:01.254Z",
|
||||
"updated_at": "2026-05-14T10:11:10.838Z",
|
||||
"ended_at": "2026-05-14T10:11:10.838Z",
|
||||
"elapsed_ms": 7509549,
|
||||
"session_ids": [
|
||||
"ses_1de6ede59ffexUwt5C0sddEWwR",
|
||||
"ses_1da346c55ffe2yhgC2v7zqrilE"
|
||||
],
|
||||
"session_origins": {
|
||||
"ses_1de6ede59ffexUwt5C0sddEWwR": "direct",
|
||||
"ses_1da346c55ffe2yhgC2v7zqrilE": "direct"
|
||||
},
|
||||
"agent": "atlas",
|
||||
"task_sessions": {
|
||||
"todo:1": {
|
||||
"task_key": "todo:1",
|
||||
"task_label": "1",
|
||||
"task_title": "EN — What is Cryptographically Secure Randomness",
|
||||
"session_id": "ses_1da41fec6ffeNQIbWZFz8CVyWF",
|
||||
"agent": "Sisyphus-Junior",
|
||||
"category": "writing",
|
||||
"updated_at": "2026-05-14T09:14:45.203Z",
|
||||
"started_at": "2026-05-14T09:12:23.181Z",
|
||||
"status": "completed",
|
||||
"ended_at": "2026-05-14T09:14:45.203Z",
|
||||
"elapsed_ms": 142022
|
||||
},
|
||||
"todo:5": {
|
||||
"task_key": "todo:5",
|
||||
"task_label": "5",
|
||||
"task_title": "EN — RNG in Gaming",
|
||||
"session_id": "ses_1da24e0f5ffeOF5lOCH6y7ITTz",
|
||||
"agent": "Sisyphus-Junior",
|
||||
"category": "writing",
|
||||
"started_at": "2026-05-14T09:21:18.403Z",
|
||||
"status": "completed",
|
||||
"updated_at": "2026-05-14T09:41:37.697Z",
|
||||
"ended_at": "2026-05-14T09:41:37.696Z",
|
||||
"elapsed_ms": 1219293
|
||||
},
|
||||
"todo:9": {
|
||||
"task_key": "todo:9",
|
||||
"task_label": "9",
|
||||
"task_title": "RU — Криптографически стойкая случайность",
|
||||
"session_id": "ses_1da21f28fffeAnOJVgAFQWldSb",
|
||||
"agent": "Sisyphus-Junior",
|
||||
"category": "writing",
|
||||
"updated_at": "2026-05-14T09:53:48.978Z",
|
||||
"started_at": "2026-05-14T09:52:28.114Z",
|
||||
"status": "completed",
|
||||
"ended_at": "2026-05-14T09:53:48.978Z",
|
||||
"elapsed_ms": 80864
|
||||
},
|
||||
"todo:13": {
|
||||
"task_key": "todo:13",
|
||||
"task_label": "13",
|
||||
"task_title": "RU — RNG в играх",
|
||||
"session_id": "ses_1da16a3cdffe5O9FyZDLUu2SUM",
|
||||
"agent": "Sisyphus-Junior",
|
||||
"category": "writing",
|
||||
"updated_at": "2026-05-14T10:11:10.838Z",
|
||||
"started_at": "2026-05-14T10:09:51.259Z",
|
||||
"status": "completed",
|
||||
"ended_at": "2026-05-14T10:11:10.838Z",
|
||||
"elapsed_ms": 79579
|
||||
}
|
||||
}
|
||||
},
|
||||
"blog-typography-fix-c9cf9be1": {
|
||||
"work_id": "blog-typography-fix-c9cf9be1",
|
||||
"active_plan": "/home/emil/Desktop/Coding/AI/Randify.pro/.sisyphus/plans/blog-typography-fix.md",
|
||||
"plan_name": "blog-typography-fix",
|
||||
"status": "completed",
|
||||
"started_at": "2026-05-14T10:23:17.171Z",
|
||||
"updated_at": "2026-05-14T10:25:36.103Z",
|
||||
"ended_at": "2026-05-14T10:25:36.103Z",
|
||||
"elapsed_ms": 127932,
|
||||
"session_ids": [
|
||||
"ses_1da346c55ffe2yhgC2v7zqrilE"
|
||||
],
|
||||
"session_origins": {
|
||||
"ses_1da346c55ffe2yhgC2v7zqrilE": "direct"
|
||||
},
|
||||
"agent": "atlas",
|
||||
"task_sessions": {
|
||||
"final-wave:f1": {
|
||||
"task_key": "final-wave:f1",
|
||||
"task_label": "F1",
|
||||
"task_title": "Build + Visual Check",
|
||||
"session_id": "ses_1d9fc2935ffesVSRCGlGP4wnCU",
|
||||
"agent": "Sisyphus-Junior",
|
||||
"category": "quick",
|
||||
"updated_at": "2026-05-14T10:25:36.103Z",
|
||||
"started_at": "2026-05-14T10:24:51.820Z",
|
||||
"status": "completed",
|
||||
"ended_at": "2026-05-14T10:25:36.103Z",
|
||||
"elapsed_ms": 44283
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"active_plan": "/home/emil/Desktop/Coding/AI/Randify.pro/.sisyphus/plans/seo-blog-categories.md",
|
||||
"started_at": "2026-05-13T23:32:06.345Z",
|
||||
"status": "completed",
|
||||
"updated_at": "2026-05-14T00:35:49.637Z",
|
||||
"active_plan": "/home/emil/Desktop/Coding/AI/Randify.pro/.sisyphus/plans/blog-typography-fix.md",
|
||||
"started_at": "2026-05-14T10:23:17.171Z",
|
||||
"status": "active",
|
||||
"updated_at": "2026-05-14T10:25:36.103Z",
|
||||
"session_ids": [
|
||||
"ses_1de6ede59ffexUwt5C0sddEWwR"
|
||||
"ses_1da346c55ffe2yhgC2v7zqrilE"
|
||||
],
|
||||
"session_origins": {
|
||||
"ses_1de6ede59ffexUwt5C0sddEWwR": "direct"
|
||||
"ses_1da346c55ffe2yhgC2v7zqrilE": "direct"
|
||||
},
|
||||
"plan_name": "seo-blog-categories",
|
||||
"plan_name": "blog-typography-fix",
|
||||
"task_sessions": {
|
||||
"todo:1": {
|
||||
"task_key": "todo:1",
|
||||
"task_label": "1",
|
||||
"task_title": "test-post.md — extra 9th EN blog post (scope creep)",
|
||||
"session_id": "ses_1dc1d5043ffeFR7r3vy15aTFmv",
|
||||
"final-wave:f1": {
|
||||
"task_key": "final-wave:f1",
|
||||
"task_label": "F1",
|
||||
"task_title": "Build + Visual Check",
|
||||
"session_id": "ses_1d9fc2935ffesVSRCGlGP4wnCU",
|
||||
"agent": "Sisyphus-Junior",
|
||||
"category": "deep",
|
||||
"started_at": "2026-05-13T23:36:41.704Z",
|
||||
"ended_at": "2026-05-14T00:33:08.868Z",
|
||||
"elapsed_ms": 3387164,
|
||||
"category": "quick",
|
||||
"updated_at": "2026-05-14T10:25:36.103Z",
|
||||
"started_at": "2026-05-14T10:24:51.820Z",
|
||||
"status": "completed",
|
||||
"updated_at": "2026-05-14T00:33:08.868Z"
|
||||
},
|
||||
"todo:7": {
|
||||
"task_key": "todo:7",
|
||||
"task_label": "7",
|
||||
"task_title": "Update generatorSchema.ts with category field",
|
||||
"session_id": "ses_1dc1d7618ffeRpk0nnIfvvISQH",
|
||||
"agent": "Sisyphus-Junior",
|
||||
"category": "unspecified-high",
|
||||
"started_at": "2026-05-13T23:42:40.563Z",
|
||||
"status": "completed",
|
||||
"updated_at": "2026-05-14T00:34:58.498Z",
|
||||
"ended_at": "2026-05-14T00:34:58.498Z",
|
||||
"elapsed_ms": 3137935
|
||||
"ended_at": "2026-05-14T10:25:36.103Z",
|
||||
"elapsed_ms": 44283
|
||||
}
|
||||
},
|
||||
"agent": "atlas",
|
||||
"ended_at": "2026-05-14T00:35:49.637Z",
|
||||
"elapsed_ms": 3823292
|
||||
"agent": "atlas"
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
- Task 6 (EN Random Team Picker): Replaced placeholder body with ~1150 words. Used exact h2 headings as specified. Mentioned Team Generator and List Shuffler naturally. Included practical examples: captain-picking bias, Elo-based balancing, youth sports fairness, workshop icebreakers, round-robin scheduling. Verified removal of placeholder phrases via grep. Frontmatter preserved exactly.
|
||||
- Task 7 (EN Color Theory Palettes): Replaced placeholder body with 1362-word article. Frontmatter preserved. Included required h2 headings, Randify generator mentions, WCAG contrast ratios, hex code examples, and actionable checklist. No placeholder phrases remain.
|
||||
- Task 8 (EN UUID vs Sequential IDs): Replaced placeholder body with 1310-word article. Frontmatter preserved exactly. Used required h2 headings: What Is a UUID?, Storage and Performance, Collision Probability, Distributed Systems, When to Use What. Included h3 sub-headings: Mitigating Index Bloat, Alternatives Worth Knowing, Quick Decision Checklist. Mentioned UUID v4, ULID, Twitter Snowflake, and MongoDB ObjectId with technical explanations. Referenced Randify's UUID Generator and Hash Generator naturally. Covered practical examples: UUID string length (36 chars), PostgreSQL/MySQL index bloat (30-50% larger), Birthday Problem math (2.7 quintillion square root), Snowflake 64-bit layout, MongoDB ObjectId 12-byte structure. SEO keywords "UUID vs sequential ID", "when to use UUID", and "database ID strategy" placed in first paragraph and h2 headings. Ended with actionable decision checklist. Verified removal of placeholder phrases via grep. No AI-sounding filler used.
|
||||
- Task 10 (RU Strong Passwords): Replaced placeholder body with 859 words of real Russian content. Frontmatter preserved exactly. Used required h2 headings: Почему длина важнее сложности, Парольные фразы vs пароли, Менеджеры паролей, Двухфакторная аутентификация, Практический чеклист. Referenced NIST SP 800-63B guidelines. Mentioned Randify generators: Генератор паролей, Генератор хешей. Included Russian SEO keywords: надёжные пароли, безопасность паролей, как создать надёжный пароль. Adapted for Russian audience: mentioned Bitwarden/KeePassXC, Russian services supporting 2FA (Яндекс, VK, Сбербанк, Тинькофф). Verified removal of placeholder phrases via grep.
|
||||
- Task 12 (RU Psychology of Randomness): Replaced placeholder body with ~970 words of real Russian content. Frontmatter preserved exactly. Used required h2 headings: Мозг ищет закономерности, Ошибка горячей руки, Ошибка игрока, Как быть по-настоящему случайным, Инструменты для честности. Referenced classic works of Kahneman and Tversky, the representativeness heuristic, coin-flip randomness generation experiment, basketball hot-hand studies, and roulette gambler's fallacy. Mentioned Randify generators: Подбрасывание монеты, Да/Нет, Случайное число. Included Russian SEO keywords: психология случайности, человеческие предубеждения в восприятии случайности, ошибка игрока. Adapted for Russian audience with local context (friends choosing a movie, sports betting, Sberbank/Tinkoff not mentioned here but general audience adaptation). Verified removal of placeholder phrases via grep and confirmed word count via wc.
|
||||
- Task 11 (RU Dice Notation Guide): Replaced placeholder body with 1087-word article. Frontmatter preserved exactly. Used required h2 headings: Базовая нотация, Типы кубиков, Модификаторы и преимущество, Взрывающиеся кубики, Цифровые генераторы кубиков. Covered d4 through d20 and percentile dice (d100). Explained advantage/disadvantage (D&D 5e) and exploding dice mechanic. Mentioned Russian RPGs "Тайна" and "Эра Водолея". Referenced Randify Генератор кубиков naturally with internal link. Included Russian SEO keywords: нотация кубиков, кубики для D&D, ролевые игры кубики. Verified placeholder removal via grep (exit code 1 for both phrases). No external links. No AI-sounding filler.
|
||||
- Task 9 (RU Cryptographically Secure Randomness): Replaced placeholder body with 938 words of real Russian content. Frontmatter preserved exactly. Used required h2 headings: Что такое криптографически стойкая случайность, Почему Math.random недостаточно, Где это важно, Практический чеклист, Выводы. Included practical examples: crypto.getRandomValues(), /dev/urandom, Python secrets module, Go crypto/rand, Linux getrandom() syscall. Mentioned Russian regulatory context: FSTEC/FSB certification for state systems. Referenced Randify generators: Генератор паролей, Генератор хешей, Генератор UUID. SEO keywords placed in h2 and first paragraph. Verified removal of placeholder phrases via grep. No AI-sounding filler used.
|
||||
- Task 14 (RU Random Team Selection): Replaced placeholder body with 997 words of real Russian content. Frontmatter preserved exactly. Used required h2 headings: Устранение предвзятости, Случайные vs сбалансированные команды, Спортивные лиги, Корпоративные мероприятия, Инструменты и советы. Included h3 sub-headings: Проблема капитанского выбора, Прозрачность создает доверие, Когда работает чистая случайность, Балансировка по уровню навыков, Гибридный подход, Честность в детском спорте, Круговая система турниров, Ледоколы для тренингов, Кросс-функциональные проекты, Использование генератора команд, Объяснение процесса участникам. Mentioned Randify generators: Генератор команд, Перемешивание списка. Included practical examples: captain-picking bias in Russian school context, skill-based tier balancing, youth sports fairness (coaches stacking rosters), workshop icebreakers with cross-department mixing, round-robin scheduling for tournaments. Russian SEO keywords placed: случайный выбор команд, честное формирование команд, генератор команд. Adapted for Russian audience: mentioned schoolyard captain picking, youth sports sections, corporate trainings. Verified removal of placeholder phrases via grep (no matches). Ended with actionable checklist.
|
||||
- Task 15 (RU Color Theory Guide): Replaced placeholder body with 1166 words of real Russian content. Frontmatter preserved exactly. Used required h2 headings: Цветовой круг, Комплементарные цвета, Аналоговые и триадные схемы, Доступность и контраст, Использование генераторов палитр. Included h3 sub-headings for analogous and triadic sections. Mentioned Randify generators: Генератор цветов, Генератор градиентов, Генератор палитр. Included Russian SEO keywords: теория цвета палитры, гармоничные цветовые палитры, генератор цветовой палитры. Provided practical examples: RGB/CMYK basics, hex codes (#534AB7, #1E3A8A, #F97316, #9CA3AF, #4B5563), WCAG contrast ratios (4.5:1, 3:1, 7:1), color blindness testing (deuteranopia/protanopia), 60-30-10 rule. Adapted for Russian audience with local terminology and phrasing, not a verbatim translation. Verified removal of placeholder phrases via grep (no matches for "stay tuned" or "this article will explore"). Ended with actionable checklist. No AI-sounding filler. No external links.
|
||||
- Task 16 (RU UUID vs Sequential IDs): Replaced placeholder body with 1121 words of real Russian content. Frontmatter preserved exactly. Used required h2 headings: Что такое UUID?, Хранение и производительность, Вероятность коллизии, Распределённые системы, Когда что использовать. Included h3 sub-headings: Как уменьшить влияние на индексы, Альтернативы, которые стоит знать, Быстрый чек-лист для выбора. Mentioned UUID v4, ULID, Twitter Snowflake IDs, MongoDB ObjectId with technical explanations. Referenced Randify generators: Генератор UUID, Генератор хешей. Included Russian SEO keywords: «UUID vs последовательный ID», «когда использовать UUID», «стратегия идентификаторов базы данных». Provided practical examples: UUID string length (36 chars), PostgreSQL/MySQL index bloat (30-50% larger), Birthday Problem math (2.7 quintillion square root, 85 years at 1M/sec), Snowflake 64-bit layout, MongoDB ObjectId 12-byte structure. Adapted for Russian audience with local terminology and phrasing, not a verbatim translation. Verified removal of placeholder phrases via grep (no matches for "stay tuned" or "this article will explore"). Ended with actionable decision checklist. No AI-sounding filler. No external links.
|
||||
- Task 13 (RU RNG in Gaming): Replaced placeholder body with 1093 words of real Russian content. Frontmatter preserved exactly. Used required h2 headings: Псевдослучайные и истинные генераторы, Сид и детерминизм, Лутбоксы и регулирование, Аудит честности, Доверие игроков. Included practical examples: Mersenne Twister, xorshift, LCG algorithms, 1999 Cigital poker seed vulnerability, /dev/urandom, CryptGenRandom, pity systems, China/EU/UK loot box regulation, 2023 Roskomnadzor discussions, Malta/Gibraltar licensing, eCOGRA/iTech Labs/GLI auditing, Chi-Square/Kolmogorov-Smirnov/diehard tests, provably fair crypto casinos. Mentioned Randify generators: Генератор кубиков, Лотерея, Колесо фортуны. Included Russian SEO keywords: RNG в играх, генератор случайных чисел в играх, честность в играх. Adapted for Russian audience with local context (Roskomnadzor, CIS studios). Verified removal of placeholder phrases via grep (exit code 1 for both). No external links. No AI-sounding filler. No em/en dashes.
|
||||
@@ -0,0 +1,122 @@
|
||||
# Plan: Add Typography Styles to Blog Posts
|
||||
|
||||
## TL;DR
|
||||
|
||||
> The `@tailwindcss/typography` plugin is installed but not registered in the CSS. Add `@plugin "@tailwindcss/typography";` to `BaseLayout.astro`, rebuild, verify that blog posts render with proper typography, and commit.
|
||||
>
|
||||
> **Deliverables**: 1 modified file (`BaseLayout.astro`), build passes, prettier blog rendering
|
||||
> **Estimated Effort**: Quick
|
||||
> **Parallel Execution**: NO — single task
|
||||
|
||||
---
|
||||
|
||||
## Context
|
||||
|
||||
### Problem Discovered
|
||||
After filling all 16 blog posts with real content, the user noticed that posts render as plain text without formatting. Investigation revealed:
|
||||
|
||||
- `BlogLayout.astro` already applies `prose prose-invert prose-zinc` to the content container
|
||||
- The `@tailwindcss/typography` plugin was **not installed** (hence `prose` did nothing)
|
||||
- Plugin was installed via `npm install -D @tailwindcss/typography` during diagnosis
|
||||
- The plugin still needs to be **registered in the CSS** with `@plugin "@tailwindcss/typography";`
|
||||
|
||||
### Root Cause
|
||||
In Tailwind CSS v4, plugins must be explicitly loaded in the CSS file. The `@import "tailwindcss";` in `BaseLayout.astro` is not enough — the typography plugin requires `@plugin "@tailwindcss/typography";`.
|
||||
|
||||
---
|
||||
|
||||
## Work Objectives
|
||||
|
||||
### Core Objective
|
||||
Register the typography plugin so that the `prose` class in `BlogLayout.astro` actually styles rendered Markdown.
|
||||
|
||||
### Concrete Deliverables
|
||||
- `src/layouts/BaseLayout.astro` — add `@plugin "@tailwindcss/typography";`
|
||||
- Build passes with 0 errors
|
||||
- Blog posts display styled headings, lists, code blocks, and other Markdown elements
|
||||
|
||||
### Definition of Done
|
||||
- [ ] `npm run build` produces 92+ pages with 0 errors
|
||||
- [ ] A rendered blog post shows styled `h2`, `ul`, `code`, and `strong` elements (not plain browser defaults)
|
||||
|
||||
### Must Have
|
||||
- Plugin registered correctly for Tailwind v4 syntax (`@plugin`)
|
||||
- No visual regressions on non-blog pages
|
||||
|
||||
### Must NOT Have
|
||||
- Do NOT install additional unrelated packages
|
||||
- Do NOT change existing prose classes in `BlogLayout.astro`
|
||||
|
||||
---
|
||||
|
||||
## Execution Strategy
|
||||
|
||||
### Task 1: Register Typography Plugin
|
||||
|
||||
- [x] 1. Register `@tailwindcss/typography` plugin
|
||||
|
||||
**What to do**:
|
||||
- Edit `src/layouts/BaseLayout.astro`
|
||||
- Find the `<style is:global>` block with `@import "tailwindcss";`
|
||||
- Add `@plugin "@tailwindcss/typography";` immediately after the `@import` line
|
||||
- The result should look like:
|
||||
```css
|
||||
@import "tailwindcss";
|
||||
@plugin "@tailwindcss/typography";
|
||||
```
|
||||
|
||||
**Recommended Agent Profile**:
|
||||
- **Category**: `quick`
|
||||
- **Skills**: []
|
||||
|
||||
**Parallelization**:
|
||||
- **Can Run In Parallel**: NO
|
||||
- **Blocked By**: None
|
||||
|
||||
**Acceptance Criteria**:
|
||||
- [ ] `BaseLayout.astro` contains `@plugin "@tailwindcss/typography";`
|
||||
|
||||
**QA Scenarios**:
|
||||
```
|
||||
Scenario: Plugin registered
|
||||
Tool: Bash (grep)
|
||||
Steps:
|
||||
1. grep '@plugin "@tailwindcss/typography"' src/layouts/BaseLayout.astro
|
||||
Expected Result: Match found
|
||||
```
|
||||
|
||||
**Commit**: NO (group with verification)
|
||||
|
||||
---
|
||||
|
||||
## Final Verification Wave
|
||||
|
||||
- [x] F1. Build + Visual Check
|
||||
Run `npm run build`. Must pass with 0 errors and 92+ pages. Then verify a sample blog post renders with styled typography (headings are larger/bolder, lists have bullets, inline code is monospaced).
|
||||
Output: `Build [PASS/FAIL] | Visual [PASS/FAIL]`
|
||||
|
||||
- [x] F2. Git Commit
|
||||
Stage `src/layouts/BaseLayout.astro` and `package.json`/`package-lock.json`. Commit with message: `fix(blog): register @tailwindcss/typography for prose styling`
|
||||
Do NOT push to remote.
|
||||
|
||||
---
|
||||
|
||||
## Commit Strategy
|
||||
|
||||
- **F2**: `fix(blog): register @tailwindcss/typography for prose styling`
|
||||
|
||||
---
|
||||
|
||||
## Success Criteria
|
||||
|
||||
### Verification Commands
|
||||
```bash
|
||||
npm run build # Expected: 92+ pages, 0 errors
|
||||
grep '@plugin "@tailwindcss/typography"' src/layouts/BaseLayout.astro # Expected: match
|
||||
```
|
||||
|
||||
### Final Checklist
|
||||
- [ ] Plugin registered in CSS
|
||||
- [ ] Build passes
|
||||
- [ ] Blog posts render with styled typography
|
||||
- [ ] Changes committed (not pushed)
|
||||
@@ -0,0 +1,528 @@
|
||||
# Plan: Fill Blog Posts with Real Content
|
||||
|
||||
## TL;DR
|
||||
|
||||
> Replace placeholder text in 16 bilingual blog posts (8 EN + 8 RU) with real, research-backed, SEO-optimized articles about randomness, security, gaming, design, and decision-making topics. Each article 800–1500 words with h2/h3 structure, practical examples, and natural references to related Randify generators.
|
||||
>
|
||||
> **Deliverables**: 16 updated `.md` files with real content bodies, preserved frontmatter
|
||||
> **Estimated Effort**: Medium
|
||||
> **Parallel Execution**: YES — 4 waves of 4 parallel tasks each
|
||||
> **Critical Path**: EN Wave 1 → EN Wave 2 → RU Wave 1 → RU Wave 2 → Build Verify
|
||||
|
||||
---
|
||||
|
||||
## Context
|
||||
|
||||
### Original Request
|
||||
"Отлично! Теперь наполни блоги реалным содержимым. проведи нужные исследования и сделай качественные блоги на эти тематики"
|
||||
|
||||
### Current State
|
||||
- All 16 blog post templates exist with correct frontmatter (title, description, dates, tags, relatedGenerators)
|
||||
- Body contains placeholder text ("This article will explore...", "Stay tuned...")
|
||||
- Files located in `src/content/blog/en/` (8 files) and `src/content/blog/ru/` (8 files)
|
||||
- RU filenames differ slightly from EN slugs:
|
||||
- EN `dice-notation-explained.md` → RU `dice-notation-guide.md`
|
||||
- EN `random-team-picker.md` → RU `random-team-selection.md`
|
||||
- EN `color-theory-palettes.md` → RU `color-theory-guide.md`
|
||||
- Blog is already wired into Astro Content Collections; body text is the only missing piece
|
||||
|
||||
---
|
||||
|
||||
## Work Objectives
|
||||
|
||||
### Core Objective
|
||||
Replace all placeholder body text with real, high-quality articles that provide genuine value to readers and improve SEO for Yandex РСЯ moderation.
|
||||
|
||||
### Concrete Deliverables
|
||||
- 8 EN blog posts with real content (800–1500 words each)
|
||||
- 8 RU blog posts with real content (800–1500 words each), adapted (not translated verbatim) for Russian audience
|
||||
- All frontmatter preserved exactly as-is
|
||||
- Build passes (`npm run build`) with 0 errors
|
||||
|
||||
### Definition of Done
|
||||
- [ ] All 16 `.md` files contain real content, no placeholder text remains
|
||||
- [ ] `npm run build` produces 92+ pages with 0 errors
|
||||
- [ ] Content is factually accurate, well-structured with h2/h3 headings
|
||||
- [ ] Each article naturally references its related Randify generators
|
||||
|
||||
### Must Have
|
||||
- Real, substantive content in every post (no filler, no Lorem ipsum)
|
||||
- SEO-optimized: keywords in h2 headings and first paragraph
|
||||
- Practical examples, checklists, or actionable advice in each article
|
||||
- h2/h3 structure for readability
|
||||
- Natural integration of related generator names
|
||||
|
||||
### Must NOT Have (Guardrails)
|
||||
- Do NOT modify frontmatter (preserve exactly)
|
||||
- Do NOT change filenames or slugs
|
||||
- Do NOT add external links (keep readers on site)
|
||||
- Do NOT use AI-sounding filler ("in conclusion", "it's important to note", excessive adverbs)
|
||||
- Do NOT push to main without user approval
|
||||
|
||||
---
|
||||
|
||||
## Verification Strategy
|
||||
|
||||
### Test Decision
|
||||
- **Infrastructure exists**: NO (no test runner configured)
|
||||
- **Automated tests**: None
|
||||
- **Agent-Executed QA**: Build verification + content spot-checks
|
||||
|
||||
### QA Policy
|
||||
Every wave includes agent-executed verification:
|
||||
- **Build**: `npm run build` must pass
|
||||
- **Content check**: Read random sample of posts to verify no placeholder text remains
|
||||
|
||||
---
|
||||
|
||||
## Execution Strategy
|
||||
|
||||
### Parallel Execution Waves
|
||||
|
||||
```
|
||||
Wave 1 (Start Immediately — 4 EN posts):
|
||||
├── Task 1: EN — Cryptographically Secure Randomness
|
||||
├── Task 2: EN — Strong Passwords
|
||||
├── Task 3: EN — Dice Notation
|
||||
└── Task 4: EN — Psychology of Randomness
|
||||
|
||||
Wave 2 (After Wave 1 — 4 EN posts):
|
||||
├── Task 5: EN — RNG in Gaming
|
||||
├── Task 6: EN — Random Team Picker
|
||||
├── Task 7: EN — Color Theory Palettes
|
||||
└── Task 8: EN — UUID vs Sequential IDs
|
||||
|
||||
Wave 3 (After Wave 2 — 4 RU posts):
|
||||
├── Task 9: RU — Криптографически стойкая случайность
|
||||
├── Task 10: RU — Надёжные пароли
|
||||
├── Task 11: RU — Нотация кубиков
|
||||
└── Task 12: RU — Психология случайности
|
||||
|
||||
Wave 4 (After Wave 3 — 4 RU posts):
|
||||
├── Task 13: RU — RNG в играх
|
||||
├── Task 14: RU — Случайный выбор команд
|
||||
├── Task 15: RU — Теория цвета
|
||||
└── Task 16: RU — UUID vs последовательные ID
|
||||
|
||||
Wave FINAL (After ALL tasks):
|
||||
├── Task F1: Build verification + content spot-check
|
||||
└── Task F2: Git commit (do NOT push)
|
||||
```
|
||||
|
||||
### Dependency Matrix
|
||||
- **Waves 1 & 2**: Independent (all EN posts can theoretically run in parallel, but 8 parallel tasks is too many)
|
||||
- **Wave 3**: Depends on Wave 2 (RU writers should see EN content for reference, but not strictly blocked)
|
||||
- **Wave 4**: Depends on Wave 3
|
||||
- **FINAL**: Depends on Wave 4
|
||||
|
||||
---
|
||||
|
||||
## TODOs
|
||||
|
||||
- [x] 1. EN — What is Cryptographically Secure Randomness
|
||||
|
||||
**What to do**:
|
||||
- Read `src/content/blog/en/what-is-cryptographically-secure-randomness.md`
|
||||
- Replace placeholder body with real article (800–1500 words)
|
||||
- Structure: h2 headings (What Is..., Why Math.random Is Not Enough, Where It Matters, Practical Checklist, Conclusion)
|
||||
- Include practical examples: `crypto.getRandomValues()`, `/dev/urandom`, `secrets` module
|
||||
- Mention related generators naturally: Password Generator, Hash Generator, UUID Generator
|
||||
- SEO keywords: "cryptographically secure randomness", "CSPRNG", "secure random number generator"
|
||||
|
||||
**Must NOT do**:
|
||||
- Do NOT modify frontmatter
|
||||
- Do NOT change filename
|
||||
|
||||
**Recommended Agent Profile**:
|
||||
- **Category**: `writing`
|
||||
- **Skills**: []
|
||||
- Reason: Pure content writing task
|
||||
|
||||
**Parallelization**:
|
||||
- **Can Run In Parallel**: YES
|
||||
- **Parallel Group**: Wave 1 (Tasks 1–4)
|
||||
- **Blocks**: None
|
||||
- **Blocked By**: None
|
||||
|
||||
**References**:
|
||||
- `src/content/blog/en/what-is-cryptographically-secure-randomness.md` — target file
|
||||
- `src/content/blog/en/how-to-create-strong-passwords.md` — related post for cross-linking context
|
||||
|
||||
**Acceptance Criteria**:
|
||||
- [ ] File contains real content with h2/h3 headings
|
||||
- [ ] No placeholder text ("Stay tuned", "This article will explore") remains
|
||||
- [ ] Word count ≥ 800
|
||||
|
||||
**QA Scenarios**:
|
||||
```
|
||||
Scenario: Content replaced successfully
|
||||
Tool: Bash (grep)
|
||||
Steps:
|
||||
1. grep -i "stay tuned" src/content/blog/en/what-is-cryptographically-secure-randomness.md
|
||||
Expected Result: No matches (exit code 1)
|
||||
Evidence: terminal output
|
||||
```
|
||||
|
||||
**Commit**: NO (group with final wave)
|
||||
|
||||
- [x] 2. EN — How to Create Strong Passwords
|
||||
|
||||
**What to do**:
|
||||
- Read `src/content/blog/en/how-to-create-strong-passwords.md`
|
||||
- Replace placeholder body with real article (800–1500 words)
|
||||
- Structure: h2 headings (Why Length Beats Complexity, Passphrases vs Passwords, Password Managers, Two-Factor Authentication, Practical Checklist)
|
||||
- Include NIST guidelines reference
|
||||
- Mention related generators: Password Generator, Hash Generator
|
||||
- SEO keywords: "strong passwords", "password security", "create strong password"
|
||||
|
||||
**Must NOT do**:
|
||||
- Do NOT modify frontmatter
|
||||
|
||||
**Recommended Agent Profile**:
|
||||
- **Category**: `writing`
|
||||
|
||||
**Parallelization**:
|
||||
- **Can Run In Parallel**: YES
|
||||
- **Parallel Group**: Wave 1
|
||||
|
||||
**QA Scenarios**:
|
||||
```
|
||||
Scenario: No placeholder text
|
||||
Tool: Bash (grep)
|
||||
Steps:
|
||||
1. grep -i "stay tuned" src/content/blog/en/how-to-create-strong-passwords.md
|
||||
Expected Result: No matches
|
||||
```
|
||||
|
||||
**Commit**: NO
|
||||
|
||||
- [x] 3. EN — Dice Notation Explained
|
||||
|
||||
**What to do**:
|
||||
- Read `src/content/blog/en/dice-notation-explained.md`
|
||||
- Replace placeholder with real article (800–1500 words)
|
||||
- Structure: h2 headings (Basic Notation, Common Dice Types, Modifiers and Advantage, Exploding Dice, Digital Dice Rollers)
|
||||
- Explain d4, d6, d8, d10, d12, d20, percentile dice
|
||||
- Cover advantage/disadvantage (D&D 5e), exploding dice mechanic
|
||||
- Mention related generator: Dice Roller
|
||||
- SEO keywords: "dice notation", "dnd dice", "exploding dice", "rpg dice"
|
||||
|
||||
**Must NOT do**:
|
||||
- Do NOT modify frontmatter
|
||||
|
||||
**Recommended Agent Profile**:
|
||||
- **Category**: `writing`
|
||||
|
||||
**Parallelization**:
|
||||
- **Can Run In Parallel**: YES
|
||||
- **Parallel Group**: Wave 1
|
||||
|
||||
**Commit**: NO
|
||||
|
||||
- [x] 4. EN — Psychology of Randomness
|
||||
|
||||
**What to do**:
|
||||
- Read `src/content/blog/en/psychology-of-randomness.md`
|
||||
- Replace placeholder with real article (800–1500 words)
|
||||
- Structure: h2 headings (The Pattern-Seeking Brain, The Hot-Hand Fallacy, Gambler's Fallacy, How to Be Truly Random, Tools for Fairness)
|
||||
- Reference real experiments (e.g., Tversky & Kahneman)
|
||||
- Mention related generators: Coin Flip, Yes/No, Random Number
|
||||
- SEO keywords: "psychology of randomness", "human randomness bias", "gambler's fallacy"
|
||||
|
||||
**Must NOT do**:
|
||||
- Do NOT modify frontmatter
|
||||
|
||||
**Recommended Agent Profile**:
|
||||
- **Category**: `writing`
|
||||
|
||||
**Parallelization**:
|
||||
- **Can Run In Parallel**: YES
|
||||
- **Parallel Group**: Wave 1
|
||||
|
||||
**Commit**: NO
|
||||
|
||||
- [x] 5. EN — RNG in Gaming
|
||||
|
||||
**What to do**:
|
||||
- Read `src/content/blog/en/rng-in-gaming.md`
|
||||
- Replace placeholder with real article (800–1500 words)
|
||||
- Structure: h2 headings (PRNG vs True RNG, Seeds and Determinism, Loot Boxes and Regulation, Fairness Auditing, Player Trust)
|
||||
- Mention related generators: Dice Roller, Lottery, Wheel Spinner
|
||||
- SEO keywords: "RNG in gaming", "random number generator games", "fairness in gaming"
|
||||
|
||||
**Must NOT do**:
|
||||
- Do NOT modify frontmatter
|
||||
|
||||
**Recommended Agent Profile**:
|
||||
- **Category**: `writing`
|
||||
|
||||
**Parallelization**:
|
||||
- **Can Run In Parallel**: YES
|
||||
- **Parallel Group**: Wave 2
|
||||
|
||||
**Commit**: NO
|
||||
|
||||
- [x] 6. EN — Random Team Picker
|
||||
|
||||
**What to do**:
|
||||
- Read `src/content/blog/en/random-team-picker.md`
|
||||
- Replace placeholder with real article (800–1500 words)
|
||||
- Structure: h2 headings (Eliminating Bias, Random vs Balanced Teams, Sports Leagues, Corporate Workshops, Tools and Tips)
|
||||
- Mention related generators: Team Generator, List Shuffler
|
||||
- SEO keywords: "random team picker", "fair team selection", "team generator"
|
||||
|
||||
**Must NOT do**:
|
||||
- Do NOT modify frontmatter
|
||||
|
||||
**Recommended Agent Profile**:
|
||||
- **Category**: `writing`
|
||||
|
||||
**Parallelization**:
|
||||
- **Can Run In Parallel**: YES
|
||||
- **Parallel Group**: Wave 2
|
||||
|
||||
**Commit**: NO
|
||||
|
||||
- [x] 7. EN — Color Theory Palettes
|
||||
|
||||
**What to do**:
|
||||
- Read `src/content/blog/en/color-theory-palettes.md`
|
||||
- Replace placeholder with real article (800–1500 words)
|
||||
- Structure: h2 headings (The Color Wheel, Complementary Colors, Analogous and Triadic, Accessibility and Contrast, Using Palette Generators)
|
||||
- Mention related generators: Color Generator, Gradient Generator, Palette Generator
|
||||
- SEO keywords: "color theory palettes", "harmonious color palettes", "color palette generator"
|
||||
|
||||
**Must NOT do**:
|
||||
- Do NOT modify frontmatter
|
||||
|
||||
**Recommended Agent Profile**:
|
||||
- **Category**: `writing`
|
||||
|
||||
**Parallelization**:
|
||||
- **Can Run In Parallel**: YES
|
||||
- **Parallel Group**: Wave 2
|
||||
|
||||
**Commit**: NO
|
||||
|
||||
- [x] 8. EN — UUID vs Sequential IDs
|
||||
|
||||
**What to do**:
|
||||
- Read `src/content/blog/en/uuid-vs-sequential-ids.md`
|
||||
- Replace placeholder with real article (800–1500 words)
|
||||
- Structure: h2 headings (What Is a UUID?, Storage and Performance, Collision Probability, Distributed Systems, When to Use What)
|
||||
- Mention UUID v4, ULID, Snowflake IDs
|
||||
- Mention related generators: UUID Generator, Hash Generator
|
||||
- SEO keywords: "UUID vs sequential ID", "when to use UUID", "database ID strategy"
|
||||
|
||||
**Must NOT do**:
|
||||
- Do NOT modify frontmatter
|
||||
|
||||
**Recommended Agent Profile**:
|
||||
- **Category**: `writing`
|
||||
|
||||
**Parallelization**:
|
||||
- **Can Run In Parallel**: YES
|
||||
- **Parallel Group**: Wave 2
|
||||
|
||||
**Commit**: NO
|
||||
|
||||
- [x] 9. RU — Криптографически стойкая случайность
|
||||
|
||||
**What to do**:
|
||||
- Read `src/content/blog/ru/what-is-cryptographically-secure-randomness.md`
|
||||
- Replace placeholder with real article (800–1500 words) in Russian
|
||||
- Adapt content for Russian audience (not verbatim translation of EN)
|
||||
- Structure: same topics as EN but localized
|
||||
- Mention related generators naturally
|
||||
- SEO keywords in Russian: "криптографически стойкая случайность", "CSPRNG", "безопасная генерация случайных чисел"
|
||||
|
||||
**Must NOT do**:
|
||||
- Do NOT modify frontmatter
|
||||
|
||||
**Recommended Agent Profile**:
|
||||
- **Category**: `writing`
|
||||
|
||||
**Parallelization**:
|
||||
- **Can Run In Parallel**: YES
|
||||
- **Parallel Group**: Wave 3
|
||||
|
||||
**Commit**: NO
|
||||
|
||||
- [x] 10. RU — Надёжные пароли
|
||||
|
||||
**What to do**:
|
||||
- Read `src/content/blog/ru/how-to-create-strong-passwords.md`
|
||||
- Replace placeholder with real article (800–1500 words) in Russian
|
||||
- Adapt for Russian audience
|
||||
- Mention related generators
|
||||
|
||||
**Must NOT do**:
|
||||
- Do NOT modify frontmatter
|
||||
|
||||
**Recommended Agent Profile**:
|
||||
- **Category**: `writing`
|
||||
|
||||
**Parallelization**:
|
||||
- **Can Run In Parallel**: YES
|
||||
- **Parallel Group**: Wave 3
|
||||
|
||||
**Commit**: NO
|
||||
|
||||
- [x] 11. RU — Нотация кубиков
|
||||
|
||||
**What to do**:
|
||||
- Read `src/content/blog/ru/dice-notation-guide.md`
|
||||
- Replace placeholder with real article (800–1500 words) in Russian
|
||||
- Adapt for Russian RPG community
|
||||
- Mention related generator: Dice Roller
|
||||
|
||||
**Must NOT do**:
|
||||
- Do NOT modify frontmatter
|
||||
|
||||
**Recommended Agent Profile**:
|
||||
- **Category**: `writing`
|
||||
|
||||
**Parallelization**:
|
||||
- **Can Run In Parallel**: YES
|
||||
- **Parallel Group**: Wave 3
|
||||
|
||||
**Commit**: NO
|
||||
|
||||
- [x] 12. RU — Психология случайности
|
||||
|
||||
**What to do**:
|
||||
- Read `src/content/blog/ru/psychology-of-randomness.md`
|
||||
- Replace placeholder with real article (800–1500 words) in Russian
|
||||
- Adapt for Russian audience
|
||||
- Mention related generators
|
||||
|
||||
**Must NOT do**:
|
||||
- Do NOT modify frontmatter
|
||||
|
||||
**Recommended Agent Profile**:
|
||||
- **Category**: `writing`
|
||||
|
||||
**Parallelization**:
|
||||
- **Can Run In Parallel**: YES
|
||||
- **Parallel Group**: Wave 3
|
||||
|
||||
**Commit**: NO
|
||||
|
||||
- [x] 13. RU — RNG в играх
|
||||
|
||||
**What to do**:
|
||||
- Read `src/content/blog/ru/rng-in-gaming.md`
|
||||
- Replace placeholder with real article (800–1500 words) in Russian
|
||||
- Adapt for Russian audience
|
||||
- Mention related generators
|
||||
|
||||
**Must NOT do**:
|
||||
- Do NOT modify frontmatter
|
||||
|
||||
**Recommended Agent Profile**:
|
||||
- **Category**: `writing`
|
||||
|
||||
**Parallelization**:
|
||||
- **Can Run In Parallel**: YES
|
||||
- **Parallel Group**: Wave 4
|
||||
|
||||
**Commit**: NO
|
||||
|
||||
- [x] 14. RU — Случайный выбор команд
|
||||
|
||||
**What to do**:
|
||||
- Read `src/content/blog/ru/random-team-selection.md`
|
||||
- Replace placeholder with real article (800–1500 words) in Russian
|
||||
- Adapt for Russian audience
|
||||
- Mention related generators
|
||||
|
||||
**Must NOT do**:
|
||||
- Do NOT modify frontmatter
|
||||
|
||||
**Recommended Agent Profile**:
|
||||
- **Category**: `writing`
|
||||
|
||||
**Parallelization**:
|
||||
- **Can Run In Parallel**: YES
|
||||
- **Parallel Group**: Wave 4
|
||||
|
||||
**Commit**: NO
|
||||
|
||||
- [x] 15. RU — Теория цвета
|
||||
|
||||
**What to do**:
|
||||
- Read `src/content/blog/ru/color-theory-guide.md`
|
||||
- Replace placeholder with real article (800–1500 words) in Russian
|
||||
- Adapt for Russian audience
|
||||
- Mention related generators
|
||||
|
||||
**Must NOT do**:
|
||||
- Do NOT modify frontmatter
|
||||
|
||||
**Recommended Agent Profile**:
|
||||
- **Category**: `writing`
|
||||
|
||||
**Parallelization**:
|
||||
- **Can Run In Parallel**: YES
|
||||
- **Parallel Group**: Wave 4
|
||||
|
||||
**Commit**: NO
|
||||
|
||||
- [x] 16. RU — UUID vs последовательные ID
|
||||
|
||||
**What to do**:
|
||||
- Read `src/content/blog/ru/uuid-vs-sequential-ids.md`
|
||||
- Replace placeholder with real article (800–1500 words) in Russian
|
||||
- Adapt for Russian audience
|
||||
- Mention related generators
|
||||
|
||||
**Must NOT do**:
|
||||
- Do NOT modify frontmatter
|
||||
|
||||
**Recommended Agent Profile**:
|
||||
- **Category**: `writing`
|
||||
|
||||
**Parallelization**:
|
||||
- **Can Run In Parallel**: YES
|
||||
- **Parallel Group**: Wave 4
|
||||
|
||||
**Commit**: NO
|
||||
|
||||
---
|
||||
|
||||
## Final Verification Wave
|
||||
|
||||
- [x] F1. Build Verification + Content Spot-Check
|
||||
Run `npm run build`. Must produce 92+ pages with 0 errors. Read 4 random posts (2 EN + 2 RU) and verify:
|
||||
- No placeholder text remains
|
||||
- h2 headings present
|
||||
- Word count ≥ 800 per article
|
||||
Output: `Build [PASS/FAIL] | Content [PASS/FAIL]`
|
||||
|
||||
- [x] F2. Git Commit
|
||||
Stage all modified files. Commit with message: `content(blog): add real articles to all 16 posts`
|
||||
Do NOT push to remote.
|
||||
|
||||
---
|
||||
|
||||
## Commit Strategy
|
||||
|
||||
- **F2**: `content(blog): add real articles to all 16 posts` — all modified `.md` files
|
||||
|
||||
---
|
||||
|
||||
## Success Criteria
|
||||
|
||||
### Verification Commands
|
||||
```bash
|
||||
npm run build # Expected: 92+ pages, 0 errors
|
||||
grep -ri "stay tuned" src/content/blog/ # Expected: 0 matches
|
||||
grep -ri "this article will explore" src/content/blog/ # Expected: 0 matches
|
||||
```
|
||||
|
||||
### Final Checklist
|
||||
- [ ] All 16 posts contain real content
|
||||
- [ ] No placeholder text anywhere
|
||||
- [ ] Build passes
|
||||
- [ ] Frontmatter untouched
|
||||
- [ ] Changes committed (not pushed)
|
||||
@@ -1,7 +1,4 @@
|
||||
---
|
||||
interface Props {
|
||||
size?: "leaderboard" | "rectangle" | "tile";
|
||||
}
|
||||
---
|
||||
|
||||
<!-- admitad.banner: om86773ouc67a6d0fce8a804937a48 Читай-город -->
|
||||
|
||||
@@ -36,7 +36,6 @@ const webPageSchema = {
|
||||
inLanguage: lang,
|
||||
};
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const orgSchema = {
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Organization",
|
||||
|
||||
Reference in New Issue
Block a user