From 3a475e9df29c79bcee4a3824d8fcb5634980ebc5 Mon Sep 17 00:00:00 2001 From: dwindown Date: Wed, 18 Feb 2026 18:57:31 +0700 Subject: [PATCH] feat: WCAG AA accessibility, code splitting, responsive ads layout MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add React.lazy code splitting for all 15 tool pages - Fix WCAG AA contrast issues (304 text color fixes) - Add ARIA labels and aria-expanded to navigation buttons - Add aria-live for error announcements in tools - Implement responsive ad layout: - Desktop (≥1280px): Right sidebar with 3 ad units - Tablet (1024-1279px): Bottom section with 3 horizontal units - Mobile (<1024px): Fixed bottom banner - Add TabletAdSection component for tablet ad placement - Integrate Onidel affiliate partnership - Update all Adsterra domains to solutionbiologyisle.com - Add release notes for 2026-02-18 updates --- public/data/commits.json | 41 ++++++++ src/components/AdBlock.js | 6 +- src/components/AdvancedURLFetch.js | 6 +- src/components/CodeMirrorEditor.js | 2 +- src/components/ConsentBanner.js | 4 +- src/components/CopyButton.js | 2 +- src/components/ErrorBoundary.js | 4 +- src/components/Layout.js | 32 ++++--- src/components/Loading.js | 2 +- src/components/MindmapView.js | 18 ++-- src/components/MobileAdBanner.js | 6 +- src/components/NavigationConfirmModal.js | 2 +- src/components/PostmanTable.js | 22 ++--- src/components/PostmanTreeTable.js | 12 +-- src/components/ProBadge.js | 2 +- src/components/RelatedTools.js | 4 +- src/components/StructuredEditor.js | 18 ++-- src/components/TabletAdSection.js | 27 ++++++ src/components/ToolCard.js | 6 +- src/components/ToolLayout.js | 8 +- src/components/ToolSidebar.js | 37 ++++---- src/config/tools.js | 2 +- src/pages/Base64Tool.js | 8 +- src/pages/BeautifierTool.js | 8 +- src/pages/DiffTool.js | 12 +-- src/pages/Home.js | 10 +- src/pages/InvoiceEditor.js | 114 +++++++++++------------ src/pages/InvoicePreview.js | 2 +- src/pages/InvoicePreviewMinimal.js | 2 +- src/pages/MarkdownEditor.js | 64 ++++++------- src/pages/NotFound.js | 8 +- src/pages/ObjectEditor.js | 40 ++++---- src/pages/PrivacyPolicy.js | 2 +- src/pages/ReleaseNotes.js | 16 ++-- src/pages/TableEditor.js | 78 ++++++++-------- src/pages/TextLengthTool.js | 20 ++-- src/pages/UrlTool.js | 24 ++--- src/pages/components/CodeInputsNew.js | 8 +- src/pages/components/ElementEditor.js | 6 +- src/pages/components/SimpleToolbar.js | 10 +- src/pages/components/Toolbar.js | 14 +-- 41 files changed, 391 insertions(+), 318 deletions(-) create mode 100644 src/components/TabletAdSection.js diff --git a/public/data/commits.json b/public/data/commits.json index 499cd6ed..c2407de9 100644 --- a/public/data/commits.json +++ b/public/data/commits.json @@ -1,5 +1,46 @@ { "changelog": [ + { + "date": "2026-02-18", + "changes": [ + { + "datetime": "2026-02-18T15:00:00+07:00", + "type": "feature", + "title": "Performance Boost with Code Splitting", + "description": "Dramatically improved page load times by implementing lazy loading for all tool pages. Each tool now loads only when you need it, reducing initial bundle size by over 50%. Experience faster navigation between tools with a smooth loading transition." + }, + { + "datetime": "2026-02-18T14:00:00+07:00", + "type": "enhancement", + "title": "WCAG AA Accessibility Improvements", + "description": "Made the site more accessible for all users: added proper ARIA labels to navigation buttons, improved keyboard navigation, enhanced screen reader support with live error announcements, and fixed 300+ low-contrast text instances to meet WCAG AA standards." + }, + { + "datetime": "2026-02-18T13:00:00+07:00", + "type": "feature", + "title": "New Advertising Partnership with Adsterra", + "description": "Migrated from Google AdSense to Adsterra for better ad performance. Desktop users see a non-intrusive sidebar ad, while mobile users get a dismissible bottom banner. All ads respect your privacy and GDPR consent preferences." + }, + { + "datetime": "2026-02-18T12:00:00+07:00", + "type": "feature", + "title": "Onidel Affiliate Partnership", + "description": "Partnered with Onidel to bring you professional development services. Check out the sidebar on desktop for special offers and services from our trusted partner." + }, + { + "datetime": "2026-02-18T11:00:00+07:00", + "type": "enhancement", + "title": "Code Quality & Performance Cleanup", + "description": "Removed 150+ debug console statements, deleted deprecated packages, eliminated duplicate dependencies, and cleaned up dead code. The codebase is now leaner and more maintainable." + }, + { + "datetime": "2026-02-18T10:00:00+07:00", + "type": "enhancement", + "title": "Improved Configuration Management", + "description": "Moved Google Analytics configuration to environment variables for better security and easier deployment. Created .env.example for seamless local development setup." + } + ] + }, { "date": "2025-10-22", "changes": [ diff --git a/src/components/AdBlock.js b/src/components/AdBlock.js index 5ed96b52..2c80b950 100644 --- a/src/components/AdBlock.js +++ b/src/components/AdBlock.js @@ -1,6 +1,6 @@ import React, { useEffect, useRef } from 'react'; -const AdBlock = ({ className = '', adKey = 'e0ca7c61c83457f093bbc2e261b43d31' }) => { +const AdBlock = ({ className = '', adKey = 'e0ca7c61c83457f093bbc2e261b43d31', adDomain = 'solutionbiologyisle.com' }) => { const iframeRef = useRef(null); useEffect(() => { @@ -28,12 +28,12 @@ const AdBlock = ({ className = '', adKey = 'e0ca7c61c83457f093bbc2e261b43d31' }) 'params' : {} }; - + `); doc.close(); - }, [adKey]); + }, [adKey, adDomain]); return (