diff --git a/README.md b/README.md index 0a4b7dc4..c5dc26be 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ Not implemented ### Technical Implementations & Feature Specifications -- **Tool Suite**: Comprehensive conversion tools (URL/CSV to JSON, Number Base, Date, Timezone, Unit), advanced text tools (password generator, UUID v1/v4), and hardware tests (Camera, Microphone, Keyboard) with Web Audio API integration for alerts. Added Metronome with multi-tone functionality. All 48 tools converted to simple React state management for enhanced reliability. +- **Tool Suite**: Comprehensive conversion tools (URL/CSV to JSON, Number Base, Date, Timezone, Unit), image metadata extraction with local C2PA Content Credentials validation, advanced text tools (password generator, UUID v1/v4), and hardware tests (Camera, Microphone, Keyboard) with Web Audio API integration for alerts. SynthID watermark verification is not included. Added Metronome with multi-tone functionality. All 49 tools converted to simple React state management for enhanced reliability. - **Demo System**: Automated tour functionality with customizable speed controls (Slow 8s, Normal 5s, Fast 3s, Very Fast 1.5s), persistent state management, skip/stop controls, and speed preference persistence via localStorage. - **Offline Functionality**: All external dependencies for tools like QR and Barcode generators have been replaced with local JavaScript libraries to ensure 100% offline functionality. - **URL Sharing**: Implemented across all major tools, including timing tools, for state persistence and sharing. diff --git a/client/src/App.tsx b/client/src/App.tsx index 776f3fbe..09c2e356 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -36,6 +36,7 @@ const GraphQLFormatter = lazy(() => import("@/pages/tools/graphql-formatter")); const TimeFormatter = lazy(() => import("@/pages/tools/time-formatter")); const Base64Encoder = lazy(() => import("@/pages/tools/base64-encoder")); const CborEncoder = lazy(() => import("@/pages/tools/cbor-encoder")); +const ImageMetadata = lazy(() => import("@/pages/tools/image-metadata")); const UrlEncoder = lazy(() => import("@/pages/tools/url-encoder")); const JwtDecoder = lazy(() => import("@/pages/tools/jwt-decoder")); const TlsDecoder = lazy(() => import("@/pages/tools/tls-decoder")); @@ -134,6 +135,7 @@ function Router() { {/* Encoders */} + diff --git a/client/src/components/layout/Sidebar.tsx b/client/src/components/layout/Sidebar.tsx index e45cb01d..6c301396 100644 --- a/client/src/components/layout/Sidebar.tsx +++ b/client/src/components/layout/Sidebar.tsx @@ -99,7 +99,7 @@ export function Sidebar({ {/* NAV */}