feat: Archivum skeleton — Go/GraphQL backend + Vue 3 PWA frontend

Full project scaffold: multi-stage Dockerfile (ARM64/AMD64), AsciiDoc↔TipTap
bridge, Setup Wizard, CodeMirror source editor, Git-backed storage layer,
LDAP+JWT auth skeleton, Tailwind mobile-first layout, and VS Code build/push
tasks targeting registry at 192.168.0.19:5000.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-10 13:07:01 +02:00
parent 3db6fec664
commit e6b64e3344
35 changed files with 1882 additions and 74 deletions

View File

@@ -0,0 +1,56 @@
<script setup lang="ts">
import { ref } from 'vue'
import Sidebar from './Sidebar.vue'
const sidebarOpen = ref(false)
</script>
<template>
<div class="flex h-screen overflow-hidden bg-surface-900 text-slate-100">
<!-- Mobile overlay -->
<transition name="fade">
<div
v-if="sidebarOpen"
class="fixed inset-0 z-20 bg-black/60 lg:hidden"
@click="sidebarOpen = false"
/>
</transition>
<!-- Sidebar slide-over on mobile, static on desktop -->
<aside
:class="[
'fixed inset-y-0 left-0 z-30 w-64 flex-shrink-0 bg-surface-800 border-r border-slate-700 transform transition-transform duration-200',
'lg:static lg:translate-x-0',
sidebarOpen ? 'translate-x-0' : '-translate-x-full',
]"
>
<Sidebar @close="sidebarOpen = false" />
</aside>
<!-- Main content -->
<div class="flex flex-col flex-1 min-w-0 overflow-hidden">
<!-- Mobile top bar -->
<header class="flex items-center gap-3 p-3 border-b border-slate-700 lg:hidden">
<button
class="p-1.5 rounded hover:bg-surface-700"
aria-label="Open navigation"
@click="sidebarOpen = true"
>
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
</svg>
</button>
<span class="font-semibold">Archivum</span>
</header>
<main class="flex-1 overflow-auto">
<router-view />
</main>
</div>
</div>
</template>
<style scoped>
.fade-enter-active, .fade-leave-active { transition: opacity 0.2s; }
.fade-enter-from, .fade-leave-to { opacity: 0; }
</style>