diff --git a/PRANA/.gitignore b/PRANA/.gitignore
new file mode 100644
index 000000000..31b5be03f
--- /dev/null
+++ b/PRANA/.gitignore
@@ -0,0 +1,165 @@
+mediapipe_env
+*.log
+
+# Ignore node_modules folder
+node_modules/
+
+# Ignore all .env files (environment variables)
+.env
+
+# Ignore a specific file
+secret_config.json
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+share/python-wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+
+# PyInstaller
+# Usually these files are written by a python script from a template
+# before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.nox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+*.py,cover
+.hypothesis/
+.pytest_cache/
+cover/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+db.sqlite3
+db.sqlite3-journal
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+.pybuilder/
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# IPython
+profile_default/
+ipython_config.py
+
+# pyenv
+# For a library or package, you might want to ignore these files since the code is
+# intended to run in multiple environments; otherwise, check them in:
+# .python-version
+
+# pipenv
+# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
+# However, in case of collaboration, if having platform-specific dependencies or dependencies
+# having no cross-platform support, pipenv may install dependencies that don't work, or not
+# install all needed dependencies.
+#Pipfile.lock
+
+# poetry
+# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
+# This is especially recommended for binary packages to ensure reproducibility, and is more
+# commonly ignored for libraries.
+# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
+#poetry.lock
+
+# PEP 582; used by e.g. github.com/David-OConnor/pyflow
+__pypackages__/
+
+# Celery stuff
+celerybeat-schedule
+celerybeat.pid
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+sample_venv/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+.dmypy.json
+dmypy.json
+
+# Pyre type checker
+.pyre/
+
+# pytype static type analyzer
+.pytype/
+
+# Cython debug symbols
+cython_debug/
+
+# PyCharm
+# JetBrains specific template is maintainted in a separate JetBrains.gitignore that can
+# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
+# and can be added to the global gitignore or merged into this file. For a more nuclear
+# option (not recommended) you can uncomment the following to ignore the entire idea folder.
+#.idea/
diff --git a/PRANA/main.py b/PRANA/main.py
new file mode 100644
index 000000000..92705bb08
--- /dev/null
+++ b/PRANA/main.py
@@ -0,0 +1,169 @@
+from flask import Flask, render_template, Response, request
+import cv2
+import mediapipe as mp
+import numpy as np # For angle calculations
+
+
+app = Flask(__name__)
+
+mp_pose = mp.solutions.pose
+pose = mp_pose.Pose(static_image_mode=False, min_detection_confidence=0.6, model_complexity=1)
+mp_drawing = mp.solutions.drawing_utils
+
+
+def detectPose(image, pose, display=False):
+ output_image = image.copy()
+ imageRGB = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
+ results = pose.process(imageRGB)
+ height, width, _ = image.shape
+ landmarks = []
+
+ if results.pose_landmarks:
+ mp_drawing.draw_landmarks(output_image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS)
+ for landmark in results.pose_landmarks.landmark:
+ landmarks.append((int(landmark.x * width), int(landmark.y * height), (landmark.z * width)))
+
+ return output_image, landmarks
+
+
+def calculateAngle(a, b, c):
+ a = np.array(a)
+ b = np.array(b)
+ c = np.array(c)
+
+ ba = a - b
+ bc = c - b
+
+ cosine_angle = np.dot(ba, bc) / (np.linalg.norm(ba) * np.linalg.norm(bc))
+ angle = np.arccos(np.clip(cosine_angle, -1.0, 1.0))
+ return np.degrees(angle)
+
+
+def classifyPose(landmarks, output_image, selected_asana, display=False):
+ label = "Unknown Pose"
+ color = (0, 0, 255)
+
+ if not landmarks or len(landmarks) < 33:
+ cv2.putText(output_image, label, (10, 30), cv2.FONT_HERSHEY_PLAIN, 2, color, 2)
+ return output_image, label
+
+ # Extract key joint angles
+ left_elbow_angle = calculateAngle(landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER.value],
+ landmarks[mp_pose.PoseLandmark.LEFT_ELBOW.value],
+ landmarks[mp_pose.PoseLandmark.LEFT_WRIST.value])
+
+ right_elbow_angle = calculateAngle(landmarks[mp_pose.PoseLandmark.RIGHT_SHOULDER.value],
+ landmarks[mp_pose.PoseLandmark.RIGHT_ELBOW.value],
+ landmarks[mp_pose.PoseLandmark.RIGHT_WRIST.value])
+
+ left_shoulder_angle = calculateAngle(landmarks[mp_pose.PoseLandmark.LEFT_ELBOW.value],
+ landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER.value],
+ landmarks[mp_pose.PoseLandmark.LEFT_HIP.value])
+
+ right_shoulder_angle = calculateAngle(landmarks[mp_pose.PoseLandmark.RIGHT_HIP.value],
+ landmarks[mp_pose.PoseLandmark.RIGHT_SHOULDER.value],
+ landmarks[mp_pose.PoseLandmark.RIGHT_ELBOW.value])
+
+ left_knee_angle = calculateAngle(landmarks[mp_pose.PoseLandmark.LEFT_HIP.value],
+ landmarks[mp_pose.PoseLandmark.LEFT_KNEE.value],
+ landmarks[mp_pose.PoseLandmark.LEFT_ANKLE.value])
+
+ right_knee_angle = calculateAngle(landmarks[mp_pose.PoseLandmark.RIGHT_HIP.value],
+ landmarks[mp_pose.PoseLandmark.RIGHT_KNEE.value],
+ landmarks[mp_pose.PoseLandmark.RIGHT_ANKLE.value])
+
+ hip_distance = np.linalg.norm(np.array(landmarks[mp_pose.PoseLandmark.LEFT_HIP.value][:2]) -
+ np.array(landmarks[mp_pose.PoseLandmark.RIGHT_HIP.value][:2]))
+
+ # Check only the selected asana
+ if selected_asana == "Trikonasana":
+ if (165 < left_knee_angle < 195 and 165 < right_knee_angle < 195 and
+ 130 < left_elbow_angle < 180 and 175 < right_elbow_angle < 220):
+ label = "Trikonasana"
+
+ elif selected_asana == "Virabadrasana":
+ if (90 < left_knee_angle < 120 and 165 < right_knee_angle < 195):
+ label = "Virabadrasana"
+
+ elif selected_asana == "Vrikshasana":
+ if (315 < left_knee_angle < 335 or 25 < right_knee_angle < 45):
+ label = "Vrikshasana"
+
+ elif selected_asana == "Bhujangasana":
+ if (160 < left_elbow_angle < 190 and 160 < right_elbow_angle < 190 and
+ 50 < left_shoulder_angle < 80 and 50 < right_shoulder_angle < 80):
+ label = "Bhujangasana"
+
+ elif selected_asana == "Sukhasana":
+ if (40 < left_knee_angle < 70 and 40 < right_knee_angle < 70 and
+ 60 < left_shoulder_angle < 90 and 60 < right_shoulder_angle < 90 and hip_distance < 150):
+ label = "Sukhasana"
+
+ elif selected_asana == "Chakrasana":
+ if (240 < left_elbow_angle < 280 and 240 < right_elbow_angle < 280 and
+ 250 < left_knee_angle < 290 and 250 < right_knee_angle < 290):
+ label = "Chakrasana"
+
+ # If the correct pose is detected, turn the label green
+ if label == selected_asana:
+ color = (0, 255, 0) # Green if pose matches
+ else:
+ label = "Unknown Pose"
+
+ cv2.putText(output_image, label, (10, 30), cv2.FONT_HERSHEY_PLAIN, 2, color, 2)
+ return output_image, label
+
+
+def webcam_feed(selected_asana):
+ camera_video = cv2.VideoCapture(0)
+ camera_video.set(3, 1380)
+ camera_video.set(4, 960)
+
+ while camera_video.isOpened():
+ ok, frame = camera_video.read()
+ if not ok:
+ continue
+
+ frame = cv2.flip(frame, 1)
+ frame_height, frame_width, _ = frame.shape
+ frame = cv2.resize(frame, (int(frame_width * (640 / frame_height)), 640))
+
+ frame, landmarks = detectPose(frame, pose, display=False)
+
+ if landmarks:
+ frame, detected_asana = classifyPose(landmarks, frame, selected_asana, display=False)
+
+ # Display Accuracy
+ if detected_asana == selected_asana:
+ accuracy_text = f"{detected_asana}, 100%"
+ else:
+ accuracy_text = "Unknown Pose, 0%"
+
+ cv2.putText(frame, accuracy_text, (20, 50), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
+
+ ret, jpeg = cv2.imencode('.jpg', frame)
+ frame = jpeg.tobytes()
+
+ yield (b'--frame\r\n'
+ b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
+
+ camera_video.release()
+ cv2.destroyAllWindows()
+
+
+@app.route('/')
+def index():
+ return render_template('index.html')
+
+@app.route('/yoga_try')
+def yoga_try():
+ asana = request.args.get('asana', 'Unknown')
+ return render_template('yoga_try.html', asana=asana)
+
+@app.route('/video_feed1')
+def video_feed1():
+ asana = request.args.get('asana', 'Unknown')
+ return Response(webcam_feed(asana), mimetype='multipart/x-mixed-replace; boundary=frame')
+
+if __name__ == '__main__':
+ app.run(debug=True)
diff --git a/PRANA/models/Message.js b/PRANA/models/Message.js
new file mode 100644
index 000000000..7bb774bed
--- /dev/null
+++ b/PRANA/models/Message.js
@@ -0,0 +1,11 @@
+const mongoose = require('mongoose');
+const messageSchema = new mongoose.Schema({
+ from: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true }, // Sender
+ to: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true }, // Receiver
+ text: { type: String, required: true }, // Message content
+ timestamp: { type: Date, default: Date.now }, // Time when the message was sent
+});
+
+const Message = mongoose.model('Message', messageSchema);
+
+module.exports = Message;
diff --git a/PRANA/models/User.js b/PRANA/models/User.js
new file mode 100644
index 000000000..23896b593
--- /dev/null
+++ b/PRANA/models/User.js
@@ -0,0 +1,15 @@
+const mongoose = require('mongoose');
+
+const userSchema = new mongoose.Schema({
+ username: { type: String, unique: true, required: true },
+ email: { type: String, unique: true, required: true },
+ password: { type: String, required: true }, // Password will be hashed
+ friends: [{
+ userId: { type: mongoose.Schema.Types.ObjectId, ref: 'User'},
+ lastChatTime: { type: Date, default: Date.now }
+ }] // References to other users they are chatting with
+});
+
+const User = mongoose.model('User', userSchema);
+
+module.exports = User;
diff --git a/PRANA/server.js b/PRANA/server.js
new file mode 100644
index 000000000..9cd42a66f
--- /dev/null
+++ b/PRANA/server.js
@@ -0,0 +1,113 @@
+const { spawn } = require('child_process');
+const express = require('express');
+const bcrypt = require('bcrypt');
+const mongoose = require('mongoose');
+const path = require('path');
+const session = require('express-session');
+const User = require('./models/User');
+const { GoogleGenerativeAI } = require("@google/generative-ai");
+
+const app = express();
+
+// Start Python script for AI processing (if needed)
+const pythonProcess = spawn('python', ['main.py']);
+pythonProcess.stdout.on('data', (data) => console.log(`Python Output: ${data}`));
+pythonProcess.stderr.on('data', (data) => console.error(`Python Error: ${data}`));
+pythonProcess.on('close', (code) => console.log(`Python process exited with code ${code}`));
+
+// Middleware
+app.use(express.json());
+app.use(express.urlencoded({ extended: true }));
+app.use(express.static(path.join(__dirname, 'static')));
+app.use(session({
+ secret: 'your_secret_key',
+ resave: false,
+ saveUninitialized: true
+}));
+
+// MongoDB Connection
+mongoose.connect('mongodb://localhost:27017/PRANA', {})
+ .then(() => console.log('✅ MongoDB connected...'))
+ .catch(err => console.log('❌ MongoDB connection error:', err));
+
+// Initialize Generative AI
+const genAI = new GoogleGenerativeAI("AIzaSyBJSlieYtJVvlC_WwCfAl1WUaOmiaCAOpk");
+const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
+
+// Routes
+
+// Home Route
+app.get('/', (req, res) => {
+ res.sendFile(path.join(__dirname, 'static', 'index.html'));
+});
+
+// Signup Route
+app.post('/signup', async (req, res) => {
+ const { username, email, password } = req.body;
+ try {
+ const existingUser = await User.findOne({ $or: [{ email }, { username }] });
+ if (existingUser) return res.status(400).json({ message: 'User already exists!' });
+
+ const hashedPassword = await bcrypt.hash(password, 10);
+ const newUser = new User({ username, email, password: hashedPassword });
+ await newUser.save();
+ res.redirect('/index.html');
+ } catch (error) {
+ console.error('Signup error:', error);
+ res.status(500).json({ message: 'Error during signup!' });
+ }
+});
+
+// Signin Route
+app.post('/signin', async (req, res) => {
+ const { username, password } = req.body;
+ try {
+ const user = await User.findOne({ username });
+ if (!user) return res.status(400).json({ message: 'Invalid username or password!' });
+
+ const validPassword = await bcrypt.compare(password, user.password);
+ if (!validPassword) return res.status(400).json({ message: 'Invalid username or password!' });
+
+ req.session.user = user;
+ res.redirect('/home');
+ } catch (error) {
+ console.error('Signin error:', error);
+ res.status(500).json({ message: 'Error during login!' });
+ }
+});
+
+// Chatbot Route (Using Gemini AI)
+app.post("/chat", async (req, res) => {
+ const userMessage = req.body.message;
+ console.log(`User: ${userMessage}`);
+
+ if (!userMessage || userMessage.trim() === "") {
+ return res.status(400).json({ error: "Message is required" });
+ }
+
+ try {
+ const result = await model.generateContent(userMessage);
+ const botResponse = result.response.text();
+ console.log(`Gemini AI: ${botResponse}`);
+ res.json({ response: botResponse });
+ } catch (error) {
+ console.error("Gemini API Error:", error);
+ res.status(500).json({ error: "Failed to get response from Gemini AI" });
+ }
+});
+
+// Protected Home Route
+app.get('/home', (req, res) => {
+ if (!req.session.user) return res.redirect('/index.html');
+ res.sendFile(path.join(__dirname, 'static', 'home.html'));
+});
+
+// Logout Route
+app.get('/logout', (req, res) => {
+ req.session.destroy(() => res.redirect('/index.html'));
+});
+
+// Start Server
+const PORT = process.env.PORT || 3000;
+app.listen(PORT, () => console.log(`🚀 Server running on port ${PORT}`));
+
diff --git a/PRANA/static/about.html b/PRANA/static/about.html
new file mode 100644
index 000000000..4dc422c7f
--- /dev/null
+++ b/PRANA/static/about.html
@@ -0,0 +1,113 @@
+
+
+
+
+
+ Yoga Page
+
+
+
+
+
+
+
PRANA
+
+
+
ABOUT
+
+
+
+ Say goodbye to guesswork and hello to precision. Our advanced AI analyzes your movements
+ in real-time, providing personalized corrections with voice and visual guidance, you'll learn to master
+ each pose with confidence.More than just a fitness app, we're committed to sustainable practices. Join our
+ community and discover a yoga experience that's good for your body and the planet.
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PRANA/static/asanas.html b/PRANA/static/asanas.html
new file mode 100644
index 000000000..047613266
--- /dev/null
+++ b/PRANA/static/asanas.html
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+ Pose Detection
+
+
+
+
+
+
+
+
+
Waiting for Pose...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/PRANA/static/chatbot.py b/PRANA/static/chatbot.py
new file mode 100644
index 000000000..2941c0b23
--- /dev/null
+++ b/PRANA/static/chatbot.py
@@ -0,0 +1,40 @@
+import os
+import google.generativeai as genai
+
+from dotenv import load_dotenv
+
+# Load environment variables from .env file
+load_dotenv()
+
+genai.configure(api_key=os.getenv("GEMINI_API_KEY"))
+
+# Create the model
+generation_config = {
+ "temperature": 1,
+ "top_p": 0.95,
+ "top_k": 40,
+ "max_output_tokens": 8192,
+ "response_mime_type": "text/plain",
+}
+
+model = genai.GenerativeModel(
+ model_name="gemini-1.5-flash",
+ generation_config=generation_config,
+ system_instruction="queries related to yoga\n",
+)
+history=[]
+
+print("Bot : Hello,How can I help you?")
+
+while True:
+ user_input=input("You : ")
+ chat_session = model.start_chat(
+ history=history
+ )
+ response = chat_session.send_message(user_input)
+ model_response=response.text
+ print(f"bot: {model_response}")
+ print()
+
+ history.append({"role":"user","parts":[user_input]})
+ history.append({"role":"model","parts":[model_response]})
\ No newline at end of file
diff --git a/PRANA/static/home.html b/PRANA/static/home.html
new file mode 100644
index 000000000..efc534ce7
--- /dev/null
+++ b/PRANA/static/home.html
@@ -0,0 +1,305 @@
+
+
+
+
+
+ Yoga Home Page
+
+
+
+
+
+
+
+
+
PRANA
+
+
+
+
+
+
PRANA
+
Breathe Life. Live Fully
+
Say goodbye to guesswork and hello to precision. Our advanced AI analyzes your movements in real-time, providing personalized corrections with voice and visual guidance, you'll learn to master each pose with confidence.
+ More than just a fitness app, we're committed to sustainable practices. Join our community and discover a yoga experience that's good for your body and the planet.
+
+
+
+
+
+ PRANA AI
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PRANA/static/img/Balasana.png b/PRANA/static/img/Balasana.png
new file mode 100644
index 000000000..53840491d
Binary files /dev/null and b/PRANA/static/img/Balasana.png differ
diff --git a/PRANA/static/img/Bhujangasana.png b/PRANA/static/img/Bhujangasana.png
new file mode 100644
index 000000000..494546547
Binary files /dev/null and b/PRANA/static/img/Bhujangasana.png differ
diff --git a/PRANA/static/img/BhujangasanaT.png b/PRANA/static/img/BhujangasanaT.png
new file mode 100644
index 000000000..68e5695d9
Binary files /dev/null and b/PRANA/static/img/BhujangasanaT.png differ
diff --git a/PRANA/static/img/Chakrasana.png b/PRANA/static/img/Chakrasana.png
new file mode 100644
index 000000000..9ba97a756
Binary files /dev/null and b/PRANA/static/img/Chakrasana.png differ
diff --git a/PRANA/static/img/ChakrasanaT.png b/PRANA/static/img/ChakrasanaT.png
new file mode 100644
index 000000000..98f307eee
Binary files /dev/null and b/PRANA/static/img/ChakrasanaT.png differ
diff --git a/PRANA/static/img/Naukasana.png b/PRANA/static/img/Naukasana.png
new file mode 100644
index 000000000..c6b5560ea
Binary files /dev/null and b/PRANA/static/img/Naukasana.png differ
diff --git a/PRANA/static/img/Shavasana.png b/PRANA/static/img/Shavasana.png
new file mode 100644
index 000000000..a53108de9
Binary files /dev/null and b/PRANA/static/img/Shavasana.png differ
diff --git a/PRANA/static/img/ShavasanaT.png b/PRANA/static/img/ShavasanaT.png
new file mode 100644
index 000000000..bc5e1c8a6
Binary files /dev/null and b/PRANA/static/img/ShavasanaT.png differ
diff --git a/PRANA/static/img/Sukhasana.png b/PRANA/static/img/Sukhasana.png
new file mode 100644
index 000000000..2bb1dbce9
Binary files /dev/null and b/PRANA/static/img/Sukhasana.png differ
diff --git a/PRANA/static/img/SukhasanaT.png b/PRANA/static/img/SukhasanaT.png
new file mode 100644
index 000000000..aa2c56a41
Binary files /dev/null and b/PRANA/static/img/SukhasanaT.png differ
diff --git a/PRANA/static/img/T pose.png b/PRANA/static/img/T pose.png
new file mode 100644
index 000000000..7fd139f3f
Binary files /dev/null and b/PRANA/static/img/T pose.png differ
diff --git a/PRANA/static/img/Tree pose.png b/PRANA/static/img/Tree pose.png
new file mode 100644
index 000000000..43c3a66b2
Binary files /dev/null and b/PRANA/static/img/Tree pose.png differ
diff --git a/PRANA/static/img/Trikonasana.jpg b/PRANA/static/img/Trikonasana.jpg
new file mode 100644
index 000000000..920a96cb0
Binary files /dev/null and b/PRANA/static/img/Trikonasana.jpg differ
diff --git a/PRANA/static/img/TrikonasanaT.png b/PRANA/static/img/TrikonasanaT.png
new file mode 100644
index 000000000..a707c4460
Binary files /dev/null and b/PRANA/static/img/TrikonasanaT.png differ
diff --git a/PRANA/static/img/Virabadrasana.png b/PRANA/static/img/Virabadrasana.png
new file mode 100644
index 000000000..ffa9166d1
Binary files /dev/null and b/PRANA/static/img/Virabadrasana.png differ
diff --git a/PRANA/static/img/Vrikshasana.png b/PRANA/static/img/Vrikshasana.png
new file mode 100644
index 000000000..144b6f08c
Binary files /dev/null and b/PRANA/static/img/Vrikshasana.png differ
diff --git a/PRANA/static/img/Warrior II pose.png b/PRANA/static/img/Warrior II pose.png
new file mode 100644
index 000000000..2b20f37ee
Binary files /dev/null and b/PRANA/static/img/Warrior II pose.png differ
diff --git a/PRANA/static/img/add-user.png b/PRANA/static/img/add-user.png
new file mode 100644
index 000000000..5abe99fa9
Binary files /dev/null and b/PRANA/static/img/add-user.png differ
diff --git a/PRANA/static/img/asana.jpeg b/PRANA/static/img/asana.jpeg
new file mode 100644
index 000000000..19cca68dc
Binary files /dev/null and b/PRANA/static/img/asana.jpeg differ
diff --git a/PRANA/static/img/back_gr.jpeg b/PRANA/static/img/back_gr.jpeg
new file mode 100644
index 000000000..b6afe8ada
Binary files /dev/null and b/PRANA/static/img/back_gr.jpeg differ
diff --git a/PRANA/static/img/background.jpeg b/PRANA/static/img/background.jpeg
new file mode 100644
index 000000000..7f6ef2030
Binary files /dev/null and b/PRANA/static/img/background.jpeg differ
diff --git a/PRANA/static/img/confirm.png b/PRANA/static/img/confirm.png
new file mode 100644
index 000000000..86d0509dc
Binary files /dev/null and b/PRANA/static/img/confirm.png differ
diff --git a/PRANA/static/img/email.png b/PRANA/static/img/email.png
new file mode 100644
index 000000000..3fed7b8e8
Binary files /dev/null and b/PRANA/static/img/email.png differ
diff --git a/PRANA/static/img/logo.jpeg b/PRANA/static/img/logo.jpeg
new file mode 100644
index 000000000..16f983604
Binary files /dev/null and b/PRANA/static/img/logo.jpeg differ
diff --git a/PRANA/static/img/logo.png b/PRANA/static/img/logo.png
new file mode 100644
index 000000000..9783bbe98
Binary files /dev/null and b/PRANA/static/img/logo.png differ
diff --git a/PRANA/static/img/logo1.jpeg b/PRANA/static/img/logo1.jpeg
new file mode 100644
index 000000000..cdaa9b0b5
Binary files /dev/null and b/PRANA/static/img/logo1.jpeg differ
diff --git a/PRANA/static/img/logo2.png b/PRANA/static/img/logo2.png
new file mode 100644
index 000000000..9783bbe98
Binary files /dev/null and b/PRANA/static/img/logo2.png differ
diff --git a/PRANA/static/img/padlock.png b/PRANA/static/img/padlock.png
new file mode 100644
index 000000000..c4f07b9d6
Binary files /dev/null and b/PRANA/static/img/padlock.png differ
diff --git a/PRANA/static/img/sign-in.png b/PRANA/static/img/sign-in.png
new file mode 100644
index 000000000..111d398a1
Binary files /dev/null and b/PRANA/static/img/sign-in.png differ
diff --git a/PRANA/static/img/user.png b/PRANA/static/img/user.png
new file mode 100644
index 000000000..ff20a20a6
Binary files /dev/null and b/PRANA/static/img/user.png differ
diff --git a/PRANA/static/img/yoga.png b/PRANA/static/img/yoga.png
new file mode 100644
index 000000000..eddf99c26
Binary files /dev/null and b/PRANA/static/img/yoga.png differ
diff --git a/PRANA/static/img/yoga1.jpeg b/PRANA/static/img/yoga1.jpeg
new file mode 100644
index 000000000..5943eaf0f
Binary files /dev/null and b/PRANA/static/img/yoga1.jpeg differ
diff --git a/PRANA/static/index.html b/PRANA/static/index.html
new file mode 100644
index 000000000..dd11f7880
--- /dev/null
+++ b/PRANA/static/index.html
@@ -0,0 +1,69 @@
+
+
+
+
+
+ PRANA Login
+
+
+
+