feat: major update - Markdown Editor, CodeMirror upgrades, SEO improvements, tool cleanup

- Added new Markdown Editor with live preview, GFM support, PDF/HTML/DOCX export
- Upgraded all paste fields to CodeMirror with syntax highlighting and expand/collapse
- Enhanced Object Editor with advanced URL fetching and preview mode
- Improved export views with syntax highlighting in Table/Object editors
- Implemented SEO improvements (FAQ schema, breadcrumbs, internal linking)
- Added Related Tools recommendations component
- Created custom 404 page with tool suggestions
- Consolidated tools: removed JSON, Serialize, CSV-JSON (merged into main editors)
- Updated documentation and cleaned up redundant files
- Updated release notes with user-centric improvements
This commit is contained in:
dwindown
2025-10-22 15:20:22 +07:00
parent 08d345eaeb
commit fb9c944366
40 changed files with 6927 additions and 1714 deletions

81
src/config/features.js Normal file
View File

@@ -0,0 +1,81 @@
/**
* Feature Toggle System
*
* Controls which features are available in FREE vs PRO versions
* Currently static, will be dynamic from database in the future
*/
// User tier - will be fetched from database/auth in the future
export const USER_TIER = {
FREE: 'free',
PRO: 'pro'
};
// Current user tier (static for now, will be dynamic)
// TODO: Replace with actual user tier from authentication/database
export const getCurrentUserTier = () => {
// For development/testing, you can change this
const staticTier = USER_TIER.PRO; // Change to USER_TIER.PRO to test pro features
// In the future, this will be:
// return getUserFromAuth()?.tier || USER_TIER.FREE;
return staticTier;
};
// Feature flags
export const FEATURES = {
// Advanced URL Fetch with headers, methods, body, auth
ADVANCED_URL_FETCH: {
name: 'Advanced URL Fetch',
description: 'Custom HTTP methods, headers, authentication, and request body',
tier: USER_TIER.PRO,
enabled: (userTier) => userTier === USER_TIER.PRO
},
// Future pro features can be added here
BULK_OPERATIONS: {
name: 'Bulk Operations',
description: 'Process multiple files or operations at once',
tier: USER_TIER.PRO,
enabled: (userTier) => userTier === USER_TIER.PRO
},
EXPORT_TEMPLATES: {
name: 'Export Templates',
description: 'Save and reuse custom export templates',
tier: USER_TIER.PRO,
enabled: (userTier) => userTier === USER_TIER.PRO
},
CLOUD_SYNC: {
name: 'Cloud Sync',
description: 'Sync your data and settings across devices',
tier: USER_TIER.PRO,
enabled: (userTier) => userTier === USER_TIER.PRO
}
};
// Helper function to check if a feature is enabled
export const isFeatureEnabled = (featureName) => {
const feature = FEATURES[featureName];
if (!feature) return false;
const userTier = getCurrentUserTier();
return feature.enabled(userTier);
};
// Helper function to get user tier
export const getUserTier = () => {
return getCurrentUserTier();
};
// Helper function to check if user is pro
export const isProUser = () => {
return getCurrentUserTier() === USER_TIER.PRO;
};
// Helper function to get feature info
export const getFeatureInfo = (featureName) => {
return FEATURES[featureName] || null;
};