Initial commit: ArchiTools modular dashboard platform
Complete Next.js 16 application with 13 fully implemented modules: Email Signature, Word XML Generator, Registratura, Dashboard, Tag Manager, IT Inventory, Address Book, Password Vault, Mini Utilities, Prompt Generator, Digital Signatures, Word Templates, and AI Chat. Includes core platform systems (module registry, feature flags, storage abstraction, i18n, theming, auth stub, tagging), 16 technical documentation files, Docker deployment config, and legacy HTML tool reference. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
import type { CompanyId } from '@/core/auth/types';
|
||||
|
||||
export interface Company {
|
||||
id: CompanyId;
|
||||
name: string;
|
||||
shortName: string;
|
||||
cui: string;
|
||||
color: string;
|
||||
address: string;
|
||||
city: string;
|
||||
}
|
||||
|
||||
export const COMPANIES: Record<CompanyId, Company> = {
|
||||
beletage: {
|
||||
id: 'beletage',
|
||||
name: 'Beletage SRL',
|
||||
shortName: 'Beletage',
|
||||
cui: '',
|
||||
color: '#22B5AB',
|
||||
address: 'str. Unirii, nr. 3, ap. 26',
|
||||
city: 'Cluj-Napoca',
|
||||
},
|
||||
'urban-switch': {
|
||||
id: 'urban-switch',
|
||||
name: 'Urban Switch SRL',
|
||||
shortName: 'Urban Switch',
|
||||
cui: '',
|
||||
color: '#6366f1',
|
||||
address: '',
|
||||
city: 'Cluj-Napoca',
|
||||
},
|
||||
'studii-de-teren': {
|
||||
id: 'studii-de-teren',
|
||||
name: 'Studii de Teren SRL',
|
||||
shortName: 'Studii de Teren',
|
||||
cui: '',
|
||||
color: '#f59e0b',
|
||||
address: '',
|
||||
city: 'Cluj-Napoca',
|
||||
},
|
||||
group: {
|
||||
id: 'group',
|
||||
name: 'Grup Companii',
|
||||
shortName: 'Grup',
|
||||
cui: '',
|
||||
color: '#64748b',
|
||||
address: '',
|
||||
city: 'Cluj-Napoca',
|
||||
},
|
||||
};
|
||||
|
||||
export const COMPANY_LIST = Object.values(COMPANIES);
|
||||
@@ -0,0 +1,107 @@
|
||||
export interface ExternalTool {
|
||||
id: string;
|
||||
name: string;
|
||||
description: string;
|
||||
url: string;
|
||||
icon: string;
|
||||
category: 'dev' | 'tools' | 'monitoring' | 'security';
|
||||
}
|
||||
|
||||
export const EXTERNAL_TOOLS: ExternalTool[] = [
|
||||
{
|
||||
id: 'gitea',
|
||||
name: 'Gitea',
|
||||
description: 'Depozit cod sursă',
|
||||
url: 'http://10.10.10.166:3002',
|
||||
icon: 'git-branch',
|
||||
category: 'dev',
|
||||
},
|
||||
{
|
||||
id: 'portainer',
|
||||
name: 'Portainer',
|
||||
description: 'Management containere Docker',
|
||||
url: '',
|
||||
icon: 'container',
|
||||
category: 'dev',
|
||||
},
|
||||
{
|
||||
id: 'minio',
|
||||
name: 'MinIO',
|
||||
description: 'Object storage',
|
||||
url: 'http://10.10.10.166:9003',
|
||||
icon: 'database',
|
||||
category: 'dev',
|
||||
},
|
||||
{
|
||||
id: 'n8n',
|
||||
name: 'N8N',
|
||||
description: 'Automatizări workflow',
|
||||
url: 'http://10.10.10.166:5678',
|
||||
icon: 'workflow',
|
||||
category: 'tools',
|
||||
},
|
||||
{
|
||||
id: 'stirling-pdf',
|
||||
name: 'Stirling PDF',
|
||||
description: 'Manipulare PDF',
|
||||
url: 'http://10.10.10.166:8087',
|
||||
icon: 'file-text',
|
||||
category: 'tools',
|
||||
},
|
||||
{
|
||||
id: 'it-tools',
|
||||
name: 'IT-Tools',
|
||||
description: 'Utilitare tehnice',
|
||||
url: 'http://10.10.10.166:8085',
|
||||
icon: 'wrench',
|
||||
category: 'tools',
|
||||
},
|
||||
{
|
||||
id: 'filebrowser',
|
||||
name: 'Filebrowser',
|
||||
description: 'Manager fișiere',
|
||||
url: 'http://10.10.10.166:8086',
|
||||
icon: 'folder',
|
||||
category: 'tools',
|
||||
},
|
||||
{
|
||||
id: 'uptime-kuma',
|
||||
name: 'Uptime Kuma',
|
||||
description: 'Monitorizare disponibilitate',
|
||||
url: 'http://10.10.10.166:3001',
|
||||
icon: 'activity',
|
||||
category: 'monitoring',
|
||||
},
|
||||
{
|
||||
id: 'netdata',
|
||||
name: 'Netdata',
|
||||
description: 'Metrici performanță server',
|
||||
url: 'http://10.10.10.166:19999',
|
||||
icon: 'bar-chart-3',
|
||||
category: 'monitoring',
|
||||
},
|
||||
{
|
||||
id: 'dozzle',
|
||||
name: 'Dozzle',
|
||||
description: 'Loguri containere',
|
||||
url: 'http://10.10.10.166:9999',
|
||||
icon: 'scroll-text',
|
||||
category: 'monitoring',
|
||||
},
|
||||
{
|
||||
id: 'crowdsec',
|
||||
name: 'CrowdSec',
|
||||
description: 'Protecție și securitate rețea',
|
||||
url: 'http://10.10.10.166:8088',
|
||||
icon: 'shield',
|
||||
category: 'security',
|
||||
},
|
||||
{
|
||||
id: 'authentik',
|
||||
name: 'Authentik',
|
||||
description: 'Autentificare SSO',
|
||||
url: 'http://10.10.10.166:9100',
|
||||
icon: 'key-round',
|
||||
category: 'security',
|
||||
},
|
||||
];
|
||||
@@ -0,0 +1,119 @@
|
||||
import type { FeatureFlag } from '@/core/feature-flags/types';
|
||||
|
||||
export const DEFAULT_FLAGS: FeatureFlag[] = [
|
||||
// Module flags
|
||||
{
|
||||
key: 'module.registratura',
|
||||
enabled: true,
|
||||
label: 'Registratură',
|
||||
description: 'Registru de corespondență multi-firmă',
|
||||
category: 'module',
|
||||
overridable: true,
|
||||
},
|
||||
{
|
||||
key: 'module.email-signature',
|
||||
enabled: true,
|
||||
label: 'Generator Semnătură Email',
|
||||
description: 'Configurator semnătură email',
|
||||
category: 'module',
|
||||
overridable: true,
|
||||
},
|
||||
{
|
||||
key: 'module.word-xml',
|
||||
enabled: true,
|
||||
label: 'Generator XML Word',
|
||||
description: 'Generator Custom XML Parts pentru Word',
|
||||
category: 'module',
|
||||
overridable: true,
|
||||
},
|
||||
{
|
||||
key: 'module.prompt-generator',
|
||||
enabled: true,
|
||||
label: 'Generator Prompturi',
|
||||
description: 'Constructor de prompturi structurate',
|
||||
category: 'module',
|
||||
overridable: true,
|
||||
},
|
||||
{
|
||||
key: 'module.digital-signatures',
|
||||
enabled: false,
|
||||
label: 'Semnături și Ștampile',
|
||||
description: 'Bibliotecă semnături digitale',
|
||||
category: 'module',
|
||||
overridable: true,
|
||||
},
|
||||
{
|
||||
key: 'module.password-vault',
|
||||
enabled: false,
|
||||
label: 'Seif Parole',
|
||||
description: 'Depozit intern de credențiale',
|
||||
category: 'module',
|
||||
overridable: true,
|
||||
},
|
||||
{
|
||||
key: 'module.it-inventory',
|
||||
enabled: false,
|
||||
label: 'Inventar IT',
|
||||
description: 'Evidența echipamentelor',
|
||||
category: 'module',
|
||||
overridable: true,
|
||||
},
|
||||
{
|
||||
key: 'module.address-book',
|
||||
enabled: false,
|
||||
label: 'Contacte',
|
||||
description: 'Clienți, furnizori, instituții',
|
||||
category: 'module',
|
||||
overridable: true,
|
||||
},
|
||||
{
|
||||
key: 'module.word-templates',
|
||||
enabled: false,
|
||||
label: 'Șabloane Word',
|
||||
description: 'Bibliotecă contracte și rapoarte',
|
||||
category: 'module',
|
||||
overridable: true,
|
||||
},
|
||||
{
|
||||
key: 'module.tag-manager',
|
||||
enabled: true,
|
||||
label: 'Manager Etichete',
|
||||
description: 'Administrare etichete',
|
||||
category: 'module',
|
||||
overridable: true,
|
||||
},
|
||||
{
|
||||
key: 'module.mini-utilities',
|
||||
enabled: false,
|
||||
label: 'Utilitare',
|
||||
description: 'Calculatoare și instrumente text',
|
||||
category: 'module',
|
||||
overridable: true,
|
||||
},
|
||||
{
|
||||
key: 'module.ai-chat',
|
||||
enabled: false,
|
||||
label: 'Chat AI',
|
||||
description: 'Interfață asistent AI',
|
||||
category: 'module',
|
||||
overridable: true,
|
||||
},
|
||||
|
||||
// System flags
|
||||
{
|
||||
key: 'system.dark-mode',
|
||||
enabled: true,
|
||||
label: 'Mod întunecat',
|
||||
description: 'Activează tema întunecată',
|
||||
category: 'system',
|
||||
overridable: true,
|
||||
},
|
||||
{
|
||||
key: 'system.external-links',
|
||||
enabled: true,
|
||||
label: 'Linkuri externe',
|
||||
description: 'Afișează linkuri instrumente externe în navigare',
|
||||
category: 'system',
|
||||
overridable: true,
|
||||
},
|
||||
];
|
||||
@@ -0,0 +1,37 @@
|
||||
import type { ModuleConfig } from '@/core/module-registry/types';
|
||||
import { registerModules } from '@/core/module-registry';
|
||||
|
||||
import { registraturaConfig } from '@/modules/registratura/config';
|
||||
import { emailSignatureConfig } from '@/modules/email-signature/config';
|
||||
import { wordXmlConfig } from '@/modules/word-xml/config';
|
||||
import { promptGeneratorConfig } from '@/modules/prompt-generator/config';
|
||||
import { digitalSignaturesConfig } from '@/modules/digital-signatures/config';
|
||||
import { passwordVaultConfig } from '@/modules/password-vault/config';
|
||||
import { itInventoryConfig } from '@/modules/it-inventory/config';
|
||||
import { addressBookConfig } from '@/modules/address-book/config';
|
||||
import { wordTemplatesConfig } from '@/modules/word-templates/config';
|
||||
import { tagManagerConfig } from '@/modules/tag-manager/config';
|
||||
import { miniUtilitiesConfig } from '@/modules/mini-utilities/config';
|
||||
import { aiChatConfig } from '@/modules/ai-chat/config';
|
||||
|
||||
/**
|
||||
* Toate configurările modulelor ArchiTools, ordonate după navOrder.
|
||||
* Dashboard-ul nu este inclus deoarece este pagina principală, nu un modul standard.
|
||||
*/
|
||||
export const MODULE_CONFIGS: ModuleConfig[] = [
|
||||
registraturaConfig, // navOrder: 10 | operations
|
||||
passwordVaultConfig, // navOrder: 11 | operations
|
||||
emailSignatureConfig, // navOrder: 20 | generators
|
||||
wordXmlConfig, // navOrder: 21 | generators
|
||||
wordTemplatesConfig, // navOrder: 22 | generators
|
||||
digitalSignaturesConfig, // navOrder: 30 | management
|
||||
itInventoryConfig, // navOrder: 31 | management
|
||||
addressBookConfig, // navOrder: 32 | management
|
||||
tagManagerConfig, // navOrder: 40 | tools
|
||||
miniUtilitiesConfig, // navOrder: 41 | tools
|
||||
promptGeneratorConfig, // navOrder: 50 | ai
|
||||
aiChatConfig, // navOrder: 51 | ai
|
||||
];
|
||||
|
||||
// Înregistrare automată a tuturor modulelor în registru
|
||||
registerModules(MODULE_CONFIGS);
|
||||
@@ -0,0 +1,51 @@
|
||||
import { getAllModules, MODULE_CATEGORY_LABELS } from '@/core/module-registry';
|
||||
import type { ModuleCategory } from '@/core/module-registry';
|
||||
|
||||
export interface NavGroup {
|
||||
category: ModuleCategory;
|
||||
label: string;
|
||||
items: NavItem[];
|
||||
}
|
||||
|
||||
export interface NavItem {
|
||||
id: string;
|
||||
label: string;
|
||||
icon: string;
|
||||
href: string;
|
||||
featureFlag: string;
|
||||
}
|
||||
|
||||
const CATEGORY_ORDER: ModuleCategory[] = [
|
||||
'operations',
|
||||
'generators',
|
||||
'management',
|
||||
'tools',
|
||||
'ai',
|
||||
];
|
||||
|
||||
export function buildNavigation(): NavGroup[] {
|
||||
const modules = getAllModules();
|
||||
const groups: NavGroup[] = [];
|
||||
|
||||
for (const category of CATEGORY_ORDER) {
|
||||
const items = modules
|
||||
.filter((m) => m.category === category)
|
||||
.map((m) => ({
|
||||
id: m.id,
|
||||
label: m.name,
|
||||
icon: m.icon,
|
||||
href: m.route,
|
||||
featureFlag: m.featureFlag,
|
||||
}));
|
||||
|
||||
if (items.length > 0) {
|
||||
groups.push({
|
||||
category,
|
||||
label: MODULE_CATEGORY_LABELS[category],
|
||||
items,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return groups;
|
||||
}
|
||||
Reference in New Issue
Block a user