diff --git a/Frontend/App.css b/Frontend/App.css
new file mode 100644
index 0000000..9df32c3
--- /dev/null
+++ b/Frontend/App.css
@@ -0,0 +1,145 @@
+body {
+ font-family: 'Raleway', sans-serif;
+ background-color: #3B3D3B;
+}
+.wrapper {
+ width: 800px;
+ height: 600px;
+ position: relative;
+ margin: 3% auto;
+ box-shadow: 2px 18px 70px 0px #9D9D9D;
+ overflow: hidden;
+}
+
+.login-text {
+ width: 800px;
+ height:450px;
+ background: linear-gradient(to left, #ab68ca, #de67a3);
+ position: absolute;
+ top: -300px;
+ box-sizing: border-box;
+ padding: 6%;
+ transition: all 0.5s ease-in-out;
+ z-index: 11;
+}
+
+.text {
+ margin-left: 20px;
+ color: #fff;
+ display: none;
+ transition: all 0.5s ease-in-out;
+ transition-delay: 0.3s;
+
+ a, a:visited {
+ font-size: 36px;
+ color: #fff;
+ text-decoration: none;
+ font-weight: bold;
+ display: block;
+ }
+
+ hr {
+ width: 10%;
+ float: left;
+ background-color: #fff;
+ font-size: 16px;
+ }
+
+ input {
+ margin-top: 30px;
+ height: 40px;
+ width: 300px;
+ border-radius: 2px;
+ border: none;
+ background-color: #444;
+ opacity: 0.6;
+ outline: none;
+ color: #fff;
+ padding-left: 10px;
+ }
+
+ input[type=text] {
+ margin-top: 60px;
+ }
+
+ button {
+ margin-top: 60px;
+ height: 40px;
+ width: 140px;
+ outline: none;
+ }
+
+ .login-btn {
+ background: #fff;
+ border: none;
+ border-radius: 2px;
+ color: #696a86;
+ }
+
+ .signup-btn {
+ background: transparent;
+ border: 2px solid #fff;;
+ border-radius: 2px;
+ color: #fff;
+ margin-left: 30px;
+ }
+}
+
+.cta {
+ width: 60px;
+ height: 60px;
+ border-radius: 50%;
+ background: #696a86;
+ border: 2px solid #fff;
+ position: absolute;
+ bottom: -30px;
+ left: 370px;
+ color: #fff;
+ outline: none;
+ cursor: pointer;
+ z-index: 11;
+}
+
+.call-text {
+ background-color: #fff;
+ width: 800px;
+ height: 450px;
+ position: absolute;
+ bottom: 0;
+ padding: 10%;
+ box-sizing: border-box;
+ text-align: center;
+
+ h1 {
+ font-size: 42px;
+ margin-top: 10%;
+ color: #696a86;
+
+ span {
+ color: #333;
+ font-weight: bolder;
+
+ }
+ }
+
+ button {
+ height: 40px;
+ width: 180px;
+ border: none;
+ border-radius: 20px;
+ background: linear-gradient(to left, #ab68ca, #de67a3);
+ color: #fff;
+ font-weight: bolder;
+ margin-top: 30px;
+ cursor: pointer;
+ outline: none;
+ }
+}
+
+.show-hide {
+ display: block;
+}
+
+.expand {
+ transform: translateY(300px);
+}
diff --git a/Frontend/App.jsx b/Frontend/App.jsx
new file mode 100644
index 0000000..24797de
--- /dev/null
+++ b/Frontend/App.jsx
@@ -0,0 +1,69 @@
+
+import React, { useState } from 'react';
+import { useNavigate } from 'react-router-dom';
+import './App.css'; // Your global styles
+
+const App = () => {
+ const [username, setUsername] = useState('');
+ const [password, setPassword] = useState('');
+ const navigate = useNavigate();
+ const [showLogin, setShowLogin] = useState(false); // Toggle Login Section
+ const [ctaIcon, setCtaIcon] = useState('fas fa-chevron-down'); // Initial icon state
+
+ const handleLogin = () => {
+ // Check credentials
+ if (username === 'luminous' && password === 'luminous') {
+ navigate('/home'); // Redirect to Home Page
+ } else {
+ alert('Invalid Username or Password'); // Simple Alert for Error
+ }
+ };
+
+ const handleToggle = () => {
+ setShowLogin((prev) => !prev);
+ // Change icon based on the current state
+ setCtaIcon((prev) => (prev === 'fas fa-chevron-down' ? 'fas fa-chevron-up' : 'fas fa-chevron-down'));
+ };
+
+ return (
+
+
+
+ ^
+
+ {/* Show the login form based on the showLogin state */}
+
+
Login
+
+
+
setUsername(e.target.value)}
+ />
+
+
setPassword(e.target.value)}
+ />
+
+
+ Log In
+
+
+
+
+
+
+ LUMINOUS MEANS SAVING'S
+
+
+
+
+ );
+};
+
+export default App;
diff --git a/Frontend/Home.jsx b/Frontend/Home.jsx
new file mode 100644
index 0000000..41cc984
--- /dev/null
+++ b/Frontend/Home.jsx
@@ -0,0 +1,35 @@
+import React from 'react';
+
+const Home = () => {
+ return (
+ {/* Use a viewport height for the main container */}
+ {/* First Part: 25-35-40 Ratio */}
+
+
+ {/* Second Part: 35-65 Ratio */}
+
+
+ );
+};
+
+export default Home;
diff --git a/Frontend/assets/font/FoundersGrotesk-Semibold.ttf b/Frontend/assets/font/FoundersGrotesk-Semibold.ttf
new file mode 100644
index 0000000..35545c8
Binary files /dev/null and b/Frontend/assets/font/FoundersGrotesk-Semibold.ttf differ
diff --git a/Frontend/assets/font/NeueMontreal-Regular.ttf b/Frontend/assets/font/NeueMontreal-Regular.ttf
new file mode 100644
index 0000000..3f9a92b
Binary files /dev/null and b/Frontend/assets/font/NeueMontreal-Regular.ttf differ
diff --git a/Frontend/assets/react.svg b/Frontend/assets/react.svg
new file mode 100644
index 0000000..6c87de9
--- /dev/null
+++ b/Frontend/assets/react.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Frontend/components/About.jsx b/Frontend/components/About.jsx
new file mode 100644
index 0000000..b4d4451
--- /dev/null
+++ b/Frontend/components/About.jsx
@@ -0,0 +1,17 @@
+import React from 'react'
+
+function About() {
+ return (
+
+
+ Ochi is a strategic presentation agency for forward-thinking businesses that need to raise funds, sell products, explain complex ideas, and hire great people.
+
+
+
+
kri
+
+
+ )
+}
+
+export default About
\ No newline at end of file
diff --git a/Frontend/components/GrafanaDashboards.jsx b/Frontend/components/GrafanaDashboards.jsx
new file mode 100644
index 0000000..c73bbb6
--- /dev/null
+++ b/Frontend/components/GrafanaDashboards.jsx
@@ -0,0 +1,39 @@
+// src/components/GrafanaDashboard.js
+import React, { useEffect, useState } from 'react';
+import { getDashboard } from '../services/grafanaService';
+
+const GrafanaDashboard = ({ dashboardId }) => {
+ const [dashboard, setDashboard] = useState(null);
+
+ useEffect(() => {
+ const fetchDashboard = async () => {
+ try {
+ const data = await getDashboard(dashboardId);
+ setDashboard(data);
+ } catch (error) {
+ console.error('Failed to fetch dashboard:', error);
+ }
+ };
+
+ fetchDashboard();
+ }, [dashboardId]);
+
+ if (!dashboard) {
+ return Loading...
;
+ }
+
+ return (
+
+
{dashboard.dashboard.title}
+
+
+ );
+};
+
+export default GrafanaDashboard;
diff --git a/Frontend/components/Huffer.jsx b/Frontend/components/Huffer.jsx
new file mode 100644
index 0000000..88b4834
--- /dev/null
+++ b/Frontend/components/Huffer.jsx
@@ -0,0 +1,37 @@
+import React from 'react';
+import { motion } from 'framer-motion';
+
+function Huffer() {
+ return (
+
+
+
+ WE ARE OCHI
+
+
+ WE ARE OCHI WE ARE OCHI
+
+
+ WE ARE OCHI WE ARE OCHI
+
+
+
+ );
+}
+
+export default Huffer;
diff --git a/Frontend/components/Landingpage.jsx b/Frontend/components/Landingpage.jsx
new file mode 100644
index 0000000..821397b
--- /dev/null
+++ b/Frontend/components/Landingpage.jsx
@@ -0,0 +1,73 @@
+import React from 'react';
+
+function Landingpage() {
+ const grafanaURL =
+ 'https://krishnafauj02.grafana.net/public-dashboards/9942ae56688b4a73b89370d6040bb2d6';
+
+ return (
+
+ {/* First Section (1/4 height) */}
+
+
+
+
+
+
+ {/* Middle Section (1/2 height) */}
+
+
+
+
+
+
+ {/* Third Section (1/4 height) */}
+
+
+
+
+
+
+ );
+}
+
+export default Landingpage;
diff --git a/Frontend/components/Navbar.jsx b/Frontend/components/Navbar.jsx
new file mode 100644
index 0000000..c632ba3
--- /dev/null
+++ b/Frontend/components/Navbar.jsx
@@ -0,0 +1,27 @@
+import React from 'react'
+
+function Navbar() {
+ return (
+
+
+
+ {["Services", "Our Work", "About Us","Insights","Contact Us"].map((item,index) => (
+
+ {item}
+
+ ))}
+
+
+
+ )
+}
+
+export default Navbar
\ No newline at end of file
diff --git a/Frontend/image.png b/Frontend/image.png
new file mode 100644
index 0000000..43818f1
Binary files /dev/null and b/Frontend/image.png differ
diff --git a/Frontend/index.css b/Frontend/index.css
new file mode 100644
index 0000000..0afee97
--- /dev/null
+++ b/Frontend/index.css
@@ -0,0 +1,17 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+@font-face {
+ font-family: 'FounderGrotesk-SemiBold'; /* Ensure spelling is consistent */
+ src: url('./assets/fonts/FounderGrotesk-SemiBold.ttf') format('truetype');
+ font-weight: 600; /* Adjust weight to match "SemiBold" */
+ font-style: normal;
+ }
+
+ @font-face {
+ font-family: 'NeueMontreal-Regular';
+ src: url('./assets/fonts/NeueMontreal-Regular.ttf') format('truetype');
+ font-weight: normal;
+ font-style: normal;
+ }
+
\ No newline at end of file
diff --git a/Frontend/index.js b/Frontend/index.js
new file mode 100644
index 0000000..229d83f
--- /dev/null
+++ b/Frontend/index.js
@@ -0,0 +1,19 @@
+var cta = document.querySelector(".cta");
+var check = 0;
+
+cta.addEventListener('click', function(e){
+ var text = e.target.nextElementSibling;
+ var loginText = e.target.parentElement;
+ text.classList.toggle('show-hide');
+ loginText.classList.toggle('expand');
+ if(check == 0)
+ {
+ cta.innerHTML = " ";
+ check++;
+ }
+ else
+ {
+ cta.innerHTML = " ";
+ check = 0;
+ }
+})
\ No newline at end of file
diff --git a/Frontend/main.jsx b/Frontend/main.jsx
new file mode 100644
index 0000000..18445cf
--- /dev/null
+++ b/Frontend/main.jsx
@@ -0,0 +1,20 @@
+import { StrictMode } from 'react';
+import { createRoot } from 'react-dom/client';
+import { BrowserRouter, Routes, Route } from 'react-router-dom'; // Import BrowserRouter, Routes, Route
+import App from './App';
+import Home from './Home'; // Import the Home component
+import './index.css'; // Custom CSS file
+
+const rootElement = document.getElementById('root');
+const root = createRoot(rootElement);
+
+root.render(
+
+
+
+ } />
+ } />
+
+
+
+);
diff --git a/Frontend/services/grafanaService.jsx b/Frontend/services/grafanaService.jsx
new file mode 100644
index 0000000..57db2d8
--- /dev/null
+++ b/Frontend/services/grafanaService.jsx
@@ -0,0 +1,23 @@
+// src/services/grafanaService.js
+import axios from 'axios';
+
+const GRAFANA_URL = 'https://krishnafauj02.grafana.net/api'; // Replace with your Grafana URL
+const API_KEY = 'your_api_key'; // Replace with your API Key
+
+const grafanaClient = axios.create({
+ baseURL: GRAFANA_URL,
+ headers: {
+ 'Authorization': `Bearer ${API_KEY}`,
+ 'Content-Type': 'application/json',
+ },
+});
+
+export const getDashboard = async (dashboardId) => {
+ try {
+ const response = await grafanaClient.get(`/dashboards/uid/${dashboardId}`);
+ return response.data;
+ } catch (error) {
+ console.error('Error fetching dashboard:', error);
+ throw error;
+ }
+};
diff --git a/Frontend/services/index.html b/Frontend/services/index.html
new file mode 100644
index 0000000..f9b2400
--- /dev/null
+++ b/Frontend/services/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+ Document
+
+
+
+
+
+
+
\ No newline at end of file