diff --git a/Documentation/.gitignore b/Documentation/.gitignore
index d1d8530..1fba608 100644
--- a/Documentation/.gitignore
+++ b/Documentation/.gitignore
@@ -1,4 +1,6 @@
node_modules/
+.vitepress/dist/
+.vitepress/cache/
npm-debug.log
.DS_Store
*.log
diff --git a/Documentation/.vitepress/config.ts b/Documentation/.vitepress/config.ts
new file mode 100644
index 0000000..076b0df
--- /dev/null
+++ b/Documentation/.vitepress/config.ts
@@ -0,0 +1,136 @@
+import { defineConfig } from 'vitepress'
+
+export default defineConfig({
+ title: 'TLAS',
+ description: 'Tokenized License Approval System - Enterprise Blockchain Platform for Government License Management',
+
+ head: [
+ ['link', { rel: 'icon', type: 'image/svg+xml', href: '/logo.svg' }],
+ ['meta', { name: 'theme-color', content: '#0f172a' }],
+ ['meta', { name: 'og:type', content: 'website' }],
+ ['meta', { name: 'og:site_name', content: 'TLAS Documentation' }],
+ ],
+
+ lastUpdated: true,
+ cleanUrls: true,
+
+ themeConfig: {
+ logo: '/logo.svg',
+ siteTitle: 'TLAS',
+
+ nav: [
+ { text: 'Overview', link: '/overview/' },
+ { text: 'Business', link: '/business/' },
+ { text: 'Operations', link: '/operations/' },
+ { text: 'Departments', link: '/departments/' },
+ { text: 'Developers', link: '/developers/' },
+ { text: 'Compliance', link: '/compliance/' }
+ ],
+
+ sidebar: {
+ '/overview/': [
+ {
+ text: 'Platform Overview',
+ items: [
+ { text: 'Introduction', link: '/overview/' },
+ { text: 'Problem Statement', link: '/overview/problem' },
+ { text: 'Solution Architecture', link: '/overview/solution' },
+ { text: 'Key Capabilities', link: '/overview/capabilities' },
+ { text: 'Technology Stack', link: '/overview/technology' }
+ ]
+ }
+ ],
+ '/business/': [
+ {
+ text: 'Business Documentation',
+ items: [
+ { text: 'Executive Summary', link: '/business/' },
+ { text: 'Value Proposition', link: '/business/value-proposition' },
+ { text: 'Process Flows', link: '/business/process-flows' },
+ { text: 'Governance Model', link: '/business/governance' },
+ { text: 'Implementation Roadmap', link: '/business/roadmap' }
+ ]
+ }
+ ],
+ '/operations/': [
+ {
+ text: 'Operations Guide',
+ items: [
+ { text: 'Deployment Overview', link: '/operations/' },
+ { text: 'Infrastructure Requirements', link: '/operations/infrastructure' },
+ { text: 'Installation Guide', link: '/operations/installation' },
+ { text: 'Configuration', link: '/operations/configuration' },
+ { text: 'Monitoring & Alerts', link: '/operations/monitoring' },
+ { text: 'Backup & Recovery', link: '/operations/backup' },
+ { text: 'Security Hardening', link: '/operations/security' }
+ ]
+ }
+ ],
+ '/departments/': [
+ {
+ text: 'Department User Guide',
+ items: [
+ { text: 'Getting Started', link: '/departments/' },
+ { text: 'Application Processing', link: '/departments/processing' },
+ { text: 'Workflow Management', link: '/departments/workflows' },
+ { text: 'Document Verification', link: '/departments/verification' },
+ { text: 'License Issuance', link: '/departments/issuance' },
+ { text: 'Reporting & Analytics', link: '/departments/reporting' }
+ ]
+ }
+ ],
+ '/developers/': [
+ {
+ text: 'Developer Guide',
+ items: [
+ { text: 'API Overview', link: '/developers/' },
+ { text: 'Authentication', link: '/developers/authentication' },
+ { text: 'Core APIs', link: '/developers/core-apis' },
+ { text: 'Blockchain APIs', link: '/developers/blockchain-apis' },
+ { text: 'Webhooks', link: '/developers/webhooks' },
+ { text: 'SDKs & Libraries', link: '/developers/sdks' },
+ { text: 'Error Handling', link: '/developers/errors' }
+ ]
+ }
+ ],
+ '/compliance/': [
+ {
+ text: 'Compliance & Standards',
+ items: [
+ { text: 'Overview', link: '/compliance/' },
+ { text: 'Data Protection', link: '/compliance/data-protection' },
+ { text: 'Audit Framework', link: '/compliance/audit' },
+ { text: 'Security Standards', link: '/compliance/security' },
+ { text: 'Regulatory Alignment', link: '/compliance/regulatory' }
+ ]
+ }
+ ]
+ },
+
+ socialLinks: [
+ { icon: 'github', link: 'https://github.com/goa-gel' }
+ ],
+
+ footer: {
+ message: 'Tokenized License Approval System',
+ copyright: 'Copyright 2026 Government of Goa. All rights reserved.'
+ },
+
+ search: {
+ provider: 'local'
+ },
+
+ outline: {
+ level: [2, 3],
+ label: 'Contents'
+ }
+ },
+
+ markdown: {
+ theme: {
+ light: 'github-light',
+ dark: 'github-dark'
+ },
+ lineNumbers: true
+ }
+})
diff --git a/Documentation/.vitepress/theme/custom.css b/Documentation/.vitepress/theme/custom.css
new file mode 100644
index 0000000..c3882ca
--- /dev/null
+++ b/Documentation/.vitepress/theme/custom.css
@@ -0,0 +1,483 @@
+/**
+ * Goa-GEL Documentation Theme
+ * Modern, clean design with government branding
+ */
+
+:root {
+ /* Brand Colors - Inspired by Goa's vibrant culture */
+ --vp-c-brand-1: #6366f1;
+ --vp-c-brand-2: #818cf8;
+ --vp-c-brand-3: #4f46e5;
+ --vp-c-brand-soft: rgba(99, 102, 241, 0.14);
+
+ /* Accent Colors */
+ --goa-teal: #14b8a6;
+ --goa-gold: #f59e0b;
+ --goa-coral: #f43f5e;
+ --goa-emerald: #10b981;
+
+ /* Typography */
+ --vp-font-family-base: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
+ --vp-font-family-mono: 'JetBrains Mono', 'Fira Code', Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+
+ /* Sizing */
+ --vp-layout-max-width: 1440px;
+}
+
+/* Dark Mode Adjustments */
+.dark {
+ --vp-c-brand-1: #818cf8;
+ --vp-c-brand-2: #a5b4fc;
+ --vp-c-brand-3: #6366f1;
+ --vp-c-brand-soft: rgba(129, 140, 248, 0.16);
+}
+
+/* ============================================
+ HERO SECTION
+ ============================================ */
+
+.VPHero {
+ padding-bottom: 64px !important;
+}
+
+.VPHero .name {
+ background: linear-gradient(135deg, var(--vp-c-brand-1) 0%, var(--goa-teal) 50%, var(--goa-emerald) 100%);
+ -webkit-background-clip: text;
+ background-clip: text;
+ -webkit-text-fill-color: transparent;
+}
+
+.VPHero .text {
+ font-size: 48px !important;
+ line-height: 1.2 !important;
+ font-weight: 700 !important;
+}
+
+.VPHero .tagline {
+ font-size: 20px !important;
+ color: var(--vp-c-text-2);
+ max-width: 560px;
+}
+
+.VPHero .actions {
+ gap: 16px !important;
+}
+
+.VPHero .action .VPButton {
+ padding: 12px 28px !important;
+ font-size: 16px !important;
+ font-weight: 600 !important;
+ border-radius: 12px !important;
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
+}
+
+.VPHero .action .VPButton.brand {
+ background: linear-gradient(135deg, var(--vp-c-brand-1) 0%, var(--vp-c-brand-3) 100%) !important;
+ box-shadow: 0 4px 14px 0 rgba(99, 102, 241, 0.39) !important;
+}
+
+.VPHero .action .VPButton.brand:hover {
+ transform: translateY(-2px) !important;
+ box-shadow: 0 6px 20px 0 rgba(99, 102, 241, 0.5) !important;
+}
+
+.VPHero .action .VPButton.alt {
+ border: 2px solid var(--vp-c-brand-1) !important;
+ color: var(--vp-c-brand-1) !important;
+}
+
+.VPHero .action .VPButton.alt:hover {
+ background: var(--vp-c-brand-soft) !important;
+}
+
+/* Hero Image */
+.VPHero .image-container {
+ transform: perspective(1000px) rotateY(-5deg) !important;
+ transition: transform 0.5s ease !important;
+}
+
+.VPHero .image-container:hover {
+ transform: perspective(1000px) rotateY(0deg) !important;
+}
+
+/* ============================================
+ NAVIGATION
+ ============================================ */
+
+.VPNav {
+ backdrop-filter: saturate(180%) blur(20px);
+ background: rgba(255, 255, 255, 0.8) !important;
+}
+
+.dark .VPNav {
+ background: rgba(30, 30, 32, 0.85) !important;
+}
+
+.VPNavBar .title {
+ font-weight: 700 !important;
+ font-size: 18px !important;
+}
+
+.VPNavBarMenuLink {
+ font-weight: 500 !important;
+ transition: color 0.2s ease !important;
+}
+
+.VPNavBarMenuLink:hover {
+ color: var(--vp-c-brand-1) !important;
+}
+
+.VPNavBarMenuLink.active {
+ color: var(--vp-c-brand-1) !important;
+}
+
+/* ============================================
+ SIDEBAR
+ ============================================ */
+
+.VPSidebar {
+ scrollbar-width: thin;
+ scrollbar-color: var(--vp-c-divider) transparent;
+}
+
+.VPSidebar::-webkit-scrollbar {
+ width: 6px;
+}
+
+.VPSidebar::-webkit-scrollbar-thumb {
+ background: var(--vp-c-divider);
+ border-radius: 3px;
+}
+
+.VPSidebarItem .text {
+ transition: all 0.2s ease !important;
+}
+
+.VPSidebarItem.is-active > .item > .link > .text {
+ color: var(--vp-c-brand-1) !important;
+ font-weight: 600 !important;
+}
+
+.VPSidebarItem .indicator {
+ background: linear-gradient(135deg, var(--vp-c-brand-1) 0%, var(--goa-teal) 100%) !important;
+ width: 3px !important;
+ border-radius: 3px !important;
+}
+
+/* ============================================
+ CONTENT AREA
+ ============================================ */
+
+.VPDoc {
+ padding-bottom: 64px !important;
+}
+
+.vp-doc h1 {
+ font-size: 2.5rem !important;
+ font-weight: 800 !important;
+ letter-spacing: -0.02em;
+ background: linear-gradient(135deg, var(--vp-c-text-1) 0%, var(--vp-c-text-2) 100%);
+ -webkit-background-clip: text;
+ background-clip: text;
+}
+
+.vp-doc h2 {
+ font-size: 1.75rem !important;
+ font-weight: 700 !important;
+ padding-bottom: 12px !important;
+ border-bottom: 2px solid var(--vp-c-divider) !important;
+ margin-top: 48px !important;
+}
+
+.vp-doc h3 {
+ font-size: 1.35rem !important;
+ font-weight: 600 !important;
+ margin-top: 32px !important;
+}
+
+/* Links */
+.vp-doc a {
+ color: var(--vp-c-brand-1) !important;
+ text-decoration: none !important;
+ transition: all 0.2s ease !important;
+ border-bottom: 1px solid transparent;
+}
+
+.vp-doc a:hover {
+ border-bottom-color: var(--vp-c-brand-1);
+}
+
+/* Code Blocks */
+.vp-doc div[class*='language-'] {
+ border-radius: 12px !important;
+ margin: 24px 0 !important;
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1) !important;
+}
+
+.dark .vp-doc div[class*='language-'] {
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3) !important;
+}
+
+.vp-doc div[class*='language-'] pre {
+ padding: 20px 24px !important;
+}
+
+/* Inline Code */
+.vp-doc :not(pre) > code {
+ background: var(--vp-c-brand-soft) !important;
+ color: var(--vp-c-brand-1) !important;
+ padding: 3px 8px !important;
+ border-radius: 6px !important;
+ font-size: 0.9em !important;
+ font-weight: 500 !important;
+}
+
+/* Blockquotes */
+.vp-doc blockquote {
+ border-left: 4px solid var(--vp-c-brand-1) !important;
+ background: var(--vp-c-brand-soft) !important;
+ border-radius: 0 12px 12px 0 !important;
+ padding: 16px 20px !important;
+ margin: 24px 0 !important;
+}
+
+.vp-doc blockquote p {
+ color: var(--vp-c-text-1) !important;
+}
+
+/* Tables */
+.vp-doc table {
+ border-radius: 12px !important;
+ overflow: hidden !important;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08) !important;
+}
+
+.vp-doc th {
+ background: var(--vp-c-brand-soft) !important;
+ font-weight: 600 !important;
+ text-transform: uppercase;
+ font-size: 0.85em !important;
+ letter-spacing: 0.5px;
+}
+
+.vp-doc tr:hover {
+ background: var(--vp-c-bg-soft) !important;
+}
+
+/* ============================================
+ FEATURE CARDS (Home Page)
+ ============================================ */
+
+.VPFeatures {
+ margin-top: -32px !important;
+}
+
+.VPFeature {
+ background: var(--vp-c-bg) !important;
+ border: 1px solid var(--vp-c-divider) !important;
+ border-radius: 16px !important;
+ padding: 28px !important;
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
+}
+
+.VPFeature:hover {
+ transform: translateY(-4px) !important;
+ box-shadow: 0 12px 24px rgba(0, 0, 0, 0.1) !important;
+ border-color: var(--vp-c-brand-1) !important;
+}
+
+.dark .VPFeature:hover {
+ box-shadow: 0 12px 24px rgba(0, 0, 0, 0.3) !important;
+}
+
+.VPFeature .icon {
+ font-size: 32px !important;
+ margin-bottom: 12px !important;
+}
+
+.VPFeature .title {
+ font-size: 18px !important;
+ font-weight: 700 !important;
+ color: var(--vp-c-text-1) !important;
+}
+
+.VPFeature .details {
+ font-size: 14px !important;
+ color: var(--vp-c-text-2) !important;
+ line-height: 1.6 !important;
+}
+
+/* ============================================
+ CUSTOM CONTAINERS (Tips, Warnings, etc.)
+ ============================================ */
+
+.vp-doc .custom-block {
+ border-radius: 12px !important;
+ padding: 20px 24px !important;
+ margin: 24px 0 !important;
+}
+
+.vp-doc .custom-block.info {
+ background: rgba(59, 130, 246, 0.1) !important;
+ border-left: 4px solid #3b82f6 !important;
+}
+
+.vp-doc .custom-block.tip {
+ background: rgba(16, 185, 129, 0.1) !important;
+ border-left: 4px solid var(--goa-emerald) !important;
+}
+
+.vp-doc .custom-block.warning {
+ background: rgba(245, 158, 11, 0.1) !important;
+ border-left: 4px solid var(--goa-gold) !important;
+}
+
+.vp-doc .custom-block.danger {
+ background: rgba(244, 63, 94, 0.1) !important;
+ border-left: 4px solid var(--goa-coral) !important;
+}
+
+.vp-doc .custom-block .custom-block-title {
+ font-weight: 700 !important;
+ font-size: 15px !important;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+}
+
+/* ============================================
+ SEARCH
+ ============================================ */
+
+.VPLocalSearchBox .search-container {
+ border-radius: 16px !important;
+ overflow: hidden !important;
+}
+
+.VPLocalSearchBox .search-input-container {
+ border-radius: 12px !important;
+}
+
+/* ============================================
+ FOOTER
+ ============================================ */
+
+.VPFooter {
+ border-top: 1px solid var(--vp-c-divider) !important;
+ padding: 32px 24px !important;
+}
+
+.VPFooter .message,
+.VPFooter .copyright {
+ color: var(--vp-c-text-2) !important;
+ font-size: 14px !important;
+}
+
+/* ============================================
+ RESPONSIVE ADJUSTMENTS
+ ============================================ */
+
+@media (max-width: 768px) {
+ .VPHero .text {
+ font-size: 32px !important;
+ }
+
+ .VPHero .tagline {
+ font-size: 16px !important;
+ }
+
+ .vp-doc h1 {
+ font-size: 2rem !important;
+ }
+
+ .vp-doc h2 {
+ font-size: 1.5rem !important;
+ }
+}
+
+/* ============================================
+ ANIMATIONS
+ ============================================ */
+
+@keyframes fadeInUp {
+ from {
+ opacity: 0;
+ transform: translateY(20px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+.VPFeature {
+ animation: fadeInUp 0.5s ease-out forwards;
+}
+
+.VPFeature:nth-child(1) { animation-delay: 0.1s; }
+.VPFeature:nth-child(2) { animation-delay: 0.2s; }
+.VPFeature:nth-child(3) { animation-delay: 0.3s; }
+.VPFeature:nth-child(4) { animation-delay: 0.4s; }
+.VPFeature:nth-child(5) { animation-delay: 0.5s; }
+.VPFeature:nth-child(6) { animation-delay: 0.6s; }
+
+/* ============================================
+ BADGE STYLES
+ ============================================ */
+
+.VPBadge {
+ border-radius: 8px !important;
+ font-weight: 600 !important;
+ font-size: 12px !important;
+ padding: 4px 10px !important;
+}
+
+.VPBadge.tip {
+ background: var(--goa-emerald) !important;
+ color: white !important;
+}
+
+.VPBadge.warning {
+ background: var(--goa-gold) !important;
+ color: white !important;
+}
+
+.VPBadge.danger {
+ background: var(--goa-coral) !important;
+ color: white !important;
+}
+
+/* ============================================
+ OUTLINE (Table of Contents)
+ ============================================ */
+
+.VPDocOutlineItem a {
+ transition: all 0.2s ease !important;
+}
+
+.VPDocOutlineItem a:hover,
+.VPDocOutlineItem a.active {
+ color: var(--vp-c-brand-1) !important;
+}
+
+.VPDocOutlineItem .outline-marker {
+ background: var(--vp-c-brand-1) !important;
+}
+
+/* ============================================
+ PRINT STYLES
+ ============================================ */
+
+@media print {
+ .VPNav,
+ .VPSidebar,
+ .VPDocOutlineDropdown,
+ .VPDocAsideOutline,
+ .VPFooter {
+ display: none !important;
+ }
+
+ .VPDoc .container {
+ max-width: 100% !important;
+ padding: 0 !important;
+ }
+}
diff --git a/Documentation/.vitepress/theme/index.ts b/Documentation/.vitepress/theme/index.ts
new file mode 100644
index 0000000..8981dc6
--- /dev/null
+++ b/Documentation/.vitepress/theme/index.ts
@@ -0,0 +1,16 @@
+import { h } from 'vue'
+import type { Theme } from 'vitepress'
+import DefaultTheme from 'vitepress/theme'
+import './custom.css'
+
+export default {
+ extends: DefaultTheme,
+ Layout: () => {
+ return h(DefaultTheme.Layout, null, {
+ // You can add custom slots here
+ })
+ },
+ enhanceApp({ app, router, siteData }) {
+ // Register custom components or plugins here
+ }
+} satisfies Theme
diff --git a/Documentation/DEPLOY.md b/Documentation/DEPLOY.md
deleted file mode 100644
index a4725fc..0000000
--- a/Documentation/DEPLOY.md
+++ /dev/null
@@ -1,546 +0,0 @@
-# π Deployment Guide - Goa-GEL Documentation Service
-
-Complete guide to deploy the documentation service in various environments.
-
----
-
-## π Prerequisites
-
-- Docker 20.10+ or Docker Desktop
-- Docker Compose 1.29+ (if using compose)
-- Port 8080 available (or configure different port)
-
----
-
-## π³ Docker Deployment (Recommended)
-
-### Quick Deploy
-
-```bash
-# From the Documentation directory
-docker build -t goa-gel-docs .
-docker run -d -p 8080:80 --name goa-gel-docs goa-gel-docs
-
-# Verify it's running
-docker ps | grep goa-gel-docs
-
-# Access the documentation
-open http://localhost:8080
-```
-
-### Docker Compose Deploy
-
-```bash
-# Start the service
-docker-compose up -d
-
-# Check logs
-docker-compose logs -f documentation
-
-# Stop the service
-docker-compose down
-```
-
----
-
-## π Production Deployment
-
-### 1. Build Production Image
-
-```bash
-# Build with version tag
-docker build -t goa-gel-docs:1.0.0 .
-
-# Tag for production registry
-docker tag goa-gel-docs:1.0.0 your-registry.com/goa-gel-docs:1.0.0
-docker tag goa-gel-docs:1.0.0 your-registry.com/goa-gel-docs:latest
-
-# Push to registry
-docker push your-registry.com/goa-gel-docs:1.0.0
-docker push your-registry.com/goa-gel-docs:latest
-```
-
-### 2. Deploy to Server
-
-```bash
-# Pull image on production server
-docker pull your-registry.com/goa-gel-docs:1.0.0
-
-# Run with production settings
-docker run -d \
- --name goa-gel-docs \
- -p 8080:80 \
- --restart always \
- --memory="256m" \
- --cpus="0.5" \
- -l "service=documentation" \
- your-registry.com/goa-gel-docs:1.0.0
-```
-
-### 3. Health Check
-
-```bash
-# Check if service is healthy
-curl http://localhost:8080
-
-# Expected output: HTML of homepage
-
-# Check Docker health status
-docker inspect --format='{{.State.Health.Status}}' goa-gel-docs
-# Expected: healthy
-```
-
----
-
-## βΈοΈ Kubernetes Deployment
-
-### Create Kubernetes Manifests
-
-**deployment.yaml**:
-```yaml
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: goa-gel-docs
- namespace: goa-gel
-spec:
- replicas: 2
- selector:
- matchLabels:
- app: goa-gel-docs
- template:
- metadata:
- labels:
- app: goa-gel-docs
- spec:
- containers:
- - name: goa-gel-docs
- image: your-registry.com/goa-gel-docs:1.0.0
- ports:
- - containerPort: 80
- resources:
- limits:
- memory: "256Mi"
- cpu: "500m"
- requests:
- memory: "128Mi"
- cpu: "250m"
- livenessProbe:
- httpGet:
- path: /
- port: 80
- initialDelaySeconds: 5
- periodSeconds: 10
- readinessProbe:
- httpGet:
- path: /
- port: 80
- initialDelaySeconds: 3
- periodSeconds: 5
-```
-
-**service.yaml**:
-```yaml
-apiVersion: v1
-kind: Service
-metadata:
- name: goa-gel-docs
- namespace: goa-gel
-spec:
- selector:
- app: goa-gel-docs
- ports:
- - port: 80
- targetPort: 80
- protocol: TCP
- type: ClusterIP
-```
-
-**ingress.yaml**:
-```yaml
-apiVersion: networking.k8s.io/v1
-kind: Ingress
-metadata:
- name: goa-gel-docs
- namespace: goa-gel
- annotations:
- nginx.ingress.kubernetes.io/rewrite-target: /
- cert-manager.io/cluster-issuer: "letsencrypt-prod"
-spec:
- ingressClassName: nginx
- tls:
- - hosts:
- - docs.goa-gel.gov.in
- secretName: goa-gel-docs-tls
- rules:
- - host: docs.goa-gel.gov.in
- http:
- paths:
- - path: /
- pathType: Prefix
- backend:
- service:
- name: goa-gel-docs
- port:
- number: 80
-```
-
-### Deploy to Kubernetes
-
-```bash
-# Create namespace
-kubectl create namespace goa-gel
-
-# Apply manifests
-kubectl apply -f deployment.yaml
-kubectl apply -f service.yaml
-kubectl apply -f ingress.yaml
-
-# Check deployment
-kubectl get pods -n goa-gel
-kubectl get svc -n goa-gel
-kubectl get ingress -n goa-gel
-
-# Check logs
-kubectl logs -f deployment/goa-gel-docs -n goa-gel
-```
-
----
-
-## π HTTPS/SSL Setup
-
-### Option 1: Let's Encrypt (Certbot)
-
-```bash
-# Install certbot
-sudo apt-get install certbot python3-certbot-nginx
-
-# Get certificate
-sudo certbot --nginx -d docs.goa-gel.gov.in
-
-# Auto-renewal is configured automatically
-# Test renewal
-sudo certbot renew --dry-run
-```
-
-### Option 2: Custom Certificate
-
-```nginx
-# Add to nginx.conf
-server {
- listen 443 ssl http2;
- server_name docs.goa-gel.gov.in;
-
- ssl_certificate /etc/ssl/certs/goa-gel-docs.crt;
- ssl_certificate_key /etc/ssl/private/goa-gel-docs.key;
-
- ssl_protocols TLSv1.2 TLSv1.3;
- ssl_ciphers HIGH:!aNULL:!MD5;
-
- # ... rest of config
-}
-
-# Redirect HTTP to HTTPS
-server {
- listen 80;
- server_name docs.goa-gel.gov.in;
- return 301 https://$server_name$request_uri;
-}
-```
-
----
-
-## π Reverse Proxy Setup
-
-### Nginx Reverse Proxy
-
-```nginx
-# /etc/nginx/sites-available/goa-gel-docs
-
-upstream docs_backend {
- server localhost:8080;
-}
-
-server {
- listen 80;
- server_name docs.goa-gel.gov.in;
-
- location / {
- proxy_pass http://docs_backend;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Forwarded-Proto $scheme;
- }
-}
-```
-
-```bash
-# Enable site
-sudo ln -s /etc/nginx/sites-available/goa-gel-docs /etc/nginx/sites-enabled/
-sudo nginx -t
-sudo systemctl reload nginx
-```
-
-### Apache Reverse Proxy
-
-```apache
-# /etc/apache2/sites-available/goa-gel-docs.conf
-
-
- ServerName docs.goa-gel.gov.in
-
- ProxyPreserveHost On
- ProxyPass / http://localhost:8080/
- ProxyPassReverse / http://localhost:8080/
-
- ErrorLog ${APACHE_LOG_DIR}/goa-gel-docs-error.log
- CustomLog ${APACHE_LOG_DIR}/goa-gel-docs-access.log combined
-
-```
-
-```bash
-# Enable modules and site
-sudo a2enmod proxy proxy_http
-sudo a2ensite goa-gel-docs
-sudo systemctl reload apache2
-```
-
----
-
-## π Monitoring
-
-### Health Check Endpoint
-
-```bash
-# Check if service is running
-curl -f http://localhost:8080/ || echo "Service down"
-
-# Check response time
-time curl -s http://localhost:8080/ > /dev/null
-```
-
-### Docker Stats
-
-```bash
-# Monitor resource usage
-docker stats goa-gel-docs
-
-# Expected:
-# CPU: < 1% idle, < 10% under load
-# Memory: ~20-50MB
-```
-
-### Logs
-
-```bash
-# View logs
-docker logs -f goa-gel-docs
-
-# Last 100 lines
-docker logs --tail 100 goa-gel-docs
-
-# Logs since timestamp
-docker logs --since 2024-01-01T00:00:00 goa-gel-docs
-```
-
----
-
-## π§ Troubleshooting
-
-### Service Won't Start
-
-```bash
-# Check if port is in use
-lsof -i :8080
-
-# Check Docker logs
-docker logs goa-gel-docs
-
-# Try different port
-docker run -d -p 9090:80 --name goa-gel-docs goa-gel-docs
-```
-
-### High Memory Usage
-
-```bash
-# Set memory limit
-docker update --memory="256m" goa-gel-docs
-
-# Or recreate with limit
-docker stop goa-gel-docs
-docker rm goa-gel-docs
-docker run -d \
- -p 8080:80 \
- --memory="256m" \
- --name goa-gel-docs \
- goa-gel-docs
-```
-
-### Slow Performance
-
-```bash
-# Check resource usage
-docker stats goa-gel-docs
-
-# Increase CPU allocation
-docker update --cpus="1.0" goa-gel-docs
-
-# Enable gzip compression (already enabled in nginx.conf)
-# Check if compression is working
-curl -H "Accept-Encoding: gzip" -I http://localhost:8080/
-# Should see: Content-Encoding: gzip
-```
-
----
-
-## π Updates
-
-### Update Documentation Content
-
-```bash
-# Update markdown files in docs/
-# Then rebuild and redeploy
-
-docker build -t goa-gel-docs:1.0.1 .
-docker stop goa-gel-docs
-docker rm goa-gel-docs
-docker run -d -p 8080:80 --name goa-gel-docs goa-gel-docs:1.0.1
-```
-
-### Zero-Downtime Update (with 2+ instances)
-
-```bash
-# Build new version
-docker build -t goa-gel-docs:1.0.1 .
-
-# Start new container on different port
-docker run -d -p 8081:80 --name goa-gel-docs-new goa-gel-docs:1.0.1
-
-# Test new version
-curl http://localhost:8081/
-
-# Update load balancer to point to 8081
-# Then stop old container
-docker stop goa-gel-docs
-docker rm goa-gel-docs
-
-# Rename new container
-docker rename goa-gel-docs-new goa-gel-docs
-```
-
----
-
-## π Security Best Practices
-
-### 1. Run as Non-Root User
-
-Update Dockerfile:
-```dockerfile
-# Add after FROM nginx:alpine
-RUN adduser -D -u 1000 docsuser
-USER docsuser
-```
-
-### 2. Read-Only Filesystem
-
-```bash
-docker run -d \
- -p 8080:80 \
- --read-only \
- --tmpfs /tmp \
- --tmpfs /var/run \
- --tmpfs /var/cache/nginx \
- --name goa-gel-docs \
- goa-gel-docs
-```
-
-### 3. Network Isolation
-
-```bash
-# Create isolated network
-docker network create goa-gel-network
-
-# Run with network
-docker run -d \
- -p 8080:80 \
- --network goa-gel-network \
- --name goa-gel-docs \
- goa-gel-docs
-```
-
-### 4. Security Scanning
-
-```bash
-# Scan image for vulnerabilities
-docker scan goa-gel-docs
-
-# Or use Trivy
-trivy image goa-gel-docs
-```
-
----
-
-## π Performance Optimization
-
-### CDN Setup
-
-Use a CDN like Cloudflare for static assets:
-
-1. Point domain to Cloudflare
-2. Enable caching for:
- - `/css/*`
- - `/js/*`
- - `/docs/*`
-3. Enable Brotli compression
-4. Enable HTTP/3
-
-### Caching Headers
-
-Already configured in `nginx.conf`:
-```nginx
-location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
- expires 1y;
- add_header Cache-Control "public, immutable";
-}
-```
-
----
-
-## π§ͺ Testing Deployment
-
-```bash
-# 1. Test homepage
-curl -I http://localhost:8080/
-# Expected: 200 OK
-
-# 2. Test viewer
-curl -I http://localhost:8080/viewer.html
-# Expected: 200 OK
-
-# 3. Test documentation
-curl http://localhost:8080/docs/USER_GUIDE.md
-# Expected: Markdown content
-
-# 4. Test 404 handling
-curl -I http://localhost:8080/nonexistent
-# Expected: 404 Not Found
-
-# 5. Load test (requires Apache Bench)
-ab -n 1000 -c 10 http://localhost:8080/
-# Should handle 1000 requests easily
-```
-
----
-
-## π Support
-
-For deployment issues:
-- **Email**: devops@goa.gov.in
-- **Documentation**: README.md in this directory
-- **Source**: GitHub repository
-
----
-
-**Version**: 1.0.0
-**Last Updated**: February 2026
diff --git a/Documentation/Dockerfile b/Documentation/Dockerfile
index 891f5ee..1d81462 100644
--- a/Documentation/Dockerfile
+++ b/Documentation/Dockerfile
@@ -1,21 +1,23 @@
-# Documentation Service Dockerfile
+# Build stage
+FROM node:20-alpine AS builder
+
+WORKDIR /app
+
+COPY package*.json ./
+RUN npm install
+
+COPY . .
+RUN npm run build
+
+# Production stage
FROM nginx:alpine
-# Copy nginx configuration
-COPY nginx.conf /etc/nginx/nginx.conf
+COPY --from=builder /app/.vitepress/dist /usr/share/nginx/html
+COPY nginx.conf /etc/nginx/conf.d/default.conf
-# Copy static files
-COPY public /usr/share/nginx/html
-
-# Copy markdown documentation files
-COPY docs /usr/share/nginx/html/docs
-
-# Expose port 80
EXPOSE 80
-# Health check
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD wget --quiet --tries=1 --spider http://localhost/ || exit 1
-# Start nginx
CMD ["nginx", "-g", "daemon off;"]
diff --git a/Documentation/GETTING_STARTED.md b/Documentation/GETTING_STARTED.md
deleted file mode 100644
index a6849c8..0000000
--- a/Documentation/GETTING_STARTED.md
+++ /dev/null
@@ -1,413 +0,0 @@
-# π Getting Started - Goa-GEL Documentation Service
-
-Quick start guide to get the documentation service running in under 5 minutes.
-
----
-
-## β‘ Quick Start (Choose One Method)
-
-### Method 1: Docker (Recommended) - 2 Minutes
-
-```bash
-# 1. Navigate to Documentation directory
-cd Documentation
-
-# 2. Build the Docker image
-docker build -t goa-gel-docs .
-
-# 3. Run the container
-docker run -d -p 8080:80 --name goa-gel-docs goa-gel-docs
-
-# 4. Open in browser
-open http://localhost:8080
-```
-
-**Done!** The documentation is now running at http://localhost:8080
-
----
-
-### Method 2: Docker Compose - 1 Minute
-
-```bash
-# 1. Navigate to Documentation directory
-cd Documentation
-
-# 2. Start the service
-docker-compose up -d
-
-# 3. Open in browser
-open http://localhost:8080
-```
-
-**Done!** The documentation is now running at http://localhost:8080
-
----
-
-### Method 3: Local Development - 3 Minutes
-
-```bash
-# 1. Navigate to Documentation directory
-cd Documentation
-
-# 2. Install dependencies
-npm install
-
-# 3. Start local server
-npm start
-
-# 4. Open in browser
-open http://localhost:8080
-```
-
-**Done!** The documentation is now running at http://localhost:8080
-
----
-
-## π What You'll See
-
-### Homepage (http://localhost:8080)
-
-A beautiful landing page with:
-- π Platform statistics
-- π― Quick start cards for different user roles
-- π Complete documentation library
-- π€ Role-based navigation
-- β¨ Feature highlights
-
-### Documentation Viewer (http://localhost:8080/viewer.html?doc=USER_GUIDE)
-
-An interactive documentation viewer with:
-- π Markdown rendering with syntax highlighting
-- π Table of contents (auto-generated)
-- π Quick document selector
-- πΎ Download as Markdown
-- π¨οΈ Print-friendly version
-- π± Mobile responsive design
-
----
-
-## π Available Documentation
-
-Navigate to any of these guides:
-
-| Guide | URL | Size |
-|-------|-----|------|
-| **User Guide** | `/viewer.html?doc=USER_GUIDE` | 650+ lines |
-| **Testing Guide** | `/viewer.html?doc=E2E_TESTING_GUIDE` | 600+ lines |
-| **Implementation Status** | `/viewer.html?doc=IMPLEMENTATION_COMPLETE` | 380+ lines |
-| **Architecture Guide** | `/viewer.html?doc=ARCHITECTURE_GUIDE` | 1000+ lines |
-| **Quick Start** | `/viewer.html?doc=QUICK_START` | 200+ lines |
-| **Documentation Index** | `/viewer.html?doc=DOCUMENTATION_INDEX` | 400+ lines |
-| **Implementation Summary** | `/viewer.html?doc=IMPLEMENTATION_SUMMARY` | 300+ lines |
-
----
-
-## π― Next Steps
-
-### For Users
-1. Click on **"I'm a User"** card on homepage
-2. Read your role-specific guide (Admin/Department/Citizen)
-3. Follow step-by-step instructions
-
-### For Testers
-1. Click on **"I Need to Test"** card
-2. Read the E2E Testing Guide
-3. Follow the 20 test scenarios
-
-### For Developers
-1. Click on **"I'm a Developer"** card
-2. Read Implementation Complete guide
-3. Review Architecture Guide
-
-### For Architects
-1. Click on **"I'm an Architect"** card
-2. Read Architecture Guide
-3. View system diagrams
-
----
-
-## π οΈ Common Commands
-
-### Docker Commands
-
-```bash
-# View logs
-docker logs -f goa-gel-docs
-
-# Stop the service
-docker stop goa-gel-docs
-
-# Start the service
-docker start goa-gel-docs
-
-# Restart the service
-docker restart goa-gel-docs
-
-# Remove the container
-docker stop goa-gel-docs
-docker rm goa-gel-docs
-
-# Rebuild after changes
-docker build -t goa-gel-docs .
-docker stop goa-gel-docs && docker rm goa-gel-docs
-docker run -d -p 8080:80 --name goa-gel-docs goa-gel-docs
-```
-
-### Docker Compose Commands
-
-```bash
-# Start services
-docker-compose up -d
-
-# View logs
-docker-compose logs -f
-
-# Stop services
-docker-compose stop
-
-# Restart services
-docker-compose restart
-
-# Remove everything
-docker-compose down
-
-# Rebuild and restart
-docker-compose up -d --build
-```
-
-### Local Development Commands
-
-```bash
-# Start server (port 8080)
-npm start
-
-# Start server with auto-open browser
-npm run dev
-
-# Install dependencies
-npm install
-```
-
----
-
-## β
Verify Installation
-
-### 1. Check Service is Running
-
-```bash
-# Test homepage
-curl -I http://localhost:8080/
-
-# Expected output:
-# HTTP/1.1 200 OK
-# Content-Type: text/html
-```
-
-### 2. Check Documentation Loads
-
-```bash
-# Test documentation file
-curl http://localhost:8080/docs/USER_GUIDE.md
-
-# Should return markdown content
-```
-
-### 3. Check in Browser
-
-1. Open: http://localhost:8080
-2. Should see beautiful homepage
-3. Click any card or navigation link
-4. Documentation should load
-
----
-
-## π Troubleshooting
-
-### Port 8080 Already in Use
-
-**Solution 1: Use Different Port**
-```bash
-# Docker
-docker run -d -p 9090:80 --name goa-gel-docs goa-gel-docs
-
-# Then access at: http://localhost:9090
-```
-
-**Solution 2: Find and Kill Process**
-```bash
-# Find what's using port 8080
-lsof -i :8080
-
-# Kill the process (replace PID with actual PID)
-kill -9 PID
-```
-
-### Docker Build Fails
-
-**Check Docker is Running**
-```bash
-docker --version
-docker ps
-
-# If not running, start Docker Desktop
-```
-
-**Clear Docker Cache**
-```bash
-docker system prune -a
-docker build --no-cache -t goa-gel-docs .
-```
-
-### Documentation Not Loading
-
-**Check files exist**
-```bash
-ls -la docs/
-# Should see all .md files
-
-ls -la public/
-# Should see index.html, viewer.html, css/, js/
-```
-
-**Check container logs**
-```bash
-docker logs goa-gel-docs
-# Look for any error messages
-```
-
-### Blank Page or 404 Errors
-
-**Clear Browser Cache**
-- Press Ctrl+Shift+R (Windows/Linux)
-- Press Cmd+Shift+R (Mac)
-- Or use Incognito/Private mode
-
-**Check network tab**
-- Open browser DevTools (F12)
-- Go to Network tab
-- Refresh page
-- Look for failed requests (red)
-
----
-
-## π± Access from Mobile
-
-### Same Network
-
-1. Find your computer's IP address:
- ```bash
- # Mac/Linux
- ifconfig | grep "inet "
-
- # Windows
- ipconfig
- ```
-
-2. On mobile, open browser and go to:
- ```
- http://YOUR_IP_ADDRESS:8080
- ```
-
-### Public Access (Advanced)
-
-Use a reverse proxy or cloud hosting (see DEPLOY.md for details)
-
----
-
-## π Updating Documentation
-
-### Update Markdown Files
-
-1. Edit `.md` files in `docs/` directory
-2. Rebuild and restart:
-
-**Docker:**
-```bash
-docker build -t goa-gel-docs .
-docker stop goa-gel-docs && docker rm goa-gel-docs
-docker run -d -p 8080:80 --name goa-gel-docs goa-gel-docs
-```
-
-**Local:**
-```bash
-# No rebuild needed - just refresh browser
-# Server automatically serves updated files
-```
-
-### Add New Documentation
-
-1. Add new `.md` file to `docs/` directory
-2. Update `public/js/viewer.js` - add to `DOC_MAP`:
- ```javascript
- const DOC_MAP = {
- 'YOUR_NEW_DOC': '/docs/YOUR_NEW_DOC.md',
- // ... existing entries
- };
- ```
-3. Rebuild and restart (if using Docker)
-
----
-
-## π‘ Tips & Best Practices
-
-### Performance
-
-- Documentation loads instantly (< 1s)
-- Syntax highlighting is automatic
-- Gzip compression enabled
-- Browser caching configured
-
-### Navigation
-
-- Use sidebar for quick navigation
-- Use dropdown selector for document switching
-- Use table of contents for long documents
-- Browser back/forward buttons work
-
-### Viewing
-
-- Click any heading in TOC to jump to section
-- Use print button for PDF generation
-- Use download button to save Markdown
-- Mobile-friendly design works on all devices
-
----
-
-## π Need Help?
-
-### Documentation
-
-- **README.md**: Complete feature documentation
-- **DEPLOY.md**: Production deployment guide
-- **This file**: Quick start guide
-
-### Support
-
-- **Email**: support@goa.gov.in
-- **Issues**: GitHub repository
-- **Documentation**: Available in the service itself
-
----
-
-## π Success!
-
-You now have a fully functional documentation service running!
-
-**What's Next?**
-
-1. β
Explore the homepage
-2. β
Read the user guide for your role
-3. β
Test the documentation viewer features
-4. β
Share the URL with your team
-5. β
Deploy to production (see DEPLOY.md)
-
----
-
-**Happy documenting! π**
-
----
-
-**Version**: 1.0.0
-**Last Updated**: February 2026
-**Service Port**: 8080 (default)
-**Status**: Production Ready β
diff --git a/Documentation/README.md b/Documentation/README.md
deleted file mode 100644
index 3de5009..0000000
--- a/Documentation/README.md
+++ /dev/null
@@ -1,477 +0,0 @@
-# π Goa-GEL Documentation Service
-
-A standalone, containerized documentation service for the Goa-GEL platform. Beautiful, responsive, and easy to host.
-
----
-
-## π― Features
-
-- β
**Beautiful UI**: Modern, responsive design with Material Design principles
-- β
**Markdown Rendering**: Converts Markdown to beautiful HTML with syntax highlighting
-- β
**Containerized**: Runs in Docker, easy to deploy
-- β
**Static Site**: Fast, lightweight, no backend required
-- β
**Searchable**: (Coming soon) Full-text search across all documentation
-- β
**Mobile-Friendly**: Works perfectly on all devices
-- β
**Print-Ready**: Clean print styles for PDF generation
-- β
**Download**: Download documentation as Markdown files
-
----
-
-## π¦ What's Inside?
-
-### Documentation Files Included
-
-- **USER_GUIDE.md** (650+ lines) - Complete user manual for all roles
-- **E2E_TESTING_GUIDE.md** (600+ lines) - Comprehensive testing scenarios
-- **IMPLEMENTATION_COMPLETE.md** (380+ lines) - Implementation status
-- **ARCHITECTURE_GUIDE.md** (1000+ lines) - Technical architecture
-- **QUICK_START.md** (200+ lines) - Quick setup guide
-- **DOCUMENTATION_INDEX.md** (400+ lines) - Master navigation
-- **IMPLEMENTATION_SUMMARY.md** (300+ lines) - Project summary
-
----
-
-## π Quick Start
-
-### Option 1: Docker (Recommended)
-
-```bash
-# Build the Docker image
-docker build -t goa-gel-docs .
-
-# Run the container
-docker run -d -p 8080:80 --name goa-gel-docs goa-gel-docs
-
-# Access the documentation
-open http://localhost:8080
-```
-
-### Option 2: Docker Compose
-
-```bash
-# From the project root directory
-docker-compose up -d documentation
-
-# Access the documentation
-open http://localhost:8080
-```
-
-### Option 3: Local Development
-
-```bash
-# Install dependencies
-npm install
-
-# Start local server
-npm start
-
-# Access the documentation
-open http://localhost:8080
-```
-
----
-
-## π Directory Structure
-
-```
-Documentation/
-βββ Dockerfile # Docker configuration
-βββ nginx.conf # Nginx server configuration
-βββ package.json # Node.js dependencies
-βββ README.md # This file
-βββ public/ # Static files
-β βββ index.html # Homepage
-β βββ viewer.html # Document viewer
-β βββ css/
-β β βββ styles.css # All styles
-β βββ js/
-β βββ main.js # Homepage scripts
-β βββ viewer.js # Viewer functionality
-βββ docs/ # Markdown documentation
- βββ USER_GUIDE.md
- βββ E2E_TESTING_GUIDE.md
- βββ IMPLEMENTATION_COMPLETE.md
- βββ ARCHITECTURE_GUIDE.md
- βββ QUICK_START.md
- βββ DOCUMENTATION_INDEX.md
- βββ IMPLEMENTATION_SUMMARY.md
-```
-
----
-
-## π³ Docker Configuration
-
-### Building the Image
-
-```bash
-docker build -t goa-gel-docs:latest .
-```
-
-### Running the Container
-
-```bash
-# Run on port 8080
-docker run -d \
- -p 8080:80 \
- --name goa-gel-docs \
- --restart unless-stopped \
- goa-gel-docs:latest
-```
-
-### Stopping the Container
-
-```bash
-docker stop goa-gel-docs
-docker rm goa-gel-docs
-```
-
----
-
-## π§ Configuration
-
-### Nginx Configuration
-
-The `nginx.conf` file is pre-configured with:
-- **Gzip compression** for faster loading
-- **Security headers** (X-Frame-Options, X-Content-Type-Options, etc.)
-- **Static file caching** for optimal performance
-- **Health checks** for monitoring
-
-### Adding New Documentation
-
-1. Add your `.md` file to the `docs/` directory
-2. Update `public/js/viewer.js` - Add entry to `DOC_MAP`:
- ```javascript
- const DOC_MAP = {
- 'YOUR_DOC': '/docs/YOUR_DOC.md',
- // ... existing entries
- };
- ```
-3. Update `public/index.html` - Add link to homepage (optional)
-4. Update `public/viewer.html` - Add to sidebar navigation (optional)
-5. Rebuild Docker image if using Docker
-
----
-
-## π¨ Customization
-
-### Changing Colors
-
-Edit `public/css/styles.css` and modify the CSS variables:
-
-```css
-:root {
- --primary-color: #1976d2; /* Main brand color */
- --secondary-color: #424242; /* Secondary color */
- --success-color: #4caf50; /* Success messages */
- --warning-color: #ff9800; /* Warnings */
- --error-color: #f44336; /* Errors */
-}
-```
-
-### Changing Logo
-
-Replace the emoji in headers:
-- Edit `public/index.html` - Line ~15: `
ποΈ Goa-GEL
`
-- Edit `public/viewer.html` - Line ~17: `ποΈ Goa-GEL
`
-
-### Adding Features
-
-1. **Search**: Implement `searchDocumentation()` in `viewer.js`
-2. **PDF Export**: Add a PDF generation library
-3. **Multi-language**: Add translation files and language switcher
-4. **Analytics**: Add Google Analytics or similar
-
----
-
-## π Deployment
-
-### Production Deployment
-
-1. **Build the image**:
- ```bash
- docker build -t goa-gel-docs:v1.0.0 .
- ```
-
-2. **Tag for registry**:
- ```bash
- docker tag goa-gel-docs:v1.0.0 your-registry/goa-gel-docs:v1.0.0
- ```
-
-3. **Push to registry**:
- ```bash
- docker push your-registry/goa-gel-docs:v1.0.0
- ```
-
-4. **Deploy to server**:
- ```bash
- docker run -d \
- -p 80:80 \
- --name goa-gel-docs \
- --restart always \
- your-registry/goa-gel-docs:v1.0.0
- ```
-
-### Reverse Proxy (Nginx/Apache)
-
-If using a reverse proxy, configure it to forward to port 8080:
-
-**Nginx example**:
-```nginx
-server {
- listen 80;
- server_name docs.goa-gel.gov.in;
-
- location / {
- proxy_pass http://localhost:8080;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- }
-}
-```
-
-### Kubernetes Deployment
-
-Create a deployment YAML:
-
-```yaml
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: goa-gel-docs
-spec:
- replicas: 2
- selector:
- matchLabels:
- app: goa-gel-docs
- template:
- metadata:
- labels:
- app: goa-gel-docs
- spec:
- containers:
- - name: goa-gel-docs
- image: your-registry/goa-gel-docs:v1.0.0
- ports:
- - containerPort: 80
- resources:
- limits:
- memory: "256Mi"
- cpu: "500m"
----
-apiVersion: v1
-kind: Service
-metadata:
- name: goa-gel-docs
-spec:
- selector:
- app: goa-gel-docs
- ports:
- - port: 80
- targetPort: 80
- type: LoadBalancer
-```
-
----
-
-## π Performance
-
-### Benchmarks
-
-- **Page Load**: < 1s
-- **Document Render**: < 500ms
-- **Image Size**: ~50MB (includes Nginx + static files)
-- **Memory Usage**: ~20MB RAM
-- **CPU Usage**: < 1% idle, < 10% under load
-
-### Optimization
-
-The service is optimized with:
-- Gzip compression (reduces size by 70%)
-- Static file caching (1 year cache)
-- Minified CSS and JS (future enhancement)
-- Lazy loading for images (future enhancement)
-- CDN for external libraries
-
----
-
-## π Security
-
-### Security Features
-
-1. **Content Security Policy**: Configured in nginx
-2. **XSS Protection**: DOMPurify sanitizes all HTML
-3. **HTTPS Ready**: Works with SSL certificates
-4. **No Backend**: Static site = smaller attack surface
-5. **Security Headers**: X-Frame-Options, X-Content-Type-Options, etc.
-
-### Security Headers
-
-All configured in `nginx.conf`:
-- `X-Frame-Options: SAMEORIGIN`
-- `X-Content-Type-Options: nosniff`
-- `X-XSS-Protection: 1; mode=block`
-
----
-
-## π§ͺ Testing
-
-### Manual Testing
-
-1. **Homepage**: Visit http://localhost:8080
- - Check all cards load
- - Check navigation works
- - Check responsive design on mobile
-
-2. **Viewer**: Visit http://localhost:8080/viewer.html?doc=USER_GUIDE
- - Check document loads
- - Check syntax highlighting works
- - Check table of contents generates
- - Check print functionality
- - Check download button
-
-3. **Navigation**:
- - Test all sidebar links
- - Test document selector dropdown
- - Test browser back/forward buttons
-
-### Automated Testing (Future)
-
-```bash
-# Run tests
-npm test
-
-# Run with coverage
-npm run test:coverage
-```
-
----
-
-## π Troubleshooting
-
-### Issue: Documentation not loading
-
-**Symptom**: Blank page or "Document not found" error
-
-**Solution**:
-1. Check if Markdown files are in `/docs` directory
-2. Verify `DOC_MAP` in `viewer.js` is correct
-3. Check browser console for errors
-4. Clear browser cache
-
-### Issue: Syntax highlighting not working
-
-**Symptom**: Code blocks show plain text
-
-**Solution**:
-1. Check if highlight.js is loading (check network tab)
-2. Verify CDN links are accessible
-3. Check for JavaScript errors in console
-
-### Issue: Container not starting
-
-**Symptom**: `docker run` fails or exits immediately
-
-**Solution**:
-```bash
-# Check Docker logs
-docker logs goa-gel-docs
-
-# Verify port is not in use
-lsof -i :8080
-
-# Try a different port
-docker run -d -p 9090:80 --name goa-gel-docs goa-gel-docs
-```
-
-### Issue: Styles not applying
-
-**Symptom**: Page looks unstyled
-
-**Solution**:
-1. Check if `/css/styles.css` exists
-2. View page source and verify CSS link
-3. Check browser Network tab for 404 errors
-4. Clear browser cache
-
----
-
-## π Maintenance
-
-### Updating Documentation
-
-1. Update `.md` files in `docs/` directory
-2. Rebuild Docker image (if using Docker):
- ```bash
- docker build -t goa-gel-docs .
- docker stop goa-gel-docs
- docker rm goa-gel-docs
- docker run -d -p 8080:80 --name goa-gel-docs goa-gel-docs
- ```
-
-### Monitoring
-
-Monitor these metrics:
-- **Uptime**: Should be 99.9%+
-- **Page Load Time**: Should be < 1s
-- **Error Rate**: Should be < 0.1%
-
-### Backup
-
-Backup these files:
-- All `.md` files in `docs/`
-- Custom modifications to HTML/CSS/JS
-
----
-
-## π€ Contributing
-
-To contribute documentation:
-
-1. Fork the repository
-2. Add/update `.md` files in `docs/`
-3. Test locally with `npm start`
-4. Submit a pull request
-
-### Documentation Standards
-
-- Use Markdown format
-- Include table of contents for long documents
-- Add code examples where appropriate
-- Use headers (H1-H4) for structure
-- Include screenshots (in descriptions)
-- Write clear, concise content
-
----
-
-## π Support
-
-For issues or questions:
-
-- **Email**: support@goa.gov.in
-- **GitHub**: [Repository Issues](https://github.com/goa-gel/issues)
-- **Documentation**: This README file
-
----
-
-## π License
-
-Copyright Β© 2026 Government of Goa. All rights reserved.
-
----
-
-## π Credits
-
-**Built With:**
-- [Nginx](https://nginx.org/) - Web server
-- [Marked.js](https://marked.js.org/) - Markdown parser
-- [Highlight.js](https://highlightjs.org/) - Syntax highlighting
-- [DOMPurify](https://github.com/cure53/DOMPurify) - HTML sanitization
-
-**Created By**: Goa-GEL Development Team
-
----
-
-**Version**: 1.0.0
-**Last Updated**: February 2026
-**Status**: Production Ready
diff --git a/Documentation/SUMMARY.md b/Documentation/SUMMARY.md
deleted file mode 100644
index af306e8..0000000
--- a/Documentation/SUMMARY.md
+++ /dev/null
@@ -1,433 +0,0 @@
-# π Documentation Service - Complete Summary
-
-## π― What Was Created
-
-A **standalone, containerized documentation service** for the Goa-GEL platform that can be hosted independently in Docker.
-
----
-
-## π¦ Complete File Structure
-
-```
-Documentation/
-βββ README.md # Complete feature documentation (650+ lines)
-βββ GETTING_STARTED.md # Quick start guide (350+ lines)
-βββ DEPLOY.md # Deployment guide (550+ lines)
-βββ SUMMARY.md # This file
-β
-βββ Dockerfile # Docker container configuration
-βββ nginx.conf # Nginx web server configuration
-βββ docker-compose.yml # Docker Compose configuration
-βββ package.json # Node.js dependencies
-βββ .dockerignore # Docker build exclusions
-βββ .gitignore # Git exclusions
-β
-βββ public/ # Static website files
-β βββ index.html # Homepage (500+ lines)
-β βββ viewer.html # Documentation viewer (200+ lines)
-β βββ 404.html # Error page
-β β
-β βββ css/
-β β βββ styles.css # All styles (900+ lines)
-β β
-β βββ js/
-β β βββ main.js # Homepage scripts
-β β βββ viewer.js # Viewer functionality (300+ lines)
-β β
-β βββ images/ # Images directory (empty, for future use)
-β
-βββ docs/ # Markdown documentation files
- βββ USER_GUIDE.md # User manual (650+ lines)
- βββ E2E_TESTING_GUIDE.md # Testing guide (600+ lines)
- βββ IMPLEMENTATION_COMPLETE.md # Implementation status (380+ lines)
- βββ ARCHITECTURE_GUIDE.md # Architecture (1000+ lines)
- βββ QUICK_START.md # Quick setup (200+ lines)
- βββ DOCUMENTATION_INDEX.md # Navigation guide (400+ lines)
- βββ IMPLEMENTATION_SUMMARY.md # Summary (300+ lines)
-```
-
-**Total Files Created**: 25 files
-**Total Lines of Code**: 5,000+ lines (HTML, CSS, JS, config)
-**Total Documentation**: 3,500+ lines (Markdown)
-
----
-
-## π¨ Features
-
-### Homepage Features
-β
Beautiful landing page with gradient design
-β
Platform statistics display
-β
Quick start cards for different user roles
-β
Complete documentation library
-β
Role-based navigation guides
-β
Feature highlights section
-β
Fully responsive (mobile, tablet, desktop)
-
-### Documentation Viewer Features
-β
Markdown to HTML rendering
-β
Syntax highlighting for code blocks (highlight.js)
-β
Auto-generated table of contents
-β
Sidebar navigation
-β
Document selector dropdown
-β
Print functionality
-β
Download as Markdown
-β
Browser back/forward support
-β
Deep linking to sections
-β
Mobile-responsive design
-
-### Technical Features
-β
**Containerized**: Runs in Docker
-β
**Static Site**: No backend required
-β
**Fast**: < 1s page load time
-β
**Secure**: DOMPurify XSS protection
-β
**Optimized**: Gzip compression, caching
-β
**Health Checks**: Docker health monitoring
-β
**SSL Ready**: HTTPS compatible
-β
**Production Ready**: Tested and stable
-
----
-
-## π How to Use
-
-### Quick Start (Docker)
-
-```bash
-cd Documentation
-docker build -t goa-gel-docs .
-docker run -d -p 8080:80 --name goa-gel-docs goa-gel-docs
-open http://localhost:8080
-```
-
-### Access
-
-- **Homepage**: http://localhost:8080
-- **User Guide**: http://localhost:8080/viewer.html?doc=USER_GUIDE
-- **Testing Guide**: http://localhost:8080/viewer.html?doc=E2E_TESTING_GUIDE
-- **All Docs**: http://localhost:8080/viewer.html?doc=DOCUMENTATION_INDEX
-
----
-
-## π Documentation Included
-
-### For Users (650+ lines)
-**USER_GUIDE.md** - Complete manual covering:
-- Getting started and login
-- Role-based guides (Admin, Department, Citizen)
-- Step-by-step instructions
-- Document management
-- FAQ and troubleshooting
-- Mobile access
-- Support contacts
-
-### For Testers (600+ lines)
-**E2E_TESTING_GUIDE.md** - Testing scenarios covering:
-- 20 detailed test scenarios
-- Complete license approval workflow
-- Admin portal verification
-- Department onboarding tests
-- Document versioning tests
-- Blockchain verification
-- Error scenario testing
-
-### For Developers (380+ lines)
-**IMPLEMENTATION_COMPLETE.md** - Implementation details:
-- Complete task breakdown (10 tasks)
-- Files created/modified
-- API endpoints
-- Component architecture
-- Success metrics
-- How to run and test
-
-### For Architects (1000+ lines)
-**ARCHITECTURE_GUIDE.md** - Technical architecture:
-- System architecture (C4 model)
-- Blockchain integration
-- Smart contracts
-- Database design
-- API structure
-- Deployment architecture
-
-### For Setup (200+ lines)
-**QUICK_START.md** - Quick setup guide:
-- Prerequisites
-- Installation steps
-- Database setup
-- Running services
-- Demo credentials
-
-### Navigation (400+ lines)
-**DOCUMENTATION_INDEX.md** - Master guide:
-- Complete navigation
-- Role-based paths
-- Search guide
-- All documentation indexed
-
-### Summary (300+ lines)
-**IMPLEMENTATION_SUMMARY.md** - Overview:
-- What was implemented
-- Key features
-- Technology choices
-- Deliverables
-
----
-
-## π― Key Benefits
-
-### 1. Standalone Service
-- Runs independently from main platform
-- Can be hosted separately
-- No dependencies on backend/database
-- Pure static site
-
-### 2. Easy Deployment
-- Single Docker command to deploy
-- Works with Docker Compose
-- Kubernetes-ready
-- Cloud platform compatible
-
-### 3. Beautiful UI
-- Modern Material Design
-- Professional appearance
-- Brand colors and styling
-- Intuitive navigation
-
-### 4. Fast Performance
-- Loads in < 1 second
-- Gzip compression enabled
-- Browser caching configured
-- Optimized assets
-
-### 5. Secure
-- DOMPurify sanitization
-- Security headers configured
-- No backend vulnerabilities
-- HTTPS ready
-
-### 6. Maintainable
-- Easy to update content
-- Simple file structure
-- Well-documented code
-- Version controlled
-
----
-
-## π§ Technology Stack
-
-### Frontend
-- **HTML5**: Semantic markup
-- **CSS3**: Modern styling with flexbox/grid
-- **Vanilla JavaScript**: No frameworks, fast loading
-
-### Libraries (CDN)
-- **Marked.js**: Markdown parsing
-- **Highlight.js**: Syntax highlighting
-- **DOMPurify**: XSS protection
-
-### Server
-- **Nginx Alpine**: Lightweight web server
-- **Docker**: Containerization
-- **Docker Compose**: Orchestration
-
-### Build Tools
-- **Node.js**: Development server
-- **http-server**: Local testing
-
----
-
-## π Metrics
-
-### Size
-- **Docker Image**: ~50MB
-- **Static Files**: ~5MB
-- **Documentation**: ~500KB (all markdown)
-
-### Performance
-- **Page Load**: < 1s
-- **Time to Interactive**: < 1.5s
-- **Lighthouse Score**: 95+ (estimated)
-
-### Resource Usage
-- **Memory**: ~20-50MB RAM
-- **CPU**: < 1% idle, < 10% under load
-- **Disk**: ~50MB total
-
----
-
-## π¨ Design Highlights
-
-### Color Scheme
-- **Primary**: #1976d2 (Blue)
-- **Secondary**: #424242 (Dark Gray)
-- **Success**: #4caf50 (Green)
-- **Warning**: #ff9800 (Orange)
-- **Error**: #f44336 (Red)
-
-### Typography
-- **Font Family**: System fonts (fast loading)
-- **Sizes**: Responsive scale (rem units)
-- **Weight**: 400 (normal), 600 (headings)
-
-### Layout
-- **Grid System**: CSS Grid + Flexbox
-- **Breakpoints**: Mobile (< 768px), Tablet, Desktop
-- **Max Width**: 1200px container
-- **Spacing**: 8px base unit
-
----
-
-## π Maintenance
-
-### Updating Documentation
-1. Edit `.md` files in `docs/` directory
-2. Rebuild Docker image
-3. Restart container
-4. Changes are live
-
-### Adding New Pages
-1. Create new `.md` file in `docs/`
-2. Update `viewer.js` DOC_MAP
-3. Add navigation link (optional)
-4. Rebuild and redeploy
-
-### Customization
-- **Colors**: Edit CSS variables in `styles.css`
-- **Logo**: Replace emoji in HTML files
-- **Content**: Edit HTML templates
-
----
-
-## π¦ Deployment Options
-
-### Option 1: Docker (Recommended)
-- Single command deployment
-- Isolated environment
-- Easy updates
-- Production-ready
-
-### Option 2: Docker Compose
-- Multi-service orchestration
-- Simplified configuration
-- Easy to scale
-- Good for development
-
-### Option 3: Kubernetes
-- Enterprise deployment
-- Auto-scaling
-- High availability
-- Production-grade
-
-### Option 4: Static Hosting
-- Netlify/Vercel/GitHub Pages
-- CDN distribution
-- Free tier available
-- Simple deployment
-
----
-
-## β
What's Included
-
-### Configuration Files
-β
Dockerfile - Container configuration
-β
nginx.conf - Web server setup
-β
docker-compose.yml - Compose configuration
-β
package.json - Node dependencies
-β
.dockerignore - Build exclusions
-β
.gitignore - Version control exclusions
-
-### Documentation Files
-β
README.md - Complete documentation
-β
GETTING_STARTED.md - Quick start
-β
DEPLOY.md - Deployment guide
-β
SUMMARY.md - This file
-β
All 7 markdown guides in docs/
-
-### Web Application
-β
Homepage (index.html)
-β
Viewer (viewer.html)
-β
Error page (404.html)
-β
Styles (900+ lines CSS)
-β
Scripts (400+ lines JS)
-
----
-
-## π― Use Cases
-
-### Internal Documentation
-- Team training materials
-- Onboarding guides
-- Technical documentation
-- Process documentation
-
-### External Documentation
-- Public user guides
-- API documentation
-- Integration guides
-- Support documentation
-
-### Knowledge Base
-- FAQ repository
-- Troubleshooting guides
-- Best practices
-- Case studies
-
----
-
-## π Next Steps
-
-### Immediate
-1. β
Build and run the service
-2. β
Access the homepage
-3. β
Test the documentation viewer
-4. β
Review all guides
-
-### Short Term
-1. Customize branding (colors, logo)
-2. Add organization-specific content
-3. Deploy to staging environment
-4. Test with users
-
-### Long Term
-1. Deploy to production
-2. Set up monitoring
-3. Add search functionality
-4. Implement analytics
-5. Add multi-language support
-
----
-
-## π Support
-
-### Documentation
-- **README.md**: Features and configuration
-- **GETTING_STARTED.md**: Quick start guide
-- **DEPLOY.md**: Production deployment
-- **This file**: Complete summary
-
-### Resources
-- **Homepage**: http://localhost:8080
-- **Viewer**: http://localhost:8080/viewer.html
-- **Email**: support@goa.gov.in
-
----
-
-## π Success!
-
-You now have a **production-ready documentation service** that:
-
-β
**Looks Professional**: Beautiful, modern UI
-β
**Works Perfectly**: All features functional
-β
**Deploys Easily**: Single Docker command
-β
**Performs Well**: Fast, optimized, secure
-β
**Maintains Simply**: Easy to update content
-
----
-
-**Service Name**: Goa-GEL Documentation
-**Version**: 1.0.0
-**Status**: Production Ready β
-**Last Updated**: February 2026
-**Created By**: Goa-GEL Development Team
-
----
-
-**π Ready to host! π**
diff --git a/Documentation/architecture/index.md b/Documentation/architecture/index.md
new file mode 100644
index 0000000..a813e1b
--- /dev/null
+++ b/Documentation/architecture/index.md
@@ -0,0 +1,74 @@
+# Architecture Overview
+
+## System Architecture
+
+```
+βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+β TLAS Platform β
+βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
+β β
+β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
+β β Presentation Layer β β
+β β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β β
+β β β Citizen β β Department β β Admin β β β
+β β β Portal β β Portal β β Console β β β
+β β β (Angular) β β (Angular) β β (Angular) β β β
+β β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β β
+β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
+β β β
+β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
+β β Application Layer β β
+β β β β
+β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
+β β β API Gateway (NestJS) β β β
+β β β βββββββββββββ βββββββββββββ βββββββββββββ β β β
+β β β β Auth β βApplicationsβ β Documents β β β β
+β β β β Module β β Module β β Module β β β β
+β β β βββββββββββββ βββββββββββββ βββββββββββββ β β β
+β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
+β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
+β β β
+β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
+β β Data Layer β β
+β β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β β
+β β β PostgreSQL β β Redis β β File Store β β β
+β β β (Primary) β β (Cache) β β (Documents) β β β
+β β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β β
+β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
+β β β
+β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
+β β Blockchain Layer β β
+β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
+β β β Hyperledger Besu Network β β β
+β β β βββββββββββββββ βββββββββββββββ β β β
+β β β β NFT Smart β β Ledger β β β β
+β β β β Contract β β Storage β β β β
+β β β βββββββββββββββ βββββββββββββββ β β β
+β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
+β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
+β β
+βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+```
+
+## Key Design Decisions
+
+| Decision | Rationale |
+|----------|-----------|
+| Angular SPA | Rich interactive UI, offline capability |
+| NestJS Backend | TypeScript consistency, modular architecture |
+| PostgreSQL | ACID compliance, JSON support, proven reliability |
+| Hyperledger Besu | Ethereum-compatible, enterprise features, private network |
+| Docker Containers | Consistent deployment, scalability |
+
+## Data Flow
+
+1. **Application Submission**: User β Frontend β API β Database β Workflow Engine
+2. **Document Upload**: User β Frontend β API β File Storage β Hash to Blockchain
+3. **Certificate Issuance**: Approval β Smart Contract β NFT Minted β Certificate Generated
+
+## Scalability
+
+- Horizontal scaling: Multiple API instances behind load balancer
+- Database scaling: Read replicas for query load
+- Caching: Redis for session and query caching
+- Async processing: Queue-based document processing
diff --git a/Documentation/business/governance.md b/Documentation/business/governance.md
new file mode 100644
index 0000000..a6ce2c3
--- /dev/null
+++ b/Documentation/business/governance.md
@@ -0,0 +1,62 @@
+# Governance Model
+
+## Data Ownership
+
+| Data Type | Owner | Access |
+|-----------|-------|--------|
+| Application data | Issuing department | Department staff only |
+| Citizen information | Government | Authorized personnel |
+| Blockchain records | State IT | Read-only public verification |
+| Audit logs | Compliance authority | Designated auditors |
+
+## Role Hierarchy
+
+```
+State Administrator
+ β
+ βββ Department Admin
+ β β
+ β βββ Supervisor
+ β β β
+ β β βββ Officer
+ β β
+ β βββ Viewer (Reports only)
+ β
+ βββ Technical Admin (System operations)
+```
+
+## Access Control Matrix
+
+| Action | Officer | Supervisor | Dept Admin | State Admin |
+|--------|---------|------------|------------|-------------|
+| View applications | Own queue | Department | Department | All |
+| Approve/Reject | Yes | Yes | Yes | No |
+| Configure workflow | No | No | Yes | Yes |
+| Manage users | No | No | Yes | Yes |
+| System settings | No | No | No | Yes |
+
+## Audit Requirements
+
+All actions are logged with:
+- User identity
+- Timestamp (UTC)
+- Action type
+- Before/after state
+- IP address
+- Session identifier
+
+Logs are:
+- Immutable (append-only)
+- Retained for 7 years
+- Exportable for external audit
+- Searchable by authorized personnel
+
+## Change Management
+
+| Change Type | Approval Required |
+|-------------|-------------------|
+| Workflow modification | Department Admin |
+| User role assignment | Department Admin |
+| Department onboarding | State Admin |
+| System configuration | Technical Admin + State Admin |
+| Security policy | State Admin + Compliance |
diff --git a/Documentation/business/index.md b/Documentation/business/index.md
new file mode 100644
index 0000000..11a188c
--- /dev/null
+++ b/Documentation/business/index.md
@@ -0,0 +1,47 @@
+# Executive Summary
+
+## The Challenge
+
+Government licensing in Goa processes over 50,000 applications annually across 15+ departments. Current paper-based systems result in:
+
+- 45-90 day average processing times
+- Estimated 8-12% fraudulent documents in circulation
+- No real-time tracking for citizens
+- Incomplete audit trails leading to compliance gaps
+- High staff overhead on administrative tasks
+
+## The Solution
+
+TLAS (Tokenized License Approval System) digitizes the complete license lifecycle:
+
+1. **Online application** with DigiLocker integration
+2. **Automated workflow** with configurable approval stages
+3. **Blockchain-issued certificates** that cannot be forged
+4. **Real-time tracking** for applicants and administrators
+5. **Complete audit trail** for every transaction
+
+## Expected Outcomes
+
+| Metric | Target |
+|--------|--------|
+| Processing time reduction | 60% |
+| Citizen portal adoption | 80%+ |
+| Document fraud | Zero tolerance |
+| Staff productivity gain | 40% |
+| Audit compliance | 100% |
+
+## Investment Summary
+
+| Category | Description |
+|----------|-------------|
+| Platform License | Annual subscription per department |
+| Implementation | One-time setup and configuration |
+| Training | Staff onboarding program |
+| Support | 24/7 technical assistance |
+
+## Governance
+
+- Department retains full control over workflow rules
+- All data stored in government infrastructure
+- Blockchain network operated by state IT department
+- Regular compliance audits by designated authority
diff --git a/Documentation/business/process-flows.md b/Documentation/business/process-flows.md
new file mode 100644
index 0000000..3fb8fc5
--- /dev/null
+++ b/Documentation/business/process-flows.md
@@ -0,0 +1,110 @@
+# Process Flows
+
+## License Application Flow
+
+```
+ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
+β Citizen β β System β β Department β
+ββββββββ¬ββββββββ ββββββββ¬ββββββββ ββββββββ¬ββββββββ
+ β β β
+ β 1. Submit β β
+ β Application β β
+ ββββββββββββββββββββΊβ β
+ β β β
+ β β 2. Validate β
+ β β & Route β
+ β ββββββββββββββββββββΊβ
+ β β β
+ β 3. Status β β 4. Review
+ β Updates β β & Process
+ βββββββββββββββββββββ€ β
+ β β β
+ β β 5. Approval β
+ β βββββββββββββββββββββ€
+ β β β
+ β β 6. Mint NFT β
+ β β Certificate β
+ β β β
+ β 7. Certificate β β
+ β Ready β β
+ βββββββββββββββββββββ€ β
+ β β β
+```
+
+## Multi-Stage Approval Flow
+
+```
+Application
+ β
+ βΌ
+βββββββββββββββββββ
+β Document β βββΊ Return for correction
+β Verification β
+ββββββββββ¬βββββββββ
+ β
+ βΌ
+βββββββββββββββββββ
+β Technical β βββΊ Reject with reason
+β Review β
+ββββββββββ¬βββββββββ
+ β
+ βΌ
+βββββββββββββββββββ
+β Supervisor β βββΊ Send back for review
+β Approval β
+ββββββββββ¬βββββββββ
+ β
+ βΌ
+βββββββββββββββββββ
+β License β
+β Issuance β
+ββββββββββ¬βββββββββ
+ β
+ βΌ
+ Certificate
+ Issued
+```
+
+## Certificate Verification Flow
+
+```
+βββββββββββββββ βββββββββββββββ βββββββββββββββ
+β Verifier β β System β β Blockchain β
+ββββββββ¬βββββββ ββββββββ¬βββββββ ββββββββ¬βββββββ
+ β β β
+ β 1. Scan QR β β
+ β or Enter ID β β
+ ββββββββββββββββββββΊβ β
+ β β β
+ β β 2. Query Token β
+ β ββββββββββββββββββββΊβ
+ β β β
+ β β 3. Token Data β
+ β βββββββββββββββββββββ€
+ β β β
+ β 4. Verification β β
+ β Result β β
+ βββββββββββββββββββββ€ β
+ β β β
+```
+
+## Renewal Flow
+
+```
+1. System sends renewal reminder (30 days before expiry)
+ β
+ βΌ
+2. Applicant initiates renewal through portal
+ β
+ βΌ
+3. Pre-filled form with existing data
+ β
+ βΌ
+4. Updated documents uploaded if required
+ β
+ βΌ
+5. Expedited review (previous history available)
+ β
+ βΌ
+6. New certificate issued (previous marked as renewed)
+```
diff --git a/Documentation/business/roadmap.md b/Documentation/business/roadmap.md
new file mode 100644
index 0000000..a188150
--- /dev/null
+++ b/Documentation/business/roadmap.md
@@ -0,0 +1,52 @@
+# Implementation Roadmap
+
+## Phase 1: Foundation (Weeks 1-4)
+
+| Task | Deliverable |
+|------|-------------|
+| Infrastructure setup | Production environment ready |
+| Database deployment | PostgreSQL cluster configured |
+| Blockchain network | Besu nodes operational |
+| Core API deployment | Authentication and base APIs |
+
+**Exit Criteria**: Platform accessible, admin login functional
+
+## Phase 2: Department Onboarding (Weeks 5-8)
+
+| Task | Deliverable |
+|------|-------------|
+| Workflow configuration | First department workflows defined |
+| User provisioning | Department staff accounts created |
+| Training | Staff trained on platform usage |
+| Pilot launch | First department processing live |
+
+**Exit Criteria**: Single department processing applications
+
+## Phase 3: Expansion (Weeks 9-16)
+
+| Task | Deliverable |
+|------|-------------|
+| Additional departments | 5+ departments onboarded |
+| DigiLocker integration | Citizen authentication live |
+| Payment integration | Online fee collection enabled |
+| Mobile optimization | Responsive design validated |
+
+**Exit Criteria**: Multi-department operations stable
+
+## Phase 4: Optimization (Ongoing)
+
+| Task | Deliverable |
+|------|-------------|
+| Performance tuning | Sub-second response times |
+| Analytics dashboards | Management reporting enabled |
+| Workflow refinement | SLA compliance improved |
+| Feature additions | Based on user feedback |
+
+## Success Metrics
+
+| Phase | Metric | Target |
+|-------|--------|--------|
+| Phase 1 | System uptime | 99.5% |
+| Phase 2 | Staff adoption | 80% active |
+| Phase 3 | Citizen adoption | 50% online applications |
+| Phase 4 | Processing time | 60% reduction |
diff --git a/Documentation/business/value-proposition.md b/Documentation/business/value-proposition.md
new file mode 100644
index 0000000..95fc826
--- /dev/null
+++ b/Documentation/business/value-proposition.md
@@ -0,0 +1,48 @@
+# Value Proposition
+
+## For Citizens
+
+| Before TLAS | After TLAS |
+|-------------|------------|
+| Multiple office visits | Apply from anywhere |
+| No status visibility | Real-time tracking |
+| Paper certificates (forgeable) | Blockchain-verified digital certificate |
+| Manual verification requests | Instant QR verification |
+| 45-90 day processing | Significantly reduced timeline |
+
+## For Departments
+
+| Before TLAS | After TLAS |
+|-------------|------------|
+| Paper file management | Digital workflow |
+| Manual tracking registers | Automated status updates |
+| No workload visibility | Dashboard with queue metrics |
+| Ad-hoc processing | Standardized workflows with SLAs |
+| Scattered audit records | Complete digital audit trail |
+
+## For Government
+
+| Challenge | TLAS Solution |
+|-----------|---------------|
+| Document fraud | Cryptographically signed certificates |
+| Corruption perception | Transparent, auditable process |
+| Service delivery complaints | Measurable SLA compliance |
+| Data silos | Unified platform with reporting |
+| Legacy system burden | Modern, maintainable architecture |
+
+## Quantified Benefits
+
+### Processing Efficiency
+- 60% reduction in average processing time
+- 80% reduction in status inquiry calls
+- 50% reduction in returned applications (better validation)
+
+### Cost Savings
+- Reduced paper, printing, and storage costs
+- Lower staff overhead on administrative tasks
+- Eliminated manual verification expenses
+
+### Revenue Protection
+- Zero fraudulent licenses through blockchain verification
+- Improved fee collection through online payments
+- Better compliance through automated tracking
diff --git a/Documentation/compliance/audit.md b/Documentation/compliance/audit.md
new file mode 100644
index 0000000..e13c2db
--- /dev/null
+++ b/Documentation/compliance/audit.md
@@ -0,0 +1,86 @@
+# Audit Framework
+
+## Audit Logging
+
+### What is Logged
+
+| Event Type | Details Captured |
+|------------|------------------|
+| Authentication | User ID, timestamp, IP, success/failure |
+| Application Actions | User, action, application ID, before/after state |
+| Document Access | User, document ID, action (view/download) |
+| Configuration Changes | User, setting, old value, new value |
+| System Events | Service, event type, severity |
+
+### Log Format
+
+```json
+{
+ "timestamp": "2026-02-09T10:30:00.000Z",
+ "eventType": "APPLICATION_APPROVED",
+ "userId": "DEPT-OFFICER-001",
+ "sessionId": "sess_abc123",
+ "ipAddress": "10.0.1.50",
+ "resource": {
+ "type": "APPLICATION",
+ "id": "APP-2026-00001"
+ },
+ "action": "APPROVE",
+ "previousState": "IN_REVIEW",
+ "newState": "APPROVED",
+ "metadata": {
+ "stage": "SUPERVISOR_APPROVAL",
+ "notes": "Documents verified"
+ }
+}
+```
+
+### Log Retention
+
+| Log Type | Retention Period |
+|----------|------------------|
+| Security events | 7 years |
+| Application actions | 7 years |
+| System logs | 1 year |
+| Debug logs | 30 days |
+
+## Audit Reports
+
+### Standard Reports
+
+| Report | Frequency | Recipients |
+|--------|-----------|------------|
+| Login Activity | Daily | Security team |
+| Application Processing | Weekly | Department heads |
+| SLA Compliance | Weekly | Management |
+| System Health | Daily | IT operations |
+
+### On-Demand Reports
+
+Available through Admin Console:
+- User activity by date range
+- Application history
+- Document access log
+- Configuration change history
+
+## Compliance Audits
+
+### Internal Audits
+
+- Quarterly access review
+- Annual security assessment
+- Monthly SLA review
+
+### External Audits
+
+- Annual third-party security audit
+- Regulatory compliance review as required
+- Blockchain transaction verification
+
+## Tamper Detection
+
+Audit logs are protected by:
+- Append-only storage
+- Cryptographic hash chaining
+- Separate log storage from application database
+- Real-time replication to secure archive
diff --git a/Documentation/compliance/data-protection.md b/Documentation/compliance/data-protection.md
new file mode 100644
index 0000000..46a1217
--- /dev/null
+++ b/Documentation/compliance/data-protection.md
@@ -0,0 +1,64 @@
+# Data Protection
+
+## Data Classification
+
+| Classification | Examples | Handling |
+|----------------|----------|----------|
+| **Public** | Published license numbers, verification status | No restrictions |
+| **Internal** | Processing statistics, workflow configurations | Staff access only |
+| **Confidential** | Applicant personal data, documents | Role-based access |
+| **Restricted** | Authentication credentials, encryption keys | System access only |
+
+## Personal Data Inventory
+
+| Data Category | Fields | Purpose | Retention |
+|---------------|--------|---------|-----------|
+| Identity | Name, Aadhaar (masked), photo | Applicant identification | License validity + 7 years |
+| Contact | Email, phone, address | Communication | License validity + 7 years |
+| Business | Business name, registration | License application | License validity + 7 years |
+| Documents | Uploaded files | Verification | License validity + 7 years |
+| Activity | Login times, actions | Audit | 7 years |
+
+## Data Subject Rights
+
+### Right to Access
+Applicants can view all their personal data through the portal under "My Profile" and "My Applications."
+
+### Right to Correction
+Applicants can request corrections through the portal. Changes require verification for critical fields.
+
+### Right to Erasure
+Limited by legal retention requirements. Non-essential data can be erased upon request after license expiry.
+
+### Right to Portability
+Data export available in JSON and PDF formats through the portal.
+
+## Data Security Controls
+
+### Encryption
+
+| State | Method |
+|-------|--------|
+| At Rest | AES-256 (database, files) |
+| In Transit | TLS 1.3 |
+| Backups | AES-256 with separate key |
+
+### Access Control
+
+- Role-based permissions
+- Department-level data isolation
+- Session timeout after inactivity
+- Failed login lockout
+
+### Anonymization
+
+For analytics and reporting, personal identifiers are removed or pseudonymized.
+
+## Breach Response
+
+1. Detection and containment
+2. Impact assessment
+3. Notification to affected individuals (within 72 hours)
+4. Notification to CERT-In (as required)
+5. Root cause analysis
+6. Remediation
diff --git a/Documentation/compliance/index.md b/Documentation/compliance/index.md
new file mode 100644
index 0000000..f3623e3
--- /dev/null
+++ b/Documentation/compliance/index.md
@@ -0,0 +1,72 @@
+# Compliance Framework
+
+## Overview
+
+TLAS is designed and operated in compliance with applicable Indian laws, government standards, and international security frameworks.
+
+## Regulatory Compliance
+
+### Information Technology Act, 2000
+
+| Requirement | Implementation |
+|-------------|----------------|
+| Section 3A: Electronic signatures | Digital certificates with PKI |
+| Section 4: Legal recognition of electronic records | Blockchain-based immutable records |
+| Section 43A: Data protection | Encryption at rest and in transit |
+| Section 72A: Breach notification | Incident response procedures |
+
+### Digital Personal Data Protection Act, 2023
+
+| Principle | Implementation |
+|-----------|----------------|
+| Lawful purpose | Data collected only for licensing functions |
+| Purpose limitation | No secondary use without consent |
+| Data minimization | Only necessary fields collected |
+| Accuracy | Applicant can update their information |
+| Storage limitation | Defined retention periods |
+| Security safeguards | Technical and organizational measures |
+
+### Government Guidelines
+
+| Standard | Compliance |
+|----------|------------|
+| GIGW 3.0 | Web accessibility guidelines followed |
+| MeitY Cloud Guidelines | Data residency in India |
+| NIC Security Guidelines | Network and application security |
+
+## Security Standards
+
+### OWASP Top 10 Mitigation
+
+| Vulnerability | Control |
+|---------------|---------|
+| Injection | Parameterized queries, input validation |
+| Broken Authentication | JWT with secure configuration |
+| Sensitive Data Exposure | TLS 1.3, AES-256 encryption |
+| XML External Entities | XML parsing disabled where not needed |
+| Broken Access Control | RBAC with principle of least privilege |
+| Security Misconfiguration | Hardened deployment checklist |
+| Cross-Site Scripting | Output encoding, CSP headers |
+| Insecure Deserialization | Schema validation |
+| Components with Vulnerabilities | Automated dependency scanning |
+| Insufficient Logging | Comprehensive audit logging |
+
+### ISO 27001 Alignment
+
+TLAS security controls align with ISO 27001 Annex A:
+
+- A.5: Information security policies
+- A.6: Organization of information security
+- A.9: Access control
+- A.10: Cryptography
+- A.12: Operations security
+- A.14: System acquisition and development
+- A.16: Incident management
+- A.18: Compliance
+
+## Documentation Index
+
+- [Data Protection](/compliance/data-protection) - Personal data handling procedures
+- [Audit Framework](/compliance/audit) - Logging, monitoring, and audit procedures
+- [Security Standards](/compliance/security) - Technical security controls
+- [Regulatory Alignment](/compliance/regulatory) - Detailed compliance mapping
diff --git a/Documentation/compliance/regulatory.md b/Documentation/compliance/regulatory.md
new file mode 100644
index 0000000..4ca2e88
--- /dev/null
+++ b/Documentation/compliance/regulatory.md
@@ -0,0 +1,65 @@
+# Regulatory Alignment
+
+## Indian Legal Framework
+
+### Information Technology Act, 2000
+
+| Section | Requirement | Compliance |
+|---------|-------------|------------|
+| 3A | Electronic signatures | Digital certificates with PKI infrastructure |
+| 4 | Legal recognition of e-records | Blockchain provides immutable records |
+| 43A | Reasonable security | ISO 27001-aligned controls |
+| 72A | Breach notification | Incident response procedures documented |
+
+### Digital Personal Data Protection Act, 2023
+
+| Principle | Implementation |
+|-----------|----------------|
+| Lawful processing | Consent obtained for data collection |
+| Purpose limitation | Data used only for license processing |
+| Data minimization | Only necessary fields collected |
+| Accuracy | Self-service data correction available |
+| Storage limitation | Retention policy enforced |
+| Security safeguards | Encryption and access controls |
+
+### Government of India Guidelines
+
+| Standard | Scope | Compliance |
+|----------|-------|------------|
+| GIGW 3.0 | Web accessibility | WCAG 2.1 AA compliant |
+| MeitY Cloud | Data residency | All data in India |
+| NIC Guidelines | Security | Penetration tested |
+
+## Audit Compliance
+
+### Annual Requirements
+
+| Audit Type | Frequency | Conducted By |
+|------------|-----------|--------------|
+| Security audit | Annual | Empaneled auditor |
+| Compliance review | Annual | Internal audit |
+| Access review | Quarterly | Department admins |
+
+### Documentation Maintained
+
+- Security policy documents
+- Risk assessment reports
+- Incident response records
+- Access control matrices
+- Change management logs
+- Training records
+
+## Certifications
+
+| Certification | Status | Validity |
+|---------------|--------|----------|
+| STQC Certification | Pending | - |
+| ISO 27001 | Aligned | - |
+| MeitY Empanelment | Applied | - |
+
+## Data Localization
+
+All data stored within India:
+- Primary servers: Mumbai region
+- Backup servers: Delhi region
+- No cross-border data transfer
diff --git a/Documentation/compliance/security.md b/Documentation/compliance/security.md
new file mode 100644
index 0000000..becd05c
--- /dev/null
+++ b/Documentation/compliance/security.md
@@ -0,0 +1,82 @@
+# Security Standards
+
+## OWASP Top 10 Compliance
+
+### A01: Broken Access Control
+
+| Control | Implementation |
+|---------|----------------|
+| RBAC enforcement | All endpoints check user roles |
+| Resource isolation | Department data segregation |
+| CORS configuration | Strict origin validation |
+
+### A02: Cryptographic Failures
+
+| Control | Implementation |
+|---------|----------------|
+| TLS 1.3 | All traffic encrypted |
+| AES-256 | Data encrypted at rest |
+| Key rotation | Quarterly secret rotation |
+
+### A03: Injection
+
+| Control | Implementation |
+|---------|----------------|
+| Parameterized queries | ORM with parameter binding |
+| Input validation | Schema validation on all inputs |
+| Output encoding | Context-aware escaping |
+
+### A04: Insecure Design
+
+| Control | Implementation |
+|---------|----------------|
+| Threat modeling | Security review in design phase |
+| Least privilege | Minimal permissions by default |
+| Defense in depth | Multiple security layers |
+
+### A05: Security Misconfiguration
+
+| Control | Implementation |
+|---------|----------------|
+| Hardened defaults | Security-first configuration |
+| Automated scanning | CI/CD security checks |
+| Error handling | No sensitive data in errors |
+
+### A06: Vulnerable Components
+
+| Control | Implementation |
+|---------|----------------|
+| Dependency scanning | Weekly automated scans |
+| Update policy | Critical patches within 48h |
+| SBOM | Software bill of materials tracked |
+
+### A07: Authentication Failures
+
+| Control | Implementation |
+|---------|----------------|
+| Strong passwords | Minimum 12 characters |
+| Account lockout | 5 failed attempts |
+| Session management | Secure cookie settings |
+
+### A08: Integrity Failures
+
+| Control | Implementation |
+|---------|----------------|
+| Signed artifacts | All deployments verified |
+| Blockchain verification | Certificates on chain |
+| Audit logging | Tamper-evident logs |
+
+### A09: Logging Failures
+
+| Control | Implementation |
+|---------|----------------|
+| Comprehensive logging | All security events captured |
+| Log protection | Append-only storage |
+| Monitoring | Real-time alerting |
+
+### A10: SSRF
+
+| Control | Implementation |
+|---------|----------------|
+| URL validation | Allowlist for external requests |
+| Network segmentation | Internal services isolated |
diff --git a/Documentation/departments/index.md b/Documentation/departments/index.md
new file mode 100644
index 0000000..1225b4a
--- /dev/null
+++ b/Documentation/departments/index.md
@@ -0,0 +1,98 @@
+# Department User Guide
+
+## Overview
+
+This guide covers daily operations for department staff processing license applications through TLAS.
+
+## Logging In
+
+1. Navigate to your department portal URL
+2. Enter your department code and API key
+3. Click "Sign In"
+
+Your dashboard displays:
+- Pending applications in your queue
+- Applications requiring attention (SLA warnings)
+- Recent activity summary
+
+## Queue Management
+
+### Viewing Your Queue
+
+The main queue shows applications assigned to you:
+
+| Column | Description |
+|--------|-------------|
+| Application ID | Unique identifier |
+| Applicant | Name and contact |
+| License Type | Category of license |
+| Submitted | Date received |
+| Status | Current stage |
+| SLA | Time remaining |
+
+### Filtering and Sorting
+
+- Filter by status: Pending, In Review, Returned
+- Filter by license type
+- Sort by date, SLA urgency, or applicant name
+- Search by application ID or applicant name
+
+## Processing Applications
+
+### Review Checklist
+
+1. Open application from queue
+2. Verify applicant information
+3. Check all required documents are present
+4. Validate document authenticity
+5. Review any previous notes or history
+6. Take action: Approve, Reject, or Return
+
+### Document Verification
+
+For each uploaded document:
+- View full document
+- Check document type matches requirement
+- Verify document is legible
+- Compare with DigiLocker records if available
+- Add verification notes
+
+### Taking Action
+
+**Approve**: Application moves to next stage or final issuance
+- Requires all documents verified
+- Add approval notes (optional)
+
+**Reject**: Application is denied
+- Select rejection reason from list
+- Provide detailed explanation
+- Applicant notified with reason
+
+**Return**: Application sent back for corrections
+- Specify what needs correction
+- Select affected documents
+- Applicant can resubmit
+
+## Workflow Stages
+
+Each license type has defined stages:
+
+```
+Document Verification β Technical Review β Supervisor Approval β Issuance
+```
+
+Your role determines which stages you can process.
+
+## Keyboard Shortcuts
+
+| Key | Action |
+|-----|--------|
+| `N` | Next application |
+| `P` | Previous application |
+| `A` | Approve (if eligible) |
+| `R` | Return to applicant |
+| `/` | Search |
+
+## Need Help?
+
+Contact your Department Administrator or IT support for assistance.
diff --git a/Documentation/departments/issuance.md b/Documentation/departments/issuance.md
new file mode 100644
index 0000000..7d1781e
--- /dev/null
+++ b/Documentation/departments/issuance.md
@@ -0,0 +1,88 @@
+# License Issuance
+
+## Issuance Process
+
+When an application reaches final approval:
+
+```
+Final Approval
+ β
+ βΌ
+βββββββββββββββββββ
+β System creates β
+β license record β
+ββββββββββ¬βββββββββ
+ β
+ βΌ
+βββββββββββββββββββ
+β NFT minted on β
+β blockchain β
+ββββββββββ¬βββββββββ
+ β
+ βΌ
+βββββββββββββββββββ
+β Certificate β
+β generated (PDF) β
+ββββββββββ¬βββββββββ
+ β
+ βΌ
+βββββββββββββββββββ
+β Applicant β
+β notified β
+βββββββββββββββββββ
+```
+
+## Certificate Contents
+
+Each issued certificate includes:
+
+| Field | Description |
+|-------|-------------|
+| License Number | Unique identifier (GOA/DEPT/YEAR/SERIAL) |
+| Holder Name | Legal name of licensee |
+| License Type | Category of license |
+| Issue Date | Date of issuance |
+| Valid Until | Expiration date |
+| Issuing Authority | Department name and officer |
+| QR Code | Verification link |
+| Digital Signature | Cryptographic signature |
+
+## Blockchain Record
+
+The NFT token contains:
+
+```json
+{
+ "tokenId": "0x123...",
+ "licenseNumber": "GOA/TRADE/2026/00001",
+ "documentHash": "SHA256:abc...",
+ "issuedAt": 1707500000,
+ "issuedBy": "0xDeptAddress..."
+}
+```
+
+## Verification
+
+Anyone can verify a certificate:
+
+1. Scan QR code on certificate
+2. Or visit verification portal
+3. Enter license number
+4. System queries blockchain
+5. Displays verification result
+
+Verification shows:
+- Valid/Invalid status
+- License details
+- Issuance history
+- Current status (active/expired/revoked)
+
+## Revocation
+
+If a license must be revoked:
+
+1. Department admin initiates revocation
+2. Reason documented
+3. Blockchain record updated (token burned)
+4. Certificate marked as revoked
+5. Holder notified
diff --git a/Documentation/departments/processing.md b/Documentation/departments/processing.md
new file mode 100644
index 0000000..6e31d01
--- /dev/null
+++ b/Documentation/departments/processing.md
@@ -0,0 +1,74 @@
+# Application Processing
+
+## Application States
+
+| State | Description | Actions Available |
+|-------|-------------|-------------------|
+| `SUBMITTED` | New application received | Assign, View |
+| `IN_REVIEW` | Under officer review | Approve, Reject, Return |
+| `RETURNED` | Sent back for corrections | View (applicant corrects) |
+| `APPROVED` | All stages complete | Issue certificate |
+| `REJECTED` | Application denied | View, Appeal (applicant) |
+| `ISSUED` | Certificate generated | View, Verify |
+
+## Processing an Application
+
+### Step 1: Open Application
+
+From your queue, click on the application row to open the detail view.
+
+### Step 2: Review Information
+
+Verify applicant-provided information:
+- Personal/business details
+- Contact information
+- Application-specific data
+
+### Step 3: Check Documents
+
+For each required document:
+1. Click document thumbnail to open full view
+2. Verify document is legible
+3. Confirm document type matches requirement
+4. Check validity dates where applicable
+5. Compare with DigiLocker records (if available)
+
+### Step 4: Take Action
+
+**Approve**
+- Click "Approve" button
+- Add comments (optional)
+- Confirm action
+- Application moves to next stage
+
+**Return for Corrections**
+- Click "Return" button
+- Select document(s) needing correction
+- Provide specific correction instructions
+- Confirm action
+- Applicant notified to resubmit
+
+**Reject**
+- Click "Reject" button
+- Select rejection reason from list
+- Provide detailed explanation
+- Confirm action
+- Application closed, applicant notified
+
+## Bulk Actions
+
+For multiple similar applications:
+1. Select applications using checkboxes
+2. Click "Bulk Actions"
+3. Choose action (Assign, Export)
+4. Confirm
+
+Note: Approve/Reject must be done individually.
+
+## Time Tracking
+
+System tracks:
+- Time in current stage
+- Total processing time
+- Officer active time on application
+- SLA remaining
diff --git a/Documentation/departments/reporting.md b/Documentation/departments/reporting.md
new file mode 100644
index 0000000..aedfd79
--- /dev/null
+++ b/Documentation/departments/reporting.md
@@ -0,0 +1,67 @@
+# Reporting & Analytics
+
+## Dashboard Overview
+
+The department dashboard displays:
+
+- **Applications Today**: New submissions
+- **Pending Review**: Items in queue
+- **Processed Today**: Completed actions
+- **SLA Alerts**: Approaching deadlines
+
+## Standard Reports
+
+### Processing Report
+
+| Metric | Description |
+|--------|-------------|
+| Total Received | Applications submitted |
+| Total Processed | Approved + Rejected |
+| Approval Rate | % approved |
+| Avg. Processing Time | Days from submit to decision |
+
+### SLA Compliance Report
+
+| Metric | Description |
+|--------|-------------|
+| On-Time | Completed within SLA |
+| Breached | Exceeded SLA |
+| Compliance % | On-time / Total |
+| Avg. Delay | Days over SLA (when breached) |
+
+### Officer Performance
+
+| Metric | Description |
+|--------|-------------|
+| Processed Count | Applications handled |
+| Avg. Processing Time | Per application |
+| Return Rate | % returned for corrections |
+| SLA Compliance | % within deadline |
+
+## Generating Reports
+
+1. Navigate to **Reports** section
+2. Select report type
+3. Choose date range
+4. Apply filters (optional)
+5. Click **Generate**
+6. Download as PDF or Excel
+
+## Scheduled Reports
+
+Configure automatic report delivery:
+
+1. Go to **Settings** β **Scheduled Reports**
+2. Click **Add Schedule**
+3. Select report type
+4. Set frequency (daily/weekly/monthly)
+5. Add recipients
+6. Save
+
+## Export Options
+
+| Format | Use Case |
+|--------|----------|
+| PDF | Formal reporting |
+| Excel | Data analysis |
+| CSV | System integration |
diff --git a/Documentation/departments/verification.md b/Documentation/departments/verification.md
new file mode 100644
index 0000000..a71673f
--- /dev/null
+++ b/Documentation/departments/verification.md
@@ -0,0 +1,60 @@
+# Document Verification
+
+## Verification Methods
+
+### Manual Review
+
+Officer visually inspects uploaded documents:
+- Document legibility
+- Information consistency
+- Valid dates
+- Proper format
+
+### DigiLocker Verification
+
+For supported documents:
+1. Click "Verify with DigiLocker" button
+2. System fetches document from DigiLocker
+3. Compares with uploaded version
+4. Shows match status
+
+Supported documents:
+- Aadhaar
+- PAN Card
+- Driving License
+- Vehicle Registration
+- Academic Certificates (selected universities)
+
+### Hash Verification
+
+For previously issued documents:
+1. System calculates document hash
+2. Compares with stored hash
+3. Confirms document integrity
+
+## Verification Status
+
+| Status | Meaning |
+|--------|---------|
+| β
Verified | Document authenticated |
+| β οΈ Unverified | Pending manual review |
+| β Failed | Verification unsuccessful |
+| β³ Processing | Verification in progress |
+
+## Common Issues
+
+**Blurry Document**
+- Return to applicant with clear instructions
+- Request higher quality scan
+
+**Expired Document**
+- Check if license type allows expired documents
+- Return if valid document required
+
+**Name Mismatch**
+- Compare with other documents
+- Request explanation or corrected document
+
+**Missing Information**
+- Identify specific missing fields
+- Return with detailed requirements
diff --git a/Documentation/departments/workflows.md b/Documentation/departments/workflows.md
new file mode 100644
index 0000000..f1cc411
--- /dev/null
+++ b/Documentation/departments/workflows.md
@@ -0,0 +1,80 @@
+# Workflow Management
+
+## Understanding Workflows
+
+A workflow defines the approval stages an application passes through before license issuance. Department administrators configure workflows for each license type.
+
+## Workflow Components
+
+### Stages
+
+Each stage represents a review step:
+
+| Property | Description |
+|----------|-------------|
+| Name | Stage identifier (e.g., "Document Verification") |
+| Order | Sequence position (1, 2, 3...) |
+| Assignee Rule | Who receives applications at this stage |
+| Required Actions | What must be completed to proceed |
+| SLA | Maximum time allowed |
+
+### Stage Types
+
+**Sequential**: Applications must pass through in order
+```
+Stage 1 β Stage 2 β Stage 3 β Issuance
+```
+
+**Parallel**: Multiple reviews happen simultaneously
+```
+ ββ Technical Review ββ
+Stage 1 ββ€ ββ Final Approval
+ ββ Financial Review ββ
+```
+
+### Assignment Rules
+
+- **Round Robin**: Distribute evenly across available officers
+- **Load Based**: Assign to officer with fewest pending items
+- **Manual**: Supervisor assigns each application
+- **Specific Role**: Route to designated role
+
+## Creating a Workflow
+
+1. Navigate to **Settings** β **Workflows**
+2. Click **Create New Workflow**
+3. Enter workflow name and description
+4. Add stages in sequence:
+ - Define stage name
+ - Set assignment rule
+ - Configure SLA duration
+ - Specify required documents
+5. Set workflow as active
+6. Assign to license type(s)
+
+## Modifying Workflows
+
+Changes apply only to new applications. In-progress applications continue with their original workflow.
+
+To modify:
+1. Open workflow in editor
+2. Make changes
+3. Review impact summary
+4. Confirm and save
+
+## SLA Configuration
+
+| Field | Description |
+|-------|-------------|
+| Duration | Hours/days allowed |
+| Warning | Alert before breach |
+| Escalation | Action on breach |
+| Override | Manual extension allowed |
+
+## Best Practices
+
+- Keep stages focused on single responsibility
+- Set realistic SLAs based on actual processing time
+- Use parallel stages for independent reviews
+- Document stage requirements clearly
+- Review workflow performance monthly
diff --git a/Documentation/deployment/index.md b/Documentation/deployment/index.md
new file mode 100644
index 0000000..798a0fb
--- /dev/null
+++ b/Documentation/deployment/index.md
@@ -0,0 +1,72 @@
+# Deployment Guide
+
+## Deployment Options
+
+| Method | Use Case | Complexity |
+|--------|----------|------------|
+| Docker Compose | Single server, development | Low |
+| Kubernetes | Production, high availability | High |
+| Manual | Custom requirements | Medium |
+
+## Quick Deploy (Docker Compose)
+
+```bash
+# Clone repository
+git clone https://github.com/goa-gel/tlas.git
+cd tlas
+
+# Configure
+cp .env.example .env
+# Edit .env with your settings
+
+# Deploy
+docker-compose up -d
+
+# Verify
+docker-compose ps
+curl http://localhost:3000/api/health
+```
+
+## Production Checklist
+
+### Pre-deployment
+
+- [ ] SSL certificates obtained
+- [ ] Domain DNS configured
+- [ ] Environment variables set
+- [ ] Database credentials secured
+- [ ] Backup strategy defined
+
+### Deployment
+
+- [ ] Services deployed
+- [ ] Health checks passing
+- [ ] SSL verified
+- [ ] Firewall configured
+
+### Post-deployment
+
+- [ ] Monitoring configured
+- [ ] Alerts verified
+- [ ] Backup tested
+- [ ] Documentation updated
+
+## Rollback Procedure
+
+```bash
+# Stop current version
+docker-compose down
+
+# Restore previous version
+git checkout
+docker-compose up -d
+
+# Verify
+curl http://localhost:3000/api/health
+```
+
+## Support
+
+For deployment assistance:
+- Email: devops@tlas.gov.in
+- Documentation: This guide
diff --git a/Documentation/developers/authentication.md b/Documentation/developers/authentication.md
new file mode 100644
index 0000000..8d77419
--- /dev/null
+++ b/Documentation/developers/authentication.md
@@ -0,0 +1,81 @@
+# Authentication
+
+## Overview
+
+TLAS uses OAuth 2.0 with JWT tokens for API authentication.
+
+## Obtaining Credentials
+
+Contact your administrator to receive:
+- Client ID
+- Client Secret
+- Authorized scopes
+
+## Token Request
+
+```http
+POST /auth/token HTTP/1.1
+Host: api.tlas.gov.in
+Content-Type: application/x-www-form-urlencoded
+
+grant_type=client_credentials&
+client_id=YOUR_CLIENT_ID&
+client_secret=YOUR_CLIENT_SECRET&
+scope=applications:read applications:write
+```
+
+### Response
+
+```json
+{
+ "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
+ "token_type": "Bearer",
+ "expires_in": 3600,
+ "scope": "applications:read applications:write"
+}
+```
+
+## Using the Token
+
+Include token in Authorization header:
+
+```http
+GET /applications/APP-2026-00001 HTTP/1.1
+Host: api.tlas.gov.in
+Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
+```
+
+## Token Refresh
+
+Tokens expire after 1 hour. Request new token before expiry.
+
+## Available Scopes
+
+| Scope | Access |
+|-------|--------|
+| `applications:read` | View applications |
+| `applications:write` | Submit and update applications |
+| `documents:read` | View documents |
+| `documents:write` | Upload documents |
+| `verification:read` | Verify certificates |
+
+## DigiLocker OAuth
+
+For citizen authentication via DigiLocker:
+
+```http
+GET /auth/digilocker/authorize?
+ redirect_uri=https://yourapp.com/callback&
+ state=random_state_value
+```
+
+User is redirected to DigiLocker. After consent, user returns with authorization code.
+
+## Error Codes
+
+| Code | Description |
+|------|-------------|
+| `invalid_client` | Unknown client ID |
+| `invalid_grant` | Invalid credentials |
+| `invalid_scope` | Requested scope not authorized |
+| `expired_token` | Token has expired |
diff --git a/Documentation/developers/blockchain-apis.md b/Documentation/developers/blockchain-apis.md
new file mode 100644
index 0000000..25997b0
--- /dev/null
+++ b/Documentation/developers/blockchain-apis.md
@@ -0,0 +1,83 @@
+# Blockchain APIs
+
+## Certificate Verification
+
+### Verify by Token ID
+
+```http
+GET /blockchain/verify/{tokenId}
+```
+
+**Response**
+```json
+{
+ "valid": true,
+ "token": {
+ "id": "0x1234567890abcdef",
+ "licenseNumber": "GOA/TRADE/2026/00001",
+ "holder": "ABC Enterprises",
+ "issuedAt": "2026-02-09T10:00:00Z",
+ "validUntil": "2027-02-08T23:59:59Z",
+ "status": "ACTIVE"
+ },
+ "blockchain": {
+ "contractAddress": "0xContract...",
+ "transactionHash": "0xTx...",
+ "blockNumber": 12345,
+ "timestamp": "2026-02-09T10:00:00Z"
+ }
+}
+```
+
+### Verify by License Number
+
+```http
+GET /blockchain/verify?licenseNumber=GOA/TRADE/2026/00001
+```
+
+## Transaction History
+
+### Get Token History
+
+```http
+GET /blockchain/tokens/{tokenId}/history
+```
+
+**Response**
+```json
+{
+ "tokenId": "0x1234...",
+ "events": [
+ {
+ "event": "MINTED",
+ "timestamp": "2026-02-09T10:00:00Z",
+ "transactionHash": "0xMint...",
+ "data": { "to": "0xHolder..." }
+ },
+ {
+ "event": "RENEWED",
+ "timestamp": "2027-02-01T10:00:00Z",
+ "transactionHash": "0xRenew...",
+ "data": { "newExpiry": "2028-02-08" }
+ }
+ ]
+}
+```
+
+## Smart Contract ABI
+
+```solidity
+interface ILicenseNFT {
+ function mint(address to, string licenseNumber, bytes32 documentHash) returns (uint256);
+ function verify(uint256 tokenId) returns (bool valid, LicenseData data);
+ function revoke(uint256 tokenId, string reason);
+ function renew(uint256 tokenId, uint256 newExpiry);
+}
+```
+
+## Block Explorer
+
+View transactions on the block explorer:
+```
+https://explorer.tlas.gov.in/tx/{transactionHash}
+```
diff --git a/Documentation/developers/core-apis.md b/Documentation/developers/core-apis.md
new file mode 100644
index 0000000..c70ddc5
--- /dev/null
+++ b/Documentation/developers/core-apis.md
@@ -0,0 +1,134 @@
+# Core APIs
+
+## Applications
+
+### Submit Application
+
+```http
+POST /applications
+```
+
+**Request Body**
+```json
+{
+ "licenseType": "TRADE_LICENSE",
+ "applicantId": "DL-12345678",
+ "businessName": "ABC Enterprises",
+ "address": {
+ "line1": "123 Main Street",
+ "city": "Panaji",
+ "state": "Goa",
+ "pincode": "403001"
+ },
+ "documents": [
+ { "type": "IDENTITY_PROOF", "documentId": "DOC-001" },
+ { "type": "ADDRESS_PROOF", "documentId": "DOC-002" }
+ ]
+}
+```
+
+**Response**
+```json
+{
+ "success": true,
+ "data": {
+ "applicationId": "APP-2026-00001",
+ "status": "SUBMITTED",
+ "submittedAt": "2026-02-09T10:30:00Z",
+ "estimatedCompletion": "2026-02-16T10:30:00Z"
+ }
+}
+```
+
+### Get Application Status
+
+```http
+GET /applications/:applicationId
+```
+
+**Response**
+```json
+{
+ "success": true,
+ "data": {
+ "applicationId": "APP-2026-00001",
+ "status": "IN_REVIEW",
+ "currentStage": "DOCUMENT_VERIFICATION",
+ "stages": [
+ { "name": "SUBMITTED", "completedAt": "2026-02-09T10:30:00Z" },
+ { "name": "DOCUMENT_VERIFICATION", "startedAt": "2026-02-09T11:00:00Z" }
+ ],
+ "nextAction": "Awaiting document verification"
+ }
+}
+```
+
+### List Applications
+
+```http
+GET /applications?status=PENDING&page=1&limit=20
+```
+
+## Documents
+
+### Upload Document
+
+```http
+POST /documents/upload
+Content-Type: multipart/form-data
+```
+
+**Form Fields**
+- `file`: Document file (PDF, JPG, PNG)
+- `type`: Document type code
+- `applicationId`: Associated application (optional)
+
+**Response**
+```json
+{
+ "success": true,
+ "data": {
+ "documentId": "DOC-2026-00001",
+ "fileName": "identity_proof.pdf",
+ "fileSize": 245678,
+ "mimeType": "application/pdf",
+ "uploadedAt": "2026-02-09T10:25:00Z"
+ }
+}
+```
+
+### Get Document
+
+```http
+GET /documents/:documentId
+```
+
+## Verification
+
+### Verify Certificate
+
+```http
+GET /verify/:tokenId
+```
+
+**Response**
+```json
+{
+ "success": true,
+ "data": {
+ "valid": true,
+ "license": {
+ "number": "GOA/TRADE/2026/00001",
+ "holder": "ABC Enterprises",
+ "issuedBy": "Department of Trade",
+ "issuedAt": "2026-02-09",
+ "validUntil": "2027-02-08"
+ },
+ "blockchain": {
+ "tokenId": "0x1234...",
+ "transactionHash": "0xabcd...",
+ "blockNumber": 12345
+ }
+ }
+}
+```
diff --git a/Documentation/developers/errors.md b/Documentation/developers/errors.md
new file mode 100644
index 0000000..41d69ec
--- /dev/null
+++ b/Documentation/developers/errors.md
@@ -0,0 +1,88 @@
+# Error Handling
+
+## Error Response Format
+
+```json
+{
+ "success": false,
+ "error": {
+ "code": "VALIDATION_ERROR",
+ "message": "Human-readable error message",
+ "details": [
+ { "field": "email", "message": "Invalid email format" }
+ ],
+ "requestId": "req_abc123"
+ }
+}
+```
+
+## HTTP Status Codes
+
+| Code | Meaning |
+|------|---------|
+| 200 | Success |
+| 201 | Created |
+| 400 | Bad Request |
+| 401 | Unauthorized |
+| 403 | Forbidden |
+| 404 | Not Found |
+| 409 | Conflict |
+| 422 | Validation Error |
+| 429 | Rate Limited |
+| 500 | Internal Error |
+
+## Error Codes
+
+### Authentication Errors
+
+| Code | Description |
+|------|-------------|
+| `AUTH_INVALID_TOKEN` | Token is invalid or malformed |
+| `AUTH_EXPIRED_TOKEN` | Token has expired |
+| `AUTH_MISSING_TOKEN` | No token provided |
+| `AUTH_INSUFFICIENT_SCOPE` | Token lacks required permissions |
+
+### Validation Errors
+
+| Code | Description |
+|------|-------------|
+| `VALIDATION_ERROR` | Input validation failed |
+| `VALIDATION_REQUIRED` | Required field missing |
+| `VALIDATION_FORMAT` | Invalid field format |
+| `VALIDATION_RANGE` | Value out of allowed range |
+
+### Resource Errors
+
+| Code | Description |
+|------|-------------|
+| `RESOURCE_NOT_FOUND` | Requested resource doesn't exist |
+| `RESOURCE_CONFLICT` | Resource state conflict |
+| `RESOURCE_LOCKED` | Resource is locked |
+
+### Business Logic Errors
+
+| Code | Description |
+|------|-------------|
+| `APPLICATION_INVALID_STATE` | Action not allowed in current state |
+| `DOCUMENT_TYPE_MISMATCH` | Wrong document type |
+| `WORKFLOW_ERROR` | Workflow processing error |
+
+## Handling Errors
+
+```javascript
+try {
+ const result = await client.applications.create(data);
+} catch (error) {
+ if (error.code === 'VALIDATION_ERROR') {
+ // Handle validation errors
+ error.details.forEach(d => console.log(`${d.field}: ${d.message}`));
+ } else if (error.code === 'AUTH_EXPIRED_TOKEN') {
+ // Refresh token and retry
+ await client.refreshToken();
+ return retry();
+ } else {
+ // Log and report
+ console.error('Unexpected error:', error.requestId);
+ }
+}
+```
diff --git a/Documentation/developers/index.md b/Documentation/developers/index.md
new file mode 100644
index 0000000..a5fbf2c
--- /dev/null
+++ b/Documentation/developers/index.md
@@ -0,0 +1,105 @@
+# API Documentation
+
+## Overview
+
+TLAS provides REST APIs for integrating with external systems. All APIs use JSON for request and response bodies.
+
+## Base URL
+
+```
+Production: https://api.tlas.gov.in/v1
+Staging: https://api-staging.tlas.gov.in/v1
+```
+
+## Authentication
+
+All API requests require authentication via Bearer token.
+
+```http
+Authorization: Bearer
+```
+
+Obtain tokens through the authentication endpoint. See [Authentication](/developers/authentication) for details.
+
+## Request Format
+
+```http
+POST /applications HTTP/1.1
+Host: api.tlas.gov.in
+Authorization: Bearer eyJhbGc...
+Content-Type: application/json
+
+{
+ "licenseType": "TRADE_LICENSE",
+ "applicantId": "12345",
+ "data": { ... }
+}
+```
+
+## Response Format
+
+### Success Response
+
+```json
+{
+ "success": true,
+ "data": {
+ "id": "APP-2026-00001",
+ "status": "SUBMITTED"
+ }
+}
+```
+
+### Error Response
+
+```json
+{
+ "success": false,
+ "error": {
+ "code": "VALIDATION_ERROR",
+ "message": "Invalid license type",
+ "details": [
+ { "field": "licenseType", "message": "Must be one of: TRADE_LICENSE, FOOD_LICENSE" }
+ ]
+ }
+}
+```
+
+## Rate Limits
+
+| Tier | Requests/minute | Burst |
+|------|-----------------|-------|
+| Standard | 60 | 100 |
+| Premium | 300 | 500 |
+
+Rate limit headers included in all responses:
+```http
+X-RateLimit-Limit: 60
+X-RateLimit-Remaining: 45
+X-RateLimit-Reset: 1707500000
+```
+
+## API Endpoints
+
+| Category | Endpoint | Description |
+|----------|----------|-------------|
+| Auth | `POST /auth/token` | Obtain access token |
+| Applications | `POST /applications` | Submit new application |
+| Applications | `GET /applications/:id` | Get application status |
+| Documents | `POST /documents/upload` | Upload document |
+| Verification | `GET /verify/:tokenId` | Verify certificate |
+
+## SDKs
+
+Official SDKs available:
+- JavaScript/TypeScript: `npm install @tlas/sdk`
+- Python: `pip install tlas-sdk`
+- Java: Maven artifact `gov.in.tlas:tlas-sdk`
+
+## Documentation
+
+- [Authentication](/developers/authentication) - Token management
+- [Core APIs](/developers/core-apis) - Application and document APIs
+- [Blockchain APIs](/developers/blockchain-apis) - Certificate verification
+- [Webhooks](/developers/webhooks) - Event notifications
+- [Error Handling](/developers/errors) - Error codes and handling
diff --git a/Documentation/developers/sdks.md b/Documentation/developers/sdks.md
new file mode 100644
index 0000000..e7adfd2
--- /dev/null
+++ b/Documentation/developers/sdks.md
@@ -0,0 +1,94 @@
+# SDKs & Libraries
+
+## JavaScript/TypeScript SDK
+
+### Installation
+
+```bash
+npm install @tlas/sdk
+```
+
+### Usage
+
+```typescript
+import { TLASClient } from '@tlas/sdk';
+
+const client = new TLASClient({
+ baseUrl: 'https://api.tlas.gov.in/v1',
+ clientId: 'your-client-id',
+ clientSecret: 'your-client-secret'
+});
+
+// Submit application
+const application = await client.applications.create({
+ licenseType: 'TRADE_LICENSE',
+ applicantId: 'DL-12345678',
+ data: { ... }
+});
+
+// Check status
+const status = await client.applications.getStatus(application.id);
+
+// Verify certificate
+const verification = await client.certificates.verify('GOA/TRADE/2026/00001');
+```
+
+## Python SDK
+
+### Installation
+
+```bash
+pip install tlas-sdk
+```
+
+### Usage
+
+```python
+from tlas import TLASClient
+
+client = TLASClient(
+ base_url='https://api.tlas.gov.in/v1',
+ client_id='your-client-id',
+ client_secret='your-client-secret'
+)
+
+# Submit application
+application = client.applications.create(
+ license_type='TRADE_LICENSE',
+ applicant_id='DL-12345678',
+ data={...}
+)
+
+# Check status
+status = client.applications.get_status(application['id'])
+
+# Verify certificate
+result = client.certificates.verify('GOA/TRADE/2026/00001')
+```
+
+## Java SDK
+
+### Maven
+
+```xml
+
+ gov.in.tlas
+ tlas-sdk
+ 1.0.0
+
+```
+
+### Usage
+
+```java
+TLASClient client = new TLASClient.Builder()
+ .baseUrl("https://api.tlas.gov.in/v1")
+ .credentials("client-id", "client-secret")
+ .build();
+
+Application app = client.applications()
+ .create("TRADE_LICENSE", "DL-12345678", data);
+
+VerificationResult result = client.certificates()
+ .verify("GOA/TRADE/2026/00001");
+```
diff --git a/Documentation/developers/webhooks.md b/Documentation/developers/webhooks.md
new file mode 100644
index 0000000..c68c02c
--- /dev/null
+++ b/Documentation/developers/webhooks.md
@@ -0,0 +1,77 @@
+# Webhooks
+
+## Overview
+
+TLAS sends webhook notifications for key events. Configure webhook endpoints to receive real-time updates.
+
+## Configuration
+
+Register webhook endpoint:
+
+```http
+POST /webhooks
+Authorization: Bearer
+
+{
+ "url": "https://your-system.com/webhook",
+ "events": ["application.approved", "certificate.issued"],
+ "secret": "your-webhook-secret"
+}
+```
+
+## Event Types
+
+| Event | Trigger |
+|-------|---------|
+| `application.submitted` | New application received |
+| `application.approved` | Application approved |
+| `application.rejected` | Application rejected |
+| `application.returned` | Returned for corrections |
+| `certificate.issued` | License NFT minted |
+| `certificate.revoked` | License revoked |
+
+## Payload Format
+
+```json
+{
+ "event": "application.approved",
+ "timestamp": "2026-02-09T10:00:00Z",
+ "data": {
+ "applicationId": "APP-2026-00001",
+ "licenseType": "TRADE_LICENSE",
+ "applicantId": "DL-12345678"
+ }
+}
+```
+
+## Signature Verification
+
+Verify webhook authenticity using HMAC-SHA256:
+
+```javascript
+const crypto = require('crypto');
+
+function verifySignature(payload, signature, secret) {
+ const expected = crypto
+ .createHmac('sha256', secret)
+ .update(payload)
+ .digest('hex');
+ return crypto.timingSafeEqual(
+ Buffer.from(signature),
+ Buffer.from(expected)
+ );
+}
+```
+
+Header: `X-Webhook-Signature: sha256=`
+
+## Retry Policy
+
+Failed deliveries (non-2xx response) are retried:
+- 1st retry: 1 minute
+- 2nd retry: 5 minutes
+- 3rd retry: 30 minutes
+- 4th retry: 2 hours
+- 5th retry: 24 hours
+
+After 5 failures, webhook is disabled. Re-enable via API.
diff --git a/Documentation/docs/ARCHITECTURE_GUIDE.md b/Documentation/docs/ARCHITECTURE_GUIDE.md
deleted file mode 100644
index 353cd44..0000000
--- a/Documentation/docs/ARCHITECTURE_GUIDE.md
+++ /dev/null
@@ -1,1018 +0,0 @@
-# Goa GEL Blockchain Document Verification Platform - Architecture Guide
-
-## Executive Summary
-
-The Goa Government E-License (GEL) Blockchain Document Verification Platform is a comprehensive solution for managing government licenses and permits through a multi-department approval workflow backed by blockchain technology. The platform leverages Hyperledger Besu with QBFT consensus to ensure tamper-proof records of license issuance.
-
-**Key Innovation**: Multi-department approval workflows with immutable blockchain records and soulbound NFT certificates.
-
----
-
-## 1. System Context (C4 Level 1)
-
-### Overview
-The GEL platform serves as the central integration point for government entities, citizens, and external systems.
-
-### Actors & Systems
-
-#### External Actors
-- **Citizens**: Submit license requests, upload documents, track approval status
-- **Government Departments**: Configure workflows, review and approve requests
-- **Department Operators**: Manage department users and approval rules
-- **Platform Operators**: System administration, monitoring, maintenance
-
-#### External Systems
-- **DigiLocker Mock**: Verifies document authenticity (POC implementation)
-- **Legacy Department Systems**: Integration for existing government databases
-- **National Blockchain Federation**: Future interoperability with national systems
-
----
-
-## 2. Container Architecture (C4 Level 2)
-
-### Layered Architecture
-
-#### Frontend Layer
-```
-Next.js 14 + shadcn/ui
-βββ Pages: Dashboard, License Requests, Approvals
-βββ Components: Forms, Document Upload, Status Tracking
-βββ State: React Context + TanStack Query
-βββ Styling: Tailwind CSS (dark theme optimized)
-Port: 3000
-```
-
-#### API & Backend Layer
-```
-NestJS TypeScript API Gateway (Port 3001)
-βββ Auth Service (API Key + Secret POC)
-βββ Workflow Service
-βββ Approval Service
-βββ Document Service
-βββ Blockchain Integration Module
-```
-
-#### Data Layer
-```
-PostgreSQL Database (Port 5432)
-βββ license_requests table
-βββ approvals table
-βββ documents table
-βββ audit_logs table
-βββ department_registry table
-
-Redis Cache (Port 6379)
-βββ Session management
-βββ Workflow state cache
-βββ Real-time notifications
-
-MinIO Object Storage (Port 9000)
-βββ License documents (PDFs)
-βββ Supporting images
-βββ Document proofs
-βββ Generated certificates
-```
-
-#### Blockchain Layer
-```
-Hyperledger Besu Network (QBFT Consensus)
-βββ 4 Validator Nodes (Ports 8545-8548)
-βββ RPC Endpoints
-βββ Peer-to-Peer Network
-βββ Smart Contracts:
- βββ LicenseRequestNFT (ERC-721 Soulbound)
- βββ ApprovalManager
- βββ DepartmentRegistry
- βββ WorkflowRegistry
-```
-
----
-
-## 3. Blockchain Architecture Deep Dive
-
-### Hyperledger Besu Configuration
-
-#### Network Topology
-```
-4 Validator Nodes (QBFT Consensus)
-βββ Validator 1 (RPC: 8545, P2P: 30303)
-βββ Validator 2 (RPC: 8546, P2P: 30304)
-βββ Validator 3 (RPC: 8547, P2P: 30305)
-βββ Validator 4 (RPC: 8548, P2P: 30306)
-
-Consensus Rule: Requires 3/4 (75%) validator approval
-Block Time: ~12 seconds
-```
-
-### Smart Contracts
-
-#### 1. LicenseRequestNFT (ERC-721 Soulbound)
-```solidity
-Contract Type: ERC-721 (Non-Fungible Token)
-Purpose: Issue immutable, non-transferable license certificates
-
-Key Functions:
-- mint(applicant, licenseHash, metadataURI, issuerDept)
- ββ Creates NFT, emits Transfer event
-- burn(tokenId)
- ββ Revokes license, removes from circulation
-- ownerOf(tokenId) β address
-- tokenURI(tokenId) β string (IPFS or HTTP)
-
-Soulbound Property:
-- _beforeTokenTransfer() override prevents transfers
-- Only issuer can revoke
-- Applicant owns NFT but cannot sell/transfer
-```
-
-#### 2. ApprovalManager
-```solidity
-Purpose: Record and manage multi-department approvals
-
-Key Functions:
-- recordApproval(licenseHash, department, signature)
- ββ Logs approval from specific department
-- recordRejection(licenseHash, department, reason)
- ββ Logs rejection with reason
-- requestChanges(licenseHash, department, details)
- ββ Request changes from applicant
-- getApprovalChain(licenseHash) β approvalRecord[]
- ββ Full approval history
-
-Data Structures:
-ApprovalRecord {
- licenseHash: bytes32,
- department: address,
- approvalStatus: enum (PENDING, APPROVED, REJECTED, CHANGES_REQUESTED),
- timestamp: uint256,
- notes: string,
- signature: bytes
-}
-```
-
-#### 3. DepartmentRegistry
-```solidity
-Purpose: Maintain department information and approvers
-
-Key Functions:
-- registerDepartment(deptId, deptName, metadata)
-- setApprovers(deptId, approverAddresses[])
-- getApprovers(deptId) β address[]
-- isDeptApprover(deptId, address) β bool
-
-Data Structure:
-Department {
- deptId: bytes32,
- name: string,
- approvers: address[],
- isActive: bool,
- registeredAt: uint256
-}
-```
-
-#### 4. WorkflowRegistry
-```solidity
-Purpose: Define and manage license approval workflows
-
-Key Functions:
-- defineWorkflow(workflowId, licenseType, departments[])
-- getWorkflow(workflowId) β workflowConfig
-- getNextApprovers(workflowId, currentStep) β address[]
-
-Data Structure:
-Workflow {
- workflowId: bytes32,
- licenseType: string,
- departments: Department[],
- isSequential: bool,
- timeout: uint256,
- createdAt: uint256
-}
-
-Example: Resort License POC
-ββ Step 1: Tourism Department Review (Parallel possible)
-ββ Step 2: Fire Safety Department Review
-```
-
-### On-Chain vs Off-Chain Data Split
-
-#### On-Chain Data (Blockchain State)
-```
-Immutable & Transparent
-βββ License Hashes (SHA-256 of documents)
-βββ Approval Records (with signatures)
-βββ Department Registry
-βββ Workflow Definitions
-βββ NFT Ownership Records
-
-Benefits:
-- Tamper-proof
-- Publicly verifiable
-- Immutable audit trail
-- Non-repudiation
-```
-
-#### Off-Chain Data (PostgreSQL + MinIO)
-```
-Flexible & Queryable
-βββ Full License Request Details
-βββ Applicant Information
-βββ Document Metadata
-βββ Workflow State (current step)
-βββ User Comments & Notes
-βββ Audit Logs (indexed queries)
-βββ Actual Document Files (PDFs, images)
-
-Benefits:
-- Searchable
-- Quick queries
-- Scalable storage
-- Privacy controls
-```
-
-#### Data Linking
-```
-SHA-256 Hash: Immutable Bridge Between On-Chain & Off-Chain
-
-Document File
- β (hash)
-SHA-256: 0x7f8c...a1b2
- β (stored on-chain)
-Smart Contract State
- β (referenced in off-chain DB)
-PostgreSQL record contains this hash
- β (verification)
-Anyone can hash the document and verify it matches blockchain record
-```
-
----
-
-## 4. Workflow State Machine
-
-### License Request States
-
-```
-DRAFT
-ββ Initial state
-ββ Applicant can edit
-ββ No blockchain record
-ββ Can transition to: SUBMITTED or [abandon]
-
- β [submit for review]
-
-SUBMITTED
-ββ Hash recorded on blockchain
-ββ Locked from editing
-ββ Routed to appropriate departments
-ββ Can transition to: IN_REVIEW or [withdraw]
-
- β [route to approvers]
-
-IN_REVIEW
-ββ Multi-department approval workflow
-ββ Can be parallel or sequential
-ββ Department approvers review documents
-ββ Can transition to: APPROVED, REJECTED, or PENDING_RESUBMISSION
-
- ββ [all approve] β APPROVED
- ββ [any reject] β REJECTED
- ββ [changes requested] β PENDING_RESUBMISSION
-
-PENDING_RESUBMISSION
-ββ Applicant notified of required changes
-ββ Time-limited window for corrections
-ββ Can resubmit documents
-ββ Can transition to: SUBMITTED or [withdraw]
-
- β [resubmit with changes]
-
-SUBMITTED (again in workflow)
- β [back to IN_REVIEW]
-
-APPROVED (Final State)
-ββ All departments approved
-ββ ERC-721 Soulbound NFT minted
-ββ License certificate generated
-ββ Verifiable on blockchain
-ββ Can transition to: REVOKED only
-
- β [license revoked/expired]
-
-REVOKED
-ββ License cancelled
-ββ NFT burned from circulation
-ββ Audit trail preserved
-ββ End state
-
-REJECTED (Terminal State)
-ββ Request denied permanently
-ββ Reason recorded on-chain
-ββ Applicant can appeal (future feature)
-ββ Can transition to: DRAFT (reapply)
-```
-
-### Approval States (Per Department)
-
-```
-PENDING
-ββ Awaiting department review
-ββ Notification sent to approvers
-ββ Can transition to: APPROVED, REJECTED, or CHANGES_REQUESTED
-
- ββ [approve] β APPROVED
- ββ [reject] β REJECTED
- ββ [request changes] β CHANGES_REQUESTED
-
-APPROVED
-ββ Department approved this request
-ββ Recorded on blockchain with signature
-
-REJECTED
-ββ Department rejected request
-ββ Reason recorded
-ββ Triggers overall REJECTED state
-
-CHANGES_REQUESTED
-ββ Department needs clarifications/corrections
-ββ Specific details provided
-ββ Applicant must resubmit
-
-REVIEW_REQUIRED
-ββ Resubmitted after changes
-ββ Needs re-review
-ββ Back to PENDING
-```
-
----
-
-## 5. End-to-End Data Flow
-
-### 11-Step Resort License Approval Process
-
-#### Step 1-2: Submission & Upload
-```
-1. Citizen creates Resort License request in Next.js frontend
-2. Fills in applicant information (name, contact, resort details)
-3. Uploads supporting documents:
- - Property proof
- - Health certificate
- - Fire safety plan
- - Environmental clearance
- - etc.
-
-Frontend sends to NestJS API:
-POST /licenses/create
-βββ Body: License form data
-βββ Files: Multipart documents
-βββ Auth: API Key header
-```
-
-#### Step 3: Document Processing & Hashing
-```
-3a. NestJS Document Service:
- - Receives files
- - Validates file types and sizes
- - Uploads to MinIO with unique IDs
- - Generates SHA-256 hash of each document
- - Creates document metadata records in PostgreSQL
-
-3b. License Request:
- - Created with status: DRAFT
- - All documents linked via hashes
- - No blockchain record yet
-
-3c. API Response to Frontend:
- - License request ID
- - Document upload status
- - License saved locally for editing
-```
-
-#### Step 4: Blockchain Recording
-```
-4a. When citizen submits for approval:
- - API aggregates all document hashes
- - Creates combined SHA-256 (licenseHash)
- - Calls smart contract via RPC
-
-4b. Smart Contract Call:
- POST https://besu-validator-1:8545
- ββ Method: DocumentRegistrar.recordDocumentHash()
- ββ Params:
- β ββ licenseHash: bytes32
- β ββ licenseType: "ResortLicense"
- β ββ department: address (Tourism Dept)
- β ββ timestamp: uint256
- ββ Result: Transaction receipt with block number
-
-4c. QBFT Consensus:
- - Transaction sent to all 4 validators
- - Each validator verifies signature and state
- - 3/4 validators must agree
- - Block included in chain
- - Event: DocumentHashRecorded emitted
-
-4d. Database Update:
- UPDATE license_requests
- SET status = 'SUBMITTED',
- blockchain_tx_hash = '0x...',
- blockchain_block_num = 12345,
- submitted_at = NOW()
- WHERE request_id = 'LR-001'
-```
-
-#### Step 5-6: Route to Departments (Parallel)
-```
-5a. Workflow Engine determines routing:
- - License type: ResortLicense
- - Query WorkflowRegistry for approval workflow
- - Returns: [Tourism Department, Fire Safety Department]
- - Mode: Parallel (can approve simultaneously)
-
-5b. Create Approval Requests:
- INSERT INTO approvals
- ββ approval_id: 'APR-001-TOURISM'
- ββ license_id: 'LR-001'
- ββ department: 'Tourism'
- ββ status: 'PENDING'
- ββ assigned_to: [list of approver emails]
- ββ created_at: NOW()
-
- INSERT INTO approvals
- ββ approval_id: 'APR-001-FIRE'
- ββ license_id: 'LR-001'
- ββ department: 'Fire Safety'
- ββ status: 'PENDING'
- ββ assigned_to: [list of approver emails]
- ββ created_at: NOW()
-
-5c. Webhook Notifications (via Redis Pub/Sub):
- EventPublished: "approval.assigned"
- ββ recipient: approver@tourism.gov.in
- ββ action: "Resort License #LR-001 awaiting review"
- ββ link: "https://gel-platform/approvals/APR-001-TOURISM"
-
-6. Parallel Approval Assignment:
- - Tourism Department reviews resort location & management
- - Fire Safety Department reviews fire safety plan
- - Both can review simultaneously
-```
-
-#### Step 7-8: Department Approvals
-```
-7a. Tourism Approver Reviews:
- Frontend shows:
- ββ Applicant details (name, experience)
- ββ Resort location (map, nearby facilities)
- ββ Proposed capacity & amenities
- ββ Property proof documents
- ββ Can download or view embedded
-
-7b. Tourism Approver Approves:
- POST /approvals/APR-001-TOURISM/approve
- ββ Body:
- β ββ decision: "APPROVED"
- β ββ comments: "Location suitable, management experienced"
- β ββ signature: signatureHash (if using digital signature)
- ββ Auth: Department user credentials
-
-7c. Backend Processing:
- a) Update database:
- UPDATE approvals
- SET status = 'APPROVED',
- reviewed_by = 'approver@tourism.gov.in',
- reviewed_at = NOW(),
- comments = 'Location suitable...'
- WHERE approval_id = 'APR-001-TOURISM'
-
- b) Record on blockchain:
- Call ApprovalManager.recordApproval()
- ββ licenseHash: 0x7f8c...a1b2
- ββ department: 0xTourismDeptAddress
- ββ status: APPROVED
- ββ timestamp: block.timestamp
- ββ Result: Event ApprovalRecorded emitted
-
- c) Update workflow state (Redis cache):
- KEY: "license:LR-001:approvals"
- VALUE: {
- "APR-001-TOURISM": {"status": "APPROVED", ...},
- "APR-001-FIRE": {"status": "PENDING", ...}
- }
-
-7d. Fire Safety Approver Reviews & Approves (Parallel):
- Similar process with fire safety specific documents
-
-8. Parallel Completion:
- Both departments complete their approvals
- - Database updated
- - Blockchain events recorded
- - Workflow cache synchronized
-```
-
-#### Step 9: Final Approval & NFT Minting
-```
-9a. Workflow Engine Monitors State:
- Check all approvals for license LR-001
- Result: 2/2 approvals = APPROVED
-
-9b. Trigger License Approval:
- a) Generate License Certificate:
- - Template: ResortLicense_Template.pdf
- - Fill with: Applicant name, Resort location, Date, etc.
- - Upload to MinIO: /certificates/LR-001-cert.pdf
- - Hash: SHA-256 of PDF
-
- b) Prepare NFT Metadata:
- {
- "name": "Goa Resort License - [Resort Name]",
- "description": "Blockchain-verified Resort License issued by...",
- "image": "https://storage/license-badge.png",
- "attributes": {
- "license_type": "ResortLicense",
- "issue_date": "2026-02-03",
- "expiry_date": "2027-02-03",
- "issuer": "Tourism Department, Goa",
- "certificate_hash": "0xabcd...",
- "license_request_hash": "0x7f8c...",
- "applicant": "Resort Owner Name"
- }
- }
- Upload to MinIO: /metadata/LR-001-metadata.json
-
- c) Mint Soulbound NFT:
- Call LicenseRequestNFT.mint()
- ββ to: applicant_wallet_address
- ββ licenseHash: 0x7f8c...a1b2
- ββ metadataURI: "https://storage/metadata/LR-001-metadata.json"
- ββ issuerDept: tourismDeptAddress
- ββ Result: Transaction with tokenId
-
- d) QBFT Consensus & Finalization:
- - 3/4 validators approve mint transaction
- - NFT created in smart contract state
- - tokenId: 1001 (auto-incremented)
- - ownerOf(1001) = applicant_wallet
- - Event: Transfer(address(0), applicant, 1001)
-
- e) Update Database:
- UPDATE license_requests
- SET status = 'APPROVED',
- nft_token_id = 1001,
- nft_address = '0xLicenseNFTContractAddress',
- approved_at = NOW()
- WHERE request_id = 'LR-001'
-
- INSERT INTO audit_logs
- VALUES (license_id='LR-001', action='APPROVED', ..., timestamp=NOW())
-```
-
-#### Step 10: Notifications & State Update
-```
-10a. Send Approval Notification:
- Webhook Event: "license.approved"
- ββ recipient: citizen@email.com
- ββ subject: "Your Resort License Has Been Approved!"
- ββ body: "License #LR-001 approved on [date]"
- ββ link: "https://gel-platform/licenses/LR-001"
-
-10b. Update Frontend:
- WebSocket notification to citizen's browser
- ββ Status changed to: APPROVED
- ββ Show NFT badge
- ββ Enable download buttons
- ββ Display approval timeline
-
-10c. Cache Invalidation:
- Redis invalidates:
- ββ license:LR-001:* (all license data)
- ββ citizen:citizen@email.com:licenses
- ββ dashboard:pending-approvals
- (Fresh data will be loaded on next request)
-
-10d. Update Department Dashboards:
- ββ Remove from "Pending Review" list
- ββ Add to "Approved" list with approval details
- ββ Show NFT minting confirmation
-```
-
-#### Step 11: License Verification
-```
-11a. Citizen Downloads License Certificate:
- GET /licenses/LR-001/certificate
-
-11b. Certificate Generation:
- a) Retrieve license metadata from DB
- b) Get NFT details from blockchain
- c) Generate PDF with all details + QR code
- d) QR Code contains: https://gel-verify.goa.gov.in?verify=0x7f8c...a1b2
- e) Return PDF
-
-11c. Third-party Verification (e.g., Hotel Inspector):
- a) Scan QR code on license certificate
- b) GET https://gel-verify.goa.gov.in/verify?hash=0x7f8c...a1b2
-
- c) Verification Service:
- i. Query blockchain for this hash
- ii. Check if NFT still valid (not revoked/burned)
- iii. Return: {
- "valid": true,
- "license_type": "ResortLicense",
- "holder": "Resort Name",
- "issue_date": "2026-02-03",
- "expiry_date": "2027-02-03",
- "issuer": "Tourism Department"
- }
- iv. Inspector can verify instantly without needing central server
-
-11d. On-Chain Verification:
- Call LicenseRequestNFT.ownerOf(tokenId)
- ββ Returns: citizen_address (verifying NFT still exists)
-
- Call ApprovalManager.getApprovalChain(licenseHash)
- ββ Returns: Complete approval history [Tourism: APPROVED, Fire: APPROVED]
-```
-
----
-
-## 6. Deployment Architecture
-
-### Docker Compose Environment
-
-All services run in isolated containers with defined networks and volumes.
-
-#### Services Overview
-
-```yaml
-version: '3.9'
-
-services:
- # Frontend
- frontend:
- image: node:18-alpine
- build: ./frontend
- container_name: gel-frontend
- ports:
- - "3000:3000"
- environment:
- - NEXT_PUBLIC_API_URL=http://api:3001
- - NEXT_PUBLIC_BLOCKCHAIN_RPC=http://besu-1:8545
- volumes:
- - ./frontend:/app
- - /app/node_modules
- depends_on:
- - api
- networks:
- - gel-network
-
- # NestJS Backend API
- api:
- image: node:18-alpine
- build: ./backend
- container_name: gel-api
- ports:
- - "3001:3001"
- environment:
- - DATABASE_URL=postgresql://gel_user:${DB_PASSWORD}@postgres:5432/goa_gel
- - REDIS_URL=redis://redis:6379
- - MINIO_ENDPOINT=minio:9000
- - BLOCKCHAIN_RPC=http://besu-1:8545
- - BLOCKCHAIN_NETWORK_ID=1337
- - API_SECRET_KEY=${API_SECRET_KEY}
- volumes:
- - ./backend:/app
- - /app/node_modules
- depends_on:
- - postgres
- - redis
- - minio
- - besu-1
- networks:
- - gel-network
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost:3001/health"]
- interval: 30s
- timeout: 10s
- retries: 3
-
- # PostgreSQL Database
- postgres:
- image: postgres:15-alpine
- container_name: gel-postgres
- ports:
- - "5432:5432"
- environment:
- - POSTGRES_DB=goa_gel
- - POSTGRES_USER=gel_user
- - POSTGRES_PASSWORD=${DB_PASSWORD}
- volumes:
- - postgres_data:/var/lib/postgresql/data
- - ./db/init.sql:/docker-entrypoint-initdb.d/init.sql
- networks:
- - gel-network
- healthcheck:
- test: ["CMD-SHELL", "pg_isready -U gel_user"]
- interval: 10s
- timeout: 5s
- retries: 5
-
- # Redis Cache
- redis:
- image: redis:7-alpine
- container_name: gel-redis
- ports:
- - "6379:6379"
- volumes:
- - redis_data:/data
- networks:
- - gel-network
- healthcheck:
- test: ["CMD", "redis-cli", "ping"]
- interval: 10s
- timeout: 5s
- retries: 5
-
- # MinIO S3-compatible Storage
- minio:
- image: minio/minio:latest
- container_name: gel-minio
- ports:
- - "9000:9000"
- - "9001:9001"
- environment:
- - MINIO_ROOT_USER=minioadmin
- - MINIO_ROOT_PASSWORD=${MINIO_PASSWORD}
- volumes:
- - minio_data:/minio_data
- command: server /minio_data --console-address ":9001"
- networks:
- - gel-network
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
- interval: 30s
- timeout: 20s
- retries: 3
-
- # Hyperledger Besu Validator Nodes
- besu-1:
- image: hyperledger/besu:latest
- container_name: gel-besu-1
- ports:
- - "8545:8545" # RPC
- - "30303:30303" # P2P
- volumes:
- - ./besu/config.toml:/etc/besu/config.toml
- - ./besu/genesis.json:/etc/besu/genesis.json
- - ./besu/keys/node1:/opt/besu/keys
- - besu_data_1:/data
- environment:
- - BESU_RPC_HTTP_ENABLED=true
- - BESU_RPC_HTTP_HOST=0.0.0.0
- - BESU_RPC_HTTP_PORT=8545
- - BESU_RPC_WS_ENABLED=true
- - BESU_RPC_WS_HOST=0.0.0.0
- networks:
- - gel-network
- depends_on:
- - besu-2
- - besu-3
- - besu-4
-
- besu-2:
- image: hyperledger/besu:latest
- container_name: gel-besu-2
- ports:
- - "8546:8545"
- - "30304:30303"
- volumes:
- - ./besu/config.toml:/etc/besu/config.toml
- - ./besu/genesis.json:/etc/besu/genesis.json
- - ./besu/keys/node2:/opt/besu/keys
- - besu_data_2:/data
- networks:
- - gel-network
-
- besu-3:
- image: hyperledger/besu:latest
- container_name: gel-besu-3
- ports:
- - "8547:8545"
- - "30305:30303"
- volumes:
- - ./besu/config.toml:/etc/besu/config.toml
- - ./besu/genesis.json:/etc/besu/genesis.json
- - ./besu/keys/node3:/opt/besu/keys
- - besu_data_3:/data
- networks:
- - gel-network
-
- besu-4:
- image: hyperledger/besu:latest
- container_name: gel-besu-4
- ports:
- - "8548:8545"
- - "30306:30303"
- volumes:
- - ./besu/config.toml:/etc/besu/config.toml
- - ./besu/genesis.json:/etc/besu/genesis.json
- - ./besu/keys/node4:/opt/besu/keys
- - besu_data_4:/data
- networks:
- - gel-network
-
- # Prometheus Monitoring
- prometheus:
- image: prom/prometheus:latest
- container_name: gel-prometheus
- ports:
- - "9090:9090"
- volumes:
- - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml
- - prometheus_data:/prometheus
- command:
- - '--config.file=/etc/prometheus/prometheus.yml'
- networks:
- - gel-network
-
- # Grafana Dashboards
- grafana:
- image: grafana/grafana:latest
- container_name: gel-grafana
- ports:
- - "3002:3000"
- environment:
- - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD}
- volumes:
- - grafana_storage:/var/lib/grafana
- - ./monitoring/grafana/provisioning:/etc/grafana/provisioning
- depends_on:
- - prometheus
- networks:
- - gel-network
-
-networks:
- gel-network:
- driver: bridge
- ipam:
- config:
- - subnet: 172.20.0.0/16
-
-volumes:
- postgres_data:
- redis_data:
- minio_data:
- besu_data_1:
- besu_data_2:
- besu_data_3:
- besu_data_4:
- prometheus_data:
- grafana_storage:
-```
-
-#### Environment Configuration
-
-```bash
-# .env file
-DB_PASSWORD=your_secure_db_password
-MINIO_PASSWORD=your_secure_minio_password
-API_SECRET_KEY=your_secure_api_key
-GRAFANA_PASSWORD=your_secure_grafana_password
-
-# Optional: Domain configuration
-FRONTEND_URL=https://gel-platform.goa.gov.in
-API_URL=https://api.gel-platform.goa.gov.in
-```
-
-#### Startup Process
-
-```bash
-# 1. Build all images
-docker-compose build
-
-# 2. Start all services
-docker-compose up -d
-
-# 3. Initialize database
-docker-compose exec postgres psql -U gel_user -d goa_gel -f /docker-entrypoint-initdb.d/init.sql
-
-# 4. Verify services
-docker-compose ps
-docker-compose logs -f api
-
-# 5. Access services
-# Frontend: http://localhost:3000
-# API: http://localhost:3001
-# MinIO Console: http://localhost:9001
-# Prometheus: http://localhost:9090
-# Grafana: http://localhost:3002
-```
-
----
-
-## 7. Key Technical Benefits
-
-### Immutability & Trust
-- Once a license is recorded on blockchain, it cannot be tampered with
-- Full approval history is cryptographically verifiable
-- Any party can independently verify license authenticity
-
-### Transparency
-- Multi-department approvals are publicly recorded
-- Citizens can see real-time status of their requests
-- Audit trail of every action is preserved
-
-### Efficiency
-- Parallel approval workflows reduce processing time
-- Automated notifications keep stakeholders informed
-- Real-time status updates via WebSocket/Redis
-
-### Security
-- API Key + Secret authentication (POC)
-- JWT tokens for session management
-- Role-based access control (RBAC)
-- Immutable audit logs prevent tampering
-
-### Scalability
-- Off-chain document storage (MinIO)
-- On-chain hashing ensures scalability
-- Redis caching for high-traffic operations
-- Horizontal scaling possible for all services
-
-### Interoperability
-- ERC-721 standard enables future integrations
-- REST API for third-party systems
-- Blockchain records can be shared with National Blockchain Federation
-- Legacy system integration via adapters
-
----
-
-## 8. Future Enhancements
-
-### Phase 2 (Post-POC)
-- OAuth 2.0 integration with DigiLocker (real, not mocked)
-- Multi-signature smart contracts for critical decisions
-- Insurance coverage integration
-
-### Phase 3
-- DAO governance for workflow changes
-- Cross-chain interoperability (Cosmos/Polkadot)
-- Mobile app for on-the-go approvals
-
-### Phase 4
-- AI-powered document verification
-- National Blockchain Federation integration
-- License marketplace for portability
-
----
-
-## 9. File Locations
-
-All diagrams and related files are located in:
-```
-/sessions/cool-elegant-faraday/mnt/Goa-GEL/
-```
-
-### Mermaid Diagram Files (.mermaid)
-- `system-context.mermaid` - C4 Context diagram
-- `container-architecture.mermaid` - Container architecture
-- `blockchain-architecture.mermaid` - Blockchain layer details
-- `workflow-state-machine.mermaid` - State transitions
-- `data-flow.mermaid` - Sequence diagram
-- `deployment-architecture.mermaid` - Docker Compose setup
-
-### HTML Preview Files (.html)
-- Each .mermaid file has a corresponding .html file for browser viewing
-- Open in any modern web browser (Chrome, Firefox, Safari, Edge)
-- Uses CDN-hosted mermaid.js for rendering
-
-### Conversion to PNG
-See the README.md file for multiple options to convert diagrams to PNG format.
-
----
-
-## 10. Getting Started
-
-1. **Review Diagrams**
- - Open .html files in browser for quick visualization
- - Or visit mermaid.live to paste .mermaid content
-
-2. **Understand Architecture**
- - Start with system-context for high-level overview
- - Move to container-architecture for technical details
- - Deep-dive with blockchain-architecture for smart contracts
-
-3. **Implement**
- - Use deployment-architecture for Docker Compose setup
- - Reference data-flow for integration points
- - Review workflow-state-machine for business logic
-
-4. **Documentation**
- - Convert diagrams to PNG for presentations
- - Include in technical documentation
- - Share with stakeholders for feedback
-
----
-
-**Document Version**: 1.0
-**Platform**: Goa GEL (Goa Government E-License)
-**Last Updated**: 2026-02-03
-**Status**: POC Phase 1
diff --git a/Documentation/docs/DOCUMENTATION_INDEX.md b/Documentation/docs/DOCUMENTATION_INDEX.md
deleted file mode 100644
index 7229f8a..0000000
--- a/Documentation/docs/DOCUMENTATION_INDEX.md
+++ /dev/null
@@ -1,488 +0,0 @@
-# π Goa-GEL Platform - Complete Documentation Index
-
-Welcome to the Goa-GEL (Government e-Licensing) Platform! This guide will help you find the right documentation based on your needs.
-
----
-
-## π― Quick Navigation
-
-### **π€ I'm a User** (Admin, Department Officer, or Citizen)
-**Read this:** [**USER_GUIDE.md**](./USER_GUIDE.md) - Complete guide for using the platform
-
-### **π§ͺ I Need to Test the Platform**
-**Read this:** [**E2E_TESTING_GUIDE.md**](./E2E_TESTING_GUIDE.md) - End-to-end testing scenarios
-
-### **π» I'm a Developer** (Want to understand the code)
-**Read this:** [**IMPLEMENTATION_COMPLETE.md**](./IMPLEMENTATION_COMPLETE.md) - Implementation details
-
-### **ποΈ I Need Architecture Information**
-**Read this:** [**ARCHITECTURE_GUIDE.md**](./ARCHITECTURE_GUIDE.md) - Technical architecture
-
-### **β‘ I Want to Start Quickly**
-**Read this:** [**QUICK_START.md**](./QUICK_START.md) - Quick setup guide
-
----
-
-## π Complete Documentation List
-
-### 1. **USER_GUIDE.md** π
-**For:** End users (Administrators, Department Officers, Citizens)
-**Size:** 650+ lines
-**Purpose:** Learn how to use the platform
-**Contents:**
-- Getting started and login
-- Role-based guides (Admin, Department, Citizen)
-- Step-by-step instructions with screenshots descriptions
-- Creating applications
-- Reviewing applications
-- Document management
-- FAQ and troubleshooting
-- Mobile access guide
-- Support contacts
-
-**When to read:** If you need to learn how to use the platform
-
----
-
-### 2. **E2E_TESTING_GUIDE.md** π§ͺ
-**For:** QA Engineers, Testers, Developers
-**Size:** 600+ lines
-**Purpose:** Test the complete platform workflow
-**Contents:**
-- 20 detailed test scenarios
-- Complete license approval workflow testing
-- Admin portal verification
-- Department onboarding tests
-- Document versioning tests
-- Blockchain transaction verification
-- Error scenario testing
-- Performance testing guidelines
-- Test completion checklist
-
-**When to read:** When you need to test or verify platform functionality
-
----
-
-### 3. **IMPLEMENTATION_COMPLETE.md** π
-**For:** Developers, Project Managers, Technical Leads
-**Size:** 380+ lines
-**Purpose:** Understand what was built and implementation status
-**Contents:**
-- Complete task breakdown (10 tasks, all complete)
-- Files created/modified
-- API endpoints added
-- Component architecture
-- Success metrics
-- Technology stack
-- Database schema
-- How to run and test
-
-**When to read:** To understand project completion status and technical details
-
----
-
-### 4. **ARCHITECTURE_GUIDE.md** ποΈ
-**For:** Architects, Senior Developers, DevOps
-**Size:** 1000+ lines
-**Purpose:** Deep technical architecture documentation
-**Contents:**
-- System architecture (C4 model)
-- Blockchain integration
-- Smart contracts
-- Database design
-- API structure
-- Deployment architecture
-- Security considerations
-- Technology decisions
-
-**When to read:** For architectural understanding and technical planning
-
----
-
-### 5. **QUICK_START.md** β‘
-**For:** Developers who want to get started quickly
-**Size:** 200+ lines
-**Purpose:** Set up and run the platform fast
-**Contents:**
-- Prerequisites
-- Installation steps
-- Database setup
-- Running backend and frontend
-- Demo account credentials
-- Common issues and fixes
-
-**When to read:** When you want to run the platform locally
-
----
-
-### 6. **fixes-prompt.md** π
-**For:** Project Managers, Developers
-**Size:** 120+ lines
-**Purpose:** Original requirements document
-**Contents:**
-- 10 major tasks required
-- Detailed requirements for each task
-- Expected outcomes
-- Priority information
-
-**When to read:** To understand the original project requirements
-
----
-
-### 7. **IMPLEMENTATION_SUMMARY.md** π
-**For:** Project Managers, Stakeholders
-**Size:** 300+ lines
-**Purpose:** High-level implementation summary
-**Contents:**
-- What was implemented
-- Key features
-- Technology choices
-- Timeline and milestones
-- Deliverables
-
-**When to read:** For a quick overview of what was delivered
-
----
-
-### 8. **INDEX.md** π
-**For:** All users
-**Size:** 400+ lines
-**Purpose:** Master navigation guide
-**Contents:**
-- Complete file structure
-- Navigation by role
-- Diagram descriptions
-- Quick references
-
-**When to read:** When navigating the codebase
-
----
-
-### 9. **START_HERE.md** π―
-**For:** Architects, Technical Leads
-**Size:** 330+ lines
-**Purpose:** Architecture diagram navigation
-**Contents:**
-- How to view architecture diagrams
-- Role-based learning paths
-- Diagram explanations
-- Technology stack overview
-
-**When to read:** When exploring architecture diagrams
-
----
-
-### 10. **PRESENTATION_README.md** π
-**For:** Presenters, Sales, Stakeholders
-**Size:** 150+ lines
-**Purpose:** Presentation-ready information
-**Contents:**
-- Key talking points
-- Feature highlights
-- Demo scenarios
-- Value propositions
-
-**When to read:** When preparing presentations about the platform
-
----
-
-## π Getting Started Paths
-
-### **Path 1: I Want to Use the Platform**
-1. Read: [USER_GUIDE.md](./USER_GUIDE.md) - Complete user guide (30-60 min)
-2. Login with demo credentials
-3. Explore based on your role
-4. Refer back to guide as needed
-
-**Result:** You can effectively use the platform
-
----
-
-### **Path 2: I Want to Test the Platform**
-1. Read: [QUICK_START.md](./QUICK_START.md) - Set up the platform (10 min)
-2. Read: [E2E_TESTING_GUIDE.md](./E2E_TESTING_GUIDE.md) - Testing scenarios (20 min)
-3. Run backend and frontend
-4. Execute test scenarios
-5. Report findings
-
-**Result:** Complete platform testing
-
----
-
-### **Path 3: I'm a New Developer**
-1. Read: [QUICK_START.md](./QUICK_START.md) - Set up locally (10 min)
-2. Read: [IMPLEMENTATION_COMPLETE.md](./IMPLEMENTATION_COMPLETE.md) - Understand structure (20 min)
-3. Read: [ARCHITECTURE_GUIDE.md](./ARCHITECTURE_GUIDE.md) - Deep dive (40 min)
-4. Explore codebase
-5. Make changes
-
-**Result:** Ready to develop
-
----
-
-### **Path 4: I'm a Project Manager**
-1. Read: [IMPLEMENTATION_SUMMARY.md](./IMPLEMENTATION_SUMMARY.md) - Overview (10 min)
-2. Read: [IMPLEMENTATION_COMPLETE.md](./IMPLEMENTATION_COMPLETE.md) - Details (15 min)
-3. Read: [USER_GUIDE.md](./USER_GUIDE.md) - User perspective (30 min)
-4. Review [E2E_TESTING_GUIDE.md](./E2E_TESTING_GUIDE.md) - Testing approach (15 min)
-
-**Result:** Complete project understanding
-
----
-
-### **Path 5: I'm an Architect**
-1. Read: [ARCHITECTURE_GUIDE.md](./ARCHITECTURE_GUIDE.md) - Full architecture (60 min)
-2. Read: [START_HERE.md](./START_HERE.md) - Diagram guide (10 min)
-3. View architecture diagrams (HTML files)
-4. Read: [IMPLEMENTATION_COMPLETE.md](./IMPLEMENTATION_COMPLETE.md) - Implementation (15 min)
-
-**Result:** Complete architectural understanding
-
----
-
-### **Path 6: I'm QA/Testing**
-1. Read: [QUICK_START.md](./QUICK_START.md) - Set up platform (10 min)
-2. Read: [USER_GUIDE.md](./USER_GUIDE.md) - Understand features (45 min)
-3. Read: [E2E_TESTING_GUIDE.md](./E2E_TESTING_GUIDE.md) - Test scenarios (30 min)
-4. Execute tests
-5. Document findings
-
-**Result:** Ready to test comprehensively
-
----
-
-## π File Organization
-
-```
-Goa-GEL/
-β
-βββ Documentation (Guides)
-β βββ USER_GUIDE.md β User manual
-β βββ E2E_TESTING_GUIDE.md β Testing guide
-β βββ IMPLEMENTATION_COMPLETE.md β Implementation status
-β βββ ARCHITECTURE_GUIDE.md π Technical architecture
-β βββ QUICK_START.md β‘ Quick setup
-β βββ DOCUMENTATION_INDEX.md π This file
-β βββ IMPLEMENTATION_SUMMARY.md π Summary
-β βββ fixes-prompt.md π Original requirements
-β βββ INDEX.md π Master navigation
-β βββ START_HERE.md π― Architecture entry point
-β βββ PRESENTATION_README.md π Presentation info
-β
-βββ Source Code
-β βββ backend/ π₯οΈ NestJS API
-β βββ frontend/ π¨ Angular UI
-β βββ blockchain/ βοΈ Smart contracts
-β
-βββ Architecture Diagrams
-β βββ system-context.html
-β βββ container-architecture.html
-β βββ blockchain-architecture.html
-β βββ workflow-state-machine.html
-β βββ data-flow.html
-β βββ deployment-architecture.html
-β
-βββ Configuration
- βββ docker-compose.yml
- βββ .env files
- βββ Database migrations
-```
-
----
-
-## π Documentation by Role
-
-### **Administrator** π¨βπΌ
-**Must Read:**
-1. [USER_GUIDE.md](./USER_GUIDE.md) - Section: "For Administrators"
-2. [E2E_TESTING_GUIDE.md](./E2E_TESTING_GUIDE.md) - Admin portal tests
-
-**Optional:**
-- [QUICK_START.md](./QUICK_START.md) - If setting up platform
-- [IMPLEMENTATION_COMPLETE.md](./IMPLEMENTATION_COMPLETE.md) - Technical overview
-
----
-
-### **Department Officer** ποΈ
-**Must Read:**
-1. [USER_GUIDE.md](./USER_GUIDE.md) - Section: "For Department Officers"
-
-**Optional:**
-- [E2E_TESTING_GUIDE.md](./E2E_TESTING_GUIDE.md) - Review workflow tests
-
----
-
-### **Citizen/Applicant** π₯
-**Must Read:**
-1. [USER_GUIDE.md](./USER_GUIDE.md) - Section: "For Citizens/Applicants"
-
-**Optional:**
-- [E2E_TESTING_GUIDE.md](./E2E_TESTING_GUIDE.md) - Application workflow
-
----
-
-### **Backend Developer** π»
-**Must Read:**
-1. [QUICK_START.md](./QUICK_START.md) - Setup
-2. [IMPLEMENTATION_COMPLETE.md](./IMPLEMENTATION_COMPLETE.md) - Code structure
-3. [ARCHITECTURE_GUIDE.md](./ARCHITECTURE_GUIDE.md) - API architecture
-
-**Optional:**
-- [E2E_TESTING_GUIDE.md](./E2E_TESTING_GUIDE.md) - API testing
-- [USER_GUIDE.md](./USER_GUIDE.md) - User perspective
-
----
-
-### **Frontend Developer** π¨
-**Must Read:**
-1. [QUICK_START.md](./QUICK_START.md) - Setup
-2. [IMPLEMENTATION_COMPLETE.md](./IMPLEMENTATION_COMPLETE.md) - Components
-3. [USER_GUIDE.md](./USER_GUIDE.md) - UI flows
-
-**Optional:**
-- [ARCHITECTURE_GUIDE.md](./ARCHITECTURE_GUIDE.md) - Frontend architecture
-- [E2E_TESTING_GUIDE.md](./E2E_TESTING_GUIDE.md) - UI testing
-
----
-
-### **QA Engineer** π§ͺ
-**Must Read:**
-1. [USER_GUIDE.md](./USER_GUIDE.md) - All features
-2. [E2E_TESTING_GUIDE.md](./E2E_TESTING_GUIDE.md) - Test scenarios
-3. [QUICK_START.md](./QUICK_START.md) - Setup for testing
-
-**Optional:**
-- [IMPLEMENTATION_COMPLETE.md](./IMPLEMENTATION_COMPLETE.md) - Technical details
-
----
-
-### **DevOps Engineer** π§
-**Must Read:**
-1. [QUICK_START.md](./QUICK_START.md) - Setup and deployment
-2. [ARCHITECTURE_GUIDE.md](./ARCHITECTURE_GUIDE.md) - Section: Deployment
-3. [START_HERE.md](./START_HERE.md) - Architecture diagrams
-
-**Optional:**
-- [IMPLEMENTATION_COMPLETE.md](./IMPLEMENTATION_COMPLETE.md) - Tech stack
-
----
-
-### **Project Manager** π
-**Must Read:**
-1. [IMPLEMENTATION_SUMMARY.md](./IMPLEMENTATION_SUMMARY.md) - Overview
-2. [IMPLEMENTATION_COMPLETE.md](./IMPLEMENTATION_COMPLETE.md) - Detailed status
-3. [USER_GUIDE.md](./USER_GUIDE.md) - User perspective
-
-**Optional:**
-- [E2E_TESTING_GUIDE.md](./E2E_TESTING_GUIDE.md) - Testing approach
-- [ARCHITECTURE_GUIDE.md](./ARCHITECTURE_GUIDE.md) - Technical depth
-
----
-
-## π‘ Documentation Features
-
-### **USER_GUIDE.md**
-β
Simple language, no technical jargon
-β
Step-by-step instructions with examples
-β
Role-based sections
-β
FAQ and troubleshooting
-β
Screenshots descriptions
-β
Mobile access guide
-β
Glossary of terms
-
-### **E2E_TESTING_GUIDE.md**
-β
20 comprehensive test scenarios
-β
Expected results for each step
-β
Error scenario testing
-β
Performance testing guidelines
-β
Test completion checklist
-β
Test results template
-
-### **IMPLEMENTATION_COMPLETE.md**
-β
All 10 tasks documented
-β
Files created/modified list
-β
API endpoints documented
-β
Component descriptions
-β
Success metrics
-β
100% completion status
-
----
-
-## π Search Guide
-
-**Looking for:**
-
-- **How to login?** β USER_GUIDE.md (Section: How to Log In)
-- **How to create application?** β USER_GUIDE.md (Section: Creating New License Application)
-- **How to test the platform?** β E2E_TESTING_GUIDE.md
-- **What was implemented?** β IMPLEMENTATION_COMPLETE.md
-- **How to set up locally?** β QUICK_START.md
-- **Architecture details?** β ARCHITECTURE_GUIDE.md
-- **API endpoints?** β IMPLEMENTATION_COMPLETE.md (Admin Portal section)
-- **Database schema?** β ARCHITECTURE_GUIDE.md (Database section)
-- **Blockchain integration?** β ARCHITECTURE_GUIDE.md (Blockchain section)
-- **Demo credentials?** β USER_GUIDE.md or QUICK_START.md
-- **Deployment guide?** β ARCHITECTURE_GUIDE.md (Deployment section)
-
----
-
-## π Support & Contributions
-
-### Getting Help
-- **User Issues**: Refer to USER_GUIDE.md FAQ section
-- **Technical Issues**: Check IMPLEMENTATION_COMPLETE.md troubleshooting
-- **Testing Questions**: See E2E_TESTING_GUIDE.md
-- **Architecture Questions**: Read ARCHITECTURE_GUIDE.md
-
-### Contributing
-- Read relevant documentation first
-- Follow code style in existing files
-- Update documentation when adding features
-- Run tests before submitting changes
-
----
-
-## β¨ Documentation Best Practices
-
-When reading documentation:
-1. **Start with the Quick Navigation** section above
-2. **Follow the role-based path** that matches your needs
-3. **Read sections in order** within each guide
-4. **Refer back to this index** when switching contexts
-5. **Use the search guide** to find specific information quickly
-
----
-
-## π Documentation Statistics
-
-- **Total Documentation Files**: 11 major guides
-- **Total Lines**: 4,500+ lines
-- **Total Words**: ~45,000 words
-- **Estimated Reading Time**: 6-8 hours (complete)
-- **Roles Covered**: 8 different roles
-- **Test Scenarios**: 20 detailed scenarios
-- **API Endpoints Documented**: 13+ endpoints
-- **Components Documented**: 45+ components
-
----
-
-## π― Your Next Step
-
-**Choose one based on your immediate need:**
-
-1. **I want to use the platform** β [USER_GUIDE.md](./USER_GUIDE.md)
-2. **I want to test it** β [E2E_TESTING_GUIDE.md](./E2E_TESTING_GUIDE.md)
-3. **I want to develop** β [QUICK_START.md](./QUICK_START.md)
-4. **I want to understand architecture** β [ARCHITECTURE_GUIDE.md](./ARCHITECTURE_GUIDE.md)
-5. **I want project status** β [IMPLEMENTATION_COMPLETE.md](./IMPLEMENTATION_COMPLETE.md)
-
----
-
-**Last Updated**: February 2026
-**Platform**: Goa-GEL (Government e-Licensing)
-**Status**: Complete & Production-Ready
-**Version**: 1.0
-
----
-
-**π Ready to get started? Pick a guide above and dive in!**
diff --git a/Documentation/docs/E2E_TESTING_GUIDE.md b/Documentation/docs/E2E_TESTING_GUIDE.md
deleted file mode 100644
index 02b10f6..0000000
--- a/Documentation/docs/E2E_TESTING_GUIDE.md
+++ /dev/null
@@ -1,819 +0,0 @@
-# π§ͺ Goa-GEL End-to-End Testing Guide
-
-## Overview
-This guide provides a complete end-to-end testing workflow for the Goa-GEL blockchain verification platform. Follow these steps to verify all features are working correctly.
-
----
-
-## π§ Prerequisites
-
-### 1. Environment Setup
-```bash
-# Terminal 1 - Backend
-cd backend
-npm install
-npm run db:migrate
-npm run db:seed # IMPORTANT: Seeds demo accounts with wallets
-npm run start:dev
-
-# Terminal 2 - Frontend
-cd frontend
-npm install
-ng serve
-
-# Terminal 3 - Blockchain (Optional for full workflow)
-cd blockchain
-npm install
-# Configure local blockchain or testnet
-```
-
-### 2. Access URLs
-- **Frontend**: http://localhost:4200
-- **Backend API**: http://localhost:3000
-- **API Docs**: http://localhost:3000/api
-
----
-
-## π Test Scenario: Complete License Approval Workflow
-
-### **Step 1: Admin Login & Portal Access**
-
-**Objective**: Verify admin can log in and access the admin portal
-
-1. Navigate to http://localhost:4200/login
-2. Use demo credentials:
- - **Email**: `admin@goa.gov.in`
- - **Password**: `Admin@123`
- - Or click the "Admin" demo credential button to auto-fill
-3. Click "Sign In"
-
-**Expected Results**:
-- β
Successful login with no errors
-- β
Redirected to dashboard
-- β
User menu shows "Admin" role
-- β
Admin menu item visible in navigation
-
----
-
-### **Step 2: Access Admin Portal**
-
-1. Click on user menu (top right)
-2. Select "Admin" from dropdown
-3. Or navigate directly to http://localhost:4200/admin
-
-**Expected Results**:
-- β
Admin portal loads with 6 tabs:
- - Dashboard
- - Departments
- - Users
- - Transactions
- - Events
- - Logs
-- β
Platform statistics cards display:
- - Total Requests
- - Departments
- - Applicants
- - Blockchain Transactions
-
----
-
-### **Step 3: Verify Pre-Seeded Data**
-
-**Navigate through each tab to verify seed data:**
-
-#### Dashboard Tab
-- β
Platform stats show non-zero counts
-- β
Stats cards have gradient backgrounds
-- β
All numbers are clickable/informative
-
-#### Departments Tab
-- β
Shows pre-seeded departments:
- - Fire Department (FIRE_DEPT)
- - Tourism Department (TOURISM_DEPT)
- - Municipality (MUNICIPALITY)
-- β
Each department shows:
- - Code
- - Name
- - Wallet Address (0x...)
- - Status (Active)
- - Action buttons
-
-#### Users Tab
-- β
Shows all 5 seeded users:
- - Admin
- - Fire Department Officer
- - Tourism Department Officer
- - Municipality Officer
- - Test Citizen
-- β
Each user shows:
- - Email
- - Name
- - Role badge
- - Wallet Address
-
-#### Transactions Tab (May be empty initially)
-- β
Table structure loads correctly
-- β
Filters available (Status dropdown)
-- β
Statistics cards present
-- β
Empty state shows: "No transactions found"
-
-#### Events Tab (May be empty initially)
-- β
Table structure loads correctly
-- β
Filters available (Event Type, Contract Address)
-- β
Empty state shows: "No events found"
-
-#### Logs Tab
-- β
Application logs displayed
-- β
Filters work: Level, Module, Search
-- β
Color-coded log levels (INFO=blue, WARN=orange, ERROR=red)
-- β
Export button available
-
----
-
-### **Step 4: Onboard New Department**
-
-**Objective**: Test department onboarding with auto-wallet creation
-
-1. In Admin Portal, go to **Departments** tab
-2. Click **"Onboard New Department"** button
-3. Fill in the form:
- ```
- Department Code: POLICE_DEPT
- Department Name: Police Department
- Description: Law enforcement and security clearances
- Contact Email: police@goa.gov.in
- Contact Phone: +91-832-2222222
- ```
-4. Click **"Onboard Department"**
-
-**Expected Results**:
-- β
Success notification appears
-- β
Alert/dialog shows:
- - β
**Wallet Address** (0x...)
- - β
**API Key** (starts with "pd_")
- - β
**API Secret** (long alphanumeric)
- - β
Warning: "Save these credentials - shown only once"
-- β
**SAVE THESE CREDENTIALS** for later use
-- β
Department appears in departments list
-- β
Status shows "Active"
-
-**Verification**:
-1. Go to **Users** tab
-2. Verify no new user was created (department accounts are separate from users)
-3. Go back to **Departments** tab
-4. Find "Police Department" in the list
-5. Verify wallet address matches the one shown in alert
-
----
-
-### **Step 5: Regenerate Department API Key**
-
-**Objective**: Test API key regeneration functionality
-
-1. In Departments tab, find "Police Department"
-2. Click **"Regenerate Key"** button
-3. Confirm the action
-
-**Expected Results**:
-- β
Success notification
-- β
Alert shows new API credentials
-- β
New API Key and Secret are different from original
-- β
Wallet address remains the same
-
----
-
-### **Step 6: Deactivate & Reactivate Department**
-
-**Objective**: Test department lifecycle management
-
-1. Find "Police Department"
-2. Click **"Deactivate"** button
-3. Confirm the action
-
-**Expected Results**:
-- β
Status changes to "Inactive"
-- β
Status chip turns red/gray
-
-4. Click **"Activate"** button
-5. Confirm the action
-
-**Expected Results**:
-- β
Status changes to "Active"
-- β
Status chip turns green
-
----
-
-### **Step 7: Citizen Registration (Simulated)**
-
-**Objective**: Test citizen account creation and license request
-
-**Note**: This step requires the citizen registration endpoints to be accessible. If not yet fully implemented, document the expected behavior.
-
-1. Log out from admin account
-2. Navigate to citizen registration page (if available)
-3. Or use API directly:
-
-```bash
-POST http://localhost:3000/auth/register
-Content-Type: application/json
-
-{
- "email": "john.doe@example.com",
- "password": "Citizen@123",
- "name": "John Doe",
- "role": "APPLICANT",
- "phone": "+91-9876543210"
-}
-```
-
-**Expected Results**:
-- β
Account created successfully
-- β
Wallet automatically generated
-- β
Response includes:
- - User ID
- - Email
- - Name
- - Wallet Address
- - Role: APPLICANT
-
----
-
-### **Step 8: Create License Request**
-
-**Objective**: Test license request creation with document upload
-
-1. Log in as the new citizen: `john.doe@example.com` / `Citizen@123`
-2. Navigate to "My Requests" or requests page
-3. Click **"New Request"** or **"Create License Request"**
-4. Fill in request form:
- ```
- Request Type: RESORT_LICENSE
- Resort Name: Goa Beach Resort
- Location: Calangute, Goa
- Capacity: 100 guests
- ... (other required fields)
- ```
-5. Upload required documents:
- - Business Registration Certificate (PDF)
- - Property Ownership Proof (PDF)
- - Floor Plan (Image/PDF)
-
-**Expected Results**:
-- β
Request created with status "DRAFT"
-- β
Documents uploaded successfully
-- β
Each document shows:
- - File name
- - File size
- - Upload timestamp
- - File hash (generated)
- - Version 1
-
----
-
-### **Step 9: Submit License Request**
-
-**Objective**: Test request submission and NFT minting (blockchain operation)
-
-1. From request detail page, click **"Submit Request"**
-2. Confirm submission
-
-**Expected Results**:
-- β
Request status changes to "SUBMITTED"
-- β
Blockchain transaction initiated
-- β
Transaction hash appears in request details
-- β
NFT Token ID assigned (if blockchain is active)
-
-**Verify in Admin Portal**:
-1. Log in as admin
-2. Go to **Transactions** tab
-3. Find the new transaction:
- - β
Transaction hash present
- - β
Status: PENDING β CONFIRMED
- - β
Gas used displayed
- - β
Linked to request ID
-
-4. Go to **Events** tab
-5. Find "LicenseRequested" event:
- - β
Event type correct
- - β
Contract address present
- - β
Block number displayed
- - β
Event parameters decoded
-
----
-
-### **Step 10: Fire Department Review & Approval**
-
-**Objective**: Test department approval workflow with document verification
-
-1. Log out and log in as Fire Department:
- - **Email**: `fire@goa.gov.in`
- - **Password**: `Fire@123`
-2. Navigate to "Pending Approvals" or assigned requests
-3. Open the resort license request
-4. Review documents:
- - β
All uploaded documents visible
- - β
Document viewer shows:
- - Thumbnails
- - File hashes
- - Version history (Version 1)
- - No department reviews yet
-5. Click **"Approve"**
-6. Enter remarks: "Fire safety requirements met. All documents verified."
-7. Submit approval
-
-**Expected Results**:
-- β
Approval recorded with status "APPROVED"
-- β
Blockchain transaction created for approval
-- β
Approval timestamp recorded
-- β
Remarks saved
-
-**Verify in Admin Portal** (as admin):
-1. **Transactions** tab:
- - β
New transaction for "ApprovalRecorded"
- - β
Transaction linked to approval ID
-2. **Events** tab:
- - β
"ApprovalRecorded" event present
- - β
Department address in event data
-3. **Request Documents** (in admin or citizen view):
- - β
Fire Department review shows "APPROVED"
- - β
Reviewed by and timestamp visible
-
----
-
-### **Step 11: Tourism Department Requests Changes**
-
-**Objective**: Test change request workflow and document versioning
-
-1. Log in as Tourism Department:
- - **Email**: `tourism@goa.gov.in`
- - **Password**: `Tourism@123`
-2. Open the same resort license request
-3. Review documents
-4. Click **"Request Changes"**
-5. Fill in change request:
- ```
- Required Documents: Environmental Clearance Certificate
- Remarks: Additional environmental clearance required for beach resort operations.
- ```
-6. Submit change request
-
-**Expected Results**:
-- β
Request status changes to "PENDING_RESUBMISSION"
-- β
Change request recorded with timestamp
-- β
Tourism review shows "CHANGES_REQUESTED"
-- β
Fire Department approval status remains "APPROVED"
-
----
-
-### **Step 12: Citizen Uploads New Document Version**
-
-**Objective**: Test document versioning and version history tracking
-
-1. Log in as citizen: `john.doe@example.com` / `Citizen@123`
-2. Open the license request (now in "PENDING_RESUBMISSION" status)
-3. Click **"Upload Additional Documents"** or **"Update Documents"**
-4. Upload new document:
- - Document Type: Environmental Clearance Certificate
- - File: environmental_clearance.pdf
-5. Add change description: "Environmental clearance certificate from Goa Pollution Control Board"
-6. Submit
-
-**Expected Results**:
-- β
New document uploaded as Version 1
-- β
Or existing document updated to Version 2
-- β
Version history shows:
- - Version 1: Original upload
- - Version 2: Updated after change request (if applicable)
- - Change description visible
-- β
Document viewer in request details shows new version
-- β
Version history table accessible via expansion panel
-
----
-
-### **Step 13: Fire Approval Invalidated**
-
-**Objective**: Verify approval invalidation when documents change
-
-**Check Fire Department Approval Status**:
-1. In request details (as admin or fire dept user)
-2. Find Fire Department approval
-
-**Expected Results**:
-- β
Fire approval shows "INVALIDATED" or "PENDING_REVALIDATION"
-- β
Reason: "Document version changed"
-- β
Original approval timestamp preserved
-- β
Invalidation timestamp shown
-
-**Note**: This may require backend logic to auto-invalidate approvals when documents are updated.
-
----
-
-### **Step 14: Fire Department Re-Approves**
-
-**Objective**: Test re-approval after document changes
-
-1. Log in as Fire Department: `fire@goa.gov.in` / `Fire@123`
-2. Open the resort license request (back in pending approvals)
-3. Review updated documents:
- - β
Document viewer shows Version 2 (or new document)
- - β
Version history shows all versions
- - β
Change description visible
-4. Click **"Approve"**
-5. Enter remarks: "Reviewed updated documents. Fire safety still compliant."
-6. Submit approval
-
-**Expected Results**:
-- β
New approval recorded
-- β
Status changes to "APPROVED" (again)
-- β
New blockchain transaction created
-- β
Approval timestamp updated
-- β
Previous invalidated approval still in history
-
----
-
-### **Step 15: Tourism Department Final Approval**
-
-**Objective**: Test final approval and license finalization
-
-1. Log in as Tourism Department: `tourism@goa.gov.in` / `Tourism@123`
-2. Open the resort license request
-3. Review all documents including new environmental clearance
-4. Verify Fire Department approval is "APPROVED"
-5. Click **"Approve"**
-6. Enter remarks: "All tourism requirements met. Environmental clearance verified."
-7. Submit approval
-
-**Expected Results**:
-- β
Approval recorded successfully
-- β
Request status changes to "APPROVED"
-- β
All required department approvals complete
-- β
NFT updated on blockchain (if applicable)
-- β
Final approval timestamp recorded
-
----
-
-### **Step 16: Verify Complete Approval Chain**
-
-**Objective**: Verify all approvals are visible in request details
-
-1. As citizen, open the approved license request
-2. Navigate to **"Approvals"** tab
-
-**Expected Results**:
-- β
Shows 2 approvals:
- 1. Fire Department (Re-approved after invalidation)
- - Status: APPROVED
- - Remarks visible
- - Timestamp present
- 2. Tourism Department
- - Status: APPROVED
- - Remarks visible
- - Timestamp present
-- β
Each approval shows department name, not just ID
-- β
Approval timeline visible
-
----
-
-### **Step 17: Verify Document History**
-
-**Objective**: Test complete document version tracking
-
-1. In the approved request, go to **"Documents"** tab
-2. Find each document
-3. Click to expand **"Version History"**
-
-**Expected Results**:
-- β
Environmental Clearance:
- - Version 1: Initial upload after change request
- - Uploaded by: John Doe
- - Upload date visible
- - File hash unique
-- β
Other Documents:
- - Version 1 only (if not changed)
- - OR Version 1 & 2 if updated
-- β
Each version has:
- - Version number
- - Upload timestamp
- - Uploaded by (user name)
- - File hash (first 8 chars)
- - Download button
-
----
-
-### **Step 18: Verify Department Reviews on Documents**
-
-**Objective**: Check department reviews are tracked per document
-
-1. In document viewer, check **"Department Reviews"** section
-
-**Expected Results**:
-- β
Each document shows reviews from:
- - Fire Department: APPROVED (green chip)
- - Tourism Department: APPROVED (green chip)
-- β
Review includes:
- - Department name
- - Status (APPROVED/REJECTED/PENDING)
- - Reviewed at timestamp
- - Reviewed by (officer name)
- - Comments (if any)
-
----
-
-### **Step 19: Admin Dashboard Verification**
-
-**Objective**: Verify all data is visible in admin monitoring dashboards
-
-**As admin (`admin@goa.gov.in`), verify each dashboard:**
-
-#### Transactions Dashboard
-- β
Shows all transactions:
- 1. Initial request submission (LicenseRequested)
- 2. Fire approval #1
- 3. Tourism change request
- 4. Fire approval #2 (after invalidation)
- 5. Tourism final approval
-- β
Each transaction shows:
- - Transaction hash
- - From/To addresses
- - Status (CONFIRMED)
- - Block number
- - Gas used
- - Linked to correct request/approval
-- β
Statistics cards updated:
- - Confirmed count increased
- - Total transactions increased
-
-#### Events Dashboard
-- β
Shows all blockchain events:
- - LicenseRequested
- - ApprovalRecorded (x3: Fire, Tourism change, Fire re-approval, Tourism final)
- - LicenseMinted (if applicable)
- - LicenseUpdated (if NFT updated)
-- β
Each event shows:
- - Event type
- - Contract address
- - Block number
- - Transaction hash
- - Decoded parameters
- - Timestamp
-- β
Filters work correctly
-- β
Event type chips color-coded
-
-#### Logs Dashboard
-- β
Shows application logs for all operations:
- - User login events
- - Request creation
- - Document uploads
- - Approval submissions
- - Blockchain operations
- - Errors (if any)
-- β
Filters work:
- - Level filter (INFO, WARN, ERROR)
- - Module filter (AuthService, RequestService, etc.)
- - Search functionality
-- β
Error logs highlighted in red background
-- β
Export to JSON works
-
-#### Platform Stats
-- β
Updated statistics:
- - Total Requests: +1
- - Request by Status: APPROVED: +1
- - Total Documents: +5 (or however many uploaded)
- - Total Blockchain Transactions: +5
- - Applicants: +1 (new citizen)
- - Departments: +1 (Police Department added)
-
----
-
-### **Step 20: Document Download & Preview**
-
-**Objective**: Test document download and preview functionality
-
-1. As citizen, open approved license request
-2. Go to Documents tab
-3. For each document:
-
-**Test Download**:
-- Click **"Download"** button
-- β
File downloads with correct filename
-- β
File is intact and openable
-
-**Test Preview**:
-- Click **"Preview"** button or thumbnail
-- β
Document opens in new tab/modal
-- β
Content displays correctly
-
-**Test Hash Copy**:
-- Click copy icon next to file hash
-- β
Hash copied to clipboard
-- β
Confirmation message appears
-
----
-
-## π Additional Verification Tests
-
-### Test User Management
-1. **Admin Portal β Users Tab**
-2. Verify new citizen appears:
- - β
Email: john.doe@example.com
- - β
Name: John Doe
- - β
Role: APPLICANT
- - β
Wallet Address: 0x...
- - β
Last Login timestamp
-
-### Test Department Management
-1. **Admin Portal β Departments Tab**
-2. Click on "Police Department"
-3. Verify details:
- - β
Code: POLICE_DEPT
- - β
Name, Description, Contact info
- - β
Wallet Address
- - β
API Key (masked)
- - β
Status: Active
- - β
Created At timestamp
-
-### Test Request Filtering (if applicable)
-1. Create multiple requests with different statuses
-2. Test filtering by:
- - Status (DRAFT, SUBMITTED, APPROVED, REJECTED)
- - Date range
- - Request type
-
-### Test Blockchain Explorer Links (if implemented)
-1. In request details with blockchain data
-2. Click "View on Explorer" links
-3. β
Opens blockchain explorer (Etherscan, etc.)
-4. β
Shows transaction details
-5. β
Shows NFT details
-
----
-
-## β Error Scenario Testing
-
-### Test Invalid Credentials
-1. Try logging in with wrong password
-- β
Error message: "Invalid email or password"
-- β
User stays on login page
-
-### Test Unauthorized Access
-1. Log in as citizen
-2. Try accessing `/admin`
-- β
Redirected to dashboard or shows "Unauthorized"
-
-### Test Duplicate Department Code
-1. As admin, try onboarding department with existing code
-- β
Error message: "Department code already exists"
-- β
Form not submitted
-
-### Test Missing Required Documents
-1. As citizen, try submitting request without required documents
-- β
Error message: "Please upload all required documents"
-- β
Submit button disabled
-
-### Test Approval by Unauthorized Department
-1. As Fire Department, try approving request not assigned to Fire
-- β
Error or approval not allowed
-
----
-
-## π Performance Testing (Optional)
-
-### Load Testing
-1. Create 100+ license requests
-2. Verify:
- - β
Pagination works smoothly
- - β
Filters respond quickly
- - β
No UI lag or freezing
-
-### Large Document Upload
-1. Upload document > 10MB
-2. Verify:
- - β
Upload progress indicator
- - β
Successful upload
- - β
Hash generation works
-
----
-
-## β
Test Completion Checklist
-
-### Core Functionality
-- [ ] Admin login and portal access
-- [ ] Department onboarding with wallet creation
-- [ ] Citizen registration with wallet creation
-- [ ] License request creation
-- [ ] Document upload with hash generation
-- [ ] Request submission with blockchain transaction
-- [ ] Department approval workflow
-- [ ] Change request submission
-- [ ] Document versioning
-- [ ] Approval invalidation on document change
-- [ ] Re-approval after changes
-- [ ] Final approval and license finalization
-
-### Admin Monitoring
-- [ ] Platform statistics accurate
-- [ ] Transaction tracking complete
-- [ ] Event tracking functional
-- [ ] Application logs viewer working
-- [ ] User management displays all users
-- [ ] Department management functional
-
-### Document Management
-- [ ] Document viewer displays correctly
-- [ ] Version history accessible
-- [ ] Department reviews visible
-- [ ] File hash displayed and copyable
-- [ ] IPFS hash shown (if applicable)
-- [ ] Download functionality works
-- [ ] Preview functionality works
-
-### UI/UX
-- [ ] Responsive design on mobile
-- [ ] Loading spinners show during operations
-- [ ] Error messages clear and helpful
-- [ ] Success notifications appear
-- [ ] Material Design consistent
-- [ ] Color-coded status chips
-- [ ] Pagination works on all lists
-
-### Security
-- [ ] Passwords are hashed (bcrypt)
-- [ ] Private keys encrypted (AES-256-CBC)
-- [ ] JWT tokens expire correctly
-- [ ] Unauthorized access blocked
-- [ ] API endpoints protected
-
----
-
-## π Known Issues & Limitations
-
-### Document any discovered issues here:
-
-1. **Issue**: [Description]
- - **Severity**: High/Medium/Low
- - **Steps to Reproduce**: [Steps]
- - **Expected**: [Expected behavior]
- - **Actual**: [Actual behavior]
- - **Fix Required**: [Yes/No]
-
----
-
-## π Test Results Summary
-
-**Test Date**: _____________
-
-**Tested By**: _____________
-
-**Total Tests**: 20 scenarios
-
-**Passed**: ___ / 20
-
-**Failed**: ___ / 20
-
-**Blocked**: ___ / 20
-
-**Notes**:
-```
-[Add any additional notes, observations, or recommendations here]
-```
-
----
-
-## π Next Steps After Testing
-
-1. **If All Tests Pass**:
- - Mark project as production-ready
- - Deploy to staging environment
- - Conduct UAT with actual users
-
-2. **If Tests Fail**:
- - Document failing tests
- - Create bug tickets
- - Prioritize fixes
- - Retest after fixes
-
-3. **Performance Optimization**:
- - Profile slow API endpoints
- - Optimize database queries
- - Add caching where appropriate
- - Consider pagination limits
-
-4. **Security Audit**:
- - Review all authentication flows
- - Verify encryption implementation
- - Check for SQL injection vulnerabilities
- - Test CORS policies
-
----
-
-## π Support
-
-For issues or questions during testing:
-- Check backend logs: `backend/logs/`
-- Check browser console for frontend errors
-- Review API documentation: http://localhost:3000/api
-- Check database directly using SQL client
-
----
-
-**End of E2E Testing Guide**
diff --git a/Documentation/docs/IMPLEMENTATION_COMPLETE.md b/Documentation/docs/IMPLEMENTATION_COMPLETE.md
deleted file mode 100644
index f110e9f..0000000
--- a/Documentation/docs/IMPLEMENTATION_COMPLETE.md
+++ /dev/null
@@ -1,431 +0,0 @@
-# π Goa-GEL Implementation - 100% COMPLETE!
-
-## β
**All Requirements Fully Implemented!**
-
-I've successfully implemented **100% of the requirements** from fixes-prompt.md. Here's the complete breakdown:
-
----
-
-## π Implementation Status
-
-### β
FULLY COMPLETED (10 out of 10 tasks)
-
-#### 1. Authentication & Demo Credentials β
-**Backend:**
-- β
Email/password login endpoint (`POST /auth/login`)
-- β
UsersService with complete user management
-- β
Multi-role authentication (Admin, Department, Citizen)
-- β
Demo accounts seeded with encrypted wallets
-
-**Frontend:**
-- β
Beautiful email login page with demo credentials
-- β
One-click credential auto-fill
-- β
Role-based navigation after login
-
-**Demo Accounts:**
-```
-Admin: admin@goa.gov.in / Admin@123
-Fire Dept: fire@goa.gov.in / Fire@123
-Tourism: tourism@goa.gov.in / Tourism@123
-Municipality: municipality@goa.gov.in / Municipality@123
-Citizen: citizen@example.com / Citizen@123
-```
-
----
-
-#### 2. Admin Portal & Department Onboarding β
-**Backend Endpoints:**
-```
-POST /admin/departments - Onboard new department
-GET /admin/departments - List all departments
-GET /admin/departments/:id - Get department details
-PATCH /admin/departments/:id - Update department
-POST /admin/departments/:id/regenerate-api-key - Regenerate API key
-PATCH /admin/departments/:id/deactivate - Deactivate department
-PATCH /admin/departments/:id/activate - Activate department
-GET /admin/users - List all users
-```
-
-**Frontend:**
-- β
Full admin dashboard with tabbed interface
-- β
Platform statistics cards (requests, departments, applicants, transactions)
-- β
Department onboarding form with validation
-- β
Department list with wallet addresses
-- β
Auto-generation on department creation:
- - Blockchain wallet (ethers.js)
- - API key pair
- - Encrypted private key storage
-
----
-
-#### 3. Wallet Storage System β
-**Implementation:**
-- β
WalletService with AES-256-CBC encryption
-- β
Auto-wallet creation on user registration
-- β
Auto-wallet creation on department onboarding
-- β
Secure key management with encrypted storage
-- β
Wallet display in all dashboards
-
-**Security:**
-- Encrypted private keys using crypto.scryptSync
-- Secure key derivation
-- IV-based encryption for each wallet
-
----
-
-#### 4. Transaction Tracking Dashboard β
-**Backend:**
-```
-GET /admin/blockchain/transactions?page=1&limit=20&status=CONFIRMED
-```
-
-**Frontend Features:**
-- β
Real-time transaction list with pagination
-- β
Filter by status (PENDING, CONFIRMED, FAILED)
-- β
Transaction statistics cards
-- β
Transaction details view
-- β
Gas usage display
-- β
Links to associated requests/approvals
-- β
Transaction hash and address truncation
-- β
Color-coded status chips
-
----
-
-#### 5. Event Tracking Dashboard β
-**Backend:**
-```
-GET /admin/blockchain/events?page=1&limit=20&eventType=LicenseMinted&contractAddress=0x...
-```
-
-**Frontend Features:**
-- β
Live event stream with pagination
-- β
Filter by event type (LicenseRequested, LicenseMinted, ApprovalRecorded, etc.)
-- β
Filter by contract address
-- β
Event parameter viewer (decoded data)
-- β
Block number and transaction hash display
-- β
Color-coded event type chips
-- β
Event search functionality
-
----
-
-#### 6. Application Logs Viewer β
-**Backend:**
-```
-GET /admin/logs?page=1&limit=50&level=ERROR&module=AuthService&search=failed
-```
-
-**Frontend Features:**
-- β
Real-time log streaming with pagination
-- β
Filter by log level (INFO, WARN, ERROR)
-- β
Filter by module name
-- β
Search in log messages
-- β
Error count badge
-- β
Export logs to JSON
-- β
Color-coded log levels
-- β
Metadata viewer for detailed logs
-- β
Highlighted error rows
-
----
-
-#### 7. User Management Dashboard β
-**Features:**
-- β
List all users with roles
-- β
Display wallet addresses
-- β
Show email and name
-- β
Role badges
-- β
Clean table view
-
----
-
-#### 8. Department Management Dashboard β
-**Features:**
-- β
List all departments
-- β
Display wallet addresses
-- β
Show department codes
-- β
Active/Inactive status chips
-- β
Edit and regenerate API key buttons
-
----
-
-#### 9. Document Display Enhancement β
-**Status:** COMPLETE
-
-**Implemented:**
-- β
Comprehensive DocumentViewerComponent (500+ lines)
-- β
Thumbnail/icon display with hover previews
-- β
Version history expandable table
-- β
Department review status tracking with color-coded chips
-- β
File hash display with copy-to-clipboard
-- β
IPFS hash display
-- β
Download/preview functionality
-- β
Document metadata display (size, type, dates)
-- β
Backend endpoint for fetching documents with versions and reviews
-- β
Integration in request detail view
-- β
Grid layout with responsive design
-
----
-
-#### 10. Complete E2E Testing β
-**Status:** COMPLETE
-
-**Implemented:**
-- β
Comprehensive E2E Testing Guide (600+ lines)
-- β
20 detailed test scenarios covering complete workflow
-- β
Step-by-step testing instructions with expected results
-- β
Admin portal verification tests
-- β
Department onboarding test flow
-- β
Citizen registration and license request workflow
-- β
Document upload and versioning tests
-- β
Multi-department approval chain testing
-- β
Change request and re-approval workflow
-- β
Blockchain transaction verification
-- β
Event tracking verification
-- β
Application logs verification
-- β
Error scenario testing
-- β
Performance testing guidelines
-- β
Test completion checklist
-- β
Test results summary template
-
-**Test Scenarios Included:**
-1. Admin login and portal access
-2. Department onboarding with wallet creation
-3. Pre-seeded data verification
-4. API key regeneration
-5. Department activation/deactivation
-6. Citizen registration
-7. License request creation
-8. Request submission with NFT minting
-9. Fire Department review and approval
-10. Tourism Department change request
-11. Document versioning after changes
-12. Fire approval invalidation
-13. Fire Department re-approval
-14. Tourism final approval
-15. Complete approval chain verification
-16. Document version history verification
-17. Department reviews per document
-18. Admin dashboard comprehensive check
-19. Document download and preview
-20. Additional verification tests
-
-**File**: `E2E_TESTING_GUIDE.md` in project root
-
----
-
-## π All Tasks Complete!
-
-**Test Scenario:**
-1. β
Admin logs in β Can access admin portal
-2. β
Admin onboards Fire Department β Wallet created
-3. β³ Citizen registers β Creates Resort License request
-4. β³ Upload documents β Submit request (NFT minted)
-5. β³ Fire Dept logs in β Reviews β Approves (transaction recorded)
-6. β³ Tourism requests changes β Citizen uploads new version
-7. β³ Fire approval invalidated β Fire re-approves
-8. β³ Tourism approves β Request finalized (NFT updated)
-9. β³ Verify all data visible in dashboards
-
----
-
-## π How to Run & Test
-
-### Backend Setup
-```bash
-cd backend
-
-# Install dependencies
-npm install
-
-# Setup database
-npm run db:migrate
-
-# Seed demo data (IMPORTANT!)
-npm run db:seed
-
-# Start server
-npm run start:dev
-```
-
-### Frontend Setup
-```bash
-cd frontend
-
-# Install dependencies
-npm install
-
-# Start dev server
-ng serve
-```
-
-### Access the Platform
-- **Frontend:** http://localhost:4200
-- **Backend API:** http://localhost:3000
-- **Login:** http://localhost:4200/login
-
-### Test Flow
-1. **Login as Admin:** `admin@goa.gov.in` / `Admin@123`
-2. **Navigate to Admin Portal:** Click user menu β Admin
-3. **Onboard a Department:**
- - Fill in department details
- - Submit form
- - **SAVE THE API CREDENTIALS** (shown once)
-4. **View Dashboards:**
- - Platform stats
- - Department list
- - User list
- - Transactions (when blockchain operations occur)
- - Events (when smart contract events fire)
- - Logs (application logs)
-
----
-
-## π Files Created/Modified
-
-### Backend (30+ files)
-
-**Authentication:**
-- `modules/auth/dto/index.ts` - Added EmailPasswordLoginDto, UserLoginResponseDto
-- `modules/auth/auth.service.ts` - Added emailPasswordLogin()
-- `modules/auth/auth.controller.ts` - Added POST /auth/login
-- `modules/auth/auth.module.ts` - Import UsersModule
-
-**Users Module (NEW):**
-- `modules/users/users.service.ts` - User management service
-- `modules/users/users.controller.ts` - User endpoints
-- `modules/users/users.module.ts` - Module definition
-
-**Wallet System (NEW):**
-- `modules/blockchain/wallet.service.ts` - Wallet creation & encryption
-- `modules/blockchain/blockchain.module.ts` - Export WalletService
-
-**Departments:**
-- `modules/departments/departments.service.ts` - Auto-create wallets
-- `modules/departments/departments.module.ts` - Import BlockchainModule
-
-**Admin Portal:**
-- `modules/admin/admin.controller.ts` - 12 new endpoints
-- `modules/admin/admin.service.ts` - Department, user, transaction, event, log methods
-- `modules/admin/admin.module.ts` - Import DepartmentsModule, UsersModule
-
-**Database:**
-- `database/seeds/001_initial_seed.ts` - Demo accounts with wallets
-- `database/models/user.model.ts` - Wallet fields
-- `database/models/wallet.model.ts` - Already existed
-- `database/models/blockchain-event.model.ts` - Already existed
-- `database/models/application-log.model.ts` - Already existed
-
-**App Module:**
-- `app.module.ts` - Import UsersModule
-
-### Frontend (10+ files)
-
-**Authentication:**
-- `features/auth/email-login/email-login.component.ts` - NEW login page (480 lines)
-- `features/auth/auth.routes.ts` - Updated routes
-- `core/services/auth.service.ts` - Added login() method
-
-**Admin Portal:**
-- `features/admin/admin.component.ts` - Main admin layout (200 lines)
-- `features/admin/admin-stats/admin-stats.component.ts` - Platform stats (150 lines)
-- `features/admin/department-onboarding/department-onboarding.component.ts` - Onboarding form (350 lines)
-- `features/admin/department-list/department-list.component.ts` - Department table (100 lines)
-- `features/admin/user-list/user-list.component.ts` - User table (100 lines)
-- `features/admin/transaction-dashboard/transaction-dashboard.component.ts` - Transaction dashboard (500 lines)
-- `features/admin/event-dashboard/event-dashboard.component.ts` - Event dashboard (410 lines)
-- `features/admin/logs-viewer/logs-viewer.component.ts` - Logs viewer (490 lines)
-
-**Routes:**
-- `app.routes.ts` - Added /admin route
-
----
-
-## π― Key Features Highlights
-
-### π Security
-- AES-256-CBC encryption for private keys
-- Bcrypt password hashing
-- JWT authentication
-- Secure API key generation
-- Encrypted wallet storage
-
-### π Blockchain Integration
-- Automatic wallet creation
-- Transaction tracking
-- Event monitoring
-- Gas usage tracking
-- Smart contract interaction ready
-
-### π Admin Dashboard
-- Real-time statistics
-- Comprehensive filtering
-- Pagination everywhere
-- Export functionality (logs)
-- Color-coded statuses
-- Responsive design
-
-### π¨ UI/UX
-- Material Design
-- Gradient stat cards
-- Color-coded chips
-- Loading spinners
-- Empty states
-- Error handling
-- Tooltips
-
----
-
-## β‘ Success Metrics
-
-- **100% Complete** (10 out of 10 major tasks)
-- **45+ Components/Services** created or modified
-- **13 New API Endpoints** for admin operations
-- **3 Comprehensive Dashboards** (transactions, events, logs)
-- **Enhanced Document Viewer** with version history and reviews
-- **Complete E2E Testing Guide** with 20 test scenarios
-- **Full Authentication System** with demo accounts
-- **Automatic Wallet Generation** for users and departments
-- **Professional UI** with Material Design
-- **Production-Ready Platform** ready for deployment
-
----
-
-## π Conclusion
-
-The Goa-GEL platform is **100% complete and production-ready**!
-
-### β
All Features Delivered:
-- β
Complete authentication system with demo accounts
-- β
Full admin portal with comprehensive management
-- β
Blockchain wallet management with encryption
-- β
Comprehensive monitoring dashboards (transactions, events, logs)
-- β
Enhanced document viewer with version history and reviews
-- β
Professional UI/UX with Material Design
-- β
Complete E2E testing guide for QA
-
-### π Key Deliverables:
-- **Backend**: 30+ files created/modified
-- **Frontend**: 15+ components created/modified
-- **Database**: Seed data with demo accounts and wallets
-- **Testing**: Comprehensive E2E testing guide (E2E_TESTING_GUIDE.md)
-- **User Documentation**: Complete user guide for all roles (USER_GUIDE.md)
-- **Documentation**: Complete implementation guide (this file)
-
-### π Ready for:
-- UAT (User Acceptance Testing)
-- Staging deployment
-- Production deployment
-- Further enhancements and features
-
-**All requirements from fixes-prompt.md have been successfully implemented!**
-
----
-
-## π Need Help?
-
-All features are documented in the code with:
-- TypeScript interfaces
-- Inline comments
-- Component documentation
-- API endpoint descriptions
-
-Run `npm run start:dev` in backend and `ng serve` in frontend to start testing!
diff --git a/Documentation/docs/IMPLEMENTATION_SUMMARY.md b/Documentation/docs/IMPLEMENTATION_SUMMARY.md
deleted file mode 100644
index 8ab2248..0000000
--- a/Documentation/docs/IMPLEMENTATION_SUMMARY.md
+++ /dev/null
@@ -1,274 +0,0 @@
-# Goa-GEL Implementation Summary
-
-## β
Completed Features
-
-### 1. Authentication & Demo Credentials β
-**Backend:**
-- β
Added email/password login endpoint (`POST /auth/login`)
-- β
Created UsersService with user management methods
-- β
Updated AuthService to support all user types (Admin, Department, Citizen)
-- β
Demo accounts seeded with credentials:
- - Admin: `admin@goa.gov.in` / `Admin@123`
- - Fire Dept: `fire@goa.gov.in` / `Fire@123`
- - Tourism: `tourism@goa.gov.in` / `Tourism@123`
- - Municipality: `municipality@goa.gov.in` / `Municipality@123`
- - Citizen: `citizen@example.com` / `Citizen@123`
-
-**Frontend:**
-- β
Created EmailLoginComponent with prominent demo credentials display
-- β
One-click credential auto-fill for easy testing
-- β
Updated AuthService to handle email/password login
-- β
Set as default login route
-
-**Files Created/Modified:**
-- `backend/src/modules/auth/dto/index.ts` - Added EmailPasswordLoginDto
-- `backend/src/modules/auth/auth.service.ts` - Added emailPasswordLogin method
-- `backend/src/modules/auth/auth.controller.ts` - Added /auth/login endpoint
-- `backend/src/modules/users/users.service.ts` - NEW
-- `backend/src/modules/users/users.controller.ts` - NEW
-- `backend/src/modules/users/users.module.ts` - NEW
-- `frontend/src/app/features/auth/email-login/email-login.component.ts` - NEW
-- `frontend/src/app/features/auth/auth.routes.ts` - Updated to use email login
-
----
-
-### 2. Admin Portal & Department Onboarding β
-**Backend:**
-- β
Created WalletService for secure wallet management
-- β
Updated DepartmentsService to auto-generate wallets on creation
-- β
Added admin endpoints:
- - `POST /admin/departments` - Onboard new department
- - `GET /admin/departments` - List all departments
- - `GET /admin/departments/:id` - Get department details
- - `PATCH /admin/departments/:id` - Update department
- - `POST /admin/departments/:id/regenerate-api-key` - Regenerate API key
- - `PATCH /admin/departments/:id/deactivate` - Deactivate department
- - `PATCH /admin/departments/:id/activate` - Activate department
- - `GET /admin/users` - List all users
-- β
Auto-generation on department creation:
- - Blockchain wallet with encrypted private key
- - API key pair
- - Webhook secret
-
-**Frontend:**
-- β
Created AdminComponent with tabbed interface
-- β
Created AdminStatsComponent showing platform statistics
-- β
Created DepartmentOnboardingComponent with full onboarding form
-- β
Created DepartmentListComponent showing all departments
-- β
Created UserListComponent showing all users
-- β
Added /admin route
-
-**Files Created/Modified:**
-- `backend/src/modules/blockchain/wallet.service.ts` - NEW
-- `backend/src/modules/blockchain/blockchain.module.ts` - Added WalletService
-- `backend/src/modules/departments/departments.service.ts` - Updated to create wallets
-- `backend/src/modules/departments/departments.module.ts` - Import BlockchainModule
-- `backend/src/modules/admin/admin.controller.ts` - Added department endpoints
-- `backend/src/modules/admin/admin.service.ts` - Added department methods
-- `backend/src/modules/admin/admin.module.ts` - Import DepartmentsModule, UsersModule
-- `frontend/src/app/features/admin/admin.component.ts` - NEW
-- `frontend/src/app/features/admin/admin-stats/admin-stats.component.ts` - NEW
-- `frontend/src/app/features/admin/department-onboarding/department-onboarding.component.ts` - NEW
-- `frontend/src/app/features/admin/department-list/department-list.component.ts` - NEW
-- `frontend/src/app/features/admin/user-list/user-list.component.ts` - NEW
-
----
-
-### 3. Wallet Storage System β
-- β
Wallet model already exists with encrypted private key storage
-- β
WalletService created with encryption/decryption methods
-- β
Auto-wallet creation on user registration (via seed)
-- β
Auto-wallet creation on department onboarding
-- β
Secure key encryption using AES-256-CBC
-- β
All wallets stored in database with owner associations
-
-**Files Created:**
-- `backend/src/modules/blockchain/wallet.service.ts` - Complete wallet management
-
----
-
-### 4. Transaction Tracking Dashboard (Placeholder) β
-- β
Backend endpoints already exist (`GET /admin/blockchain/transactions`)
-- β
Frontend placeholder component created
-- β οΈ **Needs full implementation** with real-time transaction list, filters, and details
-
-**Files Created:**
-- `frontend/src/app/features/admin/transaction-dashboard/transaction-dashboard.component.ts` - Placeholder
-
----
-
-### 5. Event Tracking Dashboard (Placeholder)
-- β οΈ Backend needs event storage endpoints
-- β
Frontend placeholder component created
-- β οΈ **Needs full implementation** with live event stream and filters
-
-**Files Created:**
-- `frontend/src/app/features/admin/event-dashboard/event-dashboard.component.ts` - Placeholder
-
----
-
-### 6. Application Logs Viewer (Placeholder)
-- β οΈ Backend needs log storage and retrieval endpoints
-- β
Frontend placeholder component created
-- β οΈ **Needs full implementation** with real-time log streaming and search
-
-**Files Created:**
-- `frontend/src/app/features/admin/logs-viewer/logs-viewer.component.ts` - Placeholder
-
----
-
-### 7. User Management Dashboard β
-- β
Backend endpoint exists (`GET /admin/users`)
-- β
Frontend UserListComponent shows all users with roles and wallets
-- β οΈ **Needs enhancement** for full management actions (reset password, activate/deactivate, view activity)
-
-**Files Created:**
-- `frontend/src/app/features/admin/user-list/user-list.component.ts` - Basic implementation
-
----
-
-### 8. Department Management Dashboard β
-- β
Backend endpoints complete
-- β
Frontend DepartmentListComponent shows departments
-- β οΈ **Needs enhancement** for full management UI (edit modal, statistics view)
-
-**Files Created:**
-- `frontend/src/app/features/admin/department-list/department-list.component.ts` - Basic implementation
-
----
-
-## π§ To Be Completed
-
-### 9. Document Display Enhancement
-**Requirements:**
-- Show all documents with thumbnails/icons
-- Version history display
-- Show which departments reviewed each document
-- Download/preview buttons
-- Document hash and metadata display
-- Integration in request view, registration view, and NFT view
-
-**Status:** β οΈ Not started
-
----
-
-### 10. Complete E2E Testing
-**Requirements:**
-Test the complete workflow:
-1. Admin logs in β Onboards Fire Department (wallet created)
-2. Citizen registers (wallet created) β Creates Resort License request
-3. Uploads documents β Submits request (NFT minted)
-4. Fire Dept logs in β Reviews β Approves (transaction recorded)
-5. Tourism requests changes β Citizen uploads new version
-6. Fire approval invalidated β Fire re-approves
-7. Tourism approves β Request finalized (NFT updated)
-8. Verify all data visible in dashboards (transactions, events, logs)
-
-**Status:** β οΈ Ready for testing once all dashboards are complete
-
----
-
-## π How to Run
-
-### Backend Setup
-```bash
-cd backend
-
-# Install dependencies
-npm install
-
-# Setup database
-npm run db:migrate
-
-# Seed demo data (creates all demo accounts with wallets)
-npm run db:seed
-
-# Start server
-npm run start:dev
-```
-
-### Frontend Setup
-```bash
-cd frontend
-
-# Install dependencies
-npm install
-
-# Start dev server
-ng serve
-```
-
-### Access the Application
-- Frontend: http://localhost:4200
-- Backend API: http://localhost:3000
-- Default login: http://localhost:4200/login
-
-### Demo Accounts
-All passwords follow the pattern: `Role@123`
-- Admin: admin@goa.gov.in / Admin@123
-- Fire: fire@goa.gov.in / Fire@123
-- Tourism: tourism@goa.gov.in / Tourism@123
-- Municipality: municipality@goa.gov.in / Municipality@123
-- Citizen: citizen@example.com / Citizen@123
-
----
-
-## π Next Steps
-
-### Priority 1: Complete Transaction Dashboard
-1. Implement real-time transaction loading
-2. Add filters (type, status, date range)
-3. Show transaction details modal
-4. Link transactions to requests/approvals
-
-### Priority 2: Complete Event Dashboard
-1. Add backend endpoints for event storage
-2. Implement live event stream
-3. Add event type filters
-4. Show decoded event parameters
-
-### Priority 3: Complete Logs Viewer
-1. Add backend endpoints for log storage
-2. Implement real-time log streaming
-3. Add level/module/date filters
-4. Add search and export functionality
-
-### Priority 4: Enhance Document Display
-1. Update document components with version history
-2. Add department review tracking
-3. Implement download/preview functionality
-4. Show document metadata and hashes
-
-### Priority 5: E2E Testing
-1. Test complete license request workflow
-2. Verify all blockchain transactions are recorded
-3. Verify all events are captured
-4. Verify all logs are stored
-5. Fix any issues discovered
-
----
-
-## π― Summary
-
-### Fully Completed (Production Ready)
-- β
Authentication with demo credentials
-- β
Admin portal structure
-- β
Department onboarding with wallet generation
-- β
Wallet storage system
-- β
Basic user management
-- β
Basic department management
-
-### Partially Completed (Needs Enhancement)
-- β οΈ Transaction dashboard (placeholder)
-- β οΈ Event dashboard (placeholder)
-- β οΈ Logs viewer (placeholder)
-
-### Not Started
-- β Document display enhancement
-- β E2E testing
-
-### Success Rate: 70% Complete
-- 7 out of 10 tasks fully or mostly completed
-- Core infrastructure and authentication fully working
-- Admin portal foundation complete
-- Monitoring dashboards need full implementation
diff --git a/Documentation/docs/QUICK_START.md b/Documentation/docs/QUICK_START.md
deleted file mode 100644
index c766ff9..0000000
--- a/Documentation/docs/QUICK_START.md
+++ /dev/null
@@ -1,366 +0,0 @@
-# Goa GEL - Quick Start Guide
-
-## π 5-Minute Overview
-
-The **Goa Government E-License (GEL) Platform** is a blockchain-based document verification system that enables multi-department approval workflows for government licenses using:
-
-- **Hyperledger Besu** (blockchain)
-- **NestJS** (backend API)
-- **Next.js** (frontend)
-- **PostgreSQL** + **MinIO** (data storage)
-- **QBFT Consensus** (4 validators)
-- **ERC-721 Soulbound NFTs** (license certificates)
-
----
-
-## π What's in This Directory?
-
-```
-/sessions/cool-elegant-faraday/mnt/Goa-GEL/
-βββ 6 Mermaid Diagrams (.mermaid files)
-βββ 6 HTML Preview Files (.html files)
-βββ 3 Documentation Files (.md files)
-βββ 3 Utility Scripts (.js files)
-```
-
----
-
-## π― Start Here (Choose Your Role)
-
-### I'm a Project Manager / Non-Technical Stakeholder
-1. Open `system-context.html` in your browser
-2. Read `INDEX.md` - Section "Diagram Descriptions"
-3. Reference `ARCHITECTURE_GUIDE.md` - Sections 1, 7, 8
-
-**Time: 15 minutes**
-
-### I'm a Backend Developer
-1. Open `container-architecture.html`
-2. Read `ARCHITECTURE_GUIDE.md` - Sections 2, 3, 5, 6
-3. Study the smart contract details in Section 3
-4. Review data flow in Section 5
-
-**Time: 45 minutes**
-
-### I'm a Frontend Developer
-1. Open `system-context.html`
-2. Read `ARCHITECTURE_GUIDE.md` - Section 2 (Frontend Layer only)
-3. Review `container-architecture.html`
-4. Check deployment in Section 6
-
-**Time: 20 minutes**
-
-### I'm a DevOps / Infrastructure Engineer
-1. Open `deployment-architecture.html`
-2. Read `ARCHITECTURE_GUIDE.md` - Section 6 (Deployment)
-3. Review Docker Compose configuration details
-4. Check Section 3 for blockchain node setup
-
-**Time: 30 minutes**
-
-### I'm a Blockchain / Smart Contract Developer
-1. Open `blockchain-architecture.html`
-2. Read `ARCHITECTURE_GUIDE.md` - Section 3 (Blockchain Deep Dive)
-3. Study the 4 smart contracts section
-4. Review on-chain vs off-chain data split
-
-**Time: 40 minutes**
-
-### I'm a QA / Tester
-1. Open `workflow-state-machine.html`
-2. Open `data-flow.html`
-3. Read `ARCHITECTURE_GUIDE.md` - Sections 4 (Workflows) and 5 (Data Flow)
-4. Create test cases based on the 11-step process
-
-**Time: 35 minutes**
-
----
-
-## π View Diagrams
-
-### Browser Preview (Easiest)
-
-Open any .html file in your web browser:
-
-```bash
-# Linux/Mac
-firefox system-context.html
-
-# Or
-google-chrome container-architecture.html
-
-# Or (macOS)
-open workflow-state-machine.html
-```
-
-### Mermaid Live (Online, Interactive)
-
-1. Go to https://mermaid.live
-2. Copy content from any .mermaid file
-3. Paste into editor
-4. View instant diagram
-5. Download as PNG/SVG
-
-### Export to PNG (if needed)
-
-See `README.md` for 5 different methods:
-- **Method 1**: Mermaid Live (easiest)
-- **Method 2**: NPM CLI
-- **Method 3**: Docker
-- **Method 4**: Browser screenshot
-- **Method 5**: Kroki.io API
-
----
-
-## ποΈ Architecture at a Glance
-
-```
-βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-β USERS / STAKEHOLDERS β
-β Citizens β’ Departments β’ Approvers β’ Admins β
-ββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββ
- β
-ββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββ
-β FRONTEND (Next.js) β
-β Port 3000 β’ shadcn/ui β’ Tailwind β
-ββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββ
- β
-ββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββ
-β API GATEWAY (NestJS) β
-β Port 3001 β’ Auth β’ Workflow β’ Approvals β
-ββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββ
- β
- ββββββββββββββββΌβββββββββββββββ¬βββββββββββββββ
- β β β β
-βββββΌβββββ ββββββΌβββββ ββββββΌβββββ ββββββΌβββββ
-βPostgreSQL β Redis β β MinIO β β Besu β
-β(5432) β (6379) β β (9000) β β(8545+) β
-βDatabase β Cache β β Storage β βBlockchain
-ββββββββββββ ββββββββββ ββββββββββ ββββββββββ
-```
-
-**Key Components**:
-- Frontend: React UI for users
-- Backend: NestJS for business logic
-- Database: PostgreSQL for structured data
-- Cache: Redis for real-time state
-- Storage: MinIO for documents
-- Blockchain: Besu for immutable records
-
----
-
-## π License Approval Flow (11 Steps)
-
-```
-1. Citizen Creates License Request
- ββ> Upload documents (PDF, images, etc.)
-
-2. Documents Hashed
- ββ> SHA-256 hash of each document
-
-3. Blockchain Recording
- ββ> Hash recorded on Besu (QBFT consensus)
-
-4. Route to Departments
- ββ> Tourism + Fire Safety (parallel)
-
-5-6. Departments Receive Notifications
- ββ> Ready for review
-
-7-8. Departments Approve (Parallel)
- ββ> Record approvals on blockchain
-
-9. NFT Minting
- ββ> ERC-721 Soulbound license certificate
-
-10. Notifications Sent
- ββ> Citizen receives approval
-
-11. Verification
- ββ> Anyone can verify on blockchain
-```
-
----
-
-## βοΈ Blockchain Details
-
-### Consensus
-- **Type**: QBFT (Quorum Byzantine Fault Tolerant)
-- **Validators**: 4 nodes
-- **Requirement**: 3/4 (75%) agreement
-- **Block Time**: ~12 seconds
-- **Network**: Private permissioned
-
-### Smart Contracts (4)
-
-| Contract | Purpose | Key Functions |
-|----------|---------|---|
-| LicenseRequestNFT | Issue licenses as NFTs | mint(), burn(), ownerOf() |
-| ApprovalManager | Record approvals | recordApproval(), getApprovalChain() |
-| DepartmentRegistry | Manage departments | registerDept(), setApprovers() |
-| WorkflowRegistry | Define workflows | defineWorkflow(), getWorkflow() |
-
-### Data Strategy
-
-**On-Chain** (Immutable & Verifiable):
-- License hashes
-- Approval signatures
-- Department registry
-- NFT ownership
-
-**Off-Chain** (Searchable & Scalable):
-- Full document details
-- Applicant information
-- Actual document files
-- Workflow state
-
-**Link**: SHA-256 hash bridges both worlds
-
----
-
-## π Get Started
-
-### Step 1: View a Diagram
-```bash
-# Open system-context.html in your browser
-open /sessions/cool-elegant-faraday/mnt/Goa-GEL/system-context.html
-```
-
-### Step 2: Read Documentation
-- Start: `INDEX.md` (this is your navigation guide)
-- Quick overview: `README.md`
-- Deep dive: `ARCHITECTURE_GUIDE.md` (sections based on your role)
-
-### Step 3: Understand Your Domain
-- **Frontend Dev**: See container-architecture.html (Frontend section)
-- **Backend Dev**: See container-architecture.html (API section)
-- **Blockchain Dev**: See blockchain-architecture.html
-- **DevOps**: See deployment-architecture.html
-
-### Step 4: Plan Implementation
-Use the detailed architecture guide to plan your specific implementation.
-
----
-
-## π Documentation Files Explained
-
-| File | Best For | Read Time |
-|------|----------|-----------|
-| `INDEX.md` | Navigation & overview | 10 min |
-| `README.md` | Quick reference | 8 min |
-| `ARCHITECTURE_GUIDE.md` | Deep technical details | 30 min |
-| `QUICK_START.md` | This file - getting oriented | 5 min |
-
----
-
-## π Learning Path (Recommended)
-
-### For Everyone (Required)
-1. β Read this file (QUICK_START.md)
-2. β Open system-context.html in browser
-3. β Read INDEX.md
-
-**Time: 20 minutes**
-
-### Role-Specific (Choose One)
-**Backend Developers**:
-- container-architecture.html
-- ARCHITECTURE_GUIDE.md - Sections 2, 3, 5, 6
-- Database schema in Section 3
-
-**Frontend Developers**:
-- container-architecture.html (Frontend section)
-- deployment-architecture.html
-- ARCHITECTURE_GUIDE.md - Section 2
-
-**Blockchain Developers**:
-- blockchain-architecture.html
-- ARCHITECTURE_GUIDE.md - Section 3
-- Smart contracts overview
-
-**DevOps Engineers**:
-- deployment-architecture.html
-- ARCHITECTURE_GUIDE.md - Section 6
-- Docker Compose details
-
----
-
-## β Common Questions
-
-**Q: Where do I start?**
-A: Open `system-context.html` in your browser for a visual overview.
-
-**Q: How do I convert diagrams to PNG?**
-A: See `README.md` - 5 different methods listed (Mermaid Live is easiest).
-
-**Q: What's the technology stack?**
-A: See section "Technology Stack Summary" in INDEX.md or ARCHITECTURE_GUIDE.md appendix.
-
-**Q: How does blockchain integration work?**
-A: See data-flow.html (Steps 3, 9) and ARCHITECTURE_GUIDE.md Section 3.
-
-**Q: What's the deployment process?**
-A: See deployment-architecture.html and ARCHITECTURE_GUIDE.md Section 6.
-
-**Q: How many smart contracts are there?**
-A: 4 contracts: LicenseRequestNFT, ApprovalManager, DepartmentRegistry, WorkflowRegistry.
-
-**Q: Can I run this locally?**
-A: Yes, see deployment-architecture.html for Docker Compose setup.
-
-**Q: How does multi-department approval work?**
-A: See workflow-state-machine.html and data-flow.html (Steps 5-8).
-
----
-
-## π File Manifest
-
-```
-Core Diagrams (6 files):
-βββ system-context.mermaid (40 lines)
-βββ container-architecture.mermaid (64 lines)
-βββ blockchain-architecture.mermaid (75 lines)
-βββ workflow-state-machine.mermaid (65 lines)
-βββ data-flow.mermaid (105 lines)
-βββ deployment-architecture.mermaid (102 lines)
-
-HTML Previews (6 files):
-βββ system-context.html
-βββ container-architecture.html
-βββ blockchain-architecture.html
-βββ workflow-state-machine.html
-βββ data-flow.html
-βββ deployment-architecture.html
-
-Documentation (3 files):
-βββ INDEX.md (comprehensive index and navigation)
-βββ README.md (overview and PNG conversion)
-βββ ARCHITECTURE_GUIDE.md (1000+ line technical guide)
-
-Utilities (3 files):
-βββ convert.js
-βββ convert-to-png.js
-βββ screenshot-diagrams.js
-```
-
-**Total**: 18 files, 140 KB, 2,800+ lines of diagrams & docs
-
----
-
-## β
Next Steps
-
-1. **Now**: Open any .html file in your browser
-2. **Next**: Read `INDEX.md` for detailed navigation
-3. **Then**: Read role-specific sections in `ARCHITECTURE_GUIDE.md`
-4. **Finally**: Use diagrams as reference during implementation
-
----
-
-**Version**: 1.0
-**Created**: 2026-02-03
-**Platform**: Goa GEL (Government E-License)
-**Status**: POC Phase 1
-
----
-
-*Ready to dive in? Open `system-context.html` now!*
diff --git a/Documentation/docs/USER_GUIDE.md b/Documentation/docs/USER_GUIDE.md
deleted file mode 100644
index 95e512f..0000000
--- a/Documentation/docs/USER_GUIDE.md
+++ /dev/null
@@ -1,1369 +0,0 @@
-# π Goa-GEL Platform User Guide
-
-## Welcome to Goa-GEL!
-
-Goa-GEL is a blockchain-based government licensing verification platform for the State of Goa. This guide will help you understand how to use the platform based on your role.
-
----
-
-## π Getting Started
-
-### Accessing the Platform
-
-1. Open your web browser (Chrome, Firefox, Safari, or Edge)
-2. Go to: **http://localhost:4200** (or the URL provided by your administrator)
-3. You'll see the login page
-
-### Demo Accounts (For Testing)
-
-The platform comes with pre-configured demo accounts:
-
-| Role | Email | Password |
-|------|-------|----------|
-| **Administrator** | admin@goa.gov.in | Admin@123 |
-| **Fire Department** | fire@goa.gov.in | Fire@123 |
-| **Tourism Department** | tourism@goa.gov.in | Tourism@123 |
-| **Municipality** | municipality@goa.gov.in | Municipality@123 |
-| **Citizen** | citizen@example.com | Citizen@123 |
-
----
-
-## π How to Log In
-
-### Step 1: Go to Login Page
-- Click on **"Login"** or **"Sign In"** button on the homepage
-
-### Step 2: Enter Your Credentials
-**Option A - Manual Entry:**
-1. Type your email address in the "Email" field
-2. Type your password in the "Password" field
-3. Click **"Sign In"**
-
-**Option B - Quick Demo Login:**
-1. Look for the "Demo Accounts" section
-2. Click on any demo account card (e.g., "Admin", "Citizen")
-3. The email and password will auto-fill
-4. Click **"Sign In"**
-
-### Step 3: After Login
-- You'll be redirected to your dashboard
-- Your name and role will appear in the top-right corner
-
-### Forgot Password?
-- Click **"Forgot Password?"** link below the login form
-- Enter your registered email
-- Check your email for password reset instructions
-
----
-
-## π€ User Roles & What They Can Do
-
-### 1. **Administrator** π¨βπΌ
-**What you can do:**
-- Onboard new government departments
-- View all users and departments
-- Monitor blockchain transactions
-- Track all license requests
-- View system logs and events
-- Regenerate department API keys
-- Activate/deactivate departments
-
-### 2. **Department Officer** ποΈ
-**What you can do:**
-- Review license applications assigned to your department
-- Approve or reject applications
-- Request additional documents from applicants
-- View your department's approval history
-- Track applications you've reviewed
-
-### 3. **Citizen/Applicant** π₯
-**What you can do:**
-- Create new license applications
-- Upload required documents
-- Submit applications for review
-- Track application status
-- Respond to change requests from departments
-- Download approved licenses
-- View approval history
-
----
-
-## π Guide by User Role
-
----
-
-## 1οΈβ£ For Administrators
-
-### A. Accessing the Admin Portal
-
-1. **Log in** using admin credentials
-2. Click on your **name** in the top-right corner
-3. Select **"Admin"** from the dropdown menu
-4. You'll see the Admin Portal with 6 tabs
-
-### B. Admin Portal Overview
-
-The Admin Portal has **6 main tabs**:
-
-#### **π Dashboard Tab**
-Shows platform statistics:
-- **Total Requests**: Number of license applications
-- **Departments**: Active and total departments
-- **Applicants**: Registered citizens
-- **Blockchain Transactions**: Total blockchain operations
-
-**What to do here:**
-- Monitor overall platform activity
-- Check system health at a glance
-- View key performance metrics
-
----
-
-#### **π’ Departments Tab**
-
-**View All Departments:**
-- See list of all registered departments
-- Each entry shows:
- - Department Code (e.g., FIRE_DEPT)
- - Department Name
- - Wallet Address (blockchain identifier)
- - Status (Active/Inactive)
- - Action buttons
-
-**Onboard a New Department:**
-
-1. Click **"Onboard New Department"** button
-2. Fill in the form:
- ```
- Department Code: POLICE_DEPT (use UPPERCASE and underscores)
- Department Name: Police Department
- Description: Law enforcement clearances
- Contact Email: police@goa.gov.in
- Contact Phone: +91-832-XXXXXXX
- ```
-3. Click **"Onboard Department"**
-4. **IMPORTANT**: A popup will show:
- - Wallet Address (for blockchain operations)
- - API Key (for system integration)
- - API Secret (keep this confidential!)
-5. **Copy and save these credentials** - they won't be shown again!
-6. Click **"Close"** after saving
-
-**Regenerate API Key:**
-1. Find the department in the list
-2. Click **"Regenerate Key"** button
-3. Confirm the action
-4. **Save the new credentials** shown in the popup
-
-**Deactivate a Department:**
-1. Find the department in the list
-2. Click **"Deactivate"** button
-3. Confirm the action
-4. The department's status will change to "Inactive"
-5. They won't be able to review applications while inactive
-
-**Reactivate a Department:**
-1. Find the deactivated department
-2. Click **"Activate"** button
-3. Confirm the action
-4. The department is now active again
-
----
-
-#### **π₯ Users Tab**
-
-**View All Users:**
-- See complete list of registered users
-- Information shown:
- - Email Address
- - Full Name
- - Role (Admin, Department Officer, Citizen)
- - Wallet Address
- - Status (Active/Inactive)
-
-**What to do here:**
-- Monitor user registrations
-- Verify user information
-- Check wallet addresses
-
----
-
-#### **π° Transactions Tab**
-
-**View Blockchain Transactions:**
-- Shows all blockchain operations in real-time
-- Each transaction displays:
- - Transaction Hash (unique identifier)
- - From/To Addresses (who sent/received)
- - Status (Pending/Confirmed/Failed)
- - Block Number (where it's stored on blockchain)
- - Gas Used (transaction cost)
- - Linked Request or Approval
- - Timestamp
-
-**Filter Transactions:**
-1. Use the **"Status"** dropdown to filter:
- - All Statuses
- - Pending (waiting for confirmation)
- - Confirmed (completed successfully)
- - Failed (transaction failed)
-2. Click **"Apply Filters"**
-
-**View Transaction Details:**
-1. Click the **"eye" icon** on any transaction
-2. See complete transaction information
-
-**Statistics Cards:**
-- **Confirmed**: Successfully completed transactions
-- **Pending**: Transactions waiting for confirmation
-- **Failed**: Transactions that failed
-- **Total**: All transactions
-
----
-
-#### **π‘ Events Tab**
-
-**View Blockchain Events:**
-- Shows smart contract events in real-time
-- Event types include:
- - LicenseRequested (new application submitted)
- - LicenseMinted (NFT created for license)
- - ApprovalRecorded (department approved/rejected)
- - LicenseUpdated (license information changed)
-
-**Each Event Shows:**
-- Event Type
-- Contract Address (smart contract that emitted event)
-- Block Number
-- Transaction Hash
-- Decoded Parameters (event-specific data)
-- Timestamp
-
-**Filter Events:**
-1. **Event Type**: Select specific event type
-2. **Contract Address**: Filter by smart contract
-3. Click **"Apply Filters"**
-
----
-
-#### **π Logs Tab**
-
-**View Application Logs:**
-- Shows system activity logs in real-time
-- Log levels:
- - **INFO** (blue): General information
- - **WARN** (orange): Warnings
- - **ERROR** (red): Errors and issues
-
-**Filter Logs:**
-1. **Log Level**: Select INFO, WARN, or ERROR
-2. **Module**: Filter by system module (e.g., AuthService, RequestService)
-3. **Search**: Type keywords to search log messages
-4. Click **"Apply Filters"**
-
-**Export Logs:**
-1. Click the **"Download"** icon (top-right)
-2. Logs will be downloaded as JSON file
-3. Use for troubleshooting or reporting
-
-**What to Monitor:**
-- ERROR logs for system issues
-- Login activities in AuthService logs
-- Request processing in RequestService logs
-
----
-
-## 2οΈβ£ For Department Officers
-
-### A. Logging In
-
-1. Go to the platform login page
-2. Enter your department email (e.g., fire@goa.gov.in)
-3. Enter your password
-4. Click **"Sign In"**
-
-### B. Your Dashboard
-
-After login, you'll see:
-- **Pending Approvals**: Applications waiting for your review
-- **Approved Requests**: Applications you've approved
-- **Rejected Requests**: Applications you've rejected
-- **Total Reviews**: Number of applications you've reviewed
-
-### C. Reviewing License Applications
-
-#### **Step 1: Find Pending Applications**
-1. On your dashboard, go to **"Pending Approvals"** section
-2. You'll see a list of applications assigned to your department
-3. Each application shows:
- - Request Number
- - License Type (e.g., Resort License)
- - Applicant Name
- - Submission Date
- - Current Status
-
-#### **Step 2: Open an Application**
-1. Click on any application to view details
-2. You'll see multiple tabs:
- - **Details**: Application information
- - **Documents**: Uploaded documents
- - **Approvals**: Other departments' reviews
-
-#### **Step 3: Review Documents**
-
-**In the Documents Tab:**
-1. You'll see all uploaded documents in a grid layout
-2. Each document card shows:
- - Document thumbnail or icon
- - Document name
- - File size
- - Upload date
- - File hash (blockchain proof)
- - IPFS hash (if applicable)
- - Current version number
-
-**To View a Document:**
-- Click the **"Preview"** button to view in browser
-- Or click the **"Download"** button to download
-
-**To Check Version History:**
-1. Look for **"History"** button on document card
-2. Or expand the **"Version History"** panel
-3. You'll see:
- - All previous versions
- - Who uploaded each version
- - When it was uploaded
- - File hash for each version
- - Changes description (if provided)
-
-**To View Document Hash:**
-- File hash is displayed below document name
-- Click the **"Copy"** icon to copy hash to clipboard
-- Use this to verify document authenticity
-
-#### **Step 4: Make Your Decision**
-
-You have three options:
-
-**Option A: Approve the Application**
-
-1. Click **"Approve"** button (green)
-2. A dialog will open
-3. Enter your remarks/comments:
- ```
- Example: "Fire safety requirements met. All fire exits properly marked.
- Fire extinguishers installed as per standards."
- ```
-4. Click **"Approve"** to confirm
-5. Success message will appear
-6. Blockchain transaction will be created
-7. Applicant will be notified
-
-**Option B: Reject the Application**
-
-1. Click **"Reject"** button (red)
-2. A dialog will open
-3. Select rejection reason from dropdown:
- - Incomplete Documents
- - Non-Compliance
- - Invalid Information
- - Safety Concerns
- - Other
-4. Enter detailed remarks explaining why:
- ```
- Example: "Fire safety layout does not meet current standards.
- Please provide updated fire escape plan showing secondary exits."
- ```
-5. Click **"Reject"** to confirm
-6. Applicant will receive your feedback
-
-**Option C: Request Changes/Additional Documents**
-
-1. Click **"Request Changes"** button (orange)
-2. A dialog will open
-3. Select required documents from the list:
- - Environmental Clearance
- - Building Plan
- - Ownership Proof
- - Safety Certificate
- - Other documents
-4. Enter remarks explaining what changes are needed:
- ```
- Example: "Please provide updated environmental clearance certificate
- dated within the last 6 months. Current certificate has expired."
- ```
-5. Click **"Request Changes"**
-6. Application status will change to "Pending Resubmission"
-7. Applicant will be notified to provide requested documents
-
-#### **Step 5: After Your Review**
-
-**What Happens Next:**
-- Your review is recorded on the blockchain
-- A blockchain transaction is created
-- Applicant receives notification
-- Your review appears in the application's approval history
-- If you approved: Other departments can now review
-- If you requested changes: Applicant must resubmit before further reviews
-- If you rejected: Application workflow may end or be resubmitted
-
-**Track Your Reviews:**
-1. Go to your dashboard
-2. Check **"Approved"**, **"Rejected"**, or **"Changes Requested"** sections
-3. Click on any application to view status
-
----
-
-### D. Reviewing Updated Documents (After Change Request)
-
-**When an applicant uploads new documents:**
-
-1. The application will reappear in your **"Pending Approvals"**
-2. Open the application
-3. Go to **"Documents"** tab
-4. You'll see:
- - **New documents** marked with "New" badge
- - **Updated documents** showing **"Version 2"** or higher
-5. Click **"Version History"** to see:
- - Original document (Version 1)
- - Updated document (Version 2)
- - Change description
- - Both file hashes
-6. Review the new/updated documents
-7. Make your decision again (Approve/Reject/Request More Changes)
-
-**Important Note:**
-- If documents were changed after you approved, your previous approval may be invalidated
-- You'll need to review and approve again
-- This ensures all approvals are valid for the latest document versions
-
----
-
-### E. Viewing Approval History
-
-**To see applications you've reviewed:**
-
-1. On your dashboard, go to:
- - **"Approved Requests"** tab
- - **"Rejected Requests"** tab
- - Or **"All My Reviews"**
-
-2. Each entry shows:
- - Request number
- - Applicant name
- - License type
- - Your decision (Approved/Rejected/Changes Requested)
- - Review date
- - Your remarks
-
-3. Click any entry to view full application details
-
----
-
-## 3οΈβ£ For Citizens/Applicants
-
-### A. Creating Your Account
-
-**If you don't have an account yet:**
-
-1. Go to the platform homepage
-2. Click **"Register"** or **"Sign Up"**
-3. Fill in your details:
- ```
- Full Name: Your full name as per ID
- Email: your.email@example.com
- Phone: +91-XXXXXXXXXX
- Password: Create a strong password (min 8 characters)
- Confirm Password: Re-enter password
- ```
-4. Check the box: **"I accept the Terms and Conditions"**
-5. Click **"Register"**
-6. You'll receive a confirmation email
-7. Click the link in the email to verify your account
-8. **Your blockchain wallet is created automatically!**
-
-### B. Logging In
-
-1. Go to login page
-2. Enter your email and password
-3. Click **"Sign In"**
-4. You'll see your dashboard
-
-### C. Your Dashboard
-
-After login, you'll see:
-- **My Requests**: Your license applications
-- **Wallet Address**: Your blockchain identifier
-- **Quick Actions**: Create new request, view documents
-- **Application Status Summary**:
- - Draft (not submitted yet)
- - Submitted (under review)
- - Approved (license granted)
- - Rejected (needs attention)
-
----
-
-### D. Creating a New License Application
-
-#### **Step 1: Start New Application**
-
-1. On your dashboard, click **"New Request"** or **"Create Application"**
-2. You'll see a form
-
-#### **Step 2: Select License Type**
-
-Choose the type of license you need:
-- **Resort License**: For hotels and resorts
-- **Restaurant License**: For food establishments
-- **Event Permit**: For organizing events
-- **Trade License**: For business operations
-- **Other**: (Select from dropdown)
-
-#### **Step 3: Fill in Application Details**
-
-Fill in all required fields marked with ***** :
-
-**For Resort License Example:**
-```
-Resort Name: Goa Beach Paradise Resort
-Business Name: Beach Paradise Pvt Ltd
-Location/Address: 123 Calangute Beach Road, Goa
-PIN Code: 403516
-Property Type: Beachfront Resort
-Number of Rooms: 50
-Guest Capacity: 100
-Contact Person: Your Name
-Contact Phone: +91-XXXXXXXXXX
-Contact Email: your.email@example.com
-```
-
-**Additional Information:**
-- Business Registration Number
-- PAN Number
-- GST Number (if applicable)
-- Property Ownership Details
-
-#### **Step 4: Upload Required Documents**
-
-**Important: Have these documents ready (PDF or Image format):**
-
-1. **Business Registration Certificate**
- - Max size: 10MB
- - Format: PDF preferred
-
-2. **Property Ownership Proof**
- - Sale Deed / Lease Agreement
- - Format: PDF
-
-3. **Building Plan**
- - Approved by local authorities
- - Format: PDF or Image
-
-4. **Fire Safety Certificate**
- - From Fire Department
- - Format: PDF
-
-5. **Environmental Clearance** (if applicable)
- - Format: PDF
-
-6. **Other Documents** as required
-
-**To Upload:**
-1. Click **"Choose File"** or drag and drop
-2. Select file from your computer
-3. Wait for upload to complete
-4. You'll see a green checkmark when successful
-5. File hash will be generated automatically
-6. Repeat for all required documents
-
-**Document Upload Tips:**
-- Ensure documents are clear and readable
-- Use PDF format for multi-page documents
-- Keep file sizes under 10MB
-- Scan documents at minimum 300 DPI
-- All documents must be valid (not expired)
-
-#### **Step 5: Review Your Application**
-
-1. Click **"Preview"** to review all information
-2. Check all details carefully
-3. Verify all documents are uploaded
-4. Make changes if needed by clicking **"Edit"**
-
-#### **Step 6: Save as Draft (Optional)**
-
-If you're not ready to submit:
-1. Click **"Save as Draft"**
-2. Your application is saved
-3. You can come back later to complete it
-4. Go to **"My Requests"** β **"Drafts"** to continue
-
-#### **Step 7: Submit Your Application**
-
-When everything is ready:
-1. Click **"Submit Application"**
-2. A confirmation dialog will appear:
- ```
- "Are you sure you want to submit this application?
- Once submitted, you cannot make changes until review is complete."
- ```
-3. Click **"Yes, Submit"**
-
-**What Happens After Submission:**
-- Your application status changes to **"SUBMITTED"**
-- A blockchain transaction is created
-- An NFT (license token) is minted for your application
-- You'll receive a confirmation email
-- Assigned departments are notified
-- You'll receive a **Transaction Hash** and **Token ID**
-- Review process begins
-
----
-
-### E. Tracking Your Application Status
-
-#### **Step 1: View Your Applications**
-
-1. On your dashboard, go to **"My Requests"**
-2. You'll see all your applications
-3. Color-coded status indicators:
- - **Grey**: Draft (not submitted)
- - **Blue**: Submitted (under review)
- - **Orange**: Pending Resubmission (changes requested)
- - **Green**: Approved
- - **Red**: Rejected
-
-#### **Step 2: Open Application Details**
-
-1. Click on any application
-2. You'll see multiple tabs:
- - **Details**: Application information
- - **Documents**: Your uploaded documents
- - **Approvals**: Department review status
-
-#### **Step 3: Understanding Approval Status**
-
-**In the Approvals Tab:**
-
-You'll see a list of departments reviewing your application:
-- **Fire Department**: Safety review
-- **Tourism Department**: Tourism compliance
-- **Municipality**: Local regulations
-- **Police Department**: Security clearance (if applicable)
-
-**Each Department Shows:**
-- Department Name
-- Status:
- - β³ **Pending**: Not reviewed yet
- - β
**Approved**: Department approved
- - β **Rejected**: Department rejected
- - π **Changes Requested**: More documents needed
- - β οΈ **Invalidated**: Was approved, but documents changed
-- Review Date
-- Officer Name (who reviewed)
-- Remarks/Comments
-
-**Approval Progress:**
-- Track how many departments have approved
-- See which departments are pending
-- Read comments from each department
-
----
-
-### F. Responding to Change Requests
-
-**When a department requests changes:**
-
-#### **Step 1: You'll Be Notified**
-- Email notification: "Changes requested for your application"
-- Application status changes to **"Pending Resubmission"**
-- SMS notification (if enabled)
-
-#### **Step 2: View What's Needed**
-
-1. Open your application
-2. Go to **"Approvals"** tab
-3. Find the department that requested changes
-4. Click on their review to see:
- - **Requested Documents**: What they need
- - **Remarks**: Detailed explanation
- - **Required By Date**: Deadline (if any)
-
-**Example:**
-```
-Tourism Department requested changes:
-- Environmental Clearance Certificate (new)
-- Updated Building Plan (version 2)
-
-Remarks: "Please provide recent environmental clearance
-certificate dated within last 6 months. Current certificate
-has expired."
-```
-
-#### **Step 3: Prepare Documents**
-
-1. Gather the requested documents
-2. Ensure they meet requirements mentioned in remarks
-3. Scan or prepare digital copies
-4. Check file sizes (max 10MB each)
-
-#### **Step 4: Upload New Documents**
-
-1. In your application, click **"Upload Additional Documents"**
-2. Select document type from dropdown
-3. Choose file from your computer
-4. Add a description of changes:
- ```
- Example: "Environmental Clearance Certificate updated -
- issued on 15-Dec-2024 by Goa Pollution Control Board"
- ```
-5. Click **"Upload"**
-6. New document is added as **Version 2** (or new document)
-
-**Version History:**
-- Original document is kept as Version 1
-- New document becomes Version 2
-- Both versions are tracked
-- Both file hashes recorded
-- Change description saved
-
-#### **Step 5: Resubmit Application**
-
-1. After uploading all requested documents
-2. Click **"Resubmit Application"**
-3. Confirm resubmission
-4. Application goes back to the department for re-review
-
-**Important Notes:**
-- When you upload new document versions, previous approvals from other departments may be invalidated
-- Those departments will need to review and approve again
-- This ensures all departments approve based on latest documents
-- You'll see "Invalidated" status for those approvals
-- Don't worry - they just need to review the updated documents
-
----
-
-### G. Viewing Your Documents
-
-**In the Documents Tab:**
-
-#### **Document Grid View**
-- All your documents displayed as cards
-- Each card shows:
- - Document thumbnail or file icon
- - Document name
- - File size (e.g., 2.5 MB)
- - Upload date
- - Current version (e.g., v2)
- - File hash (for verification)
- - IPFS hash (if stored on IPFS)
-
-#### **Document Actions**
-
-**Preview Document:**
-1. Click **"Preview"** button
-2. Document opens in new tab
-3. View without downloading
-
-**Download Document:**
-1. Click **"Download"** button
-2. File downloads to your computer
-3. Saved with original filename
-
-**View Version History:**
-1. Click **"History"** button
-2. Or expand **"Version History"** panel
-3. See table with all versions:
- - Version number (1, 2, 3...)
- - Upload date and time
- - Uploaded by (your name)
- - File hash
- - Changes description
- - Download button for each version
-
-**Copy File Hash:**
-1. Click **"Copy"** icon next to file hash
-2. Hash copied to clipboard
-3. Use for verification if needed
-
-#### **Department Reviews on Documents**
-
-Below each document, you'll see:
-- **Department Reviews**: Which departments reviewed this document
-- **Status Indicators**:
- - β
Green: Approved
- - β Red: Rejected
- - β³ Grey: Pending
-- **Reviewer Name**: Officer who reviewed
-- **Review Date**: When they reviewed
-- **Comments**: Their remarks (if any)
-
----
-
-### H. After Your Application is Approved
-
-#### **What You'll Receive:**
-
-1. **Email Notification**: "Your application has been approved!"
-2. **SMS Notification**: (if enabled)
-3. **Dashboard Update**: Application status changes to **"APPROVED"** (green)
-
-#### **Viewing Your Approved License:**
-
-1. Go to **"My Requests"** β **"Approved"**
-2. Click on the approved application
-3. You'll see:
- - β
**Approval Status**: All departments approved
- - **Approval Date**: When final approval was given
- - **License Number**: Unique license identifier
- - **NFT Token ID**: Your blockchain license token
- - **Transaction Hash**: Blockchain proof
- - **Valid From/To**: License validity period
-
-#### **Download Your License Certificate:**
-
-1. In the approved application, click **"Download Certificate"**
-2. PDF certificate will be generated with:
- - License number
- - Your details
- - Business details
- - Approval dates
- - All department approvals
- - QR code (for verification)
- - Blockchain proof (transaction hash and token ID)
-3. Save and print this certificate
-4. Display at your business premises
-
-#### **Verify Your License on Blockchain:**
-
-1. Copy your **Token ID** or **Transaction Hash**
-2. Click **"View on Blockchain Explorer"** (if available)
-3. Or go to blockchain explorer manually:
- - Etherscan (for Ethereum)
- - Polygonscan (for Polygon)
- - Or appropriate explorer for your network
-4. Paste your Token ID or Transaction Hash
-5. You'll see immutable blockchain record of your license
-
----
-
-### I. If Your Application is Rejected
-
-#### **Understanding Rejection:**
-
-**Reasons for Rejection:**
-- Incomplete documents
-- Invalid information
-- Non-compliance with regulations
-- Safety concerns
-- Missing required licenses/clearances
-
-#### **What to Do:**
-
-1. **Review Rejection Remarks:**
- - Open your application
- - Go to **"Approvals"** tab
- - Find the rejecting department
- - Read their detailed remarks carefully
-
-2. **Understand the Issues:**
- - What documents are missing?
- - What information is incorrect?
- - What regulations weren't met?
- - What specific concerns were raised?
-
-3. **Fix the Issues:**
- - Gather correct documents
- - Update incorrect information
- - Address all concerns mentioned
- - Get required clearances
-
-4. **Create New Application:**
- - You may need to start a new application
- - Or the system may allow you to resubmit the same application
- - Upload correct documents
- - Provide accurate information
- - Address all previous issues
-
-5. **Get Help:**
- - Contact the rejecting department for clarification
- - Phone: See department contact in rejection notice
- - Email: See department contact email
- - Visit department office if needed
- - Consult with professionals (architects, consultants) if needed
-
----
-
-## π± Mobile Access
-
-### Using Goa-GEL on Your Phone or Tablet
-
-The platform works on mobile devices!
-
-**Supported Browsers:**
-- Chrome (recommended)
-- Safari
-- Firefox
-- Edge
-
-**Mobile-Friendly Features:**
-- Responsive design adapts to screen size
-- Touch-friendly buttons and menus
-- Easy document upload from phone camera
-- Notifications work on mobile
-- Full functionality on smaller screens
-
-**Tips for Mobile Use:**
-1. Use landscape orientation for better view of tables and dashboards
-2. Zoom in on documents to view details
-3. Use phone camera to scan and upload documents directly
-4. Enable notifications for instant updates
-
----
-
-## π Notifications
-
-### Types of Notifications You'll Receive
-
-#### **Email Notifications:**
-- Account creation confirmation
-- Application submission confirmation
-- Approval/rejection notifications
-- Change request notifications
-- Document upload confirmations
-- License approval confirmation
-
-#### **In-App Notifications:**
-- Real-time status updates
-- New approval/rejection
-- Messages from departments
-- System announcements
-
-#### **SMS Notifications** (if enabled):
-- Application submitted
-- Application approved/rejected
-- Urgent action required
-
----
-
-## π‘ Tips & Best Practices
-
-### For All Users:
-
-1. **Password Security:**
- - Use a strong password (min 8 characters)
- - Include uppercase, lowercase, numbers, and symbols
- - Don't share your password
- - Change password regularly
-
-2. **Email Verification:**
- - Keep your email address up to date
- - Check spam folder for notifications
- - Add noreply@goa.gov.in to contacts
-
-3. **Document Preparation:**
- - Keep all documents ready before starting application
- - Ensure documents are clear and readable
- - Use PDF format for multi-page documents
- - Check file sizes (under 10MB)
-
-4. **Regular Check-ins:**
- - Check your dashboard regularly
- - Respond promptly to change requests
- - Track application progress
- - Don't wait until last minute for submissions
-
-### For Citizens:
-
-1. **Complete Applications:**
- - Fill all required fields
- - Upload all required documents
- - Double-check information before submitting
- - Save draft if you need more time
-
-2. **Document Quality:**
- - Scan documents at good resolution (300 DPI minimum)
- - Ensure all text is readable
- - Include all pages
- - Documents should be valid (not expired)
-
-3. **Respond Quickly:**
- - When departments request changes, respond within deadline
- - Upload requested documents promptly
- - Check email daily for updates
- - Don't let applications expire
-
-4. **Keep Records:**
- - Save confirmation emails
- - Download approved certificates
- - Keep transaction hashes
- - Store file hashes for document verification
-
-### For Department Officers:
-
-1. **Timely Reviews:**
- - Review applications within SLA (Service Level Agreement)
- - Don't let applications pending too long
- - Prioritize urgent applications
- - Check dashboard daily
-
-2. **Clear Remarks:**
- - Write detailed, specific remarks
- - Explain exactly what's needed
- - Be professional and helpful
- - Provide contact info if applicant needs clarification
-
-3. **Document Verification:**
- - Check all documents thoroughly
- - Verify document authenticity
- - Check expiry dates
- - Compare file hashes if needed
- - Review all versions if documents were updated
-
-4. **Consistent Standards:**
- - Apply same standards to all applications
- - Follow department guidelines
- - Be fair and transparent
- - Document your reasoning
-
----
-
-## β Frequently Asked Questions (FAQ)
-
-### General Questions
-
-**Q: What is Goa-GEL?**
-A: Goa-GEL is a blockchain-based government licensing verification platform for the State of Goa. It helps citizens apply for licenses and government departments to review and approve them, with all records stored securely on blockchain.
-
-**Q: Why blockchain?**
-A: Blockchain provides:
-- Tamper-proof records
-- Transparency
-- Permanent storage
-- Easy verification
-- No single point of failure
-
-**Q: What is a wallet address?**
-A: A wallet address (like 0x1234...) is your unique identifier on the blockchain. It's created automatically when you register and is used to track your transactions and licenses.
-
-**Q: What is a transaction hash?**
-A: A transaction hash is a unique identifier for each blockchain transaction. It's like a receipt that proves your transaction happened and can be used to verify it on the blockchain.
-
-**Q: What is an NFT in this context?**
-A: NFT (Non-Fungible Token) represents your license on the blockchain. Each license is a unique digital token that proves ownership and authenticity.
-
----
-
-### Account & Login Questions
-
-**Q: I forgot my password. What should I do?**
-A:
-1. Click "Forgot Password?" on login page
-2. Enter your registered email
-3. Check email for reset link
-4. Click link and create new password
-5. Log in with new password
-
-**Q: I'm not receiving emails from the platform**
-A:
-1. Check your spam/junk folder
-2. Add noreply@goa.gov.in to contacts
-3. Verify your email address is correct
-4. Contact support if still not receiving
-
-**Q: Can I change my email address?**
-A: Yes, go to Profile Settings β Account Details β Change Email. You'll need to verify the new email.
-
-**Q: Can I have multiple accounts?**
-A: You should only have one account per email address. Multiple accounts for the same person are not recommended.
-
----
-
-### Application Questions
-
-**Q: How long does application review take?**
-A: Review times vary by department and license type:
-- Simple licenses: 7-15 days
-- Complex licenses: 30-45 days
-- Check specific license type for SLA
-
-**Q: Can I edit my application after submitting?**
-A: No, you cannot edit after submission. However:
-- If department requests changes, you can upload new documents
-- You may need to create a new application if major changes needed
-- Save as draft first if you're not sure about any information
-
-**Q: What documents do I need?**
-A: Required documents vary by license type. Common documents:
-- Business registration certificate
-- Property ownership proof
-- Building plan
-- Fire safety certificate
-- Environmental clearance
-- Identity proof
-- PAN card
-- GST certificate (if applicable)
-
-**Q: My document upload failed. What should I do?**
-A:
-1. Check file size (must be under 10MB)
-2. Check file format (PDF, JPG, PNG only)
-3. Check internet connection
-4. Try again with smaller file
-5. Try different browser
-6. Contact support if problem persists
-
-**Q: Can I upload documents from my phone?**
-A: Yes! You can:
-- Take photos directly from phone camera
-- Upload from phone gallery
-- Use document scanner apps for better quality
-- Make sure files are clear and readable
-
----
-
-### Review & Approval Questions
-
-**Q: How do I know which department is reviewing my application?**
-A: Open your application β Approvals tab. You'll see all departments and their status (Pending/Approved/Rejected/Changes Requested).
-
-**Q: Why was my previous approval invalidated?**
-A: When you upload new document versions, previous approvals may be invalidated because:
-- Departments approved based on old documents
-- New documents need to be reviewed
-- Ensures all approvals are for current documents
-- Those departments will review again quickly
-
-**Q: I uploaded wrong document. Can I delete it?**
-A:
-- You cannot delete documents after upload
-- Upload correct document as new version
-- Add description explaining the correction
-- Previous versions remain in history for audit
-
-**Q: Department requested changes but didn't specify what's wrong**
-A:
-- Contact the department directly (phone/email in rejection notice)
-- Visit department office for clarification
-- Check remarks carefully - details are usually there
-- Escalate to helpdesk if unclear
-
----
-
-### Technical Questions
-
-**Q: What browsers are supported?**
-A:
-- Chrome (recommended)
-- Firefox
-- Safari
-- Edge
-- Update to latest version for best experience
-
-**Q: Does it work on mobile?**
-A: Yes! The platform is fully responsive and works on:
-- Phones (iOS and Android)
-- Tablets
-- Desktop computers
-
-**Q: What is IPFS?**
-A: IPFS (InterPlanetary File System) is a distributed file storage system. Some documents may be stored on IPFS for additional redundancy and accessibility.
-
-**Q: How is my data secured?**
-A:
-- Passwords are encrypted (bcrypt hashing)
-- Wallet private keys are encrypted (AES-256-CBC)
-- All connections use HTTPS (SSL/TLS)
-- Blockchain provides immutable records
-- Regular backups
-
-**Q: What if the platform is down?**
-A:
-- Try again after some time
-- Check status page (if available)
-- Contact support
-- Your data is safe - nothing is lost
-- Work continues after system is back
-
----
-
-## π Getting Help
-
-### Support Contact Information
-
-**Technical Support:**
-- Email: support@goa.gov.in
-- Phone: +91-832-XXXXXXX
-- Hours: Monday-Friday, 9:00 AM - 6:00 PM IST
-
-**Department-Specific Help:**
-- Fire Department: fire@goa.gov.in | +91-832-XXXXXXX
-- Tourism: tourism@goa.gov.in | +91-832-XXXXXXX
-- Municipality: municipality@goa.gov.in | +91-832-XXXXXXX
-
-**Admin Support:**
-- For department onboarding: admin@goa.gov.in
-- For user account issues: support@goa.gov.in
-
-### Before Contacting Support
-
-Have this information ready:
-1. Your user ID or email
-2. Application/Request number (if applicable)
-3. Description of the issue
-4. Screenshots (if helpful)
-5. Error messages (if any)
-6. Steps you've already tried
-
----
-
-## π Video Tutorials (Coming Soon)
-
-Check our YouTube channel for video guides:
-- How to register and create account
-- How to apply for licenses
-- How to upload documents
-- How to respond to change requests
-- For department officers: How to review applications
-- For administrators: How to use admin portal
-
-**Subscribe**: youtube.com/goagovtech
-
----
-
-## π Quick Reference Card
-
-### Citizen Quick Actions
-| Task | Steps |
-|------|-------|
-| **Create Account** | Register β Fill details β Verify email |
-| **New Application** | Dashboard β New Request β Fill form β Upload docs β Submit |
-| **Check Status** | Dashboard β My Requests β Click application |
-| **Upload New Document** | Application β Documents β Upload Additional β Choose file |
-| **Download Certificate** | Approved application β Download Certificate |
-
-### Department Officer Quick Actions
-| Task | Steps |
-|------|-------|
-| **Review Application** | Dashboard β Pending Approvals β Click application |
-| **Approve** | Application β Approve β Enter remarks β Submit |
-| **Request Changes** | Application β Request Changes β Select docs β Enter remarks |
-| **Check History** | Dashboard β Approved/Rejected Requests |
-
-### Admin Quick Actions
-| Task | Steps |
-|------|-------|
-| **Onboard Department** | Admin Portal β Departments β Onboard New β Fill form |
-| **View Users** | Admin Portal β Users Tab |
-| **Check Transactions** | Admin Portal β Transactions Tab |
-| **View Logs** | Admin Portal β Logs Tab β Filter as needed |
-
----
-
-## π Glossary
-
-**Blockchain**: A distributed, immutable ledger that records transactions
-
-**Wallet Address**: Your unique identifier on the blockchain (e.g., 0x1234...)
-
-**Transaction Hash**: Unique identifier for a blockchain transaction
-
-**NFT (Non-Fungible Token)**: Unique digital token representing your license
-
-**Gas**: Fee paid for blockchain transactions
-
-**IPFS**: Distributed file storage system
-
-**File Hash**: Unique fingerprint of a document for verification
-
-**SLA (Service Level Agreement)**: Committed time for processing
-
-**Token ID**: Unique identifier for your license NFT
-
-**Smart Contract**: Self-executing code on blockchain
-
-**Approval Chain**: Sequence of department approvals required
-
-**Version History**: Record of all document versions
-
----
-
-## π Privacy & Security
-
-### Your Data Privacy
-
-**What we collect:**
-- Name, email, phone (for account)
-- Application details
-- Uploaded documents
-- Transaction records
-- Wallet address
-
-**How we use it:**
-- Process your applications
-- Communicate updates
-- Verify licenses
-- Improve services
-- Legal compliance
-
-**Security measures:**
-- Encrypted passwords
-- Encrypted wallet keys
-- Secure connections (HTTPS)
-- Blockchain immutability
-- Regular security audits
-- Access controls
-
-**Your rights:**
-- Access your data
-- Correct inaccurate data
-- Request data deletion (subject to legal requirements)
-- Opt-out of marketing communications
-
----
-
-## β
Checklist for First-Time Users
-
-### For Citizens:
-- [ ] Create account and verify email
-- [ ] Log in and explore dashboard
-- [ ] View wallet address
-- [ ] Understand license types
-- [ ] Prepare required documents
-- [ ] Create first application (can save as draft)
-- [ ] Upload all documents
-- [ ] Submit application
-- [ ] Check status regularly
-
-### For Department Officers:
-- [ ] Log in with department credentials
-- [ ] Explore dashboard
-- [ ] View pending approvals
-- [ ] Open sample application
-- [ ] Review documents section
-- [ ] Understand approval options
-- [ ] Check approval history
-
-### For Administrators:
-- [ ] Log in as admin
-- [ ] Access admin portal
-- [ ] Explore all 6 tabs
-- [ ] View platform statistics
-- [ ] Check all departments
-- [ ] Review user list
-- [ ] Practice onboarding a test department
-- [ ] View transaction and event logs
-
----
-
-**End of User Guide**
-
-For the latest updates, visit: **[Platform Website]**
-
-For support: **support@goa.gov.in**
-
----
-
-**Version**: 1.0
-**Last Updated**: February 2026
-**Platform**: Goa-GEL (Government e-Licensing)
diff --git a/Documentation/index.md b/Documentation/index.md
new file mode 100644
index 0000000..bfb35a4
--- /dev/null
+++ b/Documentation/index.md
@@ -0,0 +1,125 @@
+---
+layout: home
+
+hero:
+ name: "TLAS"
+ text: "Tokenized License Approval System"
+ tagline: Enterprise blockchain infrastructure for government license lifecycle management
+ actions:
+ - theme: brand
+ text: Platform Overview
+ link: /overview/
+ - theme: alt
+ text: API Documentation
+ link: /developers/
+
+features:
+ - icon: π
+ title: Cryptographic Verification
+ details: Every license is issued as a blockchain-native NFT token with cryptographic proof of authenticity, eliminating document forgery.
+ - icon: π
+ title: Configurable Workflows
+ details: Multi-stage approval workflows with parallel and sequential processing, conditional routing, and SLA enforcement.
+ - icon: π
+ title: Complete Audit Trail
+ details: Immutable transaction logs for every action. Full chain-of-custody tracking from application to issuance.
+ - icon: π
+ title: Integration Ready
+ details: REST APIs, webhook notifications, and pre-built connectors for DigiLocker, payment gateways, and legacy systems.
+ - icon: π
+ title: Real-time Analytics
+ details: Operational dashboards, SLA monitoring, bottleneck identification, and predictive processing estimates.
+ - icon: π‘οΈ
+ title: Enterprise Security
+ details: OWASP-compliant architecture, role-based access control, data encryption at rest and in transit.
+---
+
+
+
+---
+
+## Documentation by Role
+
+| Audience | Documentation | Description |
+|----------|---------------|-------------|
+| **Executives & Decision Makers** | [Business Documentation](/business/) | ROI analysis, governance frameworks, implementation planning |
+| **IT Operations** | [Operations Guide](/operations/) | Deployment, infrastructure, monitoring, disaster recovery |
+| **Department Staff** | [Department Guide](/departments/) | Application processing, workflow management, license issuance |
+| **Integration Partners** | [Developer Documentation](/developers/) | API specifications, authentication, webhooks, SDKs |
+| **Compliance Officers** | [Compliance Framework](/compliance/) | Regulatory alignment, audit procedures, data protection |
+
+---
+
+## Standards & Compliance
+
+TLAS is designed and implemented in accordance with:
+
+| Standard | Scope |
+|----------|-------|
+| **IT Act 2000 (India)** | Legal validity of electronic records and digital signatures |
+| **DPDP Act 2023** | Personal data protection and privacy requirements |
+| **GIGW 3.0** | Government of India web guidelines for accessibility |
+| **OWASP Top 10** | Web application security controls |
+| **ISO 27001** | Information security management framework |
+
+---
+
+## Architecture Summary
+
+```
+ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+β Load Balancer β
+ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
+β Web Application Layer β
+β (Angular 19 / Material) β
+ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
+β API Gateway β
+β (NestJS / TypeScript) β
+ββββββββββββββββββββ¬ββββββββββββββββββ¬ββββββββββββββββββββββββββββ€
+β PostgreSQL β Hyperledger β External Services β
+β Database β Besu β (DigiLocker, Payments) β
+ββββββββββββββββββββ΄ββββββββββββββββββ΄ββββββββββββββββββββββββββββ
+```
+
+For detailed architecture documentation, see [Solution Architecture](/overview/solution).
+
+---
+
+## Version Information
+
+| Component | Version | Release Date |
+|-----------|---------|--------------|
+| TLAS Platform | 1.0.0 | February 2026 |
+| API Version | v1 | February 2026 |
+| Documentation | 1.0.0 | February 2026 |
+
+---
+
+
+
+## Support Channels
+
+**Technical Support**: support@goagel.gov.in
+**Operations Helpdesk**: +91-832-XXXXXXX
+**Business Inquiries**: business@goagel.gov.in
+
+Operating Hours: Monday - Friday, 09:00 - 18:00 IST
+
+
+
+
diff --git a/Documentation/nginx.conf b/Documentation/nginx.conf
index f26de64..93c0cef 100644
--- a/Documentation/nginx.conf
+++ b/Documentation/nginx.conf
@@ -1,68 +1,37 @@
-user nginx;
-worker_processes auto;
-error_log /var/log/nginx/error.log warn;
-pid /var/run/nginx.pid;
+server {
+ listen 80;
+ server_name localhost;
+ root /usr/share/nginx/html;
+ index index.html;
-events {
- worker_connections 1024;
-}
-
-http {
- include /etc/nginx/mime.types;
- default_type application/octet-stream;
-
- log_format main '$remote_addr - $remote_user [$time_local] "$request" '
- '$status $body_bytes_sent "$http_referer" '
- '"$http_user_agent" "$http_x_forwarded_for"';
-
- access_log /var/log/nginx/access.log main;
-
- sendfile on;
- tcp_nopush on;
- tcp_nodelay on;
- keepalive_timeout 65;
- types_hash_max_size 2048;
+ # Security headers
+ add_header X-Frame-Options "SAMEORIGIN" always;
+ add_header X-Content-Type-Options "nosniff" always;
+ add_header X-XSS-Protection "1; mode=block" always;
# Gzip compression
gzip on;
gzip_vary on;
- gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml text/javascript
- application/json application/javascript application/xml+rss
- application/rss+xml font/truetype font/opentype
- application/vnd.ms-fontobject image/svg+xml;
+ application/json application/javascript application/xml;
- server {
- listen 80;
- server_name localhost;
- root /usr/share/nginx/html;
- index index.html;
-
- # Security headers
- add_header X-Frame-Options "SAMEORIGIN" always;
- add_header X-Content-Type-Options "nosniff" always;
- add_header X-XSS-Protection "1; mode=block" always;
-
- # Main location
- location / {
- try_files $uri $uri/ /index.html;
- }
-
- # Markdown files
- location /docs/ {
- default_type text/markdown;
- add_header Content-Type "text/markdown; charset=utf-8";
- }
-
- # Static assets caching
- location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
- expires 1y;
- add_header Cache-Control "public, immutable";
- }
-
- # Error pages
- error_page 404 /404.html;
- error_page 500 502 503 504 /50x.html;
+ # VitePress SPA routing
+ location / {
+ try_files $uri $uri.html $uri/ /index.html;
}
+
+ # Static assets caching
+ location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
+ expires 1y;
+ add_header Cache-Control "public, immutable";
+ }
+
+ # Health check endpoint
+ location /health {
+ return 200 'OK';
+ add_header Content-Type text/plain;
+ }
+
+ error_page 404 /404.html;
}
diff --git a/Documentation/operations/backup.md b/Documentation/operations/backup.md
new file mode 100644
index 0000000..5e37d55
--- /dev/null
+++ b/Documentation/operations/backup.md
@@ -0,0 +1,84 @@
+# Backup & Recovery
+
+## Backup Strategy
+
+| Data Type | Frequency | Retention |
+|-----------|-----------|-----------|
+| Database (full) | Daily | 30 days |
+| Database (incremental) | Hourly | 7 days |
+| Uploaded documents | Daily | 1 year |
+| Configuration | On change | 90 days |
+| Blockchain state | Daily | 90 days |
+
+## Database Backup
+
+### Automated Backups
+
+```bash
+# Daily full backup (runs at 02:00 UTC)
+pg_dump -Fc tlas_prod > /backups/tlas_$(date +%Y%m%d).dump
+
+# Hourly WAL archiving
+archive_command = 'cp %p /backups/wal/%f'
+```
+
+### Manual Backup
+
+```bash
+# Create backup
+docker exec postgres pg_dump -U tlas -Fc tlas_prod > backup.dump
+
+# Verify backup
+pg_restore --list backup.dump
+```
+
+## Recovery Procedures
+
+### Database Recovery
+
+```bash
+# Stop application
+docker-compose stop api
+
+# Restore database
+pg_restore -d tlas_prod -c backup.dump
+
+# Verify data
+psql -d tlas_prod -c "SELECT COUNT(*) FROM applications;"
+
+# Restart application
+docker-compose start api
+```
+
+### Point-in-Time Recovery
+
+```bash
+# Restore to specific timestamp
+recovery_target_time = '2026-02-09 10:00:00'
+```
+
+## Disaster Recovery
+
+### RTO/RPO Targets
+
+| Metric | Target |
+|--------|--------|
+| Recovery Time Objective (RTO) | 4 hours |
+| Recovery Point Objective (RPO) | 1 hour |
+
+### DR Procedure
+
+1. Identify failure scope
+2. Activate DR environment
+3. Restore from latest backup
+4. Verify data integrity
+5. Update DNS to DR site
+6. Notify stakeholders
+
+## Backup Verification
+
+Monthly backup testing:
+- Restore to test environment
+- Run integrity checks
+- Verify application functionality
+- Document results
diff --git a/Documentation/operations/configuration.md b/Documentation/operations/configuration.md
new file mode 100644
index 0000000..4c70588
--- /dev/null
+++ b/Documentation/operations/configuration.md
@@ -0,0 +1,83 @@
+# Configuration
+
+## Environment Variables
+
+### Application
+
+| Variable | Description | Example |
+|----------|-------------|---------|
+| `NODE_ENV` | Runtime environment | `production` |
+| `PORT` | API server port | `3000` |
+| `LOG_LEVEL` | Logging verbosity | `info` |
+
+### Database
+
+| Variable | Description | Example |
+|----------|-------------|---------|
+| `DB_HOST` | PostgreSQL host | `postgres.internal` |
+| `DB_PORT` | PostgreSQL port | `5432` |
+| `DB_USER` | Database user | `tlas_app` |
+| `DB_PASSWORD` | Database password | `` |
+| `DB_NAME` | Database name | `tlas_prod` |
+
+### Authentication
+
+| Variable | Description | Example |
+|----------|-------------|---------|
+| `JWT_SECRET` | Token signing key | `<64-char-random>` |
+| `JWT_EXPIRY` | Token lifetime | `3600` |
+
+### Blockchain
+
+| Variable | Description | Example |
+|----------|-------------|---------|
+| `BESU_RPC_URL` | Besu JSON-RPC endpoint | `http://besu:8545` |
+| `CONTRACT_ADDRESS` | NFT contract address | `0x123...` |
+| `WALLET_PRIVATE_KEY` | Signing wallet key | `` |
+
+### External Services
+
+| Variable | Description | Example |
+|----------|-------------|---------|
+| `DIGILOCKER_CLIENT_ID` | DigiLocker OAuth client | `` |
+| `DIGILOCKER_SECRET` | DigiLocker OAuth secret | `` |
+| `SMTP_HOST` | Email server | `smtp.gov.in` |
+| `SMS_API_KEY` | SMS gateway key | `` |
+
+## Configuration Files
+
+### `config/production.yaml`
+
+```yaml
+server:
+ port: 3000
+ cors:
+ origins:
+ - https://tlas.gov.in
+ - https://admin.tlas.gov.in
+
+database:
+ pool:
+ min: 5
+ max: 20
+
+blockchain:
+ confirmations: 2
+ gasLimit: 500000
+
+upload:
+ maxSize: 10485760 # 10MB
+ allowedTypes:
+ - application/pdf
+ - image/jpeg
+ - image/png
+```
+
+## Secrets Management
+
+Store sensitive values in:
+- Environment variables (Docker/Kubernetes)
+- HashiCorp Vault
+- AWS Secrets Manager
+
+Never commit secrets to version control.
diff --git a/Documentation/operations/index.md b/Documentation/operations/index.md
new file mode 100644
index 0000000..3ea8ef2
--- /dev/null
+++ b/Documentation/operations/index.md
@@ -0,0 +1,85 @@
+# Operations Guide
+
+## Deployment Architecture
+
+```
+ βββββββββββββββββββββββ
+ β Load Balancer β
+ β (Nginx/HAProxy) β
+ ββββββββββββ¬βββββββββββ
+ β
+ ββββββββββββββββββΌβββββββββββββββββ
+ β β β
+ ββββββββββΌβββββββββ β ββββββββββΌβββββββββ
+ β Frontend β β β Frontend β
+ β Container β β β Container β
+ β (Node 1) β β β (Node 2) β
+ βββββββββββββββββββ β βββββββββββββββββββ
+ β
+ βββββββββββΌββββββββββ
+ β API Gateway β
+ β (NestJS) β
+ βββββββββββ¬ββββββββββ
+ β
+ ββββββββββββββββββββββΌβββββββββββββββββββββ
+ β β β
+ββββββββββΌβββββββββ ββββββββββΌβββββββββ ββββββββββΌβββββββββ
+β PostgreSQL β β Redis β β Besu Node β
+β (Primary) β β (Cache) β β (Blockchain) β
+ββββββββββ¬βββββββββ βββββββββββββββββββ βββββββββββββββββββ
+ β
+ββββββββββΌβββββββββ
+β PostgreSQL β
+β (Replica) β
+βββββββββββββββββββ
+```
+
+## System Requirements
+
+### Minimum Production Configuration
+
+| Component | Specification |
+|-----------|---------------|
+| Application Server | 4 vCPU, 8GB RAM, 100GB SSD |
+| Database Server | 4 vCPU, 16GB RAM, 500GB SSD |
+| Blockchain Node | 4 vCPU, 8GB RAM, 200GB SSD |
+| Load Balancer | 2 vCPU, 4GB RAM |
+
+### Network Requirements
+
+| Port | Service | Access |
+|------|---------|--------|
+| 443 | HTTPS | Public |
+| 80 | HTTP (redirect) | Public |
+| 5432 | PostgreSQL | Internal |
+| 6379 | Redis | Internal |
+| 8545 | Besu RPC | Internal |
+| 30303 | Besu P2P | Internal |
+
+## Quick Start
+
+```bash
+# Clone repository
+git clone https://github.com/goa-gel/tlas.git
+cd tlas
+
+# Configure environment
+cp .env.example .env
+# Edit .env with your settings
+
+# Start all services
+docker-compose up -d
+
+# Verify deployment
+docker-compose ps
+curl https://localhost/api/health
+```
+
+## Documentation Index
+
+- [Infrastructure Requirements](/operations/infrastructure) - Detailed hardware and network specifications
+- [Installation Guide](/operations/installation) - Step-by-step deployment instructions
+- [Configuration](/operations/configuration) - Environment variables and settings
+- [Monitoring](/operations/monitoring) - Health checks, alerts, and dashboards
+- [Backup & Recovery](/operations/backup) - Data protection procedures
+- [Security Hardening](/operations/security) - Production security checklist
diff --git a/Documentation/operations/infrastructure.md b/Documentation/operations/infrastructure.md
new file mode 100644
index 0000000..9f8e31e
--- /dev/null
+++ b/Documentation/operations/infrastructure.md
@@ -0,0 +1,76 @@
+# Infrastructure Requirements
+
+## Production Environment
+
+### Application Tier
+
+| Component | Specification | Quantity |
+|-----------|---------------|----------|
+| Web/API Server | 4 vCPU, 8GB RAM, 100GB SSD | 2 (HA) |
+| Load Balancer | 2 vCPU, 4GB RAM | 1 |
+
+### Database Tier
+
+| Component | Specification | Quantity |
+|-----------|---------------|----------|
+| PostgreSQL Primary | 4 vCPU, 16GB RAM, 500GB SSD | 1 |
+| PostgreSQL Replica | 4 vCPU, 16GB RAM, 500GB SSD | 1 |
+| Redis Cache | 2 vCPU, 4GB RAM | 1 |
+
+### Blockchain Tier
+
+| Component | Specification | Quantity |
+|-----------|---------------|----------|
+| Besu Node | 4 vCPU, 8GB RAM, 200GB SSD | 2 (min) |
+
+## Network Requirements
+
+### External Access
+
+| Service | Port | Protocol |
+|---------|------|----------|
+| HTTPS | 443 | TCP |
+| HTTP (redirect) | 80 | TCP |
+
+### Internal Communication
+
+| Service | Port | Protocol |
+|---------|------|----------|
+| PostgreSQL | 5432 | TCP |
+| Redis | 6379 | TCP |
+| Besu RPC | 8545 | TCP |
+| Besu P2P | 30303 | TCP/UDP |
+
+### Firewall Rules
+
+```
+# Inbound (public)
+ALLOW 443/tcp FROM any
+ALLOW 80/tcp FROM any
+
+# Inbound (internal)
+ALLOW 5432/tcp FROM app-servers
+ALLOW 6379/tcp FROM app-servers
+ALLOW 8545/tcp FROM app-servers
+
+# Outbound
+ALLOW 443/tcp TO any (external APIs)
+ALLOW 53/udp TO dns-servers
+```
+
+## Storage
+
+| Type | Size | Purpose |
+|------|------|---------|
+| Database | 500GB | Application data |
+| File Storage | 1TB | Uploaded documents |
+| Blockchain | 200GB | Ledger data |
+| Backups | 2TB | Retention storage |
+
+## Bandwidth
+
+| Traffic Type | Estimated |
+|--------------|-----------|
+| API Requests | 100 Mbps |
+| File Uploads | 200 Mbps peak |
+| Blockchain Sync | 50 Mbps |
diff --git a/Documentation/operations/installation.md b/Documentation/operations/installation.md
new file mode 100644
index 0000000..dde637e
--- /dev/null
+++ b/Documentation/operations/installation.md
@@ -0,0 +1,108 @@
+# Installation Guide
+
+## Prerequisites
+
+- Docker 24.x or later
+- Docker Compose 2.x or later
+- Domain name with DNS configured
+- SSL certificate (or use Let's Encrypt)
+
+## Step 1: Server Preparation
+
+```bash
+# Update system packages
+sudo apt update && sudo apt upgrade -y
+
+# Install Docker
+curl -fsSL https://get.docker.com | sh
+sudo usermod -aG docker $USER
+
+# Install Docker Compose
+sudo apt install docker-compose-plugin
+```
+
+## Step 2: Clone and Configure
+
+```bash
+# Clone repository
+git clone https://github.com/goa-gel/tlas.git
+cd tlas
+
+# Copy environment template
+cp .env.example .env
+```
+
+Edit `.env` with required values:
+
+```bash
+# Database
+DB_HOST=postgres
+DB_PORT=5432
+DB_USER=tlas
+DB_PASSWORD=
+DB_NAME=tlas
+
+# JWT
+JWT_SECRET=<64-character-random-string>
+
+# Blockchain
+BESU_RPC_URL=http://besu:8545
+CONTRACT_ADDRESS=
+
+# External Services
+DIGILOCKER_CLIENT_ID=
+DIGILOCKER_CLIENT_SECRET=
+```
+
+## Step 3: Initialize Database
+
+```bash
+# Start database only
+docker-compose up -d postgres
+
+# Run migrations
+docker-compose exec api npm run migration:run
+
+# Seed initial data
+docker-compose exec api npm run seed
+```
+
+## Step 4: Deploy Blockchain
+
+```bash
+# Start Besu node
+docker-compose up -d besu
+
+# Wait for node sync
+docker-compose logs -f besu
+
+# Deploy smart contract
+docker-compose exec api npm run deploy:contract
+```
+
+## Step 5: Start Application
+
+```bash
+# Start all services
+docker-compose up -d
+
+# Verify health
+docker-compose ps
+curl http://localhost:3000/api/health
+```
+
+## Step 6: Configure SSL
+
+```bash
+# Using Certbot with Nginx
+sudo certbot --nginx -d your-domain.gov.in
+```
+
+## Verification Checklist
+
+- [ ] All containers running (`docker-compose ps`)
+- [ ] API health check returns 200
+- [ ] Frontend loads in browser
+- [ ] Database connections working
+- [ ] Blockchain node synced
+- [ ] SSL certificate valid
diff --git a/Documentation/operations/monitoring.md b/Documentation/operations/monitoring.md
new file mode 100644
index 0000000..f7dd6a6
--- /dev/null
+++ b/Documentation/operations/monitoring.md
@@ -0,0 +1,81 @@
+# Monitoring & Alerts
+
+## Health Endpoints
+
+| Endpoint | Description |
+|----------|-------------|
+| `/api/health` | API server health |
+| `/api/health/db` | Database connectivity |
+| `/api/health/blockchain` | Besu node status |
+
+### Health Response
+
+```json
+{
+ "status": "healthy",
+ "timestamp": "2026-02-09T10:00:00Z",
+ "components": {
+ "database": "healthy",
+ "blockchain": "healthy",
+ "cache": "healthy"
+ }
+}
+```
+
+## Key Metrics
+
+### Application Metrics
+
+| Metric | Description | Alert Threshold |
+|--------|-------------|-----------------|
+| `http_request_duration_seconds` | API response time | > 2s |
+| `http_requests_total` | Request count | - |
+| `active_sessions` | Logged-in users | - |
+| `queue_depth` | Pending jobs | > 1000 |
+
+### Infrastructure Metrics
+
+| Metric | Description | Alert Threshold |
+|--------|-------------|-----------------|
+| `cpu_usage_percent` | CPU utilization | > 80% |
+| `memory_usage_percent` | Memory utilization | > 85% |
+| `disk_usage_percent` | Disk utilization | > 90% |
+| `db_connection_pool` | Active connections | > 80% of max |
+
+### Business Metrics
+
+| Metric | Description |
+|--------|-------------|
+| `applications_submitted` | New applications |
+| `applications_processed` | Completed processing |
+| `sla_breaches` | SLA violations |
+| `certificates_issued` | Licenses issued |
+
+## Alert Configuration
+
+### Critical Alerts
+
+- API health check failing
+- Database unreachable
+- Blockchain node disconnected
+- Disk space < 10%
+
+### Warning Alerts
+
+- Response time > 2 seconds
+- Error rate > 1%
+- SLA breach count increasing
+- Certificate minting failures
+
+## Dashboard
+
+Access Grafana dashboards at:
+```
+https://monitoring.tlas.gov.in/grafana
+```
+
+Dashboards available:
+- System Overview
+- Application Processing
+- Blockchain Status
+- SLA Compliance
diff --git a/Documentation/operations/security.md b/Documentation/operations/security.md
new file mode 100644
index 0000000..33e4ce6
--- /dev/null
+++ b/Documentation/operations/security.md
@@ -0,0 +1,80 @@
+# Security Hardening
+
+## Pre-Deployment Checklist
+
+### Network Security
+
+- [ ] Firewall rules configured
+- [ ] Unnecessary ports closed
+- [ ] Internal services not exposed
+- [ ] SSL/TLS certificates installed
+- [ ] HTTP redirected to HTTPS
+
+### Application Security
+
+- [ ] Debug mode disabled
+- [ ] Error messages sanitized
+- [ ] Rate limiting enabled
+- [ ] CORS properly configured
+- [ ] Security headers set
+
+### Database Security
+
+- [ ] Default passwords changed
+- [ ] Network access restricted
+- [ ] SSL connections enforced
+- [ ] Audit logging enabled
+- [ ] Backups encrypted
+
+### Authentication
+
+- [ ] JWT secret rotated
+- [ ] Password policy enforced
+- [ ] Session timeout configured
+- [ ] Failed login lockout enabled
+- [ ] MFA available for admins
+
+## Security Headers
+
+```nginx
+# Required headers
+add_header X-Frame-Options "SAMEORIGIN";
+add_header X-Content-Type-Options "nosniff";
+add_header X-XSS-Protection "1; mode=block";
+add_header Strict-Transport-Security "max-age=31536000";
+add_header Content-Security-Policy "default-src 'self'";
+```
+
+## Vulnerability Management
+
+### Dependency Scanning
+
+```bash
+# Run weekly
+npm audit
+docker scan tlas-api:latest
+```
+
+### Security Updates
+
+- OS patches: Monthly
+- Framework updates: Quarterly
+- Critical CVEs: Within 48 hours
+
+## Incident Response
+
+1. **Detect**: Monitoring alerts, user reports
+2. **Contain**: Isolate affected systems
+3. **Investigate**: Identify scope and cause
+4. **Remediate**: Fix vulnerability
+5. **Recover**: Restore normal operations
+6. **Document**: Post-incident report
+
+## Access Reviews
+
+| Review Type | Frequency |
+|-------------|-----------|
+| User access | Quarterly |
+| Admin access | Monthly |
+| API keys | Quarterly |
+| Service accounts | Quarterly |
diff --git a/Documentation/overview/capabilities.md b/Documentation/overview/capabilities.md
new file mode 100644
index 0000000..c6c0bc6
--- /dev/null
+++ b/Documentation/overview/capabilities.md
@@ -0,0 +1,71 @@
+# Key Capabilities
+
+## Workflow Engine
+
+### Visual Workflow Builder
+- Drag-and-drop stage configuration
+- Parallel and sequential approval paths
+- Conditional routing rules
+- Auto-assignment based on workload
+
+### SLA Management
+- Per-stage time limits
+- Automatic escalation triggers
+- Manager notifications on breaches
+- SLA compliance dashboards
+
+## Document Management
+
+### Upload and Validation
+- Multi-format support (PDF, JPG, PNG)
+- File size and type enforcement
+- Duplicate detection
+- Automatic virus scanning
+
+### Verification
+- DigiLocker document fetch
+- Hash-based integrity checking
+- Officer annotation and comments
+- Version history tracking
+
+## Certificate Issuance
+
+### NFT Minting
+- Automatic blockchain transaction on approval
+- Unique token ID per license
+- Metadata embedding (holder, dates, department)
+- Document hash for integrity verification
+
+### Certificate Generation
+- Department-branded templates
+- QR code for instant verification
+- Digital signature embedding
+- PDF download with watermark
+
+## Applicant Self-Service
+
+### Application Portal
+- License type catalog with requirements
+- Step-by-step form wizard
+- Draft saving and resume
+- Fee calculation and payment
+
+### Status Tracking
+- Real-time stage visibility
+- Timeline view with dates
+- Notification preferences (SMS/email)
+- Officer contact for queries
+
+## Reporting and Analytics
+
+### Operational Reports
+- Daily/weekly/monthly volumes
+- Processing time distribution
+- Rejection rate analysis
+- Revenue collection summary
+
+### Management Dashboards
+- Department-wise comparison
+- Officer productivity metrics
+- Bottleneck identification
+- Trend analysis
diff --git a/Documentation/overview/index.md b/Documentation/overview/index.md
new file mode 100644
index 0000000..298504d
--- /dev/null
+++ b/Documentation/overview/index.md
@@ -0,0 +1,104 @@
+# Platform Overview
+
+The Tokenized License Approval System (TLAS) is an enterprise platform that transforms government licensing operations through blockchain-based credential issuance and configurable workflow automation.
+
+## Context
+
+Government licensing processes across India handle millions of applications annually. These processes involve multiple stakeholders, complex approval hierarchies, and strict compliance requirements. Traditional systems face persistent challenges that impact both operational efficiency and citizen trust.
+
+TLAS addresses these challenges through a purpose-built platform that combines workflow automation with cryptographic verification.
+
+## Platform Objectives
+
+| Objective | Measurement |
+|-----------|-------------|
+| Eliminate document fraud | Zero forged licenses in circulation |
+| Reduce processing time | 60% reduction in average approval duration |
+| Ensure complete traceability | 100% audit coverage for all transactions |
+| Enable citizen self-service | 80% of status inquiries handled without staff |
+| Support multi-department deployment | Single platform serving 15+ departments |
+
+## Core Capabilities
+
+### Tokenized License Certificates
+
+Every license issued through TLAS is minted as a Non-Fungible Token (NFT) on a private Hyperledger Besu blockchain. This provides:
+
+- **Cryptographic authenticity**: Certificates are digitally signed and verifiable
+- **Tamper evidence**: Any modification attempt is detectable
+- **Instant verification**: QR code scanning validates certificate authenticity
+- **Permanent record**: Blockchain maintains immutable issuance history
+
+### Configurable Workflow Engine
+
+Departments define their approval processes through a visual workflow builder:
+
+- Sequential and parallel approval stages
+- Conditional routing based on application attributes
+- Automated document validation rules
+- SLA tracking with escalation triggers
+- Role-based task assignment
+
+### Unified Operations Dashboard
+
+Administrators and department heads access real-time visibility into:
+
+- Application volumes and processing rates
+- Stage-wise bottleneck identification
+- SLA compliance metrics
+- Staff workload distribution
+- Revenue and fee collection status
+
+## Deployment Model
+
+TLAS operates as a multi-tenant platform with department-level isolation:
+
+```
+ βββββββββββββββββββββββββββββββββββ
+ β TLAS Platform β
+ βββββββββββββββββββββββββββββββββββ€
+ βββββββββββββΌββββββββββββ¬ββββββββββββ β
+ β β β β β
+ ββββββΌβββββ ββββββΌβββββ ββββββΌβββββ ββββββΌβββββ β
+ β Dept A β β Dept B β β Dept C β β Dept N β β
+ β β β β β β β β β
+ βWorkflowsβ βWorkflowsβ βWorkflowsβ βWorkflowsβ β
+ βUsers β βUsers β βUsers β βUsers β β
+ βLicenses β βLicenses β βLicenses β βLicenses β β
+ βββββββββββ βββββββββββ βββββββββββ βββββββββββ β
+ β β
+ β Shared Infrastructure β
+ β - Blockchain Network β
+ β - Authentication Service β
+ β - Notification Gateway β
+ β - Analytics Engine β
+ βββββββββββββββββββββββββββββββββββ
+```
+
+## Integration Points
+
+TLAS integrates with government and third-party services:
+
+| Integration | Purpose | Protocol |
+|-------------|---------|----------|
+| DigiLocker | Citizen identity verification, document retrieval | OAuth 2.0 |
+| Payment Gateway | License fee collection | REST API |
+| SMS Gateway | Application status notifications | HTTP |
+| Email Service | Formal communications and certificates | SMTP |
+| Legacy Systems | Data migration, reference data sync | Batch/API |
+
+## User Roles
+
+| Role | Responsibilities |
+|------|------------------|
+| **Applicant** | Submit applications, upload documents, track status, download certificates |
+| **Department Officer** | Review applications, verify documents, approve/reject/return |
+| **Department Admin** | Configure workflows, manage staff, view department analytics |
+| **System Administrator** | Manage departments, monitor platform health, handle escalations |
+
+## Navigation
+
+- [Problem Statement](/overview/problem) - Challenges addressed by TLAS
+- [Solution Architecture](/overview/solution) - Technical design and components
+- [Key Capabilities](/overview/capabilities) - Feature deep-dive
+- [Technology Stack](/overview/technology) - Implementation technologies
diff --git a/Documentation/overview/problem.md b/Documentation/overview/problem.md
new file mode 100644
index 0000000..118d097
--- /dev/null
+++ b/Documentation/overview/problem.md
@@ -0,0 +1,36 @@
+# Problem Statement
+
+## Current State Challenges
+
+### Document Fraud
+Paper-based licenses are routinely forged. Verification requires manual cross-checking with issuing authorities, which is slow and unreliable. Forged documents circulate undetected for years.
+
+### Process Opacity
+Applicants have no visibility into application status. Inquiries require office visits or phone calls. Staff cannot explain delays because tracking is fragmented across manual registers.
+
+### Inconsistent Processing
+Same license type processed differently across offices. No standardized workflows. Processing time varies from days to months depending on which officer handles the case.
+
+### Lost Audit Trail
+Paper files get misplaced. Handover between officers leaves no record. When disputes arise, reconstructing decision history is impossible.
+
+### Manual Bottlenecks
+Every approval requires physical file movement. Officers juggle hundreds of pending files. Urgent applications have no priority mechanism.
+
+## Quantified Impact
+
+| Metric | Current State |
+|--------|---------------|
+| Average processing time | 45-90 days |
+| Fraudulent documents in circulation | Estimated 8-12% |
+| Applicant inquiries requiring staff time | 60% of applications |
+| Applications with incomplete audit trail | 40%+ |
+| Staff time on file management vs. review | 50% overhead |
+
+## Requirements for Solution
+
+1. **Tamper-proof certificates** that can be verified instantly without contacting the issuing office
+2. **Real-time status tracking** accessible to applicants through self-service portal
+3. **Standardized workflows** enforced by the system, not dependent on individual officers
+4. **Complete audit trail** automatically captured for every action
+5. **Digital-first processing** eliminating physical file movement
diff --git a/Documentation/overview/solution.md b/Documentation/overview/solution.md
new file mode 100644
index 0000000..2a345b2
--- /dev/null
+++ b/Documentation/overview/solution.md
@@ -0,0 +1,100 @@
+# Solution Architecture
+
+## System Overview
+
+```
+βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+β TLAS Platform β
+βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
+β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
+β β Applicant β β Department β β Admin β β
+β β Portal β β Portal β β Console β β
+β ββββββββ¬ββββββββ ββββββββ¬ββββββββ ββββββββ¬ββββββββ β
+β β β β β
+β βββββββββββββββββββΌββββββββββββββββββ β
+β β β
+β ββββββββΌββββββββ β
+β β API Gateway β β
+β β (NestJS) β β
+β ββββββββ¬ββββββββ β
+β β β
+β βββββββββββββββββββΌββββββββββββββββββ β
+β β β β β
+β ββββββββΌβββββββ ββββββββΌβββββββ ββββββββΌβββββββ β
+β β PostgreSQL β β Hyperledger β β External β β
+β β Database β β Besu β β Services β β
+β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
+βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+```
+
+## Component Responsibilities
+
+| Component | Function |
+|-----------|----------|
+| **Applicant Portal** | Application submission, document upload, status tracking, certificate download |
+| **Department Portal** | Queue management, application review, approval actions, reporting |
+| **Admin Console** | Department onboarding, workflow configuration, system monitoring |
+| **API Gateway** | Authentication, authorization, request routing, rate limiting |
+| **PostgreSQL** | Application data, user accounts, workflow definitions, audit logs |
+| **Hyperledger Besu** | NFT minting, certificate verification, immutable transaction record |
+
+## Data Flow: License Issuance
+
+```
+1. Applicant submits application
+ β
+ βΌ
+2. System validates documents and routes to workflow
+ β
+ βΌ
+3. Officers process through defined approval stages
+ β
+ βΌ
+4. Final approval triggers blockchain transaction
+ β
+ βΌ
+5. NFT minted with license metadata
+ β
+ βΌ
+6. Certificate generated with embedded verification QR
+ β
+ βΌ
+7. Applicant notified and certificate available for download
+```
+
+## Blockchain Integration
+
+Hyperledger Besu serves as the certificate authority:
+
+- **Private network**: Government-controlled nodes, no public exposure
+- **Permissioned access**: Only authorized services can mint tokens
+- **Smart contract**: ERC-721 implementation for license NFTs
+- **Verification API**: Public endpoint for certificate validation
+
+### NFT Structure
+
+```json
+{
+ "tokenId": "0x...",
+ "licenseNumber": "GOA/TRADE/2026/00001",
+ "holder": {
+ "name": "Applicant Name",
+ "identifier": "AADHAAR-XXXX"
+ },
+ "issuingDepartment": "Department of Trade",
+ "issueDate": "2026-02-09",
+ "validUntil": "2027-02-08",
+ "documentHash": "SHA256:abcd1234..."
+}
+```
+
+## Security Architecture
+
+| Layer | Controls |
+|-------|----------|
+| **Network** | HTTPS only, WAF, DDoS protection |
+| **Authentication** | JWT tokens, session management, DigiLocker OAuth |
+| **Authorization** | Role-based access control, department isolation |
+| **Data** | Encryption at rest (AES-256), TLS 1.3 in transit |
+| **Application** | Input validation, SQL injection prevention, XSS protection |
+| **Audit** | Immutable logs, tamper detection, compliance reporting |
diff --git a/Documentation/overview/technology.md b/Documentation/overview/technology.md
new file mode 100644
index 0000000..3c5b378
--- /dev/null
+++ b/Documentation/overview/technology.md
@@ -0,0 +1,50 @@
+# Technology Stack
+
+## Frontend
+
+| Technology | Version | Purpose |
+|------------|---------|---------|
+| Angular | 19.x | Application framework |
+| Angular Material | 19.x | UI component library |
+| RxJS | 7.x | Reactive state management |
+| TypeScript | 5.x | Type-safe development |
+
+## Backend
+
+| Technology | Version | Purpose |
+|------------|---------|---------|
+| NestJS | 10.x | API framework |
+| TypeScript | 5.x | Type-safe development |
+| TypeORM | 0.3.x | Database ORM |
+| Passport | 0.7.x | Authentication |
+
+## Database
+
+| Technology | Version | Purpose |
+|------------|---------|---------|
+| PostgreSQL | 16.x | Primary data store |
+| Redis | 7.x | Session cache, rate limiting |
+
+## Blockchain
+
+| Technology | Version | Purpose |
+|------------|---------|---------|
+| Hyperledger Besu | 24.x | Ethereum-compatible blockchain |
+| Solidity | 0.8.x | Smart contract language |
+| Web3.js | 4.x | Blockchain interaction |
+
+## Infrastructure
+
+| Technology | Purpose |
+|------------|---------|
+| Docker | Container runtime |
+| Nginx | Reverse proxy, static files |
+| Let's Encrypt | TLS certificates |
+
+## Monitoring
+
+| Technology | Purpose |
+|------------|---------|
+| Prometheus | Metrics collection |
+| Grafana | Visualization |
+| Loki | Log aggregation |
diff --git a/Documentation/package-lock.json b/Documentation/package-lock.json
new file mode 100644
index 0000000..1303e3b
--- /dev/null
+++ b/Documentation/package-lock.json
@@ -0,0 +1,2515 @@
+{
+ "name": "goa-gel-documentation",
+ "version": "2.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "goa-gel-documentation",
+ "version": "2.0.0",
+ "license": "MIT",
+ "devDependencies": {
+ "vitepress": "^1.5.0",
+ "vue": "^3.5.13"
+ }
+ },
+ "node_modules/@algolia/abtesting": {
+ "version": "1.14.0",
+ "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.14.0.tgz",
+ "integrity": "sha512-cZfj+1Z1dgrk3YPtNQNt0H9Rr67P8b4M79JjUKGS0d7/EbFbGxGgSu6zby5f22KXo3LT0LZa4O2c6VVbupJuDg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.48.0",
+ "@algolia/requester-browser-xhr": "5.48.0",
+ "@algolia/requester-fetch": "5.48.0",
+ "@algolia/requester-node-http": "5.48.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/autocomplete-core": {
+ "version": "1.17.7",
+ "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz",
+ "integrity": "sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/autocomplete-plugin-algolia-insights": "1.17.7",
+ "@algolia/autocomplete-shared": "1.17.7"
+ }
+ },
+ "node_modules/@algolia/autocomplete-plugin-algolia-insights": {
+ "version": "1.17.7",
+ "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz",
+ "integrity": "sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/autocomplete-shared": "1.17.7"
+ },
+ "peerDependencies": {
+ "search-insights": ">= 1 < 3"
+ }
+ },
+ "node_modules/@algolia/autocomplete-preset-algolia": {
+ "version": "1.17.7",
+ "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz",
+ "integrity": "sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/autocomplete-shared": "1.17.7"
+ },
+ "peerDependencies": {
+ "@algolia/client-search": ">= 4.9.1 < 6",
+ "algoliasearch": ">= 4.9.1 < 6"
+ }
+ },
+ "node_modules/@algolia/autocomplete-shared": {
+ "version": "1.17.7",
+ "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz",
+ "integrity": "sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "@algolia/client-search": ">= 4.9.1 < 6",
+ "algoliasearch": ">= 4.9.1 < 6"
+ }
+ },
+ "node_modules/@algolia/client-abtesting": {
+ "version": "5.48.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.48.0.tgz",
+ "integrity": "sha512-n17WSJ7vazmM6yDkWBAjY12J8ERkW9toOqNgQ1GEZu/Kc4dJDJod1iy+QP5T/UlR3WICgZDi/7a/VX5TY5LAPQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.48.0",
+ "@algolia/requester-browser-xhr": "5.48.0",
+ "@algolia/requester-fetch": "5.48.0",
+ "@algolia/requester-node-http": "5.48.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/client-analytics": {
+ "version": "5.48.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.48.0.tgz",
+ "integrity": "sha512-v5bMZMEqW9U2l40/tTAaRyn4AKrYLio7KcRuHmLaJtxuJAhvZiE7Y62XIsF070juz4MN3eyvfQmI+y5+OVbZuA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.48.0",
+ "@algolia/requester-browser-xhr": "5.48.0",
+ "@algolia/requester-fetch": "5.48.0",
+ "@algolia/requester-node-http": "5.48.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/client-common": {
+ "version": "5.48.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.48.0.tgz",
+ "integrity": "sha512-7H3DgRyi7UByScc0wz7EMrhgNl7fKPDjKX9OcWixLwCj7yrRXDSIzwunykuYUUO7V7HD4s319e15FlJ9CQIIFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/client-insights": {
+ "version": "5.48.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.48.0.tgz",
+ "integrity": "sha512-tXmkB6qrIGAXrtRYHQNpfW0ekru/qymV02bjT0w5QGaGw0W91yT+53WB6dTtRRsIrgS30Al6efBvyaEosjZ5uw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.48.0",
+ "@algolia/requester-browser-xhr": "5.48.0",
+ "@algolia/requester-fetch": "5.48.0",
+ "@algolia/requester-node-http": "5.48.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/client-personalization": {
+ "version": "5.48.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.48.0.tgz",
+ "integrity": "sha512-4tXEsrdtcBZbDF73u14Kb3otN+xUdTVGop1tBjict+Rc/FhsJQVIwJIcTrOJqmvhtBfc56Bu65FiVOnpAZCxcw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.48.0",
+ "@algolia/requester-browser-xhr": "5.48.0",
+ "@algolia/requester-fetch": "5.48.0",
+ "@algolia/requester-node-http": "5.48.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/client-query-suggestions": {
+ "version": "5.48.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.48.0.tgz",
+ "integrity": "sha512-unzSUwWFpsDrO8935RhMAlyK0Ttua/5XveVIwzfjs5w+GVBsHgIkbOe8VbBJccMU/z1LCwvu1AY3kffuSLAR5Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.48.0",
+ "@algolia/requester-browser-xhr": "5.48.0",
+ "@algolia/requester-fetch": "5.48.0",
+ "@algolia/requester-node-http": "5.48.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/client-search": {
+ "version": "5.48.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.48.0.tgz",
+ "integrity": "sha512-RB9bKgYTVUiOcEb5bOcZ169jiiVW811dCsJoLT19DcbbFmU4QaK0ghSTssij35QBQ3SCOitXOUrHcGgNVwS7sQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.48.0",
+ "@algolia/requester-browser-xhr": "5.48.0",
+ "@algolia/requester-fetch": "5.48.0",
+ "@algolia/requester-node-http": "5.48.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/ingestion": {
+ "version": "1.48.0",
+ "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.48.0.tgz",
+ "integrity": "sha512-rhoSoPu+TDzDpvpk3cY/pYgbeWXr23DxnAIH/AkN0dUC+GCnVIeNSQkLaJ+CL4NZ51cjLIjksrzb4KC5Xu+ktw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.48.0",
+ "@algolia/requester-browser-xhr": "5.48.0",
+ "@algolia/requester-fetch": "5.48.0",
+ "@algolia/requester-node-http": "5.48.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/monitoring": {
+ "version": "1.48.0",
+ "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.48.0.tgz",
+ "integrity": "sha512-aSe6jKvWt+8VdjOaq2ERtsXp9+qMXNJ3mTyTc1VMhNfgPl7ArOhRMRSQ8QBnY8ZL4yV5Xpezb7lAg8pdGrrulg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.48.0",
+ "@algolia/requester-browser-xhr": "5.48.0",
+ "@algolia/requester-fetch": "5.48.0",
+ "@algolia/requester-node-http": "5.48.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/recommend": {
+ "version": "5.48.0",
+ "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.48.0.tgz",
+ "integrity": "sha512-p9tfI1bimAaZrdiVExL/dDyGUZ8gyiSHsktP1ZWGzt5hXpM3nhv4tSjyHtXjEKtA0UvsaHKwSfFE8aAAm1eIQA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.48.0",
+ "@algolia/requester-browser-xhr": "5.48.0",
+ "@algolia/requester-fetch": "5.48.0",
+ "@algolia/requester-node-http": "5.48.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/requester-browser-xhr": {
+ "version": "5.48.0",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.48.0.tgz",
+ "integrity": "sha512-XshyfpsQB7BLnHseMinp3fVHOGlTv6uEHOzNK/3XrEF9mjxoZAcdVfY1OCXObfwRWX5qXZOq8FnrndFd44iVsQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.48.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/requester-fetch": {
+ "version": "5.48.0",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.48.0.tgz",
+ "integrity": "sha512-Q4XNSVQU89bKNAPuvzSYqTH9AcbOOiIo6AeYMQTxgSJ2+uvT78CLPMG89RIIloYuAtSfE07s40OLV50++l1Bbw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.48.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@algolia/requester-node-http": {
+ "version": "5.48.0",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.48.0.tgz",
+ "integrity": "sha512-ZgxV2+5qt3NLeUYBTsi6PLyHcENQWC0iFppFZekHSEDA2wcLdTUjnaJzimTEULHIvJuLRCkUs4JABdhuJktEag==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/client-common": "5.48.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz",
+ "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.29.0"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
+ "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.28.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@docsearch/css": {
+ "version": "3.8.2",
+ "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.2.tgz",
+ "integrity": "sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@docsearch/js": {
+ "version": "3.8.2",
+ "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.8.2.tgz",
+ "integrity": "sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@docsearch/react": "3.8.2",
+ "preact": "^10.0.0"
+ }
+ },
+ "node_modules/@docsearch/react": {
+ "version": "3.8.2",
+ "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.2.tgz",
+ "integrity": "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/autocomplete-core": "1.17.7",
+ "@algolia/autocomplete-preset-algolia": "1.17.7",
+ "@docsearch/css": "3.8.2",
+ "algoliasearch": "^5.14.2"
+ },
+ "peerDependencies": {
+ "@types/react": ">= 16.8.0 < 19.0.0",
+ "react": ">= 16.8.0 < 19.0.0",
+ "react-dom": ">= 16.8.0 < 19.0.0",
+ "search-insights": ">= 1 < 3"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ },
+ "search-insights": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+ "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+ "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+ "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+ "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+ "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+ "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+ "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+ "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+ "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+ "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+ "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+ "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+ "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+ "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+ "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+ "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+ "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+ "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+ "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@iconify-json/simple-icons": {
+ "version": "1.2.70",
+ "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.70.tgz",
+ "integrity": "sha512-CYNRCgN6nBTjN4dNkrBCjHXNR2e4hQihdsZUs/afUNFOWLSYjfihca4EFN05rRvDk4Xoy2n8tym6IxBZmcn+Qg==",
+ "dev": true,
+ "license": "CC0-1.0",
+ "dependencies": {
+ "@iconify/types": "*"
+ }
+ },
+ "node_modules/@iconify/types": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz",
+ "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz",
+ "integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz",
+ "integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz",
+ "integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz",
+ "integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz",
+ "integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz",
+ "integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz",
+ "integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz",
+ "integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz",
+ "integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz",
+ "integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz",
+ "integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-musl": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz",
+ "integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz",
+ "integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-musl": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz",
+ "integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz",
+ "integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz",
+ "integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz",
+ "integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz",
+ "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz",
+ "integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-openbsd-x64": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz",
+ "integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz",
+ "integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz",
+ "integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz",
+ "integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz",
+ "integrity": "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz",
+ "integrity": "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@shikijs/core": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-2.5.0.tgz",
+ "integrity": "sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/engine-javascript": "2.5.0",
+ "@shikijs/engine-oniguruma": "2.5.0",
+ "@shikijs/types": "2.5.0",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.4",
+ "hast-util-to-html": "^9.0.4"
+ }
+ },
+ "node_modules/@shikijs/engine-javascript": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-2.5.0.tgz",
+ "integrity": "sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "2.5.0",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "oniguruma-to-es": "^3.1.0"
+ }
+ },
+ "node_modules/@shikijs/engine-oniguruma": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-2.5.0.tgz",
+ "integrity": "sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "2.5.0",
+ "@shikijs/vscode-textmate": "^10.0.2"
+ }
+ },
+ "node_modules/@shikijs/langs": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-2.5.0.tgz",
+ "integrity": "sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "2.5.0"
+ }
+ },
+ "node_modules/@shikijs/themes": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-2.5.0.tgz",
+ "integrity": "sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "2.5.0"
+ }
+ },
+ "node_modules/@shikijs/transformers": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-2.5.0.tgz",
+ "integrity": "sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/core": "2.5.0",
+ "@shikijs/types": "2.5.0"
+ }
+ },
+ "node_modules/@shikijs/types": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz",
+ "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.4"
+ }
+ },
+ "node_modules/@shikijs/vscode-textmate": {
+ "version": "10.0.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz",
+ "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/hast": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
+ "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/linkify-it": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz",
+ "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/markdown-it": {
+ "version": "14.1.2",
+ "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz",
+ "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/linkify-it": "^5",
+ "@types/mdurl": "^2"
+ }
+ },
+ "node_modules/@types/mdast": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
+ "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/mdurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz",
+ "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/unist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+ "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/web-bluetooth": {
+ "version": "0.0.21",
+ "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz",
+ "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
+ "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/@vitejs/plugin-vue": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz",
+ "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "peerDependencies": {
+ "vite": "^5.0.0 || ^6.0.0",
+ "vue": "^3.2.25"
+ }
+ },
+ "node_modules/@vue/compiler-core": {
+ "version": "3.5.28",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.28.tgz",
+ "integrity": "sha512-kviccYxTgoE8n6OCw96BNdYlBg2GOWfBuOW4Vqwrt7mSKWKwFVvI8egdTltqRgITGPsTFYtKYfxIG8ptX2PJHQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.29.0",
+ "@vue/shared": "3.5.28",
+ "entities": "^7.0.1",
+ "estree-walker": "^2.0.2",
+ "source-map-js": "^1.2.1"
+ }
+ },
+ "node_modules/@vue/compiler-dom": {
+ "version": "3.5.28",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.28.tgz",
+ "integrity": "sha512-/1ZepxAb159jKR1btkefDP+J2xuWL5V3WtleRmxaT+K2Aqiek/Ab/+Ebrw2pPj0sdHO8ViAyyJWfhXXOP/+LQA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-core": "3.5.28",
+ "@vue/shared": "3.5.28"
+ }
+ },
+ "node_modules/@vue/compiler-sfc": {
+ "version": "3.5.28",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.28.tgz",
+ "integrity": "sha512-6TnKMiNkd6u6VeVDhZn/07KhEZuBSn43Wd2No5zaP5s3xm8IqFTHBj84HJah4UepSUJTro5SoqqlOY22FKY96g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.29.0",
+ "@vue/compiler-core": "3.5.28",
+ "@vue/compiler-dom": "3.5.28",
+ "@vue/compiler-ssr": "3.5.28",
+ "@vue/shared": "3.5.28",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.21",
+ "postcss": "^8.5.6",
+ "source-map-js": "^1.2.1"
+ }
+ },
+ "node_modules/@vue/compiler-ssr": {
+ "version": "3.5.28",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.28.tgz",
+ "integrity": "sha512-JCq//9w1qmC6UGLWJX7RXzrGpKkroubey/ZFqTpvEIDJEKGgntuDMqkuWiZvzTzTA5h2qZvFBFHY7fAAa9475g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-dom": "3.5.28",
+ "@vue/shared": "3.5.28"
+ }
+ },
+ "node_modules/@vue/devtools-api": {
+ "version": "7.7.9",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.9.tgz",
+ "integrity": "sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-kit": "^7.7.9"
+ }
+ },
+ "node_modules/@vue/devtools-kit": {
+ "version": "7.7.9",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.9.tgz",
+ "integrity": "sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-shared": "^7.7.9",
+ "birpc": "^2.3.0",
+ "hookable": "^5.5.3",
+ "mitt": "^3.0.1",
+ "perfect-debounce": "^1.0.0",
+ "speakingurl": "^14.0.1",
+ "superjson": "^2.2.2"
+ }
+ },
+ "node_modules/@vue/devtools-shared": {
+ "version": "7.7.9",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.9.tgz",
+ "integrity": "sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "rfdc": "^1.4.1"
+ }
+ },
+ "node_modules/@vue/reactivity": {
+ "version": "3.5.28",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.28.tgz",
+ "integrity": "sha512-gr5hEsxvn+RNyu9/9o1WtdYdwDjg5FgjUSBEkZWqgTKlo/fvwZ2+8W6AfKsc9YN2k/+iHYdS9vZYAhpi10kNaw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/shared": "3.5.28"
+ }
+ },
+ "node_modules/@vue/runtime-core": {
+ "version": "3.5.28",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.28.tgz",
+ "integrity": "sha512-POVHTdbgnrBBIpnbYU4y7pOMNlPn2QVxVzkvEA2pEgvzbelQq4ZOUxbp2oiyo+BOtiYlm8Q44wShHJoBvDPAjQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/reactivity": "3.5.28",
+ "@vue/shared": "3.5.28"
+ }
+ },
+ "node_modules/@vue/runtime-dom": {
+ "version": "3.5.28",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.28.tgz",
+ "integrity": "sha512-4SXxSF8SXYMuhAIkT+eBRqOkWEfPu6nhccrzrkioA6l0boiq7sp18HCOov9qWJA5HML61kW8p/cB4MmBiG9dSA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/reactivity": "3.5.28",
+ "@vue/runtime-core": "3.5.28",
+ "@vue/shared": "3.5.28",
+ "csstype": "^3.2.3"
+ }
+ },
+ "node_modules/@vue/server-renderer": {
+ "version": "3.5.28",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.28.tgz",
+ "integrity": "sha512-pf+5ECKGj8fX95bNincbzJ6yp6nyzuLDhYZCeFxUNp8EBrQpPpQaLX3nNCp49+UbgbPun3CeVE+5CXVV1Xydfg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-ssr": "3.5.28",
+ "@vue/shared": "3.5.28"
+ },
+ "peerDependencies": {
+ "vue": "3.5.28"
+ }
+ },
+ "node_modules/@vue/shared": {
+ "version": "3.5.28",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.28.tgz",
+ "integrity": "sha512-cfWa1fCGBxrvaHRhvV3Is0MgmrbSCxYTXCSCau2I0a1Xw1N1pHAvkWCiXPRAqjvToILvguNyEwjevUqAuBQWvQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@vueuse/core": {
+ "version": "12.8.2",
+ "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.8.2.tgz",
+ "integrity": "sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/web-bluetooth": "^0.0.21",
+ "@vueuse/metadata": "12.8.2",
+ "@vueuse/shared": "12.8.2",
+ "vue": "^3.5.13"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/@vueuse/integrations": {
+ "version": "12.8.2",
+ "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-12.8.2.tgz",
+ "integrity": "sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vueuse/core": "12.8.2",
+ "@vueuse/shared": "12.8.2",
+ "vue": "^3.5.13"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "async-validator": "^4",
+ "axios": "^1",
+ "change-case": "^5",
+ "drauu": "^0.4",
+ "focus-trap": "^7",
+ "fuse.js": "^7",
+ "idb-keyval": "^6",
+ "jwt-decode": "^4",
+ "nprogress": "^0.2",
+ "qrcode": "^1.5",
+ "sortablejs": "^1",
+ "universal-cookie": "^7"
+ },
+ "peerDependenciesMeta": {
+ "async-validator": {
+ "optional": true
+ },
+ "axios": {
+ "optional": true
+ },
+ "change-case": {
+ "optional": true
+ },
+ "drauu": {
+ "optional": true
+ },
+ "focus-trap": {
+ "optional": true
+ },
+ "fuse.js": {
+ "optional": true
+ },
+ "idb-keyval": {
+ "optional": true
+ },
+ "jwt-decode": {
+ "optional": true
+ },
+ "nprogress": {
+ "optional": true
+ },
+ "qrcode": {
+ "optional": true
+ },
+ "sortablejs": {
+ "optional": true
+ },
+ "universal-cookie": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vueuse/metadata": {
+ "version": "12.8.2",
+ "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.8.2.tgz",
+ "integrity": "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/@vueuse/shared": {
+ "version": "12.8.2",
+ "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.8.2.tgz",
+ "integrity": "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "vue": "^3.5.13"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/algoliasearch": {
+ "version": "5.48.0",
+ "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.48.0.tgz",
+ "integrity": "sha512-aD8EQC6KEman6/S79FtPdQmB7D4af/etcRL/KwiKFKgAE62iU8c5PeEQvpvIcBPurC3O/4Lj78nOl7ZcoazqSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@algolia/abtesting": "1.14.0",
+ "@algolia/client-abtesting": "5.48.0",
+ "@algolia/client-analytics": "5.48.0",
+ "@algolia/client-common": "5.48.0",
+ "@algolia/client-insights": "5.48.0",
+ "@algolia/client-personalization": "5.48.0",
+ "@algolia/client-query-suggestions": "5.48.0",
+ "@algolia/client-search": "5.48.0",
+ "@algolia/ingestion": "1.48.0",
+ "@algolia/monitoring": "1.48.0",
+ "@algolia/recommend": "5.48.0",
+ "@algolia/requester-browser-xhr": "5.48.0",
+ "@algolia/requester-fetch": "5.48.0",
+ "@algolia/requester-node-http": "5.48.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/birpc": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz",
+ "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/ccount": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-html4": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-legacy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/comma-separated-tokens": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+ "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/copy-anything": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-4.0.5.tgz",
+ "integrity": "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-what": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mesqueeb"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
+ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/devlop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
+ "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dequal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/emoji-regex-xs": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz",
+ "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/entities": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz",
+ "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.21.5",
+ "@esbuild/android-arm": "0.21.5",
+ "@esbuild/android-arm64": "0.21.5",
+ "@esbuild/android-x64": "0.21.5",
+ "@esbuild/darwin-arm64": "0.21.5",
+ "@esbuild/darwin-x64": "0.21.5",
+ "@esbuild/freebsd-arm64": "0.21.5",
+ "@esbuild/freebsd-x64": "0.21.5",
+ "@esbuild/linux-arm": "0.21.5",
+ "@esbuild/linux-arm64": "0.21.5",
+ "@esbuild/linux-ia32": "0.21.5",
+ "@esbuild/linux-loong64": "0.21.5",
+ "@esbuild/linux-mips64el": "0.21.5",
+ "@esbuild/linux-ppc64": "0.21.5",
+ "@esbuild/linux-riscv64": "0.21.5",
+ "@esbuild/linux-s390x": "0.21.5",
+ "@esbuild/linux-x64": "0.21.5",
+ "@esbuild/netbsd-x64": "0.21.5",
+ "@esbuild/openbsd-x64": "0.21.5",
+ "@esbuild/sunos-x64": "0.21.5",
+ "@esbuild/win32-arm64": "0.21.5",
+ "@esbuild/win32-ia32": "0.21.5",
+ "@esbuild/win32-x64": "0.21.5"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/focus-trap": {
+ "version": "7.8.0",
+ "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.8.0.tgz",
+ "integrity": "sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tabbable": "^6.4.0"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/hast-util-to-html": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz",
+ "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "ccount": "^2.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "html-void-elements": "^3.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "property-information": "^7.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "stringify-entities": "^4.0.0",
+ "zwitch": "^2.0.4"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-whitespace": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
+ "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hookable": {
+ "version": "5.5.3",
+ "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz",
+ "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/html-void-elements": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
+ "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-what": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/is-what/-/is-what-5.5.0.tgz",
+ "integrity": "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mesqueeb"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.21",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
+ "node_modules/mark.js": {
+ "version": "8.11.1",
+ "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz",
+ "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/mdast-util-to-hast": {
+ "version": "13.2.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz",
+ "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "@ungap/structured-clone": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "trim-lines": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-util-character": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
+ "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-encode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz",
+ "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-sanitize-uri": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz",
+ "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-symbol": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
+ "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-types": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
+ "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/minisearch": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.2.0.tgz",
+ "integrity": "sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/mitt": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
+ "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/oniguruma-to-es": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-3.1.1.tgz",
+ "integrity": "sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex-xs": "^1.0.0",
+ "regex": "^6.0.1",
+ "regex-recursion": "^6.0.2"
+ }
+ },
+ "node_modules/perfect-debounce": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
+ "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/postcss": {
+ "version": "8.5.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/preact": {
+ "version": "10.28.3",
+ "resolved": "https://registry.npmjs.org/preact/-/preact-10.28.3.tgz",
+ "integrity": "sha512-tCmoRkPQLpBeWzpmbhryairGnhW9tKV6c6gr/w+RhoRoKEJwsjzipwp//1oCpGPOchvSLaAPlpcJi9MwMmoPyA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/preact"
+ }
+ },
+ "node_modules/property-information": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz",
+ "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz",
+ "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "regex-utilities": "^2.3.0"
+ }
+ },
+ "node_modules/regex-recursion": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz",
+ "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "regex-utilities": "^2.3.0"
+ }
+ },
+ "node_modules/regex-utilities": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz",
+ "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/rfdc": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
+ "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/rollup": {
+ "version": "4.57.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz",
+ "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.8"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.57.1",
+ "@rollup/rollup-android-arm64": "4.57.1",
+ "@rollup/rollup-darwin-arm64": "4.57.1",
+ "@rollup/rollup-darwin-x64": "4.57.1",
+ "@rollup/rollup-freebsd-arm64": "4.57.1",
+ "@rollup/rollup-freebsd-x64": "4.57.1",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.57.1",
+ "@rollup/rollup-linux-arm-musleabihf": "4.57.1",
+ "@rollup/rollup-linux-arm64-gnu": "4.57.1",
+ "@rollup/rollup-linux-arm64-musl": "4.57.1",
+ "@rollup/rollup-linux-loong64-gnu": "4.57.1",
+ "@rollup/rollup-linux-loong64-musl": "4.57.1",
+ "@rollup/rollup-linux-ppc64-gnu": "4.57.1",
+ "@rollup/rollup-linux-ppc64-musl": "4.57.1",
+ "@rollup/rollup-linux-riscv64-gnu": "4.57.1",
+ "@rollup/rollup-linux-riscv64-musl": "4.57.1",
+ "@rollup/rollup-linux-s390x-gnu": "4.57.1",
+ "@rollup/rollup-linux-x64-gnu": "4.57.1",
+ "@rollup/rollup-linux-x64-musl": "4.57.1",
+ "@rollup/rollup-openbsd-x64": "4.57.1",
+ "@rollup/rollup-openharmony-arm64": "4.57.1",
+ "@rollup/rollup-win32-arm64-msvc": "4.57.1",
+ "@rollup/rollup-win32-ia32-msvc": "4.57.1",
+ "@rollup/rollup-win32-x64-gnu": "4.57.1",
+ "@rollup/rollup-win32-x64-msvc": "4.57.1",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/search-insights": {
+ "version": "2.17.3",
+ "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz",
+ "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/shiki": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-2.5.0.tgz",
+ "integrity": "sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/core": "2.5.0",
+ "@shikijs/engine-javascript": "2.5.0",
+ "@shikijs/engine-oniguruma": "2.5.0",
+ "@shikijs/langs": "2.5.0",
+ "@shikijs/themes": "2.5.0",
+ "@shikijs/types": "2.5.0",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.4"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/space-separated-tokens": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
+ "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/speakingurl": {
+ "version": "14.0.1",
+ "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz",
+ "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/stringify-entities": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
+ "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "character-entities-html4": "^2.0.0",
+ "character-entities-legacy": "^3.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/superjson": {
+ "version": "2.2.6",
+ "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.6.tgz",
+ "integrity": "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "copy-anything": "^4"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/tabbable": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz",
+ "integrity": "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/trim-lines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
+ "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/unist-util-is": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz",
+ "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-position": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
+ "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-stringify-position": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
+ "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz",
+ "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit-parents": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz",
+ "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
+ "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-message": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
+ "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-stringify-position": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vite": {
+ "version": "5.4.21",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz",
+ "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "^0.21.3",
+ "postcss": "^8.4.43",
+ "rollup": "^4.20.0"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^18.0.0 || >=20.0.0",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "sass-embedded": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vitepress": {
+ "version": "1.6.4",
+ "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.6.4.tgz",
+ "integrity": "sha512-+2ym1/+0VVrbhNyRoFFesVvBvHAVMZMK0rw60E3X/5349M1GuVdKeazuksqopEdvkKwKGs21Q729jX81/bkBJg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@docsearch/css": "3.8.2",
+ "@docsearch/js": "3.8.2",
+ "@iconify-json/simple-icons": "^1.2.21",
+ "@shikijs/core": "^2.1.0",
+ "@shikijs/transformers": "^2.1.0",
+ "@shikijs/types": "^2.1.0",
+ "@types/markdown-it": "^14.1.2",
+ "@vitejs/plugin-vue": "^5.2.1",
+ "@vue/devtools-api": "^7.7.0",
+ "@vue/shared": "^3.5.13",
+ "@vueuse/core": "^12.4.0",
+ "@vueuse/integrations": "^12.4.0",
+ "focus-trap": "^7.6.4",
+ "mark.js": "8.11.1",
+ "minisearch": "^7.1.1",
+ "shiki": "^2.1.0",
+ "vite": "^5.4.14",
+ "vue": "^3.5.13"
+ },
+ "bin": {
+ "vitepress": "bin/vitepress.js"
+ },
+ "peerDependencies": {
+ "markdown-it-mathjax3": "^4",
+ "postcss": "^8"
+ },
+ "peerDependenciesMeta": {
+ "markdown-it-mathjax3": {
+ "optional": true
+ },
+ "postcss": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vue": {
+ "version": "3.5.28",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.28.tgz",
+ "integrity": "sha512-BRdrNfeoccSoIZeIhyPBfvWSLFP4q8J3u8Ju8Ug5vu3LdD+yTM13Sg4sKtljxozbnuMu1NB1X5HBHRYUzFocKg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-dom": "3.5.28",
+ "@vue/compiler-sfc": "3.5.28",
+ "@vue/runtime-dom": "3.5.28",
+ "@vue/server-renderer": "3.5.28",
+ "@vue/shared": "3.5.28"
+ },
+ "peerDependencies": {
+ "typescript": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/zwitch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
+ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ }
+ }
+}
diff --git a/Documentation/package.json b/Documentation/package.json
index c1455a8..b65e25e 100644
--- a/Documentation/package.json
+++ b/Documentation/package.json
@@ -1,23 +1,25 @@
{
"name": "goa-gel-documentation",
- "version": "1.0.0",
- "description": "Goa-GEL Platform Documentation Service",
- "main": "index.js",
+ "version": "2.0.0",
+ "description": "Goa-GEL Platform Documentation - Government e-Licensing",
+ "type": "module",
"scripts": {
- "start": "http-server public -p 8080",
- "build": "node build.js",
- "dev": "http-server public -p 8080 -o"
+ "dev": "vitepress dev",
+ "build": "vitepress build",
+ "preview": "vitepress preview --port 8080",
+ "serve": "vitepress build && vitepress preview --port 8080"
},
"keywords": [
"documentation",
"goa-gel",
- "user-guide"
+ "blockchain",
+ "e-licensing",
+ "government"
],
- "author": "Goa Government",
+ "author": "Government of Goa",
"license": "MIT",
- "dependencies": {
- "http-server": "^14.1.1",
- "marked": "^11.1.1",
- "highlight.js": "^11.9.0"
+ "devDependencies": {
+ "vitepress": "^1.5.0",
+ "vue": "^3.5.13"
}
}
diff --git a/Documentation/public/404.html b/Documentation/public/404.html
deleted file mode 100644
index 3e42d4f..0000000
--- a/Documentation/public/404.html
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
- 404 - Page Not Found | Goa-GEL Documentation
-
-
-
-
-
404
-
Page Not Found
-
- The page you're looking for doesn't exist or has been moved.
-
-
-
-
-
diff --git a/Documentation/public/css/styles.css b/Documentation/public/css/styles.css
deleted file mode 100644
index cad85fb..0000000
--- a/Documentation/public/css/styles.css
+++ /dev/null
@@ -1,772 +0,0 @@
-/* Global Styles */
-:root {
- --primary-color: #1976d2;
- --secondary-color: #424242;
- --success-color: #4caf50;
- --warning-color: #ff9800;
- --error-color: #f44336;
- --info-color: #2196f3;
-
- --bg-primary: #ffffff;
- --bg-secondary: #f5f5f5;
- --bg-dark: #1a1a1a;
-
- --text-primary: #212121;
- --text-secondary: #757575;
- --text-light: #ffffff;
-
- --border-color: #e0e0e0;
- --shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
- --shadow-lg: 0 4px 16px rgba(0, 0, 0, 0.15);
-
- --spacing-xs: 0.5rem;
- --spacing-sm: 1rem;
- --spacing-md: 1.5rem;
- --spacing-lg: 2rem;
- --spacing-xl: 3rem;
-
- --border-radius: 8px;
- --transition: all 0.3s ease;
-}
-
-* {
- margin: 0;
- padding: 0;
- box-sizing: border-box;
-}
-
-body {
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
- 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
- line-height: 1.6;
- color: var(--text-primary);
- background-color: var(--bg-secondary);
-}
-
-.container {
- max-width: 1200px;
- margin: 0 auto;
- padding: 0 var(--spacing-md);
-}
-
-/* Header */
-.header {
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
- color: var(--text-light);
- padding: var(--spacing-md) 0;
- box-shadow: var(--shadow-lg);
- position: sticky;
- top: 0;
- z-index: 1000;
-}
-
-.header-content {
- display: flex;
- justify-content: space-between;
- align-items: center;
-}
-
-.logo h1 {
- font-size: 1.5rem;
- margin-bottom: 0.25rem;
-}
-
-.logo p {
- font-size: 0.875rem;
- opacity: 0.9;
-}
-
-.logo a {
- color: inherit;
- text-decoration: none;
-}
-
-.main-nav {
- display: flex;
- gap: var(--spacing-md);
-}
-
-.main-nav a {
- color: var(--text-light);
- text-decoration: none;
- padding: var(--spacing-xs) var(--spacing-sm);
- border-radius: var(--border-radius);
- transition: var(--transition);
-}
-
-.main-nav a:hover,
-.main-nav a.active {
- background-color: rgba(255, 255, 255, 0.2);
-}
-
-/* Hero Section */
-.hero {
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
- color: var(--text-light);
- padding: var(--spacing-xl) 0;
- text-align: center;
-}
-
-.hero-title {
- font-size: 3rem;
- margin-bottom: var(--spacing-sm);
- font-weight: 700;
-}
-
-.hero-subtitle {
- font-size: 1.25rem;
- margin-bottom: var(--spacing-lg);
- opacity: 0.95;
-}
-
-.hero-stats {
- display: flex;
- justify-content: center;
- gap: var(--spacing-xl);
- flex-wrap: wrap;
-}
-
-.stat {
- display: flex;
- flex-direction: column;
- align-items: center;
-}
-
-.stat-number {
- font-size: 2.5rem;
- font-weight: 700;
- display: block;
-}
-
-.stat-label {
- font-size: 0.875rem;
- opacity: 0.9;
-}
-
-/* Quick Start Section */
-.quick-start {
- padding: var(--spacing-xl) 0;
- background-color: var(--bg-primary);
-}
-
-.quick-start h2 {
- text-align: center;
- font-size: 2rem;
- margin-bottom: var(--spacing-lg);
-}
-
-.cards-grid {
- display: grid;
- grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
- gap: var(--spacing-md);
-}
-
-.card {
- background: var(--bg-primary);
- border: 2px solid var(--border-color);
- border-radius: var(--border-radius);
- padding: var(--spacing-lg);
- text-decoration: none;
- color: inherit;
- transition: var(--transition);
- display: flex;
- flex-direction: column;
-}
-
-.card:hover {
- transform: translateY(-4px);
- box-shadow: var(--shadow-lg);
-}
-
-.card-blue { border-left: 4px solid #2196f3; }
-.card-green { border-left: 4px solid #4caf50; }
-.card-purple { border-left: 4px solid #9c27b0; }
-.card-orange { border-left: 4px solid #ff9800; }
-
-.card-icon {
- font-size: 3rem;
- margin-bottom: var(--spacing-sm);
-}
-
-.card h3 {
- font-size: 1.25rem;
- margin-bottom: var(--spacing-xs);
-}
-
-.card p {
- color: var(--text-secondary);
- margin-bottom: var(--spacing-sm);
- flex-grow: 1;
-}
-
-.card-button {
- color: var(--primary-color);
- font-weight: 600;
- display: inline-block;
- margin-top: auto;
-}
-
-/* Documentation Section */
-.documentation {
- padding: var(--spacing-xl) 0;
- background-color: var(--bg-secondary);
-}
-
-.documentation h2 {
- text-align: center;
- font-size: 2rem;
- margin-bottom: var(--spacing-lg);
-}
-
-.doc-category {
- background: var(--bg-primary);
- border-radius: var(--border-radius);
- padding: var(--spacing-lg);
- margin-bottom: var(--spacing-lg);
- box-shadow: var(--shadow);
-}
-
-.doc-category h3 {
- font-size: 1.5rem;
- margin-bottom: var(--spacing-md);
- padding-bottom: var(--spacing-sm);
- border-bottom: 2px solid var(--border-color);
-}
-
-.doc-list {
- display: flex;
- flex-direction: column;
- gap: var(--spacing-md);
-}
-
-.doc-item {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: var(--spacing-md);
- background: var(--bg-secondary);
- border-radius: var(--border-radius);
- gap: var(--spacing-md);
-}
-
-.doc-info {
- flex: 1;
-}
-
-.doc-item h4 {
- font-size: 1.125rem;
- margin-bottom: var(--spacing-xs);
-}
-
-.doc-item p {
- color: var(--text-secondary);
- margin-bottom: var(--spacing-xs);
-}
-
-.doc-meta {
- display: flex;
- gap: var(--spacing-xs);
- flex-wrap: wrap;
-}
-
-.badge {
- display: inline-block;
- padding: 0.25rem 0.75rem;
- background-color: var(--primary-color);
- color: var(--text-light);
- border-radius: 20px;
- font-size: 0.75rem;
- font-weight: 600;
-}
-
-/* Buttons */
-.btn {
- display: inline-block;
- padding: 0.75rem 1.5rem;
- border: none;
- border-radius: var(--border-radius);
- font-size: 1rem;
- font-weight: 600;
- text-decoration: none;
- cursor: pointer;
- transition: var(--transition);
-}
-
-.btn-primary {
- background-color: var(--primary-color);
- color: var(--text-light);
-}
-
-.btn-primary:hover {
- background-color: #1565c0;
-}
-
-.btn-secondary {
- background-color: var(--secondary-color);
- color: var(--text-light);
-}
-
-.btn-secondary:hover {
- background-color: #303030;
-}
-
-.btn-sm {
- padding: 0.5rem 1rem;
- font-size: 0.875rem;
-}
-
-/* Features Section */
-.features {
- padding: var(--spacing-xl) 0;
- background-color: var(--bg-primary);
-}
-
-.features h2 {
- text-align: center;
- font-size: 2rem;
- margin-bottom: var(--spacing-lg);
-}
-
-.features-grid {
- display: grid;
- grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
- gap: var(--spacing-lg);
-}
-
-.feature {
- text-align: center;
- padding: var(--spacing-lg);
-}
-
-.feature-icon {
- font-size: 3rem;
- margin-bottom: var(--spacing-sm);
-}
-
-.feature h3 {
- font-size: 1.125rem;
- margin-bottom: var(--spacing-xs);
-}
-
-.feature p {
- color: var(--text-secondary);
-}
-
-/* Roles Section */
-.roles {
- padding: var(--spacing-xl) 0;
- background-color: var(--bg-secondary);
-}
-
-.roles h2 {
- text-align: center;
- font-size: 2rem;
- margin-bottom: var(--spacing-lg);
-}
-
-.roles-grid {
- display: grid;
- grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
- gap: var(--spacing-md);
-}
-
-.role-card {
- background: var(--bg-primary);
- border-radius: var(--border-radius);
- padding: var(--spacing-lg);
- box-shadow: var(--shadow);
-}
-
-.role-card h3 {
- font-size: 1.25rem;
- margin-bottom: var(--spacing-sm);
- padding-bottom: var(--spacing-sm);
- border-bottom: 2px solid var(--border-color);
-}
-
-.role-card ul {
- list-style: none;
- margin-bottom: var(--spacing-md);
-}
-
-.role-card li {
- padding: var(--spacing-xs) 0;
- color: var(--text-secondary);
-}
-
-.role-card li::before {
- content: "β ";
- color: var(--success-color);
- font-weight: bold;
- margin-right: var(--spacing-xs);
-}
-
-/* Footer */
-.footer {
- background-color: var(--bg-dark);
- color: var(--text-light);
- padding: var(--spacing-xl) 0 var(--spacing-md);
-}
-
-.footer-content {
- display: grid;
- grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
- gap: var(--spacing-lg);
- margin-bottom: var(--spacing-lg);
-}
-
-.footer-section h4 {
- margin-bottom: var(--spacing-sm);
-}
-
-.footer-section p,
-.footer-section a {
- color: rgba(255, 255, 255, 0.7);
- text-decoration: none;
- display: block;
- margin-bottom: var(--spacing-xs);
-}
-
-.footer-section a:hover {
- color: var(--text-light);
-}
-
-.footer-bottom {
- text-align: center;
- padding-top: var(--spacing-md);
- border-top: 1px solid rgba(255, 255, 255, 0.1);
- color: rgba(255, 255, 255, 0.7);
-}
-
-/* Viewer Layout */
-.viewer-container {
- display: flex;
- min-height: calc(100vh - 80px);
-}
-
-.sidebar {
- width: 280px;
- background: var(--bg-primary);
- border-right: 1px solid var(--border-color);
- position: sticky;
- top: 80px;
- height: calc(100vh - 80px);
- overflow-y: auto;
- flex-shrink: 0;
-}
-
-.sidebar-header {
- padding: var(--spacing-md);
- border-bottom: 1px solid var(--border-color);
-}
-
-.sidebar-nav {
- padding: var(--spacing-md);
-}
-
-.nav-section {
- margin-bottom: var(--spacing-lg);
-}
-
-.nav-section h4 {
- font-size: 0.875rem;
- color: var(--text-secondary);
- text-transform: uppercase;
- margin-bottom: var(--spacing-sm);
-}
-
-.nav-link {
- display: flex;
- align-items: center;
- gap: var(--spacing-xs);
- padding: var(--spacing-xs) var(--spacing-sm);
- color: var(--text-primary);
- text-decoration: none;
- border-radius: var(--border-radius);
- transition: var(--transition);
- margin-bottom: 0.25rem;
-}
-
-.nav-link:hover,
-.nav-link.active {
- background-color: var(--bg-secondary);
-}
-
-.nav-icon {
- font-size: 1.125rem;
-}
-
-.viewer-main {
- flex: 1;
- display: flex;
- flex-direction: column;
-}
-
-.viewer-toolbar {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: var(--spacing-sm) var(--spacing-md);
- background: var(--bg-primary);
- border-bottom: 1px solid var(--border-color);
- position: sticky;
- top: 80px;
- z-index: 100;
-}
-
-.toolbar-left,
-.toolbar-right {
- display: flex;
- gap: var(--spacing-sm);
- align-items: center;
-}
-
-.doc-selector {
- padding: 0.5rem;
- border: 1px solid var(--border-color);
- border-radius: var(--border-radius);
- background: var(--bg-primary);
- font-size: 0.875rem;
-}
-
-.document-content {
- flex: 1;
- padding: var(--spacing-lg);
- max-width: 900px;
- margin: 0 auto;
- width: 100%;
-}
-
-/* Markdown Styles */
-.markdown-body {
- font-size: 1rem;
- line-height: 1.7;
-}
-
-.markdown-body h1,
-.markdown-body h2,
-.markdown-body h3,
-.markdown-body h4 {
- margin-top: var(--spacing-lg);
- margin-bottom: var(--spacing-sm);
- line-height: 1.3;
-}
-
-.markdown-body h1 { font-size: 2.5rem; }
-.markdown-body h2 { font-size: 2rem; border-bottom: 2px solid var(--border-color); padding-bottom: var(--spacing-xs); }
-.markdown-body h3 { font-size: 1.5rem; }
-.markdown-body h4 { font-size: 1.25rem; }
-
-.markdown-body p {
- margin-bottom: var(--spacing-sm);
-}
-
-.markdown-body ul,
-.markdown-body ol {
- margin-bottom: var(--spacing-sm);
- padding-left: var(--spacing-lg);
-}
-
-.markdown-body li {
- margin-bottom: 0.5rem;
-}
-
-.markdown-body code {
- background-color: var(--bg-secondary);
- padding: 0.2rem 0.4rem;
- border-radius: 4px;
- font-family: 'Courier New', monospace;
- font-size: 0.9em;
-}
-
-.markdown-body pre {
- background-color: var(--bg-dark);
- color: var(--text-light);
- padding: var(--spacing-md);
- border-radius: var(--border-radius);
- overflow-x: auto;
- margin-bottom: var(--spacing-md);
-}
-
-.markdown-body pre code {
- background: none;
- padding: 0;
-}
-
-.markdown-body blockquote {
- border-left: 4px solid var(--primary-color);
- padding-left: var(--spacing-md);
- margin: var(--spacing-md) 0;
- color: var(--text-secondary);
-}
-
-.markdown-body table {
- width: 100%;
- border-collapse: collapse;
- margin-bottom: var(--spacing-md);
-}
-
-.markdown-body th,
-.markdown-body td {
- border: 1px solid var(--border-color);
- padding: var(--spacing-xs) var(--spacing-sm);
- text-align: left;
-}
-
-.markdown-body th {
- background-color: var(--bg-secondary);
- font-weight: 600;
-}
-
-.markdown-body a {
- color: var(--primary-color);
- text-decoration: none;
-}
-
-.markdown-body a:hover {
- text-decoration: underline;
-}
-
-.markdown-body img {
- max-width: 100%;
- height: auto;
- border-radius: var(--border-radius);
- margin: var(--spacing-md) 0;
-}
-
-/* Table of Contents */
-.toc {
- position: fixed;
- right: var(--spacing-md);
- top: 200px;
- width: 250px;
- max-height: calc(100vh - 250px);
- overflow-y: auto;
- background: var(--bg-primary);
- border: 1px solid var(--border-color);
- border-radius: var(--border-radius);
- padding: var(--spacing-md);
- box-shadow: var(--shadow);
-}
-
-.toc h4 {
- margin-bottom: var(--spacing-sm);
- font-size: 0.875rem;
-}
-
-#toc-content {
- font-size: 0.875rem;
-}
-
-#toc-content a {
- display: block;
- padding: 0.25rem 0;
- color: var(--text-secondary);
- text-decoration: none;
- transition: var(--transition);
-}
-
-#toc-content a:hover {
- color: var(--primary-color);
-}
-
-/* Loading & Error States */
-.loading {
- text-align: center;
- padding: var(--spacing-xl);
-}
-
-.spinner {
- border: 4px solid var(--border-color);
- border-top: 4px solid var(--primary-color);
- border-radius: 50%;
- width: 50px;
- height: 50px;
- animation: spin 1s linear infinite;
- margin: 0 auto var(--spacing-md);
-}
-
-@keyframes spin {
- 0% { transform: rotate(0deg); }
- 100% { transform: rotate(360deg); }
-}
-
-.error {
- text-align: center;
- padding: var(--spacing-xl);
- color: var(--error-color);
-}
-
-/* Responsive Design */
-@media (max-width: 1200px) {
- .toc {
- display: none;
- }
-}
-
-@media (max-width: 768px) {
- .hero-title {
- font-size: 2rem;
- }
-
- .sidebar {
- position: fixed;
- left: -280px;
- transition: left 0.3s ease;
- z-index: 1001;
- }
-
- .sidebar.active {
- left: 0;
- }
-
- .main-nav {
- flex-direction: column;
- gap: var(--spacing-xs);
- }
-
- .header-content {
- flex-direction: column;
- gap: var(--spacing-sm);
- }
-
- .cards-grid,
- .features-grid,
- .roles-grid {
- grid-template-columns: 1fr;
- }
-
- .doc-item {
- flex-direction: column;
- }
-}
-
-@media (max-width: 480px) {
- .hero-title {
- font-size: 1.5rem;
- }
-
- .hero-stats {
- flex-direction: column;
- gap: var(--spacing-md);
- }
-}
-
-/* Print Styles */
-@media print {
- .header,
- .sidebar,
- .viewer-toolbar,
- .toc,
- .footer {
- display: none;
- }
-
- .viewer-main {
- max-width: 100%;
- }
-
- .markdown-body {
- max-width: 100%;
- }
-}
diff --git a/Documentation/public/index.html b/Documentation/public/index.html
deleted file mode 100644
index 7b920e9..0000000
--- a/Documentation/public/index.html
+++ /dev/null
@@ -1,337 +0,0 @@
-
-
-
-
-
-
- Goa-GEL Documentation
-
-
-
-
-
-
-
-
-
-
-
π Platform Documentation
-
Complete guides for all users, testers, and developers
-
-
- 5
- Comprehensive Guides
-
-
- 3,000+
- Lines of Documentation
-
-
- 8
- User Roles Covered
-
-
-
-
-
-
-
-
-
π― Quick Start - Choose Your Path
-
-
-
-
-
-
-
-
π Complete Documentation Library
-
-
-
-
π₯ User Documentation
-
-
-
-
π User Guide
-
Complete manual for all user roles - Administrators, Department Officers, and Citizens
-
- 650+ lines
- All Roles
- Step-by-Step
-
-
-
Read Guide
-
-
-
-
π Documentation Index
-
Master navigation guide with role-based learning paths
-
- Quick Navigation
- 11 Guides
-
-
View Index
-
-
-
-
-
-
-
π§ͺ Testing & QA
-
-
-
-
π§ͺ E2E Testing Guide
-
Comprehensive testing scenarios covering complete license approval workflow
-
- 600+ lines
- 20 Scenarios
- QA Ready
-
-
-
Open Testing Guide
-
-
-
-
-
-
-
π» Developer Documentation
-
-
-
-
π Implementation Complete
-
Complete implementation status, components created, and API endpoints
-
- 100% Complete
- 45+ Components
- 13 Endpoints
-
-
-
View Status
-
-
-
-
-
ποΈ Architecture Guide
-
Technical architecture, blockchain integration, and deployment
-
- 1000+ lines
- C4 Model
- Deep Dive
-
-
-
Read Architecture
-
-
-
-
-
β‘ Quick Start
-
Set up and run the platform locally in minutes
-
- Setup Guide
- 10 mins
-
-
-
Quick Setup
-
-
-
-
-
-
-
-
-
-
β¨ Documentation Features
-
-
-
π±
-
Mobile Friendly
-
Responsive design works on all devices
-
-
-
π
-
Searchable
-
Quick search across all documentation
-
-
-
π¨
-
Syntax Highlighting
-
Beautiful code examples with highlighting
-
-
-
π₯
-
Downloadable
-
Download guides as PDF or Markdown
-
-
-
π
-
Multi-Language
-
English with Hindi translations coming soon
-
-
-
π
-
Always Updated
-
Documentation synced with platform updates
-
-
-
-
-
-
-
-
-
π€ Documentation by Role
-
-
-
π¨βπΌ Administrator
-
- - Admin portal guide
- - Department onboarding
- - User management
- - Monitoring dashboards
-
-
View Guide
-
-
-
-
ποΈ Department Officer
-
- - Application review
- - Approval workflow
- - Document verification
- - Change requests
-
-
View Guide
-
-
-
-
π₯ Citizen
-
- - Account creation
- - License application
- - Document upload
- - Status tracking
-
-
View Guide
-
-
-
-
π» Developer
-
- - Setup & installation
- - Code architecture
- - API documentation
- - Deployment guide
-
-
View Guide
-
-
-
-
π§ͺ QA Engineer
-
- - Test scenarios
- - E2E workflows
- - Error testing
- - Performance tests
-
-
View Guide
-
-
-
-
π§ DevOps
-
- - Docker deployment
- - Infrastructure setup
- - Monitoring config
- - Security hardening
-
-
View Guide
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Documentation/public/js/main.js b/Documentation/public/js/main.js
deleted file mode 100644
index 2b9d6ec..0000000
--- a/Documentation/public/js/main.js
+++ /dev/null
@@ -1,27 +0,0 @@
-// Main.js - Homepage functionality
-
-document.addEventListener('DOMContentLoaded', function() {
- console.log('Goa-GEL Documentation loaded');
-
- // Smooth scrolling for anchor links
- document.querySelectorAll('a[href^="#"]').forEach(anchor => {
- anchor.addEventListener('click', function (e) {
- e.preventDefault();
- const target = document.querySelector(this.getAttribute('href'));
- if (target) {
- target.scrollIntoView({
- behavior: 'smooth',
- block: 'start'
- });
- }
- });
- });
-
- // Highlight active navigation link
- const currentPath = window.location.pathname;
- document.querySelectorAll('.main-nav a').forEach(link => {
- if (link.getAttribute('href') === currentPath) {
- link.classList.add('active');
- }
- });
-});
diff --git a/Documentation/public/js/viewer.js b/Documentation/public/js/viewer.js
deleted file mode 100644
index 5e02341..0000000
--- a/Documentation/public/js/viewer.js
+++ /dev/null
@@ -1,322 +0,0 @@
-// Viewer.js - Document viewer functionality
-
-// Configuration
-const DOC_MAP = {
- 'USER_GUIDE': '/docs/USER_GUIDE.md',
- 'E2E_TESTING_GUIDE': '/docs/E2E_TESTING_GUIDE.md',
- 'IMPLEMENTATION_COMPLETE': '/docs/IMPLEMENTATION_COMPLETE.md',
- 'ARCHITECTURE_GUIDE': '/docs/ARCHITECTURE_GUIDE.md',
- 'QUICK_START': '/docs/QUICK_START.md',
- 'DOCUMENTATION_INDEX': '/docs/DOCUMENTATION_INDEX.md',
- 'IMPLEMENTATION_SUMMARY': '/docs/IMPLEMENTATION_SUMMARY.md'
-};
-
-let currentDoc = null;
-let sidebarOpen = true;
-
-// Initialize on page load
-document.addEventListener('DOMContentLoaded', function() {
- initViewer();
- setupEventListeners();
- loadDocumentFromURL();
-});
-
-function initViewer() {
- // Configure marked.js
- if (typeof marked !== 'undefined') {
- marked.setOptions({
- breaks: true,
- gfm: true,
- highlight: function(code, lang) {
- if (typeof hljs !== 'undefined' && lang && hljs.getLanguage(lang)) {
- try {
- return hljs.highlight(code, { language: lang }).value;
- } catch (err) {
- console.error('Highlight error:', err);
- }
- }
- return code;
- }
- });
- }
-}
-
-function setupEventListeners() {
- // Sidebar toggle
- const toggleBtn = document.getElementById('toggle-sidebar');
- if (toggleBtn) {
- toggleBtn.addEventListener('click', toggleSidebar);
- }
-
- // Document selector
- const docSelector = document.getElementById('doc-selector');
- if (docSelector) {
- docSelector.addEventListener('change', function() {
- if (this.value) {
- loadDocument(this.value);
- }
- });
- }
-
- // Print button
- const printBtn = document.getElementById('print-doc');
- if (printBtn) {
- printBtn.addEventListener('click', function() {
- window.print();
- });
- }
-
- // Download button
- const downloadBtn = document.getElementById('download-doc');
- if (downloadBtn) {
- downloadBtn.addEventListener('click', downloadCurrentDoc);
- }
-
- // Sidebar navigation links
- document.querySelectorAll('.sidebar-nav .nav-link').forEach(link => {
- link.addEventListener('click', function(e) {
- e.preventDefault();
- const url = this.getAttribute('href');
- const params = new URLSearchParams(url.split('?')[1]);
- const doc = params.get('doc');
- if (doc) {
- loadDocument(doc);
- updateURL(doc);
- }
- });
- });
-}
-
-function loadDocumentFromURL() {
- const params = new URLSearchParams(window.location.search);
- const doc = params.get('doc');
- if (doc && DOC_MAP[doc]) {
- loadDocument(doc);
- } else {
- showError('No document specified. Please select a document from the navigation.');
- }
-}
-
-async function loadDocument(docKey) {
- const docPath = DOC_MAP[docKey];
- if (!docPath) {
- showError(`Document "${docKey}" not found`);
- return;
- }
-
- currentDoc = docKey;
- showLoading();
- hideError();
-
- try {
- const response = await fetch(docPath);
- if (!response.ok) {
- throw new Error(`HTTP error! status: ${response.status}`);
- }
-
- const markdown = await response.text();
- renderMarkdown(markdown);
- generateTOC();
- updateActiveNav(docKey);
- updateDocSelector(docKey);
- updateURL(docKey);
-
- // Scroll to top
- window.scrollTo(0, 0);
- } catch (error) {
- console.error('Error loading document:', error);
- showError(`Failed to load document: ${error.message}`);
- } finally {
- hideLoading();
- }
-}
-
-function renderMarkdown(markdown) {
- const contentDiv = document.getElementById('content');
- if (!contentDiv) return;
-
- try {
- // Parse markdown to HTML
- const html = marked.parse(markdown);
-
- // Sanitize HTML using DOMPurify if available, otherwise use trusted content
- const safeHTML = (typeof DOMPurify !== 'undefined')
- ? DOMPurify.sanitize(html, { ADD_ATTR: ['target'] })
- : html;
-
- contentDiv.innerHTML = safeHTML;
-
- // Syntax highlighting for code blocks
- if (typeof hljs !== 'undefined') {
- contentDiv.querySelectorAll('pre code').forEach((block) => {
- hljs.highlightElement(block);
- });
- }
-
- // Make external links open in new tab
- contentDiv.querySelectorAll('a[href^="http"]').forEach(link => {
- link.setAttribute('target', '_blank');
- link.setAttribute('rel', 'noopener noreferrer');
- });
-
- // Add IDs to headings for anchor links
- contentDiv.querySelectorAll('h1, h2, h3, h4, h5, h6').forEach((heading, index) => {
- if (!heading.id) {
- heading.id = `heading-${index}`;
- }
- });
-
- } catch (error) {
- console.error('Error rendering markdown:', error);
- showError(`Failed to render document: ${error.message}`);
- }
-}
-
-function generateTOC() {
- const tocContent = document.getElementById('toc-content');
- const content = document.getElementById('content');
-
- if (!tocContent || !content) return;
-
- const headings = content.querySelectorAll('h2, h3');
- if (headings.length === 0) {
- tocContent.textContent = 'No headings found';
- return;
- }
-
- // Clear existing content
- tocContent.innerHTML = '';
-
- // Create TOC links using DOM methods
- headings.forEach(heading => {
- const level = heading.tagName.toLowerCase();
- const text = heading.textContent;
- const id = heading.id || `heading-${text.replace(/\s+/g, '-').toLowerCase()}`;
- heading.id = id;
-
- const link = document.createElement('a');
- link.href = `#${id}`;
- link.textContent = text;
-
- if (level === 'h3') {
- link.style.marginLeft = '1rem';
- }
-
- link.addEventListener('click', function(e) {
- e.preventDefault();
- const target = document.getElementById(id);
- if (target) {
- target.scrollIntoView({ behavior: 'smooth', block: 'start' });
- }
- });
-
- tocContent.appendChild(link);
- });
-}
-
-function toggleSidebar() {
- const sidebar = document.querySelector('.sidebar');
- const icon = document.getElementById('sidebar-icon');
-
- if (sidebar) {
- sidebarOpen = !sidebarOpen;
- sidebar.classList.toggle('active');
- if (icon) {
- icon.textContent = sidebarOpen ? 'β°' : 'β';
- }
- }
-}
-
-function updateActiveNav(docKey) {
- document.querySelectorAll('.sidebar-nav .nav-link').forEach(link => {
- link.classList.remove('active');
- const url = link.getAttribute('href');
- if (url && url.includes(`doc=${docKey}`)) {
- link.classList.add('active');
- }
- });
-}
-
-function updateDocSelector(docKey) {
- const selector = document.getElementById('doc-selector');
- if (selector) {
- selector.value = docKey;
- }
-}
-
-function updateURL(docKey) {
- const newURL = `${window.location.pathname}?doc=${docKey}`;
- window.history.pushState({ doc: docKey }, '', newURL);
-}
-
-function downloadCurrentDoc() {
- if (!currentDoc) {
- alert('No document loaded');
- return;
- }
-
- const docPath = DOC_MAP[currentDoc];
- const filename = docPath.split('/').pop();
-
- fetch(docPath)
- .then(response => response.text())
- .then(text => {
- const blob = new Blob([text], { type: 'text/markdown' });
- const url = URL.createObjectURL(blob);
- const a = document.createElement('a');
- a.href = url;
- a.download = filename;
- document.body.appendChild(a);
- a.click();
- document.body.removeChild(a);
- URL.revokeObjectURL(url);
- })
- .catch(error => {
- console.error('Download error:', error);
- alert('Failed to download document');
- });
-}
-
-function showLoading() {
- const loading = document.getElementById('loading');
- const content = document.getElementById('content');
-
- if (loading) loading.style.display = 'block';
- if (content) content.style.display = 'none';
-}
-
-function hideLoading() {
- const loading = document.getElementById('loading');
- const content = document.getElementById('content');
-
- if (loading) loading.style.display = 'none';
- if (content) content.style.display = 'block';
-}
-
-function showError(message) {
- const error = document.getElementById('error');
- const errorMessage = document.getElementById('error-message');
- const content = document.getElementById('content');
-
- if (error) error.style.display = 'block';
- if (errorMessage) errorMessage.textContent = message;
- if (content) content.style.display = 'none';
-}
-
-function hideError() {
- const error = document.getElementById('error');
- if (error) error.style.display = 'none';
-}
-
-// Handle browser back/forward buttons
-window.addEventListener('popstate', function(event) {
- if (event.state && event.state.doc) {
- loadDocument(event.state.doc);
- }
-});
-
-// Search functionality (future enhancement)
-function searchDocumentation(query) {
- // TODO: Implement search across all documentation
- console.log('Search query:', query);
-}
diff --git a/Documentation/public/logo.svg b/Documentation/public/logo.svg
new file mode 100644
index 0000000..b316b58
--- /dev/null
+++ b/Documentation/public/logo.svg
@@ -0,0 +1,13 @@
+
diff --git a/Documentation/public/viewer.html b/Documentation/public/viewer.html
deleted file mode 100644
index 0fecf88..0000000
--- a/Documentation/public/viewer.html
+++ /dev/null
@@ -1,146 +0,0 @@
-
-
-
-
-
- Documentation Viewer - Goa-GEL
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Loading documentation...
-
-
-
β οΈ Error Loading Document
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Documentation/testing/index.md b/Documentation/testing/index.md
new file mode 100644
index 0000000..69391d6
--- /dev/null
+++ b/Documentation/testing/index.md
@@ -0,0 +1,58 @@
+# Testing Guide
+
+## Test Environments
+
+| Environment | Purpose | URL |
+|-------------|---------|-----|
+| Development | Local testing | localhost:4200 |
+| Staging | Pre-production validation | staging.tlas.gov.in |
+| Production | Live system | tlas.gov.in |
+
+## Test Categories
+
+### Functional Testing
+
+Verify all features work as expected:
+- Application submission flow
+- Document upload and validation
+- Workflow progression
+- Certificate issuance
+- Verification portal
+
+### Integration Testing
+
+Verify external integrations:
+- DigiLocker authentication
+- Payment gateway
+- SMS notifications
+- Email delivery
+
+### Performance Testing
+
+Verify system under load:
+- Concurrent user capacity
+- Response time under load
+- Database query performance
+- File upload throughput
+
+### Security Testing
+
+Verify security controls:
+- Authentication bypass attempts
+- Authorization enforcement
+- Input validation
+- Session management
+
+## Test Credentials
+
+| Role | Username | Password |
+|------|----------|----------|
+| Admin | admin@tlas.gov.in | (contact IT) |
+| Department | dept.test@tlas.gov.in | (contact IT) |
+| Applicant | (use DigiLocker sandbox) | - |
+
+## Reporting Issues
+
+Report test failures to:
+- Email: qa@tlas.gov.in
+- Include: Steps to reproduce, expected vs actual result, screenshots