Commit Graph
86 Commits
Author SHA1 Message Date
emil aaf596a7bc fix(dm): OAuth redirect_uri, orange buttons, denser layout, hide lang switcher
- Fix OAuth redirect_uri mismatch in VK/Yandex callbacks (use PUBLIC_APP_URL)
- Make quick dice buttons and anchor nav links orange by default
- Densify DM Dashboard layout (smaller gaps, tighter spacing)
- Hide LanguageSwitcher/Blog/About/Privacy links on DM pages
- Increase notes textarea height for better usability
2026-05-15 01:42:09 +03:00
emil 5273518908 fix: SameSite=Lax for OAuth cookies to allow cross-site redirects 2026-05-15 01:28:24 +03:00
emil 2b57cba3bb fix: use process.env for runtime OAuth secrets 2026-05-15 01:25:27 +03:00
emil 4a13ba3272 fix deploy: copy dist directory instead of contents 2026-05-15 01:01:55 +03:00
emil d24f978d7e trigger deploy 2026-05-15 00:54:45 +03:00
emil 1a092e05c1 feat(dm): add dashboard with oauth, dice, initiative, open5e, notes 2026-05-14 23:48:36 +03:00
emil 7efe188a9a feat(ads): restore custom AdBanner with Admitad link 2026-05-14 16:21:50 +03:00
emil 87b35ba067 fix(ads): remove Admitad and Chitai-gorod banners completely 2026-05-14 15:55:37 +03:00
emil dfca40bb34 fix(lint): remove unused Props and eslint-disable directive 2026-05-14 15:38:04 +03:00
emil b22a68bf12 feat(ads): replace custom banner with Admitad leaderboard 2026-05-14 15:33:48 +03:00
emil 375455aac9 fix(ads): remove Yandex branding from banner, use neutral accent styling 2026-05-14 15:11:50 +03:00
emil 7c4241fd0e feat(ads): remove Yandex ads, move banner above generators 2026-05-14 15:07:17 +03:00
emil ae809cd119 feat(ads): replace Yandex Market with Admitad Читай-город affiliate link 2026-05-14 15:00:54 +03:00
emil f6f1ca05c9 feat(seo): add Admitad verification file 2026-05-14 14:48:07 +03:00
emil 2225044795 feat(seo): add Admitad verification meta tag 2026-05-14 14:43:06 +03:00
emil f3993a8315 feat(ads): replace YandexRTB placeholder with AdBanner referral banners 2026-05-14 14:10:22 +03:00
emil 11e7c9578a feat(ads): add Yandex Market referral link to banner rotation 2026-05-14 14:05:49 +03:00
emil 3917934d45 fix(blog): register @tailwindcss/typography for prose styling 2026-05-14 13:24:43 +03:00
emil 36a714d7e2 content(blog): add real articles to all 16 posts 2026-05-14 13:12:39 +03:00
emil db09f493e9 fix(blog): add generator links, sync dates to 2026-05-14
- Add back-to-generators link on EN and RU blog index pages
- Update all 16 blog post dates to 2026-05-14 with staggered times
- Sync EN and RU post dates so matching topics have identical timestamps
2026-05-14 10:32:53 +03:00
emil ea77828094 fix(blog): remove test-post.md, fix blog index slug links
- Delete extra test-post.md (scope creep from F4)
- Fix EN blog index: strip 'en/' prefix from post.id in links
- Fix RU blog index: strip 'ru/' prefix from post.id in links
- Fix schema URLs in both blog indices to use clean slugs
2026-05-14 03:28:08 +03:00
emil 25fd24d236 feat(blog+categories): Wave 3-5 — blog infrastructure, categories, content, navigation
- Install @astrojs/rss and setup content collections (blog + generators)
- Create BlogLayout with BlogPosting schema, article OG tags, prev/next nav
- Create blog post pages EN/RU ([slug].astro) with dynamic routing
- Create blog index pages EN/RU with post cards and filtering
- Create RSS feeds EN/RU with auto-discovery links
- Create generator category pages EN/RU (5 categories each)
- Add category navigation pills to homepage
- Create Breadcrumbs, RelatedGenerators, RelatedPosts components
- Add breadcrumbs to GeneratorLayout and BlogLayout
- Wire RelatedGenerators into GeneratorLayout
- Wire RelatedPosts into blog post pages
- Create 8 EN + 8 RU blog post templates with placeholder content
- Add blog link to LanguageSwitcher navigation
- Add category and blog translation keys
2026-05-14 03:19:06 +03:00
emil 23cf7058f0 feat(schema): Wave 2 — add generator categories, Organization schema, 404 pages
- Add category field to generatorSchema (required, 5 values)
- Assign categories to all 28 generators
- Add Organization JSON-LD schema to BaseLayout
- Create custom 404 pages (EN + RU)
- Add not-found and blog translation keys
2026-05-14 02:48:05 +03:00
emil 43ea9bc8f3 fix(seo): Wave 1 — fix critical SEO gaps
- Fix duplicate faq/ruFaq keys in dice.json, list.json, colors.json
- Add <main> landmarks to about/privacy pages (EN + RU)
- Move YandexRTB after <main> on homepage
- Add x-default hreflang to BaseLayout
- Configure sitemap i18n with hreflang alternates
- Add Open Graph + Twitter Card meta tags
- Create default OG image (1200x630)
2026-05-14 02:39:56 +03:00
emil 75038780d5 fix(lint): fix pre-existing unused vars in 5 generators
- EmojiGenerator: remove unused clickToCopyLabel, CopyFeedback import, forEach i
- FontPairGenerator: prefer-const loadedFonts, remove unused headingFamily, bodyFamily, copyIconSvg
- HashGenerator: remove unused copyIcon, checkIcon, copyLabel
- Magic8BallGenerator: remove unused getTypeLabel
- TeamsGenerator: remove unused teamPrefix, errAddTwo, errTeamsMin, errTeamsMax, errMorePlayers
2026-05-13 21:29:57 +03:00
emil 8a0e2b5e0f fix(lint): remove unused vars in refactored generators
- Fix 11 lint errors introduced during refactoring
- All remaining 16 errors are pre-existing in unrefactored files
2026-05-13 20:59:01 +03:00
emil 0081510914 Wave 6: refactor generators batch 4 to crypto random
- refactor(generators): migrate Teams, Time, Uuid, Weighted to crypto random
- refactor(generators): migrate WheelSpinner, YesNo to crypto random

All 28 generators now use cryptographically secure random via src/lib/client/random.ts
2026-05-13 20:41:27 +03:00
emil 8e0485c215 Wave 5: refactor generators batch 3 to crypto random
- refactor(generators): migrate Meal, Names, Number, Palette to crypto random
- refactor(generators): migrate Password, Rps, Shuffler to crypto random
2026-05-13 20:34:16 +03:00
emil 49269f209d Wave 4: refactor generators batch 2 to crypto random
- refactor(generators): migrate Gradient, Hash, Letter, List to crypto random
- refactor(generators): migrate Lorem, Lottery, Magic8Ball to crypto random
2026-05-13 20:25:39 +03:00
emil 3d94c99ff9 Wave 3: refactor generators batch 1 to crypto random
- refactor(generators): migrate Card, Coin, Color, Country to crypto random
- refactor(generators): migrate Date, Emoji, FontPair to crypto random
- refactor(dice): deduplicate DiceGenerator by importing from dice-engine.ts
2026-05-13 20:16:40 +03:00
emil e24a8b744d Wave 2: shared components + dice engine crypto migration
- feat(components): add ResultBox and CopyButton shared components
- refactor(dice): migrate dice engine to cryptographically secure random
2026-05-13 19:42:28 +03:00
emil 515c4a6168 Wave 1: add deps, crypto random utility, i18n helper, privacy fix, CI gates
- fix(deps): add zod and typescript to package.json
- feat(lib): add cryptographically secure random utility with TDD
- feat(lib): add client i18n helper with TDD
- fix(i18n): update privacy policy for crypto accuracy
- ci(deploy): add test and lint gates, fix SSH security
2026-05-13 19:34:42 +03:00
emil 2c400abb0a fix(magic8ball): enlarge triangle, shrink text further for long answers 2026-05-13 00:50:55 +03:00
emil 074adaa5e4 fix(magic8ball): lower text further and widen triangle for long answers 2026-05-13 00:45:27 +03:00
emil 40bf7dbacf fix(magic8ball): shrink text and widen triangle viewport for long answers
- Reduce font size: 8px mobile / 10px desktop
- Tighten padding and max-width for earlier line breaks
- Lower text with mt-5 for wider triangle area
- Widen triangle clip-path: 50% 12%, 94% 92%, 6% 92%
2026-05-13 00:43:18 +03:00
emil 87e11655f6 fix(magic8ball): shift answer text down with mt-3 instead of pt-2
- Replace padding-top with margin-top so text actually shifts down
  inside the flex-centered triangle viewport
2026-05-13 00:35:50 +03:00
emil 1b02227cdd Merge remote main: resolve conflicts, keep local icons and gitignore 2026-05-13 00:31:07 +03:00
emil 8f11c5af43 feat: add favorites panel to meal generator, remove redundant Another one button
- Add clickable favorites counter with expandable panel
- Render saved recipes list with remove button
- Remove duplicate 'Another one' button (Generate already covers it)
- Sync favorite button state when removing from panel
2026-05-13 00:25:09 +03:00
emil28092005 a1cc10d0a2 feat: add 4 new generators (Palette, Lorem, Country, Weighted)
- Color Palette: 7 harmony modes (Random, Analogous, Complementary,
  Triadic, Monochromatic, Split-Complementary, Tetradic), 3-8 colors,
  individual swatch copy + copy all
- Lorem Ipsum: 1-20 paragraphs, Short/Medium/Long length,
  optional classic start, full a11y support
- Random Country: 40 countries, region filter, flag emoji + capital
  + population, bilingual data
- Weighted Random: dynamic item-weight rows, validation,
  single pick + N-trials with statistics bars

All generators include EN/RU i18n, SEO metadata, FAQ, and follow
project patterns.
2026-05-12 16:22:26 +03:00
emil 02f9ada193 feat: add 6 new generators + Privacy Policy
New generators:
- Yes or No — random Yes/No/Maybe with confidence bar
- Random Name — male/female/any names (EN + RU databases)
- Team Splitter — split list into random teams
- Random Letter — A-Z / А-Я alphabet picker
- Random Date — date between two dates
- Rock Paper Scissors — play against random bot

Also added:
- Privacy Policy page (/privacy, /ru/privacy)
- FAQ blocks on all 16 generators (3 Q&A each, EN+RU)
- About page (/about, /ru/about)
- Improved Yandex RTB ad placement with min-height placeholder
- Navigation: About + Privacy links in LanguageSwitcher

Build: 38 pages, all passing
2026-05-11 23:34:31 +03:00
emil 6f8264a0fb fix: add PNG favicon for search engine snippets 2026-05-11 22:26:17 +03:00
emil cbc0a3b545 feat: prepare site for Yandex Ads (RSYA) moderation
- Add About page (/about, /ru/about) with mission, history, contacts
- Add FaqBlock component for generator FAQ sections
- Add FAQ to all 10 generators (3 Q&A each, EN+RU)
- Expand howTo/whenTo content on numbers, password, coin generators
- Add About link to LanguageSwitcher navigation
- Improve Yandex RTB ad block: min-height placeholder, no layout shift
- Extend generator schema with optional faq/ruFaq fields
- Update translations.ts with about and faq i18n keys
2026-05-11 21:59:37 +03:00
emil 7a29e3c192 feat: integrate Yandex RTB ad block R-A-19259130-1 2026-05-11 20:52:27 +03:00
emil 7e36ec52ec fix(wheel): default items separated by newlines for correct parsing 2026-05-11 01:40:14 +03:00
emil e089dd07de style: visual polish — accent tokens, starfield, fixed card/output heights, focus rings, spatial fixes 2026-05-11 01:36:58 +03:00
emil 8de77203aa feat: add JSON-LD structured data
- BaseLayout: WebPage schema on every page + canonical URL
- Homepages: WebSite schema
- GeneratorLayout: SoftwareApplication + BreadcrumbList schemas
- Add <slot name='head'> to BaseLayout for child-injected head content
2026-05-10 21:19:39 +03:00
emil 8421441664 chore: add ESLint + Prettier, fix all lint errors
- Install eslint, typescript-eslint, eslint-plugin-astro, prettier,
  prettier-plugin-astro, globals
- Add flat eslint.config.mjs with recommended rules for JS, TS, Astro
- Add .prettierrc with astro plugin
- Add lint, lint:fix, format, format:check scripts
- Fix prefer-const, no-unused-vars, no-useless-assignment across codebase
- Fix AdBanner.astro JSX fragment for Prettier compatibility
- Add eslint-disable around Yandex/Top.Mail.Ru inline scripts
- Auto-format entire codebase with Prettier
2026-05-10 21:17:34 +03:00
emil bb62d7310e test: add Vitest + 30 dice-engine tests
- Install vitest and @vitest/coverage-v8
- Add test scripts to package.json
- Create vitest.config.ts
- Add 30 comprehensive tests for parseDiceNotation, rollDice,
  rollAdvantage, buildNotation, isAdvancedNotation
- Fix isAdvancedNotation regex to detect ro (reroll once)
2026-05-10 21:12:08 +03:00
emil 3750cd2cc6 feat: add PWA support with offline caching
- Generate 192x192, 512x512 and Apple touch icons from favicon.svg
- Add web app manifest (manifest.json)
- Add service worker with network-first for HTML, cache-first for assets
- Register SW in BaseLayout
- Add theme-color meta and apple-touch-icon link
2026-05-10 21:06:19 +03:00
emil 56ab3f6952 refactor: extract shared client utilities
- Add src/lib/client/clipboard.ts with CopyFeedback class
- Add src/lib/client/validation.ts with createErrorDisplay and isInteger
- Add src/lib/client/animations.ts with popElement
- Refactor NumberGenerator, LotteryGenerator, PasswordGenerator,
  ListGenerator, CardGenerator, CoinGenerator, UuidGenerator,
  WheelSpinner to use shared utilities
- Leave DiceGenerator and ColorGenerator untouched (complex patterns)
2026-05-10 20:56:33 +03:00