File Structure

After running the "npm run build" command, HTML files will be generated in the dist folder. The structure of an HTML file will be as follows:


app/layout.tsx
    
        import React from "react";
import "@/public/assets/css/vendors/bootstrap.min.css";
import "@/public/assets/css/vendors/swiper-bundle.min.css";
import "@/public/assets/css/vendors/nice-select.css";
import "@/public/assets/css/vendors/magnific-popup.css";
import "@/public/assets/css/vendors/odometer.css";
import "@/public/assets/css/vendors/spacing.css";

import "@/public/assets/css/main.css";

import type { Metadata } from "next";
import { DM_Sans } from "next/font/google";
import ThemeScript from "@/components/ThemeScript";
import Loading from "./loading";

const dmSans = DM_Sans({
    subsets: ["latin"],
    display: "swap",
    variable: "--at-ff-body",
});

export const metadata: Metadata = {
    title: "Orisa - Multi-purpose Next.js Template",
    description: "Generated by Orisa - Next.js Template",
};

export default function RootLayout({
    children,
}: Readonly<{
    children: React.ReactNode;
}>) {
    return (
        <html lang="en" suppressHydrationWarning>
            <head>
                <link
                    href="/assets/css/vendors/font-awesome-pro.css"
                    rel="stylesheet"
                />
            </head>
            <body className={`${dmSans.variable}`}>
                <Loading />
                <ThemeScript />
                <div className="px-blur-bottom"></div>
                {children}
            </body>
        </html>
    );
}
        
    

components/layout/layout.tsx
     
    import BackToTop from "@/components/elements/BackToTopServer";
    import BodyClass from "@/components/layout/BodyClass";
    import Footer1 from "@/components/layout/footer/Footer1";
    import Footer2 from "@/components/layout/footer/Footer2";
    import Footer3 from "@/components/layout/footer/Footer3";
    import Footer4 from "@/components/layout/footer/Footer4";
    import Footer5 from "@/components/layout/footer/Footer5";
    import Header1 from "@/components/layout/header/Header1Server";
    import Header2 from "@/components/layout/header/Header2";
    import Header3 from "@/components/layout/header/Header3";
    import Header4 from "@/components/layout/header/Header4";
    import Header5 from "@/components/layout/header/Header5";
    import ServerEffects from "@/components/layout/ServerEffects";
    
    // Header component mapping
    const HEADER_COMPONENTS = {
        1: Header1,
        2: Header2,
        3: Header3,
        4: Header4,
        5: Header5,
    } as const;
    
    // Footer component mapping
    const FOOTER_COMPONENTS = {
        1: Footer1,
        2: Footer2,
        3: Footer3,
        4: Footer4,
        5: Footer5,
    } as const;
    
    // Header component with proper composition
    function Header({ style }: { style?: number }) {
        if (!style) {
            return <Header1 />;
        }
    
        const HeaderComponent = HEADER_COMPONENTS[style as keyof typeof HEADER_COMPONENTS];
        return HeaderComponent ? <HeaderComponent /> : <Header1 />;
    }
    
    // Footer component with proper composition
    function Footer({ style }: { style?: number }) {
        if (!style) {
            return <Footer1 />;
        }
    
        const FooterComponent = FOOTER_COMPONENTS[style as keyof typeof FOOTER_COMPONENTS];
        return FooterComponent ? <FooterComponent /> : <Footer1 />;
    }
    
    // Main layout interface
    interface LayoutProps {
        children?: React.ReactNode;
        headerStyle?: number;
        footerStyle?: number;
        bodyClassName?: string;
    }
    
    // Refactored Layout component using composition
    export default function Layout({ children, headerStyle, footerStyle, bodyClassName }: LayoutProps) {
        return (
            <>
                <ServerEffects />
                <BodyClass className={bodyClassName} />
                <div id="top" />
                <Header style={headerStyle} />
                <main>{children}</main>
                <Footer style={footerStyle} />
                <BackToTop />
            </>
        );
    }
    
    // Alternative: Layout with explicit header and footer props
    interface LayoutWithComponentsProps {
        children?: React.ReactNode;
        header?: React.ReactNode;
        footer?: React.ReactNode;
    }
    
    export function LayoutWithComponents({ children, header = <Header1 />, footer = <Footer1 /> }: LayoutWithComponentsProps) {
        return (
            <>
                <ServerEffects />
                <div id="top" />
                {header}
                <main>{children}</main>
                {footer}
                <BackToTop />
            </>
        );
    }
    
    // Layout slots pattern for maximum flexibility
    interface LayoutSlotsProps {
        children?: React.ReactNode;
        header?: React.ReactNode;
        footer?: React.ReactNode;
        sidebar?: React.ReactNode;
    }
    
    export function LayoutWithSlots({ children, header = <Header1 />, footer = <Footer1 />, sidebar }: LayoutSlotsProps) {
        return (
            <>
                <ServerEffects />
                <div id="top" />
                {header}
                <div className="layout-container">
                    {sidebar && <aside className="sidebar">{sidebar}</aside>}
                    <main className="layout-main">{children}</main>
                </div>
                {footer}
                <BackToTop />
            </>
        );
    }
        
    
 

Dependencies
     
        {
            "name": "orisa-nextjs",
            "version": "1.0.0",
            "private": true,
            "scripts": {
                "dev": "next dev",
                "build": "next build",
                "start": "next start",
                "lint": "next lint",
                "refactor-imports": "node scripts/refactor-react-imports.js",
                "lint:fix": "next lint --fix"
            },
            "dependencies": {
                "bootstrap": "^5.3.3",
                "gsap": "^3.12.7",
                "isotope-layout": "^3.0.6",
                "next": "^16.1.6",
                "react": "^19",
                "react-dom": "^19",
                "react-fast-marquee": "^1.6.5",
                "split-text": "^1.0.0",
                "swiper": "^11.2.5",
                "wowjs": "^1.1.3"
            },
            "devDependencies": {
                "@types/bootstrap": "^5.2.10",
                "@types/isotope-layout": "^3.0.14",
                "@types/node": "^22",
                "@types/react": "^19",
                "@types/react-dom": "^19",
                "eslint": "^9",
                "eslint-config-next": "15.0.3",
                "typescript": "^5"
            }
        }