diff --git a/apps/edr-freight-web/portal/src/App.tsx b/apps/edr-freight-web/portal/src/App.tsx
index 591f2ec38..65b928830 100644
--- a/apps/edr-freight-web/portal/src/App.tsx
+++ b/apps/edr-freight-web/portal/src/App.tsx
@@ -42,6 +42,8 @@ import DocumentsPage from "./pages/documents/DocumentsPage";
import DropdownSettingsPage from "./pages/admin/DropdownSettingsPage";
import FileUploadSettingsPage from "./pages/admin/FileUploadSettingsPage";
import MyPortalPage from "./pages/portal/MyPortalPage";
+import EDRFreightLandingPage from "./pages/EDRFreightLandingPage";
+import SignupPage from "./pages/accounts/SignupPage";
const sidebarItems: SidebarItem[] = [
{ label: "My Portal", href: "/portal", icon: },
@@ -74,8 +76,10 @@ const App = () => {
if (!user) {
return (
+ } />
+ } />
} />
- } />
+ {/* } /> */}
);
}
diff --git a/apps/edr-freight-web/portal/src/pages/EDRFreightLandingPage.tsx b/apps/edr-freight-web/portal/src/pages/EDRFreightLandingPage.tsx
new file mode 100644
index 000000000..d0faeb662
--- /dev/null
+++ b/apps/edr-freight-web/portal/src/pages/EDRFreightLandingPage.tsx
@@ -0,0 +1,612 @@
+import {
+ ArrowRight,
+ BarChart3,
+ CheckCircle2,
+ Clock3,
+ Globe2,
+ Mail,
+ MapPin,
+ Menu,
+ Phone,
+ ShieldCheck,
+ Train,
+ Truck,
+ Users,
+} from "lucide-react";
+
+const stats = [
+ {
+ label: "Active Corridors",
+ value: "24+",
+ icon: Globe2,
+ },
+ {
+ label: "Monthly Shipments",
+ value: "12K+",
+ icon: Truck,
+ },
+ {
+ label: "Fleet Coverage",
+ value: "16 Trains",
+ icon: Train,
+ },
+ {
+ label: "On-time Delivery",
+ value: "100%",
+ icon: Clock3,
+ },
+];
+
+const features = [
+ {
+ title: "Real-time Shipment Tracking",
+ description:
+ "Track consignments across Addis Ababa, Dire Dawa, Djibouti, Mojo, and all major freight corridors.",
+ icon: Truck,
+ },
+ {
+ title: "Rail Freight Operations",
+ description:
+ "Monitor train schedules, operational performance, maintenance, and corridor activity.",
+ icon: Train,
+ },
+ {
+ title: "Smart Analytics Dashboard",
+ description:
+ "Visualize operational insights, shipment trends, and corridor performance in real time.",
+ icon: BarChart3,
+ },
+ {
+ title: "Enterprise-grade Security",
+ description:
+ "Secure portal access, billing workflows, document management, and customer operations.",
+ icon: ShieldCheck,
+ },
+];
+
+const corridors = [
+ "Addis Ababa → Djibouti",
+ "Dire Dawa → Djibouti",
+ "Adama → Dire Dawa",
+ "Mojo → Djibouti",
+ "Awash → Holhol",
+ "Mieso → Aysha",
+];
+
+export default function EDRFreightLandingPage() {
+ return (
+
+ {/* Navbar */}
+
+
+ {/* Hero */}
+
+
+
+
+
+
+
+ Ethiopia–Djibouti Railway Freight Platform
+
+
+
+ Smarter Railway Freight Logistics For Modern Operations
+
+
+
+ EDR Freight enables logistics companies and railway operators
+ to manage shipments, monitor freight corridors, optimize train
+ operations, and streamline enterprise logistics workflows.
+
+
+
+
+
+ {[
+ "Real-time Tracking",
+ "Railway Analytics",
+ "Secure Operations",
+ "Multi-corridor Freight",
+ ].map((item) => (
+
+
+ {item}
+
+ ))}
+
+
+
+ {/* Hero Dashboard Card */}
+
+
+
+
+
+ Freight Operations
+
+
+
+ Live Statistics
+
+
+
+
+
+
+
+
+
+ {stats.map((item) => {
+ const Icon = item.icon;
+
+ return (
+
+
+
+
+
+
+ {item.value}
+
+
+
+ {item.label}
+
+
+ );
+ })}
+
+
+
+
+
+
+ Corridor Performance
+
+
+
+ 99%
+
+
+
+
+ Operational
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 16 Trains Active
+
+
+
+ Across all freight corridors
+
+
+
+
+
+
+
+
+ {/* Features */}
+
+
+
+
+ Platform Features
+
+
+
+ Everything needed for freight operations
+
+
+
+ Centralized railway freight operations with live shipment
+ visibility, operational monitoring, customer management,
+ and intelligent logistics insights.
+
+
+
+
+ {features.map((feature) => {
+ const Icon = feature.icon;
+
+ return (
+
+
+
+
+
+
+ {feature.title}
+
+
+
+ {feature.description}
+
+
+ );
+ })}
+
+
+
+
+ {/* Corridors */}
+
+
+
+
+
+ Freight Corridors
+
+
+
+ Connected logistics infrastructure
+
+
+
+ Efficiently move freight across strategic Ethiopia–Djibouti
+ railway corridors with operational visibility and optimized
+ transport coordination.
+
+
+
+ {corridors.map((corridor) => (
+
+ ))}
+
+
+
+
+
+
+
+ Operational Insights
+
+
+
+ Freight Performance
+
+
+
+
+
+
+
+
+
+ {[
+ {
+ label: "Bookings Processed",
+ value: "9,842",
+ progress: "92%",
+ },
+ {
+ label: "On-time Shipments",
+ value: "99%",
+ progress: "99%",
+ },
+ {
+ label: "Customer Satisfaction",
+ value: "99%",
+ progress: "99%",
+ },
+ ].map((item) => (
+
+
+ {item.label}
+
+
+ {item.value}
+
+
+
+
+
+ ))}
+
+
+
+
+
+
+
+
+
+
+ Enterprise-ready Platform
+
+
+
+ Designed for large-scale freight and railway operations.
+
+
+
+
+
+
+
+
+
+ {/* Contact */}
+
+
+ {/* CTA */}
+
+
+
+
+
+ EDR Freight Platform
+
+
+
+ Transform railway freight operations
+
+
+
+ Centralize logistics workflows, optimize freight movement,
+ and gain real-time operational visibility across all
+ railway corridors.
+
+
+
+
+
+
+
+
+ {/* Footer */}
+
+
+ );
+}
\ No newline at end of file
diff --git a/apps/edr-freight-web/portal/src/pages/accounts/SignupPage.tsx b/apps/edr-freight-web/portal/src/pages/accounts/SignupPage.tsx
new file mode 100644
index 000000000..6afa5b421
--- /dev/null
+++ b/apps/edr-freight-web/portal/src/pages/accounts/SignupPage.tsx
@@ -0,0 +1,350 @@
+import { ArrowRight, ShieldCheck, Train, UserPlus } from "lucide-react";
+import { useState } from "react";
+
+const userTypes = [
+ "Customer",
+ "Operator",
+ "Dispatcher",
+ "Admin",
+];
+
+export default function SignupPage() {
+ const [form, setForm] = useState({
+ email: "",
+ username: "",
+ phoneNumber: "",
+ userType: "",
+ name: {
+ am: "",
+ en: "",
+ },
+ });
+
+ const handleChange = (
+ field: string,
+ value: string,
+ nested?: boolean
+ ) => {
+ if (nested) {
+ setForm((prev) => ({
+ ...prev,
+ name: {
+ ...prev.name,
+ [field]: value,
+ },
+ }));
+
+ return;
+ }
+
+ setForm((prev) => ({
+ ...prev,
+ [field]: value,
+ }));
+ };
+
+ const handleSubmit = (e: React.FormEvent) => {
+ e.preventDefault();
+
+ console.log(form);
+
+ /*
+ Expected payload:
+ {
+ email: "",
+ username: "",
+ phoneNumber: "",
+ userType: "",
+ name: {
+ am: "",
+ en: ""
+ }
+ }
+ */
+ };
+
+ return (
+
+
+ {/* Left Side */}
+
+
+
+
+
+
+
+
+
+
+
+ EDR Freight
+
+
+
+ Railway Logistics Platform
+
+
+
+
+
+
+ Smart Freight Operations
+
+
+
+ Create your freight operations account
+
+
+
+ Join EDR Freight to manage shipments, monitor railway
+ operations, track consignments, and streamline logistics
+ workflows across Ethiopia and Djibouti.
+
+
+
+
+ {[
+ "Real-time shipment tracking",
+ "Secure logistics management",
+ "Enterprise-grade operations",
+ "Multi-corridor freight monitoring",
+ ].map((item) => (
+
+ ))}
+
+
+
+
+
+
+
+ Active Corridors
+
+
+
+ 24+
+
+
+
+
+ Operational
+
+
+
+
+
+
+
+ {/* Right Side */}
+
+
+ {/* Mobile Logo */}
+
+
+
+
+
+
+
+ EDR Freight
+
+
+
+ Railway Logistics Platform
+
+
+
+
+
+
+
+
+
+
+
+ Create Account
+
+
+
+ Register to access EDR Freight services and
+ railway logistics operations.
+
+
+
+
+
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/apps/edr-freight-web/portal/src/services/crud.ts b/apps/edr-freight-web/portal/src/services/crud.ts
deleted file mode 100644
index 4ebb8d8a1..000000000
--- a/apps/edr-freight-web/portal/src/services/crud.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-import { client } from "@/utils/api";
-import { AxiosRequestConfig, AxiosResponse } from "axios";
-
-
-class ApiService {
- async get(
- url: string,
- config?: AxiosRequestConfig
- ): Promise {
- const response: AxiosResponse =
- await client.get(url, config);
-
- return response.data;
- }
-
- async post(
- url: string,
- data?: any,
- config?: AxiosRequestConfig
- ): Promise {
- const response: AxiosResponse =
- await client.post(url, data, config);
-
- return response.data;
- }
-
- async put(
- url: string,
- data?: any,
- config?: AxiosRequestConfig
- ): Promise {
- const response: AxiosResponse =
- await client.put(url, data, config);
-
- return response.data;
- }
-
- async patch(
- url: string,
- data?: any,
- config?: AxiosRequestConfig
- ): Promise {
- const response: AxiosResponse =
- await client.patch(url, data, config);
-
- return response.data;
- }
-
- async delete(
- url: string,
- config?: AxiosRequestConfig
- ): Promise {
- const response: AxiosResponse =
- await client.delete(url, config);
-
- return response.data;
- }
-}
-
-export const api = new ApiService();
\ No newline at end of file