Compare commits
97 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1fb8ae7c8b | |||
| 87e0ed3a47 | |||
| 5ceda514a8 | |||
| 05e9ece8e1 | |||
| 438a3077a3 | |||
| d0409422e3 | |||
| ecdf2590a5 | |||
| c3b59cbf5f | |||
| 18baab3c1b | |||
| 216dbdf371 | |||
| 093786c919 | |||
| 97284c5c15 | |||
| 927a7c798a | |||
| ee0221f7e1 | |||
| 40fb8e67ee | |||
| 08e03b27f0 | |||
| 6fde25c65c | |||
| 377b2c86be | |||
| c643c4e7b7 | |||
| 9a503e74ac | |||
| 56cc7efa0e | |||
| eb0a27babd | |||
| 74176e6b40 | |||
| 32dc4106f2 | |||
| e6c152c475 | |||
| 3a37c79560 | |||
| 102beac0ba | |||
| 8f032e2889 | |||
| cfd7cce271 | |||
| 9bb9fecd1a | |||
| ad2b213230 | |||
| cb26c9361f | |||
| 42b1286650 | |||
| 67d9c6cbef | |||
| 19b18f1af7 | |||
| fd204159d7 | |||
| 37a6c3ba10 | |||
| ad088caade | |||
| a6a2f3e535 | |||
| 46873dcd79 | |||
| 4dbef76ed7 | |||
| c66393792e | |||
| 7442f9c691 | |||
| 2b0294d63d | |||
| 2a2a2f7aab | |||
| a81269bc44 | |||
| 5da1291afd | |||
| 3411bd0eba | |||
| 32679cc055 | |||
| e9c173568f | |||
| 7cca3d7696 | |||
| e695720809 | |||
| 616250faf4 | |||
| 0c4be2733f | |||
| 9b0d5b7ca3 | |||
| 4fdba68f8b | |||
| 8796d2ee7c | |||
| 46737bd8fd | |||
| f7ac23748d | |||
| bbc2bd29fa | |||
| 71b30b8987 | |||
| 81fe0f6acf | |||
| 8927614cd6 | |||
| f3eb3858e1 | |||
| 3e415062fa | |||
| c3b2006fe2 | |||
| 52b25308d2 | |||
| ec9a3be2cd | |||
| 34844c08de | |||
| c2b4bf6964 | |||
| 9ca5ae17b7 | |||
| ca5668a6a5 | |||
| 72f195827a | |||
| 1f2529f2fa | |||
| 7bfdda7a51 | |||
| b208892126 | |||
| 0008bfc55f | |||
| 1917c0f326 | |||
| 1a61ae7355 | |||
| 3b1a5effe0 | |||
| 0a7fbd4f3c | |||
| cd57003d0b | |||
| 0d591a3c7d | |||
| efb1626605 | |||
| ab73d3a06b | |||
| df53c29afb | |||
| 3b45980868 | |||
| ac97aafaf6 | |||
| c642db8b67 | |||
| 75e1b789fa | |||
| c865c04ce1 | |||
| 9b46c3b9fb | |||
| 9e1ebadae3 | |||
| 45c9c83eb5 | |||
| 5d86cbab6d | |||
| de5ea3ac0a | |||
| 2a4232b8ba |
@@ -6,7 +6,7 @@ REACT_APP_USERS_ENDPOINT="https://apigate.lotus.g1.wrenchboard.com/en/wrench/api
|
||||
REACT_APP_SITE_NAME='WrenchBoard'
|
||||
REACT_APP_DASH_URL='https://dev-users.wrenchboard.com'
|
||||
REACT_APP_DASH_URL_LOGIN="https://dev-users.wrenchboard.com/login"
|
||||
REACT_APP_DASH_URL_SIGNUP="https://dev-users.wrenchboard.com/signup"
|
||||
REACT_APP_DASH_URL_SIGNUP="https://dev-users.wrenchboard.com/signup?cnt=us"
|
||||
REACT_APP_ANDROID_APP='https://play.google.com/store/apps/details?id=com.wrenchboard.users'
|
||||
REACT_APP_APPLE_APP='https://itunes.apple.com/us/app/wrenchboard/id1435718367?ls=1&mt=8'
|
||||
REACT_APP_FACEBOOK_LINK='https://www.facebook.com/wrenchboard'
|
||||
|
||||
@@ -6,7 +6,7 @@ REACT_APP_USERS_ENDPOINT="https://apigate.lotus.g1.wrenchboard.com/en/wrench/api
|
||||
REACT_APP_SITE_NAME='WrenchBoard'
|
||||
REACT_APP_DASH_URL='https://dev-users.wrenchboard.com'
|
||||
REACT_APP_DASH_URL_LOGIN="https://dev-users.wrenchboard.com/login"
|
||||
REACT_APP_DASH_URL_SIGNUP="https://dev-users.wrenchboard.com/signup"
|
||||
REACT_APP_DASH_URL_SIGNUP="https://dev-users.wrenchboard.com/signup?cnt=us"
|
||||
REACT_APP_ANDROID_APP='https://play.google.com/store/apps/details?id=com.wrenchboard.users'
|
||||
REACT_APP_APPLE_APP='https://itunes.apple.com/us/app/wrenchboard/id1435718367?ls=1&mt=8'
|
||||
REACT_APP_FACEBOOK_LINK='https://www.facebook.com/wrenchboard'
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
ESLINT_NO_DEV_ERRORS=true
|
||||
|
||||
REACT_APP_AUX_ENDPOINT="https://apigate.orion.g1.wrenchboard.com/en/wrench/api/v1"
|
||||
REACT_APP_USERS_ENDPOINT="https://apigate.orion.g1.wrenchboard.com/en/wrench/api/v1"
|
||||
REACT_APP_AUX_ENDPOINT="https://apigate.lotus.g1.wrenchboard.com/en/wrench/api/v1"
|
||||
REACT_APP_USERS_ENDPOINT="https://apigate.lotus.g1.wrenchboard.com/en/wrench/api/v1"
|
||||
|
||||
REACT_APP_SITE_NAME='WrenchBoard'
|
||||
REACT_APP_DASH_URL='https://users.wrenchboard.com'
|
||||
REACT_APP_DASH_URL_LOGIN="https://users.wrenchboard.com/login"
|
||||
REACT_APP_DASH_URL_SIGNUP="https://users.wrenchboard.com/signup"
|
||||
REACT_APP_DASH_URL_SIGNUP="https://users.wrenchboard.com/signup?cnt=us"
|
||||
REACT_APP_ANDROID_APP='https://play.google.com/store/apps/details?id=com.wrenchboard.users'
|
||||
REACT_APP_APPLE_APP='https://itunes.apple.com/us/app/wrenchboard/id1435718367?ls=1&mt=8'
|
||||
REACT_APP_FACEBOOK_LINK='https://www.facebook.com/wrenchboard'
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"singleQuote": true,
|
||||
"trailingComma": "es5",
|
||||
"tabWidth": 2
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" data-name="Layer 1" viewBox="0 0 32 32" id="Family"><path d="M26.305 22.723a4.972 4.972 0 0 0-3.176-8.71 9.917 9.917 0 0 0-3.438-2.292 6 6 0 1 0-7.382 0 9.917 9.917 0 0 0-3.438 2.292 4.972 4.972 0 0 0-3.171 8.71A8.005 8.005 0 0 0 1 30a1 1 0 0 0 2 0 6 6 0 0 1 12 0 1 1 0 0 0 2 0 6 6 0 0 1 12 0 1 1 0 0 0 2 0 8.005 8.005 0 0 0-4.695-7.277ZM26 19a3 3 0 1 1-3-3 3 3 0 0 1 3 3ZM12 7a4 4 0 1 1 4 4 4 4 0 0 1-4-4ZM6 19a3 3 0 1 1 3 3 3 3 0 0 1-3-3Zm10 7.136a8.04 8.04 0 0 0-3.695-3.413 4.949 4.949 0 0 0-1.05-8.16 7.984 7.984 0 0 1 9.49 0 4.949 4.949 0 0 0-1.05 8.16A8.04 8.04 0 0 0 16 26.136Z" fill="#4687ba" class="color000000 svgShape"></path></svg>
|
||||
|
After Width: | Height: | Size: 684 B |
|
After Width: | Height: | Size: 78 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 8.467 8.467" id="invite-friend"><g paint-order="fill markers stroke"><path fill="#64ddff" d="M5.11 5.15a2.042 2.042 0 0 1-2.043 2.043A2.042 2.042 0 0 1 1.025 5.15a2.042 2.042 0 0 1 2.042-2.043A2.042 2.042 0 0 1 5.11 5.151z"></path><path style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;isolation:auto;mix-blend-mode:normal;solid-color:#000;solid-opacity:1" fill="#005fc1" d="M37.255 35.294c-.696 0-1.394.16-1.949.48-.555.32-.883.78-.883 1.276 0 .357.173.695.476.976h.423l.073-.275c-.316-.228-.443-.477-.443-.701 0-.262.172-.559.62-.817.895-.516 2.47-.516 3.365 0 .448.258.621.555.621.817 0 .224-.128.473-.445.701l.073.275h.424c.303-.281.477-.62.477-.976 0-.496-.33-.956-.885-1.276-.554-.32-1.25-.48-1.947-.48zm0-3.207c-.763 0-1.389.623-1.389 1.386 0 .763.626 1.387 1.39 1.387a1.39 1.39 0 0 0 1.386-1.387 1.39 1.39 0 0 0-1.387-1.386zm0 .529c.477 0 .857.38.857.857s-.38.858-.857.858a.855.855 0 0 1-.86-.858c0-.477.383-.857.86-.857z" color="#000" font-family="sans-serif" font-weight="400" overflow="visible" transform="translate(-33.022 -30.617)"></path><path style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;isolation:auto;mix-blend-mode:normal;solid-color:#000;solid-opacity:1" fill="#009cff" d="M40.028 32.469a.265.265 0 0 0-.263.265v.397h-.397a.265.265 0 0 0-.266.265.265.265 0 0 0 .266.264h.397v.397a.265.265 0 0 0 .263.265.265.265 0 0 0 .266-.265v-.397h.396a.265.265 0 0 0 .266-.264.265.265 0 0 0-.266-.265h-.396v-.397a.265.265 0 0 0-.266-.265z" color="#000" font-family="sans-serif" font-weight="400" overflow="visible" transform="translate(-33.022 -30.617)"></path><path style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;isolation:auto;mix-blend-mode:normal;solid-color:#000;solid-opacity:1" fill="#009cff" d="M37.031 30.889a3.965 3.965 0 0 0-2.398.982 3.972 3.972 0 0 0-.897 4.817 3.972 3.972 0 0 0 4.465 2.017 3.973 3.973 0 0 0 3.024-3.855.265.265 0 0 0-.266-.264.265.265 0 0 0-.264.264 3.44 3.44 0 1 1-1.474-2.823.265.265 0 0 0 .369-.064.265.265 0 0 0-.067-.37 3.96 3.96 0 0 0-2.492-.704z" color="#000" font-family="sans-serif" font-weight="400" overflow="visible" transform="translate(-33.022 -30.617)"></path></g></svg>
|
||||
|
After Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" id="files"><path fill="#56B3E5" d="M9 0h10.1c.9 0 1.7.4 2.1 1.1l.4.6c.5.7 1.3 1.1 2.1 1.1H39c1.4 0 2.5 1.1 2.5 2.5v17.3c0 1.4-1.1 2.5-2.5 2.5H9c-1.4 0-2.5-1.1-2.5-2.5V2.5C6.5 1.1 7.6 0 9 0z"></path><path fill="#E6E6E5" d="M35.9 2.7H9.3c-.5 0-.9.4-.9.9v8.9c0 .5.4.9.9.9h26.5c.5 0 .9-.4.9-.9V3.6c.1-.5-.3-.9-.8-.9z"></path><path fill="#98D0F1" d="M39 1.6H28.8c-.9 0-1.7.4-2.1 1.1l-.4.6c-.5.7-1.3 1.1-2.1 1.1H9c-1.4 0-2.5 1.1-2.5 2.5v17.3c0 1.4 1.1 2.5 2.5 2.5h30c1.4 0 2.5-1.1 2.5-2.5v-20c0-1.4-1.1-2.6-2.5-2.6z"></path><path fill="#D66556" d="M5.7 5.5h12.4c1 0 2 .5 2.6 1.4l.5.8c.6.9 1.5 1.4 2.6 1.4h18.5c1.7 0 3.1 1.4 3.1 3.1v21.2c0 1.7-1.4 3.1-3.1 3.1H5.7c-1.7 0-3.1-1.4-3.1-3.1V8.6c0-1.7 1.4-3.1 3.1-3.1z"></path><path fill="#FFF" d="M38.5 8.8H6.1c-.6 0-1.2.5-1.2 1.2v10.9c0 .6.5 1.2 1.2 1.2h32.5c.6 0 1.2-.5 1.2-1.2V10c-.1-.7-.6-1.2-1.3-1.2z"></path><path fill="#ED7161" d="M42.3 7.5H29.9c-1 0-2 .5-2.6 1.4l-.5.8c-.6.9-1.5 1.4-2.6 1.4H5.7c-1.7 0-3.1 1.4-3.1 3.1v21.2c0 1.7 1.4 2.1 3.1 2.1h36.6c1.7 0 3.1-.4 3.1-2.1V10.6c0-1.7-1.4-3.1-3.1-3.1z"></path><path fill="#E7B95E" d="M3.6 12.3h13.8c1.2 0 2.3.6 2.9 1.6l.6.9c.6 1 1.7 1.6 2.9 1.6h20.7c1.9 0 3.5 1.6 3.5 3.5v22.6c0 1.9-1.6 3.5-3.5 3.5H3.6C1.7 46 .1 44.4.1 42.5V15.7c0-1.9 1.6-3.4 3.5-3.4z"></path><path fill="#FFF" d="M40.2 15.9H4c-.7 0-1.3.6-1.3 1.3v12.2c0 .7.6 1.3 1.3 1.3h36.2c.7 0 1.3-.6 1.3-1.3V17.2c0-.7-.6-1.3-1.3-1.3z"></path><path fill="#FFCC67" d="M44.4 14.5H30.6c-1.2 0-2.3.6-2.9 1.6l-.6.9c-.6 1-1.7 1.6-2.9 1.6H3.6c-1.9 0-3.5 1.6-3.5 3.5v22.6c0 1.9 1.6 3.5 3.5 3.5h40.9c1.9 0 3.5-1.6 3.5-3.5V17.9c-.1-1.9-1.7-3.4-3.6-3.4z"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" id="message"><g fill="none" stroke="#303c42" stroke-linecap="round" stroke-linejoin="round" data-name="Chat Bubble 13"><path d="M21 1.5H3A1.5 1.5 0 0 0 1.5 3v19.5l5-5H21a1.5 1.5 0 0 0 1.5-1.5V3A1.5 1.5 0 0 0 21 1.5Z"></path><circle cx="12" cy="10" r=".5"></circle><circle cx="7" cy="10" r=".5"></circle><circle cx="17" cy="10" r=".5"></circle></g></svg>
|
||||
|
After Width: | Height: | Size: 413 B |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 159 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 110 KiB |
@@ -5,9 +5,9 @@
|
||||
<link type="image/png" rel="icon" href="%PUBLIC_URL%/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="theme-color" content="#000000" />
|
||||
<meta name="description" content="wrenchboard.com is an online marketplace to make money from your skills, find, buy and sell professional services. Connect with freelancers to get work done faster. Trade your freelance services." />
|
||||
<meta name="title" content="WrenchBoard: Find a Freelancer | Sell Professional Services" />
|
||||
<meta name="keywords" content="Online Jobs, Online Workers, work online Nigeria, hire a freelancer, hire freelancers, freelance marketplace, freelancer hire, freelance service, freelance professional services, How to make money online, find workers online, Online Services, digital services, freelancers community in Ghana, freelancers community in Nigeria, freelancer site in Africa, Best freelance website in Africa, Freelance Designers, Photographers, Writers in Nigeria, freelancers, freelance outsourcing in Nigeria, freelance IT services in Nigeria, hire freelancers online in Nigeria, freelance services online in Nigeria, freelance contractor in Nigeria, freelance sites in Nigeria, freelance jobs in Nigeria, freelance projects in Nigeria, freelance jobs online in Nigeria, professional freelancers in Nigeria, buy professional services in Nigeria, professional services jobs, professional business services, professional service providers in Nigeria, freelancing services, freelancing sites in Nigeria, freelancers for hire in Nigeria, freelancer search in Nigeria, search freelancer in Nigeria, find freelancers in Nigeria, Find workers US. Outsource from US to Nigeria, find a freelancer in Nigeria, freelancing projects in Nigeria, web freelancing in Nigeria, outsourcing sites freelancers in Nigeria, website for freelancers in Nigeria, marketplace for freelancers " />
|
||||
<meta name="description" content="WrenchBoard.com is the place to set family goals and reward achievements. Find tasks to earn from, or send tasks for others to perform for you." />
|
||||
<meta name="title" content="WrenchBoard: Reward Accomplishments | Get Family Engaged" />
|
||||
<meta name="keywords" content="Empower families to reward accomplishment, set goals, and encourage kids to understand goals, earning, and the benefit of savings – in one app experience. " />
|
||||
|
||||
|
||||
<!-- <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" /> -->
|
||||
@@ -25,6 +25,10 @@
|
||||
work correctly both with client-side routing and a non-root public URL.
|
||||
Learn how to configure a non-root public URL by running `npm run build`.
|
||||
-->
|
||||
|
||||
<!-- link to font awesome -->
|
||||
<link rel="stylesheet" href="//use.fontawesome.com/releases/v6.4.2/css/all.css">
|
||||
|
||||
<title>WrenchBoard</title>
|
||||
<meta property="og:image" content="%PUBLIC_URL%/favicon-32x32.png" />
|
||||
<meta property="business:contact_data:street_address" content="Cumberland Pkwy">
|
||||
|
||||
@@ -14,6 +14,9 @@ import HomeOne from './components/HomeOne';
|
||||
// import HomeThree from './components/HomeThree';
|
||||
// import Hometwo from './components/HomeTwo';
|
||||
import News from './components/News';
|
||||
import Blog from "./components/Blog";
|
||||
import BlogDetail from "./components/Blog/BlogDetail";
|
||||
|
||||
import SingleNews from './components/News/SingleNews';
|
||||
import Service from './components/Service';
|
||||
import UseCases from './components/UseCases';
|
||||
@@ -45,10 +48,11 @@ function Routes() {
|
||||
<Switch>
|
||||
<Route exact path="/" component={HomeOne} />
|
||||
<Route exact path="/eoffer" component={HomeOne} />
|
||||
<Route exact path="/news" component={News} />
|
||||
<Route exact path="/blog" component={News} />
|
||||
{/*<Route exact path="/news" component={News} />*/}
|
||||
<Route exact path="/blog" component={Blog} />
|
||||
<Route exact path="/blog/blogdetail/:id" component={BlogDetail} />
|
||||
<Route exact path="/use-cases" component={UseCases} />
|
||||
<Route exact path="/news/single-news" component={SingleNews} />
|
||||
{/*<Route exact path="/news/single-news" component={SingleNews} />*/}
|
||||
<Route exact path="/service" component={Service} />
|
||||
<Route exact path="/terms" component={Terms} />
|
||||
<Route exact path="/privacy" component={Privacy} />
|
||||
|
||||
@@ -5632,6 +5632,9 @@ readers do not read off random characters that represent icons */
|
||||
.fa-twitter:before {
|
||||
content: "\f099"; }
|
||||
|
||||
.fa-x-twitter:before {
|
||||
content: "\e61b"; }
|
||||
|
||||
.fa-twitter-square:before {
|
||||
content: "\f081"; }
|
||||
|
||||
|
||||
@@ -29,6 +29,16 @@ body {
|
||||
color: #505056;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
body[data-theme="dark"] {
|
||||
--logo: url("../images/wrenchboard-logo-text.png") no-repeat;
|
||||
}
|
||||
|
||||
body[data-theme="light"] {
|
||||
--logo: url("../images/wrenchboard.png") no-repeat;
|
||||
}
|
||||
|
||||
|
||||
/* ==========================================vue */
|
||||
* {
|
||||
margin: 0;
|
||||
@@ -107,12 +117,29 @@ ol {
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 17px;
|
||||
font-size: 18px;
|
||||
font-weight: 400;
|
||||
line-height: 24px;
|
||||
line-height: 28px;
|
||||
color: #505056;
|
||||
margin: 0px;
|
||||
}
|
||||
.designed-title {
|
||||
font-size: 24px;
|
||||
font-weight: 700;
|
||||
margin-bottom: 10px;
|
||||
margin-top: 30px;
|
||||
padding-bottom: 7px;
|
||||
text-align: center;
|
||||
text-shadow: 3px 4px 10px rgba(0,0,0,.3);
|
||||
}
|
||||
|
||||
.designed-description {
|
||||
font-size: 20px;
|
||||
line-height: 28px;
|
||||
font-weight: 400;
|
||||
color: #505056;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.bg_cover {
|
||||
background-position: center center;
|
||||
@@ -890,6 +917,20 @@ p {
|
||||
.appie-header-area.appie-header-page-area.appie-sticky.sticky {
|
||||
background: #4687ba;
|
||||
}
|
||||
|
||||
.wrench-logo-box {
|
||||
box-sizing: border-box;
|
||||
-webkit-box-sizing: border-box;
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
|
||||
.wrench-logo-box img {
|
||||
max-width: 100%; /* Ensures the image doesn't overflow its container */
|
||||
filter: brightness(1.2); /* Adjust image brightness */
|
||||
opacity: 2.4; /* Adjust image opacity */
|
||||
}
|
||||
|
||||
|
||||
.appie-header-area.appie-header-7-area.appie-sticky.sticky {
|
||||
background: #290645;
|
||||
}
|
||||
@@ -1435,6 +1476,23 @@ p {
|
||||
letter-spacing: 2px;
|
||||
text-shadow: 0px 4px 10px rgba(0,0,0,0.3);
|
||||
}
|
||||
.appie-title .earn-rewards{
|
||||
border-radius: 7px;
|
||||
background-color: rgb(245, 71, 71) !important;
|
||||
/* text-shadow: 2px 2px 2px #fff; */
|
||||
}
|
||||
|
||||
/* .earn-rewards::before {
|
||||
background: #f54747!important;
|
||||
border-radius: 7px;
|
||||
content: "";
|
||||
height: 3.8rem;
|
||||
position: absolute;
|
||||
width: 17rem;
|
||||
z-index: -1;
|
||||
transform: translate(-10px, 5px) rotate(357deg);
|
||||
} */
|
||||
|
||||
@media only screen and (min-width: 992px) and (max-width: 1200px) {
|
||||
.appie-hero-area.appie-hero-3-area .appie-hero-content .appie-title {
|
||||
font-size: 54px;
|
||||
@@ -1796,6 +1854,7 @@ p {
|
||||
}
|
||||
}
|
||||
.appie-hero-content ul li a {
|
||||
cursor: pointer;
|
||||
background: #0e1133;
|
||||
color: #fff;
|
||||
line-height: 40px;
|
||||
@@ -1930,7 +1989,8 @@ p {
|
||||
border-color: #fff;
|
||||
}
|
||||
.appie-hero-content.appie-hero-content-6 ul li a.item-2 {
|
||||
background: #fff;
|
||||
/* background: #fff; */
|
||||
background-color: rgb(219, 237, 245);
|
||||
border-color: #fff;
|
||||
}
|
||||
.appie-hero-content.appie-hero-content-6 ul li a.item-2:hover {
|
||||
@@ -2503,11 +2563,13 @@ p {
|
||||
width: 100px;
|
||||
}
|
||||
.appie-single-service-2 .title {
|
||||
font-size: 20px;
|
||||
font-size: 24px;
|
||||
font-weight: 700;
|
||||
margin-top: 30px;
|
||||
margin-bottom: 10px;
|
||||
text-align: center;
|
||||
text-shadow: 3px 4px 10px rgba(0,0,0,0.3);
|
||||
padding-bottom: 7px;
|
||||
}
|
||||
.appie-single-service-2 a {
|
||||
font-size: 14px;
|
||||
@@ -2665,6 +2727,14 @@ p {
|
||||
.service-details-sidebar .service-download-widget a {
|
||||
padding: 13px 30px;
|
||||
color: #505056;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: '2px'
|
||||
}
|
||||
.service-details-sidebar .service-download-widget a img {
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
.service-details-sidebar .service-download-widget a:hover {
|
||||
color: #4687ba;
|
||||
@@ -3008,6 +3078,38 @@ p {
|
||||
color: #9b2cfa;
|
||||
}
|
||||
|
||||
/*===========================
|
||||
6.On WrenchBoard Area css
|
||||
===========================*/
|
||||
.wrench-on-area {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
z-index: 15;
|
||||
/* background-color: #fbf4fe; */
|
||||
}
|
||||
/* .wrench-on-area .traffic-thumb {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
width: 42%;
|
||||
} */
|
||||
/* @media (max-width: 767px) {
|
||||
.wrench-on-area .traffic-thumb {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
@media only screen and (min-width: 768px) and (max-width: 991px) {
|
||||
.wrench-on-area .traffic-thumb {
|
||||
display: none;
|
||||
}
|
||||
} */
|
||||
|
||||
.withFadeEdge{
|
||||
border-radius: 10px 10px 10px 10px;
|
||||
/* box-shadow: inset 0 0 15px 25px white; */
|
||||
box-shadow: 0 0 10px 20px #fff inset;
|
||||
}
|
||||
/*===========================
|
||||
6.APPIE TRAFFICE css
|
||||
===========================*/
|
||||
@@ -4261,6 +4363,7 @@ p {
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
box-shadow: 0 0 15px 25px #eef1f6 inset;
|
||||
}
|
||||
@media only screen and (max-width: 991px) {
|
||||
.mission-side-box {
|
||||
@@ -6422,18 +6525,20 @@ blockquote cite {
|
||||
}
|
||||
.appie-about-page-content p {
|
||||
color: #fff;
|
||||
padding-top: 15px;
|
||||
opacity: 0.7;
|
||||
padding-top: 18px;
|
||||
line-height: 28px;
|
||||
opacity: 2.9;
|
||||
}
|
||||
.appie-about-page-content a {
|
||||
color: #fff;
|
||||
color: red;
|
||||
border: 2px solid #fff;
|
||||
border-radius: 10px;
|
||||
line-height: 40px;
|
||||
padding: 0px 10px;
|
||||
font-weight: 500;
|
||||
/* line-height: 40px;
|
||||
padding: 0 30px;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
margin-top: 43px;
|
||||
margin-top: 43px; */
|
||||
}
|
||||
.appie-about-page-content a:hover {
|
||||
background: #fff;
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
:root {
|
||||
--loader-width: auto;
|
||||
--loader-height: auto;
|
||||
--text-container-width: 400px;
|
||||
--text-container-height: auto;
|
||||
--line-height: 1.5;
|
||||
}
|
||||
|
||||
.image-skeleton-loader,
|
||||
.blog-text-skeleton-loader {
|
||||
width: var(--loader-width);
|
||||
height: var(--loader-height);
|
||||
background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
|
||||
background-size: 200% 100%;
|
||||
animation: loading 1.5s infinite;
|
||||
}
|
||||
|
||||
.image-skeleton-loader{
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.blog-text-skeleton-loader {
|
||||
line-height: calc(var(--text-container-height) * var(--line-height));
|
||||
}
|
||||
|
||||
@keyframes loading {
|
||||
0% {
|
||||
background-position: -200% 0;
|
||||
}
|
||||
100% {
|
||||
background-position: 200% 0;
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 114 KiB |
|
After Width: | Height: | Size: 245 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 4.5 KiB |
|
After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 145 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 113 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 100 KiB |
|
After Width: | Height: | Size: 101 KiB |
@@ -0,0 +1,3 @@
|
||||
<svg width="1200" height="1227" viewBox="0 0 1200 1227" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M714.163 519.284L1160.89 0H1055.03L667.137 450.887L357.328 0H0L468.492 681.821L0 1226.37H105.866L515.491 750.218L842.672 1226.37H1200L714.137 519.284H714.163ZM569.165 687.828L521.697 619.934L144.011 79.6944H306.615L611.412 515.685L658.88 583.579L1055.08 1150.3H892.476L569.165 687.854V687.828Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 430 B |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 57 KiB |
|
After Width: | Height: | Size: 129 KiB |
|
After Width: | Height: | Size: 86 KiB |
@@ -0,0 +1,148 @@
|
||||
import React from "react";
|
||||
|
||||
import Design from "../../assets/images/design.png";
|
||||
import Approach from "../../assets/images/approach.png";
|
||||
import Interactive from "../../assets/images/interactive.png";
|
||||
import Mobility from "../../assets/images/mobility-approach.png";
|
||||
import Privacy from "../../assets/images/privacy.png";
|
||||
import Seamless from "../../assets/images/seamless.png";
|
||||
|
||||
function ServiceItem(props) {
|
||||
return (
|
||||
<div
|
||||
className={`appie-single-service-2 appie-single-service-about item-${props.index} mt-30 wow animated fadeInUp`}
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay={`${props.delay}ms`}
|
||||
style={{ cursor: "default" }}
|
||||
>
|
||||
<div className="icon d-flex justify-content-center align-items-center">
|
||||
<img src={props.image} alt="icon" />
|
||||
</div>
|
||||
<h4 className="title">{props.title}</h4>
|
||||
<p>{props.description}</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function AboutTextComponent() {
|
||||
return (
|
||||
<>
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
<div className="row">
|
||||
{servicesContent?.map(({ id, ...item }) => (
|
||||
<div className="col-lg-4 col-md-6">
|
||||
<ServiceItem index={id} {...item} />
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default AboutTextComponent;
|
||||
|
||||
const servicesContent = [
|
||||
{
|
||||
id: 1,
|
||||
image: Design,
|
||||
delay: 200,
|
||||
title: "Engagement",
|
||||
description:
|
||||
"We encourage healthy online activities for individuals, groups, or households.",
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
image: Approach,
|
||||
delay: 400,
|
||||
title: "Opportunity",
|
||||
description:
|
||||
"We prioritize developing a strong opportunity mindset and teamwork.",
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
image: Interactive,
|
||||
delay: 600,
|
||||
title: "Online Safety",
|
||||
description:
|
||||
"Stay up-to-date with WrenchBoard! We ensure healthy communication at all times.",
|
||||
},
|
||||
// {
|
||||
// id: 4,
|
||||
// image: Mobility,
|
||||
// delay: 200,
|
||||
// title: "Social Media Management",
|
||||
// description:
|
||||
// "Teach youngsters the art of handling social media profiles for small enterprises, cultivating essential marketing and communication abilities while also generating income. Manage tasks, track responses, and stay connected effortlessly. Experience a true mobile lifestyle with WrenchBoard!",
|
||||
// },
|
||||
// {
|
||||
// id: 5,
|
||||
// image: Seamless,
|
||||
// delay: 400,
|
||||
// title: "Inspiring Future Leaders",
|
||||
// description:
|
||||
// "By offering a platform for kids to earn, learn, and contribute, WrenchBoard is nurturing the next generation of entrepreneurs, creators, and leaders. We're sowing the seeds of ambition and self-confidence, preparing them for a brighter future.",
|
||||
// },
|
||||
// {
|
||||
// id: 6,
|
||||
// image: Privacy,
|
||||
// delay: 600,
|
||||
// title: "Privacy",
|
||||
// description:
|
||||
// "Your privacy matters. WrenchBoard works without data sharing, ensuring your information stays secure. Manage tasks across platforms confidently, enjoying a unified experience that respects your privacy.",
|
||||
// },
|
||||
];
|
||||
|
||||
|
||||
const servicesContentBAK = [
|
||||
{
|
||||
id: 1,
|
||||
image: Design,
|
||||
delay: 200,
|
||||
title: "Unlocking Potential",
|
||||
description:
|
||||
"At WrenchBoard, we believe age should never limit one's ability to pursue their passions and generate income. Our platform offers a variety of categories for kids to explore and turn into profitable endeavors, fostering financial awareness and unlocking their potential for a brighter future.",
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
image: Approach,
|
||||
delay: 400,
|
||||
title: "Growing Money Mindset",
|
||||
description:
|
||||
"We prioritize developing a strong money mindset in Kids. WrenchBoard offers a safe and supportive space for kids to explore their passions, learn new skills, and earn money. By instilling the value of hard work, saving, and investing, we aim to empower the next generation to make informed financial decisions and reach their goals.",
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
image: Interactive,
|
||||
delay: 600,
|
||||
title: "Realtime Notifications",
|
||||
description:
|
||||
"Stay up-to-date with WrenchBoard! Our platform keeps you in the loop with convenient alerts and notifications. Choose your preferred method of receiving updates - email, text, or push notifications - and never miss a beat.",
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
image: Mobility,
|
||||
delay: 200,
|
||||
title: "Social Media Management",
|
||||
description:
|
||||
"Teach youngsters the art of handling social media profiles for small enterprises, cultivating essential marketing and communication abilities while also generating income. Manage tasks, track responses, and stay connected effortlessly. Experience a true mobile lifestyle with WrenchBoard!",
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
image: Seamless,
|
||||
delay: 400,
|
||||
title: "Inspiring Future Leaders",
|
||||
description:
|
||||
"By offering a platform for kids to earn, learn, and contribute, WrenchBoard is nurturing the next generation of entrepreneurs, creators, and leaders. We're sowing the seeds of ambition and self-confidence, preparing them for a brighter future.",
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
image: Privacy,
|
||||
delay: 600,
|
||||
title: "Privacy",
|
||||
description:
|
||||
"Your privacy matters. WrenchBoard works without data sharing, ensuring your information stays secure. Manage tasks across platforms confidently, enjoying a unified experience that respects your privacy.",
|
||||
},
|
||||
];
|
||||
@@ -1,40 +1,39 @@
|
||||
import React from 'react';
|
||||
|
||||
function HeroAbout() {
|
||||
return (
|
||||
<>
|
||||
<div className="appie-about-top-title-area">
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
<div className="col-lg-7">
|
||||
<div className="appie-about-top-title">
|
||||
<h2 className="title">Our team is here to support you.</h2>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
return (
|
||||
<>
|
||||
<div className="appie-about-top-title-area">
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
<div className="col-lg-7">
|
||||
<div className="appie-about-top-title">
|
||||
<h2 className="title">Our team is here to support you.</h2>
|
||||
</div>
|
||||
</div>
|
||||
<section className="appie-about-page-area">
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
<div className="col-lg-8">
|
||||
<div className="appie-about-page-content">
|
||||
<h3 className="title">
|
||||
Online Marketplace Platform to Get Paid.
|
||||
</h3>
|
||||
<p>
|
||||
WrenchBoard is the marketplace that connects independent talent with businesses that require their skill set and get paid.
|
||||
We serve everyone from one-person startups to a powerful, trust-driven platform that facilitates businesses and freelancers to work concurrently in unique patterns that unlock their potential.
|
||||
Our platform provides a range of skills in categories including consulting, finance & accounting, website & app development, creative & design, customer support and operations. Learn more at www.wrenchBoard.com
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
{/* col-lg-8 */}
|
||||
<div className="col-12">
|
||||
<div className="appie-about-page-content">
|
||||
<h3 className="title">
|
||||
We Empower Reward for Achievements
|
||||
</h3>
|
||||
<p>
|
||||
WrenchBoard prioritizes safety above all. Parents can set up family accounts to oversee their children's activities and earnings. We implement strict guidelines to ensure age-appropriate tasks and interactions, providing a worry-free space for both kids and their guardians.
|
||||
We believe that earning should go hand in hand with learning. As kids complete projects and earn, they also acquire essential life skills such as financial literacy, time management, and effective communication. WrenchBoard isn't just about making money; it's about fostering holistic growth.
|
||||
<p>Learn more at <a href={process.env.REACT_APP_DASH_URL}>www.WrenchBoard.com</a></p>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</>
|
||||
);
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default HeroAbout;
|
||||
|
||||
@@ -1,131 +1,23 @@
|
||||
import React from 'react';
|
||||
|
||||
import Design from '../../assets/images/value-design.png'
|
||||
import Approach from '../../assets/images/value-approach.png'
|
||||
import Interactive from '../../assets/images/value-interactive.png'
|
||||
import Mobility from '../../assets/images/value-mobility.png'
|
||||
import Privacy from '../../assets/images/value-privacy.png'
|
||||
import Seamless from '../../assets/images/value-seamless.png'
|
||||
|
||||
|
||||
|
||||
|
||||
import AboutTextComponent from '../AboutText/AboutText';
|
||||
|
||||
function ServicesAbout() {
|
||||
return (
|
||||
<>
|
||||
<section className="appie-services-2-area pt-90 pb-55" id="service">
|
||||
<div className="container">
|
||||
<div className="row align-items-end">
|
||||
<div className="col-12 col-md-8">
|
||||
<div className="appie-section-title">
|
||||
<h3 className="appie-title">We’re driven by our values</h3>
|
||||
<p>The app provides design and digital marketing. </p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="row">
|
||||
<div className="col-lg-4 col-md-6">
|
||||
<div
|
||||
className="appie-single-service-2 appie-single-service-about mt-30 wow animated fadeInUp"
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay="200ms"
|
||||
>
|
||||
<div className="icon d-flex justify-content-center align-items-center">
|
||||
{/* <div className='container'>
|
||||
<i className="fal fa-tv"></i>
|
||||
</div> */}
|
||||
<img src={Design} />
|
||||
</div>
|
||||
<h4 className="title">Carefully designed</h4>
|
||||
<p>We listen to how the users will love to use our tools. It is always about the users</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-lg-4 col-md-6">
|
||||
<div
|
||||
className="appie-single-service-2 appie-single-service-about item-2 mt-30 wow animated fadeInUp"
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay="400ms"
|
||||
>
|
||||
<div className="icon d-flex justify-content-center align-items-center">
|
||||
{/* <div className='container'>
|
||||
<i className="fal fa-code"></i>
|
||||
</div> */}
|
||||
<img src={Approach} />
|
||||
</div>
|
||||
<h4 className="title">Modern Approach</h4>
|
||||
<p>Our target is to present a cutting-edge solution that serves the users at all times.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-lg-4 col-md-6">
|
||||
<div
|
||||
className="appie-single-service-2 appie-single-service-about item-3 mt-30 wow animated fadeInUp"
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay="600ms"
|
||||
>
|
||||
<div className="icon d-flex justify-content-center align-items-center">
|
||||
{/* <div className='container'>
|
||||
<i className="fal fa-user-friends"></i>
|
||||
</div> */}
|
||||
<img src={Interactive} />
|
||||
</div>
|
||||
<h4 className="title">User Interactive</h4>
|
||||
<p>Email, notifications, and alerts to get you engaged in the process.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-lg-4 col-md-6">
|
||||
<div
|
||||
className="appie-single-service-2 appie-single-service-about item-4 mt-30 wow animated fadeInUp"
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay="200ms"
|
||||
>
|
||||
<div className="icon d-flex justify-content-center align-items-center">
|
||||
{/* <div className='container'>
|
||||
<i className="fal fa-mobile"></i>
|
||||
</div> */}
|
||||
<img src={Mobility} />
|
||||
</div>
|
||||
<h4 className="title">Mobility Approach</h4>
|
||||
<p>Web and native app solution for your continuously moving life.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-lg-4 col-md-6">
|
||||
<div
|
||||
className="appie-single-service-2 appie-single-service-about item-5 mt-30 wow animated fadeInUp"
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay="400ms"
|
||||
>
|
||||
<div className="icon d-flex justify-content-center align-items-center">
|
||||
{/* <div className='container'>
|
||||
<i className="fal fa-retweet"></i>
|
||||
</div> */}
|
||||
<img src={Seamless} />
|
||||
</div>
|
||||
<h4 className="title">Seamless Sync</h4>
|
||||
<p> Changes across platforms is simplified and streamlined.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-lg-4 col-md-6">
|
||||
<div
|
||||
className="appie-single-service-2 appie-single-service-about item-6 mt-30 wow animated fadeInUp"
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay="600ms"
|
||||
>
|
||||
<div className="icon d-flex justify-content-center align-items-center">
|
||||
{/* <div className='container'>
|
||||
<i className="fal fa-bell"></i>
|
||||
</div> */}
|
||||
<img src={Privacy} />
|
||||
</div>
|
||||
<h4 className="title">Privacy</h4>
|
||||
<p>We truly respect your need for privacy. Our solution doesn't need to share your data to work for you.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</>
|
||||
);
|
||||
return (
|
||||
<>
|
||||
<section className="appie-services-2-area pt-90 pb-55" id="service">
|
||||
<div className="container">
|
||||
<div className="row align-items-end">
|
||||
<div className="col-12 col-lg-8">
|
||||
<div className="appie-section-title">
|
||||
<h3 className="appie-title">We’re driven by your values</h3>
|
||||
{/* <p>{servicesContent.subTitle}</p> */}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default ServicesAbout;
|
||||
|
||||
@@ -9,18 +9,22 @@ import HeaderAbout from './HeaderAbout';
|
||||
import HeroAbout from './HeroAbout';
|
||||
import ServicesAbout from './ServicesAbout';
|
||||
import TeamAbout from './TeamAbout';
|
||||
import StickyHeaderNav from '../StickyHeader/StickyHeaderNav';
|
||||
import AboutTextComponent from '../AboutText/AboutText';
|
||||
|
||||
function AboutUs() {
|
||||
const [drawer, drawerAction] = useToggle(false);
|
||||
return (
|
||||
<>
|
||||
<Drawer drawer={drawer} action={drawerAction.toggle} />
|
||||
{/* <StickyHeaderNav action={drawerAction.toggle} /> */}
|
||||
<HeaderAbout drawer={drawer} action={drawerAction.toggle} />
|
||||
<HeroAbout />
|
||||
<ServicesAbout />
|
||||
{/* <TeamAbout />*/}
|
||||
{/* <SponserHomeTwo />
|
||||
<SignupHomeEight />*/}
|
||||
<AboutTextComponent/>
|
||||
<FooterHomeOne className="appie-footer-about-area" />
|
||||
<BackToTop />
|
||||
</>
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
import singlePost from "../../assets/images/single-post/1.jpg";
|
||||
import { BlogLoader, ImageLoader } from "../../lib/SkeletonLoaders";
|
||||
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": "34px",
|
||||
};
|
||||
|
||||
const bodyTextLoaderStyles = {
|
||||
"--text-container-width": "770px",
|
||||
"--text-container-height": "150px",
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className="single-post-area">
|
||||
<div className="post-thumb" style={{ marginTop: "0" }}>
|
||||
{loader ? (
|
||||
<div style={imgLoaderStyles}>
|
||||
<ImageLoader />
|
||||
</div>
|
||||
) : (
|
||||
<LazyImage 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>
|
||||
|
||||
{/* <blockquote>
|
||||
<p>
|
||||
I don't want no agro brilliant are you taking the piss skive off super
|
||||
boot chancer don't get shirty.
|
||||
</p>
|
||||
<cite>Indigo Violet</cite>
|
||||
</blockquote> */}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default Blog;
|
||||
@@ -0,0 +1,87 @@
|
||||
import React, { useEffect, useMemo, useState } from "react";
|
||||
import { useParams } from "react-router-dom";
|
||||
import useToggle from "../../Hooks/useToggle";
|
||||
import BackToTop from "../BackToTop";
|
||||
import FooterHomeOne from "../HomeOne/FooterHomeOne";
|
||||
import Drawer from "../Mobile/Drawer";
|
||||
import Blog from "./Blog";
|
||||
import BlogData from "../../Services/BlogData";
|
||||
import BlogSideBar from "./BlogSideBar";
|
||||
import HeaderNews from "./HeaderNews";
|
||||
import HeroNews from "./HeroNews";
|
||||
import StickyHeaderNav from "../StickyHeader/StickyHeaderNav";
|
||||
|
||||
/**
|
||||
* Renders the blog detail page.
|
||||
*/
|
||||
function BlogDetail() {
|
||||
const [drawer, drawerAction] = useToggle(false);
|
||||
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);
|
||||
} catch (err) {
|
||||
console.log("Error loading blogdata", err);
|
||||
} finally {
|
||||
setTimeout(() => setIsLoading(false), 1500);
|
||||
}
|
||||
};
|
||||
|
||||
fetchBlogs();
|
||||
}, []);
|
||||
|
||||
const blogItem = useMemo(() => {
|
||||
return blogs.blogdata?.find((item) => +item.id === +id);
|
||||
}, [blogs, id]);
|
||||
|
||||
return (
|
||||
<>
|
||||
{/* Renders the drawer component */}
|
||||
<Drawer drawer={drawer} action={drawerAction.toggle} />
|
||||
|
||||
{/* Renders the header component */}
|
||||
<HeaderNews action={drawerAction.toggle} />
|
||||
|
||||
{/* 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>
|
||||
|
||||
{/* Renders the footer */}
|
||||
<FooterHomeOne />
|
||||
|
||||
{/* Renders the back-to-top button */}
|
||||
<BackToTop />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default BlogDetail;
|
||||
@@ -0,0 +1,69 @@
|
||||
import React from "react";
|
||||
import { Link } from "react-router-dom";
|
||||
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 to={`/blog/blogdetail/${post?.id}`}>
|
||||
<img src={blogImg} alt="blog-img" style={{top: "20px"}} loading="lazy" />
|
||||
</Link>
|
||||
<h5>
|
||||
<Link to={`/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 to="/about-us">About</Link>
|
||||
</li>
|
||||
<li>
|
||||
<a href={process.env.REACT_APP_DASH_URL_SIGNUP}>Sign up</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href={process.env.REACT_APP_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,89 @@
|
||||
import React, { useEffect, useState } from "react";
|
||||
import { Link } from "react-router-dom";
|
||||
import blogOne from "../../assets/images/blog/1.jpg";
|
||||
import BlogData from "../../Services/BlogData";
|
||||
|
||||
/**
|
||||
* Fetches blog data from an API and renders the blogs on the page.
|
||||
* Displays a maximum of six blogs on the home page and all blogs on other pages.
|
||||
*
|
||||
* @param {string} pathname - The current path of the page.
|
||||
* @returns {JSX.Element} - The rendered HTML of the blogs component.
|
||||
*/
|
||||
function Blogs({ pathname }) {
|
||||
const [blogs, setBlogs] = useState([]);
|
||||
|
||||
useEffect(() => {
|
||||
const fetchBlogData = async () => {
|
||||
try {
|
||||
const res = await BlogData();
|
||||
setBlogs(res.data);
|
||||
} catch (err) {
|
||||
console.log("Error loading blogdata", err);
|
||||
}
|
||||
};
|
||||
|
||||
fetchBlogData();
|
||||
}, []);
|
||||
|
||||
const renderBlogItem = (blog) => {
|
||||
const options = {
|
||||
weekday: "short",
|
||||
year: "numeric",
|
||||
month: "long",
|
||||
day: "numeric",
|
||||
};
|
||||
const postDt = new Date(blog.post_date).toLocaleDateString(
|
||||
"en-US",
|
||||
options
|
||||
);
|
||||
const blgImg =
|
||||
blog.meta_value != null
|
||||
? `${blogs?.blogconfig?.media_url}/${blog.meta_value}`
|
||||
: blogOne;
|
||||
|
||||
return (
|
||||
<div key={blog.id} className="col-lg-4 col-md-6">
|
||||
<div
|
||||
className="appie-blog-item mt-30 wow animated fadeInUp"
|
||||
data-wow-duration="3000ms"
|
||||
data-wow-delay="200ms"
|
||||
>
|
||||
<Link to={`/blog/blogdetail/${blog?.id}`} className="thumb">
|
||||
<img
|
||||
src={blgImg}
|
||||
alt={blog.post_title}
|
||||
style={{ cursor: "pointer" }}
|
||||
/>
|
||||
</Link>
|
||||
<div className="content">
|
||||
<div className="blog-meta">
|
||||
<ul>
|
||||
<li style={{ cursor: "pointer" }}>{postDt}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<h3 className="title">
|
||||
<Link to={`/blog/blogdetail/${blog?.id}`}>{blog.post_title}</Link>
|
||||
</h3>
|
||||
<Link to={`/blog/blogdetail/${blog?.id}`}>
|
||||
Learn More <i className="fal fa-arrow-right" />
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className="row">
|
||||
{pathname === "/" // ON HOME PAGE LIMIT TO SIX(6) BLOGS
|
||||
? blogs?.blogdata?.slice(0, 6).map(renderBlogItem)
|
||||
: // ON OTHER PAGES SHOW ALL BLOG
|
||||
blogs?.blogdata?.map(renderBlogItem)}
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default Blogs;
|
||||
@@ -0,0 +1,54 @@
|
||||
import React, { useEffect } from 'react';
|
||||
import logo from '../../assets/images/wrenchboard-logo-text.png';
|
||||
import StickyMenu from '../../lib/StickyMenu';
|
||||
import Navigation from '../Navigation';
|
||||
import getConfig from './../../Config/config'
|
||||
|
||||
function HeaderNews({ action }) {
|
||||
var site = getConfig()[0];
|
||||
useEffect(() => {
|
||||
StickyMenu();
|
||||
});
|
||||
return (
|
||||
<>
|
||||
<header className="appie-header-area appie-header-page-area appie-sticky">
|
||||
<div className="container">
|
||||
<div className="header-nav-box header-nav-box-3 header-nav-box-inner-page">
|
||||
<div className="row align-items-center">
|
||||
<div className="col-lg-2 col-md-4 col-sm-5 col-6 order-1 order-sm-1">
|
||||
<div className="wrench-logo-box">
|
||||
<a href="/">
|
||||
<img src={logo} alt="" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-lg-6 col-md-1 col-sm-1 order-3 order-sm-2">
|
||||
<div className="appie-header-main-menu">
|
||||
<Navigation />
|
||||
</div>
|
||||
</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}>
|
||||
<i className="fal fa-user"></i> Login
|
||||
</a>
|
||||
<a className="main-btn ml-30" href={process.env.REACT_APP_DASH_URL_SIGNUP}>
|
||||
Get Started
|
||||
</a>
|
||||
<div
|
||||
onClick={(e) => action(e)}
|
||||
className="toggle-btn ml-30 canvas_open d-lg-none d-block"
|
||||
>
|
||||
<i className="fa fa-bars"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default HeaderNews;
|
||||
@@ -0,0 +1,31 @@
|
||||
import React from 'react';
|
||||
import { Link } from 'react-router-dom';
|
||||
|
||||
function HeroNews({ title, breadcrumb }) {
|
||||
return (
|
||||
<>
|
||||
<div className="appie-page-title-area">
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
<div className="col-lg-12">
|
||||
<div className="appie-page-title-item">
|
||||
<h3 className="title">{title}</h3>
|
||||
<nav aria-label="breadcrumb">
|
||||
<ol className="breadcrumb">
|
||||
{breadcrumb.map((value) => (
|
||||
<li key={Math.random()} className="breadcrumb-item">
|
||||
<Link to={value.link}>{value.title}</Link>
|
||||
</li>
|
||||
))}
|
||||
</ol>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default HeroNews;
|
||||
@@ -0,0 +1,41 @@
|
||||
import React from "react";
|
||||
import useToggle from "../../Hooks/useToggle";
|
||||
import BackToTop from "../BackToTop";
|
||||
import FooterHomeOne from "../HomeOne/FooterHomeOne";
|
||||
import Drawer from "../Mobile/Drawer";
|
||||
import Blogs from "./Blogs";
|
||||
import BlogSideBar from "./BlogSideBar";
|
||||
import HeaderNews from "./HeaderNews";
|
||||
import HeroNews from "./HeroNews";
|
||||
import StickyHeaderNav from "../StickyHeader/StickyHeaderNav";
|
||||
|
||||
function Blog() {
|
||||
const [drawer, drawerAction] = useToggle(false);
|
||||
return (
|
||||
<>
|
||||
<Drawer drawer={drawer} action={drawerAction.toggle} />
|
||||
{/* <StickyHeaderNav action={drawerAction.toggle} /> */}
|
||||
<HeaderNews action={drawerAction.toggle} />
|
||||
<HeroNews
|
||||
title="Blogs"
|
||||
breadcrumb={[
|
||||
{ link: "/", title: "Home" },
|
||||
{ link: "/blog", title: "Blogs" },
|
||||
]}
|
||||
/>
|
||||
<section className="blogpage-section">
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
<div className="col-lg-12 col-md-7">
|
||||
<Blogs />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<FooterHomeOne />
|
||||
<BackToTop />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default Blog;
|
||||
@@ -82,7 +82,8 @@ function Forms() {
|
||||
<i className="fab fa-facebook-f"></i>
|
||||
</a>
|
||||
<a className="twi" href={process.env.REACT_APP_TWITTER_LINK}>
|
||||
<i className="fab fa-twitter"></i>
|
||||
{/* <i className="fab fa-twitter"></i> */}
|
||||
<i className="fab fa-x-twitter" />
|
||||
</a>
|
||||
<a className="you" href="#">
|
||||
<i className="fab fa-youtube"></i>
|
||||
|
||||
@@ -6,12 +6,14 @@ import Drawer from '../Mobile/Drawer';
|
||||
import HeaderNews from '../News/HeaderNews';
|
||||
import HeroNews from '../News/HeroNews';
|
||||
import Forms from './Forms';
|
||||
import StickyHeaderNav from '../StickyHeader/StickyHeaderNav';
|
||||
|
||||
function Contact() {
|
||||
const [drawer, drawerAction] = useToggle(false);
|
||||
return (
|
||||
<>
|
||||
<Drawer drawer={drawer} action={drawerAction.toggle} />
|
||||
{/* <StickyHeaderNav action={drawerAction.toggle} /> */}
|
||||
<HeaderNews drawer={drawer} action={drawerAction.toggle} />
|
||||
<HeroNews
|
||||
title="Contact us"
|
||||
|
||||
@@ -7,6 +7,7 @@ import StickyMenu from '../../lib/StickyMenu';
|
||||
import FAQService from '../Service/FAQServices';
|
||||
import HeroNews from '../News/HeroNews';
|
||||
import HeaderNews from '../News/HeaderNews';
|
||||
import StickyHeaderNav from '../StickyHeader/StickyHeaderNav';
|
||||
|
||||
|
||||
function FAQ() {
|
||||
@@ -17,11 +18,12 @@ function FAQ() {
|
||||
return (
|
||||
<>
|
||||
<Drawer drawer={drawer} action={drawerAction.toggle} />
|
||||
{/* <StickyHeaderNav action={drawerAction.toggle} /> */}
|
||||
<HeaderNews action={drawerAction.toggle} />
|
||||
<HeroNews
|
||||
title="Frequently asked questions"
|
||||
breadcrumb={[
|
||||
{ link: '/', title: 'home' },
|
||||
{ link: '/', title: 'Home' },
|
||||
{ link: '/faq', title: 'Faq' },
|
||||
]}
|
||||
/>
|
||||
|
||||
@@ -1,26 +1,20 @@
|
||||
import React, { useState } from 'react';
|
||||
import blogOne from '../../assets/images/blog-1.jpg';
|
||||
import blogTwo from '../../assets/images/blog-2.jpg';
|
||||
import blogThree from '../../assets/images/blog-3.jpg';
|
||||
import Blogs from '../News/Blogs';
|
||||
|
||||
|
||||
function BlogHomeOne() {
|
||||
return (
|
||||
<>
|
||||
<section className="appie-blog-area pt-90 pb-95">
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
<div className="col-lg-12">
|
||||
<div className="appie-section-title text-center">
|
||||
<h3 className="appie-title">Our latest blog posts</h3>
|
||||
</div>
|
||||
<section className="appie-blog-area pt-45 pb-95">
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
<div className="col-lg-12">
|
||||
<div className="appie-section-title text-center">
|
||||
<h3 className="appie-title">Our latest blog posts</h3>
|
||||
</div>
|
||||
</div>
|
||||
<Blogs pathname='/' />
|
||||
</div>
|
||||
</section>
|
||||
</>
|
||||
<Blogs pathname='/' />
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ function FooterHomeOne({ className }) {
|
||||
</a>
|
||||
</div>
|
||||
<p>
|
||||
{`It is simple. You can do something that somebody is ready to pay you for. WrenchBoard is the platform to connect you with earning opportunities. `}
|
||||
{`It is simple. You can set goals, task, or anything that need to be done and reward accomplishment. WrenchBoard is the platform to connect opportunities. `}
|
||||
</p>
|
||||
<a href="/service">
|
||||
Read More <i className="fal fa-arrow-right" />
|
||||
@@ -34,7 +34,8 @@ function FooterHomeOne({ className }) {
|
||||
</li>
|
||||
<li>
|
||||
<a href={process.env.REACT_APP_TWITTER_LINK}>
|
||||
<i className="fab fa-twitter" />
|
||||
{/* <i className="fab fa-twitter" /> */}
|
||||
<i className="fab fa-x-twitter" />
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -112,12 +113,12 @@ function FooterHomeOne({ className }) {
|
||||
<div className="apps-download-btn">
|
||||
<ul>
|
||||
<li>
|
||||
<a href={process.env.APPLE_APP}>
|
||||
<a href={process.env.REACT_APP_APPLE_APP} target="_blank">
|
||||
<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.REACT_APP_ANDROID_APP} target="_blank">
|
||||
<i className="fab fa-google-play" /> Download for
|
||||
Android
|
||||
</a>
|
||||
|
||||
@@ -1,67 +1,79 @@
|
||||
import React from 'react';
|
||||
import heroThumbOne from '../../assets/images/app-thumb-1.png';
|
||||
import heroThumbOne1 from '../../assets/images/app-thumb-2.png';
|
||||
|
||||
import heroThumbTwo from '../../assets/images/app-pic.png';
|
||||
import shapeTwo from '../../assets/images/shape/shape-2.png';
|
||||
import shapeThree from '../../assets/images/shape/shape-3.png';
|
||||
import shapeFour from '../../assets/images/shape/shape-4.png';
|
||||
import getConfig from './../../Config/config'
|
||||
import CustomSlider from '../customSlider/CustomSlider';
|
||||
|
||||
|
||||
function HeroHomeOne() {
|
||||
var site = getConfig()[0];
|
||||
return (
|
||||
<>
|
||||
<section className="appie-hero-area">
|
||||
<div className="container">
|
||||
<div className="row align-items-center">
|
||||
<div className="col-lg-6">
|
||||
<div className="appie-hero-content">
|
||||
{/*<span>Welcome To WrenchBoard..</span>*/}
|
||||
<h1 className="appie-title">
|
||||
Turn Chores into Exciting Challenges and Earn Rewards!
|
||||
</h1>
|
||||
<p>
|
||||
The Marketplace platform to earn money with your skills, find, buy and sell professional services. Connect, build an outstanding portfolio and link to an integrated community with best services via a digital platform.
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<a href={process.env.APPLE_APP}>
|
||||
<i className="fab fa-apple" /> Download for iOS
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a className="item-2" href={process.env.REACT_APP_ANDROID_APP}>
|
||||
<i className="fab fa-google-play" /> Download for
|
||||
Android
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-lg-6">
|
||||
<div className="appie-hero-thumb">
|
||||
<div
|
||||
className="thumb wow animated fadeInUp"
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay="200ms"
|
||||
>
|
||||
<img src={heroThumbOne} alt="WrenchBoard" />
|
||||
</div>
|
||||
<div
|
||||
className="thumb-2 wow animated fadeInRight"
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay="600ms"
|
||||
>
|
||||
<img src={heroThumbTwo} alt="" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
var site = getConfig()[0];
|
||||
return (
|
||||
<>
|
||||
<section className="appie-hero-area">
|
||||
<div className="container">
|
||||
<div className="row align-items-center">
|
||||
<div className="col-lg-6">
|
||||
<div className="appie-hero-content appie-hero-content-6">
|
||||
{/*<span>Welcome To WrenchBoard..</span>*/}
|
||||
<h1 className="appie-title">
|
||||
Turn Chores into Exciting Challenges and Earn <span className='earn-rewards px-2'>Rewards!</span>
|
||||
</h1>
|
||||
<p>Your place to set family goals and reward achievements. Find tasks to earn from, or build a tasks portfolio and find others to perform tasks for you.</p>
|
||||
<ul>
|
||||
<li className=''>
|
||||
<a className="item-2" target='_blank' href={process.env.REACT_APP_APPLE_APP}>
|
||||
<i className="fab fa-apple"></i>
|
||||
<span>
|
||||
Available on the <span>App Store</span>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<li className=''>
|
||||
<a className="item-2" target='_blank' href={process.env.REACT_APP_ANDROID_APP}>
|
||||
<i className="fab fa-google-play"></i>
|
||||
<span>
|
||||
Available on the <span>Google Play</span>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-lg-6">
|
||||
<div className="appie-hero-thumb">
|
||||
<div
|
||||
className="thumb wow animated fadeInUp"
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay="200ms"
|
||||
>
|
||||
{/* <img src={heroThumbOne} alt="WrenchBoard" /> */}
|
||||
<div style={{ width: '350px', margin: 'auto' }}>
|
||||
<CustomSlider
|
||||
images={[heroThumbOne, heroThumbOne1, heroThumbOne]}
|
||||
speed='5'
|
||||
indicatorColor='#333'
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
</>
|
||||
);
|
||||
<div
|
||||
className="thumb-2 wow animated fadeInRight"
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay="600ms"
|
||||
>
|
||||
<img src={heroThumbTwo} alt="" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default HeroHomeOne;
|
||||
|
||||
@@ -1,83 +1,76 @@
|
||||
import React from 'react';
|
||||
import IconOne from '../../assets/images/icon/usericon.png';
|
||||
import IconTwo from '../../assets/images/icon/Findtaskicon.png';
|
||||
import IconThree from '../../assets/images/icon/taskicon.png';
|
||||
import IconFour from '../../assets/images/icon/walleticon.png';
|
||||
|
||||
// import FirstSlide from '../../assets/images/icon/Untitledxyz.png';
|
||||
import IconOne from '../../assets/images/icon/account_login.png';
|
||||
import IconTwo from '../../assets/images/icon/task.png';
|
||||
import IconThree from '../../assets/images/icon/target.png';
|
||||
import IconFour from '../../assets/images/icon/reward.png';
|
||||
|
||||
function ServiceItem({ icon, title, description, index }) {
|
||||
return (
|
||||
<div
|
||||
className="appie-single-service text-center mt-30 wow animated fadeInUp"
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay={`${200 * (index + 1)}ms`}
|
||||
style={{ cursor: "default" }}
|
||||
>
|
||||
<div className="icon">
|
||||
<img src={icon} alt={title} />
|
||||
</div>
|
||||
<h4 className="appie-title">{title}</h4>
|
||||
<p>{description}</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function ServicesHomeOne({ className }) {
|
||||
return (
|
||||
<section className={`appie-service-area pt-90 pb-50 ${className}`} id="service">
|
||||
<div className="container">
|
||||
<div className="row justify-content-center">
|
||||
<div className="col-lg-8">
|
||||
<div className="appie-section-title text-center">
|
||||
<h3 className="appie-title">
|
||||
Start getting paid in easy steps.
|
||||
</h3>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="row">
|
||||
<div className="col-lg-3 col-md-6">
|
||||
<div
|
||||
className="appie-single-service text-center mt-30 wow animated fadeInUp"
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay="200ms"
|
||||
>
|
||||
<div className="icon">
|
||||
<img src={IconOne} alt="" />
|
||||
</div>
|
||||
<h4 className="appie-title">Free Account</h4>
|
||||
<p>Join WrenchBoard.<span>Create an account for Income.</span></p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-lg-3 col-md-6">
|
||||
<div
|
||||
className="appie-single-service text-center mt-30 item-2 wow animated fadeInUp"
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay="400ms"
|
||||
>
|
||||
<div className="icon">
|
||||
<img src={IconTwo} alt="" />
|
||||
</div>
|
||||
<h4 className="appie-title">Find Task </h4>
|
||||
<p>Build a Self-Portfolio <span>with sole purpose to Cash-Out.</span></p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-lg-3 col-md-6">
|
||||
<div
|
||||
className="appie-single-service text-center mt-30 item-3 wow animated fadeInUp"
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay="600ms"
|
||||
>
|
||||
<div className="icon">
|
||||
<img src={IconThree} alt="" />
|
||||
</div>
|
||||
<h4 className="appie-title">Complete</h4>
|
||||
<p>Organize and Manage <span>your teams efficiently. </span> Manage your workgroup.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-lg-3 col-md-6">
|
||||
<div
|
||||
className="appie-single-service text-center mt-30 item-4 wow animated fadeInUp"
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay="800ms"
|
||||
>
|
||||
<div className="icon">
|
||||
<img src={IconFour} alt="" />
|
||||
</div>
|
||||
<h4 className="appie-title">Get Paid</h4>
|
||||
<p>Start <span>Boosting your Income </span> By earning Cash for your Time and Skills.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
const serviceTitle = "Set Goals and Rewards to Inspire";
|
||||
const serviceItems = [
|
||||
{
|
||||
icon: IconOne,
|
||||
title: 'Free Account',
|
||||
description: 'Join WrenchBoard. Get your free account.',
|
||||
},
|
||||
{
|
||||
icon: IconTwo,
|
||||
title: 'Set Goals',
|
||||
description: 'Suggest or find what you want to get rewarded for.',
|
||||
},
|
||||
{
|
||||
icon: IconThree,
|
||||
title: 'Complete',
|
||||
description: 'Complete task, and notify assigner with ease.',
|
||||
},
|
||||
{
|
||||
icon: IconFour,
|
||||
title: 'Reward',
|
||||
description: 'Task completed. Find your reward.',
|
||||
},
|
||||
];
|
||||
|
||||
return (
|
||||
<section className={`appie-service-area pt-10 pb-50 ${className}`} id="service">
|
||||
<div className="container">
|
||||
<div className="row justify-content-center">
|
||||
<div className="col-lg-8">
|
||||
<div className="appie-section-title text-center">
|
||||
<h3 className="appie-title">{serviceTitle}</h3>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
</div>
|
||||
</div>
|
||||
<div className="row">
|
||||
{serviceItems.map(({ icon, title, description }, index) => (
|
||||
<div key={index} className="col-lg-3 col-md-6">
|
||||
<ServiceItem
|
||||
icon={icon}
|
||||
title={title}
|
||||
description={description}
|
||||
index={index}
|
||||
/>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
|
||||
export default ServicesHomeOne;
|
||||
|
||||
@@ -1,80 +1,99 @@
|
||||
import React from 'react';
|
||||
import thumb from '../../assets/images/PerformingTaskNew.png';
|
||||
//import thumb from '../../assets/images/PerformingTaskNew.png';
|
||||
import thumb from '../../assets/images/PerformingTask2.jpg';
|
||||
import getConfig from './../../Config/config'
|
||||
|
||||
function TrafficHomeOne() {
|
||||
var site = getConfig()[0];
|
||||
return (
|
||||
<section className="appie-traffic-area pt-140 pb-180">
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
<div className="col-lg-7">
|
||||
<div className="appie-traffic-title">
|
||||
<h3 className="title">Performing task.</h3>
|
||||
<p>
|
||||
Performing task on WrenchBoard is easy. All you need is a free account and follow the steps below.
|
||||
</p>
|
||||
</div>
|
||||
<div className="row">
|
||||
<div className="col-lg-6 col-md-6">
|
||||
<div className="appie-traffic-service mb-30">
|
||||
<div className="icon">
|
||||
<i className="fal fa-check" />
|
||||
</div>
|
||||
<h5 className="title">Create Account</h5>
|
||||
<p> To publish your skills to be hired. Your ratings will grow with performance.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-lg-6 col-md-6">
|
||||
<div className="appie-traffic-service item-2 mb-30">
|
||||
<div className="icon">
|
||||
<i className="fal fa-check" />
|
||||
</div>
|
||||
<h5 className="title">Find or Accept job</h5>
|
||||
<p> Receive Offers to get hired or search for your skills match.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-lg-6 col-md-6">
|
||||
<div className="appie-traffic-service item-3">
|
||||
<div className="icon">
|
||||
<i className="fal fa-check" />
|
||||
</div>
|
||||
<h5 className="title">Complete tasks professionally</h5>
|
||||
<p> Deliver client specification to tailored solution, communicate messages in real-time using messaging platform.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-lg-6 col-md-6">
|
||||
<div className="appie-traffic-service item-4">
|
||||
<div className="icon">
|
||||
<i className="fal fa-check" />
|
||||
</div>
|
||||
<h5 className="title">Get Paid like a Pro for your skills </h5>
|
||||
<p>Obtain payment authorization after job completion and maintain client relationships. Transparent payment process for task compensation.</p>
|
||||
</div>
|
||||
</div>
|
||||
{/* <div className="col-lg-12">
|
||||
var site = getConfig()[0];
|
||||
return (
|
||||
<section className="wrench-on-area pt-90 pb-45">
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
<div className="col-lg-7">
|
||||
<div className="appie-traffic-title">
|
||||
<h3 className="title">{featuresContent.title}</h3>
|
||||
<p>{featuresContent.detail}</p>
|
||||
</div>
|
||||
<div className="row">
|
||||
{featuresContent.list?.map(({ icon, header, paragraph }, idx) => (
|
||||
<div className="col-lg-6 col-md-6" key={idx}>
|
||||
<div
|
||||
className={`appie-traffic-service features item-${
|
||||
idx + 1
|
||||
} mb-30`}
|
||||
style={{ paddingRight: "45px" }}
|
||||
>
|
||||
<div className="icon">
|
||||
<i className={icon} />
|
||||
</div>
|
||||
<h5 className="title">{header}</h5>
|
||||
<p>{paragraph}</p>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
{/* <div className="col-lg-12">
|
||||
<div className="traffic-btn mt-50">
|
||||
<a className="main-btn" href={process.env.REACT_APP_DASH_URL_LOGIN}>
|
||||
Login <i className="fal fa-arrow-right" />
|
||||
</a>
|
||||
</div>
|
||||
</div> */}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="traffic-thumb ">
|
||||
</div>
|
||||
<div className="traffic-thumb d-none d-lg-flex col-lg-5 justify-content-center align-items-center">
|
||||
<div className='position-relative d-flex'>
|
||||
<div className='withFadeEdge position-absolute bg-transparent w-100 h-100' style={{zIndex: '1'}}></div>
|
||||
<img
|
||||
className="wow animated fadeInRight"
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay="200ms"
|
||||
src={thumb}
|
||||
alt=""
|
||||
className="position-relative wow animated fadeInRight p-1"
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay="200ms"
|
||||
src={thumb}
|
||||
alt=""
|
||||
style={{zIndex: '0'}}
|
||||
/>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/* <div className="traffic-thumb">
|
||||
<img
|
||||
className="withFadeEdge wow animated fadeInRight"
|
||||
data-wow-duration="2000ms"
|
||||
data-wow-delay="200ms"
|
||||
src={thumb}
|
||||
alt=""
|
||||
/>
|
||||
</div> */}
|
||||
</section>
|
||||
);
|
||||
}
|
||||
|
||||
export default TrafficHomeOne;
|
||||
|
||||
const featuresContent = {
|
||||
title: "on WrenchBoard.",
|
||||
detail:
|
||||
"Performing task on WrenchBoard is easy. All you need is a free account.",
|
||||
list: [
|
||||
{
|
||||
icon: "fal fa-check",
|
||||
header: "Free account",
|
||||
paragraph: "Get family access from parents, or create your free account.",
|
||||
},
|
||||
{
|
||||
icon: "fal fa-check",
|
||||
header: "Suggest or Find Task",
|
||||
paragraph: "Suggest tasks to parents or pick from the market.",
|
||||
},
|
||||
{
|
||||
icon: "fal fa-check",
|
||||
header: "Complete Task",
|
||||
paragraph: "Complete the task as specified.",
|
||||
},
|
||||
{
|
||||
icon: "fal fa-check",
|
||||
header: "Reward",
|
||||
paragraph: "Get your reward as specified.",
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
@@ -17,15 +17,16 @@ import TestimonialHomeOne from './TestimonialHomeOne';
|
||||
import TrafficHomeTwo from './TrafficHomeTwo';
|
||||
import WrenchBoardHome from './WrenchBoardHome';
|
||||
import RecentJobsOne from './RecentJobsOne';
|
||||
import StickyHeaderNav from '../StickyHeader/StickyHeaderNav';
|
||||
//import BlogData from './../../Services/BlogData';
|
||||
|
||||
function HomeOne() {
|
||||
const [drawer, drawerAction] = useToggle(false);
|
||||
|
||||
|
||||
return (
|
||||
<>
|
||||
<Drawer drawer={drawer} action={drawerAction.toggle} />
|
||||
{/* <StickyHeaderNav action={drawerAction.toggle} /> */}
|
||||
<HomeOneHeader action={drawerAction.toggle} />
|
||||
<HeroHomeOne />
|
||||
<ServicesHomeOne />
|
||||
|
||||
@@ -1,96 +1,81 @@
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import blogOne from '../../assets/images/blog/1.jpg';
|
||||
import BlogData from '../../Services/BlogData';
|
||||
import React, { useEffect, useState } from "react";
|
||||
import { Link } from "react-router-dom";
|
||||
import blogOne from "../../assets/images/blog/1.jpg";
|
||||
import BlogData from "../../Services/BlogData";
|
||||
|
||||
function Blogs({pathname}) {
|
||||
const [blogs, setBlogs] = useState([])
|
||||
/**
|
||||
* Fetches blog data from an API and renders the blogs on the page.
|
||||
* Displays a maximum of six blogs on the home page and all blogs on other pages.
|
||||
*/
|
||||
function Blogs({ pathname }) {
|
||||
const [blogs, setBlogs] = useState([]);
|
||||
|
||||
useEffect(()=>{
|
||||
BlogData().then(res => {
|
||||
setBlogs(res.data)
|
||||
}).catch(err => {
|
||||
console.log('Error loading blogdata', err)
|
||||
})
|
||||
},[])
|
||||
useEffect(() => {
|
||||
const fetchBlogs = async () => {
|
||||
try {
|
||||
const res = await BlogData();
|
||||
setBlogs(res.data);
|
||||
} catch (err) {
|
||||
console.log("Error loading blogdata", err);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className="row">
|
||||
{ pathname == '/' ? // ON HOME PAGE LIMIT TO SIX(6) BLOGS
|
||||
blogs?.blogdata?.map((i, index)=> {
|
||||
var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
|
||||
var postDt = new Date(i.post_date).toLocaleDateString("en-US", options);
|
||||
var blgImg = i.meta_value != null ? `${blogs?.blogconfig?.media_url}/${i.meta_value}` : blogOne;
|
||||
if(index < 6){
|
||||
return (
|
||||
<div key={i.id} className="col-lg-4 col-md-6">
|
||||
<div
|
||||
className="appie-blog-item mt-30 wow animated fadeInUp"
|
||||
data-wow-duration="3000ms"
|
||||
data-wow-delay="200ms"
|
||||
>
|
||||
<div className="thumb">
|
||||
<img src={blgImg} alt={i.post_title} />
|
||||
</div>
|
||||
<div className="content">
|
||||
<div className="blog-meta">
|
||||
<ul>
|
||||
<li>{postDt}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<h3 className="title">
|
||||
<a href={i.guid}>
|
||||
{i.post_title}
|
||||
</a>
|
||||
</h3>
|
||||
<a href={i.guid}>
|
||||
Learn More <i className="fal fa-arrow-right" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
})
|
||||
: // ON OTHER PAGES SHOW ALL BLOG
|
||||
blogs?.blogdata?.map((i, index)=> {
|
||||
var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
|
||||
var postDt = new Date(i.post_date).toLocaleDateString("en-US", options);
|
||||
var blgImg = i.meta_value != null ? `${blogs?.blogconfig?.media_url}/${i.meta_value}` : blogOne;
|
||||
return (
|
||||
<div key={i.id} className="col-lg-4 col-md-6">
|
||||
<div
|
||||
className="appie-blog-item mt-30 wow animated fadeInUp"
|
||||
data-wow-duration="3000ms"
|
||||
data-wow-delay="200ms"
|
||||
>
|
||||
<div className="thumb">
|
||||
<img src={blgImg} alt={i.post_title} />
|
||||
</div>
|
||||
<div className="content">
|
||||
<div className="blog-meta">
|
||||
<ul>
|
||||
<li>{postDt}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<h3 className="title">
|
||||
<a href={i.guid}>
|
||||
{i.post_title}
|
||||
</a>
|
||||
</h3>
|
||||
<a href={i.guid}>
|
||||
Learn More <i className="fal fa-arrow-right" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
})
|
||||
}
|
||||
fetchBlogs();
|
||||
}, []);
|
||||
|
||||
const renderBlogs = () => {
|
||||
return blogs?.blogdata?.map((blog, index) => {
|
||||
const options = {
|
||||
weekday: "short",
|
||||
year: "numeric",
|
||||
month: "long",
|
||||
day: "numeric",
|
||||
};
|
||||
const postDt = new Date(blog.post_date).toLocaleDateString(
|
||||
"en-US",
|
||||
options
|
||||
);
|
||||
const blgImg =
|
||||
blog.meta_value != null
|
||||
? `${blogs?.blogconfig?.media_url}/${blog.meta_value}`
|
||||
: blogOne;
|
||||
|
||||
return (
|
||||
<div key={blog.id} className="col-lg-4 col-md-6">
|
||||
<div
|
||||
className="appie-blog-item mt-30 wow animated fadeInUp"
|
||||
data-wow-duration="3000ms"
|
||||
data-wow-delay="200ms"
|
||||
>
|
||||
<Link to={`/blog/blogdetail/${blog?.id}`} className="thumb">
|
||||
<img src={blgImg} alt={blog.post_title} style={{cursor: "pointer"}} />
|
||||
</Link>
|
||||
<div className="content">
|
||||
<div className="blog-meta">
|
||||
<ul>
|
||||
<li style={{cursor: "pointer"}}>{postDt}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<h3 className="title">
|
||||
<Link to={`/blog/blogdetail/${blog?.id}`}>{blog.post_title}</Link>
|
||||
</h3>
|
||||
<Link to={`/blog/blogdetail/${blog?.id}`}>
|
||||
Learn More <i className="fal fa-arrow-right" />
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
});
|
||||
};
|
||||
|
||||
</>
|
||||
);
|
||||
return (
|
||||
<>
|
||||
<div className="row">
|
||||
{pathname === "/" ? renderBlogs()?.slice(0, 6) : renderBlogs()}
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default Blogs;
|
||||
export default Blogs;
|
||||
@@ -16,7 +16,7 @@ function HeaderNews({ action }) {
|
||||
<div className="header-nav-box header-nav-box-3 header-nav-box-inner-page">
|
||||
<div className="row align-items-center">
|
||||
<div className="col-lg-2 col-md-4 col-sm-5 col-6 order-1 order-sm-1">
|
||||
<div className="appie-logo-box">
|
||||
<div className="wrench-logo-box">
|
||||
<a href="/">
|
||||
<img src={logo} alt="" />
|
||||
</a>
|
||||
|
||||
@@ -7,12 +7,14 @@ import Blog from './Blog';
|
||||
import BlogSideBar from './BlogSideBar';
|
||||
import HeaderNews from './HeaderNews';
|
||||
import HeroNews from './HeroNews';
|
||||
import StickyHeaderNav from '../StickyHeader/StickyHeaderNav';
|
||||
|
||||
function SingleNews() {
|
||||
const [drawer, drawerAction] = useToggle(false);
|
||||
return (
|
||||
<>
|
||||
<Drawer drawer={drawer} action={drawerAction.toggle} />
|
||||
{/* <StickyHeaderNav action={drawerAction.toggle} /> */}
|
||||
<HeaderNews action={drawerAction.toggle} />
|
||||
<HeroNews
|
||||
title="Blog"
|
||||
|
||||
@@ -7,12 +7,14 @@ import Blogs from './Blogs';
|
||||
import BlogSideBar from './BlogSideBar';
|
||||
import HeaderNews from './HeaderNews';
|
||||
import HeroNews from './HeroNews';
|
||||
import StickyHeaderNav from '../StickyHeader/StickyHeaderNav';
|
||||
|
||||
function News() {
|
||||
const [drawer, drawerAction] = useToggle(false);
|
||||
return (
|
||||
<>
|
||||
<Drawer drawer={drawer} action={drawerAction.toggle} />
|
||||
{/* <StickyHeaderNav action={drawerAction.toggle} /> */}
|
||||
<HeaderNews action={drawerAction.toggle} />
|
||||
<HeroNews
|
||||
title="Blogs"
|
||||
|
||||
@@ -12,7 +12,7 @@ function HeaderService({ action }) {
|
||||
<div className="header-nav-box header-nav-box-3 header-nav-box-inner-page">
|
||||
<div className="row align-items-center">
|
||||
<div className="col-lg-2 col-md-4 col-sm-5 col-6 order-1 order-sm-1">
|
||||
<div className="appie-logo-box">
|
||||
<div className="wrench-logo-box">
|
||||
<a href="/">
|
||||
<img src={logo} alt="" />
|
||||
</a>
|
||||
|
||||
@@ -9,6 +9,7 @@ import DetailsService from './DetailsService';
|
||||
import HeaderService from './HeaderService';
|
||||
import HeroService from './HeroService';
|
||||
import DetailsPrivacy from './DetailsPrivacy';
|
||||
import StickyHeaderNav from '../StickyHeader/StickyHeaderNav';
|
||||
|
||||
|
||||
function Privacy() {
|
||||
@@ -19,6 +20,7 @@ function Privacy() {
|
||||
return (
|
||||
<>
|
||||
<Drawer drawer={drawer} action={drawerAction.toggle} />
|
||||
{/* <StickyHeaderNav action={drawerAction.toggle} /> */}
|
||||
<HeaderService action={drawerAction.toggle} />
|
||||
<HeroService title="Privacy Policy" />
|
||||
<DetailsPrivacy />
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
import React from 'react';
|
||||
import getConfig from './../../Config/config'
|
||||
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() {
|
||||
var site = getConfig()[0];
|
||||
@@ -9,20 +14,23 @@ function ServiceSideMenu() {
|
||||
|
||||
<div className="service-download-widget">
|
||||
<a href="/">
|
||||
<i className="fal fa-download"></i>
|
||||
{/* <i className="fal fa-download"></i> */}
|
||||
<img src={HomeIcon} alt='sidenav-icon' />
|
||||
<span>Home</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div className="service-download-widget">
|
||||
<a href="/about-us">
|
||||
<i className="fal fa-download"></i>
|
||||
{/* <i className="fal fa-download"></i> */}
|
||||
<img src={AboutIcon} alt='sidenav-icon' />
|
||||
<span>About us</span>
|
||||
</a>
|
||||
</div>
|
||||
<div className="service-download-widget">
|
||||
<a href="/use-cases">
|
||||
<i className="fal fa-file-pdf"></i>
|
||||
{/* <i className="fal fa-file-pdf"></i> */}
|
||||
<img src={UseCaseIcon} alt='sidenav-icon' />
|
||||
<span>Use Cases</span>
|
||||
</a>
|
||||
</div>
|
||||
@@ -31,13 +39,15 @@ function ServiceSideMenu() {
|
||||
|
||||
<div className="service-download-widget">
|
||||
<a href="/privacy">
|
||||
<i className="fal fa-download"></i>
|
||||
{/* <i className="fal fa-download"></i> */}
|
||||
<img src={PrivacyIcon} alt='sidenav-icon' />
|
||||
<span>Privacy Policy</span>
|
||||
</a>
|
||||
</div>
|
||||
<div className="service-download-widget">
|
||||
<a href="/terms">
|
||||
<i className="fal fa-file-pdf"></i>
|
||||
{/* <i className="fal fa-file-pdf"></i> */}
|
||||
<img src={TermsIcon} alt='sidenav-icon' />
|
||||
<span>Terms of use</span>
|
||||
</a>
|
||||
</div>
|
||||
@@ -49,7 +59,7 @@ function ServiceSideMenu() {
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href={site.apple_app}>
|
||||
<a href={process.env.REACT_APP_APPLE_APP}>
|
||||
<i className="fab fa-apple" /> Download for iOS
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@@ -9,6 +9,7 @@ import DetailsService from './DetailsService';
|
||||
import HeaderService from './HeaderService';
|
||||
import HeroService from './HeroService';
|
||||
import DetailsTerms from './DetailsTerms';
|
||||
import StickyHeaderNav from '../StickyHeader/StickyHeaderNav';
|
||||
|
||||
function Terms() {
|
||||
useEffect(() => {
|
||||
@@ -18,6 +19,7 @@ function Terms() {
|
||||
return (
|
||||
<>
|
||||
<Drawer drawer={drawer} action={drawerAction.toggle} />
|
||||
{/* <StickyHeaderNav action={drawerAction.toggle} /> */}
|
||||
<HeaderService action={drawerAction.toggle} />
|
||||
<HeroService title="Terms of use" />
|
||||
<DetailsTerms />
|
||||
|
||||
@@ -11,6 +11,7 @@ import HeroService from './HeroService';
|
||||
import HeroNews from '../News/HeroNews';
|
||||
import MissionStatement from "./MissionStatement";
|
||||
import ServiceTopart from "./ServiceTopart";
|
||||
import StickyHeaderNav from '../StickyHeader/StickyHeaderNav';
|
||||
|
||||
function Service() {
|
||||
useEffect(() => {
|
||||
@@ -20,6 +21,7 @@ function Service() {
|
||||
return (
|
||||
<>
|
||||
<Drawer drawer={drawer} action={drawerAction.toggle} />
|
||||
{/* <StickyHeaderNav action={drawerAction.toggle} /> */}
|
||||
<HeaderService action={drawerAction.toggle} />
|
||||
{/* <HeroService title="Our Service to you" /> */}
|
||||
<HeroNews
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
import React, { useEffect } from 'react';
|
||||
import logo from '../../assets/images/wrenchboard-logo-text.png';
|
||||
import StickyMenu from '../../lib/StickyMenu';
|
||||
import Navigation from '../Navigation';
|
||||
|
||||
|
||||
function StickyHeaderNav({action}) {
|
||||
useEffect(() => {
|
||||
StickyMenu();
|
||||
}, []);
|
||||
return (
|
||||
<header className="appie-header-area appie-sticky">
|
||||
<div className="container">
|
||||
<div className="header-nav-box">
|
||||
<div className="row align-items-center">
|
||||
<div className="col-lg-2 col-md-4 col-sm-5 col-6 order-1 order-sm-1">
|
||||
<div className="appie-logo-box">
|
||||
<a href="/">
|
||||
<img src={logo} alt="WrenchBoard" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-lg-6 col-md-1 col-sm-1 order-3 order-sm-2">
|
||||
<div className="appie-header-main-menu">
|
||||
<Navigation />
|
||||
</div>
|
||||
</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}>
|
||||
<i className="fal fa-user" /> Login
|
||||
</a>
|
||||
<a className="main-btn ml-30" href={process.env.REACT_APP_DASH_URL_SIGNUP}>
|
||||
Get Started
|
||||
</a>
|
||||
<div
|
||||
onClick={(e) => action(e)}
|
||||
className="toggle-btn ml-30 canvas_open d-lg-none d-block"
|
||||
>
|
||||
<i className="fa fa-bars" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
);
|
||||
}
|
||||
|
||||
export default StickyHeaderNav
|
||||
@@ -17,7 +17,7 @@ function HeaderNews({ action }) {
|
||||
<div className="header-nav-box header-nav-box-3 header-nav-box-inner-page">
|
||||
<div className="row align-items-center">
|
||||
<div className="col-lg-2 col-md-4 col-sm-5 col-6 order-1 order-sm-1">
|
||||
<div className="appie-logo-box">
|
||||
<div className="wrench-logo-box">
|
||||
<a href="/">
|
||||
<img src={logo} alt={process.env.REACT_APP_SITE_NAME} />
|
||||
</a>
|
||||
|
||||
@@ -7,12 +7,14 @@ import UseCase from './UseCase';
|
||||
// import BlogSideBar from './BlogSideBar';
|
||||
import HeaderNews from './HeaderNews';
|
||||
import HeroNews from './HeroNews';
|
||||
import StickyHeaderNav from '../StickyHeader/StickyHeaderNav';
|
||||
|
||||
function UseCases() {
|
||||
const [drawer, drawerAction] = useToggle(false);
|
||||
return (
|
||||
<>
|
||||
<Drawer drawer={drawer} action={drawerAction.toggle} />
|
||||
{/* <StickyHeaderNav action={drawerAction.toggle} /> */}
|
||||
<HeaderNews action={drawerAction.toggle} />
|
||||
<HeroNews
|
||||
title="Use Cases"
|
||||
|
||||
@@ -0,0 +1,178 @@
|
||||
// import React, { useEffect, useState, useRef } from 'react'
|
||||
|
||||
// function CustomSlider({images, speed, indicatorColor, indicatorClass}) {
|
||||
// const imageElement = useRef()
|
||||
// let [sliderCount, setSliderCount] = useState(0)
|
||||
|
||||
// const sliderStart = (count) => {
|
||||
// imageElement.current.classList.add('sliding-images')
|
||||
// setTimeout(()=>{
|
||||
// imageElement.current.classList.remove('sliding-images')
|
||||
// }, 1000)
|
||||
// if(count+1 && typeof(count) == 'number'){
|
||||
// return setSliderCount(count)
|
||||
// }
|
||||
// if(sliderCount >= images.length-1){
|
||||
// return setSliderCount(0)
|
||||
// }
|
||||
// setSliderCount(prev => prev + 1)
|
||||
// }
|
||||
|
||||
// useEffect(()=>{
|
||||
// const sliderInterval = setInterval(()=>{
|
||||
// sliderStart()
|
||||
// }, speed*1000)
|
||||
// return () => {
|
||||
// clearInterval(sliderInterval)
|
||||
// }
|
||||
// },[sliderCount])
|
||||
|
||||
// return (
|
||||
// <div className='' style={{width:'100%', margin:'auto', position:'relative', overflow: 'hidden'}}>
|
||||
// <img ref={imageElement} className={`sliding-images`} src={images[sliderCount]} alt='image' style={{width:'100%', height:'auto'}} />
|
||||
// <div className='custom_indicators' style={{margin: '10px auto', display:'flex', gap:'10px', justifyContent: 'center'}}>
|
||||
// {images.map((image, index)=>(
|
||||
// <div
|
||||
// key={index}
|
||||
// onClick={()=>sliderStart(index)}
|
||||
// className={`custom_indicator ${indicatorClass}`}
|
||||
// style={{backgroundColor:`${sliderCount == index ? `${indicatorColor}` : ''}`, width:'15px', height: '15px', borderRadius: '999px', border: `1px solid ${indicatorColor}`, cursor:'pointer'}}
|
||||
// ></div>
|
||||
// ))}
|
||||
// </div>
|
||||
// </div>
|
||||
// )
|
||||
// }
|
||||
|
||||
// export default CustomSlider
|
||||
|
||||
import React, { useEffect, useState } from 'react'
|
||||
|
||||
function CustomSlider({images, speed, indicatorColor, indicatorClass}) {
|
||||
let [sliderCount, setSliderCount] = useState(0)
|
||||
|
||||
const sliderStart = (count) => {
|
||||
if(count+1 && typeof(count) == 'number'){
|
||||
return setSliderCount(count)
|
||||
}
|
||||
if(sliderCount >= images.length-1){
|
||||
return setSliderCount(0)
|
||||
}
|
||||
setSliderCount(prev => prev + 1)
|
||||
}
|
||||
|
||||
useEffect(()=>{
|
||||
const sliderInterval = setInterval(()=>{
|
||||
sliderStart()
|
||||
}, speed*1000)
|
||||
return () => {
|
||||
clearInterval(sliderInterval)
|
||||
}
|
||||
},[sliderCount])
|
||||
|
||||
return (
|
||||
<div className='' style={{width:'100%', margin:'auto', position:'relative', overflow:'hidden' }}>
|
||||
<div className='' style={{width: '100%', display:'flex'}}>
|
||||
{images.map((image, index)=>(
|
||||
<img
|
||||
key={index}
|
||||
src={image} alt='image'
|
||||
style={{minWidth:'100%', height:'auto', position:'relative', transition:'.9s', right:`${sliderCount == index ? sliderCount*100+'%':'-100%'}`, opacity:`${sliderCount == index ? '1':'0'}`}}
|
||||
// style={{minWidth:'100%', height:'auto', position:'relative', transition:'.9s', right:`${sliderCount*100}%`, opacity:`${sliderCount == index ? '1':'0'}`}}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
<div className='custom_indicators' style={{margin: '10px auto', display:'flex', gap:'10px', justifyContent: 'center'}}>
|
||||
{images.map((image, index)=>(
|
||||
<div
|
||||
key={index}
|
||||
onClick={()=>sliderStart(index)}
|
||||
className={`custom_indicator ${indicatorClass}`}
|
||||
style={{backgroundColor:`${sliderCount == index ? `${indicatorColor}` : ''}`, width:'15px', height: '15px', borderRadius: '999px', border: `1px solid ${indicatorColor}`, cursor:'pointer'}}
|
||||
></div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default CustomSlider
|
||||
|
||||
// import React, { useEffect, useState } from 'react';
|
||||
|
||||
// function CustomSlider({ images, speed, indicatorColor, indicatorClass }) {
|
||||
// const [sliderCount, setSliderCount] = useState(0);
|
||||
|
||||
// const sliderStart = (count) => {
|
||||
// if (count + 1 && typeof count === 'number') {
|
||||
// return setSliderCount(count);
|
||||
// }
|
||||
// if (sliderCount >= images.length - 1) {
|
||||
// return setSliderCount(0);
|
||||
// }
|
||||
// setSliderCount((prev) => prev + 1);
|
||||
// };
|
||||
|
||||
// useEffect(() => {
|
||||
// const sliderInterval = setInterval(() => {
|
||||
// sliderStart();
|
||||
// }, speed * 1000);
|
||||
// return () => {
|
||||
// clearInterval(sliderInterval);
|
||||
// };
|
||||
// }, [sliderCount, speed]);
|
||||
|
||||
// console.log("This is slider count", sliderCount)
|
||||
|
||||
// return (
|
||||
// <div
|
||||
// className=""
|
||||
// style={{ width: '100%', margin: 'auto', position: 'relative', overflow: 'hidden' }}
|
||||
// >
|
||||
// <div className="" style={{ width: '100%', display: 'flex' }}>
|
||||
// {images.map((image, index) => (
|
||||
// <img
|
||||
// key={index}
|
||||
// src={image}
|
||||
// alt="image"
|
||||
// style={{
|
||||
// minWidth: '100%',
|
||||
// height: 'auto',
|
||||
// position: 'relative',
|
||||
// transition: 'opacity .9s',
|
||||
// opacity: sliderCount == index ? '1' : '0',
|
||||
// }}
|
||||
// />
|
||||
// ))}
|
||||
// </div>
|
||||
// <div
|
||||
// className="custom_indicators"
|
||||
// style={{
|
||||
// margin: '10px auto',
|
||||
// display: 'flex',
|
||||
// gap: '10px',
|
||||
// justifyContent: 'center',
|
||||
// }}
|
||||
// >
|
||||
// {images.map((image, index) => (
|
||||
// <div
|
||||
// key={index}
|
||||
// onClick={() => sliderStart(index)}
|
||||
// className={`custom_indicator ${indicatorClass}`}
|
||||
// style={{
|
||||
// backgroundColor: sliderCount === index ? `${indicatorColor}` : '',
|
||||
// width: '15px',
|
||||
// height: '15px',
|
||||
// borderRadius: '999px',
|
||||
// border: `1px solid ${indicatorColor}`,
|
||||
// cursor: 'pointer',
|
||||
// }}
|
||||
// ></div>
|
||||
// ))}
|
||||
// </div>
|
||||
// </div>
|
||||
// );
|
||||
// }
|
||||
|
||||
// export default CustomSlider;
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
import React, { useEffect, useRef, useState } from 'react';
|
||||
|
||||
/**
|
||||
* Renders an image lazily using the Intersection Observer API.
|
||||
* The image is initially hidden and becomes visible once it enters the viewport.
|
||||
* This approach improves performance by only loading images that are actually visible to the user.
|
||||
*
|
||||
* @returns {JSX.Element} - The lazy image component.
|
||||
*/
|
||||
function LazyImage({ src, alt }) {
|
||||
const imgRef = useRef();
|
||||
const [isVisible, setIsVisible] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
const observer = new IntersectionObserver(
|
||||
(entries) => {
|
||||
const [entry] = entries;
|
||||
if (entry.isIntersecting) {
|
||||
setIsVisible(true);
|
||||
observer.unobserve(imgRef.current); // Stop observing once the image is in the viewport
|
||||
}
|
||||
},
|
||||
{
|
||||
root: null, // Viewport
|
||||
rootMargin: '0px', // No margin
|
||||
threshold: 0.1, // Percentage of the image that needs to be visible
|
||||
}
|
||||
);
|
||||
|
||||
if (imgRef.current) {
|
||||
observer.observe(imgRef.current);
|
||||
}
|
||||
|
||||
return () => {
|
||||
if (imgRef.current) {
|
||||
observer.unobserve(imgRef.current);
|
||||
}
|
||||
};
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<img
|
||||
ref={imgRef}
|
||||
src={isVisible ? src : ''}
|
||||
alt={alt}
|
||||
loading="lazy"
|
||||
className={isVisible ? 'visible' : 'hidden'} // You can apply CSS classes for animations
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
export default LazyImage;
|
||||