Landing Page
Configure landing page blocks, reorder sections, or add custom components
Landing Page Configuration
The landing page is composed of independent blocks, each mapped to a React component. The block list is freely composable — a default is defined in code, and users can rearrange it in-app.
Available Blocks
All blocks are registered in:
apps/web/src/configs/landing-page-component/landing-page-component-registry.tsx| Key | Label | Type |
|---|---|---|
hero-section-23 | Shadcn Hero 23 | hero |
hero-section-03 | Shadcn Hero 03 | hero |
tailark-hero | Tailark Hero | hero |
features-section-21 | Shadcn Features 21 | features |
tailark-logo-cloud | Tailark Logo Cloud | logo-cloud |
tailark-features | Tailark Features | features |
tailark-integrations | Tailark Integrations | integrations |
tailark-content | Tailark Content | content |
tailark-stats | Tailark Stats | stats |
tailark-pricing | Tailark Pricing | pricing |
tailark-faqs | Tailark FAQs | faqs |
tailark-call-to-action | Tailark Call To Action | call-to-action |
tailark-testimonials | Tailark Testimonials | testimonials |
Note: Only one block per
typeis rendered. If bothhero-section-23andhero-section-03are in the list, only the one with the higher sort priority is shown.
Changing the Default Block List
The default landing page blocks are defined in:
const defaultLandingPageComponents = [
"hero-section-23",
"tailark-logo-cloud",
"features-section-21",
"tailark-integrations",
"tailark-content",
"tailark-stats",
"tailark-pricing",
"tailark-faqs",
"tailark-call-to-action",
"tailark-testimonials",
] as const satisfies readonly LandingPageComponentKey[];Edit this array to change the landing page structure new users see:
- Reorder: move key names up or down — display order follows
- Remove: delete the key name from the array
- Add: insert a registered key name into the array
Storage Key
When a user customizes the landing page in the app, the selection is saved to localStorage:
| Key | Content |
|---|---|
{AppName}-landing-page-components | JSON array of active block key names |
If the stored list is empty or all entries are invalid, it falls back to defaultLandingPageComponents.
Adding a Custom Block
Create the React component
Create a new component directory under apps/web/src/components/landing-page/:
apps/web/src/components/landing-page/
└── my-section/
└── my-section.tsxRegister in the component registry
Add the new entry to landing-page-component-registry.tsx:
import MySection from "@/components/landing-page/my-section/my-section";
export const landingPageComponentMap = {
// existing blocks...
"my-section": () => <MySection />,
};Add metadata
Add the label and group to LANDING_PAGE_COMPONENTS in landing-page-component-config.ts:
export const LANDING_PAGE_COMPONENTS = {
// existing entries...
"my-section": { label: "My Section", group: "Custom", type: "my-type" },
};Add to default list (optional)
To include the new block by default, add its key to defaultLandingPageComponents in web-config.ts.