Commit Graph

142 Commits

Author SHA1 Message Date
a0e07f101a perf(pokemon): cache fetch options locally to reduce API requests
Add `all` parameter to fetch-options API to retrieve the full list.
Fetch all options once and filter locally in the Pokemon edit view to improve search responsiveness.
2026-05-03 22:34:49 +08:00
df212a4e27 feat(pokemon): decouple official data ID from display ID during fetch
Allow fetching data and images using official identifiers regardless of the custom display ID.
Extract data ID directly from image paths instead of relying on the display ID.
Only auto-fill display ID from fetched data if the field is currently empty.
2026-05-03 22:23:29 +08:00
deb0b54e71 feat(admin): make user rate limits configurable via admin UI
Add rate_limit_settings table and corresponding admin permissions
Replace static user rate limits with dynamic in-memory counters
Add interface in admin panel to configure rate limit policies
2026-05-03 22:11:41 +08:00
b0e2464c24 feat(auth): implement Resend email quota and rate limit protection
Track Resend API usage via response headers to prevent quota exhaustion
Block auth requests with 503 when email delivery limits are reached
2026-05-03 19:42:41 +08:00
40f85ae85c feat(auth): implement branded HTML templates for auth emails
Add a standardized HTML shell for verification and password reset emails.
Update system wordings with new email copy, buttons, and fallback links.
Strip standalone action links from content to use styled buttons.
2026-05-03 19:33:25 +08:00
3a8a61487a feat(config): support multiple CORS origins and dynamic docker env vars
Parse comma-separated origins in FRONTEND_ORIGIN for Fastify CORS
Use host environment variables with fallbacks in docker-compose
Add Cloudflared tunnel deployment examples to .env.example
2026-05-03 19:22:38 +08:00
72ddae6f9d chore: add Umami analytics and adjust docker-compose ports
Inject Umami analytics script into frontend index.html
Map backend port to 20016 and remove exposed postgres port
2026-05-03 19:14:57 +08:00
fcb9b57aa3 feat(history): track translation and config changes in edit history
Record localized field updates across all translatable entities.
Track sort order modifications and specific config properties.
Support parsing and translating localized field labels in the UI.
2026-05-03 19:09:49 +08:00
d80c9325cd refactor(life): extract rating control and reorganize post actions
Extract 5-star rating UI into a dedicated LifeRatingControl component
Move moderation status and retry button into the engagement actions bar
2026-05-03 19:06:02 +08:00
105274eec8 feat(life): add game versions and 5-star ratings to posts
Support associating life posts with specific game versions
Allow 1-5 star ratings on posts in rateable categories
Add feed filters for game version, rateable status, and top-rated sorting
2026-05-03 18:38:33 +08:00
4ebb45aa94 feat(legal): add legal pages and global footer
Introduce Privacy Policy, Terms of Service, and Disclaimers views
Add site footer with copyright, legal links, and attribution notices
Update system wordings with comprehensive legal content in EN/ZH
2026-05-03 18:04:33 +08:00
6758aaaa7e feat(home): add home page as main entry point
Introduce HomeView with quick links to wiki sections and community features
Update navigation, routing, and logo links to point to the new home page
2026-05-03 17:46:36 +08:00
6782ddd101 feat(life): replace multiple tags with single category for posts
Add default category support and enforce one category per Life Post
Update UI filters, forms, and translations to reflect category semantics
2026-05-03 17:34:32 +08:00
18baf7b513 feat(moderation): add AI moderation for user-generated content
Add AI moderation settings, caching, and status tracking
Require AI approval for Life Posts, Comments, and Discussions
Implement language filtering and moderation status UI
Add retry mechanism for failed moderation checks
2026-05-03 17:08:51 +08:00
590bd6a0ae build: optimize Dockerfiles for production and pin dependencies
Implement multi-stage build and static server for frontend
Run containers as non-root user and set production environment
Pin all package dependencies to exact versions
2026-05-03 15:35:00 +08:00
7aa80430d9 refactor(api): remove internal metadata from image upload responses
Omit entity details, original filename, MIME type, and file size from payloads
Update backend SQL queries and frontend interfaces to align with design specs
2026-05-03 15:24:27 +08:00
960898c858 feat(comments): paginate life post and entity discussion comments
Implement cursor-based pagination for Life and Entity comments
Optimize Life Post queries to return comment counts and previews
Add "Load more" functionality to frontend discussion panels
2026-05-03 15:20:05 +08:00
0c76d6bfc8 feat(api): implement rate limiting for abuse prevention
Add @fastify/rate-limit with granular policies for different routes
Support TRUST_PROXY environment variable for reverse proxies
2026-05-03 15:04:07 +08:00
8f55db9061 feat(auth): enforce role level boundaries and owner assignment rules
Add `admin.users.assign-owner` permission to control Owner role assignment.
Restrict role assignment to roles strictly below the assigner's highest level.
2026-05-03 14:50:52 +08:00
1dab650c2c feat(seo): implement dynamic metadata, sitemap, and robots.txt
Add dynamic meta tags for routes and entity detail pages
Generate sitemap.xml and robots.txt dynamically in Vite
Change default frontend port from 3000 to 20015
2026-05-03 14:31:22 +08:00
282481bbcc feat(profile): add password change and activity filters
Implement password change API and UI in the Account tab
Add secondary filters for contributions, reactions, and comments
Display referral summary in the profile header
2026-05-03 13:52:35 +08:00
0e835f9c03 feat(profile): add public user profiles with activity tabs and stats
Add API routes for user stats, posts, reactions, and comments
Implement profile view with Feeds, Contributions, Reactions tabs
Link to user profiles from edit history, discussions, and life posts
Add database indexes to optimize user-centric queries
2026-05-03 13:14:29 +08:00
b9ec8076ac feat(auth): assign default editor role to verified users without roles
Update bootstrap rules to grant 'editor' role to verified users
Backfill existing verified users without roles in schema.sql
Apply default role automatically during email verification
2026-05-03 12:41:00 +08:00
043ebe392a refactor(backend): localize validation errors and consolidate schema
Replace hardcoded validation error messages with i18n keys.
Merge ALTER TABLE statements into initial CREATE TABLE definitions.
Clean up obsolete data migration scripts from schema file.
2026-05-03 12:16:26 +08:00
ef82fc805d feat(automation): add coming soon page and navigation entry
Add Automation route and navigation item with in-development badge
Include localized wordings, icon, and design docs for the new section
2026-05-03 12:05:29 +08:00
95d76522df feat(life): require at least one tag for life posts
Update design spec to mandate tag selection
Add frontend and backend validation for tag requirement
Add localization strings for tag required errors
2026-05-03 11:47:08 +08:00
accd6f98cf fix(ui): prevent dropdown clipping with fixed positioning
Automatically use fixed dropdown strategy for TagsSelect inside modals
Dynamically calculate fixed coordinates for Pokemon fetch results dropdown
2026-05-03 11:38:32 +08:00
3ca66d7124 docs(agents): add git diff hygiene rules for CSV files
Instruct agents to ignore data/**/*.csv files in git diffs by default.
Prevents false positives caused by WSL file system quirks.
2026-05-03 11:30:55 +08:00
8bc311916d feat(admin): redesign navigation with grouped secondary sidebar
Replace flat tabs with categorized navigation groups (Content, Config, etc.).
Update layout styles to support a responsive secondary sidebar.
2026-05-03 11:27:43 +08:00
05f531ddf2 feat(auth): implement role-based access control (RBAC)
Add roles, permissions, and user_roles tables with default seed data
Protect backend API endpoints with granular permission checks
Add admin UI for managing users, roles, and permissions
Update frontend views to conditionally render actions based on permissions
2026-05-03 11:16:58 +08:00
05898f9441 feat(auth): add user referral system with invite codes
Generate unique referral codes for users
Allow new users to register with a referral code
Display referral stats and invite link in user profile
2026-05-03 10:27:45 +08:00
3d99f00c75 feat(wiki): add event item flag and decouple pokemon display ID
Add `is_event_item` to pokemon, items, and habitats.
Separate internal `id` and `display_id` for pokemon to allow event variants.
Update frontend forms and views to support the new fields.
2026-05-03 10:11:04 +08:00
4d05618530 feat: add images and profile grid layout to entity detail pages
Return image data for related entities across all backend detail queries
Display images or default placeholders in detail headers, chips, and lists
Standardize Item, Recipe, and Habitat detail views with a new profile grid
2026-05-03 09:51:45 +08:00
784cbdacd1 feat(wiki): add community image upload for wiki entities
Support uploading images for Pokemon, Items, and Habitats
Track upload history in new entity_image_uploads table
Update entity cards to display uploaded images and usage ribbons
2026-05-03 01:08:45 +08:00
36e10a06b0 feat(auth): add user profile page and display name update
Add PATCH /api/auth/me endpoint to update user display name
Create UserProfileView for managing account details and email status
Update AppShell sidebar to link authenticated user to profile page
2026-05-02 22:38:33 +08:00
4a42756e2e feat(auth): add password reset and remember me options
Add password reset request and reset endpoints with email verification
Add "Remember me" option to login for persistent sessions
Create frontend views for forgot and reset password flows
2026-05-02 22:13:10 +08:00
97f06794a8 refactor(pokemon): simplify list card to display only image and name
Remove environment, types, skills, and meta from the list view
Update CSS and skeleton loaders for a centered, larger image layout
2026-05-02 21:37:09 +08:00
874ecc5625 feat(pokemon): redesign image display with side thumbnail and modal
Move image thumbnail to the right of base stats
Display detailed image information in a modal
2026-05-02 21:15:48 +08:00
cf0ae566c0 feat(pokemon): add image selection and display from pokesprite
Add image metadata fields to Pokemon schema and API
Implement image candidate fetching from pokesprite static tree
Add Pokédex-style image picker to edit form and display in details
2026-05-02 20:59:33 +08:00
475e3577dd refactor(admin): redesign system wording layout with sidebar and tabs
Replace module and surface dropdowns with a sidebar and tabbed interface.
Improve navigation and usability in the admin wording section.
2026-05-02 11:57:59 +08:00
976a2a2482 feat(i18n): implement dynamic system wording management
Add database schema and API endpoints for system wording keys and values
Replace hardcoded translations in frontend and backend with dynamic messages
Add System Wordings management interface to Admin view
2026-05-02 11:48:11 +08:00
e8e20539c9 feat(pokemon): add CSV data fetch to populate edit form
Allow users to search and fetch Pokemon data from local CSV files
Auto-populate basic fields, stats, types, and translations
Add type icons to Pokemon detail and list views
2026-05-02 11:02:02 +08:00
b0d18a845d feat(discussion): add discussion feature for game entities
Create entity_discussion_comments table and API endpoints
Add discussion tabs to Pokemon, Item, Recipe, and Habitat detail views
Support top-level comments, single-level replies, and deletion
2026-05-02 09:54:00 +08:00
7ee25e2437 refactor(pokemon): reorganize edit form fields into tabs
Split form into Basic and Advance tabs to improve usability
Add validation logic to switch tabs if required fields are missing
2026-05-02 09:32:08 +08:00
c2f58fe661 refactor(pokemon): redesign related pokemon and items layout
Display related Pokemon and items sections side-by-side on desktop
Streamline related Pokemon rows by grouping traits and removing labels
2026-05-02 08:44:03 +08:00
21bbbc7137 feat(pokemon): add related Pokemon section to detail view
Fetch related Pokemon based on shared environment and favorite things
Add UI with habitat filtering and highlighted shared attributes
2026-05-02 08:21:46 +08:00
f5ab96c2b1 feat(nav): add in-dev sections and coming soon placeholders
Add navigation links for Dish, Events, Actions, Dream Island, and Clothes.
Implement StatusBadge component and ComingSoonView for future content.
2026-05-02 07:55:04 +08:00
ec2a21bae6 feat(layout): redesign app navigation and replace sidebars with tabs
Move global navigation to a responsive sidebar drawer in AppShell
Replace sidebars in detail pages and Life feed with Tab components
Add mobile topbar with hamburger menu for navigation
2026-05-02 01:16:39 +08:00
6462ed23de feat(life): redesign feed layout with sidebar and icon buttons
Replace tag tabs with a responsive sidebar for filtering
Convert post and comment action buttons to icon-only with tooltips
Standardize engagement buttons into reusable icon and metric components
2026-05-02 00:54:07 +08:00
0ca6f779ec feat(life): enhance search, empty states, and reaction controls
Add clear button to search input and improve empty state UI
Add split button for reactions and close picker on outside click
Add retry button for paused feed pagination
2026-05-02 00:47:42 +08:00