feat: comprehensive SEO optimization and GDPR compliance
- Added Terms of Service and Privacy Policy pages with contact info - Implemented Google Analytics with Consent Mode v2 for GDPR compliance - Created sitemap.xml and robots.txt for search engine optimization - Added dynamic meta tags, Open Graph, and structured data (JSON-LD) - Implemented GDPR consent banner with TCF 2.2 compatibility - Enhanced sidebar with category-colored hover states and proper active/inactive styling - Fixed all ESLint warnings for clean deployment - Added comprehensive SEO utilities and privacy-first analytics tracking Ready for production deployment with full legal compliance and SEO optimization.
This commit is contained in:
137
src/config/tools.js
Normal file
137
src/config/tools.js
Normal file
@@ -0,0 +1,137 @@
|
||||
import { Edit3, Table, LinkIcon, Hash, Wand2, GitCompare, Type, Home } from 'lucide-react';
|
||||
|
||||
// Master tools configuration - single source of truth
|
||||
export const TOOL_CATEGORIES = {
|
||||
navigation: {
|
||||
name: 'Navigation',
|
||||
color: 'from-slate-500 to-slate-600',
|
||||
hoverColor: 'slate-600',
|
||||
textColor: 'text-slate-600',
|
||||
hoverTextColor: 'hover:text-slate-700 dark:hover:text-slate-400'
|
||||
},
|
||||
editor: {
|
||||
name: 'Editor',
|
||||
color: 'from-blue-500 to-cyan-500',
|
||||
hoverColor: 'blue-600',
|
||||
textColor: 'text-blue-600',
|
||||
hoverTextColor: 'hover:text-blue-700 dark:hover:text-blue-400'
|
||||
},
|
||||
encoder: {
|
||||
name: 'Encoder',
|
||||
color: 'from-purple-500 to-pink-500',
|
||||
hoverColor: 'purple-600',
|
||||
textColor: 'text-purple-600',
|
||||
hoverTextColor: 'hover:text-purple-700 dark:hover:text-purple-400'
|
||||
},
|
||||
formatter: {
|
||||
name: 'Formatter',
|
||||
color: 'from-green-500 to-emerald-500',
|
||||
hoverColor: 'green-600',
|
||||
textColor: 'text-green-600',
|
||||
hoverTextColor: 'hover:text-green-700 dark:hover:text-green-400'
|
||||
},
|
||||
analyzer: {
|
||||
name: 'Analyzer',
|
||||
color: 'from-orange-500 to-red-500',
|
||||
hoverColor: 'orange-600',
|
||||
textColor: 'text-orange-600',
|
||||
hoverTextColor: 'hover:text-orange-700 dark:hover:text-orange-400'
|
||||
}
|
||||
};
|
||||
|
||||
export const TOOLS = [
|
||||
{
|
||||
path: '/object-editor',
|
||||
name: 'Object Editor',
|
||||
icon: Edit3,
|
||||
description: 'Visual editor for JSON and PHP serialized objects with mindmap visualization',
|
||||
tags: ['Visual', 'JSON', 'PHP', 'Objects', 'Editor'],
|
||||
category: 'editor'
|
||||
},
|
||||
{
|
||||
path: '/table-editor',
|
||||
name: 'Table Editor',
|
||||
icon: Table,
|
||||
description: 'Import, edit, and export tabular data from URLs, files, or paste CSV/JSON',
|
||||
tags: ['Table', 'CSV', 'JSON', 'Data', 'Editor'],
|
||||
category: 'editor'
|
||||
},
|
||||
{
|
||||
path: '/url',
|
||||
name: 'URL Encoder/Decoder',
|
||||
icon: LinkIcon,
|
||||
description: 'Encode and decode URLs and query parameters',
|
||||
tags: ['URL', 'Encode', 'Decode'],
|
||||
category: 'encoder'
|
||||
},
|
||||
{
|
||||
path: '/base64',
|
||||
name: 'Base64 Encoder/Decoder',
|
||||
icon: Hash,
|
||||
description: 'Convert text to Base64 and back with support for files',
|
||||
tags: ['Base64', 'Encode', 'Binary'],
|
||||
category: 'encoder'
|
||||
},
|
||||
{
|
||||
path: '/beautifier',
|
||||
name: 'Code Beautifier/Minifier',
|
||||
icon: Wand2,
|
||||
description: 'Format and minify JSON, XML, SQL, CSS, and HTML code',
|
||||
tags: ['Format', 'Minify', 'Beautify'],
|
||||
category: 'formatter'
|
||||
},
|
||||
{
|
||||
path: '/diff',
|
||||
name: 'Text Diff Checker',
|
||||
icon: GitCompare,
|
||||
description: 'Compare two texts and highlight differences line by line',
|
||||
tags: ['Diff', 'Compare', 'Text'],
|
||||
category: 'analyzer'
|
||||
},
|
||||
{
|
||||
path: '/text-length',
|
||||
name: 'Text Length Checker',
|
||||
icon: Type,
|
||||
description: 'Analyze text length, word count, and other text statistics',
|
||||
tags: ['Text', 'Length', 'Statistics'],
|
||||
category: 'analyzer'
|
||||
}
|
||||
];
|
||||
|
||||
// Navigation tools (for sidebar)
|
||||
export const NAVIGATION_TOOLS = [
|
||||
{
|
||||
path: '/',
|
||||
name: 'Home',
|
||||
icon: Home,
|
||||
description: 'Back to homepage',
|
||||
category: 'navigation'
|
||||
},
|
||||
...TOOLS
|
||||
];
|
||||
|
||||
// Site configuration
|
||||
export const SITE_CONFIG = {
|
||||
domain: 'https://dewe.dev',
|
||||
title: 'Dewe.Dev',
|
||||
subtitle: 'Professional Developer Utilities',
|
||||
slogan: 'Code faster, debug smarter, ship better',
|
||||
description: 'Professional-grade utilities for modern developers',
|
||||
year: new Date().getFullYear(),
|
||||
totalTools: TOOLS.length
|
||||
};
|
||||
|
||||
// Helper functions
|
||||
export const getCategoryConfig = (categoryKey) => TOOL_CATEGORIES[categoryKey] || TOOL_CATEGORIES.navigation;
|
||||
|
||||
export const getToolsByCategory = (categoryKey) => TOOLS.filter(tool => tool.category === categoryKey);
|
||||
|
||||
export const getCategoryStats = () => {
|
||||
const stats = {};
|
||||
Object.keys(TOOL_CATEGORIES).forEach(key => {
|
||||
if (key !== 'navigation') {
|
||||
stats[key] = getToolsByCategory(key).length;
|
||||
}
|
||||
});
|
||||
return stats;
|
||||
};
|
||||
Reference in New Issue
Block a user