Skip to content

Repository files navigation

🌐 GuicedEE Website

JDK Build License

This repository powers the public GuicedEE website hosted at https://guicedee.com, presenting the entire GuicedEE ecosystem with the documentation, samples, and builder tools consumers expect.

✨ Site Vision

  • Surface every GuicedEE module and plugin alongside its capabilities so users can discover, inspect, and compose the platform into new apps.
  • Provide a dedicated Services directory that highlights each modular service offering and explains how it plugs into the larger GuicedEE stack.
  • Offer an Application Builder UI that lets visitors choose GuicedEE modules/plugins, configure settings, and download a ready-to-run ZIP containing the generated source package tailored to their selections.
  • Treat GuicedVertx and GuicedInject as implicit foundations for every construction flow; they are assumed by default whenever GuicedEE modules are composed.
  • Host a single monolithic boot implementation that invokes IGuiceContext.inject() so the site remains focused and simple for visitors (no multi-module boot wiring is required on the site itself).
  • Document hosting/security expectations: the site runs on Azure Container Apps behind the platform's managed ingress (TLS termination + Azure edge protection) and remains otherwise open to the public.
  • Curate extensive media-rich write-ups and imagery for each module, service, and plugin, enabling the marketing/evangelism story to come alive alongside the data and application builder.
  • Generate every page with the JWebMP/WebAwesome stack so that the WebAwesome components (WaButton, WaInput, WaCluster, WaStack, etc.) drive the layout, styling, and interactive media galleries.
  • Define the primary navigation and page structure using WebAwesome’s WaPage/WaMenu paradigms: a Home page that narrates the platform story, a Capabilities page for features breakdown, a Services catalog page, the App Builder page, and supporting destinations for releases, media, and onboarding resources.

🧩 Module Catalog (everything under GuicedEE/)

  • cdi (migration and compatibility — not a foundation module)
  • cerial
  • client
  • config
  • inject
  • openapi
  • persistence
  • rabbitmq
  • representations
  • rest
  • swagger-ui
  • telemetry
  • vertx
  • web
  • webservices
  • websockets
  • (catalog is a curated static list defined in ModuleCatalog; it intentionally excludes non-modular directories like bom, parent, services, and the website itself)

Each catalog entry links to its documentation, release notes, and live demos wherever available.

⚙️ Plugin & Stack Spotlight

Note: This section describes the technology used to build and run this website itself (not the output of the Application Builder).

  • Website UI: TypeScript front end using JWebMP foundations, WebAwesome, and WebAwesome Pro with component names WaButton, WaInput, WaCluster, and WaStack (see GUIDES.md).
  • Java 25 + Maven backend powered through the GuicedEE/parent BOM chain and the guice-inject-client dependency; logging via Log4j2 with Lombok @Log4j2 helpers.
  • MapStruct for DTO-to-model transformations, Mermaid for diagrams (served from docs/architecture/ via Mermaid MCP), and CRTP-based fluent APIs across shared modules.

🌀 Modular Services Section

This site’s Services section lists a complete, statically-defined set of modularized services (no filesystem scanning at runtime), currently covering:

  • Apache Commons: commons-beanutils, commons-collections, commons-csv, commons-fileupload, commons-math
  • Apache CXF (Web Services): apache-cxf, apache-cxf-rt-security, apache-cxf-rt-transports-http
  • Apache POI: apache-poi, apache-poi-ooxml
  • Database Drivers: msal4j, mssql-jdbc, postgresql
  • Google: aop, guice-core, guice-assistedinject, guice-grapher, guice-jmx, guice-jndi
  • Hibernate: hibernate-core, hibernate-reactive, hibernate-validator
  • JCache: cache-annotations-ri-common, cache-annotations-ri-guice, cache-api, ehcache, hazelcast, hazelcast-hibernate
  • JNI: jna-platform, nrjavaserial
  • Jakarta: jakarta-security-jacc
  • Libraries: bcrypt, cloudevents, ibm-mq, jandex, javassist, json, kafka-client, mapstruct, openpdf, rabbitmq-client, scram, swagger, testcontainers, uadetector-core, uadetector-resources
  • MicroProfile: config-core, metrics-core
  • Vert.x: vertx-cassandra, vertx-mutiny, vertx-kafka, vertx-pg-client, vertx-rabbitmq
  • Misc: untitled

Each service card describes configuration patterns, integration requirements, and the modular contracts they expose so teams can adopt them independently.

🧱 Application Builder

Note on scope: The Application Builder is for composing GuicedEE modules and services. JWebMP/WebAwesome are the technologies used to power this website and the optional UI starter in the generated ZIP, but they are not selectable modules in the builder and the builder is not a JWebMP project generator.

Visitors can craft a custom GuicedEE application by:

  1. Selecting desired GuicedEE modules and plugins from the Module Catalog.
  2. Picking the services they wish to include from the Services Section.
  3. Configuring optional settings (e.g., logging level, MapStruct mapping mode, service configuration presets).
  4. Clicking Build App to trigger the builder backend which packages the chosen artifacts into a ZIP archive containing:
    • Maven parent/child POM structure wired for Java 25/GuicedVertx/Inject.
    • Optional minimal UI starter scaffold (if explicitly selected); by default, no Angular or JWebMP code is generated by the builder.
    • A monolithic Boot class that calls IGuiceContext.inject() to spin up the composition.
    • Service-specific wiring snippets that show how to bootstrap each modularized service.

The generated ZIP mirrors production builds so teams can iterate quickly without configuring every dependency manually.

🚀 Hosting & Deployment

The public site is a static Angular SPA served by nginx — the angular-maven-plugin emits the Angular project to target/webroot/guicedee-website, ng build writes dist/jwebmp/browser, and the generated Dockerfile copies that into an nginx:alpine image. Dynamic data comes from the separate website-backend deliverable, not from this container.

Runtime topology

Setting Value
Platform Azure Container Apps
Container app guicedee-website
Resource group / region DevSites / UK West
Image docker.io/gedmarc/guicedee-website:<version> (public Docker Hub, anonymous pull)
Ingress External, target port 80, transport Auto
Custom domain guicedee.com via Azure managed certificate (SNI)
Revisions Single mode, traffic pinned to latestRevision at 100%
Scale min 0 / max 1, HTTP scaler at 10 concurrent requests
Resources 0.25 vCPU / 0.5 GiB, Consumption workload profile
Probes TCP :80 liveness, readiness, and startup

Because minReplicas is 0, the app scales to zero when idle — the first request after a quiet period pays a cold start.

Deploying a new version

  1. Build and push the image (see build-guicedee-website.ps1 -Push, or mvn install then docker build/docker push from target/webroot/guicedee-website). Keep <dockerImageName> in pom.xml in step with the release.

  2. Point the container app at the new tag. Because revisions run in Single mode with latestRevision: true, the new revision automatically takes 100% of traffic — no manual traffic split:

    az containerapp update `
      --name guicedee-website `
      --resource-group DevSites `
      --image docker.io/gedmarc/guicedee-website:2.2.3 `
      --revision-suffix v223

    Without the containerapp CLI extension, an ARM PATCH against properties.template.containers[0].image achieves the same result. If you hand-roll the payload, re-send the probes, resources, and scale rule as well — a template patch replaces the containers array. Note that the read API returns scale.cooldownPeriod and scale.pollingInterval, but api-version 2024-03-01 rejects those two on write; omit them and the existing values are retained.

  3. Verify: provisioningState is Succeeded, latestReadyRevisionName matches the new suffix, and https://guicedee.com/ returns the freshly built index.html (compare content-length / last-modified against dist/jwebmp/browser/index.html). Confirm the SPA fallback still serves deep links such as /releases and /modules.

Security

  • TLS terminates at the Azure Container Apps managed ingress using the Azure managed certificate; no application-level firewalling is applied today.
  • CI harness uses GuicedEE/Workflows shared GitHub Actions templates with secrets such as USERNAME, USER_TOKEN, SONA_USERNAME, SONA_PASSWORD.

🧭 Development & Reference

  • Run mvn -B -U clean verify to build the website; docs/architecture/ and docs/PROMPT_REFERENCE.md link all stage-gated artifacts.
  • Stage 1–3 docs (PACT/RULES/GLOSSARY/GUIDES/IMPLEMENTATION) are required before any Stage 4 scaffolding touches actual Angular or Java sources.
  • See .env.example for environment variables aligned with rules/generative/platform/secrets-config/env-variables.md.
  • Architecture diagrams (C4, sequences, ERD) live under docs/architecture/; Mermaid sources are served via Mermaid MCP (https://mcp.mermaidchart.com/mcp).

📚 Docs & Rules

  • AI Skills: SKILLS.md
  • Prompt reference: docs/PROMPT_REFERENCE.md
  • Architecture index: docs/architecture/README.md

🤝 Contributing

  • Keep the documentation loop closed: PACT ↔ RULES ↔ GUIDES ↔ IMPLEMENTATION ↔ GLOSSARY.
  • Apply forward-only changes and honor the Document Modularity Policy outlined in rules/RULES.md.

📝 License

  • Apache 2.0 — see LICENSE.

About

The GuicedEE Website

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages