mirror of
https://github.com/f/awesome-chatgpt-prompts.git
synced 2026-02-12 15:52:47 +00:00
173 lines
5.6 KiB
JavaScript
173 lines
5.6 KiB
JavaScript
#!/usr/bin/env node
|
|
/* eslint-disable @typescript-eslint/no-require-imports */
|
|
|
|
/**
|
|
* Non-interactive setup script for Docker builds.
|
|
* Generates prompts.config.ts from environment variables.
|
|
*
|
|
* Usage: BRAND_NAME="My App" node scripts/docker-setup.js
|
|
*
|
|
* Environment Variables:
|
|
* BRAND_NAME - App name (default: "My Prompt Library")
|
|
* BRAND_DESCRIPTION - App description
|
|
* BRAND_LOGO - Logo path (default: "/logo.svg")
|
|
* BRAND_LOGO_DARK - Dark mode logo path
|
|
* BRAND_FAVICON - Favicon path
|
|
* BRAND_COLOR - Primary color hex (default: "#6366f1")
|
|
* THEME_RADIUS - Border radius: none|sm|md|lg (default: "sm")
|
|
* THEME_VARIANT - UI variant: default|flat|brutal (default: "default")
|
|
* THEME_DENSITY - Spacing: compact|default|comfortable (default: "default")
|
|
* AUTH_PROVIDERS - Comma-separated: github,google,credentials (default: "credentials")
|
|
* ALLOW_REGISTRATION - Allow public registration: true|false (default: "true")
|
|
* LOCALES - Comma-separated locales (default: "en")
|
|
* DEFAULT_LOCALE - Default locale (default: "en")
|
|
* FEATURE_PRIVATE_PROMPTS - Enable private prompts (default: "true")
|
|
* FEATURE_CHANGE_REQUESTS - Enable change requests (default: "true")
|
|
* FEATURE_CATEGORIES - Enable categories (default: "true")
|
|
* FEATURE_TAGS - Enable tags (default: "true")
|
|
* FEATURE_COMMENTS - Enable comments (default: "true")
|
|
* FEATURE_AI_SEARCH - Enable AI search (default: "false")
|
|
* FEATURE_AI_GENERATION - Enable AI generation (default: "false")
|
|
* FEATURE_MCP - Enable MCP (default: "false")
|
|
*/
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const CONFIG_FILE = path.join(__dirname, '..', 'prompts.config.ts');
|
|
|
|
function env(key, defaultValue) {
|
|
return process.env[key] || defaultValue;
|
|
}
|
|
|
|
function envBool(key, defaultValue) {
|
|
const val = process.env[key];
|
|
if (val === undefined) return defaultValue;
|
|
return val.toLowerCase() === 'true' || val === '1';
|
|
}
|
|
|
|
function envArray(key, defaultValue) {
|
|
const val = process.env[key];
|
|
if (!val) return defaultValue;
|
|
return val.split(',').map(s => s.trim()).filter(Boolean);
|
|
}
|
|
|
|
function generateConfig(config) {
|
|
return `import { defineConfig } from "@/lib/config";
|
|
|
|
// Docker build configuration - generated by docker-setup.js
|
|
const useCloneBranding = true;
|
|
|
|
export default defineConfig({
|
|
// Branding - your organization's identity
|
|
branding: {
|
|
name: "${config.branding.name}",
|
|
logo: "${config.branding.logo}",
|
|
logoDark: "${config.branding.logoDark}",
|
|
favicon: "${config.branding.favicon}",
|
|
description: "${config.branding.description}",
|
|
},
|
|
|
|
// Theme - design system configuration
|
|
theme: {
|
|
radius: "${config.theme.radius}",
|
|
variant: "${config.theme.variant}",
|
|
density: "${config.theme.density}",
|
|
colors: {
|
|
primary: "${config.theme.primaryColor}",
|
|
},
|
|
},
|
|
|
|
// Authentication plugins
|
|
auth: {
|
|
providers: [${config.auth.providers.map(p => `"${p}"`).join(', ')}],
|
|
allowRegistration: ${config.auth.allowRegistration},
|
|
},
|
|
|
|
// Internationalization
|
|
i18n: {
|
|
locales: [${config.i18n.locales.map(l => `"${l}"`).join(', ')}],
|
|
defaultLocale: "${config.i18n.defaultLocale}",
|
|
},
|
|
|
|
// Features
|
|
features: {
|
|
privatePrompts: ${config.features.privatePrompts},
|
|
changeRequests: ${config.features.changeRequests},
|
|
categories: ${config.features.categories},
|
|
tags: ${config.features.tags},
|
|
comments: ${config.features.comments},
|
|
aiSearch: ${config.features.aiSearch},
|
|
aiGeneration: ${config.features.aiGeneration},
|
|
mcp: ${config.features.mcp},
|
|
},
|
|
|
|
// Homepage customization (clone branding mode)
|
|
homepage: {
|
|
useCloneBranding,
|
|
achievements: {
|
|
enabled: false,
|
|
},
|
|
sponsors: {
|
|
enabled: false,
|
|
items: [],
|
|
},
|
|
},
|
|
});
|
|
`;
|
|
}
|
|
|
|
function main() {
|
|
console.log('🔧 Docker Setup: Generating prompts.config.ts...');
|
|
|
|
const config = {
|
|
branding: {
|
|
name: env('BRAND_NAME', 'My Prompt Library'),
|
|
description: env('BRAND_DESCRIPTION', 'Collect, organize, and share AI prompts'),
|
|
logo: env('BRAND_LOGO', '/logo.svg'),
|
|
logoDark: env('BRAND_LOGO_DARK', env('BRAND_LOGO', '/logo.svg')),
|
|
favicon: env('BRAND_FAVICON', '/logo.svg'),
|
|
},
|
|
theme: {
|
|
primaryColor: env('BRAND_COLOR', '#6366f1'),
|
|
radius: env('THEME_RADIUS', 'sm'),
|
|
variant: env('THEME_VARIANT', 'default'),
|
|
density: env('THEME_DENSITY', 'default'),
|
|
},
|
|
auth: {
|
|
providers: envArray('AUTH_PROVIDERS', ['credentials']),
|
|
allowRegistration: envBool('ALLOW_REGISTRATION', true),
|
|
},
|
|
i18n: {
|
|
locales: envArray('LOCALES', ['en']),
|
|
defaultLocale: env('DEFAULT_LOCALE', 'en'),
|
|
},
|
|
features: {
|
|
privatePrompts: envBool('FEATURE_PRIVATE_PROMPTS', true),
|
|
changeRequests: envBool('FEATURE_CHANGE_REQUESTS', true),
|
|
categories: envBool('FEATURE_CATEGORIES', true),
|
|
tags: envBool('FEATURE_TAGS', true),
|
|
comments: envBool('FEATURE_COMMENTS', true),
|
|
aiSearch: envBool('FEATURE_AI_SEARCH', false),
|
|
aiGeneration: envBool('FEATURE_AI_GENERATION', false),
|
|
mcp: envBool('FEATURE_MCP', false),
|
|
},
|
|
};
|
|
|
|
// Log configuration
|
|
console.log('');
|
|
console.log(' Brand: ', config.branding.name);
|
|
console.log(' Color: ', config.theme.primaryColor);
|
|
console.log(' Auth: ', config.auth.providers.join(', '));
|
|
console.log(' Locales: ', config.i18n.locales.join(', '));
|
|
console.log('');
|
|
|
|
// Generate and write config
|
|
const content = generateConfig(config);
|
|
fs.writeFileSync(CONFIG_FILE, content);
|
|
|
|
console.log('✅ Generated prompts.config.ts');
|
|
}
|
|
|
|
main();
|