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.
- 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/WaMenuparadigms: aHomepage that narrates the platform story, aCapabilitiespage for features breakdown, aServicescatalog page, the App Builder page, and supporting destinations for releases, media, and onboarding resources.
cdi(migration and compatibility — not a foundation module)cerialclientconfiginjectopenapipersistencerabbitmqrepresentationsrestswagger-uitelemetryvertxwebwebserviceswebsockets- (catalog is a curated static list defined in
ModuleCatalog; it intentionally excludes non-modular directories likebom,parent,services, and thewebsiteitself)
Each catalog entry links to its documentation, release notes, and live demos wherever available.
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, andWaStack(seeGUIDES.md). - Java 25 + Maven backend powered through the
GuicedEE/parentBOM chain and theguice-inject-clientdependency; logging via Log4j2 with Lombok@Log4j2helpers. - MapStruct for DTO-to-model transformations, Mermaid for diagrams (served from
docs/architecture/via Mermaid MCP), and CRTP-based fluent APIs across shared modules.
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.
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:
- Selecting desired GuicedEE modules and plugins from the Module Catalog.
- Picking the services they wish to include from the Services Section.
- Configuring optional settings (e.g., logging level, MapStruct mapping mode, service configuration presets).
- 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
Bootclass that callsIGuiceContext.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.
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
minReplicasis0, the app scales to zero when idle — the first request after a quiet period pays a cold start.
Deploying a new version
-
Build and push the image (see
build-guicedee-website.ps1 -Push, ormvn installthendocker build/docker pushfromtarget/webroot/guicedee-website). Keep<dockerImageName>inpom.xmlin step with the release. -
Point the container app at the new tag. Because revisions run in
Singlemode withlatestRevision: 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
containerappCLI extension, an ARMPATCHagainstproperties.template.containers[0].imageachieves the same result. If you hand-roll the payload, re-send the probes, resources, and scale rule as well — atemplatepatch replaces the containers array. Note that the read API returnsscale.cooldownPeriodandscale.pollingInterval, but api-version2024-03-01rejects those two on write; omit them and the existing values are retained. -
Verify:
provisioningStateisSucceeded,latestReadyRevisionNamematches the new suffix, andhttps://guicedee.com/returns the freshly builtindex.html(comparecontent-length/last-modifiedagainstdist/jwebmp/browser/index.html). Confirm the SPA fallback still serves deep links such as/releasesand/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.
- Run
mvn -B -U clean verifyto build the website;docs/architecture/anddocs/PROMPT_REFERENCE.mdlink 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.examplefor environment variables aligned withrules/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).
- AI Skills:
SKILLS.md - Prompt reference:
docs/PROMPT_REFERENCE.md - Architecture index:
docs/architecture/README.md
- 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.
- Apache 2.0 — see
LICENSE.