EasyStarter logoEasyStarter

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
KeyLabelType
hero-section-23Shadcn Hero 23hero
hero-section-03Shadcn Hero 03hero
tailark-heroTailark Herohero
features-section-21Shadcn Features 21features
tailark-logo-cloudTailark Logo Cloudlogo-cloud
tailark-featuresTailark Featuresfeatures
tailark-integrationsTailark Integrationsintegrations
tailark-contentTailark Contentcontent
tailark-statsTailark Statsstats
tailark-pricingTailark Pricingpricing
tailark-faqsTailark FAQsfaqs
tailark-call-to-actionTailark Call To Actioncall-to-action
tailark-testimonialsTailark Testimonialstestimonials

Note: Only one block per type is rendered. If both hero-section-23 and hero-section-03 are 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:

apps/web/src/configs/web-config.ts
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:

KeyContent
{AppName}-landing-page-componentsJSON 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.tsx

Register in the component registry

Add the new entry to landing-page-component-registry.tsx:

apps/web/src/configs/landing-page-component/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:

apps/web/src/configs/landing-page-component/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.