Initial commit — Mek-Tech AI Consultancy Framework v2.0

This commit is contained in:
mo
2026-07-12 21:54:22 +00:00
commit 18921c021b
180 changed files with 28518 additions and 0 deletions
+19
View File
@@ -0,0 +1,19 @@
<% if (typeof showCrmBar !== 'undefined' && showCrmBar !== false) { %>
<div class="crm-bar fade-in-up">
<i data-lucide="link" style="width:16px;height:16px;color:var(--accent)"></i>
<span style="font-size:.72rem;color:var(--text-muted);font-weight:600">CRM Context</span>
<select onchange="if(this.value)window.location='?client_id='+this.value">
<option value="">— Selecteer cliënt —</option>
<% (allClients || []).forEach(function(c) { %>
<option value="<%= c.id %>"<%= activeClientId == c.id ? ' selected' : '' %>><%= c.name %> (<%= c.status %>)</option>
<% }); %>
</select>
<% if (activeClient) { %>
<div class="crm-hub">
<% (typeof clientHubLinks !== 'undefined' ? clientHubLinks : []).forEach(function(link) { %>
<a href="<%= link.href %>"><i data-lucide="<%= link.icon %>" style="width:12px;height:12px"></i> <%= link.label %></a>
<% }); %>
</div>
<% } %>
</div>
<% } %>
+10
View File
@@ -0,0 +1,10 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><%= typeof pageTitle !== 'undefined' ? pageTitle + ' — ' : '' %>Mek-Tech Enterprise</title>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/css/neon.css">
<link rel="stylesheet" href="/css/dynamic.css">
<link rel="icon" href="/img/favicon.svg" type="image/svg+xml">
<script src="https://unpkg.com/lucide@latest"></script>
<style>:root{--sb-w:220px;--hdr-h:52px;--accent-dim:#0099cc}</style>
+19
View File
@@ -0,0 +1,19 @@
<nav class="navbar" style="position:fixed;top:0;left:0;right:0;z-index:100;height:var(--hdr-h)">
<div class="nav-inner" style="height:100%;max-width:100%">
<a href="/" class="nav-brand"><img src="/img/logo.svg" class="nav-logo" alt="Mek-Tech"></a>
<div class="nav-search" style="display:flex;flex:1;max-width:340px;margin:0 1rem">
<input type="text" placeholder="Zoek cliënten, engagements, designs..." onkeydown="if(event.key==='Enter')window.location='/search?q='+encodeURIComponent(this.value)">
</div>
<div class="nav-right" style="display:flex;align-items:center;gap:.25rem">
<% if (activeClient) { %>
<a href="/clients/<%= activeClient.id %>" class="nav-icon-btn" title="Actieve cliënt: <%= activeClient.name %>" style="width:auto;padding:0 .6rem;font-size:.68rem;color:var(--accent)">
<i data-lucide="building-2"></i> <%= activeClient.name %>
</a>
<% } %>
<a href="/notifications" class="nav-icon-btn" title="Notificaties"><i data-lucide="bell"></i></a>
<a href="/ai" class="nav-icon-btn" title="AI Providers"><i data-lucide="sparkles"></i></a>
<a href="/settings" class="nav-icon-btn" title="Instellingen"><i data-lucide="settings"></i></a>
<a href="/auth/logout" class="nav-icon-btn nav-logout" title="Uitloggen" style="color:var(--red)!important"><i data-lucide="log-out"></i></a>
</div>
</div>
</nav>
+30
View File
@@ -0,0 +1,30 @@
<% var wsRackId = typeof rack !== 'undefined' && rack ? rack.id : (typeof rackId !== 'undefined' ? rackId : ''); %>
<% var wsTab = typeof workspaceTab !== 'undefined' ? workspaceTab : 'rack'; %>
<% var wsFlowId = typeof flowDiagram !== 'undefined' && flowDiagram ? flowDiagram.id : null; %>
<% var wsLandscapeId = typeof landscapeDiagram !== 'undefined' && landscapeDiagram ? landscapeDiagram.id : null; %>
<nav class="rack-ws-nav">
<div class="rwn-inner">
<a href="/racks/<%= wsRackId %>" class="rwn-tab <%= wsTab === 'rack' ? 'active' : '' %>"><i data-lucide="server"></i> Rack Design</a>
<a href="<%= wsFlowId ? '/racks/' + wsRackId + '/diagram/' + wsFlowId : '/racks/' + wsRackId + '/flow/new' %>" class="rwn-tab <%= wsTab === 'flow' ? 'active' : '' %>"><i data-lucide="git-branch"></i> Applicatie Flow</a>
<a href="<%= wsLandscapeId ? '/racks/' + wsRackId + '/diagram/' + wsLandscapeId : '/racks/' + wsRackId + '/landscape/new' %>" class="rwn-tab <%= wsTab === 'landscape' ? 'active' : '' %>"><i data-lucide="layers"></i> Landschap</a>
<a href="/racks/<%= wsRackId %>/studio" class="rwn-tab <%= wsTab === 'studio' ? 'active' : '' %>"><i data-lucide="layout-panel-left"></i> Studio</a>
<a href="/racks/<%= wsRackId %>/report" class="rwn-tab <%= wsTab === 'report' ? 'active' : '' %>"><i data-lucide="file-text"></i> Rapport</a>
</div>
</nav>
<style>
.rack-ws-nav{background:linear-gradient(90deg,rgba(10,22,40,.98),rgba(20,45,75,.98));border-bottom:1px solid rgba(0,212,255,.25);position:sticky;top:0;z-index:300;box-shadow:0 4px 20px rgba(0,0,0,.25)}
.rwn-inner{display:flex;align-items:center;gap:.25rem;padding:.4rem .75rem;overflow-x:auto;max-width:100%}
.rwn-tab{display:inline-flex;align-items:center;gap:.35rem;padding:.45rem .75rem;border-radius:8px;font-size:.72rem;font-weight:600;color:rgba(255,255,255,.65);text-decoration:none;white-space:nowrap;border:1px solid transparent;transition:all .15s}
.rwn-tab:hover{color:#fff;background:rgba(0,212,255,.08);border-color:rgba(0,212,255,.2)}
.rwn-tab.active{color:var(--accent,#00d4ff);background:rgba(0,212,255,.12);border-color:rgba(0,212,255,.35);box-shadow:0 0 16px rgba(0,212,255,.12)}
.rwn-tab svg{width:14px;height:14px}
body.has-rack-ws-nav .navbar{position:relative}
body.arch-editor.has-rack-ws-nav .arch-topbar{top:42px}
body.arch-editor.has-rack-ws-nav .rack-ws-nav{top:0}
body.arch-editor.has-rack-ws-nav .rack-context-bar{top:90px}
body.arch-editor.has-rack-ws-nav .editor-layout{padding-top:90px}
body.arch-editor.embed-mode .arch-topbar,
body.arch-editor.embed-mode .rack-context-bar,
body.arch-editor.embed-mode .rack-ws-nav{display:none!important}
body.arch-editor.embed-mode .editor-layout{padding-top:0!important;height:100vh}
</style>
+2
View File
@@ -0,0 +1,2 @@
<script>if(typeof lucide!=='undefined')lucide.createIcons();</script>
<script src="/js/theme.js"></script>
+20
View File
@@ -0,0 +1,20 @@
<aside class="sidebar" style="position:fixed;top:var(--hdr-h);left:0;width:var(--sb-w);height:calc(100vh - var(--hdr-h));background:var(--bg-nav);border-right:1px solid var(--border);display:flex;flex-direction:column;z-index:50;overflow-y:auto">
<div class="sb-brand" style="padding:1rem 1.1rem;border-bottom:1px solid var(--border)">
<h2 style="font-size:.82rem;font-weight:700;color:var(--text);display:flex;align-items:center;gap:.4rem;margin:0">
<span class="brand-dot" style="width:7px;height:7px;border-radius:50%;background:var(--accent);box-shadow:0 0 8px var(--accent);animation:pulse-glow 2s ease-in-out infinite"></span>
Mek-Tech
</h2>
<p style="font-size:.6rem;color:var(--text-dim);margin:.15rem 0 0">Consultant Platform</p>
</div>
<nav class="sb-nav" style="flex:1;padding:.4rem 0">
<% (typeof navSections !== 'undefined' ? navSections : []).forEach(function(section) { %>
<div class="sb-sep" style="font-size:.55rem;color:var(--text-dim);text-transform:uppercase;letter-spacing:.6px;padding:.6rem 1rem .2rem;font-weight:600"><%= section.label %></div>
<% section.items.forEach(function(item) { %>
<a href="<%= activeClientId && !item.href.includes('client_id') && item.href !== '/' && !item.href.startsWith('/clients/') && !item.href.startsWith('/settings') && !item.href.startsWith('/ai') ? item.href + (item.href.includes('?') ? '&' : '?') + 'client_id=' + activeClientId : item.href %>" class="sb-item<%= item.active ? ' active' : '' %>" style="display:flex;align-items:center;gap:.55rem;padding:.5rem .9rem;margin:1px .45rem;border-radius:8px;font-size:.78rem;color:var(--text-muted);text-decoration:none;transition:all .18s">
<span class="sb-icon" style="width:20px;display:flex;align-items:center;justify-content:center"><i data-lucide="<%= item.icon %>"></i></span>
<span><%= item.label %></span>
</a>
<% }); %>
<% }); %>
</nav>
</aside>