142 Commits

Author SHA1 Message Date
5ef1f4ecc9 refactor(frontend): move detail view state initialization to server plugin
Remove top-level await from useAsyncData in detail views
Remove manual state initialization blocks in components
Introduce 03-detail-seo.server.ts to handle SEO and state
2026-05-06 17:40:44 +08:00
4dc73d42cb fix(frontend): await useAsyncData and initialize state in detail views
Restore await for useAsyncData to ensure data is fetched during SSR
Assign initial data to local refs to prevent empty states on load
2026-05-06 17:26:49 +08:00
fa656a8d02 refactor(auth): migrate fully to HTTP-only cookie sessions
Remove client-side token storage and Authorization header injection
Backend login now only returns user data, omitting the session token
Remove Authorization from backend CORS allowed headers
Clean up obsolete VITE_* environment variable fallbacks
Update Modal component to use Vue useId() instead of Math.random()
2026-05-06 17:15:46 +08:00
f26cfdc830 refactor(frontend): remove top-level await from useAsyncData
Transition to non-blocking data fetching to prevent navigation delays.
Initial data is now applied via immediate watchers instead of blocking setup.
2026-05-06 16:35:03 +08:00
71b35b9cc6 chore(docker): add local debug compose setup and scripts
Add docker-compose.debug.yml for local hot-reload debugging
Add docker:debug and docker:prod scripts to package.json
Update documentation and environment examples for debug usage
Update pnpm version in packageManager field
2026-05-06 16:18:23 +08:00
70f7a73e6d fix(frontend): safely resolve route IDs and remove manual auth checks
Prevent invalid API calls during route transitions in detail views
Allow builds for esbuild and @parcel/watcher in pnpm workspace
2026-05-06 15:59:36 +08:00
f92e97b747 feat(ssr): load initial data and SEO for public detail pages
Fetch initial content server-side for detail views and Life feed.
Bind detail-specific SEO head tags during SSR.
Extract resolvedSeoHead to share head tag generation.
2026-05-06 12:01:00 +08:00
d66124862a feat(ssr): load initial data for remaining public routes
Use useAsyncData to fetch initial list pages and options server-side
Apply SSR loading to Habitats, Items, Artifacts, Recipes, Dishes, and Home
2026-05-06 11:21:00 +08:00
f7986ca520 feat(seo): centralize route metadata and expand sitemap coverage
Remove static fallback tags from Nuxt config to prevent duplication.
Auto-apply noindex to authenticated and permissioned routes.
Add home, project updates, and legal pages to sitemap.
Properly escape JSON-LD structured data.
2026-05-06 11:01:19 +08:00
425f2f4d5f feat(ssr): load Pokemon lists and forward auth cookies on server
Update auth middleware to pass incoming request cookies to api.me()
Refactor API service to support custom headers via ApiRequestOptions
Use useAsyncData in PokemonList to fetch initial data during SSR
Ensure graceful fallback to client-side fetching on SSR failure
2026-05-06 10:50:51 +08:00
35ee164794 feat(frontend): enable Nuxt SSR and migrate to Nitro server
Set `ssr: true` in Nuxt config and switch build command to `nuxt build`.
Update Dockerfile to run `.output/server/index.mjs` and remove static server.
Defer SEO initialization to prevent premature evaluation during SSR.
2026-05-06 10:28:12 +08:00
cf1eb6965e refactor(i18n): isolate Vue I18n instances per request for SSR
Replace global I18n singleton with a factory function
Inject request-specific I18n instances into Nuxt app and SEO metadata
Prevent cross-request locale state pollution during server-side rendering
2026-05-06 10:10:07 +08:00
337a6bda1f refactor(seo): migrate metadata handling to Nuxt useHead
Remove direct document.head mutations to support SSR compatibility
Implement observer pattern to sync SEO state with Nuxt universal plugin
Update analytics script to use declarative injection in Nuxt config
2026-05-06 09:59:38 +08:00
fd1f3ef636 feat(auth): implement hybrid session model with HTTP-only cookies
Add HTTP-only cookie session support to backend for SSR compatibility
Update frontend fetch calls to include credentials
Maintain legacy bearer token support for SPA transition
2026-05-06 09:48:18 +08:00
afed409127 feat(frontend): support separate browser and server API base URLs
Add NUXT_SERVER_API_BASE_URL for internal server-side API requests
Update API and i18n services to select base URL by execution context
2026-05-06 09:31:11 +08:00
6e8edbbb09 refactor(frontend): migrate from Vite to Nuxt SPA
Replace Vite and Vue Router with Nuxt framework
Update Docker, build scripts, and env vars for Nuxt generate
2026-05-06 09:19:23 +08:00
c821e9ebba feat: implement infinite scrolling for public entity lists
Add cursor-based pagination to backend list queries
Introduce LoadMoreSentinel for intersection-based loading
Replace manual load more buttons with infinite scroll sentinel
2026-05-06 08:33:08 +08:00
91a001e3f9 feat(admin): add habitats CSV import to data tools
Support importing habitats from CSV files to batch create entries
Add validation, API endpoint, and admin UI for the import process
2026-05-06 07:06:08 +08:00
22016365d8 feat: add pokemon trading preferences and item tag inference
Introduce trading preference (Likes/Neutral) for Pokemon with trading skills
Infer possible hidden tags for items based on trading observations
Update import/export, wipe, and admin config to support trading data
2026-05-05 22:54:32 +08:00
5b22d788d7 feat(admin): add items CSV import to data tools
Allow bulk importing items via CSV in the admin data tools
Support static image paths for items imported from CSV
2026-05-05 17:51:38 +08:00
0e2743b469 chore(db): clean up redundant schema migrations and legacy import logic
Remove obsolete ALTER TABLE statements and data migration blocks that are already reflected in base
table definitions.
Simplify data tool import normalization by removing legacy artifact mapping and unused entity types.
2026-05-05 11:51:08 +08:00
5a83a73108 refactor(items): merge ancient artifacts into items data model
Migrate ancient artifacts to items table using a category key.
Consolidate detail and edit views into ItemDetail and ItemEdit.
Update API, search, and data tools to reflect unified structure.
2026-05-05 10:50:07 +08:00
839a24566b refactor(items): improve edit form layout with responsive grid rows
Group related fields like name/price and category/usage.
Stack fields vertically on screens smaller than 720px.
2026-05-05 09:05:53 +08:00
9312156a3c feat(items): add base price and support usage in creation defaults
Add `base_price` to items schema, API, and edit history
Display and edit base price in item details and forms
Add `clearable` prop to TagsSelect for optional single selections
Include usage in item creation session defaults
2026-05-05 08:59:36 +08:00
8ee29e9549 feat(history): exclude sort order changes from edit history
Stop recording sort order changes in the backend edit log
Filter out existing sort order changes from the frontend edit history panel
2026-05-05 07:15:18 +08:00
357dc061d6 feat(items): support drag-and-drop reordering and contextual insert
Implement drag-and-drop sorting in the items grid
Add right-click context menu to insert new items before or after
Update backend to process insertion anchors during item creation
2026-05-05 07:01:21 +08:00
a17344d216 feat(ui): add session defaults menu for item creation
Support presetting category, checkboxes, and acquisition methods.
Persist defaults in sessionStorage to streamline repetitive data entry.
2026-05-04 22:45:32 +08:00
cd0f8868c3 feat(ui): implement compact grid layout for items and artifacts
Add compact tooltip mode to EntityCard component
Display 12-column icon grid on desktop for collections
Retain standard card layout with details on mobile devices
2026-05-04 22:19:36 +08:00
28f4e6032c refactor: remove display ID from items and ancient artifacts
Drop display_id column from items and ancient_artifacts tables
Remove display ID inputs, labels, and sorting logic across the stack

BREAKING CHANGE: behavior is not backward compatible.
2026-05-04 21:32:00 +08:00
2220d5d595 feat(dish): add dish management and public view
Add database schema, permissions, and API endpoints for dishes
Implement frontend views and admin management for dish data
2026-05-04 21:00:23 +08:00
2ff2519647 feat(comments): add sorting and liking functionality
Support sorting by oldest, latest, most-liked, and most-replied.
Implement like/unlike actions for Life and Entity Discussion comments.
2026-05-04 17:29:09 +08:00
504849c14a feat(search): include user profiles in global search results
Add users group to global search API and frontend types
Query users by display name and link to their public profiles
Update system wordings for the new search group
2026-05-04 16:04:58 +08:00
8cb8190554 feat(users): implement user following system and following feed
Add follow/unfollow actions and social stats to user profiles
Introduce Following feed scope in Life view
Add notifications for new followers
2026-05-04 15:49:57 +08:00
016364a8b8 feat(life): allow authors to view and restore their deleted comments
Update backend to return soft-deleted comments to their authors
Add restore endpoint and frontend Undo button for deleted comments
Retain comment body and author information upon deletion
2026-05-04 14:54:00 +08:00
b0e2036965 feat(life): hide deleted comments and approved moderation status
Completely remove deleted comments and their replies from lists, previews, and counts.
Hide the "approved" moderation status badge to reduce visual clutter.
2026-05-04 14:53:45 +08:00
06e0cbb1c1 feat(search): add global search across wiki entities
Implement /api/search endpoint for cross-entity querying
Add GlobalSearch component to top navigation bar with categorized results
2026-05-04 14:20:12 +08:00
3dd3998a5c feat(ui): introduce global top navigation bar for user actions
Relocate language, notifications, profile, and auth controls from the sidebar to a new sticky
topbar.
Update AppShell grid layout and responsive styles to accommodate the topbar across breakpoints.
2026-05-04 13:08:23 +08:00
bd944556d9 feat(ui): refine mobile layouts and add 430px breakpoint
Adjust component dimensions, spacing, and typography for 640px screens
Introduce 430px media query to optimize layouts for smaller devices
2026-05-04 11:54:16 +08:00
07698e063d feat(moderation): add user-facing reasons for rejected or failed content
Prompt AI models to provide short explanations for rejected content
Store reasons in database and broadcast via WebSocket
Display moderation details in UI for authors and admins
2026-05-04 11:18:54 +08:00
3d6188748d feat(moderation): add real-time status updates via WebSocket
Broadcast moderation status changes to the author via WebSocket
Update UI in real-time for Life Posts, Comments, and Discussions
Hide retry moderation button while status is reviewing
2026-05-04 10:54:21 +08:00
a25f1661b5 feat(notifications): add real-time notification system
Add database tables for notifications and WebSocket tickets
Implement REST API and WebSocket server for real-time delivery
Add NotificationBell component with dropdown and unread badge
Trigger alerts for comments, reactions, and AI moderation results
2026-05-04 10:40:14 +08:00
579d092020 feat(life): add Life Post reaction users modal and API
Add GET /api/life-posts/:id/reactions endpoint with pagination
Add LifeReactionUsersModal to view and filter reaction users
Make reaction summaries clickable in feeds, details, and profiles
2026-05-04 10:10:38 +08:00
7ff7e18b94 feat(life): add Life Post detail page and endpoint
Implement GET /api/life-posts/:id with moderation and visibility rules
Add /life/:id route and LifePostDetail view
Update feeds and user profiles to link to the new detail page
2026-05-04 09:51:31 +08:00
bcff83a512 feat(gateway): add nginx gateway for maintenance mode fallback
Proxy frontend traffic through Nginx to handle service restarts gracefully
Serve a static 503 maintenance page when frontend or backend is unavailable
Update deployment design docs and docker-compose configuration
2026-05-04 09:12:39 +08:00
03f5735bd2 feat(nav): add collapsible sidebar and nested navigation groups
Refactor sidebar to support nested navigation groups for related entities.
Implement collapsible desktop sidebar with icon tooltips.
2026-05-04 08:57:31 +08:00
4238be7761 feat: add ancient artifacts and refactor item categories
Introduce Ancient Artifacts with full CRUD and image support
Migrate item categories and usages to system-defined lists
Add display_id to items and artifacts for custom sorting
2026-05-04 08:28:56 +08:00
5ccc25b248 feat: separate regular and event entities for Pokemon and Habitats
Add dedicated routes and navigation for Event Pokemon and Event Habitats
Update API endpoints to filter by isEventItem and adapt frontend views
2026-05-04 06:50:37 +08:00
f2a8b67ebf feat(admin): add data tools for export, import, and wipe
Add admin.data.export and admin.data.import permissions
Implement backend logic and API endpoints for data bundle management
Add Data Tools tab to admin interface with scope selection
Support Pokemon, Habitats, Items, Recipes, and Daily CheckList scopes
2026-05-04 00:56:37 +08:00
fa06d24826 feat(pokemon): store official data identity separate from display ID
Add data_id and data_identifier to pokemon schema
Use official data ID as internal route ID for non-event pokemon
Prevent applying fetched data with mismatched ID to existing pokemon
2026-05-04 00:06:22 +08:00
8dfd03f3d2 feat: add project updates feed and dedicated page
Proxy and sanitize Gitea repository data via /api/project-updates
Display recent commits and releases preview on the Home page
Add /project-updates route for paginated commit history
2026-05-03 23:40:34 +08:00