🎮 Foundations — Module 2
First Blood (First App)
Hands-onYour First Page
The root component (App.tsx) sets up routing:
import { Page } from "@dynatrace/strato-components/layouts";
import { Route, Routes } from "react-router-dom";
import { Home } from "./pages/Home";
export const App = () => (
<Page>
<Page.Main>
<Routes>
<Route path="/" element={<Home />} />
</Routes>
</Page.Main>
</Page>
);
Creating a Page
// ui/app/pages/HostList.tsx
import { Flex, TitleBar } from "@dynatrace/strato-components/layouts";
import { Text } from "@dynatrace/strato-components/typography";
export const HostList = () => (
<Flex flexDirection="column" gap={16} padding={32}>
<TitleBar>
<TitleBar.Title>Host Monitor</TitleBar.Title>
</TitleBar>
<Text>Host data coming in Module 4.</Text>
</Flex>
);
Key Strato Components
Page, Page.Main, Page.Header — app shell
Flex — flexbox layout (gap, padding, direction)
TitleBar — page header with title/subtitle
AppHeader + NavItem — top navigation bar
Button — actions
Text, Heading — typography
Adding Navigation
import { AppHeader, NavItem } from "@dynatrace/strato-components/layouts";
import { Link } from "react-router-dom";
// In App.tsx, before Page.Main:
<Page.Header>
<AppHeader>
<NavItem component={Link} to="/">Home</NavItem>
<NavItem component={Link} to="/hosts">Hosts</NavItem>
</AppHeader>
</Page.Header>
💡 Edit any file, save, browser refreshes instantly. No manual rebuild.
What's Next
Module 3 — Load DOOM inside your app. CSP configuration, iframe sandbox, static assets.