diff --git a/apps/client/src/pages/reports/index.tsx b/apps/client/src/pages/reports/index.tsx
new file mode 100644
index 00000000..7940b67b
--- /dev/null
+++ b/apps/client/src/pages/reports/index.tsx
@@ -0,0 +1,167 @@
+import { useFetchSupplierOrders } from "@sahil/lib/hooks/suppliers";
+import { useState } from "react";
+import { useGetUserById } from "@sahil/lib/hooks/users";
+import { useSession } from "next-auth/react";
+import { useUserSuppliers } from "@sahil/lib/hooks/useUserOrganizations";
+
+import * as React from "react"
+
+import { CollectionControls } from "@sahil/features/Shared/CollectionControls";
+import { TopClientsByRevenue } from "@sahil/features/Reports/TopClientsByRevenue";
+import { RevenueByProduct } from "@sahil/features/Reports/RevenueByProduct";
+import { OrderStatusDistribution } from "@sahil/features/Reports/OrderStatusDistribution";
+
+
+const orders = [
+ {
+ "business": {
+ "id": "e87924e8-69e4-4171-bd89-0c8963e03d08",
+ "name": "Radisson Blu",
+ "contactName": "Emmanuel Gatwech",
+ "business_type": {
+ "type": "hotel"
+ },
+ "type": "hotel"
+ },
+ "id": "d634372a-6a81-402e-9fa5-231bf7c0444c",
+ "fulfillment_type": null,
+ "order_items": [
+ {
+ "price": 15,
+ "product": {
+ "name": "Routers",
+ "price": 10000,
+ "quantity": 20,
+ "discount": 0
+ }
+ },
+ {
+ "price": 15,
+ "product": {
+ "name": "Laptops",
+ "price": 1000000,
+ "quantity": 6,
+ "discount": 15
+ }
+ },
+ {
+ "price": 15,
+ "product": {
+ "name": "iPhone 11 Pro Max",
+ "price": 10000000,
+ "quantity": 3,
+ "discount": 1
+ }
+ }
+ ],
+ "status": "PENDING",
+ "origin": "Souq Munuki",
+ "created_at": "2024-09-14T13:42:07.748051+00:00",
+ "destination": "Souq Custom"
+ },
+ {
+ "business": {
+ "id": "e87924e8-69e4-4171-bd89-0c8963e03d08",
+ "name": "Radisson Blu",
+ "contactName": "Emmanuel Gatwech",
+ "business_type": {
+ "type": "hotel"
+ },
+ "type": "hotel"
+ },
+ "id": "c3ce2967-53fc-4fc6-922b-350adf4c773c",
+ "fulfillment_type": null,
+ "order_items": [
+ {
+ "price": 15,
+ "product": {
+ "name": "1kg Sugar",
+ "price": 2500,
+ "quantity": 250,
+ "discount": null
+ }
+ },
+ {
+ "price": 15,
+ "product": {
+ "name": "1kg Brazillian Chicken",
+ "price": 300,
+ "quantity": 25,
+ "discount": null
+ }
+ },
+ {
+ "price": 15,
+ "product": {
+ "name": "1kg Powder Milk",
+ "price": 2500,
+ "quantity": 10,
+ "discount": null
+ }
+ }
+ ],
+ "status": "PENDING",
+ "origin": "Souq Munuki",
+ "created_at": "2024-09-16T18:21:09.961872+00:00",
+ "destination": "Souq Custom"
+ },
+ {
+ "business": {
+ "id": "e87924e8-69e4-4171-bd89-0c8963e03d08",
+ "name": "Radisson Blu",
+ "contactName": "Emmanuel Gatwech",
+ "business_type": {
+ "type": "hotel"
+ },
+ "type": "hotel"
+ },
+ "id": "99738f85-6c6a-4c79-896d-bea5220108ef",
+ "fulfillment_type": null,
+ "order_items": [
+ {
+ "price": 15,
+ "product": {
+ "name": "Solar Batteries",
+ "price": 350000,
+ "quantity": 10,
+ "discount": null
+ }
+ },
+ {
+ "price": 15,
+ "product": {
+ "name": "250w Solar Panel",
+ "price": 300000,
+ "quantity": 20,
+ "discount": null
+ }
+ }
+ ],
+ "status": "PENDING",
+ "origin": "Souq Munuki",
+ "created_at": "2024-09-17T14:41:35.21956+00:00",
+ "destination": "Souq Custom"
+ }
+];
+
+
+
+
+export default function Reports() {
+ const { data: sessionData } = useSession();
+ const { data: currentUser, loading: userLoading } = useGetUserById(sessionData?.user?.id);
+
+ const supplierOrders = useFetchSupplierOrders();
+ console.log(supplierOrders);
+
+ return (
+
+ );
+}
diff --git a/apps/client/src/pages/settings/billing.tsx b/apps/client/src/pages/settings/billing.tsx
new file mode 100644
index 00000000..0e721625
--- /dev/null
+++ b/apps/client/src/pages/settings/billing.tsx
@@ -0,0 +1,27 @@
+import { ReactNode } from "react";
+import {
+ SettingsSection,
+ Sidebar,
+ settingslinks,
+ SettingsContainer
+} from "ui";
+import { BillingCard } from "@sahil/features/Settings/BillingCard";
+
+type SidebarProps = {
+ children: ReactNode;
+};
+
+export default function BillingSettings({ children, ...props }: SidebarProps) {
+ return (
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/apps/client/src/pages/settings/general.tsx b/apps/client/src/pages/settings/general.tsx
new file mode 100644
index 00000000..a485c198
--- /dev/null
+++ b/apps/client/src/pages/settings/general.tsx
@@ -0,0 +1,27 @@
+import { ReactNode } from "react";
+import {
+ SettingsSection,
+ Sidebar,
+ settingslinks,
+ SettingsContainer
+} from "ui";
+import { GeneralCard } from "@sahil/features/Settings/GeneralCard";
+
+type SidebarProps = {
+ children: ReactNode;
+};
+
+export default function GeneralSettings({ children, ...props }: SidebarProps) {
+ return (
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/apps/client/src/pages/settings/notifications.tsx b/apps/client/src/pages/settings/notifications.tsx
new file mode 100644
index 00000000..df7de6c4
--- /dev/null
+++ b/apps/client/src/pages/settings/notifications.tsx
@@ -0,0 +1,27 @@
+import { ReactNode } from "react";
+import {
+ SettingsSection,
+ Sidebar,
+ settingslinks,
+ SettingsContainer
+} from "ui";
+import { NotificationsCard } from "@sahil/features/Settings/NotificationsCard";
+
+type SidebarProps = {
+ children: ReactNode;
+};
+
+export default function NotificationsSettings({ children, ...props }: SidebarProps) {
+ return (
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/apps/client/src/pages/settings/profile.tsx b/apps/client/src/pages/settings/profile.tsx
new file mode 100644
index 00000000..cf5724eb
--- /dev/null
+++ b/apps/client/src/pages/settings/profile.tsx
@@ -0,0 +1,33 @@
+import { ReactNode } from "react";
+import {
+ SettingsSection,
+ Sidebar,
+ settingslinks,
+ SettingsContainer
+} from "ui";
+import { ProfileCard } from "@sahil/features/Settings/ProfileCard";
+import { DeleteAccountCard } from "@sahil/features/Settings/DeleteAccountCard";
+
+type SidebarProps = {
+ children: ReactNode;
+};
+
+export default function ProfileSettings({ children, ...props }: SidebarProps) {
+
+ return (
+
+
+
+
+ );
+}
diff --git a/apps/client/src/pages/settings/security.tsx b/apps/client/src/pages/settings/security.tsx
new file mode 100644
index 00000000..51e41c79
--- /dev/null
+++ b/apps/client/src/pages/settings/security.tsx
@@ -0,0 +1,27 @@
+import { ReactNode } from "react";
+import {
+ SettingsSection,
+ Sidebar,
+ settingslinks,
+ SettingsContainer
+} from "ui";
+import { SecurityCard } from "@sahil/features/Settings/SecurityCard";
+
+type SidebarProps = {
+ children: ReactNode;
+};
+
+export default function SecuritySettings({ children, ...props }: SidebarProps) {
+ return (
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/apps/client/src/pages/suppliers/[supplierId].tsx b/apps/client/src/pages/suppliers/[supplierId].tsx
new file mode 100644
index 00000000..f8f18c88
--- /dev/null
+++ b/apps/client/src/pages/suppliers/[supplierId].tsx
@@ -0,0 +1,34 @@
+import { useRouter } from "next/router";
+import { useFetchSupplierByPK } from "@sahil/lib/hooks/suppliers";
+import {
+ SupplierOrderHistory,
+ SupplierProducts,
+ ServiceZones,
+ SupplierProfileOverview,
+} from "@sahil/features/Suppliers";
+import { Suppliers } from "@sahil/lib/graphql/__generated__/graphql";
+
+export default function SupplierPage() {
+ const router = useRouter();
+ const { supplierId } = router.query;
+ const { data: supplier, error, loading } = useFetchSupplierByPK();
+ if (error) {
+ return
Failed
;
+ }
+ return (
+
+ );
+}
diff --git a/apps/client/src/pages/suppliers/index.tsx b/apps/client/src/pages/suppliers/index.tsx
new file mode 100644
index 00000000..2fdb1910
--- /dev/null
+++ b/apps/client/src/pages/suppliers/index.tsx
@@ -0,0 +1,24 @@
+import { ListSuppliers } from "@sahil/features/Suppliers";
+import FilterSuppliersModal from "@sahil/features/Suppliers/FilterSuppliersModal";
+import { HiPlus } from "react-icons/hi2";
+import { SectionHeader } from "ui";
+import { CollectionControls } from "@sahil/features/Shared/CollectionControls";
+import { useUser } from "@sahil/features/auth/UserContext";
+const actions = [
+ {
+ label: "Register Supplier",
+ icon:
,
+ href: "/suppliers/register/business_info",
+ primary: true,
+ },
+];
+
+export default function Suppliers() {
+ const { currentUser } = useUser();
+ return (
+
+
+
+
+ );
+}
diff --git a/apps/client/src/pages/suppliers/products/index.tsx b/apps/client/src/pages/suppliers/products/index.tsx
new file mode 100644
index 00000000..5af43bb0
--- /dev/null
+++ b/apps/client/src/pages/suppliers/products/index.tsx
@@ -0,0 +1,20 @@
+import { ProductsCatalogue } from "@sahil/features/Products/ProductsCatalogue";
+
+export default function SupplierProductsPage() {
+ return (
+
+
+
+
+
Supplier Page
+
+ Users can register through agents, an app, or USSD codes and set
+ delivery preferences.
+
+
+
+
+
+
+ );
+}
diff --git a/apps/courier/package.json b/apps/courier/package.json
index 36b533f8..76d0f89e 100644
--- a/apps/courier/package.json
+++ b/apps/courier/package.json
@@ -12,7 +12,7 @@
"@apollo/react-hooks": "^4.0.0",
"@formkit/auto-animate": "^0.7.0",
"@hookform/resolvers": "^3.3.0",
- "@react-google-maps/api": "^2.19.2",
+ "@react-google-maps/api": "^2.20.3",
"@sahil/configs": "*",
"@sahil/features": "*",
"@sahil/lib": "*",
diff --git a/apps/courier/src/Layout/layout.tsx b/apps/courier/src/Layout/layout.tsx
index d1c155fa..9aa7fda8 100644
--- a/apps/courier/src/Layout/layout.tsx
+++ b/apps/courier/src/Layout/layout.tsx
@@ -1,12 +1,28 @@
-import React, { ReactNode } from "react";
+import React, { ReactNode, useEffect } from "react";
import logo from "../../public/logo-alt.svg";
import { useRouter } from "next/router";
import { signOut, useSession } from "next-auth/react";
-import { Navbar } from "ui";
+import { ContentLayout, Navbar } from "ui";
+import NProgress from "nprogress";
+import "nprogress/nprogress.css";
+import { UserProvider } from '@sahil/features/auth/UserContext';
+import { useGetUserById } from "@sahil/lib/hooks/users";
+import { SplashScreen } from "ui";
+
+import {
+ HiOutlineTruck,
+ HiOutlineQueueList,
+ HiOutlineUser,
+ HiOutlineBell,
+ HiOutlineMapPin,
+ HiOutlineHome
+} from "react-icons/hi2";
+
+import { Button } from "ui";
+
type LayoutProps = {
children: ReactNode;
};
-import { HiOutlineQueueList, HiOutlineTruck } from "react-icons/hi2";
const links = [
{
@@ -21,26 +37,99 @@ const links = [
},
];
+const bottomLinks = [
+ {
+ icon: HiOutlineHome,
+ name: 'Home',
+ href: '/'
+ },
+ {
+ icon: HiOutlineMapPin,
+ name: 'Deliveries',
+ href: '/deliveries'
+ },
+ {
+ href: "/requests",
+ name: "Requests",
+ icon: HiOutlineBell,
+ },
+ {
+ icon: HiOutlineUser,
+ name: 'Profile',
+ href: '/profile'
+ }
+]
+
export default function Layout({ children, ...props }: LayoutProps) {
const router = useRouter();
const { data: session } = useSession();
+ const isAuthRoute = router.pathname.startsWith('/auth');
+
+ const { data: currentUser, loading: userLoading } = useGetUserById(session?.user?.id);
+ useEffect(() => {
+ NProgress.configure({
+ showSpinner: false,
+ trickleSpeed: 200,
+ minimum: 0.08
+ });
+
+ const handleStart = () => {
+ NProgress.start();
+ };
+
+ const handleStop = () => {
+ NProgress.done();
+ };
+
+ router.events.on('routeChangeStart', handleStart);
+ router.events.on('routeChangeComplete', handleStop);
+ router.events.on('routeChangeError', handleStop);
+
+ return () => {
+ router.events.off('routeChangeStart', handleStart);
+ router.events.off('routeChangeComplete', handleStop);
+ router.events.off('routeChangeError', handleStop);
+ };
+ }, [router]);
const onSignOut = async () => {
await signOut();
router.push("/auth/signin");
};
+
+ const handleBack = () => {
+ router.back();
+ };
+
+ const handleRefresh = () => {
+ router.replace(router.asPath);
+ };
+
+
+ if (!session && !isAuthRoute) {
+ return
;
+ }
return (
- <>
- {session?.user && (
-
- )}
-
{children}
- >
+
+
+
+ {children}
+
+
);
}
diff --git a/apps/courier/src/pages/deliveries/[deliveryId].tsx b/apps/courier/src/pages/deliveries/[deliveryId].tsx
index f8ddc8c9..f230fa92 100644
--- a/apps/courier/src/pages/deliveries/[deliveryId].tsx
+++ b/apps/courier/src/pages/deliveries/[deliveryId].tsx
@@ -1,84 +1,10 @@
import { useRouter } from "next/router";
import { useFetchDeliveryByPK } from "@sahil/lib/hooks/deliveries";
-import { Card } from "ui";
-import { OrderItem } from "@sahil/features/Orders/OrderItems";
-import { OrderInfoItem } from "@sahil/features/Orders/OrderDetails";
-import { formatDateTime } from "@sahil/lib/dates";
-import {
- HiCalendarDays,
- HiOutlineBanknotes,
- HiOutlineBriefcase,
- HiOutlineMap,
- HiOutlineMapPin,
- HiOutlineCheck,
- HiOutlineTruck,
-} from "react-icons/hi2";
+import { DeliveryDetails } from "@sahil/features/Deliveries/DeliveryDetails";
-const DeliveryOrders = ({ order, deliveryStatus, onUpdateStatus }) => {
- console.log(order);
- return (
-
- {order?.order_items.map((order) => (
-
- Order Details
- Delivery Order ID: {order.id}
- {order?.order_items && order?.order_items?.length > 0 ? (
-
- {order.order_items.map((item, index) => (
-
- ))}
-
- ) : (
- No items found for this order.
- )}
-
-
- ))}
-
- );
-};
-
-const DeliveryActions = ({ orderId, deliveryStatus, onUpdateStatus }) => {
- return (
-
-
-
-
-
- );
-};
-
-// Stub for useUpdateDeliveryStatus hook
const useUpdateDeliveryStatus = () => {
const updateDeliveryStatus = async (orderId: string, newStatus: string) => {
console.log(`Updating order ${orderId} to status ${newStatus}`);
- // Implement actual update logic here when the hook is ready
};
return { updateDeliveryStatus };
@@ -98,25 +24,7 @@ export default function DeliveryPage() {
if (loading) return
Loading delivery information...
;
if (!delivery) return
No delivery found
;
- const deliveryInfoItems = [
- {
- icon:
,
- label: "Payment Method",
- value: "N/A",
- },
- {
- icon:
,
- label: "Client",
- value: "N/A",
- },
- {
- icon:
,
- label: "Status",
- value: "N/A",
- },
- ];
-
- const handleUpdateStatus = async (orderId, newStatus) => {
+ const handleUpdateStatus = async (orderId: string, newStatus: string) => {
try {
await updateDeliveryStatus(orderId, newStatus);
// Optionally, you can refetch the delivery data here to update the UI
@@ -125,49 +33,50 @@ export default function DeliveryPage() {
}
};
- console.log(delivery[0]?.order);
+ // Dummy data for demonstration
+ const dummyDeliveryData = {
+ id: delivery[0]?.id || "D123",
+ status: "pending" as const, // Type assertion to fix status type
+ client: {
+ name: "John Doe",
+ address: "123 Main St, City, Country",
+ phone: "+1 234 567 890"
+ },
+ items: [
+ { name: "Product 1", quantity: 2, price: 29.99 },
+ { name: "Product 2", quantity: 1, price: 49.99 }
+ ],
+ payment: {
+ method: "Credit Card",
+ total: 109.97,
+ commission: 10.99
+ },
+ timing: {
+ startTime: "2024-03-15 14:30",
+ duration: "45 mins"
+ },
+ distance: "3.2 km"
+ };
return (
-
-
-
-
- {deliveryInfoItems.map((item, index) => (
-
- ))}
-
-
-
-
-
- {/* {
-
- delivery.status === 'pending' && (
-
- )} */}
+
+
+ {dummyDeliveryData.status === 'pending' && (
+
+
+
-
-
+ )}
);
}
diff --git a/apps/courier/src/pages/deliveries/index.tsx b/apps/courier/src/pages/deliveries/index.tsx
index a51f4733..2d6f52ce 100644
--- a/apps/courier/src/pages/deliveries/index.tsx
+++ b/apps/courier/src/pages/deliveries/index.tsx
@@ -1,7 +1,24 @@
import { ListDeliveries } from "@sahil/features/Deliveries/ListDeliveries";
+import { Button, IconButton } from "ui";
+import { HiOutlineArrowRight, HiOutlineArrowLeft } from "react-icons/hi2";
+
+
export default function Deliveries() {
return (
-
+
+
+
+
+
+
+
Hello, James
+
+ Here are your delivery requests
+
+
+
);
diff --git a/apps/courier/src/pages/index.tsx b/apps/courier/src/pages/index.tsx
index 9f15086e..c273249e 100644
--- a/apps/courier/src/pages/index.tsx
+++ b/apps/courier/src/pages/index.tsx
@@ -1,20 +1,10 @@
-import Image from "next/image";
-import { Inter } from "next/font/google";
-import { useFetchCouriers } from "@sahil/lib/hooks/couriers";
-import { LatestDeliveries } from "@sahil/features/Couriers/LatestDeliveries";
-import { IncomingDeliveryRequest } from "@sahil/features/Couriers/IncomingDeliveryRequest";
-import { PhoneNumberInput } from "@sahil/features/auth/PhoneNumberInput";
-import { VerificationCodeInput } from "@sahil/features/auth/VerificationCodeInput";
-
-const request = {
- id: 1,
- name: "BBQ Pizza",
-};
-
+import { MapView } from "@sahil/features/Maps/MapView";
+import { TripInfo } from "@sahil/features/Maps/TripInfo";
export default function Home() {
return (
);
}
diff --git a/apps/courier/src/pages/notifications/index.tsx b/apps/courier/src/pages/notifications/index.tsx
new file mode 100644
index 00000000..03359b0b
--- /dev/null
+++ b/apps/courier/src/pages/notifications/index.tsx
@@ -0,0 +1,9 @@
+import { ListNotifications } from "@sahil/features/Notifications/ListNotifications";
+
+export default function Notifications() {
+ return (
+
+ );
+}
diff --git a/apps/courier/src/pages/requests/[requestId].tsx b/apps/courier/src/pages/requests/[requestId].tsx
index a38cb4d0..25ee20f0 100644
--- a/apps/courier/src/pages/requests/[requestId].tsx
+++ b/apps/courier/src/pages/requests/[requestId].tsx
@@ -82,7 +82,7 @@ export default function RequestPage() {
const isSingleOrder = deliveryRequest[0].delivery_request_orders.length === 1;
return (
-
+
diff --git a/apps/courier/src/pages/requests/index.tsx b/apps/courier/src/pages/requests/index.tsx
index a5af0a62..1a2a1f0c 100644
--- a/apps/courier/src/pages/requests/index.tsx
+++ b/apps/courier/src/pages/requests/index.tsx
@@ -1,8 +1,24 @@
import { ListDeliveryRequests } from "@sahil/features/Deliveries/ListDeliveryRequests";
+import { Button } from "ui";
+import { HiOutlineArrowRight } from "react-icons/hi2";
export default function Requests() {
return (
-
+
+
+
+
Hello, James
+
+ Here are your delivery requests
+
+
+
+
+
+
);
diff --git a/apps/website/public/about.png b/apps/website/public/about.png
deleted file mode 100644
index 812fdae8..00000000
Binary files a/apps/website/public/about.png and /dev/null differ
diff --git a/apps/website/public/agent-business.png b/apps/website/public/agent-business.png
deleted file mode 100644
index 7220ac1c..00000000
Binary files a/apps/website/public/agent-business.png and /dev/null differ
diff --git a/apps/website/public/agent-desktop.svg b/apps/website/public/agent-desktop.svg
new file mode 100644
index 00000000..3f1a3a2a
--- /dev/null
+++ b/apps/website/public/agent-desktop.svg
@@ -0,0 +1,161 @@
+
diff --git a/apps/website/public/agent-mobile.svg b/apps/website/public/agent-mobile.svg
new file mode 100644
index 00000000..85f6e54d
--- /dev/null
+++ b/apps/website/public/agent-mobile.svg
@@ -0,0 +1,105 @@
+
diff --git a/apps/website/public/agent-supplier.png b/apps/website/public/agent-supplier.png
deleted file mode 100644
index d69b6609..00000000
Binary files a/apps/website/public/agent-supplier.png and /dev/null differ
diff --git a/apps/website/public/agent.png b/apps/website/public/agent.png
deleted file mode 100644
index ec468038..00000000
Binary files a/apps/website/public/agent.png and /dev/null differ
diff --git a/apps/website/public/cta-yellow.svg b/apps/website/public/cta-yellow.svg
deleted file mode 100644
index ff7bea90..00000000
--- a/apps/website/public/cta-yellow.svg
+++ /dev/null
@@ -1,81 +0,0 @@
-
diff --git a/apps/website/public/cta.png b/apps/website/public/cta.png
deleted file mode 100644
index b5dfe803..00000000
Binary files a/apps/website/public/cta.png and /dev/null differ
diff --git a/apps/website/public/delivery.jpg b/apps/website/public/delivery.jpg
new file mode 100644
index 00000000..16abceec
Binary files /dev/null and b/apps/website/public/delivery.jpg differ
diff --git a/apps/website/public/feature-1.svg b/apps/website/public/feature-1.svg
new file mode 100644
index 00000000..6f52c3ea
--- /dev/null
+++ b/apps/website/public/feature-1.svg
@@ -0,0 +1,22 @@
+
diff --git a/apps/website/public/feature-2.svg b/apps/website/public/feature-2.svg
new file mode 100644
index 00000000..b128fc02
--- /dev/null
+++ b/apps/website/public/feature-2.svg
@@ -0,0 +1,26 @@
+
diff --git a/apps/website/public/feature-3.svg b/apps/website/public/feature-3.svg
new file mode 100644
index 00000000..9a4942a8
--- /dev/null
+++ b/apps/website/public/feature-3.svg
@@ -0,0 +1,85 @@
+
diff --git a/apps/website/public/hero.png b/apps/website/public/hero.png
deleted file mode 100644
index 39dd4b8b..00000000
Binary files a/apps/website/public/hero.png and /dev/null differ
diff --git a/apps/website/public/service-3.svg b/apps/website/public/service-3.svg
deleted file mode 100644
index 6d319873..00000000
--- a/apps/website/public/service-3.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/apps/website/src/app/about/page.tsx b/apps/website/src/app/about/page.tsx
index 97317d82..ac9ac1e3 100644
--- a/apps/website/src/app/about/page.tsx
+++ b/apps/website/src/app/about/page.tsx
@@ -1,4 +1,6 @@
-import { ComingSoon, GridContainer, PageTitle } from "@/components/shared";
+import { Card, GridContainer, JourneySection, PageTitle, SectionWrapper } from "@/components/shared";
+import about from "../../../public/delivery.jpg";
+import { Cta } from "@/components/segments";
export const metadata = {
title: "About Us - Sahil App",
@@ -15,8 +17,52 @@ export default function AboutPage() {
description="Get to know us better! Learn more about our mission, our vision, and the values that guide our work."
/>
-
+
+
+
+
+
+ We are a groundbreaking supply chain management platform that empowers small and medium-sized enterprises
+ (SMEs) in challenging business environments.
+ {''}
+
+ Our platform is committed to providing a seamless
+ experience for all our users, ensuring they can focus on what matters most - growing their
+ business.
+
+
+
+
+
+
>
);
}
diff --git a/apps/website/src/app/contact/page.tsx b/apps/website/src/app/contact/page.tsx
index 2d81b046..a22283ff 100644
--- a/apps/website/src/app/contact/page.tsx
+++ b/apps/website/src/app/contact/page.tsx
@@ -1,21 +1,81 @@
-import { ComingSoon, GridContainer, PageTitle } from "@/components/shared";
+import {
+ ContactCard,
+ ContactCardProps,
+ GridContainer,
+ PageTitle,
+} from "@/components/shared";
+import { Cta, Faqs } from "@/components/segments";
+import { HiEnvelope, HiMapPin, HiPhone } from "react-icons/hi2";
export const metadata = {
title: "Contact Us - Sahil App",
description: "We’re here to help and would love to hear from you.",
};
+const contactDetails: ContactCardProps[] = [
+ {
+ icon: HiEnvelope,
+ title: "Drop us a line",
+ content: "sahil.business@gmail.com",
+ linkHref: "mailto:sahil.business@gmail.com",
+ colorScheme: "neutral"
+ },
+ {
+ icon: HiMapPin,
+ title: "Our Head Office",
+ content: (
+ <>
+ Norrsken House Kigali
+ 1 KN 78 St, Kigali - Rwanda
+ >
+ ),
+ colorScheme: "gray"
+ },
+ {
+ icon: HiPhone,
+ title: "Book a Call",
+ content: "+250-790-336-525",
+ linkHref: "tel:+250790336525",
+ colorScheme: "slate"
+ }
+];
+
export default function ContactPage() {
return (
<>
-
+
+
+
+
+ Reach Us
+
+
+ If you have any questions or need assistance, feel free to reach out to us through our contact details below.
+
+
+ {contactDetails.map((contact, index) => (
+
+ ))}
+
+
+
+
+
+
>
);
}
diff --git a/apps/website/src/app/features/page.tsx b/apps/website/src/app/features/page.tsx
index dbde354a..cdc3ded3 100644
--- a/apps/website/src/app/features/page.tsx
+++ b/apps/website/src/app/features/page.tsx
@@ -1,4 +1,5 @@
-import { PageTitle, GridContainer, ComingSoon } from "@/components/shared";
+import { Benefits, Cta, Features } from "@/components/segments";
+import { PageTitle } from "@/components/shared";
export const metadata = {
title: "Features - Sahil App",
@@ -14,9 +15,9 @@ export default function FeaturesPage() {
subtitle="Our Services"
description="Explore the wide range of features we offer to help you revolutionize your business operations."
/>
-
-
-
+
+
+
>
);
}
diff --git a/apps/website/src/app/layout.tsx b/apps/website/src/app/layout.tsx
index 1b239f00..50a36700 100644
--- a/apps/website/src/app/layout.tsx
+++ b/apps/website/src/app/layout.tsx
@@ -1,12 +1,11 @@
import "../styles/globals.css";
import type { Metadata } from "next";
-import { Alata, Plus_Jakarta_Sans } from "next/font/google";
+import { Inter, Plus_Jakarta_Sans } from "next/font/google";
import { Navbar, Footer } from "@/components/layout";
-const alata = Alata({
- weight: "400",
+const inter = Inter({
subsets: ["latin"],
- variable: "--font-alata",
+ variable: "--font-inter",
display: "swap",
});
@@ -29,7 +28,7 @@ export default function RootLayout({
return (
{children}
diff --git a/apps/website/src/app/page.tsx b/apps/website/src/app/page.tsx
index b67fe4bc..558516ec 100644
--- a/apps/website/src/app/page.tsx
+++ b/apps/website/src/app/page.tsx
@@ -3,9 +3,9 @@ import {
Features,
About,
Benefits,
- RegistrationRole,
Cta,
Faqs,
+ ParterWithUs,
} from "../components/segments";
export default function Page() {
@@ -15,7 +15,7 @@ export default function Page() {
-
+
diff --git a/apps/website/src/app/partners/businesses/page.tsx b/apps/website/src/app/partners/businesses/page.tsx
new file mode 100644
index 00000000..c19f7425
--- /dev/null
+++ b/apps/website/src/app/partners/businesses/page.tsx
@@ -0,0 +1,62 @@
+import { Input, PartnerTitle } from "@/components/shared";
+import { HiOutlineArrowUpRight } from "react-icons/hi2";
+
+export const metadata = {
+ title: "Partners - Sahil App",
+ description:
+ "We foster a culture of partnership and building strong, collaborative relationships. Partner with Sahil. Sahil logistics.",
+};
+
+export default function BusinessesPage() {
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/apps/website/src/app/partners/couriers/page.tsx b/apps/website/src/app/partners/couriers/page.tsx
new file mode 100644
index 00000000..cb886f90
--- /dev/null
+++ b/apps/website/src/app/partners/couriers/page.tsx
@@ -0,0 +1,59 @@
+import { Input, PartnerTitle, Select } from "@/components/shared";
+import { HiOutlineArrowUpRight } from "react-icons/hi2";
+
+export const metadata = {
+ title: "Partners - Sahil App",
+ description:
+ "We foster a culture of partnership and building strong, collaborative relationships. Partner with Sahil. Sahil logistics.",
+};
+
+export default function CouriersPage() {
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/apps/website/src/app/partners/page.tsx b/apps/website/src/app/partners/page.tsx
new file mode 100644
index 00000000..d939fbca
--- /dev/null
+++ b/apps/website/src/app/partners/page.tsx
@@ -0,0 +1,27 @@
+import {
+ Benefits,
+ Cta,
+ ParterWithUs
+} from "@/components/segments";
+import { PageTitle } from "@/components/shared";
+
+export const metadata = {
+ title: "Partners - Sahil App",
+ description:
+ "We foster a culture of partnership and building strong, collaborative relationships. Partner with Sahil. Sahil logistics.",
+};
+
+export default function PartnersPage() {
+ return (
+ <>
+
+
+
+
+ >
+ );
+}
diff --git a/apps/website/src/app/partners/suppliers/page.tsx b/apps/website/src/app/partners/suppliers/page.tsx
new file mode 100644
index 00000000..e789e990
--- /dev/null
+++ b/apps/website/src/app/partners/suppliers/page.tsx
@@ -0,0 +1,61 @@
+import { Input, PartnerTitle, TextArea } from "@/components/shared";
+import { HiOutlineArrowUpRight } from "react-icons/hi2";
+
+export const metadata = {
+ title: "Partners - Sahil App",
+ description:
+ "We foster a culture of partnership and building strong, collaborative relationships. Partner with Sahil. Sahil logistics.",
+};
+
+export default function SuppliersPage() {
+ return (
+ <>
+
+ >
+ );
+}
diff --git a/apps/website/src/app/privacy-policy/page.tsx b/apps/website/src/app/privacy-policy/page.tsx
index f26e0963..d510e1cf 100644
--- a/apps/website/src/app/privacy-policy/page.tsx
+++ b/apps/website/src/app/privacy-policy/page.tsx
@@ -1,4 +1,4 @@
-import { PageTitle, GridContainer, ComingSoon } from "@/components/shared";
+import { PageTitle, GridContainer } from "@/components/shared";
export const metadata = {
title: "Privacy Policy - Sahil App",
@@ -14,7 +14,84 @@ export default function privacyPolicy() {
description="Learn about our commitment to protecting your personal information and how we handle data privacy."
/>
-
+
+
+
+
Last Updated Date: November 21, 2024
+
+ At Sahil, we are committed to protecting your privacy and ensuring that your personal information is handled with care.
+ Our platform connects businesses, suppliers, and couriers to create a seamless and efficient supply chain solution.
+
+
+ We are dedicated to maintaining transparency and providing you with control over your data. If you have any questions or
+ concerns, feel free to reach out to us at sahil.business@gmail.com
+
+
+
+
+
What Information Do We Collect?
+
A. Information You Provide Directly
+
+ • Personal Information: Name, email address, phone number, and business details such as business name and address.
+ • Profile Information: Preferences, feedback, and details you include when setting up your account.
+ • Communication Details: Information you provide through customer support, surveys, or platform feedback.
+
+
B. Information from Third Parties
+
+ • Partners: Suppliers, couriers, or third-party services integrated with Sahil.
+ • Analytics Providers: Tools like Google Analytics to monitor platform performance.
+
+
+
+
+
How We Use Your Information?
+
+ • To Communicate with You: Send updates, respond to inquiries, and provide customer support.
+ • To Enhance User Experience: Analyze platform usage to improve functionality, features, and overall performance.
+ • To Ensure Security: Detect and prevent fraudulent activity or unauthorized access to our platform.
+
+
+
+
What Are Your Privacy Rights?
+
A. Access and Update Your Data
+
+ • You can review and update your account details anytime by logging into the platform or contacting customer support.
+
+
B. Opt-Out of Communications
+
+ • Marketing Emails: Unsubscribe using the link at the bottom of promotional emails.
+ • Cookies and Tracking: Adjust your browser settings to block cookies or use our cookie management tool.
+
+
C. Lodge a Complaint
+
+ • If you believe your rights have been violated, you can file a complaint with your local data protection authority.
+
+
+
+
+
How Do We Keep Your Information Safe?
+
A. Encryption
+
+ • All sensitive data is encrypted during storage and transmission using industry-standard encryption protocols.
+
+
B. Secure Access Controls
+
+ • Access to your information is limited to authorized personnel and protected by multi-factor authentication.
+
+
C. Fraud Prevention Tools
+
+ • Real-time monitoring systems detect and block suspicious activities, such as unauthorized login attempts or fraudulent transactions.
+
+
C. Data Backup and Recovery
+
+ • Automated backups ensure that your information is not lost in case of system failures, and recovery procedures are in place to restore functionality quickly.
+
+
+
+
+ "Despite these efforts, no online platform is 100% secure. We encourage you to take precautions, such as using strong passwords and avoiding sharing sensitive information over insecure channels."
+
+
>
);
diff --git a/apps/website/src/components/layout/Footer.tsx b/apps/website/src/components/layout/Footer.tsx
index cb0d1ed6..0b774335 100644
--- a/apps/website/src/components/layout/Footer.tsx
+++ b/apps/website/src/components/layout/Footer.tsx
@@ -5,164 +5,172 @@ import { GridContainer } from "../shared";
const quickLinks = [
{ name: "Home", href: "/" },
- { name: "About", href: "/about" },
+ { name: "About Us", href: "/about" },
{ name: "Features", href: "/features" },
- { name: "Blog", href: "/blog" },
+ { name: "Partner with Us", href: "/partners" },
+ // { name: "Blog", href: "/blog" },
];
const companyLinks = [
- { name: "Support Center", href: "/contact" },
{ name: "Contact Us", href: "/contact" },
- { name: "FAQs", href: "/about" },
+ { name: "FAQs", href: "/contact" },
{ name: "Privacy Policy", href: "/privacy-policy" },
];
export const Footer = () => {
return (
-