Skip to content

Commit

Permalink
Merge branch 'main' into feat/plugin-page
Browse files Browse the repository at this point in the history
  • Loading branch information
yuval-hazaz committed Feb 6, 2024
2 parents 8e54cc9 + c54209f commit 37a604e
Show file tree
Hide file tree
Showing 116 changed files with 40,316 additions and 306 deletions.
6 changes: 4 additions & 2 deletions .env.development
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ NEXT_PUBLIC_YOUTUBE_LINK='https://www.youtube.com/c/Amplicationcom'
NEXT_PUBLIC_SITE='https://amplication.com'
NEXT_PUBLIC_MAIL='contact@amplication.com'
NEXT_PRIVATE_HUBSPOT_PAT=''
NEXT_PRIVATE_BLOG_SERVER_URL='https://blog-api.amplication.com'
NEXT_PRIVATE_BLOG_SERVER_URL='https://blog-api.amplication-staging.com'
#NEXT_PRIVATE_BLOG_SERVER_URL='http://localhost:3000'
NEXT_PRIVATE_PLUGIN_API_URL='https://plugin-api.amplication.com'
NEXT_PUBLIC_BILLING_API_KEY='client-d3f38201-ed3a-4aea-af1d-1db1ad976ec0:415fb9ff-a378-42d0-a849-dae7daf49646'
NEXT_PUBLIC_BILLING_API_KEY='client-d3f38201-ed3a-4aea-af1d-1db1ad976ec0:415fb9ff-a378-42d0-a849-dae7daf49646'
NEXT_PUBLIC_BOOK_MEETING_URL='https://meetings-eu1.hubspot.com/oalaluf/meet-with-oren'
2 changes: 1 addition & 1 deletion .env.production
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ NEXT_PRIVATE_HUBSPOT_PAT=''
NEXT_PRIVATE_BLOG_SERVER_URL='https://blog-api.amplication.com'
NEXT_PRIVATE_PLUGIN_API_URL='https://plugin-api.amplication.com'
NEXT_PUBLIC_BILLING_API_KEY='client-d3f38201-ed3a-4aea-af1d-1db1ad976ec0:415fb9ff-a378-42d0-a849-dae7daf49646'

NEXT_PUBLIC_BOOK_MEETING_URL='https://meetings-eu1.hubspot.com/oalaluf/meet-with-oren'



14 changes: 14 additions & 0 deletions components/Common/Button/button-outline.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import Button from '../Button';

const OutlineButton = ({ className, ...props }) => {
return (
<Button
{...props}
className={`!h-[34px] mb-2 laptop:mr-2 w-full !font-normal !text-sm !max-w-[140px] text-black80 whitespace-nowrap border border-white hover:bg-light hover:text-dark-black-100 ${className}`}
/>
);
};

OutlineButton.propTypes = Button.propTypes;

export default OutlineButton;
14 changes: 14 additions & 0 deletions components/Common/Button/button-primary.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import Button from '../Button';

const PrimaryButton = ({ className, ...props }) => {
return (
<Button
{...props}
className={`!h-[34px] mb-2 laptop:mr-2 w-full !font-normal !text-sm !max-w-[140px] text-black80 whitespace-nowrap border border-purple-bright hover:bg-purple-bright-hover hover:border-purple-bright-hover ${className}`}
/>
);
};

PrimaryButton.propTypes = Button.propTypes;

export default PrimaryButton;
40 changes: 24 additions & 16 deletions components/Common/HubSpotForm/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ const HubSpotForm = ({
successMessage,
pageName,
formName,
includeConsent,
}) => {
const [formIsSending, setFormIsSending] = useState(false);
const [successMsg, setSuccessMsg] = useState('');
Expand Down Expand Up @@ -82,28 +83,30 @@ const HubSpotForm = ({
};

return (
<div className="w-full max-w-[599px] overflow-hidden relative p-10 max-laptop:p-6 pt-7 border rounded border-solid border-dark-black-70 bg-light-blue z-10 max-laptop:order-[-1] ">
<div className="w-full max-w-[599px] overflow-hidden relative p-10 max-laptop:p-6 pt-7 border rounded border-solid border-dark-black-70 bg-light-blue z-10 ">
<form
className="hubspot w-full flex flex-col justify-start items-stretch laptop:flex-row laptop:flex-wrap laptop:items-start laptop:justify-between"
method="POST"
onSubmit={(e) => submitSubscriptionForm(e)}
ref={form}
>
{children}
<div className="relative w-full !mt-2">
<label className="w-full mt-1 mb-0 flex align-items-center cursor-pointer">
<input
type="checkbox"
name="LEGAL_CONSENT.subscription_type_142787872"
className="shadow-none w-4 h-4 border rounded-sm border-solid border-white !bg-light-blue checked:!bg-purple-bright checked:!border-purple-bright focus:!bg-purple-bright"
required
/>
<span className="ml-2 font-normal text-[10px] leading-[13px]">
By submitting this form, I agree to Amplication&apos;s Terms of
Service and Privacy Policy.
</span>
</label>
</div>
{includeConsent && (
<div className="relative w-full !mt-2">
<label className="w-full mt-1 mb-0 flex align-items-center cursor-pointer">
<input
type="checkbox"
name="LEGAL_CONSENT.subscription_type_142787872"
className="shadow-none w-4 h-4 border rounded-sm border-solid border-white !bg-light-blue checked:!bg-purple-bright checked:!border-purple-bright focus:!bg-purple-bright"
required
/>
<span className="ml-2 font-normal text-[10px] leading-[13px]">
By submitting this form, I agree to Amplication&apos;s Terms of
Service and Privacy Policy.
</span>
</label>
</div>
)}
<div className="relative w-full !mt-6 !flex align-items-center">
<input
disabled={formIsSending ? 'disabled' : ''}
Expand All @@ -119,7 +122,7 @@ const HubSpotForm = ({
successMsg === ''
? 'hidden '
: '' +
'absolute left-0 right-0 top-0 bottom-0 text-center flex align-items-center justify-content-center flex-column bg-light-blue'
'p-8 absolute left-0 right-0 top-0 bottom-0 text-center flex flex-col items-center justify-content-center bg-light-blue'
}
>
<svg
Expand Down Expand Up @@ -159,13 +162,18 @@ const HubSpotForm = ({
);
};

HubSpotForm.defaultProps = {
includeConsent: true,
};

HubSpotForm.propTypes = {
children: PropTypes.any,
hubSpotPortalId: PropTypes.string,
hubSpotFormId: PropTypes.string,
successMessage: PropTypes.string,
pageName: PropTypes.string,
formName: PropTypes.string,
includeConsent: PropTypes.bool,
};

export default HubSpotForm;
91 changes: 91 additions & 0 deletions components/Common/PageHero/index.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
import PropTypes from 'prop-types';
import { useCallback } from 'react';
import * as analytics from '../../../lib/analytics';
import OutlineButton from '../../Common/Button/button-outline';
import PrimaryButton from '../../Common/Button/button-primary';

const PageHero = ({
title,
subTitle,
subText,
mainButton,
secondaryButton,
imageNode,
}) => {
const handleMainClick = useCallback(() => {
analytics.event({
action: mainButton.eventName,
params: mainButton.eventParams,
});
}, [mainButton.eventName, mainButton.eventParams]);

const handleSecondaryClick = useCallback(() => {
analytics.event({
action: secondaryButton.eventName,
params: secondaryButton.eventParams,
});
}, [secondaryButton.eventName, secondaryButton.eventParams]);
return (
<>
<div className="relative w-full flex flex-col laptop:flex-row items-center justify-between laptop:h-[calc(100vh-90px)] text-center min-h-[600px]">
<div className="laptop:!max-w-[50%]">
<div className="text-center laptop:text-left mt-12 laptop:mt-0 max-w-[500px] laptop:max-w-[none]">
<h1 className="text-2xl laptop:text-4xl desktop:text-5xl font-bold ">
{title}
</h1>
<h2 className="text-lg laptop:text-2xl desktop:text-3xl font-semibold">
{subTitle}
</h2>
<div className="text-sm laptop:text-base large:text-lg text-white !mt-3 !mb-4 !max-w-[710px]">
{subText}
</div>
</div>
<div className="flex items-center justify-center laptop:justify-start tablet:items-center mt-2 gap-4">
<PrimaryButton
text={mainButton.text}
backgroundColor="purpleBright"
hoverBackgroundColor="purpleBrightHover"
isLink={true}
onClick={handleMainClick}
href={mainButton.href}
delayLinkMs={300}
/>
<OutlineButton
text="Try Free"
isLink={true}
onClick={handleSecondaryClick}
href={'https://app.amplication.com/login'}
delayLinkMs={300}
/>
</div>
</div>
<div className="relative items-center middle:!max-w-[90%] w-full middle:min-h-[600px] flex medium:!max-w-[46%]">
<div className="absolute laptop:my-auto w-[50vw] -left-16 max-medium:w-full max-medium:left-0 max-medium:relative medium:flex align-items-center">
{imageNode}
</div>
</div>
</div>
</>
);
};

PageHero.propTypes = {
title: PropTypes.string,
subTitle: PropTypes.string,
subText: PropTypes.string,
mainButton: PropTypes.shape({
text: PropTypes.string,
href: PropTypes.string,
eventName: PropTypes.string,
eventParams: PropTypes.object,
}),
secondaryButton: PropTypes.shape({
text: PropTypes.string,
href: PropTypes.string,
eventName: PropTypes.string,
eventParams: PropTypes.object,
}),
imageNode: PropTypes.node,
};

export default PageHero;
161 changes: 161 additions & 0 deletions components/Common/TechSlider/index.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
import graphql from '../../../public/images/tech/graphql.svg';
import terraform from '../../../public/images/tech/terraform.svg';
import mongo from '../../../public/images/tech/mongo.svg';
import kafka from '../../../public/images/tech/kafka.svg';
import github from '../../../public/images/tech/github.svg';
import eslint from '../../../public/images/tech/eslint.svg';
import bitbucket from '../../../public/images/tech/bitbucket.svg';
import gitlab from '../../../public/images/tech/gitlab.svg';
import k8 from '../../../public/images/tech/k8.svg';
import mysql from '../../../public/images/tech/mysql.svg';
import nestjs from '../../../public/images/tech/nestjs.svg';
import node from '../../../public/images/tech/node.svg';
import postgresql from '../../../public/images/tech/postgresql.svg';
import prettier from '../../../public/images/tech/prettier.svg';
import prisma from '../../../public/images/tech/prisma.svg';
import redis from '../../../public/images/tech/redis.svg';
import rest from '../../../public/images/tech/rest.svg';
import docker from '../../../public/images/tech/docker.svg';

const items = [
{
image: graphql,
alt: 'GraphQL',
},
{
image: terraform,
alt: 'Terraform',
},
{
image: mongo,
alt: 'mongoDB',
},
{
image: kafka,
alt: 'Kafka',
},
{
image: github,
alt: 'GitHub',
},
{
image: eslint,
alt: 'ESlint',
},
{
image: bitbucket,
alt: 'Bitbucket',
},
{
image: gitlab,
alt: 'Gitlab',
},
{
image: k8,
alt: 'Kubernetes',
},
{
image: mysql,
alt: 'MySQL',
},
{
image: nestjs,
alt: 'NestJS',
},
{
image: node,
alt: 'Node.js',
},
{
image: postgresql,
alt: 'PostgreSQL',
},
{
image: prettier,
alt: 'Prettier',
},
{
image: prisma,
alt: 'Prisma',
},
{
image: redis,
alt: 'Redis',
},
{
image: rest,
alt: 'REST',
},
{
image: docker,
alt: 'Docker',
},
];

import Image from 'next/image';
import PropTypes from 'prop-types';

const TechSlider = ({ classes }) => {
return (
<>
<div className=" flex items-center justify-center">
<div className="w-[100%] h-20 overflow-hidden relative">
<div className="flex items-center h-20 justify-around absolute animate ">
{items.map((item, index) => {
return (
<div
key={index}
className="flex min-w-[156px] flex-row justify-center items-center whitespace-nowrap px-3 mx-2 "
>
<Image
width={156}
height={80}
src={item.image}
alt={item.alt}
/>
</div>
);
})}
{items.map((item, index) => {
return (
<div
key={index}
className="flex min-w-[156px] flex-row justify-center items-center whitespace-nowrap px-3 mx-2 "
>
<Image
width={156}
height={80}
src={item.image}
alt={item.alt}
/>
</div>
);
})}
</div>
</div>
</div>
{/* <div className="logotypes flex flex-wrap align-items-center animate">
{items.map((item, index) => {
return (
<div
key={index}
className="flex justify-content-center w-[25%] tablet:w-[20%] laptop:w-[14.2857%]"
>
<Image src={item.image} alt={item.alt} />
</div>
);
})}
</div> */}
</>
);
};

TechSlider.propTypes = {
classes: PropTypes.string,
};

TechSlider.defaultProps = {
classes: '',
};

export default TechSlider;
Loading

0 comments on commit 37a604e

Please sign in to comment.