Commit Graph
113 Commits
Author SHA1 Message Date
emil 75f2dc6972 feat(dm-dashboard): Wave 5 — NPC generation API, history API, quota/tier badges, translate button 2026-05-15 22:45:26 +03:00
emil 2921e45237 feat(dm-dashboard): Wave 4 — rate limiting, translation API, AI tab navigation 2026-05-15 22:26:41 +03:00
emil 5aec915034 feat(dm-dashboard): Wave 3 — Boosty verification, notes/initiative API routes 2026-05-15 22:00:19 +03:00
emil 0bbaa6e3d8 feat(dm-dashboard): Wave 2 — Drizzle migration, DmSidebar fix, CORS config 2026-05-15 21:48:09 +03:00
emil 25f43ec4e2 feat(dm-dashboard): Wave 1 — auth fixes, DB schema, Open5e interfaces, AI clients
- Fix auth anti-patterns (JWT, OAuth, logout, middleware, url.origin)
- Extend DB schema with tier, npcs, counters, translations, notes, initiative
- Expand Open5e TypeScript interfaces (Monster, Spell) to full V2
- Build OpenRouter API client for FREE tier
- Build Kimi API client for PRO tier
- Add comprehensive tests for all modules
2026-05-15 21:28:42 +03:00
emilandClaude Opus 4.7 1f09270329 fix(dm): polish hardcoded strings, typo, and aria-labels
- Fix typo "combatантов" -> "участников боя" in dm-translations
- Replace hardcoded English "Result", "Rolls:", "Invalid notation"
  in DiceRoller with translation keys
- Translate English aria-labels ("Quick dice selectors", "Roll history",
  "Combatants") to Russian
- Move InitiativeTracker hardcoded strings ("Итого", "Инициатива",
  "Порядок хода", help text) into the translation file

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 18:31:21 +03:00
emilandClaude Opus 4.7 c01c34d3e0 style(dm): widen desktop dashboard at xl/2xl breakpoints
Bump container max-width and right context column at xl/2xl so the
reference and notes panels get noticeably more room on larger monitors.
Mobile and lg layouts are unchanged.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 18:23:35 +03:00
emilandSisyphus 659b042de5 fix(lint): resolve explicit any and empty catch in DM test scripts
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-15 18:10:36 +03:00
emilandSisyphus 8eafd504b2 fix(lint): resolve explicit any and useless assignment in DM components
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-15 18:10:28 +03:00
emilandSisyphus 3388d70d96 chore(lint): add debug-open5e.mjs to ESLint ignores
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-15 18:10:19 +03:00
emilandSisyphus fddc40e967 docs: note boulder tracking sync issue in DM dashboard redesign
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-05-15 18:02:00 +03:00
emil 1c38df7e74 style(dm): redesign dashboard with purple-gold theme
Redesign DM Dashboard (/dm/, /ru/dm/) with purple-gold theme (#534AB7 + #c8a84b):

Design System:
- Update dm-theme.css with 49 purple-gold tokens (transitions, shadows, hover states)
- Create DmTabs.astro with ARIA, keyboard nav, URL hash sync, localStorage persistence
- Create DmSidebar.astro for desktop navigation
- Redesign DmHeader with gold accent
- Update DmButton, DmCard, DmInput primitives
- Expand i18n to 47 strings

Layout:
- Redesign DmLayout with 3-column dashboard grid (sidebar|main|context)
- Update /dm/index.astro and /ru/dm/index.astro with named slots

Feature Components:
- DiceRoller: empty state, ARIA live, color-coded history, storage key fallback
- InitiativeTracker: HP editing, active highlighting, storage key fallback
- Open5eReference: skeletons, debounce, error retry, gold tabs
- NotesPanel: cross-tab sync, copy-to-clipboard, auto-save
- AuthPanel: VK/Yandex brand colors, pill buttons

Tests:
- Add 50 Playwright E2E tests (smoke, dice, initiative, reference, notes, data-migration)

Fixes:
- Document Open5e client.ts URL bugfix
- Add backward-compatible storage key fallback for dice/initiative
- Preserve legacy sessionStorage data on load
2026-05-15 17:49:32 +03:00
emil 11da171bfb docs: add AGENTS.md knowledge base (root + generators + dm) 2026-05-15 04:35:00 +03:00
emil 592fa4cc3e chore(vk): remove debug logging from callback 2026-05-15 04:21:34 +03:00
emil 5815b52c4e fix(vk): add client_id to user_info request, use query params for device_id 2026-05-15 04:18:19 +03:00
emil 57d56c7f29 debug(vk): log full callback URL and all query params 2026-05-15 04:15:07 +03:00
emil 258f062115 fix(lint): remove unused refreshToken variable 2026-05-15 04:11:07 +03:00
emil fbc011f55e fix(vk): use id.vk.ru domain, handle payload param, add device_id to token exchange 2026-05-15 04:09:02 +03:00
emil 5b6247ff7c style(auth): remove debug border from AuthPanel, clean up console.log 2026-05-15 03:55:51 +03:00
emil 6f2d9aff5d fix(auth): make DM pages server-rendered so middleware can set Astro.locals.user
Pages /dm/ and /ru/dm/ were static (prerendered), so middleware
never ran and Astro.locals.user was always null. Adding
prerender = false allows middleware to authenticate the user
before page render.
2026-05-15 03:50:41 +03:00
emil 38a778f3de debug(auth): add visible debug border and user state to AuthPanel 2026-05-15 03:40:01 +03:00
emil 08161dcdd1 fix(auth): unify cookie name to auth_token for OAuth and middleware compatibility
- Change COOKIE_NAME from 'session' to 'auth_token' in oauth.ts
- Update logout.ts to use Headers.append() and SameSite=Lax
- Fixes mismatch where callback set 'session' but middleware read 'auth_token'
2026-05-15 02:22:19 +03:00
emil de81e54ae1 fix(oauth): use SameSite=Lax for session cookie to survive cross-site redirect 2026-05-15 02:14:21 +03:00
emil b762e2eb66 fix(health): check DB connectivity in health endpoint 2026-05-15 02:05:40 +03:00
emil b71902b686 fix(oauth): use separate Set-Cookie headers for multiple cookies
Browser cannot parse multiple cookies from a single Set-Cookie header
joined by comma (RFC 6265). Use Headers.append() to send each cookie
in its own Set-Cookie header. Fixes state/verifier cookie mismatch.
2026-05-15 01:59:56 +03:00
emil da6208de50 fix(oauth): fix VK token URL (.ru -> .com), add error logging to callbacks 2026-05-15 01:50:45 +03:00
emil da0ee46bc0 fix(dm): scope DM theme CSS to .dm-theme class to override BaseLayout purple accent 2026-05-15 01:46:01 +03:00
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