88 Commits

Author SHA1 Message Date
david_bai 87ff5aab44 feat: add visual feedback for copy buttons in ShareCard
Add check icon feedback when copying RoomID and URL to clipboard:
- RoomID copy button now shows check icon for 2 seconds after copy
- URL copy button now shows check icon for 2 seconds after copy
- Consistent with existing QR code copy button behavior
2026-03-28 10:36:34 +08:00
david_bai e4ca70d758 fix: resolve React hydration mismatch in ThemeToggle
The ThemeToggle component was causing hydration errors because the server
and client rendered different icons (Sun/Moon) based on the theme state.

Changes:
- Render a placeholder button until component is mounted
- Only render the actual theme icon after client-side hydration
- This ensures server and client HTML match during initial render

Fixes console error: 'Expected server HTML to contain a matching <circle> in <svg>'
2026-03-28 10:23:43 +08:00
david_bai b81e39ac65 fix: restore QR code rendering and improve paste button label
- Restored QRCodeSVG component rendering in ShareCard for QR code display
- Fixed copy QR code and download QR code functionality
- Changed paste button label in SendTabPanel from 'Paste RoomID' to generic 'Paste'
- Keep 'Paste RoomID' label in RetrieveTabPanel where it's contextually appropriate
2026-03-28 08:02:04 +08:00
david_bai 7e781631bb chore(ui): clear remaining frontend warnings
Resolve the remaining lint warnings without changing behavior by fixing hook dependency lists, removing the icon naming false positive, and switching the YouTube thumbnail to next/image for compliant rendering.
2026-03-27 17:20:49 +08:00
david_bai 7a1ab18657 refactor(i18n): stabilize schema and restore locale translations
Align the next-intl message schema across components, hooks, and locale files so the frontend uses one canonical structure instead of compile-first workarounds. Restore Spanish, French, German, Japanese, and Korean translations to the new schema while narrowing clipboard hook dependencies to translation contracts.
2026-03-27 17:13:31 +08:00
david_bai 29897bea87 refactor(i18n): convert remaining useMessages to useTranslations
- FAQSection: useTranslations with dynamic keys via type assertion
- ClipboardApp: useTranslations for JSX, keep useMessages for hooks
- SendTabPanel: useTranslations for html and roomStatus namespaces
- RetrieveTabPanel: useTranslations for html, roomStatus, and ClipboardApp
- FileListDisplay: useTranslations for FileListDisplay namespace
- FileUploadHandler: useTranslations for fileUploadHandler namespace

Only ClipboardApp.tsx retains useMessages for hooks requiring full messages object.
2026-03-27 15:09:15 +08:00
david_bai 131d1e12f5 refactor(i18n): use native messages in clipboard panels
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-27 14:21:53 +08:00
david_bai 362a805c9b refactor(i18n): use native messages in faq section
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-27 14:21:53 +08:00
david_bai 2012412bc1 refactor(i18n): remove translation provider facade
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-27 14:21:53 +08:00
david_bai d72f3d3860 refactor(i18n): migrate clipboard widgets to useTranslations
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-27 14:16:08 +08:00
david_bai b364ef3c16 refactor(i18n): migrate blog list item translations
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-27 14:15:46 +08:00
david_bai c845399856 refactor(i18n): migrate home sections to native next-intl hooks
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-27 14:15:46 +08:00
david_bai 0ccefbd0c1 refactor(i18n): migrate shared chrome to useTranslations
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-27 14:15:45 +08:00
david_bai 6c93b1d995 build(i18n): add next-intl routing infrastructure
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-27 14:04:28 +08:00
david_bai cf529eed64 refactor(i18n): replace prop drilling with translation context
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-27 14:04:28 +08:00
david_bai 57004b3a1f refactor(i18n): normalize translation keys
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-27 14:04:28 +08:00
david_bai 761921684c feat(ui): add 8s P2P slow-connect hint + i18n; document full connection feedback flows
- Hook (useConnectionFeedback):
      - Add SLOW_RTC_MS=8000 timer when entering negotiating
      - Foreground-only; pending while hidden; show once per negotiation attempt
      - Clear timers on connect/disconnect; reset attempt flags when leaving negotiating
      - Cleanup timers on unmount
  - i18n:
      - Add required key ClipboardApp.rtc_slow to types
      - Provide translations for zh, en, ja, es, de, fr, ko
  - Docs:
      - flows.zh-CN: add UI connection feedback state machine covering
        join_inProgress (immediate), join_slow (3s), join_timeout (15s),
        rtc_negotiating, rtc_slow (8s), rtc_connected, rtc_reconnecting, rtc_restored;
        document equivalent success signals and visibility gating
      - code-map.zh-CN: outline responsibilities/locations for useRoomManager (join slow/timeout)
        and useConnectionFeedback (negotiation slow, reconnect/restored)
2025-12-05 19:10:00 +08:00
david_bai 27375c1a4d refactor(theme): use design tokens and fix dark mode visuals
- Replace hardcoded Tailwind colors (bg-white, bg-gray-50/100, text-gray-, border-gray-, divide-gray-*, text-blue-600/800, bg-blue-50) with design tokens (bg-card, bg-muted, text-foreground, text-muted-foreground, border-
    border, text-primary, hover:bg-accent, bg-primary/10).
  - ClipboardApp: update RichTextEditor toolbar/editor, FileUploadHandler, ShareCard, FileListDisplay, SendTabPanel, RetrieveTabPanel, FileTransferButton.
  - Blog UI: unify styles in list page, tag page, post page, ArticleListItem, and TableOfContents.
  - MDX/prose: normalize pre/code/table/blockquote/lists and figure captions; switch rehype table divider to theme token.
  - Misc: adjust HomeClient and HowItWorks copy colors to tokens.
  - No functional changes; light mode parity; improved contrast and consistency in dark mode.
2025-11-25 21:52:45 +08:00
david_bai 723a1ea086 feat(ux): cached roomId auto-join + theme toggle
- Receiver: auto-fill and join on Retrieve tab when input empty, not in room, no URL roomId, and cachedId exists (ClipboardApp + roomIdCache)
  - Sender: “Use cached ID” now immediately joins the room (add onUseCached + disabled to CachedIdActionButton; wire in SendTabPanel)
  - UI: add ThemeToggle and integrate into Header (desktop and mobile)
  - Styles: replace hardcoded white with design tokens in Retrieve panel (bg-card/text-card-foreground) for dark mode
  - Docs: update AI playbook flows and code-map
2025-11-25 12:24:28 +08:00
david_bai 89a38936b6 feat(blog-i18n): localize blog UI & SEO; add tag pages to sitemap
- Add Messages.meta.blog and text.blog (BlogTexts) to types/messages
  - Update all locales with blog UI strings and meta.blog
  - Localize blog list, tag pages, and article detail (titles, labels, dates)
  - Pass messages to ArticleListItem; TableOfContents supports localized title
  - Use dictionary-based metadata; alternates cover all supported locales
  - Sitemap: include /[lang]/blog/tag/{tag} and set blog list lastModified to newest post
  - JSON-LD: hardcode site URL in getSiteUrl() for consistency
2025-11-22 10:37:29 +08:00
david_bai b2aa493e2d chore(code):"Use Cache ID" button double-click to temporarily switch to "Save ID" function 2025-10-23 23:05:34 +08:00
david_bai 5ca89d71ad chore(code):Add cache room ID feature, no need to manually input room ID 2025-10-23 20:47:49 +08:00
david_bai 0621fb27db SEO: add JSON-LD structured data
- Add generic JSON-LD injector component and builders
  - components/seo/JsonLd.tsx
  - lib/seo/jsonld.ts
- Inject Organization and WebSite JSON-LD globally in [lang]/layout
- Inject WebApplication JSON-LD on the localized home page
  - Localize description/url/inLanguage and set alternateName ["PrivyDrop", "PrivyDrop APP"]
- Inject FAQPage JSON-LD only on /[lang]/faq (not on home)
  - Build Q&A from messages.text.faqs
- Inject BlogPosting + BreadcrumbList on blog post pages
  - Use frontmatter.cover as image, localized breadcrumbs

Notes
- Use stable @id anchors (/#organization, /#website, /[lang]#app, /[lang]/blog/[slug]#post)
- Respect multi-language setup across en/zh/ja/es/de/fr/ko
- SameAs limited to GitHub and X as provided
- Site URL resolved via NEXT_PUBLIC_SITE_URL or defaults to https://www.privydrop.app
2025-10-13 21:19:07 +08:00
david_bai 663082efe1 chore(doc): Replace Chinese comments with English comments 2025-10-08 15:59:50 +08:00
david_bai cfcd60145a build: refresh docker deployment workflow 2025-09-26 14:02:55 +08:00
david_bai 95331cb8e6 chore:Remove the redundant safety save button; Use English comments 2025-09-14 23:25:16 +08:00
david_bai 33f2f041ac fix:Try to fix the problem of incomplete file size in resumable download 2025-09-14 07:35:34 +08:00
david_bai 8627544946 chore:Exit the room even if it is in transit 2025-09-13 20:01:02 +08:00
david_bai 6f8f4f65bb chore:Save directory settings UI tip uses internationalization translation 2025-09-10 23:54:35 +08:00
david_bai 526e1b49c1 fix:Fix the issue of downloads failing in certain browsers 2025-09-08 23:59:29 +08:00
david_bai 8ff2302c14 code clear up 2025-09-08 00:12:02 +08:00
david_bai ec6a18dfc0 fix:Adapting to Firefox browser, not yet completed 2025-09-05 00:19:33 +08:00
david_bai a82ca50ee9 fix:Fix the issue of failing to join room with simple IDs
fix:Fix the issue of failing to join room with simple IDs
2025-09-01 00:04:31 +08:00
david_bai 0bcd2c0f97 chore:Random ID button added with simple ID switching function 2025-08-31 23:36:12 +08:00
david_bai d9894a3477 feat:Add a function to generate random-length IDs, enhancing room security 2025-08-25 00:22:00 +08:00
david_bai 7b9138ed08 fix(UI):Optimize mobile layout
The copy in the extraction method has been added with a fallback mechanism to improve adaptability
2025-08-25 00:04:03 +08:00
david_bai bb21c90a4e fix:Fix the incomplete cleanup issue when the receiver exits the room 2025-08-17 23:56:09 +08:00
david_bai caa861f1bb refactor:Optimize chaotic state management 2025-08-17 15:44:59 +08:00
david_bai cbbfae2733 fix:Fix the download count display issue 2025-08-17 13:24:41 +08:00
david_bai 20607be9aa fix:The recipient needs to clean the connection when leaving the room 2025-08-17 12:14:26 +08:00
david_bai 75f9ff39ae fix:Now there is a progress bar for file transfer 2025-08-17 10:10:40 +08:00
david_bai 083206bed3 refactor:Refactored the useRoomManager,useWebRTCConnection hook 2025-08-17 07:57:29 +08:00
david_bai 8f79a1ad16 fix:leave room button added to multiple languages. 2025-08-15 23:57:48 +08:00
david_bai 7ee9360b17 feat:Receiver adds a secure save button
Receiver adds a secure save button, used to save cache files during connection interruptions, making it convenient to resume transfers next time.
Button tooltip information added in multiple languages.
2025-08-15 23:49:24 +08:00
david_bai 307232bd15 fix:Attempt to fix the issue of asynchronous exit room status in the receiver 2025-08-14 23:02:33 +08:00
david_bai abe3220d0f feat:The sender side has also added the exit room function 2025-08-13 23:41:35 +08:00
david_bai 7038e79726 fix:Change the behavior of reloading the webpage when the receiver exits the room to a more elegant approach 2025-08-13 22:53:49 +08:00
david_bai 12cda8c030 fea:Add an elegant exit room feature for the recipient 2025-08-10 23:16:59 +08:00
david_bai e83a95b354 chore(lang):Change 'Start Sending' displayed on the send button to 'Sync'
Meanwhile, the previous click status Sended is changed to Synced, making it easier for people to understand the characteristic that a connection can sustain transmission
2025-08-03 16:03:52 +08:00
david_bai 245c4efcd0 fix(blog url bug): fix blog url bug
Fixed the bug of redundant language suffix in blog URLs, added lang to the blog homepage link to prevent language switching issues.
2025-08-02 23:27:02 +08:00