diff --git a/.env.example b/.env.example
index c661be4..8006cdd 100644
--- a/.env.example
+++ b/.env.example
@@ -47,6 +47,16 @@ LOCALSTACK_AWS_SECRET_ACCESS_KEY=test
LOCALSTACK_AWS_SESSION_TOKEN=
+# -----------------------------------------------------------------------------
+# Frontend SPA statico locale (S3 LocalStack + CDN/edge locale)
+# -----------------------------------------------------------------------------
+# Queste variabili riguardano SOLO il serving della SPA Angular.
+# Non usarle per i documenti e non sostituirle con bucket S3 reali.
+# I documenti restano governati da POC_DOCUMENT_DISK/AWS_REAL_* più sotto.
+FRONTEND_STATIC_BUCKET=poc-frontend-static-local
+EDGE_CDN_LOCAL_URL=https://localhost:8443
+
+
# -----------------------------------------------------------------------------
# Porte pubblicate sull'host (lato sinistro = porta sulla tua macchina)
# -----------------------------------------------------------------------------
@@ -194,4 +204,4 @@ TEXTRACT_MAX_BYTES=0
BEDROCK_ENABLED=true
BEDROCK_REGION=
BEDROCK_ENDPOINT=
-BEDROCK_MODEL_ID=amazon.nova-lite-v1:0
\ No newline at end of file
+BEDROCK_MODEL_ID=amazon.nova-lite-v1:0
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index d90f418..97f0541 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -15,7 +15,7 @@ on:
branches:
- develop
- main
- - migration/new_techs
+ - migrate/react_angular
tags:
- "v*"
pull_request:
@@ -131,6 +131,9 @@ jobs:
- name: Check generated client is committed
run: git diff --exit-code -- apps/frontend/src/api/generated
+ - name: Lint SPA
+ run: docker compose --profile tools run --rm node npm run frontend:lint
+
- name: Typecheck SPA
run: docker compose --profile tools run --rm node npm run frontend:typecheck
@@ -190,7 +193,9 @@ jobs:
# L'archivio viene caricato in cache dal post-step di actions/cache
- name: Save image archive for cache
if: steps.image-cache.outputs.cache-hit != 'true'
- run: docker save $(cat /tmp/ci-images.txt) | zstd -T0 -o /tmp/ci-images.tar.zst
+ run: |
+ mapfile -t images < /tmp/ci-images.txt
+ docker save "${images[@]}" | zstd -T0 -o /tmp/ci-images.tar.zst
# --- Check statici senza build (fail fast) ---
@@ -251,6 +256,15 @@ jobs:
- name: Apply LocalStack infrastructure
run: docker compose --profile tools run --rm terraform init && docker compose --profile tools run --rm terraform apply -auto-approve
+ # Il percorso di serving default e' Traefik -> edge-cdn -> S3
+ # LocalStack: lo smoke e gli audit a11y devono colpire la SPA realmente
+ # caricata nel bucket, non un bucket vuoto. Si riusa la stessa logica di
+ # make setup (build + sync con cache-control differenziato).
+ - name: Build and deploy Angular SPA to LocalStack S3
+ run: |
+ make frontend-build
+ make frontend-s3-local-upload
+
- name: Run migrations
run: docker compose --profile release run --rm migrate
@@ -295,6 +309,11 @@ jobs:
echo "$spa_headers" | grep -i '^content-security-policy:' | grep -F "frame-ancestors 'none'"
echo "$spa_headers" | grep -i '^x-content-type-options: nosniff'
echo "$spa_headers" | grep -i '^referrer-policy: strict-origin-when-cross-origin'
+
+ # La SPA Angular deve essere servita da S3 LocalStack via edge-cdn,
+ # sia sulla root sia su un deep link (fallback SPA verso index.html)
+ curl --silent --fail --insecure https://localhost:8443/ | grep -q '
+
+
+
+
+
+
|
- Application - - - - |
-
- Data & Storage - - - |
-
- Workflow & AI - - - - |
-
- Observability - - - - |
-
|
- CI / Quality Gate - - |
-
NEXUM
++ Inserisci cosa comunicare e pochi parametri editoriali. Genera la bozza e rivedi titolo e testo nell'anteprima. +
+ +{{ status() }}
+| Destinatario | +Documento | +File | +Data | +Conf. | +Stato | +Azioni | +
|---|---|---|---|---|---|---|
| + + {{ formatFallback(documentItem.employee, "Destinatario rilevato") }} + {{ formatFallback(documentItem.company) }} + + | ++ {{ formatFallback(documentItem.title || documentItem.type, "Documento") }} + | +{{ formatFallback(documentItem.file) }} | ++ {{ formatFallback(documentItem.date) }} + | ++ {{ formatFallback(documentItem.confidence, "Da verificare") }} + | +
+ |
+ + + | +
+ Il sistema analizza automaticamente il documento dopo il caricamento e restituisce i campi rilevati + nella verifica. +
+{{ status() }}
+Anteprima documento
+Dati estratti dall'OCR
+{{ document.error }}
+ } + @if (reviewError()) { +{{ reviewError() }}
+ } + + +