Stop shipping punimtag_password / admin defaults in install helpers and
docs; generate secrets at install time; require ADMIN_PASSWORD from env
(with test-only bootstrap in conftest).
Logged-out favorite/report share a reason-aware SignInRequiredDialog so
favorites no longer show report messaging. Replace misplaced text-secondary
(light wash token) with foreground/primary on labels, auth, and menus.
Labels used text-secondary (a background token); switch to sidebar foreground. Keep lazy-loaded photos and freeze/restore scrollY when the modal opens.
Use bilingual classic mark for light headers and white/blue-gold for dark,
replace JAM watermark with JRCC overlay, and ship /styles so we can pick a
redesign direction.
Capture optional contact fields on identify/approve, add Select All and
Approve Next 10 on User Identified Faces, and email admins when the
pending queue grows (ADMIN_NOTIFY_EMAIL via existing noreply SMTP).
Wire viewer-frontend Vitest into Gitea Actions, centralize DEV base URLs
in env-defaults.json, expand playkit API catalog specs, and land auth/mail
flows plus verify-email public-host redirect and idle-logout e2e hooks.
Establishes frontend unit testing infra (jsdom env, RTL, jest-dom
matchers, common Radix/jsdom polyfills) and seeds it with tests for
lib/utils.ts, lib/photo-utils.ts, hooks/useFocusTrap.ts, and
ThemeToggle.tsx (46 tests total).
Add next-themes light/dark/system theming with an accessible toggle
in every header, and close out an a11y pass across the viewer app:
skip-to-content link, main landmarks and heading hierarchy on every
route, focus-trapped dialog semantics for the photo viewer modals,
aria-label/live-region coverage for dynamic messages and icon
buttons, and dark: variants for previously light-only colors.
- NextAuth session/jwt callbacks no longer return null (the client
useSession() hook chokes on a null session, crashing the app on
sign-out for deactivated/refreshed sessions) — fixes#57
- UserMenu/Header sign-out handlers close the Manage Users overlay and
popover before calling signOut(), and no longer let a rejected
signOut() promise go unhandled
- Added an app-level error boundary as a safety net for any remaining
client render errors
- Registration and forgot-password flows now tell the user honestly
when the confirmation/reset email failed to send instead of always
claiming success — related to #56
- lib/email.ts throws a clear, actionable error when neither
SMTP nor Resend is configured, instead of a cryptic SDK error
- Documented required SMTP/Resend env vars in DEPLOYMENT_CHECKLIST.md
(were missing entirely, which is why no confirmation/reset emails
were ever sent in deployed environments) — fixes#56
- #45: re-read local folder when recursive checkbox toggles
- #47: clear Identify crop spinner when image is already cached
- #46: search selected people by person_ids; AND for "First Last"
- #21: enqueue network import without blocking API walk
- #26: serve resized grid thumbnails for photos
- #30/#31/#33: re-enable small-face filters in auto-match
Add on-demand H.264/AAC web playback (RQ, ffmpeg) with API routes and
Next.js proxies; extend admin UI with WebPlaybackVideo and shared hooks.
Store transcode cache beside pending-photos (WEB_VIDEO_CACHE_DIR / UPLOAD_DIR)
and ignore data/web_videos. Centralize FastAPI URL helpers, optional Vite
and Next base paths for subfolder deploy, and fix modal reopen by using
router.replace when closing the home photo viewer. Include migration,
install scripts, deployment doc updates, and CI admin build env tweak.
Made-with: Cursor
- Added support for sending emails using SMTP configuration or Resend API as a fallback.
- Updated environment variables in .env_example for SMTP settings.
- Enhanced email confirmation process with improved error handling and fallback logic.
- Introduced a test script to validate email sending configuration and functionality.
- Document long-term solutions for handling path prefixes in PunimTag deployments.
- Outline steps to configure viewer base path, align environment variables, and enforce consistent URL patterns.
- Include validation checklist and recommended deployment policy to ensure stable setups.
- Add debug mode support for encoding statistics in API responses
- Debug info includes encoding length, min/max/mean/std, and first 10 values
- Frontend logs encoding stats to browser console when debug enabled
- Identify page enables debug mode by default
- Implement distance-based confidence thresholds for stricter matching
- Borderline distances require higher confidence (70-95% vs 50%)
- Applied when use_distance_based_thresholds=True (auto-match)
- Reduces false positives for borderline matches
- Dual tolerance system for auto-match
- Default tolerance 0.6 for regular browsing (more lenient)
- Run auto-match button uses 0.5 tolerance with distance-based thresholds (stricter)
- Auto-accept threshold updated to 85% (from 70%)
- Enhance pose detection with single-eye detection
- Profile threshold reduced from 30° to 15° (stricter)
- Detect single-eye visibility for extreme profile views
- Infer profile direction from landmark visibility
- Improved face width threshold (20px vs 10px)
- Clean up debug code
- Remove test photo UUID checks from production code
- Remove debug print statements
- Replace print statements with proper logging
- Refactored video thumbnail generation logic to fetch thumbnails from the backend instead of generating them locally.
- Removed unused placeholder generation code for remote video URLs.
- Improved error handling for backend thumbnail fetch failures, returning appropriate responses.
- Enhanced caching strategy for fetched thumbnails to optimize performance.
These changes streamline the video thumbnail process and improve the overall user experience in the viewer interface.
- Added a new API method to fetch photo images as blobs, enabling direct image retrieval.
- Updated image source paths in multiple components to use the base URL from the API client for consistency.
- Implemented cleanup for blob URLs in the ReportedPhotos component to prevent memory leaks.
- Improved user experience by displaying loading states for images in the ReportedPhotos component.
These changes improve the efficiency and reliability of photo handling in the admin interface.
This commit enhances the CI workflow by adding retry logic for package installation in the Debian environment. It addresses transient issues with Debian mirror sync by allowing up to three attempts to install necessary packages, improving the reliability of the CI process. Additionally, it cleans the apt cache before retrying to ensure a fresh attempt.
Also, it removes unused local patterns configuration from the Next.js setup and adds an unoptimized prop to the PhotoGrid component for better image handling based on the URL state.
- Implemented GET endpoint to retrieve photo details by ID, including associated faces and tags.
- Added GET endpoint for fetching adjacent photos based on date taken.
- Created POST endpoint to toggle favorites for photos, including user authentication checks.
- Developed POST and GET endpoints for reporting photos, with caching for report statuses.
- Introduced POST endpoint for bulk toggling of favorites.
- Implemented batch processing for checking report statuses.
- Added endpoint for managing tag linkages, including validation and error handling.
- Created upload endpoint for handling photo uploads with size and type validation.
These changes enhance the photo management capabilities of the application, allowing users to interact with photos more effectively.
This commit introduces a new `DEPLOYMENT_CHECKLIST.md` file that outlines the necessary steps for configuring server-specific settings after pulling from Git. It includes instructions for environment files, PM2 configuration, firewall rules, database setup, and building frontends. Additionally, it adds an example `ecosystem.config.js.example` file for PM2 configuration, providing a template for users to customize for their deployment environment. The `.gitignore` file is updated to include the new PM2 ecosystem config file.
This commit enhances the linting configurations by adding additional flake8 error codes to ignore in both the CI workflow and the Python linting command in package.json. It also modifies the ESLint configuration for the admin frontend to remove the report for unused disable directives, streamlining the linting process and reducing false positives.
This commit adds blank lines to the end of several files, including configuration files and scripts, enhancing the overall readability and maintainability of the codebase. Consistent formatting practices contribute to a cleaner and more organized project structure.
This commit updates the CI workflow to include additional checks for ESLint, type checking, and backend tests. It introduces steps to validate the outcomes of these checks, ensuring that any failures will cause the job to fail. This enhancement improves the overall quality control in the CI pipeline, requiring developers to address issues before proceeding with the build process.
This commit adds blank lines to the end of several files, including pytest.ini, README.md, and various scripts in the viewer-frontend. These changes enhance the readability and maintainability of the codebase by ensuring consistent formatting.
This commit modifies the null check in the `PhotoViewerClient` component to use `!=` instead of `!==`, ensuring that the filter correctly identifies non-null persons. This change enhances type safety and maintains consistency in handling potential null values.
This commit adds dynamic rendering to the main page, photo detail page, and search page in the viewer frontend. By enforcing dynamic rendering, we prevent database queries during the build process, enhancing application performance and reliability. These changes contribute to a more efficient development workflow and improve the overall user experience.
This commit modifies the authentication routes to dynamically import email functions, preventing Resend initialization during the build. This change enhances the application's performance and reliability by ensuring that unnecessary initializations do not occur at build time. These updates contribute to a more efficient development workflow and improve the overall user experience.
This commit adds environment variables for Resend API integration in the CI workflow, ensuring proper configuration for build processes. Additionally, it enforces dynamic rendering in the authentication routes to prevent Resend initialization during build, improving the application's performance and reliability. These changes contribute to a more robust development environment and enhance the overall user experience.
This commit updates the CI workflow to include steps for auditing dependencies in both the admin and viewer frontends, ensuring that vulnerabilities are identified and addressed. Additionally, it updates the `package-lock.json` and `package.json` files to reflect the latest versions of `vite` and other dependencies, improving overall project stability and security. These changes contribute to a more robust development environment and maintain code quality.
This commit modifies the `.gitignore` file to exclude Python library directories while ensuring the viewer-frontend's `lib` directory is not ignored. It also updates the `package.json` to activate the virtual environment during backend tests, improving the testing process. Additionally, the CI workflow is enhanced to prevent duplicate runs for branches with open pull requests. Various components in the viewer frontend are updated to ensure consistent naming conventions and improve type safety. These changes contribute to a cleaner codebase and a more efficient development workflow.
This commit modifies the ESLint configuration to include an additional TypeScript project file and adjusts the maximum line length to 120 characters. It also removes unused functions and imports across various components in the admin frontend, enhancing code clarity and maintainability. These changes contribute to a cleaner codebase and improved development experience.
This commit introduces several new scripts for managing database operations, including user creation, permission grants, and data migrations. It also adds new documentation files to guide users through the setup and configuration processes. Additionally, the project structure is updated to enhance organization and maintainability, ensuring a smoother development experience for contributors. These changes support the ongoing transition to a web-based architecture and improve overall project functionality.