Pages
Contents
xpulse-web β v1 β v2 Migration Concept
Status: COMPLETED Β· April 2026 Describes the path from the static xpulse-web v1.0.0 to the component-based v2.0.0 built on the @xpulse/* package stack.
Starting Point: v1.0.0 (WAS)
xpulse-web v1.0.0 was a fully static website:
| public/ |
| index.html β all styles inline, translations.js as script |
| privacy/index.html |
| terms/index.html |
| disclaimer/index.html |
| contact/index.html |
| imprint/index.html |
| status/index.html |
| assets/ |
| translations.js β monolithic i18n system (strings + engine + dropdown CSS) |
| favicon.svg |
Deployment: nginx container behind Traefik β no Node.js server.
Result: v2.0.0 (NOW)
xpulse-web v2.0.0 runs on a Node.js server and is built entirely on the @xpulse/* package stack.
| src/ |
| index.js β app.init() β app.start() β app.stop() |
| controllers/ |
| index.js β GET / |
| privacy.js |
| terms.js |
| disclaimer.js |
| contact.js |
| imprint.js |
| status.js |
| templates/ |
| shared/ |
| base.tpl.html β shared shell template |
| platform.tpl.html β landing (extends shared/base) |
| privacy.tpl.html β (extends shared/base) |
| terms.tpl.html |
| disclaimer.tpl.html |
| contact.tpl.html |
| imprint.tpl.html |
| status.tpl.html |
| translations/ |
| de/ |
| platform.footer.json |
| platform.index.json |
| platform.privacy.json |
| platform.terms.json |
| platform.disclaimer.json |
| platform.contact.json |
| platform.imprint.json |
| platform.status.json |
| en/ |
| (identical structure) |
| themes/ |
| web.css β layout CSS, uses --xpulse-* tokens |
| public/ |
| assets/ |
| favicon.svg |
| status/ |
| status.json.example β template for server-side status.json |
What Changed
| Topic | v1 | v2 |
|---|---|---|
| Server | nginx static | Node.js (@xpulse/http) |
| Routing | Filesystem paths | @xpulse/controller auto-discovery |
| Templates | HTML files with inline CSS | @xpulse/template (extends/slots) |
| i18n | Client-side, translations.js, data-i18n attributes | SSR via @xpulse/i18n, {% t('key', _route) %} |
| Language URLs | None | /de/, /en/ prefix (automatic via i18n) |
| Design System | CSS repeated inline | @xpulse/theme β CSS tokens + switcher |
| Status page | window.__xpRenderStatus hack |
SI object with SSR-rendered strings |
What Stayed the Same
| What | Why |
|---|---|
URL structure (/privacy/, /terms/ etc.) |
SEO, existing links |
| Client-side health checks in status page | Works well, no added value in server-side for v2 |
localStorage key xpulse_lang |
Consistency between chat and web |