Compare commits
24 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| da96bd6028 | |||
| eec247d7bb | |||
| a41318d0e7 | |||
| 83e664eab4 | |||
| e59d96b60d | |||
| 3399316816 | |||
| 22da27f69b | |||
| 119d8d1820 | |||
| dc3872f8df | |||
| 8dcc1ac5e6 | |||
| 6032926658 | |||
| 12e4483bf3 | |||
| cce169f0d6 | |||
| bfaebf27a0 | |||
| bbd9d5be3f | |||
| ea7e65ecd2 | |||
| cfe6517bc8 | |||
| 6c2f918a88 | |||
| 94b57bb414 | |||
| e2463ac6af | |||
| 29310a8da3 | |||
| 360b84f829 | |||
| c881413b15 | |||
| dcdf3b5816 |
@@ -1,3 +1,4 @@
|
||||
APP_PORT=9081
|
||||
ESLINT_NO_DEV_ERRORS=true
|
||||
|
||||
NEXT_PUBLIC_AUX_ENDPOINT="https://apigate.lotus.g1.wrenchboard.com/en/wrench/api/v1"
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
APP_PORT=9081
|
||||
ESLINT_NO_DEV_ERRORS=true
|
||||
|
||||
NEXT_PUBLIC_AUX_ENDPOINT="https://apigate.lotus.g1.wrenchboard.com/en/wrench/api/v1"
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
APP_PORT=9081
|
||||
ESLINT_NO_DEV_ERRORS=true
|
||||
|
||||
NEXT_PUBLIC_AUX_ENDPOINT="https://apigate.lotus.g1.wrenchboard.com/en/wrench/api/v1"
|
||||
|
||||
@@ -61,7 +61,7 @@ function Drawer({ drawer, action }) {
|
||||
<div className="offcanvas-social">
|
||||
<ul className="text-center">
|
||||
<li>
|
||||
<a href={process.env.REACT_APP_FACEBOOK_LINK} >
|
||||
<a href={process.env.NEXT_PUBLIC_FACEBOOK_LINK} >
|
||||
<i className="fab fa-facebook-f"></i>
|
||||
</a>
|
||||
</li>
|
||||
@@ -78,12 +78,12 @@ function Drawer({ drawer, action }) {
|
||||
<li>
|
||||
<a href="#">
|
||||
<i className="fal fa-envelope"></i>{' '}
|
||||
{process.env.REACT_APP_SUPPORT_EMAIL}
|
||||
{process.env.NEXT_PUBLIC_SUPPORT_EMAIL}
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<i className="fal fa-phone"></i> {process.env.REACT_APP_SUPPORT_PHONE}
|
||||
<i className="fal fa-phone"></i> {process.env.NEXT_PUBLIC_SUPPORT_PHONE}
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
|
||||
@@ -5,7 +5,7 @@ async function ContactData(reqData) {
|
||||
for (let value in reqData) {
|
||||
formData.append(value, reqData[value]);
|
||||
}
|
||||
let response = await axios.post(`${process.env.REACT_APP_AUX_ENDPOINT}/sitecontact`, reqData);
|
||||
let response = await axios.post(`${process.env.NEXT_PUBLIC_AUX_ENDPOINT}/sitecontact`, reqData);
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
import Axios from 'axios';
|
||||
import getConfig from './../Config/config'
|
||||
|
||||
async function FaqData() {
|
||||
// debugger;
|
||||
var site = getConfig()[0];
|
||||
let response = await Axios.post(`${process.env.REACT_APP_AUX_ENDPOINT}/faq`);
|
||||
let response = await Axios.post(`${process.env.NEXT_PUBLIC_AUX_ENDPOINT}/faq`);
|
||||
return await response;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import Axios from 'axios';
|
||||
import getConfig from './../Config/config'
|
||||
|
||||
async function JobsData() {
|
||||
var site = getConfig()[0];
|
||||
|
||||
var callData = [{
|
||||
"limit": 10,
|
||||
"page": 1
|
||||
@@ -16,7 +15,7 @@ async function JobsData() {
|
||||
});
|
||||
}
|
||||
*/
|
||||
let response = await Axios.post(process.env.REACT_APP_AUX_ENDPOINT+'/startjoblist', callData);
|
||||
let response = await Axios.post(process.env.NEXT_PUBLIC_AUX_ENDPOINT+'/startjoblist', callData);
|
||||
return await response;
|
||||
}
|
||||
|
||||
|
||||
@@ -6117,7 +6117,7 @@ blockquote cite {
|
||||
padding-top: 250px;
|
||||
width: 100%;
|
||||
min-height: 100vh;
|
||||
background: url("../images//wrench-page-notfound.jpg") center/cover;
|
||||
background: url(/assets//images/wrench-page-notfound.jpg) center/cover;
|
||||
position: relative;
|
||||
/* z-index: 1; */
|
||||
}
|
||||
@@ -6752,12 +6752,12 @@ blockquote cite {
|
||||
}
|
||||
|
||||
.appie-about-8-box {
|
||||
padding: 50px 50px 0px 50px;
|
||||
padding: 50px;
|
||||
z-index: 10;
|
||||
}
|
||||
@media only screen and (min-width: 992px) and (max-width: 1200px) {
|
||||
.appie-about-8-box {
|
||||
padding: 50px 25px 0px 25px;
|
||||
padding: 25px;
|
||||
}
|
||||
}
|
||||
@media only screen and (min-width: 768px) and (max-width: 991px) {
|
||||
|
||||
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 190 KiB |
|
After Width: | Height: | Size: 88 KiB |
@@ -0,0 +1,64 @@
|
||||
import singlePost from "../../assets/images/single-post/1.jpg";
|
||||
import { BlogLoader, ImageLoader } from "../../lib/SkeletonLoaders";
|
||||
// import Image from "next/image";
|
||||
// import LazyImage from "../../lib/LazyImage";
|
||||
|
||||
/**
|
||||
* Renders a blog post component.
|
||||
* @returns {JSX.Element} The rendered blog post component.
|
||||
*/
|
||||
function Blog({ blogItem, imgUrl, loader }) {
|
||||
// Generate a unique ID
|
||||
const uniqueId = `element_${Math.random().toString(36).substr(2, 9)}`;
|
||||
|
||||
const blogImg = `${imgUrl}/${blogItem?.meta_value || singlePost}`;
|
||||
|
||||
const imgLoaderStyles = {
|
||||
"--loader-width": "750px",
|
||||
"--loader-height": "550px",
|
||||
};
|
||||
|
||||
const headerLoaderStyles = {
|
||||
"--text-container-width": "300px",
|
||||
"--text-container-height": "18px",
|
||||
};
|
||||
|
||||
const bodyTextLoaderStyles = {
|
||||
"--text-container-width": "770px",
|
||||
"--text-container-height": "15px",
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className="single-post-area">
|
||||
<div className="post-thumb" style={{ marginTop: "0" }}>
|
||||
{loader ? (
|
||||
<div style={imgLoaderStyles}>
|
||||
<ImageLoader />
|
||||
</div>
|
||||
) : (
|
||||
<img src={blogImg} alt={blogItem?.meta_value || "single-post.jpg"} key={uniqueId} />
|
||||
)}
|
||||
</div>
|
||||
{loader ? (
|
||||
<div style={headerLoaderStyles}>
|
||||
<BlogLoader />
|
||||
</div>
|
||||
) : (
|
||||
<h4 className="article-title">{blogItem?.post_title}</h4>
|
||||
)}
|
||||
{loader ? (
|
||||
<div style={bodyTextLoaderStyles}>
|
||||
<BlogLoader />
|
||||
</div>
|
||||
) : (
|
||||
<div
|
||||
dangerouslySetInnerHTML={{ __html: blogItem?.post_content }}
|
||||
></div>
|
||||
)}
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default Blog;
|
||||
@@ -0,0 +1,69 @@
|
||||
import React from "react";
|
||||
import Link from "next/link";
|
||||
import BlogImg1 from "../../assets/images/blog/p1.jpg";
|
||||
|
||||
/**
|
||||
* Renders a sidebar for a blog.
|
||||
* @param {Object} blogs - An object containing the data for the blog posts.
|
||||
* @returns {JSX.Element} - JSX code that renders the blog sidebar.
|
||||
*/
|
||||
function BlogSideBar({ blogs }) {
|
||||
/**
|
||||
* Renders other blog posts.
|
||||
* This is an Array of JSX elements representing the other blog posts.
|
||||
*/
|
||||
const renderOtherBlogPosts = () => {
|
||||
return blogs?.blogdata?.slice(0, 4).map((post) => {
|
||||
const blogDate = new Date(post.post_date).toLocaleDateString("en-US", {
|
||||
year: "numeric",
|
||||
month: "short",
|
||||
day: "numeric",
|
||||
});
|
||||
|
||||
const blogImg =
|
||||
post.meta_value != null
|
||||
? `${blogs?.image_url}/${post.meta_value}`
|
||||
: BlogImg1;
|
||||
|
||||
return (
|
||||
<div className="popular-post" key={post.id}>
|
||||
<Link href={`/blog/blogdetail/${post?.id}`}>
|
||||
<img width='auto' height='auto' src={blogImg} alt="blog-img" style={{top: "20px"}} loading="lazy" />
|
||||
</Link>
|
||||
<h5>
|
||||
<Link href={`/blog/blogdetail/${post?.id}`}>{post?.post_title}</Link>
|
||||
</h5>
|
||||
<span>{blogDate}</span>
|
||||
</div>
|
||||
);
|
||||
});
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="blog-sidebar">
|
||||
<aside className="widget widget-categories">
|
||||
{/*<h3 className="widget-title">Categories</h3>*/}
|
||||
<ul>
|
||||
<li>
|
||||
<Link href="/about-us">About</Link>
|
||||
</li>
|
||||
<li>
|
||||
<a href={process.env.NEXT_PUBLIC_DASH_URL_SIGNUP}>Sign up</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href={process.env.NEXT_PUBLIC_DASH_URL_LOGIN}>Login</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://blog.wrenchboard.com/">More Articles</a>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<aside className="widget widget-trend-post">
|
||||
<h3 className="widget-title">Other Posts</h3>
|
||||
{renderOtherBlogPosts()}
|
||||
</aside>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default BlogSideBar;
|
||||
@@ -0,0 +1,84 @@
|
||||
"use client"
|
||||
import React, { useEffect, useMemo, useState } from 'react'
|
||||
import { useParams } from 'next/navigation';
|
||||
import ServiceNav from '@/app/components/navigation/ServiceNav';
|
||||
import HeroNews from '@/app/components/News/HeroNews';
|
||||
import FooterHomeOne from '../../../components/FooterHomeOne';
|
||||
import BackToTop from '@/app/components/BackToTop';
|
||||
import BlogData from '@/app/Services/BlogData';
|
||||
|
||||
import Blog from '../Blog'
|
||||
import BlogSideBar from '../BlogSideBar'
|
||||
|
||||
// must be a better way to centralize the style = TEMPORARY USE
|
||||
import '../../../assets/css/bootstrap.min.css';
|
||||
import '../../../assets/css/custom-animated.css';
|
||||
import '../../../assets/css/default.css';
|
||||
import '../../../assets/css/font-awesome.min.css';
|
||||
import '../../../assets/css/magnific-popup.css';
|
||||
import '../../../assets/css/main.css';
|
||||
import '../../../assets/css/style.css';
|
||||
|
||||
|
||||
function page() {
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
const [blogs, setBlogs] = useState([]);
|
||||
const { id } = useParams();
|
||||
|
||||
useEffect(() => {
|
||||
const fetchBlogs = async () => {
|
||||
setIsLoading(true);
|
||||
try {
|
||||
const res = await BlogData();
|
||||
setBlogs(res.data);
|
||||
setIsLoading(false)
|
||||
} catch (err) {
|
||||
console.log("Error loading blogdata", err);
|
||||
setIsLoading(false)
|
||||
}
|
||||
};
|
||||
|
||||
fetchBlogs();
|
||||
}, []);
|
||||
|
||||
const blogItem = useMemo(() => {
|
||||
return blogs?.blogdata?.find((item) => item.id == id);
|
||||
}, [blogs, id]);
|
||||
return (
|
||||
<>
|
||||
<ServiceNav />
|
||||
|
||||
{/* Renders the hero section */}
|
||||
<HeroNews
|
||||
title="Blog"
|
||||
breadcrumb={[
|
||||
{ link: "/", title: "Home" },
|
||||
{ link: "/blog", title: "Blogs" },
|
||||
{
|
||||
link: `/blog/blogdetail/${id}`,
|
||||
title: isLoading ? "please wait..." : blogItem ? blogItem.post_title : "Post not found",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
{/* Renders the blog content and sidebar */}
|
||||
<section className="blogpage-section">
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
<div className="col-lg-8 col-md-7">
|
||||
<Blog blogItem={blogItem} imgUrl={blogs?.image_url} loader={isLoading} />
|
||||
</div>
|
||||
<div className="col-lg-4 col-md-5">
|
||||
<BlogSideBar blogs={blogs} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<FooterHomeOne className='' />
|
||||
<BackToTop className='' />
|
||||
</>
|
||||
|
||||
)
|
||||
}
|
||||
|
||||
export default page
|
||||
@@ -1,24 +0,0 @@
|
||||
import React from 'react'
|
||||
import FooterHomeOne from '../../components/FooterHomeOne';
|
||||
|
||||
// must be a better way to centralize the style = TEMPORARY USE
|
||||
import '../../assets/css/bootstrap.min.css';
|
||||
import '../../assets/css/custom-animated.css';
|
||||
import '../../assets/css/default.css';
|
||||
import '../../assets/css/font-awesome.min.css';
|
||||
import '../../assets/css/magnific-popup.css';
|
||||
import '../../assets/css/main.css';
|
||||
import '../../assets/css/style.css';
|
||||
|
||||
|
||||
function page() {
|
||||
return (
|
||||
<>
|
||||
<div>Bog Detail Here</div>
|
||||
<FooterHomeOne className={undefined} />
|
||||
</>
|
||||
|
||||
)
|
||||
}
|
||||
|
||||
export default page
|
||||
@@ -1,5 +1,9 @@
|
||||
import React from 'react'
|
||||
import FooterHomeOne from '../components/FooterHomeOne';
|
||||
import HeroNews from '../components/News/HeroNews';
|
||||
import BackToTop from '../components/BackToTop';
|
||||
import ServiceNav from '../components/navigation/ServiceNav';
|
||||
import Blogs from '../components/News/Blogs';
|
||||
|
||||
// must be a better way to centralize the style = TEMPORARY USE
|
||||
import '../assets/css/bootstrap.min.css';
|
||||
@@ -14,8 +18,25 @@ import '../assets/css/style.css';
|
||||
function page() {
|
||||
return (
|
||||
<>
|
||||
<div>Bog Here</div>
|
||||
<FooterHomeOne className={undefined} />
|
||||
<ServiceNav />
|
||||
<HeroNews
|
||||
title="Blogs"
|
||||
breadcrumb={[
|
||||
{ link: "/", title: "Home" },
|
||||
{ link: "/blog", title: "Blogs" },
|
||||
]}
|
||||
/>
|
||||
<section className="blogpage-section">
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
<div className="col-12">
|
||||
<Blogs pathname='/blog' />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<FooterHomeOne className='' />
|
||||
<BackToTop className='' />
|
||||
</>
|
||||
|
||||
)
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
import React from 'react'
|
||||
import frame from '../assets/images/use-case-side-main.png'; //about-frame.png'
|
||||
import screen from '../assets/images/use-case-side-extra.png'; //about-screen.png'
|
||||
import Image from 'next/image';
|
||||
|
||||
const AboutApp = ({ video, dark }) => {
|
||||
return (
|
||||
<>
|
||||
<section className="row_am about_app_section _">
|
||||
<div className="container">
|
||||
<div className="row modern_ui_section">
|
||||
<div className="col-lg-6">
|
||||
<div className="about_img" data-aos="fade-in" data-aos-duration="1500">
|
||||
<div className="frame_img">
|
||||
<Image width='100%' height='auto' className="w-100 moving_position_animatin" src={frame} alt="image" />
|
||||
</div>
|
||||
<div className="screen_img">
|
||||
<Image width='100%' height='auto' className="w-100 moving_animation" src={screen} alt="image" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-lg-6">
|
||||
<div className="about_text">
|
||||
<div className="section_title" data-aos="fade-up" data-aos-duration="1500" data-aos-delay="100">
|
||||
<h2>Motivate & Organize <br /> <span>Rewards</span></h2>
|
||||
<p>
|
||||
With a planned reward, the parent can introduce the family to earning and start financial education early.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
<ul className="design_block">
|
||||
<li data-aos="fade-up" data-aos-duration="1500">
|
||||
<h4>Goals Completed</h4>
|
||||
<p>Motivate with rewards for goals completed, passing the exam, finishing chores, and learning new skills. </p>
|
||||
</li>
|
||||
<li data-aos="fade-up" data-aos-duration="1500">
|
||||
<h4>Connect Family</h4>
|
||||
<p>It takes a village to raise a kid and share good news and encouragement from the more prominent family. Connect family to the achievements to boost encouragement. </p>
|
||||
</li>
|
||||
<li data-aos="fade-up" data-aos-duration="1500">
|
||||
<h4>Find any Task </h4>
|
||||
<p>Make more, connect to the marketplace, and earn from appropriate tasks.</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default AboutApp
|
||||
@@ -1,6 +1,6 @@
|
||||
import React from 'react';
|
||||
import thumb5 from '../assets/images/about-thumb-5.png';
|
||||
import cardImg from '../assets/images/home/card-home-01.png'
|
||||
import cardImg from '../assets/images/home/wrench-card-only.png'
|
||||
// import bg from '../assets/images/background-bg.jpg'
|
||||
import Image from 'next/image';
|
||||
|
||||
@@ -23,23 +23,24 @@ function AfterHero() {
|
||||
<div className="row">
|
||||
<div className="col-lg-7 mb-3 mb-lg-0">
|
||||
<div className='appie-about-container'>
|
||||
<div className="appie-about-8-box">
|
||||
<h3 className="title">
|
||||
Reward Accomplishments
|
||||
</h3>
|
||||
<p>
|
||||
Set goals, tasks, or anything that motivates or needs to be done and reward completion. WrenchBoard is the platform to plan rewards off pick your nose and blow
|
||||
</p>
|
||||
</div>
|
||||
<div className='row'>
|
||||
<div className='col-12 col-sm-4 order-2 order-sm-1 align-self-end'>
|
||||
<a className="m-1 main-btn" href={process.env.REACT_APP_DASH_URL_LOGIN}>
|
||||
Learn More <i className="fal fa-arrow-right" />
|
||||
</a>
|
||||
<div className='row appie-about-8-box'>
|
||||
<div className="col-12 col-md-6">
|
||||
<h3 className="title">
|
||||
Reward Accomplishments
|
||||
</h3>
|
||||
<p>
|
||||
Set goals, tasks, or anything that motivates or needs to be done and reward completion. WrenchBoard is the platform to plan rewards off pick your nose and blow
|
||||
</p>
|
||||
<div className=''>
|
||||
<a className="mb-5 mb-md-0 main-btn" href={process.env.NEXT_PUBLIC_DASH_URL_LOGIN}>
|
||||
Learn More <i className="fal fa-arrow-right" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-12 col-sm-8 order-1 order-sm-2">
|
||||
<div className="col-12 col-md-6">
|
||||
<Image
|
||||
src={cardImg}
|
||||
className='w-100 h-100'
|
||||
width={'100%'}
|
||||
height={'100%'}
|
||||
alt=""
|
||||
@@ -50,24 +51,25 @@ function AfterHero() {
|
||||
</div>
|
||||
<div className="col-lg-5">
|
||||
<div className='appie-about-container'>
|
||||
<div className="appie-about-8-box">
|
||||
<h3 className="title">
|
||||
Assign Faster with <br />
|
||||
wrenchAgent
|
||||
</h3>
|
||||
<p>
|
||||
Ask our ❛❛<span className=''>wrench</span><span className=''>Agent</span>❜❜ Generative AI to assist
|
||||
</p>
|
||||
</div>
|
||||
<div className='row'>
|
||||
<div className='col-12 col-sm-4 order-2 order-sm-1 align-self-end'>
|
||||
<a className="m-1 main-btn" href={process.env.REACT_APP_DASH_URL_LOGIN}>
|
||||
Learn More <i className="fal fa-arrow-right" />
|
||||
</a>
|
||||
<div className='row appie-about-8-box'>
|
||||
<div className="col-12 col-md-6">
|
||||
<h3 className="title">
|
||||
Assign Faster with <br />
|
||||
wrenchAgent
|
||||
</h3>
|
||||
<p>
|
||||
Ask our ❛❛<span className=''>wrench</span><span className=''>Agent</span>❜❜ Generative AI to assist
|
||||
</p>
|
||||
<div className=''>
|
||||
<a className="mb-5 mb-md-0 main-btn" href={process.env.NEXT_PUBLIC_DASH_URL_LOGIN}>
|
||||
Learn More <i className="fal fa-arrow-right" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-12 col-sm-8 order-1 order-sm-2">
|
||||
<div className="col-12 col-md-6">
|
||||
<Image
|
||||
src={thumb5}
|
||||
className='w-100 h-100'
|
||||
width={'100%'}
|
||||
height={'100%'}
|
||||
alt=""
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
"use client"
|
||||
import React from 'react';
|
||||
import Link from 'next/link';
|
||||
// import { useHistory } from 'react-router-dom';
|
||||
import Svg from './Svg';
|
||||
|
||||
function Error() {
|
||||
// const history = useHistory();
|
||||
const goBack = (e) => {
|
||||
e.preventDefault();
|
||||
// history.goBack();
|
||||
};
|
||||
return (
|
||||
<>
|
||||
<div className="appie-error-area">
|
||||
<div className="container">
|
||||
<div className="row justify-content-center">
|
||||
<div className="col-lg-6">
|
||||
<div className="appie-error-content text-center">
|
||||
<Svg />
|
||||
<span>Sorry!</span>
|
||||
<h3 className="title">The page can’t be found.</h3>
|
||||
<p>
|
||||
The page you're looking for isn't available. Use the go back
|
||||
button below
|
||||
</p>
|
||||
{/* <a onClick={(e) => goBack(e)} href="#">
|
||||
Go Back <i className="fal fa-arrow-right"></i>
|
||||
</a> */}
|
||||
<Link href="/">
|
||||
Go Back <i className="fal fa-arrow-right"></i>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default Error;
|
||||
@@ -118,7 +118,7 @@ function FooterHomeOne({ className }) {
|
||||
</div>
|
||||
<div className="row">
|
||||
<div className="col-lg-12">
|
||||
<div className="footer-copyright d-flex align-items-center justify-content-between pt-2">
|
||||
<div className="footer-copyright d-lg-flex align-items-center justify-content-between pt-2">
|
||||
<div className="apps-download-btn">
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
@@ -34,7 +34,7 @@ function HeroHomeOne() {
|
||||
<p>Your place to set family goals and reward achievements. Find tasks to earn from, or build a task portfolio and find others to perform tasks for you.</p>
|
||||
<ul className='d-flex justify-content-center justify-content-lg-start'>
|
||||
<li className=''>
|
||||
<a className="item-2" target='_blank' href={process.env.REACT_APP_APPLE_APP}>
|
||||
<a className="item-2" target='_blank' href={process.env.NEXT_PUBLIC_APPLE_APP}>
|
||||
<i className="fab fa-apple"></i>
|
||||
<span>
|
||||
Available on the <span>App Store</span>
|
||||
@@ -42,7 +42,7 @@ function HeroHomeOne() {
|
||||
</a>
|
||||
</li>
|
||||
<li className=''>
|
||||
<a className="item-2" target='_blank' href={process.env.REACT_APP_ANDROID_APP}>
|
||||
<a className="item-2" target='_blank' href={process.env.NEXT_PUBLIC_ANDROID_APP}>
|
||||
<i className="fab fa-google-play"></i>
|
||||
<span>
|
||||
Available on the <span>Google Play</span>
|
||||
|
||||
@@ -7,10 +7,11 @@ import HeroHomeOne from './HeroHomeOne';
|
||||
import ServicesHomeOne from './ServicesHomeOne';
|
||||
import TrafficHomeOne from './TrafficHomeOne';
|
||||
import TrafficHomeTwo from './TrafficHomeTwo';
|
||||
//import FeaturedScreen from './FeaturedScreen';
|
||||
//import FeaturedScreen from './FeaturedScreen';
|
||||
import AfterHero from './AfterHero';
|
||||
import NextAfterHero from './NextAfterHero';
|
||||
import BackToTop from './BackToTop';
|
||||
import SelectFeatures from "@/app/components/SelectFeatutes";
|
||||
|
||||
|
||||
|
||||
@@ -22,10 +23,12 @@ function HomeOne() {
|
||||
<HomeNav />
|
||||
<HeroHomeOne />
|
||||
<AfterHero />
|
||||
<NextAfterHero />
|
||||
<ServicesHomeOne />
|
||||
<SelectFeatures className='pb-95' />
|
||||
{/*<NextAfterHero />*/}
|
||||
{/*<ServicesHomeOne />*/}
|
||||
<TrafficHomeOne />
|
||||
<TrafficHomeTwo />
|
||||
{/*<TrafficHomeTwo />*/}
|
||||
{/*<FeaturedScreen />*/}
|
||||
<BlogHomeOne />
|
||||
<FooterHomeOne />
|
||||
<BackToTop className='' />
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
"use client"
|
||||
import React, { useEffect, useState } from "react";
|
||||
import Link from "next/link";
|
||||
import blogOne from "../../assets/images/blog/1.jpg";
|
||||
import BlogData from "../../Services/BlogData";
|
||||
// import Image from "next/image";
|
||||
|
||||
/**
|
||||
* Fetches blog data from an API and renders the blogs on the page.
|
||||
@@ -47,14 +49,14 @@ function Blogs({ pathname }) {
|
||||
data-wow-duration="3000ms"
|
||||
data-wow-delay="200ms"
|
||||
>
|
||||
<a href={`/blog/blogdetail/${blog?.id}`} className="thumb">
|
||||
<Link href={`/blog/blogdetail/${blog?.id}`} className="thumb">
|
||||
<img
|
||||
src={blgImg}
|
||||
alt={blog.post_title}
|
||||
width={370} height={'auto'}
|
||||
// style={{height: 'auto' }}
|
||||
/>
|
||||
</a>
|
||||
</Link>
|
||||
<div className="content">
|
||||
<div className="blog-meta">
|
||||
<ul>
|
||||
@@ -62,11 +64,11 @@ function Blogs({ pathname }) {
|
||||
</ul>
|
||||
</div>
|
||||
<h3 className="title">
|
||||
<a href={`/blog/blogdetail/${blog?.id}`}>{blog.post_title}</a>
|
||||
<Link href={`/blog/blogdetail/${blog?.id}`}>{blog.post_title}</Link>
|
||||
</h3>
|
||||
<a href={`/blog/blogdetail/${blog?.id}`}>
|
||||
<Link href={`/blog/blogdetail/${blog?.id}`}>
|
||||
Learn More <i className="fal fa-arrow-right" />
|
||||
</a>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,264 @@
|
||||
"use client"
|
||||
import React, { useState } from 'react';
|
||||
//import { Link } from 'react-router-dom';
|
||||
import thumb from '../assets/images/features-thumb-11.png';
|
||||
import shapeSix from '../assets/images/shape/shape-6.png';
|
||||
import shapeSeven from '../assets/images/shape/shape-7.png';
|
||||
import shapeEight from '../assets/images/shape/shape-8.png';
|
||||
import Image from 'next/image';
|
||||
function SelectFeatures({ className }) {
|
||||
const [tab, setTab] = useState('setting');
|
||||
const handleClick = (e, value) => {
|
||||
e.preventDefault();
|
||||
setTab(value);
|
||||
};
|
||||
//appie-services-2-area appie-services-8-area pt-90 pb-55
|
||||
return (
|
||||
<section className={`appie-features-area pt-100 ${className}`} id="features" >
|
||||
<div className="container" style={{ marginBottom: '20px' }} >
|
||||
<div className="row align-items-center">
|
||||
<div className="col-lg-3">
|
||||
<div className="appie-features-tabs-btn">
|
||||
<div
|
||||
className="nav flex-column nav-pills"
|
||||
id="v-pills-tab"
|
||||
role="tablist"
|
||||
aria-orientation="vertical"
|
||||
>
|
||||
<a
|
||||
onClick={(e) => handleClick(e, 'setting')}
|
||||
className={`nav-link ${tab === 'setting' ? 'active' : ''}`}
|
||||
id="v-pills-home-tab"
|
||||
data-toggle="pill"
|
||||
href="#v-pills-home"
|
||||
role="tab"
|
||||
aria-controls="v-pills-home"
|
||||
aria-selected="true"
|
||||
>
|
||||
<i className="fas fa-cog" /> Reward achievement
|
||||
</a>
|
||||
<a
|
||||
onClick={(e) => handleClick(e, 'report')}
|
||||
className={`nav-link ${tab === 'report' ? 'active' : ''}`}
|
||||
id="v-pills-profile-tab"
|
||||
data-toggle="pill"
|
||||
href="#v-pills-profile"
|
||||
role="tab"
|
||||
aria-controls="v-pills-profile"
|
||||
aria-selected="false"
|
||||
>
|
||||
<i className="fas fa-exclamation-triangle" /> Assign tasks or chores
|
||||
</a>
|
||||
<a
|
||||
onClick={(e) => handleClick(e, 'notice')}
|
||||
className={`nav-link ${tab === 'notice' ? 'active' : ''}`}
|
||||
id="v-pills-messages-tab"
|
||||
data-toggle="pill"
|
||||
href="#v-pills-messages"
|
||||
role="tab"
|
||||
aria-controls="v-pills-messages"
|
||||
aria-selected="false"
|
||||
>
|
||||
<i className="fas fa-bell" /> Family engagement
|
||||
</a>
|
||||
<a
|
||||
onClick={(e) => handleClick(e, 'app')}
|
||||
className={`nav-link ${tab === 'app' ? 'active' : ''}`}
|
||||
id="v-pills-settings-tab"
|
||||
data-toggle="pill"
|
||||
href="#v-pills-settings"
|
||||
role="tab"
|
||||
aria-controls="v-pills-settings"
|
||||
aria-selected="false"
|
||||
>
|
||||
<i className="fas fa-lock" /> Fund wallets
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-lg-9">
|
||||
<div className="tab-content" id="v-pills-tabContent">
|
||||
<div
|
||||
className={`${
|
||||
tab === 'setting' ? 'show active' : ''
|
||||
} tab-pane fade`}
|
||||
id="v-pills-home"
|
||||
role="tabpanel"
|
||||
aria-labelledby="v-pills-home-tab"
|
||||
>
|
||||
<div className="row align-items-center">
|
||||
<div className="col-lg-6">
|
||||
<div
|
||||
className="appie-features-thumb text-center wow animated fadeInUp"
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay="200ms"
|
||||
>
|
||||
<Image src={thumb} alt=""
|
||||
style={{ width: '350px', height:'auto', margin: 'auto' }} />
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-lg-6">
|
||||
<div
|
||||
className="appie-features-content wow animated fadeInRight"
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay="600ms"
|
||||
>
|
||||
<span>
|
||||
{/*Reward Achievement*/}
|
||||
</span>
|
||||
<h3 className="title">
|
||||
Reward <br /> Achievement
|
||||
</h3>
|
||||
<p>
|
||||
Reward with points, badges, recognition, or money rewards with easy steps
|
||||
</p>
|
||||
<a className="main-btn" href="/about-us">
|
||||
Learn More
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
className={`${tab === 'report' ? 'show active' : ''} tab-pane fade`}
|
||||
id="v-pills-profile"
|
||||
role="tabpanel"
|
||||
aria-labelledby="v-pills-profile-tab"
|
||||
>
|
||||
<div className="row align-items-center">
|
||||
<div className="col-lg-6">
|
||||
<div
|
||||
className="appie-features-thumb text-center animated fadeInUp"
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay="200ms"
|
||||
>
|
||||
<Image src={thumb} alt=""
|
||||
style={{ width: '350px', height:'auto', margin: 'auto' }} />
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-lg-6">
|
||||
<div
|
||||
className="appie-features-content animated fadeInRight"
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay="600ms"
|
||||
>
|
||||
<span>
|
||||
{/*Reward Achievement ee*/}
|
||||
</span>
|
||||
<h3 className="title">
|
||||
Assign <br /> tasks or chores
|
||||
</h3>
|
||||
<p>
|
||||
Adapt to your family's needs with the flexibility of using one-time or repeated tasks or chores with the option to find any task.
|
||||
</p>
|
||||
<a className="main-btn" href="#">
|
||||
Learn More
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
className={`${tab === 'notice' ? 'show active' : ''} tab-pane fade`}
|
||||
id="v-pills-messages"
|
||||
role="tabpanel"
|
||||
aria-labelledby="v-pills-messages-tab"
|
||||
>
|
||||
<div className="row align-items-center">
|
||||
<div className="col-lg-6">
|
||||
<div
|
||||
className="appie-features-thumb text-center animated fadeInUp"
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay="200ms"
|
||||
>
|
||||
<Image src={thumb} alt=""
|
||||
style={{ width: '350px', height:'auto', margin: 'auto' }} />
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-lg-6">
|
||||
<div
|
||||
className="appie-features-content animated fadeInRight"
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay="600ms"
|
||||
>
|
||||
<span>
|
||||
{/*Custom Reacyions 77*/}
|
||||
</span>
|
||||
<h3 className="title">
|
||||
Family <br /> engagement
|
||||
</h3>
|
||||
<p>
|
||||
Connect with education challenges, such as quizzes or learning tasks, and private chats, and invite others to your family.
|
||||
</p>
|
||||
<a className="main-btn" href="#">
|
||||
Learn More
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
className={`${tab === 'app' ? 'show active' : ''} tab-pane fade`}
|
||||
id="v-pills-settings"
|
||||
role="tabpanel"
|
||||
aria-labelledby="v-pills-settings-tab"
|
||||
>
|
||||
<div className="row align-items-center">
|
||||
<div className="col-lg-6">
|
||||
<div
|
||||
className="appie-features-thumb text-center animated fadeInUp"
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay="200ms"
|
||||
>
|
||||
<Image src={thumb} alt=""
|
||||
style={{ width: '350px', height:'auto', margin: 'auto' }} />
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-lg-6">
|
||||
<div
|
||||
className="appie-features-content animated fadeInRight"
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay="600ms"
|
||||
>
|
||||
<span>
|
||||
{/*Reward Achievement*/}
|
||||
</span>
|
||||
<h3 className="title">
|
||||
Fund <br /> wallets
|
||||
</h3>
|
||||
<p>
|
||||
Take control and feel secure by creating a virtual or physical card, allocating funds, and managing wallets for your kids. .
|
||||
</p>
|
||||
<a className="main-btn" href="#">
|
||||
Learn More
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/*<div className="features-shape-1">*/}
|
||||
{/* <Image src={shapeSix} alt="" />*/}
|
||||
{/*</div>*/}
|
||||
{/*<div className="features-shape-2">*/}
|
||||
{/* <Image src={shapeSeven} alt="" />*/}
|
||||
{/*</div>*/}
|
||||
{/*<div className="features-shape-3">*/}
|
||||
{/* <Image src={shapeEight} alt="" />*/}
|
||||
{/*</div>*/}
|
||||
</section>
|
||||
);
|
||||
}
|
||||
|
||||
export default SelectFeatures;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -60,12 +60,12 @@ function ServiceSideMenu() {
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href={process.env.REACT_APP_APPLE_APP}>
|
||||
<a href={process.env.NEXT_PUBLIC_APPLE_APP}>
|
||||
<i className="fab fa-apple" /> Download for iOS
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a className="item-2" href={process.env.REACT_APP_ANDROID_APP}>
|
||||
<a className="item-2" href={process.env.NEXT_PUBLIC_ANDROID_APP}>
|
||||
<i className="fab fa-google-play" /> Download for
|
||||
Android
|
||||
</a>
|
||||
@@ -26,10 +26,10 @@ function Services({ action }) {
|
||||
</div>
|
||||
<div className="col-lg-4 col-md-7 col-sm-6 col-6 order-2 order-sm-3">
|
||||
<div className="appie-btn-box text-right">
|
||||
<a className="login-btn" href={process.env.REACT_APP_DASH_URL_LOGIN}>
|
||||
<a className="login-btn" href={process.env.NEXT_PUBLIC_DASH_URL_LOGIN}>
|
||||
<i className="fal fa-user"></i> Login
|
||||
</a>
|
||||
<a className="main-btn ml-30" href={process.env.REACT_APP_DASH_URL_SIGNUP}>
|
||||
<a className="main-btn ml-30" href={process.env.NEXT_PUBLIC_DASH_URL_SIGNUP}>
|
||||
Get Started
|
||||
</a>
|
||||
<div
|
||||
|
||||
@@ -0,0 +1,202 @@
|
||||
"use client"
|
||||
import React, {useState} from 'react';
|
||||
import ContactData from '../Services/ContactData';
|
||||
|
||||
|
||||
function Forms() {
|
||||
|
||||
const [formDetails, setFormDetails] = useState({
|
||||
first_name: '',
|
||||
last_name: '',
|
||||
email: '',
|
||||
subject: '',
|
||||
phone_number: '',
|
||||
action: 1001,
|
||||
message: '',
|
||||
channel: 'WEB',
|
||||
terms_conditions: false
|
||||
})
|
||||
|
||||
const validForm = formDetails.first_name && formDetails.last_name && formDetails.email && formDetails.phone_number && formDetails.subject && formDetails.message
|
||||
|
||||
const handleChange = ({target:{name, value}}) => {
|
||||
setFormDetails(prev => ({...prev, [name]:value}))
|
||||
}
|
||||
|
||||
const [requestStatus, setRequestStatus] = useState({loading:false, status:false, msg:''})
|
||||
|
||||
function handleSubmit(e) {
|
||||
e.preventDefault()
|
||||
setRequestStatus({loading:true, status:false, msg:''})
|
||||
if(!validForm){
|
||||
setRequestStatus({loading:false, status:false, msg:'please, fill all fields'})
|
||||
setTimeout(()=>{
|
||||
setRequestStatus({loading:false, status:false, msg:''})
|
||||
},3000)
|
||||
return
|
||||
}
|
||||
|
||||
delete formDetails.terms_conditions
|
||||
|
||||
ContactData(formDetails).then(res =>{
|
||||
if(res?.data?.result != '100'){
|
||||
setRequestStatus({loading:false, status:false, msg:'failed to send message'})
|
||||
setTimeout(()=>{
|
||||
setRequestStatus({loading:false, status:false, msg:''})
|
||||
},3000)
|
||||
return
|
||||
}
|
||||
setRequestStatus({loading:false, status:true, msg:'message Sent'})
|
||||
setTimeout(()=>{
|
||||
setRequestStatus({loading:false, status:false, msg:''})
|
||||
setFormDetails({
|
||||
first_name: '',
|
||||
last_name: '',
|
||||
email: '',
|
||||
subject: '',
|
||||
phone_number: '',
|
||||
action: 1001,
|
||||
message: '',
|
||||
channel: 'WEB',
|
||||
terms_conditions: false
|
||||
})
|
||||
},3000)
|
||||
}).catch(err => {
|
||||
setRequestStatus({loading:false, status:false, msg:'failed something went wrong'})
|
||||
setTimeout(()=>{
|
||||
setRequestStatus({loading:false, status:false, msg:''})
|
||||
},3000)
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
return (
|
||||
<>
|
||||
<section className="contact-section">
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
<div className="col-md-4">
|
||||
<div className="contact--info-area">
|
||||
<h3>Get in touch</h3>
|
||||
<p>Looking for help? Fill the form and start a new discussion.</p>
|
||||
<div className="single-info">
|
||||
<h5>Headquaters</h5>
|
||||
<p>
|
||||
<i className="fal fa-home"></i>
|
||||
{process.env.NEXT_PUBLIC_SUPPORT_US_ADDRESS}
|
||||
</p>
|
||||
</div>
|
||||
<div className="single-info">
|
||||
<h5>Phone</h5>
|
||||
<p>
|
||||
<i className="fal fa-phone"></i>
|
||||
{process.env.NEXT_PUBLIC_SUPPORT_PHONE}
|
||||
<br />
|
||||
</p>
|
||||
</div>
|
||||
<div className="single-info">
|
||||
<h5>Support</h5>
|
||||
<p>
|
||||
<i className="fal fa-envelope"></i>
|
||||
{process.env.NEXT_PUBLIC_SUPPORT_EMAIL}
|
||||
|
||||
</p>
|
||||
</div>
|
||||
<div className="ab-social">
|
||||
<h5>Follow Us</h5>
|
||||
<a className="fac" href={process.env.NEXT_PUBLIC_FACEBOOK_LINK}>
|
||||
<i className="fab fa-facebook-f"></i>
|
||||
</a>
|
||||
<a className="twi" href={process.env.NEXT_PUBLIC_TWITTER_LINK}>
|
||||
{/* <i className="fab fa-twitter"></i> */}
|
||||
<i className="fab fa-x-twitter" />
|
||||
</a>
|
||||
<a className="you" href="#">
|
||||
<i className="fab fa-youtube"></i>
|
||||
</a>
|
||||
<a className="lin" href={process.env.NEXT_PUBLIC_LINKEDIN_LINK}>
|
||||
<i className="fab fa-linkedin-in"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-md-8">
|
||||
<div className="contact-form">
|
||||
<h4>Let’s Connect</h4>
|
||||
<form onSubmit={handleSubmit} className="row">
|
||||
<div className="col-md-6">
|
||||
<input type="text" name="first_name" placeholder="First Name" maxLength={15} onChange={handleChange} value={formDetails.first_name} />
|
||||
</div>
|
||||
<div className="col-md-6">
|
||||
<input type="text" name="last_name" placeholder="Last Name" maxLength={15} onChange={handleChange} value={formDetails.last_name} />
|
||||
</div>
|
||||
<div className="col-md-6">
|
||||
<input
|
||||
type="email"
|
||||
name="email"
|
||||
placeholder="Email Address"
|
||||
maxLength={35}
|
||||
onChange={handleChange}
|
||||
value={formDetails.email}
|
||||
/>
|
||||
</div>
|
||||
<div className="col-md-6">
|
||||
<input
|
||||
type="number"
|
||||
name="phone_number"
|
||||
placeholder="Phone Number"
|
||||
maxLength={15}
|
||||
onChange={handleChange}
|
||||
value={formDetails.phone_number}
|
||||
/>
|
||||
</div>
|
||||
<div className="col-md-12">
|
||||
<input type="text" name="subject" placeholder="Subject" maxLength={35} value={formDetails.subject} onChange={handleChange} />
|
||||
</div>
|
||||
<div className="col-md-12">
|
||||
<textarea
|
||||
name="message"
|
||||
placeholder="How can we help?"
|
||||
onChange={handleChange}
|
||||
value={formDetails.message}
|
||||
></textarea>
|
||||
</div>
|
||||
<div className="col-md-6">
|
||||
<div className="condition-check">
|
||||
<input id="terms-conditions" name="terms_conditions" type="checkbox" value={formDetails.terms_conditions} onChange={handleChange} />
|
||||
<label htmlFor="terms-conditions">
|
||||
I agree to the <a href="#">Terms & Conditions</a>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-md-6 text-right">
|
||||
<input
|
||||
type="submit"
|
||||
value={ requestStatus.loading ? 'Sending...' : 'Send Message'}
|
||||
disabled={requestStatus.loading}
|
||||
className={`${!validForm ? 'opacity-25' : 'opacity-100'}`}
|
||||
/>
|
||||
</div>
|
||||
{/* <div className="p-2 col-12">
|
||||
{requestStatus.msg &&
|
||||
}
|
||||
</div> */}
|
||||
<p className={`p-1 w-100 text-center ${requestStatus.status ? 'text-success' : 'text-danger'}`}>{requestStatus.msg}</p>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div className="bisylms-map">
|
||||
<iframe
|
||||
title="map"
|
||||
src="https://maps.google.com/maps?width=720&height=600&hl=en&coord=33.8573837,-84.4766235&q=Cumberland+Pkwy+SE,+Atlanta,+GA+30339&ie=UTF8&t=p&z=16&iwloc=B&output=embed"
|
||||
></iframe>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default Forms;
|
||||
@@ -1,5 +1,9 @@
|
||||
import React from 'react'
|
||||
import FooterHomeOne from '../components/FooterHomeOne';
|
||||
import BackToTop from '../components/BackToTop';
|
||||
import HeroNews from '../components/News/HeroNews';
|
||||
import ServiceNav from '../components/navigation/ServiceNav';
|
||||
import Forms from './Forms'
|
||||
|
||||
// must be a better way to centralize the style = TEMPORARY USE
|
||||
import '../assets/css/bootstrap.min.css';
|
||||
@@ -14,8 +18,17 @@ import '../assets/css/style.css';
|
||||
function page() {
|
||||
return (
|
||||
<>
|
||||
<div>Contact us Here</div>
|
||||
<FooterHomeOne className={undefined} />
|
||||
<ServiceNav />
|
||||
<HeroNews
|
||||
title="Contact us"
|
||||
breadcrumb={[
|
||||
{ link: '/', title: 'home' },
|
||||
{ link: '/contact', title: 'Contact' },
|
||||
]}
|
||||
/>
|
||||
<Forms />
|
||||
<FooterHomeOne className='' />
|
||||
<BackToTop className='' />
|
||||
</>
|
||||
|
||||
)
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
"use client"
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import Image from 'next/image';
|
||||
import Link from 'next/link';
|
||||
|
||||
import ServiceSideMenu from '../components/ServiceSideMenu';
|
||||
import FaqData from '../Services/FaqData';
|
||||
import Arrow from '../assets/images/arrow-down.png'
|
||||
|
||||
function FAQService() {
|
||||
const [isOpen, setOpen] = React.useState({type: 'faq0'});
|
||||
const accordionHandler = (name) => {
|
||||
setOpen(prev => {
|
||||
if(prev.type == name){
|
||||
return {type: ''}
|
||||
}else {
|
||||
return {type: name}
|
||||
}
|
||||
});
|
||||
};
|
||||
let [faq, setFaq] = useState([])
|
||||
|
||||
useEffect(()=>{
|
||||
FaqData().then(res => {
|
||||
setFaq(res.data.result_list)
|
||||
}).catch(err => {
|
||||
console.log('You got an error ========> '+ err)
|
||||
})
|
||||
},[])
|
||||
|
||||
return (
|
||||
<>
|
||||
<section className="appie-service-details-area pt-100 pb-100">
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
<div className="col-lg-4">
|
||||
<ServiceSideMenu />
|
||||
</div>
|
||||
<div className="col-lg-8 accordion-wrapper">
|
||||
<div className="p-3 service-details-content accordion-con">
|
||||
<div className="container-fluid">
|
||||
<div className='content'>
|
||||
<h3 className='p-3 text-center title'>Frequently asked questions</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div className='row'>
|
||||
<div class="col-12 col-lg-6 accordion" id="accordionExample">
|
||||
{faq.map((item, index)=>{
|
||||
if(index%2 == 0 && item.public != 0){
|
||||
return(
|
||||
<div key={index} className='my-3'>
|
||||
<Accordion name={`faq${index}`} datas={item} accordionHandler={accordionHandler} isOpen={isOpen} />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
})}
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 accordion" id="accordionExample">
|
||||
{faq.map((item, index)=>{
|
||||
if(index%2 != 0 && item.public != 0){
|
||||
return(
|
||||
<div key={index} className='my-3'>
|
||||
<Accordion name={`faq${index}`} datas={item} accordionHandler={accordionHandler} isOpen={isOpen} />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
<div className='container-fluid text-center'>
|
||||
<p className='my-4'>Can't find an answer <Link href='/contact'>contact us</Link> </p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default FAQService;
|
||||
|
||||
export function Accordion({ datas, name, accordionHandler, isOpen }) {
|
||||
return (
|
||||
<>
|
||||
<div className="accordion-item">
|
||||
<div
|
||||
className="accordion-title-bar container-fluid"
|
||||
onClick={()=>{accordionHandler(name)}}
|
||||
>
|
||||
<div className="accordion-title">
|
||||
<p className="">
|
||||
{datas.title}
|
||||
</p>
|
||||
</div>
|
||||
<div className="accordion-title-icon">
|
||||
<span className={`horizontal ${isOpen.type == name ? 'vertical' : ''}`}>
|
||||
<Image width='auto' height='auto' className="" src={Arrow} />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div className={`${isOpen.type == name ? "accordion-body-show" : "accordion-body-hide"}`}>
|
||||
<div className="accordion-body-content" style={{display: 'flex', padding: '10px'}}>
|
||||
<div className="rounded-[28px]" style={{width: '3px', backgroundColor: 'skyblue'}}></div>
|
||||
<div className="flex-1">
|
||||
<p className="" style={{padding: '0px 10px', letterSpacing:'.5px'}}>
|
||||
{datas.msg}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -1,5 +1,9 @@
|
||||
import React from 'react'
|
||||
import ServiceNav from '../components/navigation/ServiceNav';
|
||||
import HeroNews from '../components/News/HeroNews';
|
||||
import FAQService from './FAQService'
|
||||
import FooterHomeOne from '../components/FooterHomeOne';
|
||||
import BackToTop from '../components/BackToTop';
|
||||
|
||||
// must be a better way to centralize the style = TEMPORARY USE
|
||||
import '../assets/css/bootstrap.min.css';
|
||||
@@ -14,8 +18,17 @@ import '../assets/css/style.css';
|
||||
function page() {
|
||||
return (
|
||||
<>
|
||||
<div>Faq Here</div>
|
||||
<FooterHomeOne className={undefined} />
|
||||
<ServiceNav />
|
||||
<HeroNews
|
||||
title="Frequently asked questions"
|
||||
breadcrumb={[
|
||||
{ link: '/', title: 'Home' },
|
||||
{ link: '/faq', title: 'Faq' },
|
||||
]}
|
||||
/>
|
||||
<FAQService />
|
||||
<FooterHomeOne className='' />
|
||||
<BackToTop className='' />
|
||||
</>
|
||||
|
||||
)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import type { Metadata } from "next";
|
||||
import { Inter } from "next/font/google";
|
||||
import "./globals.css";
|
||||
import Script from "next/script";
|
||||
|
||||
const inter = Inter({ subsets: ["latin"] });
|
||||
|
||||
@@ -31,6 +32,33 @@ export default function RootLayout({
|
||||
<meta property="og:image" content="%PUBLIC_URL%/favicon-32x32.png" />
|
||||
|
||||
<body className={inter.className}>{children}</body>
|
||||
<Script>
|
||||
{`
|
||||
var LHC_API = LHC_API || {};
|
||||
LHC_API.args = {
|
||||
mode: "widget",
|
||||
lhc_base_url: "//chat.live.wrenchboard.com/",
|
||||
wheight: 450,
|
||||
wwidth: 350,
|
||||
pheight: 520,
|
||||
pwidth: 500,
|
||||
leaveamessage: true,
|
||||
check_messages: false,
|
||||
};
|
||||
(function () {
|
||||
var po = document.createElement("script");
|
||||
po.type = "text/javascript";
|
||||
po.setAttribute("crossorigin", "anonymous");
|
||||
po.async = true;
|
||||
var date = new Date();
|
||||
po.src =
|
||||
"//chat.live.wrenchboard.com/design/defaulttheme/js/widgetv2/index.js?" +
|
||||
("" + date.getFullYear() + date.getMonth() + date.getDate());
|
||||
var s = document.getElementsByTagName("script")[0];
|
||||
s.parentNode.insertBefore(po, s);
|
||||
})();
|
||||
`}
|
||||
</Script>
|
||||
</html>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
"use client"
|
||||
import React, { useEffect, useRef, useState } from 'react';
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
import React from 'react'
|
||||
import Error from './components/Error'
|
||||
|
||||
// must be a better way to centralize the style = TEMPORARY USE
|
||||
import './assets/css/bootstrap.min.css';
|
||||
import './assets/css/custom-animated.css';
|
||||
import './assets/css/default.css';
|
||||
import './assets/css/font-awesome.min.css';
|
||||
import './assets/css/magnific-popup.css';
|
||||
import './assets/css/main.css';
|
||||
import './assets/css/style.css';
|
||||
|
||||
|
||||
export default function notFound() {
|
||||
return (
|
||||
<Error />
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
import React from 'react';
|
||||
import ServiceSideMenu from '../components/ServiceSideMenu';
|
||||
|
||||
function DetailsPrivacy() {
|
||||
return (
|
||||
<>
|
||||
<section className="appie-service-details-area pt-100 pb-100">
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
<div className="col-lg-4">
|
||||
<ServiceSideMenu />
|
||||
</div>
|
||||
<div className="col-lg-8">
|
||||
<div className="service-details-content">
|
||||
|
||||
<div className="content">
|
||||
<h4 className="title">Privacy Policy</h4>
|
||||
<p>
|
||||
Wrenchboard issues this policy to inform users about the information we collect, the use and disclosures in the course of interactions with the WrenchBoard services by customers. We value the privacy of our customers and such strive to employ best industry standards and practices to protect their privacy. By signing up for this services, using our products or technologies offered through the WrenchBoard website, you expressly agree to the terms of this Privacy Policy.
|
||||
</p>
|
||||
<span>
|
||||
-
|
||||
</span>
|
||||
<hr size="1" />
|
||||
<h4 className="title">Collection of Information </h4>
|
||||
<p>
|
||||
When you sign up for WrenchBoard platform as a user, freelancer, worker or client, you inadvertently provide certain personal information such as name and email address. This information may be used to identify or contact you as part of the service we provide. Below is information we may collect from registered users of the service.
|
||||
<ul class="list-group">
|
||||
<li class="list-group-item">We collect financial information which include bank account numbers, debit/credit account.</li>
|
||||
<li class="list-group-item">We also collect other personal information such as date of birth to ensure compliance to lab our regulations as the platform is strictly for persons 18 years and above.</li>
|
||||
<li class="list-group-item">We collect personal information (names email addresses) from you and your friends when you use our referral program. We may also receive information about you from third party sites during promotions and campaigns.</li>
|
||||
</ul>
|
||||
</p>
|
||||
<hr size="1" />
|
||||
<h4 className="title">Use of Personal Information </h4>
|
||||
<p>
|
||||
The information we collect about you is mainly utilized to provide a secure, efficient and smooth user experience as you interact with the site. We may also utilize the information to contact you to resolve issues with your account or resolve disputes between freelancers and clients. We also use your personal information in the following ways.
|
||||
<ul class="list-group">
|
||||
<li class="list-group-item">To comply with the regulatory requirement, whenever the need arises. </li>
|
||||
<li class="list-group-item">To improve business relationship between Wrenchboard and users. </li>
|
||||
<li class="list-group-item">To manage and protect our IT infrastructure. </li>
|
||||
<li class="list-group-item">To contact you as the need arises as part of the services we offer to users. </li>
|
||||
<li class="list-group-item">To provide some indication on the promotional offers and advertisement we direct to you. </li>
|
||||
<li class="list-group-item">To protect you and your information. We regularly send you notification based on activities as you use the service. </li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<hr size="1" />
|
||||
<h4>How We Share Your Personal Information: </h4>
|
||||
<p>
|
||||
When you sign up to the Service as a freelancer and create a profile, we will share your limited personal information with clients or project owners for whom you may perform a task or do work for based on expression of interest. Such information will include name, profile information with experience and your ranking based on previous performance. This information will be available to the public.</p>
|
||||
<p>When you register as a client or project owner and post a job in the market place or offer jobs to preselected freelancers or workers on this service, information about you, your business will be shared. This information will be based on the information provided in your profile.</p>
|
||||
<p>In order to deliver a quality service on WrenchBoard, we require the services of third parties and agents such as PayPal, Quickteller Service or banks to facilitate and process transactions.</p>
|
||||
<p>We may also share your personal information when and if compelled or mandated by government agencies, or court injunctions or regulatory requirement. In order to settle disputes or claims, we may also be compelled to share your information in order to deliver services to you.</p>
|
||||
<p>Finally, we may share your information with companies that we plan to to merge with or to be acquired by. We will take necessary measure to ensure that all such new affiliations and corporate entities comply with the Privacy Policies hereby stated failing which you will be notified duly.</p>
|
||||
|
||||
<hr size="1" />
|
||||
<h4 className="title"> How We Use Cookies and Related Technologies.</h4>
|
||||
<p>
|
||||
When you access the service or website, www.wrenchboard.com , we store small files called Cookies in your browser. Cookies and related technologies like beacons and tags are used to identify customers uniquely. With Cookies, we can track and trend the pages of interest within the website. Hence, these technologies help us focus only relevant promotions or advertisement to each customer. Through this technologies, we are able to improve the service based on the feedback from the interaction with users. We also rely on these technologies to mitigate fraudulent attempts on your WrenchBoard account. You may elect to disable cookies to prevent installation of cookies from the website to your browser. However, your functional experience with the service or website may be impacted. Note that you automatically disconnect from cookies when you close your browser session or log out of the service.
|
||||
</p>
|
||||
|
||||
|
||||
<hr size="1" />
|
||||
<h4 className="title"> Measures We Take to Secure Your Information</h4>
|
||||
<p>
|
||||
Your data and privacy are important to us as such we take extreme care on how we protect your information. We use a combination of industry standard encryption technologies to protect your information. Your password is not visible to our technical support team or any one in WrenchBoard. Our IT infrastructures are located in hosting facilities with strict access controls, and security protocols with only pre checked and authorized persons have access.
|
||||
</p>
|
||||
|
||||
|
||||
<hr size="1" />
|
||||
<h4 className="title">Updating Your Information or Opting Out.</h4>
|
||||
<p>
|
||||
Users of this service may update the information posted in profiles or their accounts at any time. The accuracy of information posted on the profiles and accounts is entirely the responsibility of users. You may also decide to opt out the service or close your account at any time. We may also deactivate your account if you violate the terms of use of the website. Whilst we will endeavor to delete your core information in such instances, we will retain minimal records for reasons including disputes, claims or administrative purposes. Also, note that it may not be possible to delete any information you had shared with other users on the website previously.
|
||||
</p>
|
||||
|
||||
<hr size="1" />
|
||||
<h4 className="title">Deactivate/Delete your account.</h4>
|
||||
<p>
|
||||
If you no longer wish to use our Services, you can deactivate your Services account. If you want to deactivate your account, that setting is available to you in your account settings. Otherwise, please get in touch with our support. While we close any associated process, you will not be able to access your account. Note that this process cannot be reversed since we will remove your data. If you want to use our services in the future, it will be a new account altogether. </p>
|
||||
|
||||
<hr size="1" />
|
||||
<h4 className="title">Changes To the Policy</h4>
|
||||
<p>
|
||||
We reserve the rights to update and make changes to this Privacy policy at anytime. Changes will become effective once posted. However, we will notify you by email or when you log on to the service or website about any changes that fundamentally affect how we manage your personal information.
|
||||
Contacting Us: You may contact us about this policy through our email address anytime : support@wrenchboard.com
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default DetailsPrivacy;
|
||||
@@ -0,0 +1,28 @@
|
||||
import React from 'react';
|
||||
import thumb from '../assets/images/fun-fact-thumb.png';
|
||||
import Image from 'next/image';
|
||||
|
||||
function HeroPrivacy({title}) {
|
||||
return (
|
||||
<>
|
||||
<div className="appie-page-title-area appie-page-service-title-area">
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
<div className="col-lg-12">
|
||||
<div className="appie-page-title-item">
|
||||
<h1 className="appie-title">
|
||||
{title}
|
||||
</h1>
|
||||
<div className="thumb">
|
||||
<Image src={thumb} alt="" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default HeroPrivacy;
|
||||
@@ -1,5 +1,9 @@
|
||||
import React from 'react'
|
||||
import ServiceNav from '../components/navigation/ServiceNav';
|
||||
import HeroPrivacy from './HeroPrivacy'
|
||||
import DetailsPrivacy from './DetailsPrivacy'
|
||||
import FooterHomeOne from '../components/FooterHomeOne';
|
||||
import BackToTop from '../components/BackToTop';
|
||||
|
||||
// must be a better way to centralize the style = TEMPORARY USE
|
||||
import '../assets/css/bootstrap.min.css';
|
||||
@@ -14,8 +18,11 @@ import '../assets/css/style.css';
|
||||
function page() {
|
||||
return (
|
||||
<>
|
||||
<div>Privacy Here</div>
|
||||
<FooterHomeOne className={undefined} />
|
||||
<ServiceNav />
|
||||
<HeroPrivacy title="Privacy Policy" />
|
||||
<DetailsPrivacy />
|
||||
<FooterHomeOne className='' />
|
||||
<BackToTop className='' />
|
||||
</>
|
||||
|
||||
)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import React from 'react';
|
||||
import ServiceSideMenu from './ServiceSideMenu';
|
||||
// import ServiceSideMenu from './ServiceSideMenu';
|
||||
import ServiceSideMenu from '../components/ServiceSideMenu';
|
||||
|
||||
function ServiceTopart() {
|
||||
|
||||
|
||||
@@ -0,0 +1,281 @@
|
||||
import React from 'react';
|
||||
import ServiceSideMenu from './ServiceSideMenu';
|
||||
|
||||
function DetailsService() {
|
||||
return (
|
||||
<>
|
||||
<section className="appie-service-details-area pt-100 pb-100">
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
<div className="col-lg-4">
|
||||
<ServiceSideMenu />
|
||||
</div>
|
||||
<div className="col-lg-8">
|
||||
<div className="service-details-content">
|
||||
<div className="content">
|
||||
<div className="mb-4">
|
||||
<h4 className="title mb-4">
|
||||
Terms of use
|
||||
</h4>
|
||||
<p className="">
|
||||
(updated August 10, 2023)
|
||||
</p>
|
||||
<p className="">
|
||||
These Website Terms & Conditions (“T&Cs”) apply to your access and
|
||||
use of www.wrenchboard.com,users.wrenchboard.com (the “Site”),
|
||||
native apps, including all software, data, reports, text, images,
|
||||
sounds, video, and all contents made available through any portion
|
||||
of the Site (collectively, the “Content”). The range includes all
|
||||
such elements as whole, individual, and parts.
|
||||
</p>
|
||||
</div>
|
||||
<hr />
|
||||
<div className="my-4">
|
||||
<h4 className="title mb-4">
|
||||
Acceptance of Terms
|
||||
</h4>
|
||||
<p className="">
|
||||
WRENCHBOARD permits you (“User” or “you” or “your”) to access and
|
||||
use the Site and Content, subject to these T&Cs. By accessing or
|
||||
using any portion of the Site, you acknowledge that you have read,
|
||||
understood, and agree to be bound by these T&Cs. If you do not agree
|
||||
with these T&Cs, you must not accept these T&Cs or access or use the
|
||||
site or content.
|
||||
</p>
|
||||
</div>
|
||||
<hr />
|
||||
|
||||
<div className="my-4">
|
||||
<h4 className="title mb-4">
|
||||
General Conditions of Use
|
||||
</h4>
|
||||
<ul className="ml-4">
|
||||
<li className="">
|
||||
<h6 className="title my-4">
|
||||
Authorization to Access and Use Site and Content.
|
||||
</h6>
|
||||
<p className="">
|
||||
Subject to your compliance with these T&Cs and the provisions
|
||||
hereof, you may access or use the Site and Content solely to
|
||||
evaluate WRENCHBOARD and WRENCHBOARD’s products and services.
|
||||
You may only link to the Site or Content, or any portion
|
||||
thereof, as expressly permitted by WRENCHBOARD.
|
||||
</p>
|
||||
</li>
|
||||
<li className="">
|
||||
<h6 className="title my-4">
|
||||
Ownership and Restrictions
|
||||
</h6>
|
||||
<p className="">
|
||||
All rights, title, and interest in and to the Site and Content
|
||||
will remain exclusive to WRENCHBOARD. You will not:
|
||||
</p>
|
||||
<ol className="ml-4" style={{listStyleType: 'number'}}>
|
||||
<li className="my-2">
|
||||
Sublicense, resell, rent, lease, transfer, assign, timeshare,
|
||||
or commercially exploit or make the Site and any Content
|
||||
available to any third party.
|
||||
</li>
|
||||
<li className="my-2">
|
||||
Use the Site and Content in any unlawful manner (including
|
||||
without limitation in violation of any data, privacy, or
|
||||
export control laws) or in any way that interferes with or
|
||||
disrupts the integrity or performance of the Site and Content
|
||||
or their related components.
|
||||
</li>
|
||||
<li className="my-2">
|
||||
Modify, adapt, or hack the Site and Content to, or try to,
|
||||
gain unauthorized access to the restricted portions of the
|
||||
Site and Content or related systems or networks (i.e.,
|
||||
circumvent any encryption or other security measures, gain
|
||||
access to any source code or any other underlying form of
|
||||
technology or information, and gain access to any part of the
|
||||
Site and Content, or any other products or services of
|
||||
WRENCHBOARD that are not readily made available to the general
|
||||
public).
|
||||
</li>
|
||||
</ol>
|
||||
<p className="my-4">
|
||||
You are not permitted to copy, modify, frame, repost, publicly
|
||||
perform or display, sell, reproduce, distribute, or create
|
||||
derivative works of the Site and Content, except that you may
|
||||
download and print one copy of the publicly available materials
|
||||
(i.e., the Content that does not require an Account name or
|
||||
password to access) on any single computer solely for your
|
||||
personal, non-commercial use, provided that you do not modify
|
||||
the material in any way. You keep intact all copyright,
|
||||
trademark, and other proprietary notices.
|
||||
</p>
|
||||
<p className="my-4">
|
||||
You agree not to access the Site or Content by any means other
|
||||
than through the interface that WRENCHBOARD provides to access
|
||||
the same. You may not use any “page-scrape,” “deep-link,”
|
||||
“spider,” or “robot or other automatic program, device,
|
||||
algorithm or methodology, or any similar manual process, to
|
||||
access, copy, acquire, or monitor any portion of the Site or any
|
||||
Content, or in any way reproduce or circumvent the presentation
|
||||
or navigational structure of the Site or any Content, to obtain
|
||||
or attempt to obtain any Content or other information through
|
||||
any means not made generally available through the Site by
|
||||
WRENCHBOARD.
|
||||
</p>
|
||||
<p className="my-4">
|
||||
WRENCHBOARD reserves the right to take lawful measures to
|
||||
prevent such activity. You may not forge headers or otherwise
|
||||
manipulate identifiers to disguise the origin of any message or
|
||||
transmittal you send to WRENCHBOARD on or through the Site or
|
||||
any service offered on or through the Site. You may not pretend
|
||||
that you are, or that you represent, someone else or impersonate
|
||||
any other individual or entity.
|
||||
</p>
|
||||
</li>
|
||||
<li className="">
|
||||
<h6 className="title my-4">
|
||||
Responsibility for Your Data
|
||||
</h6>
|
||||
<p className="">
|
||||
You are solely responsible for all data, information, and other
|
||||
Content, that you upload, post, or otherwise provide or store
|
||||
(hereafter “post(ing)”) in connection with or relating to the
|
||||
Site. By posting your information and other Content (“User
|
||||
Content”) on or through the Site and Content, you grant
|
||||
WRENCHBOARD a worldwide, non-exclusive, perpetual, irrevocable,
|
||||
royalty-free, sublicensable, and transferable license to use,
|
||||
modify, reproduce, distribute, display, publish and perform User
|
||||
Content in connection with the Site and Content. WRENCHBOARD has
|
||||
the right, but not the obligation, to monitor the Site and
|
||||
Content and User Content. <br />
|
||||
WRENCHBOARD may remove or turn off any User Content at any time
|
||||
for any reason or no reason. WRENCHBOARD will have no liability
|
||||
to you for any unauthorized access or use of any of User Content
|
||||
or any corruption, deletion, destruction, or loss of any of User
|
||||
Content.
|
||||
</p>
|
||||
</li>
|
||||
<li className="">
|
||||
<h6 className="title my-4">
|
||||
Feedback
|
||||
</h6>
|
||||
<p className="">
|
||||
You may submit ideas, suggestions, or comments (“Feedback”)
|
||||
regarding the Site and Content or WRENCHBOARD’s business,
|
||||
products, or services. By submitting any Feedback, you
|
||||
acknowledge and agree that:{" "}
|
||||
</p>
|
||||
<ol className="ml-5" style={{listStyleType: 'number'}}>
|
||||
<li className="my-2">
|
||||
Your Feedback is provided by you voluntarily, and WRENCHBOARD
|
||||
may, without any obligations or limitations, use and exploit
|
||||
such Feedback in any manner and for any purpose.
|
||||
</li>
|
||||
<li className="my-2">
|
||||
You will not seek and are not entitled to any money or other
|
||||
form of compensation, consideration, or attribution concerning
|
||||
your Feedback, regardless of whether WRENCHBOARD considered or
|
||||
used your Feedback in any manner.
|
||||
</li>
|
||||
<li className="my-2">
|
||||
Your Feedback is not confidential or proprietary information
|
||||
of you or any third party.
|
||||
</li>
|
||||
</ol>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<hr />
|
||||
|
||||
<div className="my-4">
|
||||
<h4 className="title mb-4">
|
||||
Termination of Access Due to Violations
|
||||
</h4>
|
||||
<p className="">
|
||||
WRENCHBOARD may, in its sole discretion and without prior notice,
|
||||
terminate your access to the Site and block your future access to
|
||||
the Site if we determine that you have violated these T&Cs or other
|
||||
agreements or guidelines which may be associated with your use of
|
||||
the Site. Further, WRENCHBOARD may, in its sole discretion and
|
||||
without prior notice, terminate your access to the Site for cause,
|
||||
which includes (but is not limited to):
|
||||
</p>
|
||||
<ol className="ml-4" style={{listStyleType: 'number'}}>
|
||||
<li className="my-2">
|
||||
Requests by law enforcement or other government agencies
|
||||
</li>
|
||||
<li className="my-2">
|
||||
Discontinuance or material modification of the Site or any service
|
||||
offered on or through the Site
|
||||
</li>
|
||||
<li className="my-2">
|
||||
Unexpected technical issues or problems.T&Cs Updates
|
||||
</li>
|
||||
</ol>
|
||||
<p className="">
|
||||
WRENCHBOARD reserves the right, at its sole discretion, to change or
|
||||
modify portions of these T&Cs at any time. WRENCHBOARD will post the
|
||||
changes to these T&Cs on the Site and indicate at the top of this
|
||||
page the date these terms were last revised. It is your
|
||||
responsibility to check the T&Cs periodically for changes. Your
|
||||
continued use of the Site and Content after the date any such
|
||||
changes become effective constitutes your acceptance of the new or
|
||||
revised T&Cs.
|
||||
</p>
|
||||
</div>
|
||||
<hr />
|
||||
|
||||
<div className="my-4">
|
||||
<h4 className="title mb-4">
|
||||
NO WARRANTIES AND DISCLAIMER BY WRENCHBOARD
|
||||
</h4>
|
||||
<p className="">
|
||||
THE SITE AND CONTENT, AND ALL SERVER AND NETWORK COMPONENTS, ARE
|
||||
PROVIDED ON AN “AS IS” AND “AS AVAILABLE” BASIS WITH ALL ERRORS AND
|
||||
DEFECTS AND WITHOUT ANY WARRANTIES OF ANY KIND, AND WRENCHBOARD
|
||||
EXPRESSLY DISCLAIMS ALL REPRESENTATIONS AND WARRANTIES, INCLUDING
|
||||
ANY IMPLIED WARRANTIES OF ACCURACY, COMPLETENESS, MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, AND ANY
|
||||
REPRESENTATIONS OR WARRANTIES ARISING FROM COURSE OF DEALING, COURSE
|
||||
OF PERFORMANCE OR USAGE OF TRADE. YOU ACKNOWLEDGE THAT WRENCHBOARD
|
||||
DOES NOT WARRANT THAT YOUR ACCESS OR USE OR BOTH OF THE SITE AND
|
||||
CONTENT WILL BE UNINTERRUPTED, TIMELY, SECURE, ERROR-FREE, OR
|
||||
VIRUS-FREE, AND WRENCHBOARD DOES NOT MAKE ANY WARRANTY AS TO THE
|
||||
RESULTS THAT MAY BE OBTAINED FROM THE USE OF THE SITE AND CONTENT.
|
||||
NO INFORMATION, ADVICE, OR SERVICES OBTAINED BY YOU FROM WRENCHBOARD
|
||||
OR THROUGH THE SITE WILL CREATE ANY WARRANTY NOT EXPRESSLY STATED IN
|
||||
THESE TERMS and CONDITIONS, AND YOU SHOULD NOT RELY ON THE SITE AND
|
||||
THE GENERAL CONTENT ALONE AS THE BASIS FOR YOUR BUSINESS DECISIONS.
|
||||
</p>
|
||||
</div>
|
||||
<hr />
|
||||
|
||||
<div className="my-4">
|
||||
<p className="">
|
||||
WRENCHBOARD reserves the right to do any of the following, at any
|
||||
time, without notice: ( 1 ); to modify, suspend or terminate operation
|
||||
of or access to the Site, or any portion of the Site, for any
|
||||
reason; ( 2 ) to modify or change the Site, or any portion of the
|
||||
Site, for any reason; and ( 3 ) to interrupt the operation of the
|
||||
Site, or any portion of the Site, as necessary to perform routine or
|
||||
non-routine maintenance, error correction, or other changes. Changes
|
||||
to the Policy
|
||||
</p>
|
||||
|
||||
<p className="my-4">
|
||||
We reserve the right to update and change this Privacy policy at any
|
||||
time. Changes will become effective once posted. However, we will
|
||||
notify you by email or when you log on to the service or website
|
||||
about any changes that fundamentally affect how we manage your
|
||||
personal information. Contacting Us: You may contact us about this
|
||||
policy through our email address anytime: support@wrenchboard.com
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default DetailsService;
|
||||
@@ -0,0 +1,28 @@
|
||||
import React from 'react';
|
||||
import thumb from '../assets/images/fun-fact-thumb.png';
|
||||
import Image from 'next/image';
|
||||
|
||||
function HeroTerms({title}) {
|
||||
return (
|
||||
<>
|
||||
<div className="appie-page-title-area appie-page-service-title-area">
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
<div className="col-lg-12">
|
||||
<div className="appie-page-title-item">
|
||||
<h1 className="appie-title">
|
||||
{title}
|
||||
</h1>
|
||||
<div className="thumb">
|
||||
<Image src={thumb} alt="" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default HeroTerms;
|
||||
@@ -0,0 +1,83 @@
|
||||
import React from 'react';
|
||||
import Link from 'next/link';
|
||||
import Image from 'next/image';
|
||||
|
||||
import AboutIcon from '../assets/images/icon/about-us.ico'
|
||||
import HomeIcon from '../assets/images/icon/home-icon.ico'
|
||||
import UseCaseIcon from '../assets/images/icon/use-case.ico'
|
||||
import PrivacyIcon from '../assets/images/icon/privacy-policy.ico'
|
||||
import TermsIcon from '../assets/images/icon/term-and-conditions.ico'
|
||||
|
||||
function ServiceSideMenu() {
|
||||
return (
|
||||
<>
|
||||
<div className="service-details-sidebar mr-50">
|
||||
|
||||
<div className="service-download-widget">
|
||||
<Link href="/">
|
||||
{/* <i className="fal fa-download"></i> */}
|
||||
<Image src={HomeIcon} alt='sidenav-icon' />
|
||||
<span>Home</span>
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
<div className="service-download-widget">
|
||||
<Link href="/about-us">
|
||||
{/* <i className="fal fa-download"></i> */}
|
||||
<Image src={AboutIcon} alt='sidenav-icon' />
|
||||
<span>About us</span>
|
||||
</Link>
|
||||
</div>
|
||||
<div className="service-download-widget">
|
||||
<Link href="/use-cases">
|
||||
{/* <i className="fal fa-file-pdf"></i> */}
|
||||
<Image src={UseCaseIcon} alt='sidenav-icon' />
|
||||
<span>Use Cases</span>
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div className="service-download-widget">
|
||||
<Link href="/privacy">
|
||||
{/* <i className="fal fa-download"></i> */}
|
||||
<Image src={PrivacyIcon} alt='sidenav-icon' />
|
||||
<span>Privacy Policy</span>
|
||||
</Link>
|
||||
</div>
|
||||
<div className="service-download-widget">
|
||||
<Link href="/terms">
|
||||
{/* <i className="fal fa-file-pdf"></i> */}
|
||||
<Image src={TermsIcon} alt='sidenav-icon' />
|
||||
<span>Terms of use</span>
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
<div className="service-category-widget">
|
||||
<ul>
|
||||
<li>
|
||||
Get WrenchBoard App
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href={process.env.NEXT_PUBLIC_APPLE_APP}>
|
||||
<i className="fab fa-apple" /> Download for iOS
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a className="item-2" href={process.env.NEXT_PUBLIC_ANDROID_APP}>
|
||||
<i className="fab fa-google-play" /> Download for
|
||||
Android
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default ServiceSideMenu;
|
||||
@@ -1,6 +1,10 @@
|
||||
import React from 'react'
|
||||
import ServiceNav from '../components/navigation/ServiceNav';
|
||||
import HeroTerms from './HeroTerms'
|
||||
import DetailsService from './DetailsService'
|
||||
import FooterHomeOne from '../components/FooterHomeOne';
|
||||
import HomeNav from '../components/navigation/HomeNav'
|
||||
import BackToTop from '../components/BackToTop';
|
||||
|
||||
// must be a better way to centralize the style = TEMPORARY USE
|
||||
import '../assets/css/bootstrap.min.css';
|
||||
import '../assets/css/custom-animated.css';
|
||||
@@ -14,9 +18,11 @@ import '../assets/css/style.css';
|
||||
function page() {
|
||||
return (
|
||||
<>
|
||||
<HomeNav />
|
||||
<div>Terms Here</div>
|
||||
<FooterHomeOne className={undefined} />
|
||||
<ServiceNav />
|
||||
<HeroTerms title="Terms of use" />
|
||||
<DetailsService />
|
||||
<FooterHomeOne className='' />
|
||||
<BackToTop className='' />
|
||||
</>
|
||||
|
||||
)
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
import React from 'react';
|
||||
import blogImg1 from '../assets/images/blog/1.jpg';
|
||||
import UseCaseData from '../Services/UseCaseData';
|
||||
import Image from 'next/image';
|
||||
import Link from 'next/link';
|
||||
|
||||
|
||||
function UseCase() {
|
||||
|
||||
var UseCaseDataResult = UseCaseData();
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className="row">
|
||||
{
|
||||
UseCaseDataResult.map((i, index )=> {
|
||||
var blgImg = i.meta_value != null ? "/images/" + i.meta_value : blogImg1;
|
||||
|
||||
return (
|
||||
<div key={index} className="col-12 col-md-6 col-lg-4">
|
||||
<div className="post-item-1">
|
||||
|
||||
{<img src={blgImg} alt={i.title} />}
|
||||
<div className="b-post-details">
|
||||
<h3>
|
||||
<Link href={process.env.NEXT_PUBLIC_DASH_URL_LOGIN}>
|
||||
{i.title}
|
||||
</Link>
|
||||
</h3>
|
||||
<Link className="read-more" href={process.env.NEXT_PUBLIC_DASH_URL_LOGIN}>
|
||||
Learn more<i className="fal fa-arrow-right"></i>
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
)
|
||||
|
||||
})
|
||||
}
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default UseCase;
|
||||
@@ -1,5 +1,10 @@
|
||||
import React from 'react'
|
||||
import FooterHomeOne from '../components/FooterHomeOne';
|
||||
import BackToTop from '../components/BackToTop';
|
||||
import HeroNews from '../components/News/HeroNews';
|
||||
import ServiceNav from '../components/navigation/ServiceNav';
|
||||
import AboutApp from '../components/AboutApp'
|
||||
import UseCase from './UseCase'
|
||||
|
||||
// must be a better way to centralize the style = TEMPORARY USE
|
||||
import '../assets/css/bootstrap.min.css';
|
||||
@@ -14,8 +19,27 @@ import '../assets/css/style.css';
|
||||
function page() {
|
||||
return (
|
||||
<>
|
||||
<div>use Case Here</div>
|
||||
<FooterHomeOne className={undefined} />
|
||||
<ServiceNav />
|
||||
<HeroNews
|
||||
title="Use Cases"
|
||||
breadcrumb={[
|
||||
{ link: '/', title: 'Home' },
|
||||
{ link: '/use-cases', title: 'Use Cases' },
|
||||
]}
|
||||
/>
|
||||
<AboutApp video='' dark='' />
|
||||
<section className="blogpage-section">
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
{/* <div className="col-lg-12 col-md-7">
|
||||
<UseCase />
|
||||
</div> */}
|
||||
<UseCase />
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<FooterHomeOne className='' />
|
||||
<BackToTop className='' />
|
||||
</>
|
||||
|
||||
)
|
||||
|
||||
@@ -5,9 +5,9 @@ services:
|
||||
context: .
|
||||
dockerfile: docker/Dockerfile
|
||||
restart: unless-stopped
|
||||
#image: registry.chiefsoft.net/wrenchboardmainsite_wrenchboard-www:latest
|
||||
image: registry.chiefsoft.net/wrenchboardmainsite_wrenchboard-www2025:latest
|
||||
ports:
|
||||
- 9581:3000
|
||||
- ${APP_PORT}:3000
|
||||
working_dir: /app
|
||||
volumes:
|
||||
- ./:/app
|
||||
|
||||
@@ -122,6 +122,7 @@ COPY package.json ./
|
||||
RUN npm install --silent
|
||||
#RUN npm install react-scripts@3.4.1 -g --silent
|
||||
#RUN npm install -g serve
|
||||
RUN npm install -g next
|
||||
|
||||
# add app
|
||||
COPY . ./
|
||||
|
||||
@@ -8,18 +8,19 @@
|
||||
"name": "wrenchboard-www2025",
|
||||
"version": "0.1.0",
|
||||
"dependencies": {
|
||||
"axios": "^1.7.2",
|
||||
"next": "14.2.5",
|
||||
"react": "^18",
|
||||
"react-dom": "^18",
|
||||
"react-router-dom": "^6.25.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^20",
|
||||
"@types/react": "^18",
|
||||
"@types/node": "20.14.14",
|
||||
"@types/react": "18.3.3",
|
||||
"@types/react-dom": "^18",
|
||||
"eslint": "^8",
|
||||
"eslint-config-next": "14.2.5",
|
||||
"typescript": "^5"
|
||||
"typescript": "5.5.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint-community/eslint-utils": {
|
||||
@@ -415,11 +416,10 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "20.14.13",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.13.tgz",
|
||||
"integrity": "sha512-+bHoGiZb8UiQ0+WEtmph2IWQCjIqg8MDZMAV+ppRRhUZnquF5mQkP/9vpSwJClEiSM/C7fZZExPzfU0vJTyp8w==",
|
||||
"version": "20.14.14",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.14.tgz",
|
||||
"integrity": "sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"undici-types": "~5.26.4"
|
||||
}
|
||||
@@ -436,7 +436,6 @@
|
||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz",
|
||||
"integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/prop-types": "*",
|
||||
"csstype": "^3.0.2"
|
||||
@@ -851,6 +850,11 @@
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/asynckit": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
|
||||
},
|
||||
"node_modules/available-typed-arrays": {
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
|
||||
@@ -877,6 +881,16 @@
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/axios": {
|
||||
"version": "1.7.3",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz",
|
||||
"integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==",
|
||||
"dependencies": {
|
||||
"follow-redirects": "^1.15.6",
|
||||
"form-data": "^4.0.0",
|
||||
"proxy-from-env": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/axobject-query": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz",
|
||||
@@ -1022,6 +1036,17 @@
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/combined-stream": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||
"dependencies": {
|
||||
"delayed-stream": "~1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/concat-map": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||
@@ -1206,6 +1231,14 @@
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/delayed-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/dir-glob": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
|
||||
@@ -2022,6 +2055,25 @@
|
||||
"dev": true,
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/follow-redirects": {
|
||||
"version": "1.15.6",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
|
||||
"integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "individual",
|
||||
"url": "https://github.com/sponsors/RubenVerborgh"
|
||||
}
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=4.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"debug": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/for-each": {
|
||||
"version": "0.3.3",
|
||||
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
|
||||
@@ -2049,6 +2101,19 @@
|
||||
"url": "https://github.com/sponsors/isaacs"
|
||||
}
|
||||
},
|
||||
"node_modules/form-data": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
|
||||
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
|
||||
"dependencies": {
|
||||
"asynckit": "^0.4.0",
|
||||
"combined-stream": "^1.0.8",
|
||||
"mime-types": "^2.1.12"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/fs.realpath": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||
@@ -3075,6 +3140,25 @@
|
||||
"node": ">=8.6"
|
||||
}
|
||||
},
|
||||
"node_modules/mime-db": {
|
||||
"version": "1.52.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
||||
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/mime-types": {
|
||||
"version": "2.1.35",
|
||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
|
||||
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
||||
"dependencies": {
|
||||
"mime-db": "1.52.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/minimatch": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
|
||||
@@ -3542,6 +3626,11 @@
|
||||
"react-is": "^16.13.1"
|
||||
}
|
||||
},
|
||||
"node_modules/proxy-from-env": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
|
||||
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
|
||||
},
|
||||
"node_modules/punycode": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
|
||||
@@ -4416,7 +4505,6 @@
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
|
||||
"integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
"tsserver": "bin/tsserver"
|
||||
|
||||
@@ -16,11 +16,11 @@
|
||||
"react-router-dom": "^6.25.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^20",
|
||||
"@types/react": "^18",
|
||||
"@types/node": "20.14.14",
|
||||
"@types/react": "18.3.3",
|
||||
"@types/react-dom": "^18",
|
||||
"eslint": "^8",
|
||||
"eslint-config-next": "14.2.5",
|
||||
"typescript": "^5"
|
||||
"typescript": "5.5.4"
|
||||
}
|
||||
}
|
||||
|
||||
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 629 KiB |
|
After Width: | Height: | Size: 422 KiB |
|
After Width: | Height: | Size: 600 KiB |
|
After Width: | Height: | Size: 406 KiB |
|
After Width: | Height: | Size: 545 KiB |
|
After Width: | Height: | Size: 547 KiB |
|
After Width: | Height: | Size: 595 KiB |
|
After Width: | Height: | Size: 443 KiB |
|
After Width: | Height: | Size: 399 KiB |
|
After Width: | Height: | Size: 396 KiB |
|
After Width: | Height: | Size: 524 KiB |
|
After Width: | Height: | Size: 478 KiB |
|
After Width: | Height: | Size: 188 KiB |
|
After Width: | Height: | Size: 181 KiB |
|
After Width: | Height: | Size: 162 KiB |
|
After Width: | Height: | Size: 582 KiB |
|
After Width: | Height: | Size: 626 KiB |
|
After Width: | Height: | Size: 2.6 MiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 765 KiB |
|
After Width: | Height: | Size: 2.1 MiB |
|
After Width: | Height: | Size: 690 KiB |
|
After Width: | Height: | Size: 485 KiB |
|
After Width: | Height: | Size: 67 KiB |
@@ -1,6 +1,16 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<!-- Google tag (gtag.js) -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-DPVPFCJYLP"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'G-DPVPFCJYLP');
|
||||
</script>
|
||||
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="theme-color" content="#000000" />
|
||||
@@ -50,18 +60,7 @@
|
||||
</noscript> -->
|
||||
<!-- link to font awesome -->
|
||||
<link rel="stylesheet" href="//use.fontawesome.com/releases/v6.4.2/css/all.css">
|
||||
|
||||
<title>WrenchBoard</title>
|
||||
<!-- Google tag (gtag.js) -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-WB8G0ZD483"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'G-WB8G0ZD483');
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||