├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── public ├── Logo.png ├── favicon.ico ├── index.html ├── logo192.png ├── logo512.png ├── manifest.json └── robots.txt ├── src ├── App.jsx ├── components │ ├── About.jsx │ ├── AstroKundli.jsx │ ├── AstroProfile.jsx │ ├── AstroProfileBottom.jsx │ ├── AstrologersCallPage.jsx │ ├── AstrologersTalk.jsx │ ├── Body.jsx │ ├── Call.jsx │ ├── CallCard.jsx │ ├── Card.jsx │ ├── CardContainer.jsx │ ├── Chat.jsx │ ├── Chatbot.jsx │ ├── Coming.jsx │ ├── Error.jsx │ ├── Explore.jsx │ ├── Fetch.jsx │ ├── Following.jsx │ ├── FootIcons.jsx │ ├── Footer.jsx │ ├── Header.jsx │ ├── Hero.jsx │ ├── Horoscope.jsx │ ├── HoroscopeBottom.jsx │ ├── LoginForm.jsx │ ├── LoginPage.jsx │ ├── SignSearch.jsx │ ├── TopAstro.jsx │ ├── TopAstroCard.jsx │ ├── ZodiacCard.jsx │ ├── ZodiacCardsList.jsx │ └── ZodiacContainer.jsx ├── custom hooks │ ├── useAstroProfile.jsx │ ├── useCall.jsx │ ├── useChat.jsx │ └── useHoroscope.jsx ├── image │ ├── Click.jpeg │ ├── Cors (1).png │ ├── Cors (2).png │ ├── Logo text.png │ ├── Logo.png │ ├── Sign │ │ ├── sign1.svg │ │ ├── sign10.svg │ │ ├── sign11.svg │ │ ├── sign12.svg │ │ ├── sign2.svg │ │ ├── sign3.svg │ │ ├── sign4.svg │ │ ├── sign5.svg │ │ ├── sign6.svg │ │ ├── sign7.svg │ │ ├── sign8.svg │ │ └── sign9.svg │ ├── Snapshots │ │ ├── AstroBot.png │ │ ├── Home.png │ │ ├── Horoscope.png │ │ ├── Kundli.png │ │ ├── List.png │ │ ├── Login.png │ │ └── Profile.png │ ├── bg1.jpg │ ├── cycle.jpg │ ├── hand.png │ ├── hand_bg.png │ ├── jyotish 1.jpeg │ ├── jyotish 2.jpeg │ ├── kundli rishi.webp │ ├── loading.png │ ├── pandit aarti.webp │ ├── pandit hand checking.png │ ├── pandit headphones.png │ ├── pandit on pc.png │ ├── pandit on phone.webp │ ├── pandit reading.webp │ ├── pandit showing phone screen.png │ └── pandit welcome.webp ├── index.css ├── index.js ├── reportWebVitals.js ├── setupTests.js ├── shimmer │ ├── ShimmerCard.jsx │ ├── ShimmerList.jsx │ └── ShimmerProfile.jsx ├── store │ ├── AstroSlice.jsx │ ├── CommentsSlice.jsx │ ├── appStore.jsx │ ├── configAppSlice.jsx │ ├── followSlice.jsx │ └── userSlice.jsx └── utils │ ├── Loading.jsx │ ├── constants.jsx │ ├── firebase.jsx │ ├── langConstants.jsx │ ├── openai.jsx │ └── validate.jsx └── tailwind.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | 25 | day 26 | 27 | .env -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 | > ## Introducing AstroGPT, your ultimate astrology app featuring personalized Kundli, daily horoscope, live chat with astrologers, and an intuitive chatbot powered by ChatGPT. Follow your favorite astrologers, receive personalized insights, and explore the cosmos like never before. Discover the universe's secrets with AstroGPT! Welcome to AstroGPT, the pinnacle of astrology applications, boasting a high-performance and scalable architecture, enriched with the extraordinary capabilities of ChatGPT. 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 |

25 | ## 🎯 Key Features 26 | 27 | > ### 🌏 Real-time AstroTalk API Integration: Connect with real-life astrologers, engage in live chats, and receive personalized guidance and insights for your cosmic journey.

28 | 29 | > ### 🌟 Personalized Kundli: Unlock the secrets of the stars with personalized Kundli readings tailored to your birth details, providing deep insights into your destiny and potential.

30 | 31 | > ### 🌌 Daily Horoscope: Stay updated with daily horoscope predictions based on your zodiac sign, offering guidance and advice for navigating life's challenges and opportunities.

32 | 33 | > ### 💬 Astrobot Assistance: Meet Astrobot, your astrological assistant powered by ChatGPT, providing personalized insights, predictions, and advice through interactive chat.

34 | 35 | > ### 🔍 Follow/Unfollow Astrologers: Stay connected with your favorite astrologers, receive updates on their latest insights, and unfollow them at any time for a tailored experience.

36 | 37 | > ### 🎯 Multi-Language Support: Explore AstroGPT in your preferred language, with support for 7 different languages covering up to 90% of the app's content.

38 | 39 | > ### 🔐 Secure Authentication: Enjoy a safe and private experience with Firebase authentication, ensuring your personal data and interactions are protected.

40 | 41 | > ### ✨ Fully Responsive Design: Experience AstroGPT seamlessly across devices, with a fully responsive design that adapts to different screen sizes and resolutions.

42 | 43 | > ### 🚀 Lazy Loading & Memoization: Optimize performance with lazy loading and memoization techniques, ensuring fast load times and efficient data retrieval.

44 | 45 | --- 46 |

47 | ## 🚀 Live Demo 48 | 49 | - Click Below 50 | 51 | 52 | 53 | 54 | 55 | --- 56 |

57 | 58 | ## 🔧 AstroGPT's Tech Stack: 59 | 60 | - React: Powering the dynamic and interactive user interface. 61 | 62 | - Redux Toolkit: Managing application state for a scalable and organized architecture. 63 | 64 | - Firebase: Ensuring secure authentication and data management. 65 | 66 | - ChatGPT: Enabling personalized astrological insights and guidance through interactive chat. 67 | 68 | - Tailwind CSS: Crafting a visually appealing and responsive design. 69 | 70 | - React Router: Enabling seamless navigation within the application. 71 | 72 | --- 73 |

74 | ## ⭐️ Show your support 75 | 76 | > "If you find value in this project, I would sincerely appreciate your support. Feel free to share it with others who may benefit from it. Your contribution is crucial for my growth and enhancement. 🚀, Please don't hesitate to star this GitHub repository!" 77 | 78 | --- 79 | 80 |

81 | 82 |

AstroGPT is made with ❤️ (An Idea into Reality)

83 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "astro-gpt", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "@reduxjs/toolkit": "^2.1.0", 7 | "@testing-library/jest-dom": "^5.17.0", 8 | "@testing-library/react": "^13.4.0", 9 | "@testing-library/user-event": "^13.5.0", 10 | "aztro-js": "^0.1.5", 11 | "firebase": "^10.8.0", 12 | "openai": "^4.28.4", 13 | "react": "^18.2.0", 14 | "react-dom": "^18.2.0", 15 | "react-redux": "^9.1.0", 16 | "react-router-dom": "^6.22.0", 17 | "react-scripts": "5.0.1", 18 | "react-toastify": "^10.0.4", 19 | "web-vitals": "^2.1.4" 20 | }, 21 | "scripts": { 22 | "start": "react-scripts start", 23 | "build": "react-scripts build", 24 | "test": "react-scripts test", 25 | "eject": "react-scripts eject" 26 | }, 27 | "eslintConfig": { 28 | "extends": [ 29 | "react-app", 30 | "react-app/jest" 31 | ] 32 | }, 33 | "browserslist": { 34 | "production": [ 35 | ">0.2%", 36 | "not dead", 37 | "not op_mini all" 38 | ], 39 | "development": [ 40 | "last 1 chrome version", 41 | "last 1 firefox version", 42 | "last 1 safari version" 43 | ] 44 | }, 45 | "devDependencies": { 46 | "tailwindcss": "^3.4.1" 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /public/Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VKoder/AstroGPT/b2798024071b1444f40572f990ebb707897fd2e8/public/Logo.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VKoder/AstroGPT/b2798024071b1444f40572f990ebb707897fd2e8/public/favicon.ico -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 17 | 21 | 22 | 31 | AstroGPT 32 | 33 | 34 | 35 |
36 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VKoder/AstroGPT/b2798024071b1444f40572f990ebb707897fd2e8/public/logo192.png -------------------------------------------------------------------------------- /public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VKoder/AstroGPT/b2798024071b1444f40572f990ebb707897fd2e8/public/logo512.png -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /src/App.jsx: -------------------------------------------------------------------------------- 1 | import { Provider, useSelector } from 'react-redux'; 2 | import Body from './components/Body'; 3 | import appStore from './store/appStore'; 4 | import { ToastContainer } from 'react-toastify'; 5 | import LoginForm from './components/LoginForm'; 6 | 7 | function App() { 8 | 9 | return ( 10 | <> 11 | 12 |
13 | 14 | 15 |
16 |
17 | 18 | ); 19 | } 20 | 21 | export default App; 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/components/About.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import bg from "../image/bg1.jpg" 3 | 4 | 5 | const About = () => { 6 | const liCSS = "text-lg font-normal text-purple-200 opacity-95" 7 | const ptCSS = "text-purple-300 pt-8 text-xl tracking-wide font-medium" 8 | return ( 9 |
10 | bg 15 |
16 |
17 | ABOUT US 18 | AstroGPT is a highly performant, large scalable astrology web app, ready for production, empowered with the superpowers of ChatGPT. This cutting-edge platform seamlessly blends traditional astrological practices with advanced technologies, offering users a unique and immersive astrological experience. With a focus on scalability, performance, and user satisfaction, AstroGPT boasts an array of innovative features designed to enhance the user experience and provide invaluable insights into the mystical world of astrology. 19 |
20 |
21 | Key Features: 22 | 23 | 24 | Kundli Access:
  • Enabled users to access their Kundli, providing them with valuable insights into their astrological profiles and characteristics.
  • 25 | 26 | Personalized Daily Horoscope:
  • Delivered personalized daily horoscope readings to users, offering them guidance and predictions tailored to their individual zodiac signs.
  • 27 | 28 | Astro Chatbot Powered by ChatGPT:
  • Integrated an intelligent chatbot powered by ChatGPT, allowing users to interact with the app and receive instant responses to their astrological queries and concerns.
  • 29 | 30 | Scalable Architecture:
  • Engineered a robust and scalable architecture to accommodate a large user base and handle extensive data processing without compromising performance.
  • 31 | 32 | Key Features:
  • Implemented essential features such as Kundli access, personalized daily horoscope, and an astro chatbot powered by ChatGPT, catering to diverse user needs.
  • 33 | 34 | OpenAI Integration:
  • Integrated OpenAI API for dynamic tasks, enhancing the app's functionality and responsiveness to user interactions.
  • 35 | 36 | Optimization Techniques:
  • Utilized lazy loading and chunking techniques to optimize loading times and improve overall app responsiveness, resulting in a 20% reduction in loading times and a 15% improvement in performance.
  • 37 | 38 | API Management:
  • Efficiently managed over 10 API calls, leveraging memoization to prevent unnecessary calls and streamline data retrieval processes.
  • 39 | 40 | Multilingual Support:
  • Implemented advanced multilingual features, covering 90% of the app's content in 7 different languages, enhancing accessibility and user experience for a global audience.
  • 41 | 42 | Authentication:
  • Integrated Google Firebase for secure authentication, ensuring access only for authenticated users and safeguarding sensitive user data.
  • 43 | 44 | Real-time Communication:
  • Incorporated AstroTalk live API for real-time communication with astrologers, facilitating seamless interaction and consultation via the app's chatbot feature.
  • 45 | 46 | Styling and Responsiveness:
  • Utilized Tailwind for styling, ensuring a visually appealing user interface and 100% responsiveness across all devices, enhancing user engagement and satisfaction.
  • 47 | 48 | Ongoing Development:
  • Continuously developing the app with plans to implement advanced functionalities, including dynamic search using debouncing to optimize API calls.
  • 49 | 50 | Proof of Work:
  • Documented the journey and achievements of AstroGPT on LinkedIn, providing insights into the development process and milestones achieved. Interested users can explore the live demo and access the AstroGPT GitHub repository for further information and collaboration opportunities.
  • 51 | 52 | 53 | 54 | 55 | 56 | 57 |
    58 |
    59 |
    60 | ); 61 | }; 62 | 63 | export default About; 64 | -------------------------------------------------------------------------------- /src/components/AstroProfile.jsx: -------------------------------------------------------------------------------- 1 | import { useDispatch, useSelector } from "react-redux"; 2 | import useAstroProfile from "../custom hooks/useAstroProfile"; 3 | import { Link, useParams } from "react-router-dom"; 4 | import { PROFILE_BG, PROFILE_IMG } from "../utils/constants"; 5 | import ShimmerProfile from "../shimmer/ShimmerProfile"; 6 | import { toast, Bounce } from "react-toastify"; 7 | import "react-toastify/dist/ReactToastify.css"; 8 | import { addFollow, removeFollow } from "../store/followSlice"; 9 | import { useState } from "react"; 10 | import { addForm } from "../store/configAppSlice"; 11 | import Chatbot from "./Chatbot"; 12 | import bg from "../image/bg1.jpg"; 13 | import AstroProfileBottom from "./AstroProfileBottom"; 14 | 15 | const AstroProfile = () => { 16 | const [follow, setfollow] = useState(false); 17 | 18 | const { id } = useParams(); 19 | useAstroProfile(id); 20 | 21 | const dispatch = useDispatch(); 22 | 23 | const Bot = useSelector((store) => store.configApp.Bot); 24 | const astroProfile = useSelector((store) => store.astro.astroProfile); 25 | const user = useSelector((store) => store.user); 26 | 27 | if (!astroProfile) { 28 | return ; 29 | } 30 | const { data } = astroProfile; 31 | 32 | const handlefollow = (data) => { 33 | if (!user) { 34 | toast.error("You're not logged In", { 35 | position: "top-right", 36 | autoClose: 1200, 37 | hideProgressBar: false, 38 | closeOnClick: true, 39 | pauseOnHover: false, 40 | draggable: true, 41 | progress: undefined, 42 | theme: "dark", 43 | transition: Bounce, 44 | }); 45 | 46 | dispatch(addForm()); 47 | return; 48 | } 49 | 50 | toast("🔥 Followed " + data?.name, { 51 | position: "top-right", 52 | autoClose: 1000, 53 | hideProgressBar: false, 54 | closeOnClick: true, 55 | pauseOnHover: false, 56 | draggable: true, 57 | progress: undefined, 58 | theme: "dark", 59 | transition: Bounce, 60 | }); 61 | 62 | dispatch(addFollow(data)); 63 | setfollow(!follow); 64 | }; 65 | const handleUnfollow = () => { 66 | toast("👎 Unfollowed " + data?.name, { 67 | position: "top-right", 68 | autoClose: 1000, 69 | hideProgressBar: false, 70 | closeOnClick: true, 71 | pauseOnHover: false, 72 | draggable: true, 73 | progress: undefined, 74 | theme: "dark", 75 | transition: Bounce, 76 | }); 77 | dispatch(removeFollow(data)); 78 | setfollow(!follow); 79 | }; 80 | 81 | return ( 82 |
    83 | {Bot && } 84 | bg 89 |
    90 |
    91 | 92 | {" "} 93 | 94 | HOME 95 | 96 | 97 | 98 | 99 | 100 | 101 | {data?.name} 102 | 103 |
    104 |
    105 |
    106 |
    107 | Bg 112 | Profile 117 |
    118 |
    119 |
    120 | {!follow ? ( 121 | 127 | ) : ( 128 | 134 | )} 135 |
    136 |
    137 |
    138 |
    139 | 140 | 141 | {data?.name} 142 | 143 | 144 | 145 | {data?.skill} 146 | 147 | 148 | 149 | {data?.lang} 150 | 151 | 152 | Exp:{" "} 153 | {data?.exp} Years 154 | 155 | 156 | 157 | ₹{data?.callPrice}/min 158 | 159 |
    160 | 161 | 162 | 163 | {data?.totalCallDurationInMin} 164 | {" "} 165 | mins 166 | 167 | 168 | 169 | 170 | {data?.totalChatDurationInMin} 171 | {" "} 172 | mins 173 | 174 |
    175 |
    176 | 180 |
    181 |
    182 | 183 |
    184 |
    185 | Start Chat 186 | 187 | Wait time - 2m 188 | 189 |
    190 |
    191 | 192 | 193 |
    194 |
    195 | 196 |
    197 |
    198 | Start Call 199 | 200 | Wait time - 2m 201 | 202 |
    203 |
    204 | 205 |
    206 |
    207 |
    208 | {data?.verified && ( 209 | 210 | )} 211 |
    212 |
    213 | 214 | 215 |
    216 |
    217 | ); 218 | }; 219 | export default AstroProfile; 220 | -------------------------------------------------------------------------------- /src/components/AstroProfileBottom.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const AstroProfileBottom = ({data}) => { 4 | return ( 5 |
    6 |
    7 | 8 | About me 9 | {data?.shortBio && ( 10 | 11 | ({data?.shortBio}) 12 | 13 | )} 14 | 15 | 19 | {data?.longBio} 20 | 21 |
    22 |
    23 | 24 | Problem Area:{" "} 25 | 26 | 27 | {data?.problemArea} 28 | 29 |
    30 |
    31 | {data?.album.map((img) => ( 32 |
    36 | img 37 |
    38 | ))} 39 |
    40 |
    41 | ) 42 | } 43 | 44 | export default AstroProfileBottom 45 | -------------------------------------------------------------------------------- /src/components/AstrologersCallPage.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Link } from "react-router-dom"; 3 | import pandit from "../image/pandit on phone.webp"; 4 | import bg from "../image/bg1.jpg"; 5 | 6 | const AstrologersCallPage = () => { 7 | return ( 8 |
    9 | bg 14 |
    15 |
    16 | unfollow 17 | 18 | Developer is working on it! 19 | 20 | 21 | {" "} 22 | 25 | 26 |
    27 |
    28 |
    29 | ); 30 | }; 31 | 32 | export default AstrologersCallPage; 33 | -------------------------------------------------------------------------------- /src/components/AstrologersTalk.jsx: -------------------------------------------------------------------------------- 1 | import { useDispatch, useSelector } from "react-redux"; 2 | import { PROFILE_IMG, TALK_PROMPT } from "../utils/constants"; 3 | import bg from "../image/bg1.jpg"; 4 | import openai from "./../utils/openai"; 5 | import React, { useRef, useState } from "react"; 6 | import { addBot, addForm, addLimit } from "../store/configAppSlice"; 7 | import { toast, Bounce } from "react-toastify"; 8 | import { useNavigate } from "react-router-dom"; 9 | 10 | const AstrologersTalk = () => { 11 | const astroProfile = useSelector((store) => store.astro.astroProfile); 12 | 13 | const { data } = astroProfile; 14 | const info = data; 15 | const input = useRef(); 16 | const [result, setresult] = useState([info?.name + ": Hi"]); 17 | const [apiLimit, setapiLimit] = useState(1); 18 | 19 | const user = useSelector((store) => store.user); 20 | const form = useSelector((store) => store.configApp.form); 21 | const navigate = useNavigate(); 22 | 23 | const dispatch = useDispatch(); 24 | 25 | const handlebot = () => { 26 | navigate("/astroProfile/" + info?.name); 27 | }; 28 | 29 | const handleSearch = async () => { 30 | if (!user) { 31 | toast.error("Please Login to Continue", { 32 | position: "top-right", 33 | autoClose: 1200, 34 | hideProgressBar: false, 35 | closeOnClick: true, 36 | pauseOnHover: false, 37 | draggable: true, 38 | progress: undefined, 39 | theme: "dark", 40 | transition: Bounce, 41 | }); 42 | dispatch(addBot()); 43 | dispatch(addForm()); 44 | return; 45 | } 46 | if (apiLimit > 4) { 47 | dispatch(addLimit(false)); 48 | toast.error("Please come tommorow Api limit exceded", { 49 | position: "top-right", 50 | autoClose: 1200, 51 | hideProgressBar: false, 52 | closeOnClick: true, 53 | pauseOnHover: false, 54 | draggable: true, 55 | progress: undefined, 56 | theme: "dark", 57 | transition: Bounce, 58 | }); 59 | return; 60 | } 61 | 62 | const gptSearch = 63 | TALK_PROMPT + 64 | "name=" + 65 | info?.name + 66 | "skills=" + 67 | info?.skills + 68 | "experience =" + 69 | info?.exp + 70 | "user input =" + 71 | input.current.value; 72 | 73 | const data = await openai.chat.completions.create({ 74 | messages: [{ role: "user", content: gptSearch }], 75 | model: "gpt-3.5-turbo", 76 | }); 77 | const Responce = data?.choices?.[0]?.message?.content; 78 | 79 | setresult([ 80 | ...result, 81 | "You: " + input.current.value, 82 | info?.name + ": " + Responce, 83 | ]); 84 | input.current.value = ""; 85 | 86 | setapiLimit(apiLimit + 1); 87 | }; 88 | 89 | return ( 90 |
    91 | bg 96 | 97 |
    98 |
    99 |
    100 |
    101 |
    102 | profile 107 |
    108 | 109 | {info?.name} 110 | 111 |
    112 | 116 |
    117 |
    118 | {result?.map((result, index) => ( 119 |
    123 | 124 | {result} 125 | 126 |
    127 | ))} 128 |
    129 |
    130 |
    e.preventDefault()} 132 | className="w-full relative flex justify-center items-center" 133 | > 134 | 140 | 146 |
    147 |
    148 |
    149 |
    150 | ); 151 | }; 152 | 153 | export default AstrologersTalk; 154 | -------------------------------------------------------------------------------- /src/components/Body.jsx: -------------------------------------------------------------------------------- 1 | import { Outlet, RouterProvider, createBrowserRouter } from "react-router-dom"; 2 | import Hero from "./Hero"; 3 | import Chat from "./Chat"; 4 | import Call from "./Call"; 5 | import AstroProfile from "./AstroProfile"; 6 | import Header from "./Header"; 7 | import Following from "./Following"; 8 | import Chatbot from "./Chatbot"; 9 | import AstroKundli from "./AstroKundli"; 10 | import LoginForm from "./LoginForm"; 11 | import Horoscope from "./Horoscope"; 12 | import FootIcons from "./FootIcons"; 13 | import Loading from "../utils/Loading"; 14 | import AstrologersTalk from "./AstrologersTalk"; 15 | import AstrologersCallPage from "./AstrologersCallPage"; 16 | import About from "./About"; 17 | import Error from "./Error"; 18 | import Footer from "./Footer"; 19 | 20 | const Body = () => { 21 | const appLayout = createBrowserRouter([ 22 | { 23 | path: "/", 24 | element: ( 25 | <> 26 |
    27 | 28 | 29 |