Project Structure
Understand how NA-AI Landing is organized so you can customize it without breaking the architecture.
Understand the architecture before rewriting the UILink to section
NA-AI Landing is organized around a simple separation:
Data controls content. Sections render product blocks. Layout components frame the page. PyColors UI provides primitives.
This keeps customization clean, predictable, and easier to maintain as the landing page evolves.
Most product content can be updated from:
src/@databefore touching the visual implementation.
The structure is optimized for fast iteration.
One-time payment · Instant access after purchase
Key idea
The template is designed so product content can evolve without constantly rewriting the visual foundation.
Architecture overviewLink to section
Data-driven structure
Composable sections
Shared UI primitives
Fast customization workflow
StructureLink to section
Architecture flowLink to section
src/@data
↓
components/sections
↓
components/layout
↓
@pycolors/ui + @pycolors/tokensData layer
The data layer owns structured content, pricing values, navigation labels, FAQ items, testimonials, and section configuration.
Data directoryLink to section
| File | Responsibility |
|---|---|
hero.ts | Hero copy, CTA, badges, and visual content |
features.ts | AI analytics feature cards and section content |
integrations.ts | Integration categories and integration cards |
pricing.ts | Pricing plans and billing toggle content |
pricing-table.ts | Pricing comparison rows |
customers.ts | Testimonials and customer proof |
faq.ts | FAQ content |
contact.ts | Contact form copy and goal options |
cta.ts | Final conversion section |
navbar.ts | Navigation links |
footer.ts | Footer links and footer copy |
Customization rule
Change data first. Edit section components only when the current structure no longer supports the product story.
Add a new sectionLink to section
Create the data fileLink to section
touch src/@data/use-cases.tsCreate the section componentLink to section
touch src/components/sections/use-cases.tsxCompose the section inside the pageLink to section
import { UseCasesSection } from "@/components/sections/use-cases";
export default function Page() {
return <UseCasesSection />;
}Recommended architecture rulesLink to section
Prefer
- data-driven content
- small section components
- shared PyColors primitives
- semantic tokens
- isolated template-specific UI
Avoid
- hardcoding all copy in components
- putting backend logic in sections
- duplicating layout wrappers
- removing token imports
- forking shared UI primitives unnecessarily
Why this structure scalesLink to section
As landing pages grow, problems usually come from unclear boundaries:
- copy mixed with layout logic
- duplicated sections
- inconsistent spacing
- scattered pricing values
- disconnected SEO assets
- uncontrolled visual overrides
This structure reduces those problems by keeping responsibilities separate from the beginning.
Scaling principle
A good landing page architecture should make iteration cheaper over time, not more fragile.