diff --git a/next.config.ts b/next.config.ts
index 3121097..d17d3ce 100644
--- a/next.config.ts
+++ b/next.config.ts
@@ -2,6 +2,15 @@ import type { NextConfig } from "next";
import path from "path";
const nextConfig: NextConfig = {
+ async redirects() {
+ return [
+ {
+ source: "/air-freight",
+ destination: "/doormile-wings",
+ permanent: true,
+ },
+ ];
+ },
turbopack: {
root: path.resolve(__dirname),
},
diff --git a/public/images/air-freight-pic-1.jpg b/public/images/air-freight-pic-1.jpg
new file mode 100644
index 0000000..6f6b1bb
Binary files /dev/null and b/public/images/air-freight-pic-1.jpg differ
diff --git a/public/images/air-freight-slide-1.jpg b/public/images/air-freight-slide-1.jpg
new file mode 100644
index 0000000..56f7e62
Binary files /dev/null and b/public/images/air-freight-slide-1.jpg differ
diff --git a/public/images/air-freight-slide-2.jpg b/public/images/air-freight-slide-2.jpg
new file mode 100644
index 0000000..af60603
Binary files /dev/null and b/public/images/air-freight-slide-2.jpg differ
diff --git a/public/images/card 1.png b/public/images/card 1.png
new file mode 100644
index 0000000..7e7c9cf
Binary files /dev/null and b/public/images/card 1.png differ
diff --git a/public/images/card 2.png b/public/images/card 2.png
new file mode 100644
index 0000000..864f4d3
Binary files /dev/null and b/public/images/card 2.png differ
diff --git a/public/images/card 3.png b/public/images/card 3.png
new file mode 100644
index 0000000..ec145b8
Binary files /dev/null and b/public/images/card 3.png differ
diff --git a/public/images/card4.png b/public/images/card4.png
new file mode 100644
index 0000000..90e4dd2
Binary files /dev/null and b/public/images/card4.png differ
diff --git a/public/images/card5.png b/public/images/card5.png
new file mode 100644
index 0000000..39adac1
Binary files /dev/null and b/public/images/card5.png differ
diff --git a/public/images/card6.png b/public/images/card6.png
new file mode 100644
index 0000000..825ff3a
Binary files /dev/null and b/public/images/card6.png differ
diff --git a/public/images/pahse1.png b/public/images/pahse1.png
new file mode 100644
index 0000000..8d3835e
Binary files /dev/null and b/public/images/pahse1.png differ
diff --git a/public/images/wings-heroslide2.png b/public/images/wings-heroslide2.png
new file mode 100644
index 0000000..29188b6
Binary files /dev/null and b/public/images/wings-heroslide2.png differ
diff --git a/public/images/wings-heroslider3.png b/public/images/wings-heroslider3.png
new file mode 100644
index 0000000..f730de8
Binary files /dev/null and b/public/images/wings-heroslider3.png differ
diff --git a/public/images/wings-heroslider4.png b/public/images/wings-heroslider4.png
new file mode 100644
index 0000000..f10bbf4
Binary files /dev/null and b/public/images/wings-heroslider4.png differ
diff --git a/public/images/women-hero-silder-1.png b/public/images/women-hero-silder-1.png
new file mode 100644
index 0000000..771a639
Binary files /dev/null and b/public/images/women-hero-silder-1.png differ
diff --git a/public/images/women-hero-slider-2.png b/public/images/women-hero-slider-2.png
new file mode 100644
index 0000000..4172fca
Binary files /dev/null and b/public/images/women-hero-slider-2.png differ
diff --git a/public/images/women-hero-slider-3.png b/public/images/women-hero-slider-3.png
new file mode 100644
index 0000000..fd87c85
Binary files /dev/null and b/public/images/women-hero-slider-3.png differ
diff --git a/public/videos/Doormile-quantum-video3.mp4 b/public/videos/Doormile-quantum-video3.mp4
new file mode 100644
index 0000000..48d851a
Binary files /dev/null and b/public/videos/Doormile-quantum-video3.mp4 differ
diff --git a/public/videos/fleet.mp4 b/public/videos/fleet.mp4
new file mode 100644
index 0000000..dc8c334
Binary files /dev/null and b/public/videos/fleet.mp4 differ
diff --git a/src/app/about-us/page.tsx b/src/app/about-us/page.tsx
index aba89dc..640a92a 100644
--- a/src/app/about-us/page.tsx
+++ b/src/app/about-us/page.tsx
@@ -22,7 +22,7 @@ export default function AboutUsPage() {
-
+ {/* */}
diff --git a/src/app/air-freight/page.tsx b/src/app/air-freight/page.tsx
new file mode 100644
index 0000000..420fe24
--- /dev/null
+++ b/src/app/air-freight/page.tsx
@@ -0,0 +1,15 @@
+import { permanentRedirect } from "next/navigation";
+
+export const metadata = {
+ alternates: {
+ canonical: "https://doormile.com/doormile-wings",
+ },
+ robots: {
+ index: false,
+ follow: true,
+ },
+};
+
+export default function AirFreightRedirectPage() {
+ permanentRedirect("/doormile-wings");
+}
diff --git a/src/app/doormile-wings/page.tsx b/src/app/doormile-wings/page.tsx
new file mode 100644
index 0000000..11f3502
--- /dev/null
+++ b/src/app/doormile-wings/page.tsx
@@ -0,0 +1,62 @@
+import WingsHero from "@/components/sections/WingsHero";
+import WingsWhyGrid from "@/components/sections/WingsWhyGrid";
+import WingsSpeedAdvantage from "@/components/sections/WingsSpeedAdvantage";
+import WingsFeatureGrid from "@/components/sections/WingsFeatureGrid";
+import WingsIndustries from "@/components/sections/WingsIndustries";
+import WingsHowItWorks from "@/components/sections/WingsHowItWorks";
+import WingsFleetStrategy from "@/components/sections/WingsFleetStrategy";
+import WingsInfrastructure from "@/components/sections/WingsInfrastructure";
+import WingsMileTruth from "@/components/sections/WingsMileTruth";
+import WingsRoadmap from "@/components/sections/WingsRoadmap";
+
+export const metadata = {
+ title: "Doormile Wings – Redefining Domestic Air Logistics Through AI",
+ description: "Doormile Wings links India's major regional capitals with AI-powered, same-day air logistics and zero-emission EV last-mile delivery — where quick commerce meets quick logistics.",
+ alternates: {
+ canonical: "https://doormile.com/doormile-wings",
+ },
+ openGraph: {
+ title: "Doormile Wings – Redefining Domestic Air Logistics Through AI",
+ description: "Same-day air logistics linking India's major regional capitals, powered by MileTruth™ AI and zero-emission EV last-mile delivery.",
+ url: "https://doormile.com/doormile-wings",
+ siteName: "Doormile",
+ type: "website",
+ images: [
+ {
+ url: "https://doormile.com/images/wings-logo.png",
+ width: 1200,
+ height: 630,
+ alt: "Doormile Wings",
+ },
+ ],
+ },
+ twitter: {
+ card: "summary_large_image",
+ title: "Doormile Wings – Redefining Domestic Air Logistics Through AI",
+ description: "Same-day air logistics linking India's major regional capitals, powered by MileTruth™ AI and zero-emission EV last-mile delivery.",
+ images: ["https://doormile.com/images/wings-logo.png"],
+ },
+};
+
+export default function DoormileWingsPage() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/app/empowerment/page.tsx b/src/app/empowerment/page.tsx
new file mode 100644
index 0000000..64cc74f
--- /dev/null
+++ b/src/app/empowerment/page.tsx
@@ -0,0 +1,123 @@
+import EmpowermentHero from "@/components/sections/EmpowermentHero";
+import EmpowermentVision from "@/components/sections/EmpowermentVision";
+import EmpowermentStory from "@/components/sections/EmpowermentStory";
+import WomenSection from "@/components/sections/WomenSection";
+import EmpowermentPrograms from "@/components/sections/EmpowermentPrograms";
+import EmpowermentImpact from "@/components/sections/EmpowermentImpact";
+import EmpowermentHowItWorks from "@/components/sections/EmpowermentHowItWorks";
+import EmpowermentStories from "@/components/sections/EmpowermentStories";
+import EmpowermentPartners from "@/components/sections/EmpowermentPartners";
+import EmpowermentCTA from "@/components/sections/EmpowermentCTA";
+
+const WINGS_WOMEN_STATS = [
+ { value: "500", plus: "+", label: "Women Founders" },
+ { value: "35", plus: "+", label: "Cities Active" },
+ { value: "100", plus: "+", label: "Enterprises Launched" },
+];
+
+const WINGS_WOMEN_CARDS = [
+ {
+ title: "Venture Building",
+ desc: "End-to-end support for women launching logistics enterprises — from ideation to market entry.",
+ icon: (
+
+ ),
+ },
+ {
+ title: "Entrepreneurship",
+ desc: "Women building, owning, and scaling sustainable businesses within the logistics ecosystem.",
+ icon: (
+
+ ),
+ },
+ {
+ title: "Founder Networks",
+ desc: "Peer communities and strategic connections that accelerate growth and open new markets.",
+ icon: (
+
+ ),
+ },
+ {
+ title: "Enterprise Leadership",
+ desc: "Strategic decision-making, operational excellence, and vision-driven leadership for women founders.",
+ icon: (
+
+ ),
+ },
+];
+
+export const metadata = {
+ title: "Doormile Wings — Women Entrepreneurship Initiative",
+ description: "Doormile Wings empowers women to build, own, and lead enterprises within the logistics ecosystem through strategic partnerships, founder networks, and entrepreneurial infrastructure.",
+ alternates: {
+ canonical: "https://doormile.com/empowerment",
+ },
+ openGraph: {
+ title: "Doormile Wings — Women Entrepreneurship Initiative",
+ description: "An entrepreneurial ecosystem empowering women to launch, grow, and lead logistics enterprises with strategic partnerships and industry collaboration.",
+ url: "https://doormile.com/empowerment",
+ siteName: "Doormile",
+ type: "website",
+ images: [
+ {
+ url: "https://doormile.com/images/wings-logo.png",
+ width: 1200,
+ height: 630,
+ alt: "Doormile Wings — Women Entrepreneurship Initiative",
+ },
+ ],
+ },
+ twitter: {
+ card: "summary_large_image",
+ title: "Doormile Wings — Women Entrepreneurship Initiative",
+ description: "An entrepreneurial ecosystem empowering women to launch, grow, and lead logistics enterprises with strategic partnerships and industry collaboration.",
+ images: ["https://doormile.com/images/wings-logo.png"],
+ },
+};
+
+export default function EmpowermentPage() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/app/express/page.tsx b/src/app/express/page.tsx
new file mode 100644
index 0000000..2149cb5
--- /dev/null
+++ b/src/app/express/page.tsx
@@ -0,0 +1,133 @@
+import type { Metadata } from "next";
+import Link from "next/link";
+
+export const metadata: Metadata = {
+ title: "Express – Doormile",
+ description: "Doormile Express — a fast-lane logistics service for time-critical shipments. Coming soon.",
+ alternates: {
+ canonical: "https://doormile.com/express",
+ },
+ robots: {
+ index: false,
+ follow: true,
+ },
+};
+
+export default function ExpressPage() {
+ return (
+
+
+
+
+
+ Solutions / Express
+
+ Doormile Express is on its way
+
+
+ We're building a fast-lane logistics service for time-critical shipments.
+ Check back soon, or explore what Doormile already delivers today.
+
+
+
+ Explore Doormile Wings
+
+
+ Get notified when we launch →
+
+
+
+
+
+
+
+ {/* Self-contained placeholder styling, scoped to .express-coming-soon.
+ Re-declares --logico-dark-text-color/--logico-light-text-color/
+ --logico-accent-color locally: the sitewide :root fallback is the
+ light-theme value (dark text on white), which would render near-
+ black text on this dark section without the override. */}
+
+
+ );
+}
diff --git a/src/app/globals.css b/src/app/globals.css
index 459c851..6881777 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -10,6 +10,27 @@ html {
scroll-behavior: smooth;
}
+/* ============================================================
+ SITE-WIDE STICKY FIX
+ The legacy Elementor build sets `.body-container { overflow: hidden }`
+ (public/css/site.css, generated — do not edit there). Any ancestor
+ with non-visible overflow becomes the containing block for
+ `position: sticky` descendants; since `.body-container` itself never
+ actually scrolls (the real scrollbar lives on ), that made every
+ `position: sticky` element on the site inert — it just scrolled away
+ in normal flow instead of pinning.
+ Note: setting overflow-x:hidden paired with overflow-y:visible gets
+ silently coerced to overflow-y:auto by the CSS spec (an "auto" value on
+ one axis when the other is non-visible) — which ALSO still counts as a
+ scroll container and breaks sticky the same way. So this must be fully
+ visible on both axes. already has overflow-x: hidden site-wide
+ (from the same legacy stylesheet), so horizontal bleed is still safely
+ clipped there — this rule doesn't need to repeat it.
+ ============================================================ */
+.body-container {
+ overflow: visible !important;
+}
+
/* ============================================================
GLOBAL SPACING SYSTEM
A single shared vertical-rhythm scale so every section uses
@@ -153,16 +174,21 @@ body {
#masthead .elementor-element.elementor-element-0b7bf6f > .elementor-widget-container {
padding: 0 42px !important;
border-radius: 22px !important;
+ height: 58px !important;
+ display: flex !important;
+ align-items: center !important;
}
#masthead .elementor-element.elementor-element-0b7bf6f .header-menu-container .main-menu > li > a {
- padding-top: 15px !important;
- padding-bottom: 16px !important;
+ padding-top: 6px !important;
+ padding-bottom: 6px !important;
padding-left: 14px !important;
padding-right: 14px !important;
font-size: 15px !important;
line-height: 1.2 !important;
white-space: nowrap !important;
+ min-height: auto !important;
+ height: auto !important;
}
#masthead .header-menu-container .main-menu {
@@ -179,7 +205,11 @@ body {
}
#masthead .elementor-element.elementor-element-466de1b.dm-header-scrolled {
- top: 0 !important;
+ top: 15px !important;
+ left: 20px !important;
+ right: 20px !important;
+ border-radius: 24px !important;
+ width: auto !important;
}
}
@@ -964,6 +994,49 @@ body {
box-sizing: border-box;
}
+/* ============================================================
+ SHARED PAGE CONTENT CONTAINER
+ Matches the Hero/Header/Footer's real rendered OUTER edge, not the
+ Footer's narrower inner text column. The Hero card
+ (.owl-stage-outer, via .wings-hero-page.elementor-element-741f56c)
+ and the Footer's outer band (.elementor-element-b29b8fc) both sit a
+ fixed, uncapped 20px in from the viewport edge at every desktop
+ width (verified 1280px-2400px — no max-width ever kicks in). Apply
+ this class to any Wings-page section's content wrapper to guarantee
+ its cards/timeline/grid hug those same edges instead of sitting
+ narrower and more centered.
+ ============================================================ */
+.dm-section-container {
+ width: 100%;
+ margin-left: auto;
+ margin-right: auto;
+ box-sizing: border-box;
+ padding-left: 20px;
+ padding-right: 20px;
+}
+
+@media (max-width: 1024px) {
+ .dm-section-container {
+ padding-left: var(--dm-mobile-gutter, 10px);
+ padding-right: var(--dm-mobile-gutter, 10px);
+ }
+}
+
+/* Doormile Wings hero frame: the generic vendor CSS assigns 32px padding to
+ .elementor-element-741f56c on all pages; Home's frame is 20px (scoped
+ to .elementor-61). Scope the same 20px frame to the Doormile Wings hero so
+ the card alignment matches Home and Solutions exactly. */
+@media (min-width: 1025px) {
+ .wings-hero-page.elementor-element-741f56c,
+ .af-hero-page.elementor-element-741f56c {
+ --padding-top: 20px;
+ --padding-right: 20px;
+ --padding-bottom: 20px;
+ --padding-left: 20px;
+ padding: 20px !important;
+ }
+}
+
/* Custom premium animations keyframes */
@keyframes shimmer-sweep {
0% {
@@ -1166,3 +1239,4 @@ body {
margin-top: var(--space-section) !important;
}
}
+
diff --git a/src/app/miletruth/page.tsx b/src/app/miletruth/page.tsx
index 8a94372..870f4ce 100644
--- a/src/app/miletruth/page.tsx
+++ b/src/app/miletruth/page.tsx
@@ -2,6 +2,7 @@ import React from "react";
import MileTruthHero from "../../components/sections/MileTruthHero";
import Workflow1 from "../../components/sections/Workflow1";
import Workflow2 from "../../components/sections/Workflow2";
+import Workflow4 from "../../components/sections/Workflow4";
import Workflow3Lazy from "../../components/sections/Workflow3Lazy";
export const metadata = {
@@ -18,6 +19,7 @@ export default function MileTruthPage() {
+
diff --git a/src/components/layout/Footer.tsx b/src/components/layout/Footer.tsx
index fcf67aa..ffa99e8 100644
--- a/src/components/layout/Footer.tsx
+++ b/src/components/layout/Footer.tsx
@@ -458,6 +458,9 @@ export default function Footer() {
+
+ Doormile Wings
+
About Us
diff --git a/src/components/layout/Header.tsx b/src/components/layout/Header.tsx
index 27ea8aa..9bb0c57 100644
--- a/src/components/layout/Header.tsx
+++ b/src/components/layout/Header.tsx
@@ -7,7 +7,7 @@
* Menu open/close + sidebar state is read from HeaderUIProvider so BodyOverlay (sibling at body level) can react.
*/
-import { MouseEvent, useEffect, useState } from "react";
+import { KeyboardEvent, FocusEvent, MouseEvent, useEffect, useState } from "react";
import Link from "next/link";
import Image from "next/image";
import { usePathname } from "next/navigation";
@@ -20,6 +20,9 @@ const CURRENT_PAGE_MAP: Record = {
"/miletruth": "miletruth",
"/solutions": "solutions",
"/about": "about",
+ "/doormile-wings": "doormile-wings",
+ "/empowerment": "entarpreneurship",
+ "/express": "express",
"/about-us": "about",
"/blog": "blogs",
"/contact": "contact",
@@ -33,13 +36,17 @@ const CURRENT_PAGE_ALIASES: Record = {
home: ["home"],
"how-it-works": ["how-it-works", "how-its-works"],
miletruth: ["miletruth"],
+ // Solutions is now a plain top-level link — no child pages own its active state.
solutions: ["solutions"],
- about: ["about", "about-us", "women"],
+ "doormile-wings": ["doormile-wings"],
+ entarpreneurship: ["entarpreneurship"],
blogs: ["blogs"],
contact: ["contact"],
"privacy-policy": ["privacy-policy"],
"terms-of-service": ["terms-of-service"],
"cookie-policy": ["cookie-policy"],
+ // Company is the dropdown parent for About + Blogs + How It Works — active if any is.
+ company: ["blogs", "how-it-works", "about"],
};
export default function Header() {
@@ -72,7 +79,7 @@ export default function Header() {
targetId: string,
shouldCloseMenu = false,
) => {
- if (shouldCloseMenu) closeAll();
+ if (shouldCloseMenu) closeMobileMenu();
if (pathname !== targetPath) return;
@@ -90,6 +97,23 @@ export default function Header() {
const [visibleScrolled, setVisibleScrolled] = useState(false);
const [isScrolled, setIsScrolled] = useState(false);
+ // Company dropdown (desktop) / accordion (mobile). Local to Header —
+ // unlike isMenuOpen/isSidebarOpen (HeaderUIProvider), no sibling component
+ // needs to read this.
+ const [isDesktopCompanyOpen, setDesktopCompanyOpen] = useState(false);
+ const [isMobileCompanyOpen, setMobileCompanyOpen] = useState(false);
+
+ // Collapse the accordion whenever the off-canvas menu closes, so it isn't
+ // left expanded the next time the menu opens.
+ const closeMobileMenu = () => {
+ setMobileCompanyOpen(false);
+ closeAll();
+ };
+ const toggleMobileMenu = () => {
+ setMobileCompanyOpen(false);
+ toggleMenu();
+ };
+
useEffect(() => {
const handle = requestAnimationFrame(() => {
setVisibleScrolled(true);
@@ -448,25 +472,86 @@ export default function Header() {
handleNavClick(event, "/", "home")}>Home
-
- handleNavClick(event, "/how-it-works", "how-it-works")}>How It Works
+
+ Wings
handleNavClick(event, "/miletruth", "miletruth")}>MileTruth™ AI