mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-22 15:26:41 +02:00
chore: archive inactive projects to apps-archived/
Move inactive projects out of active workspace: - bauntown (community website) - maerchenzauber (AI story generation) - memoro (voice memo app) - news (news aggregation) - nutriphi (nutrition tracking) - reader (reading app) - uload (URL shortener) - wisekeep (AI wisdom extraction) Update CLAUDE.md documentation: - Add presi to active projects - Document archived projects section - Update workspace configuration Archived apps can be re-activated by moving back to apps/ 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
b97149ac12
commit
61d181fbc2
3148 changed files with 437 additions and 46640 deletions
684
apps-archived/uload/apps/web/src/lib/utils/reserved-slugs.ts
Normal file
684
apps-archived/uload/apps/web/src/lib/utils/reserved-slugs.ts
Normal file
|
|
@ -0,0 +1,684 @@
|
|||
/**
|
||||
* Reserved slugs that cannot be used for workspace URLs
|
||||
* to prevent conflicts with system routes, common usernames,
|
||||
* and potential brand confusion
|
||||
*/
|
||||
export const RESERVED_SLUGS = [
|
||||
// uload specific routes
|
||||
'uload',
|
||||
'ulo',
|
||||
'u',
|
||||
'w',
|
||||
'p',
|
||||
'link',
|
||||
'links',
|
||||
'card',
|
||||
'cards',
|
||||
'workspace',
|
||||
'workspaces',
|
||||
'my',
|
||||
'analytics',
|
||||
'stats',
|
||||
'statistics',
|
||||
'click',
|
||||
'clicks',
|
||||
'qr',
|
||||
'qrcode',
|
||||
'preview',
|
||||
'embed',
|
||||
'widget',
|
||||
'share',
|
||||
'invite',
|
||||
'invites',
|
||||
'invitation',
|
||||
'invitations',
|
||||
'member',
|
||||
'members',
|
||||
'owner',
|
||||
'owners',
|
||||
|
||||
// System/Admin routes
|
||||
'admin',
|
||||
'api',
|
||||
'www',
|
||||
'mail',
|
||||
'support',
|
||||
'help',
|
||||
'docs',
|
||||
'documentation',
|
||||
'blog',
|
||||
'legal',
|
||||
'privacy',
|
||||
'terms',
|
||||
'tos',
|
||||
'contact',
|
||||
'about',
|
||||
'pricing',
|
||||
'prices',
|
||||
'features',
|
||||
'security',
|
||||
'status',
|
||||
'health',
|
||||
'ping',
|
||||
'webhook',
|
||||
'webhooks',
|
||||
'callback',
|
||||
'auth',
|
||||
'oauth',
|
||||
'sso',
|
||||
'login',
|
||||
'logout',
|
||||
'register',
|
||||
'signup',
|
||||
'signin',
|
||||
'signout',
|
||||
'dashboard',
|
||||
'settings',
|
||||
'preferences',
|
||||
'profile',
|
||||
'account',
|
||||
'accounts',
|
||||
'billing',
|
||||
'subscription',
|
||||
'subscriptions',
|
||||
'plan',
|
||||
'plans',
|
||||
'upgrade',
|
||||
'downgrade',
|
||||
'cancel',
|
||||
'delete',
|
||||
'remove',
|
||||
'edit',
|
||||
'update',
|
||||
'create',
|
||||
'add',
|
||||
'new',
|
||||
'manage',
|
||||
'management',
|
||||
'admin-panel',
|
||||
'control-panel',
|
||||
'cpanel',
|
||||
|
||||
// Common service names
|
||||
'cdn',
|
||||
'assets',
|
||||
'static',
|
||||
'public',
|
||||
'images',
|
||||
'img',
|
||||
'css',
|
||||
'js',
|
||||
'fonts',
|
||||
'uploads',
|
||||
'files',
|
||||
'download',
|
||||
'downloads',
|
||||
'archive',
|
||||
'backup',
|
||||
'export',
|
||||
'import',
|
||||
'sync',
|
||||
|
||||
// Common usernames/brands
|
||||
'admin',
|
||||
'administrator',
|
||||
'root',
|
||||
'system',
|
||||
'service',
|
||||
'bot',
|
||||
'user',
|
||||
'users',
|
||||
'team',
|
||||
'teams',
|
||||
'group',
|
||||
'groups',
|
||||
'org',
|
||||
'organization',
|
||||
'company',
|
||||
'corp',
|
||||
'inc',
|
||||
'llc',
|
||||
'gmbh',
|
||||
'ag',
|
||||
'sa',
|
||||
'ltd',
|
||||
'limited',
|
||||
|
||||
// Potential phishing/confusion - Tech Giants
|
||||
'google',
|
||||
'facebook',
|
||||
'meta',
|
||||
'twitter',
|
||||
'x',
|
||||
'instagram',
|
||||
'threads',
|
||||
'linkedin',
|
||||
'github',
|
||||
'gitlab',
|
||||
'bitbucket',
|
||||
'microsoft',
|
||||
'windows',
|
||||
'xbox',
|
||||
'apple',
|
||||
'iphone',
|
||||
'ipad',
|
||||
'mac',
|
||||
'amazon',
|
||||
'aws',
|
||||
'netflix',
|
||||
'spotify',
|
||||
'slack',
|
||||
'discord',
|
||||
'telegram',
|
||||
'whatsapp',
|
||||
'signal',
|
||||
'zoom',
|
||||
'teams',
|
||||
'skype',
|
||||
'notion',
|
||||
'trello',
|
||||
'asana',
|
||||
'jira',
|
||||
'confluence',
|
||||
'atlassian',
|
||||
'adobe',
|
||||
'figma',
|
||||
'canva',
|
||||
'dropbox',
|
||||
'box',
|
||||
'drive',
|
||||
'onedrive',
|
||||
'icloud',
|
||||
'oracle',
|
||||
'salesforce',
|
||||
'hubspot',
|
||||
'mailchimp',
|
||||
'sendgrid',
|
||||
'twilio',
|
||||
'stripe',
|
||||
'paypal',
|
||||
'square',
|
||||
'shopify',
|
||||
'wix',
|
||||
'wordpress',
|
||||
'squarespace',
|
||||
'godaddy',
|
||||
'namecheap',
|
||||
'cloudflare',
|
||||
'vercel',
|
||||
'netlify',
|
||||
'heroku',
|
||||
'digitalocean',
|
||||
'linode',
|
||||
'vultr',
|
||||
'docker',
|
||||
'kubernetes',
|
||||
'redis',
|
||||
'mongodb',
|
||||
'postgres',
|
||||
'mysql',
|
||||
'firebase',
|
||||
'supabase',
|
||||
'openai',
|
||||
'chatgpt',
|
||||
'anthropic',
|
||||
'claude',
|
||||
'gemini',
|
||||
'bard',
|
||||
'copilot',
|
||||
'midjourney',
|
||||
'stability',
|
||||
'huggingface',
|
||||
|
||||
// German companies/brands
|
||||
'telekom',
|
||||
'vodafone',
|
||||
'o2',
|
||||
'1und1',
|
||||
'bmw',
|
||||
'mercedes',
|
||||
'mercedes-benz',
|
||||
'volkswagen',
|
||||
'vw',
|
||||
'audi',
|
||||
'porsche',
|
||||
'opel',
|
||||
'ford',
|
||||
'tesla',
|
||||
'siemens',
|
||||
'sap',
|
||||
'allianz',
|
||||
'deutsche-bank',
|
||||
'deutschebank',
|
||||
'commerzbank',
|
||||
'sparkasse',
|
||||
'volksbank',
|
||||
'postbank',
|
||||
'dhl',
|
||||
'dpd',
|
||||
'ups',
|
||||
'fedex',
|
||||
'hermes',
|
||||
'lufthansa',
|
||||
'eurowings',
|
||||
'ryanair',
|
||||
'easyjet',
|
||||
'adidas',
|
||||
'puma',
|
||||
'nike',
|
||||
'reebok',
|
||||
'bayer',
|
||||
'basf',
|
||||
'bosch',
|
||||
'continental',
|
||||
'thyssenkrupp',
|
||||
'henkel',
|
||||
'beiersdorf',
|
||||
'nivea',
|
||||
'hugo-boss',
|
||||
'hugoboss',
|
||||
'zalando',
|
||||
'aboutyou',
|
||||
'otto',
|
||||
'lidl',
|
||||
'aldi',
|
||||
'edeka',
|
||||
'rewe',
|
||||
'penny',
|
||||
'netto',
|
||||
'kaufland',
|
||||
'real',
|
||||
'metro',
|
||||
'saturn',
|
||||
'mediamarkt',
|
||||
'conrad',
|
||||
'dm',
|
||||
'rossmann',
|
||||
'mueller',
|
||||
'douglas',
|
||||
'tchibo',
|
||||
'ikea',
|
||||
'hornbach',
|
||||
'obi',
|
||||
'bauhaus',
|
||||
'toom',
|
||||
'hagebau',
|
||||
|
||||
// Banks & Financial
|
||||
'visa',
|
||||
'mastercard',
|
||||
'amex',
|
||||
'americanexpress',
|
||||
'discover',
|
||||
'bank',
|
||||
'banking',
|
||||
'credit',
|
||||
'debit',
|
||||
'loan',
|
||||
'mortgage',
|
||||
'insurance',
|
||||
'crypto',
|
||||
'bitcoin',
|
||||
'ethereum',
|
||||
'binance',
|
||||
'coinbase',
|
||||
'kraken',
|
||||
'revolut',
|
||||
'n26',
|
||||
'klarna',
|
||||
'wise',
|
||||
'transferwise',
|
||||
|
||||
// Social Media & Dating
|
||||
'youtube',
|
||||
'tiktok',
|
||||
'snapchat',
|
||||
'pinterest',
|
||||
'reddit',
|
||||
'tumblr',
|
||||
'flickr',
|
||||
'vimeo',
|
||||
'twitch',
|
||||
'medium',
|
||||
'substack',
|
||||
'patreon',
|
||||
'onlyfans',
|
||||
'tinder',
|
||||
'bumble',
|
||||
'hinge',
|
||||
'badoo',
|
||||
'lovoo',
|
||||
'parship',
|
||||
'elitepartner',
|
||||
|
||||
// E-commerce & Marketplaces
|
||||
'ebay',
|
||||
'etsy',
|
||||
'alibaba',
|
||||
'aliexpress',
|
||||
'wish',
|
||||
'shein',
|
||||
'wayfair',
|
||||
'booking',
|
||||
'expedia',
|
||||
'airbnb',
|
||||
'uber',
|
||||
'lyft',
|
||||
'bolt',
|
||||
'deliveroo',
|
||||
'doordash',
|
||||
'ubereats',
|
||||
'lieferando',
|
||||
'wolt',
|
||||
'gorillas',
|
||||
'getir',
|
||||
'flink',
|
||||
|
||||
// News & Media
|
||||
'nytimes',
|
||||
'bbc',
|
||||
'cnn',
|
||||
'reuters',
|
||||
'bloomberg',
|
||||
'forbes',
|
||||
'wsj',
|
||||
'guardian',
|
||||
'spiegel',
|
||||
'bild',
|
||||
'zeit',
|
||||
'faz',
|
||||
'sueddeutsche',
|
||||
'stern',
|
||||
'focus',
|
||||
'welt',
|
||||
'handelsblatt',
|
||||
'tagesschau',
|
||||
'zdf',
|
||||
'ard',
|
||||
'rtl',
|
||||
'sat1',
|
||||
'prosieben',
|
||||
|
||||
// Gaming & Entertainment
|
||||
'steam',
|
||||
'epic',
|
||||
'epicgames',
|
||||
'ubisoft',
|
||||
'ea',
|
||||
'electronicarts',
|
||||
'activision',
|
||||
'blizzard',
|
||||
'riot',
|
||||
'riotgames',
|
||||
'valve',
|
||||
'nintendo',
|
||||
'playstation',
|
||||
'sony',
|
||||
'xbox',
|
||||
'minecraft',
|
||||
'fortnite',
|
||||
'roblox',
|
||||
'pubg',
|
||||
'gta',
|
||||
'cod',
|
||||
'lol',
|
||||
'leagueoflegends',
|
||||
'valorant',
|
||||
'overwatch',
|
||||
'warcraft',
|
||||
|
||||
// Automotive & Transportation
|
||||
'uber',
|
||||
'lyft',
|
||||
'grab',
|
||||
'didi',
|
||||
'bolt',
|
||||
'freenow',
|
||||
'mytaxi',
|
||||
'blablacar',
|
||||
'flixbus',
|
||||
'flixmobility',
|
||||
'db',
|
||||
'deutschebahn',
|
||||
'bahn',
|
||||
'ice',
|
||||
'sbahn',
|
||||
'ubahn',
|
||||
'share-now',
|
||||
'car2go',
|
||||
'sixt',
|
||||
'europcar',
|
||||
'hertz',
|
||||
'avis',
|
||||
'enterprise',
|
||||
|
||||
// Food & Beverage Brands
|
||||
'mcdonalds',
|
||||
'burgerking',
|
||||
'kfc',
|
||||
'subway',
|
||||
'starbucks',
|
||||
'dunkin',
|
||||
'dominos',
|
||||
'pizzahut',
|
||||
'papajohns',
|
||||
'coca-cola',
|
||||
'cocacola',
|
||||
'pepsi',
|
||||
'redbull',
|
||||
'monster',
|
||||
'nestle',
|
||||
'danone',
|
||||
'unilever',
|
||||
'kelloggs',
|
||||
'heinz',
|
||||
'nutella',
|
||||
'ferrero',
|
||||
'haribo',
|
||||
'ritter-sport',
|
||||
'rittersport',
|
||||
'milka',
|
||||
'lindt',
|
||||
|
||||
// Telecom & ISPs
|
||||
'att',
|
||||
'verizon',
|
||||
'tmobile',
|
||||
't-mobile',
|
||||
'orange',
|
||||
'bt',
|
||||
'sky',
|
||||
'virgin',
|
||||
'comcast',
|
||||
'spectrum',
|
||||
'cox',
|
||||
'unitymedia',
|
||||
'kabel-deutschland',
|
||||
'kabeldeutschland',
|
||||
'pyur',
|
||||
'netcologne',
|
||||
'mnet',
|
||||
|
||||
// Universities & Education
|
||||
'harvard',
|
||||
'stanford',
|
||||
'mit',
|
||||
'oxford',
|
||||
'cambridge',
|
||||
'yale',
|
||||
'princeton',
|
||||
'coursera',
|
||||
'udemy',
|
||||
'udacity',
|
||||
'edx',
|
||||
'khan',
|
||||
'khanacademy',
|
||||
'duolingo',
|
||||
'babbel',
|
||||
'rosetta',
|
||||
'rosettastone',
|
||||
|
||||
// Healthcare & Pharma
|
||||
'pfizer',
|
||||
'moderna',
|
||||
'johnson',
|
||||
'jnj',
|
||||
'novartis',
|
||||
'roche',
|
||||
'merck',
|
||||
'abbott',
|
||||
'medtronic',
|
||||
'cvs',
|
||||
'walgreens',
|
||||
'doctolib',
|
||||
'jameda',
|
||||
'aponeo',
|
||||
'docmorris',
|
||||
'shop-apotheke',
|
||||
'shopapotheke',
|
||||
|
||||
// Short/valuable names
|
||||
'a',
|
||||
'b',
|
||||
'c',
|
||||
'd',
|
||||
'e',
|
||||
'f',
|
||||
'g',
|
||||
'h',
|
||||
'i',
|
||||
'j',
|
||||
'k',
|
||||
'l',
|
||||
'm',
|
||||
'n',
|
||||
'o',
|
||||
'p',
|
||||
'q',
|
||||
'r',
|
||||
's',
|
||||
't',
|
||||
'u',
|
||||
'v',
|
||||
'w',
|
||||
'x',
|
||||
'y',
|
||||
'z',
|
||||
'ai',
|
||||
'ml',
|
||||
'io',
|
||||
'app',
|
||||
'web',
|
||||
'dev',
|
||||
'pro',
|
||||
'premium',
|
||||
'plus',
|
||||
'max',
|
||||
'ultra',
|
||||
'super',
|
||||
'mega',
|
||||
'nano',
|
||||
'micro',
|
||||
'mini',
|
||||
'test',
|
||||
'demo',
|
||||
'example',
|
||||
'sample',
|
||||
'temp',
|
||||
'tmp',
|
||||
'new',
|
||||
'old',
|
||||
'beta',
|
||||
'alpha',
|
||||
'v1',
|
||||
'v2',
|
||||
'v3',
|
||||
'latest',
|
||||
'stable',
|
||||
'main',
|
||||
'master',
|
||||
'default',
|
||||
'null',
|
||||
'undefined',
|
||||
'true',
|
||||
'false',
|
||||
'yes',
|
||||
'no',
|
||||
'on',
|
||||
'off',
|
||||
'all',
|
||||
'none',
|
||||
'one',
|
||||
'two',
|
||||
'three',
|
||||
'free',
|
||||
'trial',
|
||||
'sandbox',
|
||||
'staging',
|
||||
'production',
|
||||
'localhost',
|
||||
'www',
|
||||
'ftp',
|
||||
'sftp',
|
||||
'ssh',
|
||||
'http',
|
||||
'https',
|
||||
'ssl',
|
||||
'tls',
|
||||
'dns',
|
||||
'mx',
|
||||
'ns',
|
||||
'cname',
|
||||
'txt',
|
||||
'spf',
|
||||
'dkim',
|
||||
'dmarc',
|
||||
] as const;
|
||||
|
||||
/**
|
||||
* Check if a slug is reserved
|
||||
*/
|
||||
export function isSlugReserved(slug: string): boolean {
|
||||
return RESERVED_SLUGS.includes(slug.toLowerCase() as any);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate a slug for workspace creation
|
||||
* Returns an error message if invalid, null if valid
|
||||
*/
|
||||
export function validateWorkspaceSlug(slug: string): string | null {
|
||||
if (!slug) {
|
||||
return null; // Empty slug is allowed (auto-generated)
|
||||
}
|
||||
|
||||
// Check format
|
||||
if (!/^[a-z0-9\-]+$/.test(slug)) {
|
||||
return 'Workspace URL can only contain lowercase letters, numbers, and hyphens';
|
||||
}
|
||||
|
||||
// Check length
|
||||
if (slug.length < 2) {
|
||||
return 'Workspace URL must be at least 2 characters long';
|
||||
}
|
||||
|
||||
if (slug.length > 50) {
|
||||
return 'Workspace URL cannot be longer than 50 characters';
|
||||
}
|
||||
|
||||
// Check reserved
|
||||
if (isSlugReserved(slug)) {
|
||||
return 'This workspace URL is reserved and cannot be used';
|
||||
}
|
||||
|
||||
// Check start/end with hyphen
|
||||
if (slug.startsWith('-') || slug.endsWith('-')) {
|
||||
return 'Workspace URL cannot start or end with a hyphen';
|
||||
}
|
||||
|
||||
// Check consecutive hyphens
|
||||
if (slug.includes('--')) {
|
||||
return 'Workspace URL cannot contain consecutive hyphens';
|
||||
}
|
||||
|
||||
return null; // Valid
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue