--- type: guide title: Landing Page description: How the public landing page renders, how the login + registration modal is opened, what each form does, and how the modal stays in sync with admin `registrationsEnabled` changes via SSE. tags: [guide, landing, login, register, ui, sse, bootstrap] timestamp: 2026-07-22T16:15:00Z --- # What you see `LandingComponent` (`frontend/src/app/features/landing/landing.component.{ts,html,css}`) is the route mounted at `/login` (the path is historic — the page is now the public landing page, not a bare login form). On a fresh visit the page shows, in order: 1. **Logo** — `` rendered from `BootstrapService.payload().logo` (empty string → the `` is not rendered). 2. **Page title** — `

` rendered from `BootstrapService.payload().pageTitle` (defaults to `HIPCTF`). 3. **Welcome card** — `
` whose `innerHTML` is bound to the computed signal `welcomeHtml()`, i.e. the sanitized HTML render of `BootstrapService.payload().welcomeMarkdown` (via `MarkdownService.render` → `renderMarkdownToHtml` → `marked` + `DOMPurify`). The binding **must** invoke the signal (`welcomeHtml()`), not the signal object — see [Key Files Index](/architecture/key-files.md) for the `landing.component.html` entry that pins this. 4. **Login button** — `