Skip to content

Commit

Permalink
Merge branch 'main' into feat_our_solutions
Browse files Browse the repository at this point in the history
Signed-off-by: Dwight Spencer (denzuko@mastodon.social) <dwight@lumeo.network>
  • Loading branch information
denzuko authored Jul 11, 2024
2 parents 447fddb + bffad65 commit f0b308e
Show file tree
Hide file tree
Showing 14 changed files with 351 additions and 34,004 deletions.
21 changes: 6 additions & 15 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -1,18 +1,9 @@
Copyright (c) 2024 3um Group.
Copyright (c) 2024 3um Group. All Rights Reserved.

Permission is hereby granted, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software
without restriction, including with limitation the rights to use, copy, publish,
and/or distribute, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
IMPORTANT: This 3UM software is supplied to you by 3UM, Inc. ("3UM") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this 3UM software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this 3UM software.

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
In consideration of your agreement to abide by the following terms, and subject to these terms, 3UM grants you a personal, non-exclusive license, under 3UM's copyrights in this original 3UM software (the "3UM Software"), to use, reproduce, modify and redistribute the 3UM Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the 3UM Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the 3UM Software. Neither the name, trademarks, service marks or logos of 3UM may be used to endorse or promote products derived from the 3UM Software without specific prior written permission from 3UM. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by 3UM herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the 3UM Software may be incorporated.

The 3UM Software is provided by 3UM on an "AS IS" basis. 3UM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE 3UM SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
IN NO EVENT SHALL 3UM BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE 3UM SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF 3UM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
2 changes: 2 additions & 0 deletions app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import {


import "./globals.css";
import PrivacyControls from "@/components/PrivacyCookieManger";



Expand All @@ -32,6 +33,7 @@ export default function RootLayout({
<Provider>
<body className={inter.className}>
{children}
<PrivacyControls/>
<HubspotChatbot></HubspotChatbot>
</body>
</Provider>
Expand Down
44 changes: 27 additions & 17 deletions components/Footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import socials from '@/utils/social-links';
import { FacebookFilled } from "@ant-design/icons"
import { LinkedinFilled } from '@ant-design/icons';
import { YoutubeFilled } from '@ant-design/icons';
import NewsLetter from "./NewsLetter";

import Image from 'next/image';
import Link from 'next/link';
Expand All @@ -15,34 +16,43 @@ const Footer = () => {
<footer className="flex flex-col bg-gray-950 px-4 py-8 text-gray-200 sm:px-6 md:px-28 md:py-14 z99">
<div className="mx-auto w-full max-w-7xl">
<div className="flex flex-col lg:flex-row lg:justify-between lg:gap-12">
{/* Logo and Newsletter Section */}
<div className="flex flex-col gap-5 lg:w-1/4">
<Link href='/'>

<div className="flex flex-col gap-5 lg:w-2/3">
<Link href="/">
<Image
src={three_um_logo}
alt='company logo'
alt="company logo"
width={100}
height={100}
className='z-30 h-fit w-fullr'
className="z-30 h-fit w-fullr"
/>
</Link>
<p className="font-paragraph-size-200 font-medium">The web3 development platform</p>
<p className="font-paragraph-size-200 font-medium">
The web3 development platform
</p>
<div className="flex flex-wrap gap-3">
{socials.map((social, index) => (
<a key={index} href={social.url} target="_blank" rel="noreferrer" className="flex h-8 w-8 items-center justify-center rounded-full bg-gray-100 text-gray-700 transition-all hover:text-gray-500">
<img alt={social.alt} loading="lazy" width="16" height="16" decoding="async" data-nimg="1" className="h-4 w-fit" style={{ color: 'transparent' }} src={social.img} />
<a
key={index}
href={social.url}
target="_blank"
rel="noreferrer"
className="flex h-8 w-8 items-center justify-center rounded-full bg-gray-100 text-gray-700 transition-all hover:text-gray-500"
>
<img
alt={social.alt}
loading="lazy"
width="16"
height="16"
decoding="async"
data-nimg="1"
className="h-4 w-fit"
style={{ color: "transparent" }}
src={social.img}
/>
</a>
))}
{/* Social media icons */}
</div>
<div className="mt-6">
<h5 className="font-heading-size-100 font-extrabold text-gray-50">Supercharge your inbox</h5>
<p className="font-paragraph-size-200 pb-3 pt-1 font-medium">Sign up for our developer newsletter.</p>
<button className="group relative w-full rounded-lg bg-gray-100 text-gray-700 px-4 py-3 transition-all hover:text-gray-500">
Subscribe
</button>
</div>
<NewsLetter />
</div>

{/* Link Columns */}
Expand Down
111 changes: 111 additions & 0 deletions components/NewsLetter.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
"use client";
import React, { useState, useCallback } from "react";

const NewsLetter: React.FC = () => {
const [email, setEmail] = useState<string>("");
const [isLoading, setIsLoading] = useState<boolean>(false);
const [showModal, setShowModal] = useState<boolean>(false);

const HUBSPOT_PORTAL_ID = process.env.HUBSPOT_PORTAL_ID;
const HUBSPOT_FORM_ID = process.env.HUBSPOT_FORM_ID;




const handleSubmit = useCallback(async (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault();
if (!email) {
return;
}

setIsLoading(true);
try {
const response = await fetch(
`https://api.hsforms.com/submissions/v3/integration/submit/${HUBSPOT_PORTAL_ID}/${HUBSPOT_FORM_ID}`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
fields: [
{
name: "email",
value: email,
},
],
context: {
pageUri: window.location.href,
pageName: document.title,
},
}),
}
);

if (response.ok) {
setShowModal(true);
setEmail("");
} else {
const errorData = await response.json();
console.error("HubSpot API error:", errorData);
}
} catch (error) {
console.error(error);
} finally {
setIsLoading(false);
}
}, [email]);

const closeModal = () => {
setShowModal(false);
};

return (
<div className="mt-6">
<h5 className="font-heading-size-100 font-extrabold text-gray-50">
Supercharge your inbox
</h5>
<p className="font-paragraph-size-200 pb-3 pt-1 font-medium">
Sign up for our developer newsletter.
</p>
<form className="flex items-center space-x-4" onSubmit={handleSubmit}>
<input
className="block w-2/3 px-5 py-3 outline-none border rounded shadow-sm text-gray-300 border-[#3c3c3c] bg-[#121212] focus:border-white focus:ring-1 focus:ring-white"
type="email"
placeholder="Your e-mail"
value={email}
onChange={(e) => setEmail(e.target.value)}
required
/>
<button
className="group relative w-1/3 rounded-lg bg-gray-100 text-gray-700 px-4 py-3 transition-all hover:text-gray-500"
type="submit"
disabled={isLoading}
>
{isLoading ? "Subscribing..." : "Subscribe"}
</button>
</form>

{showModal && (
<div className="fixed inset-0 flex items-center justify-center bg-black bg-opacity-50 z-[9999]" onClick={closeModal}>
<div className="w-96 h-48 border rounded-lg p-5 shadow bg-white" onClick={(e) => e.stopPropagation()}>
<h2 className="text-lg text-center text-gray-600 leading-relaxed mt-3">
Successfully Subscribed To Our Developer Newsletter !!!
</h2>
<div className="flex justify-center items-center mt-3">
<button
className="w-32 py-2 bg-3UM-color hover:bg-black text-white text-sm font-medium rounded-md"
onClick={closeModal}
>
OK
</button>
</div>
</div>
</div>

)}
</div>
);
};

export default NewsLetter;
64 changes: 64 additions & 0 deletions components/PrivacyCookieManger.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import Script from "next/script";

const PrivacyControls = () => {
return (
<>
<Script
id="iubenda-config"
type="text/javascript"
dangerouslySetInnerHTML={{
__html: `
var _iub = _iub || [];
_iub.csConfiguration = {
"askConsentAtCookiePolicyUpdate": true,
"enableFadp": true,
"enableLgpd": true,
"enableUspr": true,
"fadpApplies": true,
"floatingPreferencesButtonDisplay": "bottom-left",
"lang": "en",
"perPurposeConsent": true,
"siteId": 3689309,
"usprApplies": true,
"usPreferencesWidgetDisplay": "inline-center",
"whitelabel": false,
"cookiePolicyId": 38920869,
"banner": {
"acceptButtonDisplay": true,
"closeButtonDisplay": false,
"customizeButtonDisplay": true,
"explicitWithdrawal": true,
"listPurposes": true,
"ownerName": "3umgroup.com/",
"position": "bottom",
"rejectButtonDisplay": true,
"showTitle": false,
"showTotalNumberOfProviders": true
}
};
`,
}}
/>
<Script
type="text/javascript"
src="https://cs.iubenda.com/autoblocking/3689309.js"
/>
<Script type="text/javascript" src="//cdn.iubenda.com/cs/gpp/stub.js" />
<Script
type="text/javascript"
src="//cdn.iubenda.com/cs/iubenda_cs.js"
charSet="UTF-8"
async
/>
<Script
id="hs-script-loader"
type="text/javascript"
async
defer
src="//js-na1.hs-scripts.com/46648362.js"
/>
</>
);
};

export default PrivacyControls;
Loading

0 comments on commit f0b308e

Please sign in to comment.