Conversation
…ervice architecture
…ing email failure events.
Rename container_name fields to sl-<service> (prod) and sl-<service>-dev (dev) for consistent grouping in `docker ps`. Adds missing container_name for nginx and db services. Service keys unchanged so inter-service DNS remains intact.
Fold the standalone simulation-oops.html page into the main SPA as an
unauthenticated branch in main.tsx, rendering SimulationOops directly when
the request path matches /oops. Removes the Vite multi-entry build and the
dedicated entry file, leaving a single HTML + single bundle graph.
- main.tsx: add /oops branch before EmailEntry/App selection
- vite.config.ts: drop rollupOptions multi-input
- delete simulation-oops.html and simulation-oops-entry.tsx
- .dockerignore: drop simulation-oops.html exclusion
- api tracking redirect: {WEB_URL}/simulation-oops.html -> {WEB_URL}/oops
- tests: update expected redirect URL
- nginx.securelearning.conf: modernize with SSL/TLS and proxy buffers to
match nginx.mednat.conf style for parity
- Rewrite root README.md with architecture diagram, setup guide, and accurate tech stack - Add CLAUDE.md with codebase context for AI coding assistants - Add api/README.md with structure, architecture patterns, and route reference - Add web/README.md with theming system, auth flow, and component guidelines - Rewrite smtp/README.md with message flow, config, and error handling - Rewrite deployment/README.md with services table, env config, and health checks - Remove roadmap section and template boilerplate from root README
- rabbitmq: install gettext-base for envsubst (missing in base image) - mongo: replace process.env with _getEnv() (mongo shell compat) - mongo: rename MONGO_APP_USER → MONGO_USER to match .env - mongo: mount templates/ dir for seed data in dev compose
Move all page components directly into their TanStack route files so each route is self-contained. Shared TemplatesPage (used by /templates and /content-manager/templates) moves to src/components/templates-page.tsx. Deletes the src/Pages/ directory entirely.
Set missing KEYCLOAK_URL/CLIENT_SECRET env vars in tests to prevent import-time exception when realm_routes initializes platform admin service. Update tracking_consumer test to use refactored TrackingConsumer class API instead of removed process_tracking_message function.
Replace per-folder sonar.properties files with root multi-module config using PEI-SecureLearning_core key. Modules api, web, smtp now analyzed under single project with separate metric tracking in UI.
Lint ReportResult: Download Full Lint Log |
Lint ReportResult: Download Full Lint Log |
…guration, and update dependencies
This comment was marked as spam.
This comment was marked as spam.
…add pre-commit hooks for code quality
Lint ReportResult: Download Full Lint Log |
Lint ReportResult: Download Full Lint Log |
Lint ReportResult: Download Full Lint Log |
Lint ReportResult: Download Full Lint Log |
|


Summary
This PR bundles infrastructure and web refactoring work from the ci branch:
Docker container naming — standardized
container_nametosl-<service>(prod) andsl-<service>-dev(dev). Service keys (DNS) unchanged; cosmetic rename.Single SPA entry — consolidated
simulation-oops.htmlinto main app at/oopsroute. Removes multi-entry Vite build, simplifies deployment.Unified routing — eliminated
web/src/Pages/thin wrappers. All 6 page components inlined into TanStack route files per existing convention. Shared templates page atsrc/components/templates-page.tsx.Nginx SSL — updated
nginx.securelearning.confto matchnginx.mednat.confTLS config.CI/CD pipelines (c6edb25) — standardized GitHub Actions workflows (
ci-api.yml,ci-web.yml,ci-smtp.yml,e2e-test.yml,cd.yml), automated container builds, deployment validation.Deployment architecture (5609d9d) — fixed RabbitMQ and MongoDB init failures on fresh start.
Project documentation (84d5ac1) — rewrote CLAUDE.md and all docs for clarity.
Tracking system (64a4907) — refactored tracking consumer to class, added email failure event support.
Files Changed
Docker Compose:
deployment/docker-compose.yml+docker-compose.dev.yml—container_namefieldsWeb app:
web/src/main.tsx—/oopsbranch before Keycloak wrapweb/vite.config.ts— removed multi-entryrollupOptionsweb/.dockerignore— removedsimulation-oops.htmlweb/simulation-oops.html,web/src/simulation-oops-entry.tsx— deletedweb/src/routes/{usergroups,campaigns,sending-profiles,templates,content-manager/templates}— inlined Pages componentsweb/src/components/templates-page.tsx— new (moved from Pages)web/src/Pages/— directory deletedAPI:
api/src/routers/tracking.py— redirect to/oopsapi/test/test_tracking_endpoints.py— updated expected redirectDeployment:
deployment/nginx.securelearning.conf— SSL/TLS + proxy buffer headersCI/CD Integration
ci-web.ymlvalidates build, types, linting — passingci-api.ymltests routing and tracking — passinge2e-test.yml,playwright.yml— SPA routes coveredcd.ymldeployment pipeline — container names cosmetic change, DNS unaffectedNotes
container_nameis cosmetic./oopsunauthenticated route (email clickthrough target) branched before Keycloak wrap inmain.tsx.docker compose downbefore firstup.nginx.securelearning.confis template (not currently mounted in compose).