added backend and front end folders
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"extends": "next/core-web-vitals"
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||||
|
|
||||||
|
# dependencies
|
||||||
|
/node_modules
|
||||||
|
/.pnp
|
||||||
|
.pnp.js
|
||||||
|
|
||||||
|
# testing
|
||||||
|
/coverage
|
||||||
|
|
||||||
|
# next.js
|
||||||
|
/.next/
|
||||||
|
/out/
|
||||||
|
|
||||||
|
# production
|
||||||
|
/build
|
||||||
|
|
||||||
|
# misc
|
||||||
|
.DS_Store
|
||||||
|
*.pem
|
||||||
|
|
||||||
|
# debug
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
|
||||||
|
# local env files
|
||||||
|
.env*.local
|
||||||
|
|
||||||
|
# vercel
|
||||||
|
.vercel
|
||||||
|
|
||||||
|
# typescript
|
||||||
|
*.tsbuildinfo
|
||||||
|
next-env.d.ts
|
||||||
|
|
||||||
|
# Local Netlify folder
|
||||||
|
.netlify
|
|
@ -0,0 +1 @@
|
||||||
|
v20.10.0
|
|
@ -0,0 +1,34 @@
|
||||||
|
This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
First, run the development server:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run dev
|
||||||
|
# or
|
||||||
|
yarn dev
|
||||||
|
# or
|
||||||
|
pnpm dev
|
||||||
|
```
|
||||||
|
|
||||||
|
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
|
||||||
|
|
||||||
|
You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
|
||||||
|
|
||||||
|
This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
|
||||||
|
|
||||||
|
## Learn More
|
||||||
|
|
||||||
|
To learn more about Next.js, take a look at the following resources:
|
||||||
|
|
||||||
|
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
|
||||||
|
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
|
||||||
|
|
||||||
|
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
|
||||||
|
|
||||||
|
## Deploy on Vercel
|
||||||
|
|
||||||
|
The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
|
||||||
|
|
||||||
|
Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
|
|
@ -0,0 +1,84 @@
|
||||||
|
import fs from "fs";
|
||||||
|
import matter from "gray-matter";
|
||||||
|
import BlogContent from "@/sections/BlogContent";
|
||||||
|
import Link from "next/link";
|
||||||
|
import Image from "next/image";
|
||||||
|
import xButton from "@/images/icon-x.svg";
|
||||||
|
import getPostMetadata from "@/utils/getPostMetaData";
|
||||||
|
import { headers } from "next/headers";
|
||||||
|
import React from "react";
|
||||||
|
|
||||||
|
const getPostContent = (slug: string) => {
|
||||||
|
const folder = "blogs/";
|
||||||
|
const file = `${folder}${slug}.md`;
|
||||||
|
const content = fs.readFileSync(file, "utf8");
|
||||||
|
const matterResult = matter(content);
|
||||||
|
return matterResult;
|
||||||
|
};
|
||||||
|
|
||||||
|
export async function generateMetadata({
|
||||||
|
params,
|
||||||
|
}: {
|
||||||
|
params: { slug: string };
|
||||||
|
}) {
|
||||||
|
const { slug } = params;
|
||||||
|
const headersList = headers();
|
||||||
|
const siteURL = headersList.get("host");
|
||||||
|
const post = getPostContent(slug);
|
||||||
|
|
||||||
|
return {
|
||||||
|
title: `${post.data.title}`,
|
||||||
|
description: `${post.data.subtitle}`,
|
||||||
|
alternates: {
|
||||||
|
canonical: `https://${siteURL}/blogs/${slug}`,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export const generateStaticParams = async () => {
|
||||||
|
const posts = getPostMetadata();
|
||||||
|
return posts.map((post) => ({
|
||||||
|
slug: post.slug,
|
||||||
|
}));
|
||||||
|
};
|
||||||
|
|
||||||
|
const PostPage = (props: any) => {
|
||||||
|
const slug = props.params.slug;
|
||||||
|
const post = getPostContent(slug);
|
||||||
|
const showModal = props.searchParams?.modal;
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{showModal ? (
|
||||||
|
<div className="relative bg-grey-950 w-full h-max z-40 py-24 px-6 flex justify-center pointer-events-none">
|
||||||
|
<div className="p-8 bg-gray-100 dark:bg-pink-900 w-full max-w-[700px] rounded-xl z-50 relative pointer-events-auto">
|
||||||
|
<div className="flex justify-between w-full">
|
||||||
|
<Link href="/blogs" className="text-pink-default">
|
||||||
|
← Back to Blogs
|
||||||
|
</Link>
|
||||||
|
<div className="flex justify-end pb-2 select-none">
|
||||||
|
<Link href="/blogs">
|
||||||
|
<Image
|
||||||
|
className="rounded-full p-1 hover:bg-gray-500"
|
||||||
|
src={xButton}
|
||||||
|
alt="close button"
|
||||||
|
/>
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="my-6 md:my-12 border-b border-gray-600 pb-2">
|
||||||
|
<BlogContent post={post} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
|
<div className="p-8 bg-grey-950">
|
||||||
|
<div className="max-w-5xl mx-auto mb-24 h-full w-full py-12 px-8 pt-32">
|
||||||
|
<BlogContent post={post} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default PostPage;
|
|
@ -0,0 +1,34 @@
|
||||||
|
import PageHeader from "@/sections/PageHeader";
|
||||||
|
import BlogCard from "@/components/BlogCard";
|
||||||
|
import getPostMetadata from "@/utils/getPostMetaData";
|
||||||
|
import React from "react";
|
||||||
|
|
||||||
|
export default function BlogsPage() {
|
||||||
|
const postMetadata = getPostMetadata();
|
||||||
|
|
||||||
|
const postPreviews = postMetadata
|
||||||
|
.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime())
|
||||||
|
.map((post) => <BlogCard key={post.slug} {...post} />);
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{/* Page sections */}
|
||||||
|
<PageHeader
|
||||||
|
title="Blogs"
|
||||||
|
subtitle={
|
||||||
|
<>
|
||||||
|
{" "}
|
||||||
|
<h2 className="text-black dark:text-white font-bold text-2xl lg:text-3xl text-center max-w-5xl mx-auto px-6">
|
||||||
|
Find case studies and information for how Sign365 is giving
|
||||||
|
businesses superpowers
|
||||||
|
</h2>
|
||||||
|
</>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
<div className="max-w-6xl mx-auto mb-24 h-full w-full py-12 px-8">
|
||||||
|
<div className="w-full flex items-start justify-center flex-row flex-wrap gap-x-8 gap-y-8 md:gap-12 text-black dark:text-white">
|
||||||
|
{postPreviews}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
import React from "react";
|
||||||
|
|
||||||
|
function layout({ children }: { children: React.ReactNode }) {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{children}
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default layout;
|
|
@ -0,0 +1,45 @@
|
||||||
|
"use server";
|
||||||
|
|
||||||
|
import { Product, Price } from "@/types";
|
||||||
|
import pb from "@/lib/pocketbase";
|
||||||
|
import { getAuthCookie } from "@/app/(auth)/actions";
|
||||||
|
|
||||||
|
export async function apiPrices() {
|
||||||
|
console.log('prices')
|
||||||
|
try {
|
||||||
|
const pocketbaseUrl = process.env.NEXT_PUBLIC_POCKETBASE_URL_STRING;
|
||||||
|
if (!pocketbaseUrl) {
|
||||||
|
throw Error('Connection Timeout');
|
||||||
|
}
|
||||||
|
const productRequest = await fetch(
|
||||||
|
`${pocketbaseUrl}/api/collections/product/records?filter=(active=true)`,
|
||||||
|
{
|
||||||
|
cache: 'no-cache',
|
||||||
|
method: "GET",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
);
|
||||||
|
const productResponse = await productRequest.json();
|
||||||
|
const unsortedProducts: Product[] = productResponse.items;
|
||||||
|
const prices = await pb.collection("price").getFullList<Price>();
|
||||||
|
for (const product of unsortedProducts) {
|
||||||
|
product.metadata.benefits = JSON.parse(product.metadata.benefits as any);
|
||||||
|
const pricesOfProduct = prices.filter(price => price.product_id === product.product_id);
|
||||||
|
for (const priceOfProduct of pricesOfProduct){
|
||||||
|
if (priceOfProduct.interval === "year"){
|
||||||
|
product.yearlyPrice = priceOfProduct;
|
||||||
|
} else {
|
||||||
|
product.monthlyPrice = priceOfProduct;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const sortedProducts = unsortedProducts.sort((a: Product, b: Product) => a.product_order - b.product_order)
|
||||||
|
return sortedProducts;
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,192 @@
|
||||||
|
"use client";
|
||||||
|
|
||||||
|
import React, { useEffect } from "react";
|
||||||
|
import PageHeader from "@/sections/PageHeader";
|
||||||
|
import { Price, Product, SourceModal } from "@/types";
|
||||||
|
import { Check } from "@styled-icons/entypo/Check";
|
||||||
|
import { ChangeEventHandler, useState } from "react";
|
||||||
|
import { apiPrices } from "./actions";
|
||||||
|
import Newsletter from "@/sections/Newsletter/Newsletter";
|
||||||
|
import { createCheckoutSession, isAuthenticated } from "@/app/(auth)/actions";
|
||||||
|
import { toast } from "react-toastify";
|
||||||
|
import { useRouter } from "next/navigation";
|
||||||
|
|
||||||
|
export default function PricingPage() {
|
||||||
|
const [isAnnual, setIsAnnual] = useState(false);
|
||||||
|
const [products, setProducts] = useState<Product[]>([]);
|
||||||
|
|
||||||
|
const handleToggle = () => {
|
||||||
|
setIsAnnual((prev) => !prev);
|
||||||
|
};
|
||||||
|
useEffect(() => {
|
||||||
|
(async () => {
|
||||||
|
const resposeProducts: Product[] = await apiPrices();
|
||||||
|
setProducts(resposeProducts);
|
||||||
|
})();
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<PageHeader
|
||||||
|
title="Pricing"
|
||||||
|
subtitle={
|
||||||
|
<>
|
||||||
|
{" "}
|
||||||
|
<h2 className="h3 text-white text-center max-w-6xl mx-auto px-6">
|
||||||
|
Select a subscription plan for your team or try advanced
|
||||||
|
functionality for free.
|
||||||
|
</h2>
|
||||||
|
</>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
<div className="w-full flex items-center justify-center mt-10">
|
||||||
|
<PriceToggle isAnnual={isAnnual} onChange={handleToggle} />
|
||||||
|
</div>
|
||||||
|
<div className="max-w-6xl mx-auto mb-24 h-full">
|
||||||
|
<div
|
||||||
|
className={`w-full flex gap-x-4 lg:justify-center gap-y-8 px-6 pt-12 overflow-x-scroll`}
|
||||||
|
>
|
||||||
|
{products.map((x, i) => (
|
||||||
|
<PriceCard key={i} product={x} isAnnual={isAnnual} />
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<Newsletter />
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function PriceCard({
|
||||||
|
product,
|
||||||
|
isAnnual,
|
||||||
|
}: {
|
||||||
|
product: Product;
|
||||||
|
isAnnual: boolean;
|
||||||
|
}) {
|
||||||
|
const router = useRouter();
|
||||||
|
const openSignUpModalOnPriceClick = (price: Price) => {
|
||||||
|
const signUpModal = document.getElementById("sign-up-modal");
|
||||||
|
if (!signUpModal) return;
|
||||||
|
signUpModal.setAttribute("price_id", price.price_id);
|
||||||
|
signUpModal.setAttribute("name", SourceModal.SignUpViaPurchase);
|
||||||
|
signUpModal.click();
|
||||||
|
};
|
||||||
|
const generateCheckoutPage = async (price: Price) => {
|
||||||
|
try {
|
||||||
|
const checkoutSessionResponse = await createCheckoutSession(
|
||||||
|
price.price_id
|
||||||
|
);
|
||||||
|
router.push(checkoutSessionResponse.url);
|
||||||
|
} catch (error) {
|
||||||
|
if (error instanceof Error) {
|
||||||
|
toast.error(error.message, {
|
||||||
|
position: "bottom-left",
|
||||||
|
autoClose: 5000,
|
||||||
|
hideProgressBar: false,
|
||||||
|
closeOnClick: true,
|
||||||
|
pauseOnHover: true,
|
||||||
|
draggable: true,
|
||||||
|
progress: undefined,
|
||||||
|
theme: "colored",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const submitForm = async (price: Price) => {
|
||||||
|
const userIsAuthenticated = await isAuthenticated();
|
||||||
|
if (userIsAuthenticated) {
|
||||||
|
await generateCheckoutPage(price);
|
||||||
|
} else {
|
||||||
|
openSignUpModalOnPriceClick(price);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return (
|
||||||
|
<div className="relative w-64 sm:w-80 bg-gray-100 dark:bg-gray-800 p-6">
|
||||||
|
<div className="flex flex-col h-full">
|
||||||
|
<div className="mb-12 relative">
|
||||||
|
{false && (
|
||||||
|
<p className="absolute top-[-10px] left-[50%] -translate-x-1/2 font-architects-daughter text-xl text-pink-default text-center">
|
||||||
|
Popular
|
||||||
|
</p>
|
||||||
|
)}
|
||||||
|
|
||||||
|
<h1 className="text-center text-3xl font-inter font-bold pt-6 text-black dark:text-white">
|
||||||
|
{product.name}
|
||||||
|
</h1>
|
||||||
|
<h3 className="text-center pt-4 text-black dark:text-white">
|
||||||
|
{product.description}
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
<div className="pb-12">
|
||||||
|
<ul className="flex flex-col gap-y-3 mx-12">
|
||||||
|
{product.metadata?.benefits?.map((x, i) => (
|
||||||
|
<li key={i} className="flex items-center gap-x-4 flex-nowrap">
|
||||||
|
<Check className=" self-start" color="#FF0DCA" size={24} />
|
||||||
|
|
||||||
|
<p className="w-40 text-black dark:text-white overflow-clip text-ellipsis">
|
||||||
|
{x}
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div className="flex flex-col mx-auto mt-auto">
|
||||||
|
<div className="flex flex-row mx-auto gap-x-4 justify-center items-center mb-2">
|
||||||
|
<h1 className="h2 text-black dark:text-white">
|
||||||
|
$
|
||||||
|
{isAnnual
|
||||||
|
? product.yearlyPrice.unit_amount / 100
|
||||||
|
: product.monthlyPrice.unit_amount / 100}
|
||||||
|
</h1>
|
||||||
|
<p className="w-16 leading-5 text-sm text-black dark:text-white">
|
||||||
|
per user per {isAnnual ? "year" : "month"}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<button
|
||||||
|
onClick={() =>
|
||||||
|
submitForm(isAnnual ? product.yearlyPrice : product.monthlyPrice)
|
||||||
|
}
|
||||||
|
className=" mx-auto flex text-sm font-semibold py-2 px-20 m-2 text-white bg-gradient-to-r from-pink-default to-purple-default rounded-full mb-4 cursor-pointer group-hover:animate-bounce"
|
||||||
|
>
|
||||||
|
Try it!
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function PriceToggle({
|
||||||
|
isAnnual,
|
||||||
|
onChange,
|
||||||
|
}: {
|
||||||
|
isAnnual: boolean;
|
||||||
|
onChange?: ChangeEventHandler<HTMLInputElement>;
|
||||||
|
}) {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<label className="themeSwitcherTwo shadow-card relative inline-flex cursor-pointer select-none items-center justify-center rounded-sm dark:bg-gray-550 p-1">
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
className="sr-only"
|
||||||
|
checked={isAnnual}
|
||||||
|
onChange={onChange}
|
||||||
|
/>
|
||||||
|
<span
|
||||||
|
className={`flex items-center space-x-[6px] rounded py-2 px-[18px] text-sm font-medium ${
|
||||||
|
!isAnnual ? "text-white bg-pink-550" : "text-body-color"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
Monthly Billing
|
||||||
|
</span>
|
||||||
|
<span
|
||||||
|
className={`flex items-center space-x-[6px] rounded py-2 px-[18px] text-sm font-medium ${
|
||||||
|
isAnnual ? "text-white bg-pink-550" : "text-body-color"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
Yearly Billing
|
||||||
|
</span>
|
||||||
|
</label>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
"use client";
|
||||||
|
import HeroHome from "@/sections/HeroHome";
|
||||||
|
import FeaturesBlocks from "@/sections/FeaturesBlocks";
|
||||||
|
import FeaturesZigZag from "@/sections/FeaturesZigzag";
|
||||||
|
import Newsletter from "@/sections/Newsletter/Newsletter";
|
||||||
|
import HeroVideo from "@/sections/HeroVideo";
|
||||||
|
import Aos from "aos";
|
||||||
|
import "aos/dist/aos.css";
|
||||||
|
import { useEffect } from "react";
|
||||||
|
import React from "react";
|
||||||
|
import { SourceModal } from "@/types";
|
||||||
|
|
||||||
|
export default function Home() {
|
||||||
|
useEffect(() => {
|
||||||
|
Aos.init({
|
||||||
|
delay: 50,
|
||||||
|
easing: "ease-out-cubic",
|
||||||
|
once: true,
|
||||||
|
offset: 50,
|
||||||
|
});
|
||||||
|
}, []);
|
||||||
|
useEffect(() => {
|
||||||
|
document.getElementById("sign-up-modal")?.setAttribute("name", SourceModal.SignUp);
|
||||||
|
document.getElementById("sign-up-modal")?.removeAttribute("price_id");
|
||||||
|
document.getElementById("sign-up-modal")?.click();
|
||||||
|
}, []);
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{/* Page sections */}
|
||||||
|
<HeroHome />
|
||||||
|
<HeroVideo />
|
||||||
|
<FeaturesBlocks />
|
||||||
|
<FeaturesZigZag />
|
||||||
|
<Newsletter />
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
import React from "react";
|
||||||
|
import PageHeader from "@/sections/PageHeader";
|
||||||
|
import { cookies } from "next/headers";
|
||||||
|
import { getUserFromCookie } from "@/lib/auth";
|
||||||
|
import { User } from "@/types";
|
||||||
|
import AccountContent from "@/sections/AccountContent";
|
||||||
|
import { redirect } from "next/navigation";
|
||||||
|
import pb from "@/lib/pocketbase";
|
||||||
|
|
||||||
|
export default async function AccountPage() {
|
||||||
|
const user = (await getUserFromCookie(cookies())) as User;
|
||||||
|
const cookie = cookies().get("pb_auth");
|
||||||
|
//server side
|
||||||
|
pb.authStore.loadFromCookie(cookie?.value || "");
|
||||||
|
!pb.authStore.isValid && redirect("/");
|
||||||
|
return (
|
||||||
|
user && (
|
||||||
|
<>
|
||||||
|
<PageHeader title="Account" subtitle={<></>} />
|
||||||
|
|
||||||
|
<AccountContent user={user} />
|
||||||
|
</>
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
|
@ -0,0 +1,254 @@
|
||||||
|
"use server";
|
||||||
|
|
||||||
|
import { redirect } from "next/navigation";
|
||||||
|
import pb from "@/lib/pocketbase";
|
||||||
|
import { cookies } from "next/headers";
|
||||||
|
import CryptoJS from 'crypto-js';
|
||||||
|
|
||||||
|
import { CheckoutSession, SignUpForm, SourceModal, Subscription, SubscriptionSession, User } from "@/types";
|
||||||
|
import { apiPrices } from "../(admin)/pricing/actions";
|
||||||
|
|
||||||
|
export async function mailchimp(formData: {
|
||||||
|
email: string;
|
||||||
|
first_name: string;
|
||||||
|
last_name: string;
|
||||||
|
phone_number?: string;
|
||||||
|
company_size: string;
|
||||||
|
source?: SourceModal;
|
||||||
|
}) {
|
||||||
|
const email = formData.email;
|
||||||
|
const mailchimpBaseUrl = process.env.NEXT_PUBLIC_MAILCHIMP_BASE_URL;
|
||||||
|
const mailchimpApiKey = process.env.NEXT_PUBLIC_MAILCHIMP_BASE64_API_KEY;
|
||||||
|
const mailchimpList = process.env.NEXT_PUBLIC_MAILCHIMP_LIST_ID;
|
||||||
|
if (!mailchimpApiKey) return;
|
||||||
|
try {
|
||||||
|
const subscriberHash = CryptoJS.MD5(email.toLocaleLowerCase());
|
||||||
|
const mailchimpResponse = await fetch(`${mailchimpBaseUrl}/3.0/lists/${mailchimpList}/members/${subscriberHash}`,
|
||||||
|
{
|
||||||
|
method: 'PUT',
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
Authorization: mailchimpApiKey,
|
||||||
|
},
|
||||||
|
body: JSON.stringify(
|
||||||
|
{
|
||||||
|
"email_address": email,
|
||||||
|
status: "subscribed",
|
||||||
|
merge_fields: {
|
||||||
|
EMAIL: formData.email,
|
||||||
|
FNAME: formData.first_name,
|
||||||
|
LNAME: formData.last_name,
|
||||||
|
PHONE: !formData.phone_number ? '' : formData.phone_number,
|
||||||
|
CSIZE: formData.company_size,
|
||||||
|
SOURCE: formData.source
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
})
|
||||||
|
if (mailchimpResponse.status !== 200) {
|
||||||
|
throw new Error("couldn't complete the request");
|
||||||
|
}
|
||||||
|
return mailchimpResponse.json();
|
||||||
|
} catch (err) {
|
||||||
|
throw new Error("couldn't complete the request");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function signup(formData: SignUpForm) {
|
||||||
|
const email = formData.email;
|
||||||
|
const password = formData.password;
|
||||||
|
const organisation = formData.organisation;
|
||||||
|
const pocketbaseUrl = process.env.NEXT_PUBLIC_POCKETBASE_URL_STRING as string;
|
||||||
|
const adminToken = process.env.NEXT_PUBLIC_POCKETBASE_ADMIN_TOKEN as string;
|
||||||
|
try {
|
||||||
|
const orgRes = await fetch(
|
||||||
|
`${pocketbaseUrl}/api/collections/organisation/records`,
|
||||||
|
{
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
Authorization: adminToken,
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
name: organisation,
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
console.log("orgRes.status: ", orgRes.status);
|
||||||
|
if (orgRes.status !== 200) {
|
||||||
|
throw new Error("Failed to create organisation");
|
||||||
|
}
|
||||||
|
const orgData = await orgRes.json();
|
||||||
|
console.log(orgData);
|
||||||
|
const userRes = await fetch(
|
||||||
|
`${pocketbaseUrl}/api/collections/user/records`,
|
||||||
|
{
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
Authorization: adminToken,
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
firstName: formData.first_name,
|
||||||
|
lastName: formData.last_name,
|
||||||
|
displayName: formData.first_name + ' ' + formData.last_name,
|
||||||
|
email: email,
|
||||||
|
password: password,
|
||||||
|
passwordConfirm: password,
|
||||||
|
organisation: orgData?.id,
|
||||||
|
role: "Admin",
|
||||||
|
lastSeen: new Date(),
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
console.log("userRes.status: ", userRes.status);
|
||||||
|
if (userRes.status !== 200) {
|
||||||
|
console.log(userRes);
|
||||||
|
throw new Error("Failed to create user");
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
if (err instanceof Error) {
|
||||||
|
throw new Error(err.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function login(formData: { email: string; password: string }) {
|
||||||
|
console.log('login')
|
||||||
|
const email = formData.email as string;
|
||||||
|
const password = formData.password as string;
|
||||||
|
try {
|
||||||
|
const { token, record: data } = await pb
|
||||||
|
.collection("user")
|
||||||
|
.authWithPassword(email, password);
|
||||||
|
if (pb.authStore.isValid) {
|
||||||
|
const cookie = pb.authStore.exportToCookie();
|
||||||
|
|
||||||
|
cookies().set("pb_auth", cookie, {
|
||||||
|
secure: true,
|
||||||
|
path: "/",
|
||||||
|
sameSite: "strict",
|
||||||
|
httpOnly: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return { success: true, error: "Failed to log in", token: token, data: data };
|
||||||
|
} catch (error) {
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function getAuthCookie() {
|
||||||
|
try {
|
||||||
|
const cookie = cookies().get('pb_auth');
|
||||||
|
pb.authStore.loadFromCookie(cookie?.value || '');
|
||||||
|
return pb.authStore.token;
|
||||||
|
} catch (error) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function isAuthenticated() {
|
||||||
|
try {
|
||||||
|
const cookie = cookies().get('pb_auth');
|
||||||
|
if(!cookie) return false;
|
||||||
|
pb.authStore.loadFromCookie(cookie?.value || '');
|
||||||
|
return pb.authStore.isValid || false;
|
||||||
|
} catch (error) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function logout() {
|
||||||
|
cookies().delete("pb_auth");
|
||||||
|
redirect('/blogs');
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function createCheckoutSession(price_id: string) {
|
||||||
|
const pocketbaseUrl = process.env.NEXT_PUBLIC_POCKETBASE_URL_STRING;
|
||||||
|
if (!pocketbaseUrl) {
|
||||||
|
throw Error('Connection Timeout');
|
||||||
|
}
|
||||||
|
if (!price_id) {
|
||||||
|
throw Error('There was an error during the payment processing');
|
||||||
|
}
|
||||||
|
const token = await getAuthCookie();
|
||||||
|
if (!token) {
|
||||||
|
throw Error('Could not authenticate');
|
||||||
|
}
|
||||||
|
console.log('token', token);
|
||||||
|
console.log('url ', `${pocketbaseUrl}/create-checkout-session`);
|
||||||
|
try{
|
||||||
|
const createCheckoutSessionResponse = await fetch(
|
||||||
|
`${pocketbaseUrl}/create-checkout-session`,
|
||||||
|
{
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
Authorization: token,
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
price: {
|
||||||
|
id: price_id,
|
||||||
|
type: "recurring"
|
||||||
|
},
|
||||||
|
quantity: 1
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
console.log('createCheckoutSessionResponse.status', createCheckoutSessionResponse.status)
|
||||||
|
if (createCheckoutSessionResponse.status !== 200) {
|
||||||
|
throw new Error("Failed to process Request");
|
||||||
|
}
|
||||||
|
const createCheckoutSessionData: CheckoutSession = await createCheckoutSessionResponse.json();
|
||||||
|
return createCheckoutSessionData;
|
||||||
|
} catch (error) {
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function getSubscriptions() {
|
||||||
|
const cookie = cookies().get('pb_auth');
|
||||||
|
pb.authStore.loadFromCookie(cookie?.value || '');
|
||||||
|
const userId = (pb.authStore.model as User).id
|
||||||
|
const subscriptions = await pb.collection("subscription").getFullList<Subscription>({filter: `user_id="${userId}" && status="active"`});
|
||||||
|
if (subscriptions.length === 0){
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
const products = await apiPrices();
|
||||||
|
const subscriptionWithProducts = subscriptions.map(subscription => {return {...subscription, product: products.find(product => product?.yearlyPrice?.price_id === subscription.price_id || product?.monthlyPrice?.price_id === subscription.price_id)}}) as Subscription[]
|
||||||
|
return subscriptionWithProducts;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function createManagementSubscriptionSession() {
|
||||||
|
const pocketbaseUrl = process.env.NEXT_PUBLIC_POCKETBASE_URL_STRING;
|
||||||
|
if (!pocketbaseUrl) {
|
||||||
|
throw Error('Connection Timeout');
|
||||||
|
}
|
||||||
|
const token = await getAuthCookie();
|
||||||
|
if (!token) {
|
||||||
|
throw Error('Could not authenticate');
|
||||||
|
}
|
||||||
|
console.log('token', token);
|
||||||
|
console.log('url ', `${pocketbaseUrl}/create-checkout-session`);
|
||||||
|
try{
|
||||||
|
const createManagementSessionResponse = await fetch(
|
||||||
|
`${pocketbaseUrl}/create-portal-link`,
|
||||||
|
{
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
Authorization: token,
|
||||||
|
},
|
||||||
|
body: JSON.stringify({}),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
console.log('createCheckoutSessionResponse.status', createManagementSessionResponse.status)
|
||||||
|
if (createManagementSessionResponse.status !== 200) {
|
||||||
|
throw new Error("Failed to process Request");
|
||||||
|
}
|
||||||
|
const createManagementSessionData: SubscriptionSession = await createManagementSessionResponse.json();
|
||||||
|
return createManagementSessionData;
|
||||||
|
} catch (error) {
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 15 KiB |
|
@ -0,0 +1,29 @@
|
||||||
|
|
||||||
|
|
||||||
|
@tailwind base;
|
||||||
|
@tailwind components;
|
||||||
|
@tailwind utilities;
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--foreground-rgb: 0, 0, 0;
|
||||||
|
--background-start-rgb: 214, 219, 220;
|
||||||
|
--background-end-rgb: 255, 255, 255;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
:root {
|
||||||
|
--foreground-rgb: 255, 255, 255;
|
||||||
|
--background-start-rgb: 0, 0, 0;
|
||||||
|
--background-end-rgb: 0, 0, 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
color: rgb(var(--foreground-rgb));
|
||||||
|
background: linear-gradient(
|
||||||
|
to bottom,
|
||||||
|
transparent,
|
||||||
|
rgb(var(--background-end-rgb))
|
||||||
|
)
|
||||||
|
rgb(var(--background-start-rgb));
|
||||||
|
}
|
|
@ -0,0 +1,77 @@
|
||||||
|
import "./globals.css";
|
||||||
|
import type { Metadata } from "next";
|
||||||
|
import "@/styles/style.css";
|
||||||
|
import { Arimo, Raleway } from "next/font/google";
|
||||||
|
import { ToastContainer, toast } from "react-toastify";
|
||||||
|
import "react-toastify/dist/ReactToastify.css";
|
||||||
|
import Footer from "@/components/Footer";
|
||||||
|
import Header from "@/components/Header";
|
||||||
|
import { cookies } from "next/headers";
|
||||||
|
import { isAuthenticated } from "@/lib/auth";
|
||||||
|
import Script from "next/script";
|
||||||
|
import React from "react";
|
||||||
|
import { PHProvider } from "./providers";
|
||||||
|
import GoogleAnalytics from "@/components/GoogleAnalytics";
|
||||||
|
import PrelineScript from "@/components/PrelineScript";
|
||||||
|
|
||||||
|
const raleway = Raleway({
|
||||||
|
variable: "--display-font",
|
||||||
|
subsets: ["latin"],
|
||||||
|
});
|
||||||
|
|
||||||
|
const arimo = Arimo({
|
||||||
|
variable: "--body-font",
|
||||||
|
subsets: ["latin"],
|
||||||
|
});
|
||||||
|
|
||||||
|
export const metadata: Metadata = {
|
||||||
|
title: "Sign365",
|
||||||
|
description:
|
||||||
|
"Sign365 is your window into freedom from paper work. Get the paper work to do itself",
|
||||||
|
};
|
||||||
|
|
||||||
|
export default async function RootLayout({
|
||||||
|
children,
|
||||||
|
}: {
|
||||||
|
children: React.ReactNode;
|
||||||
|
}) {
|
||||||
|
const isUserLoggedIn = await isAuthenticated(cookies());
|
||||||
|
return (
|
||||||
|
<html lang="en">
|
||||||
|
<PHProvider>
|
||||||
|
<body className={`${arimo.className} bg-white dark:bg-black`}>
|
||||||
|
{process.env.NEXT_PUBLIC_GOOGLE_ANALYTICS ? (
|
||||||
|
<GoogleAnalytics ga_id={process.env.NEXT_PUBLIC_GOOGLE_ANALYTICS} />
|
||||||
|
) : null}
|
||||||
|
<main className="flex flex-col min-h-screen overflow-hidden h-full">
|
||||||
|
{/* Page content */}
|
||||||
|
<div className="grow h-full">
|
||||||
|
{/* Site header */}
|
||||||
|
<div className="h-full md:h-auto ">
|
||||||
|
<Header isUserLoggedIn={isUserLoggedIn} />
|
||||||
|
|
||||||
|
{children}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
<ToastContainer
|
||||||
|
position="bottom-left"
|
||||||
|
autoClose={5000}
|
||||||
|
hideProgressBar={false}
|
||||||
|
newestOnTop={false}
|
||||||
|
closeOnClick
|
||||||
|
rtl={false}
|
||||||
|
pauseOnFocusLoss
|
||||||
|
draggable
|
||||||
|
pauseOnHover
|
||||||
|
theme="colored"
|
||||||
|
/>
|
||||||
|
|
||||||
|
{/* Site footer */}
|
||||||
|
<Footer />
|
||||||
|
</body>
|
||||||
|
<PrelineScript />
|
||||||
|
</PHProvider>
|
||||||
|
</html>
|
||||||
|
);
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
"use client";
|
||||||
|
import HeroHome from "@/sections/HeroHome";
|
||||||
|
import FeaturesBlocks from "@/sections/FeaturesBlocks";
|
||||||
|
import FeaturesZigZag from "@/sections/FeaturesZigzag";
|
||||||
|
import Newsletter from "@/sections/Newsletter/Newsletter";
|
||||||
|
import HeroVideo from "@/sections/HeroVideo";
|
||||||
|
import Aos from "aos";
|
||||||
|
import "aos/dist/aos.css";
|
||||||
|
import { useEffect } from "react";
|
||||||
|
import React from "react";
|
||||||
|
import { FrequentlyAsked } from "@/sections/FrequentlyAsked";
|
||||||
|
import { Testimonial } from "@/sections/Testimonial";
|
||||||
|
|
||||||
|
export default function Home() {
|
||||||
|
useEffect(() => {
|
||||||
|
Aos.init({
|
||||||
|
delay: 50,
|
||||||
|
easing: "ease-out-cubic",
|
||||||
|
once: true,
|
||||||
|
offset: 50,
|
||||||
|
});
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{/* Page sections */}
|
||||||
|
<HeroHome />
|
||||||
|
<HeroVideo />
|
||||||
|
<FeaturesBlocks />
|
||||||
|
<FeaturesZigZag />
|
||||||
|
<FrequentlyAsked />
|
||||||
|
<Testimonial />
|
||||||
|
<Newsletter />
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
'use client'
|
||||||
|
import posthog from 'posthog-js'
|
||||||
|
import { PostHogProvider } from 'posthog-js/react'
|
||||||
|
|
||||||
|
if (typeof window !== 'undefined') {
|
||||||
|
posthog.init(process.env.NEXT_PUBLIC_POSTHOG_KEY, {
|
||||||
|
api_host: process.env.NEXT_PUBLIC_POSTHOG_HOST
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function PHProvider({ children }) {
|
||||||
|
return <PostHogProvider client={posthog}>{children}</PostHogProvider>
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
---
|
||||||
|
title: "A Founder Message To Group Training Organisations"
|
||||||
|
subtitle: "Are you tired of the endless paperwork and manual processes that come with managing documents in your organization? It's time to revolutionize the way we handle these tasks and focus on what truly matters – growing your business and nurturing your apprentices."
|
||||||
|
date: "2024-02-3"
|
||||||
|
image: "/images/a-founders-message-to-group-training-organisations-0.png"
|
||||||
|
---
|
||||||
|
|
||||||
|
Are you tired of the endless paperwork and manual processes that come with managing documents in your organization? It's time to revolutionize the way we handle these tasks and focus on what truly matters – growing your business and nurturing your apprentices.
|
||||||
|
|
||||||
|
<div align="left">
|
||||||
|
<a href="https://youtu.be/mptgQKLQxFc">
|
||||||
|
<img src="https://img.youtube.com/vi/mptgQKLQxFc/0.jpg" style="width:75%;margin:0 auto;">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
At Sign 365, we're on a mission to transform the document management landscape. We understand the struggles that Group Training Organizations (GTOs) across Australia face daily. The busy work of collecting apprentice information, scanning documents, and dealing with cumbersome contract signing processes can be overwhelming. That's why we're here to streamline these tasks and give you back your valuable time.
|
||||||
|
|
||||||
|
Imagine a world where supervisors can easily gather data on-site without the hassle of offline issues or complicated software. Where admin staff no longer spend countless hours inputting data into systems like Workforce One or various CRM and payroll systems. That's the world Sign 365 is creating.
|
||||||
|
|
||||||
|
# Built for Group Training Orginisations
|
||||||
|
|
||||||
|
Our first client, a medium-sized GTO with about 300 apprentices, faced these exact challenges. They needed a solution that was not only effective but simple for their supervisors to use. By working closely with them, we were able to automate their paper flow and reduce the time spent on manual data entry by an astounding 80%. That's turning 20 hours of work into just 4 hours – a true game-changer.
|
||||||
|
|
||||||
|
Sign 365 isn't just an app; it's a powerful software designed to automate your systems, ensuring accuracy and eliminating the need for double-handling data. With our solution, information entered by supervisors on-site will seamlessly integrate into your existing systems, such as Workforce One or Xero.
|
||||||
|
|
||||||
|
# Upgraded Workflows
|
||||||
|
|
||||||
|
If you're interested in upgrading your workflow and freeing up time to focus on what's important, Sign 365 is the answer. Contact us at [hello@sign365.com.au](mailto:hello@sign365.com.au) to discuss how we can help you automate your paperwork and create a more efficient workflow for your organization. to discuss how we can help you automate your paperwork and create a more efficient workflow for your organization.
|
||||||
|
|
||||||
|
Let's work smarter, not harder, and let Sign 365 take the burden of paperwork off your shoulders. Reach out today and take the first step towards a more streamlined and productive future. Cheers to less paperwork and more progress!
|
|
@ -0,0 +1,42 @@
|
||||||
|
---
|
||||||
|
title: "Adobe Fill and Sign vs Docusign"
|
||||||
|
subtitle: "Adobe Fill and Sign vs Docusign comparison"
|
||||||
|
date: "2021-08-14"
|
||||||
|
image: "/images/blog/adobedocusign.png"
|
||||||
|
---
|
||||||
|
|
||||||
|
In the digital age, eSignature solutions have become a necessity for businesses of all sizes. Two of the leading players in this field are Adobe Fill And Sign and DocuSign. This blog post will provide a comprehensive comparison of these two platforms, focusing on their features, document generation and management, security and compliance, integrations, and customer support.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
Adobe Fill And Sign is a simple, straightforward tool that enables users to fill, sign, and send forms from their desktop or mobile device. It supports PDF, Word, and Excel formats, and allows users to create their own signature.
|
||||||
|
|
||||||
|
On the other hand, DocuSign offers a more robust set of features. In addition to eSignature capabilities, it provides advanced form tooling, which is particularly beneficial for small businesses. Users can create custom fields, set up automatic reminders, and track document status in real-time.
|
||||||
|
|
||||||
|
## Document Generation and Management Features
|
||||||
|
|
||||||
|
Adobe Fill And Sign allows users to upload documents from their device or cloud storage, fill them out, and sign them. However, it lacks advanced document management features.
|
||||||
|
|
||||||
|
DocuSign, in contrast, offers a comprehensive document management system. Users can generate, send, and manage documents from one central location. They can also set up workflows to automate the signing process, saving time and reducing errors.
|
||||||
|
|
||||||
|
## Security and Compliance
|
||||||
|
|
||||||
|
Both Adobe Fill And Sign and DocuSign prioritize security. They use encryption to protect documents and comply with global eSignature laws. However, DocuSign goes a step further by offering advanced security features like secure fields, audit trails, and multi-factor authentication.
|
||||||
|
|
||||||
|
## Integrations
|
||||||
|
|
||||||
|
Adobe Fill And Sign integrates with Adobe's own suite of products. DocuSign, however, offers a wider range of integrations, including popular business tools like Salesforce, Google Drive, and Microsoft Office 365. This makes it easier for small businesses to streamline their workflows and improve efficiency.
|
||||||
|
|
||||||
|
## Customer Support
|
||||||
|
|
||||||
|
Both platforms offer customer support, but DocuSign's support is more comprehensive. It includes 24/7 phone and email support, a knowledge base, and community forums.
|
||||||
|
|
||||||
|
## So Which eSignature Solution is Right for You?
|
||||||
|
|
||||||
|
While both Adobe Fill And Sign and DocuSign offer valuable eSignature solutions, DocuSign stands out for its advanced features, comprehensive document management, robust security, and wide range of integrations. It's particularly beneficial for small businesses that need better form tooling.
|
||||||
|
|
||||||
|
## Ready to Switch from Adobe Fill And Sign to DocuSign?
|
||||||
|
|
||||||
|
If you're a small business looking to streamline your document management and improve efficiency, DocuSign is the clear choice. Its advanced features and integrations make it a powerful tool for businesses of all sizes.
|
||||||
|
|
||||||
|
In conclusion, while Adobe Fill And Sign is a solid eSignature solution, DocuSign offers more comprehensive features that can help small businesses thrive in the digital age.
|
|
@ -0,0 +1,36 @@
|
||||||
|
---
|
||||||
|
title: "Adobe Fill and Sign vs Sign Now"
|
||||||
|
subtitle: "I used GPT-3 to generate poetry and other creative content."
|
||||||
|
date: "2021-08-27"
|
||||||
|
image: "/images/blog/adobesignnow.png"
|
||||||
|
---
|
||||||
|
|
||||||
|
When it comes to digital document management and eSignature solutions, Adobe Fill And Sign and signNow are two of the leading contenders. But which one is the best fit for your small business? Let's delve into a detailed comparison to help you make an informed decision.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
Adobe Fill And Sign offers a basic set of features, including form filling and signing, sending for signature, and tracking. However, signNow goes beyond the basics, providing advanced features like bulk sending, document groups, and conditional fields. These features make signNow a more robust and flexible solution, particularly for small businesses that need better form tooling.
|
||||||
|
|
||||||
|
## Document Generation and Management Features
|
||||||
|
|
||||||
|
Both Adobe Fill And Sign and signNow offer document generation and management features. However, signNow stands out with its superior form tooling capabilities. It allows users to create complex forms with ease, thanks to its intuitive and user-friendly interface. signNow's document management system is also more comprehensive, enabling users to organize, track, and store documents efficiently.
|
||||||
|
|
||||||
|
## Security and Compliance
|
||||||
|
|
||||||
|
Security is paramount in any eSignature solution. Both Adobe Fill And Sign and signNow offer robust security measures, including SSL encryption and compliance with global eSignature laws. However, signNow takes security a step further with its SOC 2 Type II certification, ensuring your documents are secure and your data is protected.
|
||||||
|
|
||||||
|
## Integrations
|
||||||
|
|
||||||
|
While Adobe Fill And Sign integrates with Adobe's suite of products, signNow offers a broader range of integrations. It seamlessly integrates with popular business tools like Salesforce, Google Suite, and Office 365, making it a more versatile solution for small businesses.
|
||||||
|
|
||||||
|
## Customer Support
|
||||||
|
|
||||||
|
Customer support is another critical factor to consider. While Adobe Fill And Sign offers basic support options, signNow offers 24/7 customer support, ensuring you get the help you need, whenever you need it.
|
||||||
|
|
||||||
|
## So Which eSignature Solution is Right for You?
|
||||||
|
|
||||||
|
When it comes to choosing the right eSignature solution for your small business, it's clear that signNow offers more advanced features, better form tooling, superior security, more integrations, and better customer support. It's a comprehensive solution designed to meet the unique needs of small businesses.
|
||||||
|
|
||||||
|
## Ready to Switch from Adobe Fill And Sign to signNow?
|
||||||
|
|
||||||
|
If you're ready to take your document management to the next level, it's time to switch to signNow. With its robust features, superior form tooling, and excellent customer support, signNow is the ideal eSignature solution for small businesses. Make the switch today and experience the signNow difference for yourself.
|
|
@ -0,0 +1,42 @@
|
||||||
|
---
|
||||||
|
title: "Creating Custom Forms: A Step-by-Step Guide"
|
||||||
|
subtitle: "Creating custom forms for your day-to-day occupation in different industries particularly in businesses can be a valuable skill, yet many businesses struggle to find the right software to develop and use these forms effectively. In this blog post, we are going to dive into a powerful tool called Wondershare PDFelement that allows you to instantly create and customize your own PDF forms. Follow along as we break down the process step-by-step."
|
||||||
|
date: "2024-01-16"
|
||||||
|
image: "/images/creating-custom-forms-a-step-by-step-guide-0.png"
|
||||||
|
---
|
||||||
|
|
||||||
|
Creating custom forms for your day-to-day occupation in different industries particularly in businesses can be a valuable skill, yet many businesses struggle to find the right software to develop and use these forms effectively. In this blog post, we are going to dive into a powerful tool called Wondershare PDFelement that allows you to instantly create and customize your own PDF forms. Follow along as we break down the process step-by-step.
|
||||||
|
|
||||||
|
# Step 1: Downloading Wondershare PDFelement
|
||||||
|
|
||||||
|
To begin, search for "Wondershare PDFelement" on your preferred search engine. Visit the official website and click on the "Free Download" button. The software is available for both Mac and Windows systems. Once the download is complete, follow the prompts to install PDFelement on your computer.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
# Step 2: Opening the PDF in PDFelement
|
||||||
|
|
||||||
|
Now that you successfully download the software. You can proceed to Open PDFelement, click on "Open a PDF," and locate the desired PDF you wanted to customize. Open the PDF in PDFelement and make any necessary adjustments to the layout or formatting.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
# Step 3: Adding Form Elements
|
||||||
|
|
||||||
|
To make your PDF form fillable, you need to add form elements such as text fields and checkboxes. In PDFelement, select the form element you want to add, such as a checkbox, and overlay it onto your form. Adjust the sizing and position until it meets your requirements. Copy and paste the form element to add more fields as needed.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
# Step 4: Customizing Form Elements and Naming Fields
|
||||||
|
|
||||||
|
To ensure each form element is unique and identifiable, customize the appearance and name of each field. Renaming fields is especially important if you plan to collect data using a form processing application like Sign 365. Double-check that each checkbox or text field has a unique name under the "General" tab in PDFelement.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
# Step 5: Preview and Finalize Your Form
|
||||||
|
|
||||||
|
Once you have added all the necessary form elements, preview your form to ensure everything is functioning correctly. Make any additional adjustments to the layout or appearance if needed. Save your customized form in PDF format.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
# Conclusion
|
||||||
|
|
||||||
|
Creating custom forms for your business or work doesn't have to be a daunting task. With tools like Wondershare PDFelement you can develop professional and user-friendly PDF forms. By following the steps outlined in this blog post, you’ll be able do well on your way to customs such forms that bring further value to your business.
|
|
@ -0,0 +1,40 @@
|
||||||
|
---
|
||||||
|
title: "Docusign vs. signNow"
|
||||||
|
subtitle: "Docusign vs. signNow comparison"
|
||||||
|
date: "2021-08-14"
|
||||||
|
image: "/images/blog/docusignsignnow.png"
|
||||||
|
---
|
||||||
|
|
||||||
|
In the digital age, eSignature solutions have become a necessity for businesses of all sizes. Today, we're comparing two popular platforms: Adobe Fill And Sign and Sign365.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
Adobe Fill And Sign offers a straightforward, user-friendly interface for signing documents. It allows users to fill, sign, and send forms quickly. However, it lacks advanced features like document tracking and custom branding.
|
||||||
|
|
||||||
|
On the other hand, Sign365 provides a comprehensive suite of features, including document tracking, custom branding, and bulk sending. It also offers a unique feature called 'conditional fields,' which allows you to customize your documents based on the recipient's responses.
|
||||||
|
|
||||||
|
## Document Generation and Management Features
|
||||||
|
|
||||||
|
Adobe Fill And Sign allows users to create and manage documents, but it lacks the advanced document generation and management features offered by Sign365. With Sign365, you can generate documents from templates, organize them into folders, and track their status in real-time.
|
||||||
|
|
||||||
|
## Security and Compliance
|
||||||
|
|
||||||
|
Both Adobe Fill And Sign and Sign365 prioritize security. Adobe uses Adobe Document Cloud to store documents, while Sign365 uses a secure cloud storage system. However, Sign365 goes a step further by offering advanced security features like two-factor authentication and audit trails.
|
||||||
|
|
||||||
|
## Integrations
|
||||||
|
|
||||||
|
Adobe Fill And Sign integrates with Adobe's suite of products but lacks integration with other business tools. Conversely, Sign365 integrates with a wide range of business tools, including Salesforce, Google Drive, and Dropbox, making it a more versatile solution.
|
||||||
|
|
||||||
|
## Customer Support
|
||||||
|
|
||||||
|
While Adobe offers customer support, some users have reported slow response times. Sign365, however, is known for its excellent customer support, offering 24/7 assistance via phone, email, and live chat.
|
||||||
|
|
||||||
|
## So Which eSignature Solution is Right for You?
|
||||||
|
|
||||||
|
If you're looking for a simple, user-friendly solution, Adobe Fill And Sign may be the right choice. However, if you need advanced features, integrations, and excellent customer support, Sign365 is the superior option.
|
||||||
|
|
||||||
|
## Ready to Switch from Adobe Fill And Sign to Sign365?
|
||||||
|
|
||||||
|
If you're ready to make the switch, Sign365 offers a seamless transition process. With its robust features, excellent customer support, and advanced security measures, Sign365 is a powerful eSignature solution that can meet the needs of any business.
|
||||||
|
|
||||||
|
In conclusion, while Adobe Fill And Sign offers a simple solution for signing documents, Sign365 provides a more comprehensive and versatile platform for businesses.
|
|
@ -0,0 +1,36 @@
|
||||||
|
---
|
||||||
|
title: "Does Microsoft Forms Work Offline?"
|
||||||
|
subtitle: "CodeHouse is a leading provider of services for group training organizations in Australia, handling around 80% of these groups. Their expertise helps ensure that apprenticeship training is high quality and effective. "
|
||||||
|
date: "2024-02-6"
|
||||||
|
image: "/images/does-microsoft-forms-work-offline-0.png"
|
||||||
|
---
|
||||||
|
|
||||||
|
Microsoft Forms, previously known as Microsoft InfoPath, allows users to create and distribute forms that can be filled out online. However, Microsoft Forms itself does not have native offline capabilities. The service is designed to work in conjunction with other services like SharePoint and SQL databases, allowing forms to be filled out online and then synced back to the central database once an internet connection is restored.
|
||||||
|
|
||||||
|
# Microsoft Forms Doesn't Support Offline Data Collection
|
||||||
|
|
||||||
|
For scenarios where offline capabilities are needed, InfoPath, which is now deprecated, allowed users to design templates that could be filled out offline. These templates contained secondary data connections that provided data from an external database, and the forms could be filled out and later submitted when the user returned to a networked environment. The data required to fill out the forms had to be available locally, either within the form template or in a cache on the user's computer 1.
|
||||||
|
|
||||||
|
If you require offline functionality similar to what InfoPath offered, you would need to implement custom solutions or explore third-party tools that can replicate this behavior. As of my knowledge cutoff in April 2023, Microsoft has not released a successor to InfoPath with built-in offline capabilities. Therefore, for modern applications requiring offline form functionality, developers typically build mobile apps or web applications that sync data when online.
|
||||||
|
|
||||||
|
## What are some offline form options:
|
||||||
|
|
||||||
|
### Jotform:
|
||||||
|
|
||||||
|
Jotform emerges as a versatile solution, boasting an extensive array of templates that cater to diverse data collection needs. Its kiosk mode enhances user-friendliness in offline scenarios, ensuring that data collection remains unhindered. The platform supports both offline and online modes, allowing for seamless transitions between connectivity states. Jotform offers a free version that accommodates up to 5 forms, while more advanced features come at a cost of $39 USD/user/month. Additionally, the platform provides responsive chat and email support, enhancing its appeal for users seeking a comprehensive solution.
|
||||||
|
|
||||||
|
### Clappia:
|
||||||
|
|
||||||
|
Clappia takes a unique approach by offering users the ability to create custom apps tailored to their specific requirements. Beyond just forms, Clappia expands its utility by providing additional app options. This flexibility ensures that users can design solutions that go beyond standard form functionalities. Clappia's pricing structure includes a free option for a single form, with more advanced features available at $6 USD/user/month. The platform distinguishes itself further by offering responsive chat and email support, emphasizing its commitment to user satisfaction.
|
||||||
|
|
||||||
|
### Google Forms Synchronise:
|
||||||
|
|
||||||
|
For users deeply ingrained in the Google ecosystem, the Google Forms Synchronise option provides a bridge between the familiarity of Google Forms and the need for offline functionality. While this solution may serve adequately for those with moderate offline data collection requirements, its capabilities may not match the dedicated offline solutions offered by other alternatives.
|
||||||
|
|
||||||
|
### Sign365:
|
||||||
|
|
||||||
|
Sign365 stands out for its simplicity in user interface and customization options, making it a user-friendly choice for those seeking efficiency. By enabling the creation of custom forms using PDFs, Sign365 provides a straightforward integration step for transmitting data to systems once internet connectivity is restored. Priced at $5 AUD/user/month, the platform offers the enticing feature of unlimited forms, accompanied by the added advantage of phone support. This combination of simplicity, unlimited forms, and phone support positions Sign365 as an attractive choice for users seeking a cost-effective and well-supported solution.
|
||||||
|
|
||||||
|
## What Option is Best:
|
||||||
|
|
||||||
|
The decision-making process among these alternatives revolves around a careful consideration of specific needs, preferences, and constraints. Jotform, with its extensive templates, is an ideal choice for those seeking a feature-rich solution. On the other hand, Clappia appeals to users valuing the ability to create custom apps beyond traditional forms. Google Forms Synchronise caters to individuals deeply integrated into the Google ecosystem, offering a bridge between familiarity and offline functionality. Sign365, with its simplicity, unlimited forms, and phone support, presents a compelling choice for users looking for a cost-effective solution.
|
|
@ -0,0 +1,59 @@
|
||||||
|
---
|
||||||
|
title: "Free Group Training Forms"
|
||||||
|
subtitle: "In the dynamic landscape of labor hire, efficiency is paramount, and innovation is the key to staying ahead. As forward-thinking pioneers in the industry, your commitment to streamlining processes is crucial. One way to achieve this is by leveraging the power of free templates and creating customized forms that meet the unique needs of your labor hire company. If you are interested in doing this keep reading and we will give you a special template to help you get started in your form filling."
|
||||||
|
date: "2024-01-19"
|
||||||
|
image: "/images/example-training-form-template-0.png"
|
||||||
|
---
|
||||||
|
|
||||||
|
In the dynamic landscape of labor hire, efficiency is paramount, and innovation is the key to staying ahead. As forward-thinking pioneers in the industry, your commitment to streamlining processes is crucial. One way to achieve this is by leveraging the power of free templates and creating customized forms that meet the unique needs of your labor hire company. If you are interested in doing this keep reading and we will give you a special template to help you get started in your form filling.
|
||||||
|
|
||||||
|
## The Power of Free Templates:
|
||||||
|
|
||||||
|
Free templates are invaluable resources for labor hire companies seeking simplicity and effectiveness in their operations. Whether you're onboarding new hires, conducting training sessions, or managing workforce logistics, having ready-made templates can significantly boost your efficiency. They serve as a solid foundation, allowing you to focus on what matters most – your workforce.
|
||||||
|
|
||||||
|
## Building Templates on Canva: A Simple Guide:
|
||||||
|
|
||||||
|
1. **Accessing Canva:**
|
||||||
|
|
||||||
|
- Begin by visiting Canva's user-friendly platform.
|
||||||
|
- Sign in or create a new account to get started.
|
||||||
|
|
||||||
|
2. **Selecting a Template:**
|
||||||
|
|
||||||
|
- Explore Canva's extensive template library.
|
||||||
|
- Choose a category or use the search bar to find templates relevant to your labor hire business.
|
||||||
|
|
||||||
|
3. **Customizing Your Template:**
|
||||||
|
|
||||||
|
- Click on the chosen template to enter the editing interface.
|
||||||
|
- Replace placeholder text with your labor hire company's details.
|
||||||
|
- Add your logo for a branded touch.
|
||||||
|
|
||||||
|
4. **Incorporating Elements:**
|
||||||
|
|
||||||
|
- Enhance your template by adding elements such as images, icons, or dividers.
|
||||||
|
- Ensure the design aligns with your company's aesthetic.
|
||||||
|
|
||||||
|
5. **Saving and Sharing:**
|
||||||
|
- Once satisfied with your template, save it.
|
||||||
|
- Share the template link with your team or download it for future use.
|
||||||
|
|
||||||
|
## Seamless Workflow, Empowered Workforce:
|
||||||
|
|
||||||
|
By harnessing the capabilities of Canva, you're not just creating forms; you're paving the way for a more streamlined workflow. Imagine a process where onboarding and training become seamless, allowing you to focus on the growth and development of your workforce. Canva's intuitive interface ensures that you don't need to be a design expert – simplicity is at the core of their platform. If you are a visual person you should also check out a video tutorial to do it:
|
||||||
|
|
||||||
|
<div align="left">
|
||||||
|
<a href="https://youtu.be/VbHeItF1N7M?si=U8Czc5lPi01-vHfy">
|
||||||
|
<img src="https://img.youtube.com/vi/VbHeItF1N7M/0.jpg" style="width:75%;margin:0 auto;">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
## A Template Offer for You:
|
||||||
|
|
||||||
|
As a gesture of support to fellow labor hire companies, we are excited to offer a free group training form template on Canva. This template is crafted with simplicity and functionality in mind, designed to make your training sessions more efficient. To access this complimentary template, simply [right click this link > save link as](/assets/training-form.pdf) and download it.
|
||||||
|
|
||||||
|
<img src="/images/example-training-form-template-1.png" alt="Example Form" width="200" style="margin:0 auto;"/>
|
||||||
|
|
||||||
|
## In Conclusion:
|
||||||
|
|
||||||
|
As pioneers in the labor hire industry, embracing innovation is the pathway to success. Utilizing free templates on Canva is a step towards a more efficient and streamlined operation. Empower your labor hire business by simplifying your processes and focusing on what truly matters – building a skilled and motivated workforce. Your journey to seamless operations begins with a template. Try Canva today and experience the transformative power of simplicity in design.
|
|
@ -0,0 +1,38 @@
|
||||||
|
---
|
||||||
|
title: "How we reduced supervisor paperwork by 80% "
|
||||||
|
subtitle: "For Group Training Organizations (GTOs) across Regional Australia, the challenge of managing surveys and site visits, and collecting information, has never been more pressing. Amidst rising employee costs and growing administrative overhead, Sign365 has emerged as a forward-thinking solution to automate and digitise your document and signing process, propelling businesses towards a future where document workflows are not just streamlined, but seamless."
|
||||||
|
date: "2024-02-01"
|
||||||
|
image: "/images/how-sign365-reduced-supervisor-form-processing-by-80-percent-0.png"
|
||||||
|
---
|
||||||
|
|
||||||
|
For Group Training Organizations (GTOs) across Regional Australia, the challenge of managing surveys and site visits, and collecting information, has never been more pressing. Amidst rising employee costs and growing administrative overhead, Sign365 has emerged as a forward-thinking solution to automate and digitise your document and signing process, propelling businesses towards a future where document workflows are not just streamlined, but seamless.
|
||||||
|
|
||||||
|
# Context and Challenge
|
||||||
|
|
||||||
|
In 2018 we saw that many organisations were struggling with the amount of paperwork they were doing. With offline Google forms and related offline form software lagging behind in the ability to provide an easy custom form experience, we looked to make a system to reduce time in how GTOs performed administrative tasks. Our encounters with clients revealed a single, glaring constraint: the exponential time drained in transmuting information from offline forms into payroll systems, a fundamental operation for the continued functioning of these organizations.
|
||||||
|
|
||||||
|
This complexity translated into an incessant cycle of validating, checking, and locating documents, encapsulating precious time in tasks that, although crucial to the business's heartbeat, did not require the expertise of its workforce. The rising post-COVID employee costs predicted for the coming years only intensified the need for a sustainable resolution.
|
||||||
|
|
||||||
|
# Solution: Sign365 at Your Service
|
||||||
|
|
||||||
|
The inception of Sign365 was to address these exact predicaments. It sprung forth as a data entry automation tool specifically designed for iPadOS, offering a triad of benefits: error management, document tracking, and cross-system document administration. By allowing the creation of customized, actionable forms that directly feed into business applications in defined ways, Sign365 streamlined the once-tedious workflow, liberating administrators from the clutches of mundane, repetitive tasks.
|
||||||
|
|
||||||
|
The statistics were evident, with studies showcasing that 59% to 60% of knowledge workers craved automation in day-to-day operations like data input and email management. Sign365's philosophy pivoted on transitioning administrators from data processors to data overseers. This strategic repurposing saw a significant reduction in time spent on data entry tasks, with clients reclaiming 1-2 hours per day that traditionally squandered on manual form management.
|
||||||
|
|
||||||
|
# Business Impact and Results
|
||||||
|
|
||||||
|
Our implementation of Sign365 within a prominent GTO marked a turning point. By seamlessly integrating into their hefty payroll management system, we mitigated the arduous process of onboarding and assessing trainees through offline forms, promoting the effortless migration of documents. The augmentation enabled by Sign365’s robust reporting tools granted unparalleled visibility into the client's informational flow.
|
||||||
|
|
||||||
|
Furthermore, the data substantiates the transformative power of transitioning from human to machine-processed data—the reduction in error rates from 40% to a mere 1% alone echoes the magnitude of this shift, not to mention the curtailing of costs associated to human error, which could accrue to an average of $3000 per incident.
|
||||||
|
|
||||||
|
# Looking to the Future
|
||||||
|
|
||||||
|
The trajectory of staff employment costs rings a bell of impending challenges—with the Conference Board forecasting a steep rise in wages, the highest since 2008, the onus is on businesses to wield tools like Sign365 to recoup their investments in human capital.
|
||||||
|
|
||||||
|
Sign365 has laid the groundwork for a paradigm shift in processing offline forms. By extricating workers from the shackles of redundant tasks and enabling direct transmission of documented information to business apps, the platform has catalyzed a significant contraction in overhead, leading to monumental savings in time and financial resources.
|
||||||
|
|
||||||
|
# Invitation to Action
|
||||||
|
|
||||||
|
Is your document workflow streamlined? Is it seamless? As pioneers in the industry, we invite you to experience the world where offline form automation is not just a possibility but a reality. Try Sign365 and join a myriad of organizations in Regional Australia redefining their administrative landscape, making every second count, every form process matter—seamlessly.
|
||||||
|
|
||||||
|
Sited Sources [Refer to provided text]
|
|
@ -0,0 +1,26 @@
|
||||||
|
---
|
||||||
|
title: "How to Electronically Fill A Document"
|
||||||
|
subtitle: "Are you tired of the endless cycle of printing, signing, and scanning documents? Do you find yourself spending more time on paperwork than on the tasks that truly matter to your business? If so, it's time to discover the game-changing solution that is Sign365."
|
||||||
|
date: "2024-01-25"
|
||||||
|
image: "/images/how-to-electronically-fill-a-document-0.png"
|
||||||
|
---
|
||||||
|
|
||||||
|
Are you tired of the endless cycle of printing, signing, and scanning documents? Do you find yourself spending more time on paperwork than on the tasks that truly matter to your business? If so, it's time to discover the game-changing solution that is Sign365.
|
||||||
|
|
||||||
|
Sign365 is an innovative app designed to simplify and expedite the document signing process. With Sign365, you can easily upload and sign documents, ensuring a smooth and efficient workflow that saves you time and resources. This powerful tool is perfect for businesses looking to secure that all-important AAA client and streamline their administrative tasks.
|
||||||
|
|
||||||
|
The user-friendly interface of Sign365 welcomes you with a prompt to add a form, making it straightforward to get started. Once you've added a form, filling it out is a breeze. The app guides you through each section, ensuring that every box is ticked and every signature is captured accurately.
|
||||||
|
|
||||||
|
One of the standout features of Sign365 is its customization options. Supervisors can rename forms to better suit their needs, making organization a snap. Additionally, Sign365 integrates seamlessly with popular Group Training software like Workforce One, which is widely used in Australia for payroll management. This integration means that completed forms can be sent directly to the relevant area, be it an apprentice's file or a host client's records, with minimal effort on your part.
|
||||||
|
|
||||||
|
<div align="left">
|
||||||
|
<a href="https://youtu.be/O8P_bkinn-A">
|
||||||
|
<img src="https://img.youtube.com/vi/O8P_bkinn-A/0.jpg" style="width:75%;margin:0 auto;">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
But it's not just about convenience. Sign365 is also about significant time and cost savings. One of our Group Training Organizations (GTOs) reported an astonishing 80% reduction in administrative processing time. This translates to a considerable amount of money saved, allowing businesses to reinvest in areas that truly impact their growth, such as acquiring more apprentices.
|
||||||
|
|
||||||
|
In summary, Sign365 is more than just a document signing app—it's a comprehensive solution that alleviates the administrative burden, enhances efficiency, and ultimately contributes to the success of your business. Say goodbye to the hassle of traditional document handling and embrace the simplicity and effectiveness of Sign365.
|
||||||
|
|
||||||
|
Experience the difference for yourself and take the first step towards a more productive and profitable future. With Sign365, you're not just signing documents; you're signing up for success.
|
|
@ -0,0 +1,28 @@
|
||||||
|
---
|
||||||
|
title: "Streamlining Apprenticeship Training with CodeHouse Workforce One"
|
||||||
|
subtitle: "CodeHouse is a leading provider of services for group training organizations in Australia, handling around 80% of these groups. Their expertise helps ensure that apprenticeship training is high quality and effective. "
|
||||||
|
date: "2024-02-6"
|
||||||
|
image: "/images/how-to-setup-supervisor-forms-with-workforce-one-0.png"
|
||||||
|
---
|
||||||
|
|
||||||
|
CodeHouse is a leading provider of services for group training organizations in Australia, handling around 80% of these groups. Their expertise helps ensure that apprenticeship training is high quality and effective.
|
||||||
|
|
||||||
|
# Payroll Management Simplified
|
||||||
|
|
||||||
|
[Workforce One](https://www.workforceone.com.au/) is a service provided by CodeHouse that makes managing payroll for apprentices easier. It's a tool that helps keep track of money spent on apprenticeship training, allowing organizations to focus on teaching and learning.
|
||||||
|
|
||||||
|
# Creating Surveys and Questionnaires
|
||||||
|
|
||||||
|
[Workforce One](https://www.workforceone.com.au/) lets you create your own surveys and questionnaires right inside the system. This is useful for getting feedback from supervisors and apprentices, helping to make sure that the training is going well. It is able to do this online with it's own in built systems that directly link to Workforce One
|
||||||
|
|
||||||
|
# Offline Solutions
|
||||||
|
|
||||||
|
If you need to work without an internet connection, CodeHouse has partnered with Sign365. It's a tool that works like paper but is easier to use and safer. It keeps important information safe and organized, no matter if you're connected to the internet or not. It does this by using your iPhone or iPad to store your forms until you get back online where it will automatically send those forms to Workforce One
|
||||||
|
|
||||||
|
# Automating Tasks
|
||||||
|
|
||||||
|
Sign365 can also connect with other systems, making it easier to work with different tools. This helps save time and reduce mistakes, making everything run more smoothly. Most tasks that you do to get useful documents are not necessary with Sign365's automation tools. You will be able to save 20 hours or more per staff member per week
|
||||||
|
|
||||||
|
# Conclusion
|
||||||
|
|
||||||
|
Choosing the right payroll management system is important for running successful apprenticeship programs. CodeHouse [Workforce One](https://www.workforceone.com.au/), along with Sign365, gives organizations the tools they need to manage payroll, collect feedback, and work efficiently. This helps ensure that apprentices get the best training possible.
|
|
@ -0,0 +1,62 @@
|
||||||
|
---
|
||||||
|
title: "How to use Google Forms offline?"
|
||||||
|
subtitle: "We'll explore the various solutions available for offline data collection in Google Forms. We'll delve into the intricacies of Google Forms, including its limitations and how to overcome them. We'll also explore the various alternatives available for offline data collection."
|
||||||
|
date: "2024-01-15"
|
||||||
|
image: "https://images2.imgbox.com/91/e5/zDzlf3s5_o.png"
|
||||||
|
---
|
||||||
|
|
||||||
|
In today's data-driven landscape, the seamless collection of information is a critical component for individuals and organizations. However, the omnipresence of internet connectivity is not guaranteed, leading to challenges in situations where offline data collection becomes necessary. In this article, we delve into the complexities of offline data collection, exploring solutions beyond the limitations of popular tools like Google Forms. From understanding the nature of offline and online forms to evaluating various alternatives, we aim to provide a comprehensive guide for those seeking efficient methods of data gathering regardless of their connectivity status.
|
||||||
|
|
||||||
|
## Can Google Forms be used offline?
|
||||||
|
|
||||||
|
Google Forms, a widely utilized platform for creating surveys and forms, has earned its popularity for its ease of use and integration with other Google services. However, its Achilles' heel lies in its dependency on internet connectivity. When faced with the need for offline data collection, Google Forms may not be the most reliable solution. This limitation prompts us to explore alternative avenues that specifically cater to the challenges of offline environments.
|
||||||
|
|
||||||
|
## What is an offline form?
|
||||||
|
|
||||||
|
Before we delve into alternatives, it's essential to understand what constitutes an offline form. In essence, an offline form is a digital or physical document designed to collect information in environments where a stable internet connection cannot be guaranteed. These forms empower users to capture and store data locally, providing a workaround for situations where real-time online interactions are not feasible.
|
||||||
|
|
||||||
|
## What is an online form?
|
||||||
|
|
||||||
|
In contrast, an online form relies on consistent internet connectivity to capture and transmit data in real-time. While effective in connected environments, these forms face limitations when deployed in offline scenarios. Understanding the distinction between online and offline forms is crucial for selecting the right tool for the job.
|
||||||
|
|
||||||
|
## What are some offline form options:
|
||||||
|
|
||||||
|
### Jotform:
|
||||||
|
|
||||||
|
Jotform emerges as a versatile solution, boasting an extensive array of templates that cater to diverse data collection needs. Its kiosk mode enhances user-friendliness in offline scenarios, ensuring that data collection remains unhindered. The platform supports both offline and online modes, allowing for seamless transitions between connectivity states. Jotform offers a free version that accommodates up to 5 forms, while more advanced features come at a cost of $39 USD/user/month. Additionally, the platform provides responsive chat and email support, enhancing its appeal for users seeking a comprehensive solution.
|
||||||
|
|
||||||
|
### Clappia:
|
||||||
|
|
||||||
|
Clappia takes a unique approach by offering users the ability to create custom apps tailored to their specific requirements. Beyond just forms, Clappia expands its utility by providing additional app options. This flexibility ensures that users can design solutions that go beyond standard form functionalities. Clappia's pricing structure includes a free option for a single form, with more advanced features available at $6 USD/user/month. The platform distinguishes itself further by offering responsive chat and email support, emphasizing its commitment to user satisfaction.
|
||||||
|
|
||||||
|
### Google Forms Synchronise:
|
||||||
|
|
||||||
|
For users deeply ingrained in the Google ecosystem, the Google Forms Synchronise option provides a bridge between the familiarity of Google Forms and the need for offline functionality. While this solution may serve adequately for those with moderate offline data collection requirements, its capabilities may not match the dedicated offline solutions offered by other alternatives.
|
||||||
|
|
||||||
|
### Sign365:
|
||||||
|
|
||||||
|
Sign365 stands out for its simplicity in user interface and customization options, making it a user-friendly choice for those seeking efficiency. By enabling the creation of custom forms using PDFs, Sign365 provides a straightforward integration step for transmitting data to systems once internet connectivity is restored. Priced at $5 AUD/user/month, the platform offers the enticing feature of unlimited forms, accompanied by the added advantage of phone support. This combination of simplicity, unlimited forms, and phone support positions Sign365 as an attractive choice for users seeking a cost-effective and well-supported solution.
|
||||||
|
|
||||||
|
## What Option is Best:
|
||||||
|
|
||||||
|
The decision-making process among these alternatives revolves around a careful consideration of specific needs, preferences, and constraints. Jotform, with its extensive templates, is an ideal choice for those seeking a feature-rich solution. On the other hand, Clappia appeals to users valuing the ability to create custom apps beyond traditional forms. Google Forms Synchronise caters to individuals deeply integrated into the Google ecosystem, offering a bridge between familiarity and offline functionality. Sign365, with its simplicity, unlimited forms, and phone support, presents a compelling choice for users looking for a cost-effective solution.
|
||||||
|
|
||||||
|
### Digging Deeper into Alternatives:
|
||||||
|
|
||||||
|
Beyond the outlined options, it's essential to consider additional factors that might influence the decision-making process. Integration capabilities, scalability, and security features are crucial aspects to evaluate.
|
||||||
|
|
||||||
|
### Integration Capabilities:
|
||||||
|
|
||||||
|
Jotform and Clappia offer integrations that enhance their capabilities. The ability to seamlessly connect with other tools and systems can significantly streamline workflows, providing a more comprehensive solution for users with complex data management needs.
|
||||||
|
|
||||||
|
### Scalability:
|
||||||
|
|
||||||
|
Consideration of scalability is paramount, especially for organizations experiencing growth. Clappia, with its custom app creation feature, may provide a scalable solution tailored to evolving requirements. Jotform's diverse template library also contributes to its scalability, accommodating a range of data collection needs.
|
||||||
|
|
||||||
|
### Security Features:
|
||||||
|
|
||||||
|
As data security becomes an increasingly important concern, examining the security features of each platform is crucial. Users handling sensitive information may prioritize platforms that offer robust security measures. Ensuring compliance with data protection regulations is imperative, and understanding how each platform handles data encryption and storage is essential.
|
||||||
|
|
||||||
|
## Conclusion:
|
||||||
|
|
||||||
|
In conclusion, the quest for the best offline data collection solution requires a nuanced understanding of individual needs and preferences. The alternatives explored - Jotform, Clappia, Google Forms Synchronise, and Sign365 - each bring unique strengths to the table. The decision-making process involves a delicate balance between functionality, pricing, and support. Additionally, factors such as integration capabilities, scalability, and security features contribute to the overall suitability of each platform for diverse use cases. As technology continues to evolve, users can expect more innovative solutions that further enhance the efficiency and effectiveness of offline data collection.
|
|
@ -0,0 +1,59 @@
|
||||||
|
---
|
||||||
|
title: "Sign365 vs Adobe Fill and Sign"
|
||||||
|
subtitle: "Sign365 vs Adobe Fill and Sign comparison"
|
||||||
|
date: "2020-12-27"
|
||||||
|
image: "/images/blog/sign365adobe.png"
|
||||||
|
---
|
||||||
|
|
||||||
|
Over the last few years, Adobe has been pushing for a new way to sign documents. Called fill and Sign. This is 100% free and is a fantastic way to sign documents. The problem is for admin staff there is no way to manage the documents that are coming through in a centralized way. Furthermore offline signing and management isn't well supported in Adobe fill and sign.
|
||||||
|
|
||||||
|
In the digital age, eSignature solutions have become an essential tool for businesses. Two popular options are Adobe Fill And Sign and Sign365. But which one is the best offline, in-person document signing tool for businesses? Let's delve into the details.
|
||||||
|
|
||||||
|
# Features
|
||||||
|
|
||||||
|
Adobe Fill And Sign offers a simple and intuitive interface that allows users to fill, sign, and send forms quickly. It supports various file formats and enables users to create personalized signatures. However, it lacks advanced features like document tracking and multi-user collaboration.
|
||||||
|
✅ Electronic document signing
|
||||||
|
✅ In-person signature collection via a mobile device
|
||||||
|
✅ Easy-to-use fillable forms
|
||||||
|
✅ Basic PDF editing tools
|
||||||
|
✅ Mobile-friendly signing
|
||||||
|
|
||||||
|
On the other hand, Sign365 stands out with its robust features. It offers offline, in-person signing, document tracking, multi-user collaboration, and more. It also supports a wide range of file formats and allows users to create personalized signatures.
|
||||||
|
✅ Electronic document signing
|
||||||
|
✅ Offline signing and document routing
|
||||||
|
✅ Configuring document routing
|
||||||
|
✅ In-person signature collection via a mobile device
|
||||||
|
✅ Automatic reminders and notifications
|
||||||
|
✅ Easy-to-use fillable forms
|
||||||
|
✅ Data validation for fillable fields
|
||||||
|
✅ Basic PDF editing tools
|
||||||
|
✅ Managing documents in the cloud
|
||||||
|
✅ Reusable templates
|
||||||
|
✅ Audit Trail and document history
|
||||||
|
✅ Mobile-friendly signing (iOS only for Sign365)
|
||||||
|
|
||||||
|
# Document Generation and Management Features
|
||||||
|
|
||||||
|
Adobe Fill And Sign provides basic document generation and management features. It allows users to fill and sign documents but lacks advanced document management features like version control and document tracking.
|
||||||
|
|
||||||
|
Sign365, however, offers comprehensive document generation and management features. It not only allows users to fill and sign documents but also provides version control, document tracking, and multi-user collaboration. These features make it easier for businesses to manage their documents efficiently.
|
||||||
|
|
||||||
|
# Security and Compliance
|
||||||
|
|
||||||
|
Both Adobe Fill And Sign and Sign365 prioritize security and compliance. Adobe Fill And Sign uses Adobe's secure cloud services to store documents, while Sign365 uses Microsoft's secure cloud services. Both solutions comply with major regulations like GDPR and HIPAA.
|
||||||
|
|
||||||
|
# Integrations
|
||||||
|
|
||||||
|
Adobe Fill And Sign integrates with Adobe's suite of products, but it lacks integration with other popular business tools. Sign365, however, integrates seamlessly with a wide range of business tools, including Microsoft Office, Google Workspace, and more.
|
||||||
|
|
||||||
|
# Customer Support
|
||||||
|
|
||||||
|
Adobe Fill And Sign offers customer support via email and community forums. Sign365, however, provides Perth based customer services with a focus on client relations ensuring that your needs are personally dealt with.
|
||||||
|
|
||||||
|
# So Which eSignature Solution is Right for You?
|
||||||
|
|
||||||
|
While both Adobe Fill And Sign and Sign365 offer valuable features, Sign365 stands out as the best offline, in-person document signing tool for businesses. Its robust document generation and management features, seamless integrations, and excellent customer support make it a superior choice for businesses of all sizes.
|
||||||
|
|
||||||
|
# Ready to Switch from Adobe Fill And Sign to Sign365?
|
||||||
|
|
||||||
|
If you're ready to switch from Adobe Fill And Sign to Sign365, you're making a wise decision. Sign365 offers more advanced features, better integrations, and superior customer support. Plus, its offline, in-person signing capability makes it the perfect tool for businesses that need to sign documents in person. Make the switch today and take your document signing process to the next level with Sign365.
|
|
@ -0,0 +1,132 @@
|
||||||
|
---
|
||||||
|
title: "Sign365 vs Docusign"
|
||||||
|
subtitle: "Sign365 vs Docusign comparison"
|
||||||
|
date: "2023-01-27"
|
||||||
|
image: "/images/blog/sign365docusign.png"
|
||||||
|
author: "Samuel Wyndham"
|
||||||
|
---
|
||||||
|
|
||||||
|
When it comes to eSignatures, Sign365 stands out as a top-notch solution, which while not comparable to industry giants like DocuSign. Offers a robust alternative, catering more to small and medium-sized businesses who need to sign documents offline and need a simple user interface to do it
|
||||||
|
|
||||||
|
Sign365 excels in delivering powerful eSignature capabilities at competitive prices, making it a strong contender against DocuSign for businesses who just need simplicity. Particularly suited for daily business needs, its offline functionality on iOS, coupled with streamlined data integration and rapid data input, positions it as a favorable choice.
|
||||||
|
|
||||||
|
**Note:** Seeking an efficient eSignature solution for your business? Explore Sign365, a compelling alternative to DocuSign.
|
||||||
|
|
||||||
|
# Product overview: DocuSign vs. Sign365
|
||||||
|
|
||||||
|
✅ DocuSign, an established player since 2003, has solidified its position as a leading eSignature solution with a massive global user base. Widely adopted in finance, healthcare, life sciences, and real estate, DocuSign boasts a refined interface and robust functionalities, albeit at a premium price point compared to competitors, often charging extra for advanced features.
|
||||||
|
|
||||||
|
✅ Sign365 emerges as a strong contender, especially tailored for the GTO (Group Training Organisation) market seeking modern PDF solutions. Built from the ground up as a modern PDF app, Sign365 caters specifically to businesses aiming to capture, report, and automate their data seamlessly. Positioned as an efficient tool for businesses looking to digitize their document workflows and streamline operations, Sign365 marks a purpose-driven approach towards facilitating efficient data handling for modern enterprises.
|
||||||
|
|
||||||
|
In the battle between eSignature solutions, while DocuSign reigns with its established reputation and features, Sign365 offers a focused, tailor-made approach for businesses seeking optimized data management solutions within the GTO landscape.
|
||||||
|
|
||||||
|
# Pricing
|
||||||
|
|
||||||
|
Sign365 simplifies its pricing into three tiers: Business Basic, Business Premium, and Business Ultimate. Business Basic suits small teams with its app-based document signing, fillable fields, and customizable templates. Business Premium adds advanced reporting and prebuilt automation, while Business Ultimate includes everything in Premium, along with tailored custom automations for complex needs. Sign365 permits allowing additional user seats taylored to your business growth (think as many as possible), allowing scalability for growing teams.
|
||||||
|
|
||||||
|
Contrastingly, DocuSign provides four subscription tiers with limited publicly available information and allows up to 5 user seats per subscription, starting from the Standard plan. However, DocuSign lacks transparent pricing for its highest-tier subscription, determining costs on a per-customer basis.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
# Features
|
||||||
|
|
||||||
|
In terms of technology, DocuSign is rightfully considered the industry leader. Over 20 years of continuous development and innovations allowed the product to grow into an advanced contract management platform suited to the largest of enterprises.
|
||||||
|
|
||||||
|
Meanwhile, Sign365 isn’t lagging far behind. Users across multiple review platforms confirm that Sign365 has everything they need to get documents signed electronically – at a much lower price than DocuSign. Furthermore where Sign365 shines is in its ability to do offline signing and workflow tagging to ensure your data reaches the right places
|
||||||
|
|
||||||
|
eSignature features
|
||||||
|
|
||||||
|
Both Sign365 and DocuSign offer all the standard features you would expect from an eSignature app:
|
||||||
|
|
||||||
|
✅ Electronic document signing
|
||||||
|
✅ Configuring document routing
|
||||||
|
✅ In-person signature collection via a mobile device
|
||||||
|
✅ Automatic reminders and notifications
|
||||||
|
✅ Easy-to-use fillable forms
|
||||||
|
✅ Data validation for fillable fields
|
||||||
|
✅ Basic PDF editing tools
|
||||||
|
✅ Managing documents in the cloud
|
||||||
|
✅ Reusable templates
|
||||||
|
✅ Audit Trail and document history
|
||||||
|
✅ Mobile-friendly signing (iOS only for Sign365)
|
||||||
|
Both products support an array of enterprise-grade features, including:
|
||||||
|
|
||||||
|
✅ Admin dashboard for managing multiple user accounts
|
||||||
|
✅ Collaboration tools and asset sharing
|
||||||
|
✅ Custom branding
|
||||||
|
✅ Rich API for seamless integration with any stack
|
||||||
|
|
||||||
|
On top of that, DocuSign boasts some features that Sign365 is currently lacking:
|
||||||
|
✅ Sending documents for eSignature to one or multiple recipients
|
||||||
|
✅ Payment collection
|
||||||
|
✅ Bulk-sending documents for signature
|
||||||
|
✅ Signature collection via shareable links
|
||||||
|
✅ Real-time signature tracking
|
||||||
|
✅ Signing groups
|
||||||
|
✅ Setting a signing order
|
||||||
|
✅ Assigning and configuring signer roles
|
||||||
|
✅ Business fields
|
||||||
|
✅ Document markup and collaborative fields
|
||||||
|
✅ Smart sections
|
||||||
|
✅ Self-service web forms
|
||||||
|
✅ Signer identity verification
|
||||||
|
✅ Cloud signatures
|
||||||
|
✅ Requesting attachments
|
||||||
|
✅ QES (qualified electronic signatures)
|
||||||
|
|
||||||
|
Enhanced capabilities for digital signature make DocuSign a more suitable solution for highly regulated industries and countries where specific methods of identity validation are required. However, Sign365 is already taking steps toward closing that gap by introducing PKI-based digital signatures (AES). Therefore, if you are looking to collect authentic digital signatures verified by unique ID certificates and have offline functionality, you may find Sign365 to be a viable alternative to DocuSign.
|
||||||
|
|
||||||
|
# Document generation and management features
|
||||||
|
|
||||||
|
Both Sign365 and DocuSign enable users to upload documents from various sources, preparing them for signatures using basic editing tools and a range of fillable fields. These platforms allow easy modification of documents by adding elements like text, date, checkmarks, signatures, initials, stamps, and fillable fields. Furthermore, users can convert a fillable form into a reusable template, store it within their account, or export it to the cloud.
|
||||||
|
|
||||||
|
However, if advanced document generation and management tools are required, the options differ between Sign365 and DocuSign. Unlike DocuSign, Sign365 does not include document generation capabilities in any of its subscription plans. Both platforms, however, offer additional solutions for enhanced document management, available at an additional cost.
|
||||||
|
|
||||||
|
DocuSign provides intelligent automation systems specifically designed for agreement generation and management:
|
||||||
|
|
||||||
|
✅ DocuSign CLM: A contract lifecycle management system for generating, negotiating, and automating agreement workflows, along with centralized agreement storage and searches.
|
||||||
|
✅ DocuSign Negotiate: A solution automating the generation, negotiation, and approval of agreements within your CRM.
|
||||||
|
✅ DocuSign Gen: Automation of agreement generation within your CRM.
|
||||||
|
✅ DocuSign Click: Enables embedding consent capture to agreement terms on websites and apps.
|
||||||
|
|
||||||
|
✅ Intelligent Insights by Seal Software: AI-driven concept searching, clause identification, and analytics.
|
||||||
|
✅ Guided Forms by Intelledox: A user-friendly “wizard-style” experience replacing complex forms.
|
||||||
|
In summary, Sign365 primarily focuses on eSignature capabilities. DocuSign, however, incorporates intelligent automation systems tailored for agreement generation and management purposes.
|
||||||
|
|
||||||
|
# Security and compliance
|
||||||
|
|
||||||
|
Is Sign365 as legitimate as DocuSign? Absolutely. Both Sign365 and DocuSign provide legally-binding electronic signatures that hold up in courts within the US, Europe, and other regions globally where eSignatures are accepted. Sign365 and DocuSign adhere to the following standards and regulations:
|
||||||
|
|
||||||
|
✅ ESIGN (Electronic Signatures in Global and National Commerce Act)
|
||||||
|
✅ UETA (Uniform Electronic Transactions Act)
|
||||||
|
✅ eIDAS (electronic IDentification, Authentication and trust Services)
|
||||||
|
✅ GDPR (General Data Protection Regulation)
|
||||||
|
✅ CCPA (California Consumers Protection Act of 2018)
|
||||||
|
|
||||||
|
# Integrations
|
||||||
|
|
||||||
|
Integrations are crucial for constructing efficient and seamless eSignature workflows within various software environments, and both Sign365 and DocuSign recognize this significance.
|
||||||
|
|
||||||
|
Throughout its extensive history, DocuSign has amassed a relatively wider array of pre-built integrations. Nevertheless, Sign365 integrations are well-suited for the most popular CRM systems, productivity applications, and cloud storage services.
|
||||||
|
|
||||||
|
In addition to their off-the-shelf integrations, both companies provide robust APIs and connections via Zapier. This implies virtually limitless possibilities for constructing customized eSignature workflows.
|
||||||
|
|
||||||
|
# Customer support
|
||||||
|
|
||||||
|
Customer support is key for both Sign365 and Docusign with Docusign offering various self-service options.
|
||||||
|
|
||||||
|
In terms of support options, both DocuSign and Sign365 offer live chat and ticket-based assistance. Sign365 distinguishes itself by providing phone support and personal integration support specifically catered to customers with its top-tier subscription.
|
||||||
|
|
||||||
|
Notably, the key distinction between DocuSign and Sign365 lies in their customer service approach. Sign365 has all customer service operations located in Australia, emphasizing in-person service and prioritizing the customer experience as a primary focus. This approach aligns with Sign365's belief that placing the customer first is paramount. Conversely, DocuSign has transformed its customer service into a separate paid product, offering enhanced support plans featuring additional channels and improved response times for an extra fee.
|
||||||
|
|
||||||
|
# So which eSignature solution is right for you?
|
||||||
|
|
||||||
|
Both Sign365 and DocuSign serve as excellent tools that streamline daily operations and reduce the time spent on paperwork. DocuSign caters best to larger companies seeking its innovative features and willing to make substantial investments. Enterprises stand to gain from DocuSign's AI-driven contract management solutions, advanced compliances, and a wide array of pre-built integrations.
|
||||||
|
|
||||||
|
While DocuSign remains at the forefront of the market, Sign365 is steadily broadening its scope within the enterprise segment. The company is continually enhancing its value-added features tailored for organizations of all sizes and refining its API, facilitating integration with a broader range of products into its eSignature software.
|
||||||
|
|
||||||
|
For those seeking a more cost-effective alternative to DocuSign, Sign365 offers significant value at a reduced cost. With robust eSignature functionality, high standards of security and compliance, and transparent pricing, Sign365 boasts numerous success stories from satisfied customers
|
||||||
|
|
||||||
|
# Ready to switch from DocuSign to Sign365?
|
||||||
|
|
||||||
|
Sign365 ensures a painless transition. You can migrate from DocuSign to Sign365 hassle-free by contacting our customer support today
|
|
@ -0,0 +1,133 @@
|
||||||
|
---
|
||||||
|
title: "Sign365 vs signNow"
|
||||||
|
subtitle: "Sign365 vs signNow comparison"
|
||||||
|
date: "2023-01-27"
|
||||||
|
image: "/images/blog/sign365signnow.png"
|
||||||
|
author: "Samuel Wyndham"
|
||||||
|
---
|
||||||
|
|
||||||
|
When it comes to eSignatures, Sign365 stands out as a top-notch solution, comparable to industry giants like signNow. While signNow has long dominated the field, especially among enterprise clients, Sign365 offers a robust alternative, catering more to small and medium-sized businesses.
|
||||||
|
|
||||||
|
Sign365 excels in delivering powerful eSignature capabilities at competitive prices, making it a strong contender against signNow. Particularly suited for daily business needs, its offline functionality on iOS, coupled with streamlined data integration and rapid data input, positions it as a favorable choice.
|
||||||
|
|
||||||
|
**Note:** Seeking an efficient eSignature solution for your business? Explore Sign365, a compelling alternative to signNow.
|
||||||
|
|
||||||
|
# Product overview: signNow vs. Sign365
|
||||||
|
|
||||||
|
✅ signNow: Established as an eSignature solution, signNow has gained prominence for its intuitive interface and ease of use. It's well-suited for businesses of varying sizes and industries, providing a comprehensive range of features to streamline document signing processes. signNow's platform emphasizes seamless integrations, document management, and user-friendly functionalities.
|
||||||
|
|
||||||
|
✅ Sign365: Tailored for Group Training Organizations (GTOs), Sign365 focuses on modern PDF solutions, aiming to capture, report, and automate data efficiently. It caters specifically to businesses seeking to digitize document workflows and streamline operations. Sign365's core strength lies in its data management capabilities and offline functionality on iOS devices, facilitating efficient document handling.
|
||||||
|
|
||||||
|
In comparing Sign365 and signNow, while both offer eSignature solutions, Sign365 targets a niche market with specialized features, whereas signNow caters to a broader audience, emphasizing its ease of use and integrations.
|
||||||
|
|
||||||
|
# Pricing
|
||||||
|
|
||||||
|
Sign365 Offers three pricing tiers - Business Basic, Business Premium, and Business Ultimate, each with varying features catering to different business needs. The plans are designed for scalability, allowing additional user seats taylored to your business growth (think as many as possible), making it suitable for growing teams within the GTO landscape.
|
||||||
|
|
||||||
|
signNow: signNow offers a tiered pricing model based on user requirements, catering to individual users, small businesses, and larger enterprises. The pricing structure includes features such as document sending, templates, and custom branding. signNow allows for an additional 10 seats.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
# Features
|
||||||
|
|
||||||
|
In terms of technology, signNow is rightfully considered the more comprehensive e-signature soltion. Over years of continuous development and innovation, signNow has evolved into an advanced contract management platform suitable for enterprises of all sizes.
|
||||||
|
|
||||||
|
Meanwhile, Sign365 isn’t lagging far behind. Users across multiple review platforms confirm that Sign365 has everything they need to get documents signed electronically – at a much lower price than signNow. Furthermore, where Sign365 shines is in its ability to perform offline signing and workflow tagging to ensure data reaches the right places.
|
||||||
|
|
||||||
|
Both Sign365 and signNow offer all the standard features you would expect from an eSignature app:
|
||||||
|
|
||||||
|
✅ Electronic document signing
|
||||||
|
✅ Configuring document routing
|
||||||
|
✅ In-person signature collection via a mobile device
|
||||||
|
✅ Automatic reminders and notifications
|
||||||
|
✅ Easy-to-use fillable forms
|
||||||
|
✅ Data validation for fillable fields
|
||||||
|
✅ Basic PDF editing tools
|
||||||
|
✅ Managing documents in the cloud
|
||||||
|
✅ Reusable templates
|
||||||
|
✅ Audit Trail and document history
|
||||||
|
✅ Mobile-friendly signing (iOS only for Sign365)
|
||||||
|
Both products support an array of enterprise-grade features, including:
|
||||||
|
|
||||||
|
✅ Admin dashboard for managing multiple user accounts
|
||||||
|
✅ Collaboration tools and asset sharing
|
||||||
|
✅ Custom branding
|
||||||
|
✅ Rich API for seamless integration with any stack
|
||||||
|
|
||||||
|
On top of that, signNow boasts some features that Sign365 is currently lacking:
|
||||||
|
✅ Bulk-sending documents for signature
|
||||||
|
✅ Real-time signature tracking
|
||||||
|
✅ Sending documents for eSignature to one or multiple recipients
|
||||||
|
✅ Signature collection via shareable links
|
||||||
|
✅ Signing groups
|
||||||
|
✅ Setting a signing order
|
||||||
|
✅ Payment collection
|
||||||
|
✅ Assigning and configuring signer roles
|
||||||
|
✅ Business fields
|
||||||
|
✅ Document markup and collaborative fields
|
||||||
|
✅ Smart sections
|
||||||
|
✅ Self-service web forms
|
||||||
|
✅ Signer identity verification
|
||||||
|
✅ Cloud signatures
|
||||||
|
✅ Requesting attachments
|
||||||
|
✅ QES (qualified electronic signatures)
|
||||||
|
|
||||||
|
Enhanced capabilities for digital signature make signNow a more suitable solution for highly regulated industries and countries where specific methods of identity validation are required. However, Sign365 is already taking steps toward closing that gap by introducing PKI-based digital signatures (AES). Therefore, if you are looking to collect authentic digital signatures verified by unique ID certificates and have offline functionality, you may find Sign365 to be a viable alternative to signNow.
|
||||||
|
|
||||||
|
# Document generation and management features
|
||||||
|
|
||||||
|
Both Sign365 and signNow enable users to upload documents from various sources, preparing them for signatures using basic editing tools and a range of fillable fields. These platforms allow easy modification of documents by adding elements like text, date, checkmarks, signatures, initials, stamps, and fillable fields. Furthermore, users can convert a fillable form into a reusable template, store it within their account, or export it to the cloud.
|
||||||
|
|
||||||
|
However, if advanced document generation and management tools are required, the options differ between Sign365 and signNow. Unlike signNow, Sign365 does not include document generation capabilities in any of its subscription plans. signNow provides these features through a suite of products offering enhanced document management solutions, available at an additional cost.
|
||||||
|
|
||||||
|
signNow offers intelligent automation systems specifically designed for agreement generation and management:
|
||||||
|
|
||||||
|
✅ signNow CLM: A contract lifecycle management system for generating, negotiating, and automating agreement workflows, along with centralized agreement storage and searches.
|
||||||
|
✅ signNow Negotiate: A solution automating the generation, negotiation, and approval of agreements within your CRM.
|
||||||
|
✅ signNow Gen: Automation of agreement generation within your CRM.
|
||||||
|
✅ signNow Click: Enables embedding consent capture to agreement terms on websites and apps.
|
||||||
|
|
||||||
|
✅ Intelligent Insights by Seal Software: AI-driven concept searching, clause identification, and analytics.
|
||||||
|
✅ Guided Forms by Intelledox: A user-friendly “wizard-style” experience replacing complex forms.
|
||||||
|
|
||||||
|
In summary, Sign365 primarily focuses on eSignature capabilities. signNow, however, incorporates intelligent automation systems tailored for agreement generation and management purposes through its suite of products.
|
||||||
|
|
||||||
|
# Security and compliance
|
||||||
|
|
||||||
|
Is Sign365 as legitimate as signNow? Absolutely. Both Sign365 and signNow provide legally-binding electronic signatures that hold up in courts within the US, Europe, and other regions globally where eSignatures are accepted. Sign365 and signNow adhere to the following standards and regulations:
|
||||||
|
|
||||||
|
✅ ESIGN (Electronic Signatures in Global and National Commerce Act)
|
||||||
|
✅ UETA (Uniform Electronic Transactions Act)
|
||||||
|
✅ eIDAS (electronic IDentification, Authentication, and trust Services)
|
||||||
|
✅ GDPR (General Data Protection Regulation)
|
||||||
|
✅ CCPA (California Consumers Protection Act of 2018)
|
||||||
|
|
||||||
|
# Integrations
|
||||||
|
|
||||||
|
Integrations are crucial for constructing efficient and seamless eSignature workflows within various software environments, and both Sign365 and signNow recognize this significance.
|
||||||
|
|
||||||
|
Throughout its extensive history, signNow has amassed a relatively wider array of pre-built integrations. Nevertheless, Sign365 integrations are well-suited for the most popular CRM systems, productivity applications, and cloud storage services.
|
||||||
|
|
||||||
|
In addition to their off-the-shelf integrations, both companies provide robust APIs and connections via Zapier. This implies virtually limitless possibilities for constructing customized eSignature workflows.
|
||||||
|
|
||||||
|
# Customer support
|
||||||
|
|
||||||
|
Customer support is key for both Sign365 and signNow, with signNow offering various self-service options.
|
||||||
|
|
||||||
|
In terms of support options, both signNow and Sign365 offer live chat and ticket-based assistance. Sign365 distinguishes itself by providing phone support and personal integration support specifically catered to customers with its top-tier subscription.
|
||||||
|
|
||||||
|
Notably, the key distinction between signNow and Sign365 lies in their customer service approach. Sign365 has all customer service operations located in Australia, emphasizing in-person service and prioritizing the customer experience as a primary focus. This approach aligns with Sign365's belief that placing the customer first is paramount. Conversely, signNow has transformed its customer service into a separate paid product, offering enhanced support plans featuring additional channels and improved response times for an extra fee.
|
||||||
|
|
||||||
|
# So which eSignature solution is right for you?
|
||||||
|
|
||||||
|
Both Sign365 and signNow serve as excellent tools that streamline daily operations and reduce the time spent on paperwork. signNow caters best to larger companies seeking a more comprehensive suite of features and willing to make substantial investments. Enterprises benefit from signNow's comprehensive suite that includes AI-driven contract management solutions, advanced compliances, and a wide array of pre-built integrations.
|
||||||
|
|
||||||
|
While signNow remains at the forefront of the market with its comprehensive offerings, Sign365 focuses primarily on creating a great eSignature experience with a ground-up approach to integrations and emphasizing its offline functionality. Sign365's best competing point is their approach to integrations and their offline functionality, aiming to provide a streamlined and user-friendly experience specifically tailored to different business needs.
|
||||||
|
|
||||||
|
The company, Sign365, is steadily broadening its scope within the enterprise segment, continually enhancing its eSignature functionalities, and refining its API for seamless integrations with a broader range of products. It strives to deliver value-added features tailored for organizations of all sizes, aiming to optimize document workflows efficiently.
|
||||||
|
|
||||||
|
For those seeking a more cost-effective alternative to signNow's comprehensive suite, Sign365 offers significant value at a reduced cost. With robust eSignature functionality, high standards of security and compliance, and transparent pricing, Sign365 boasts numerous success stories from satisfied customers who appreciate its focused approach to eSignature solutions.
|
||||||
|
|
||||||
|
# Ready to switch from signNow to Sign365?
|
||||||
|
|
||||||
|
Sign365 ensures a painless transition. You can migrate from signNow to Sign365 hassle-free by contacting our customer support today
|
|
@ -0,0 +1,45 @@
|
||||||
|
---
|
||||||
|
title: "Top 5 Best Document Automation Software"
|
||||||
|
subtitle: "Document automation software is revolutionizing the way businesses create, manage, and distribute documents. With the right tool, you can save time, reduce errors, and improve productivity by automating repetitive tasks involved in document preparation. However, with so many options available, choosing the best one for your needs can be a challenge. To help you make an informed decision, we have rounded up the top 5 best document automation software on the market."
|
||||||
|
date: "2024-01-24"
|
||||||
|
image: "/images/top-5-best-document-automation-software-0.png"
|
||||||
|
---
|
||||||
|
|
||||||
|
Document automation software is revolutionizing the way businesses create, manage, and distribute documents. With the right tool, you can save time, reduce errors, and improve productivity by automating repetitive tasks involved in document preparation. However, with so many options available, choosing the best one for your needs can be a challenge. To help you make an informed decision, we have rounded up the top 5 best document automation software on the market.
|
||||||
|
|
||||||
|
## DocuSign
|
||||||
|
|
||||||
|
DocuSign is a leader in the field of electronic signature technology, but it's also a powerful document automation platform. It streamlines the process of collecting signatures and approvals through automated workflow, making it a staple in contract management and other document-heavy processes.
|
||||||
|
|
||||||
|
- ✅ DocuSign offers a high level of security and is widely accepted for legal documents, with robust compliance standards.
|
||||||
|
- ❌ The pricing might be steep for smaller businesses that only require basic document automation features.
|
||||||
|
|
||||||
|
## PandaDoc
|
||||||
|
|
||||||
|
PandaDoc is not just about getting documents signed; it also offers comprehensive features for creating, tracking, and managing documents across various stages. Designed to accelerate the deal cycle, PandaDoc can produce proposals, quotes, and contracts with ease.
|
||||||
|
|
||||||
|
- ✅ It has a user-friendly interface and a plethora of templates that make document creation a breeze for users at any skill level.
|
||||||
|
- ❌ While the tool is highly versatile, some users may find the template customization options limited compared to other platforms.
|
||||||
|
|
||||||
|
## Zoho Writer
|
||||||
|
|
||||||
|
Part of the Zoho Office Suite, Zoho Writer is a powerful word processor that brings a strong suite of document automation features. Collaborative editing, real-time tracking, and seamless integration with Zoho CRM make it a solid choice for businesses immersed in the Zoho ecosystem.
|
||||||
|
|
||||||
|
- ✅ The affordability and integration with other Zoho apps provide a holistic approach to document automation.
|
||||||
|
- ❌ Those not using other Zoho products might not get the full benefits from its ecosystem-oriented design.
|
||||||
|
|
||||||
|
## Adobe Sign
|
||||||
|
|
||||||
|
From the iconic Adobe family, Adobe Sign focuses on streamlining electronic agreements and approvals with trusted digital signatures. Its integration with Adobe's PDF tools provides a seamless document experience for users familiar with Adobe products.
|
||||||
|
|
||||||
|
- ✅ Adobe Sign's widespread recognition and trust factor make it a go-to for businesses that prioritize brand reputation and universal c\* ompatibility.
|
||||||
|
❌ The software might be overwhelming for those who only need basic document automation and do not require the powerful suite of Adobe features.
|
||||||
|
|
||||||
|
## Formstack Documents (formerly WebMerge)
|
||||||
|
|
||||||
|
Formstack Documents specializes in generating personalized, on-demand documents. It can pull data from numerous sources, including CRM systems, to automate document creation for various purposes such as invoices, reports, and more.
|
||||||
|
|
||||||
|
- ✅ The ability to connect with numerous data sources ensures that Formstack Documents can adapt to many business processes and workflows.
|
||||||
|
- ❌ There can be a learning curve to mastering the full capabilities of the software, and the cost may be a factor for smaller operations.
|
||||||
|
|
||||||
|
Choosing the best document automation software requires you to consider your specific needs, budget, and the level of complexity you can handle. Whether you prioritize ease of use, specific features, or integration with your current systems, there's a solution out there that can automate your documents efficiently and effectively. Start with these top contenders, and you'll be on your way to a more streamlined, productive business in no time.
|
|
@ -0,0 +1,26 @@
|
||||||
|
---
|
||||||
|
title: "Your Forms On Sign365 In 5 Minutes"
|
||||||
|
subtitle: "In the dynamic landscape of labor hire, efficiency is paramount, and innovation is the key to staying ahead. As forward-thinking pioneers in the industry, your commitment to streamlining processes is crucial. One way to achieve this is by leveraging the power of free templates and creating customized forms that meet the unique needs of your labor hire company. If you are interested in doing this keep reading and we will give you a special template to help you get started in your form filling."
|
||||||
|
date: "2024-01-22"
|
||||||
|
image: "/images/your-forms-on-sign365-in-5-minutes-0.png"
|
||||||
|
---
|
||||||
|
|
||||||
|
Are you tired of the tedious task of managing PDFs? At Sign 365, we understand that your time is valuable, which is why we've revolutionized the upload and management process with our seamless offline form software. Our platform is designed to simplify your document workflow, making it more efficient and less time-consuming. Check out the video below
|
||||||
|
|
||||||
|
<div align="left">
|
||||||
|
<a href="https://youtu.be/spkfiKSGqOQ">
|
||||||
|
<img src="https://img.youtube.com/vi/spkfiKSGqOQ/0.jpg" style="width:75%;margin:0 auto;">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
Our intuitive S365 Admin Center is the epitome of simplicity and forward-thinking design. When you first join, you'll be greeted with an easy-to-navigate interface that guides you to access your templates with just a few clicks. This streamlined approach ensures that setting up forms is a matter of minutes, not hours.
|
||||||
|
|
||||||
|
With a variety of templates already available, you can manage each one with a set of customizable rules. The platform also offers select features such as bulk forwarding, which is a pioneer in offline form automation. This means that every time a form is submitted, it can be automatically forwarded to a designated email address, ensuring you never miss out on important submissions.
|
||||||
|
|
||||||
|
Moreover, our offline form software allows you to enable or disable rules with ease, giving you complete control over your document workflow. And if you're in need of a template, we've got you covered with free templates provided for training purposes.
|
||||||
|
|
||||||
|
Uploading a new template is as simple as a few clicks, and just like that, you have a fully functional offline form ready to use. This is the power of Sign 365 - we make offline google forms management a breeze.
|
||||||
|
|
||||||
|
If you've been struggling with other systems or are looking for a more efficient way to manage your PDFs, Sign 365 is the solution you've been searching for. Our platform is not just about managing forms; it's about simplifying your entire document workflow.
|
||||||
|
|
||||||
|
Try it out and experience the difference for yourself. With Sign 365, managing offline forms is no longer a chore; it's a seamless, streamlined process that saves you time and hassle. Say goodbye to the mundane and hello to the future of offline form automation with Sign 365. Cheers to a simpler document management experience!
|
|
@ -0,0 +1,33 @@
|
||||||
|
import React from "react";
|
||||||
|
|
||||||
|
import { PostMetadata } from "@/types";
|
||||||
|
import Image from "next/image";
|
||||||
|
import Link from "next/link";
|
||||||
|
|
||||||
|
function BlogCard({ title, slug, subtitle, image }: PostMetadata) {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Link
|
||||||
|
href={`/blogs/${slug}`}
|
||||||
|
className="w-52 md:w-64 md:max-w-[300px] h-fit flex flex-col items-center flex-auto"
|
||||||
|
>
|
||||||
|
<div className="w-full aspect-[4/3] bg-slate-400 rounded-lg overflow-hidden relative">
|
||||||
|
<Image
|
||||||
|
src={image}
|
||||||
|
alt={title}
|
||||||
|
className="w-full h-full object-cover"
|
||||||
|
fill
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="w-full h-2/5 ">
|
||||||
|
<h1 className="h3 pt-4 pb-2 xl:pt-8 text-black dark:text-white">
|
||||||
|
{title}
|
||||||
|
</h1>
|
||||||
|
<p className="text-black dark:text-white">{subtitle}</p>
|
||||||
|
</div>
|
||||||
|
</Link>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default BlogCard;
|
|
@ -0,0 +1,61 @@
|
||||||
|
import { ModalStatus } from "@/types";
|
||||||
|
import React from "react";
|
||||||
|
|
||||||
|
interface ButtonProps {
|
||||||
|
status: ModalStatus;
|
||||||
|
text: string;
|
||||||
|
}
|
||||||
|
export const Button = ({ status, text }: ButtonProps) => {
|
||||||
|
const className = (() => {
|
||||||
|
switch (status) {
|
||||||
|
case ModalStatus.Loading:
|
||||||
|
return "btn text-purple-default bg-white hover:bg-white shadow disabled:text-white disabled:shadow-none";
|
||||||
|
|
||||||
|
case ModalStatus.Success:
|
||||||
|
return "btn text-purple-default bg-white hover:bg-white shadow disabled:text-white disabled:shadow-none";
|
||||||
|
|
||||||
|
case ModalStatus.Default:
|
||||||
|
return "btn text-purple-default bg-white hover:bg-white shadow";
|
||||||
|
|
||||||
|
default:
|
||||||
|
return "btn text-purple-default bg-white hover:bg-white shadow";
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
return (
|
||||||
|
<button
|
||||||
|
type="submit"
|
||||||
|
className={className}
|
||||||
|
disabled={
|
||||||
|
status === ModalStatus.Success || status === ModalStatus.Loading
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{status === ModalStatus.Loading ? (
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="none"
|
||||||
|
className="animate-spin -ml-1 mr-3 h-5 w-5 text-white"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
>
|
||||||
|
<circle
|
||||||
|
cx="12"
|
||||||
|
cy="12"
|
||||||
|
r="10"
|
||||||
|
stroke="currentColor"
|
||||||
|
strokeWidth="4"
|
||||||
|
className="opacity-25"
|
||||||
|
></circle>
|
||||||
|
<path
|
||||||
|
fill="currentColor"
|
||||||
|
d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
|
||||||
|
className="opacity-75"
|
||||||
|
></path>
|
||||||
|
</svg>
|
||||||
|
) : (
|
||||||
|
<></>
|
||||||
|
)}
|
||||||
|
{text}
|
||||||
|
</button>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Button;
|
|
@ -0,0 +1,61 @@
|
||||||
|
import Link from "next/link";
|
||||||
|
import React from "react";
|
||||||
|
|
||||||
|
const FAQQuestion = ({
|
||||||
|
title,
|
||||||
|
children,
|
||||||
|
}: {
|
||||||
|
title: string;
|
||||||
|
children: React.ReactNode;
|
||||||
|
}) => {
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className="hs-accordion hs-accordion-active:bg-gray-100 rounded-xl p-6 dark:hs-accordion-active:bg-white/[.05] active"
|
||||||
|
id="hs-basic-with-title-and-arrow-stretched-heading-one"
|
||||||
|
>
|
||||||
|
<button
|
||||||
|
className="hs-accordion-toggle group pb-3 inline-flex items-center justify-between gap-x-3 w-full md:text-lg font-semibold text-start text-gray-800 rounded-lg transition hover:text-gray-500 dark:text-gray-200 dark:hover:text-gray-400 dark:focus:outline-none"
|
||||||
|
aria-controls="hs-basic-with-title-and-arrow-stretched-collapse-one"
|
||||||
|
>
|
||||||
|
{title}
|
||||||
|
<svg
|
||||||
|
className="hs-accordion-active:hidden block flex-shrink-0 w-5 h-5 text-gray-600 group-hover:text-gray-500 dark:text-gray-400"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
strokeWidth="2"
|
||||||
|
strokeLinecap="round"
|
||||||
|
strokeLinejoin="round"
|
||||||
|
>
|
||||||
|
<path d="m6 9 6 6 6-6" />
|
||||||
|
</svg>
|
||||||
|
<svg
|
||||||
|
className="hs-accordion-active:block hidden flex-shrink-0 w-5 h-5 text-gray-600 group-hover:text-gray-500 dark:text-gray-400"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
strokeWidth="2"
|
||||||
|
strokeLinecap="round"
|
||||||
|
strokeLinejoin="round"
|
||||||
|
>
|
||||||
|
<path d="m18 15-6-6-6 6" />
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
<div
|
||||||
|
id="hs-basic-with-title-and-arrow-stretched-collapse-one"
|
||||||
|
className="hs-accordion-content w-full overflow-hidden transition-[height] duration-300"
|
||||||
|
aria-labelledby="hs-basic-with-title-and-arrow-stretched-heading-one"
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default FAQQuestion;
|
|
@ -0,0 +1,29 @@
|
||||||
|
import React from "react";
|
||||||
|
import Logo from "../sections/Logo";
|
||||||
|
|
||||||
|
function Footer() {
|
||||||
|
return (
|
||||||
|
<footer>
|
||||||
|
<div className="py-12 md:py-16">
|
||||||
|
<div className="max-w-6xl mx-auto px-4 sm:px-6" data-aos="fade-up">
|
||||||
|
{/* Bottom area */}
|
||||||
|
<div className="flex items-center justify-center">
|
||||||
|
{/* Social links */}
|
||||||
|
<ul className="flex md:order-1 md:mb-0 justify-center">
|
||||||
|
<li>
|
||||||
|
<Logo label="YouTube" />
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Copyrights note */}
|
||||||
|
<div className="text-gray-400 text-xs text-center dark:text-white mt-2">
|
||||||
|
© 2024 Sign365.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Footer;
|
|
@ -0,0 +1,46 @@
|
||||||
|
"use client";
|
||||||
|
|
||||||
|
import React, { useEffect, useState } from "react";
|
||||||
|
import { Subscription, User } from "@/types";
|
||||||
|
import { getSubscriptions } from "@/app/(auth)/actions";
|
||||||
|
import { useRouter } from "next/navigation";
|
||||||
|
|
||||||
|
interface GetStartedSectionButtonProps {
|
||||||
|
user: User;
|
||||||
|
}
|
||||||
|
export const GetStartedSectionButton = ({
|
||||||
|
user,
|
||||||
|
}: GetStartedSectionButtonProps) => {
|
||||||
|
const router = useRouter();
|
||||||
|
const portalWebsite = process.env
|
||||||
|
.NEXT_PUBLIC_PORTAL_SIGN365_WEBSITE as string;
|
||||||
|
const [subscription, setSubscription] = useState<Subscription>();
|
||||||
|
useEffect(() => {
|
||||||
|
(async () => {
|
||||||
|
if (!user) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const subscriptions = await getSubscriptions();
|
||||||
|
if (subscriptions.length > 0) {
|
||||||
|
setSubscription(subscriptions[0]);
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
}, [user]);
|
||||||
|
|
||||||
|
return subscription ? (
|
||||||
|
<a href={portalWebsite}>
|
||||||
|
<button className="btn text-base capitalize !rounded-md text-white bg-bg-gray-925 hover:bg-gray-900 w-full sm:w-auto mt-8">
|
||||||
|
Management Portal
|
||||||
|
</button>
|
||||||
|
</a>
|
||||||
|
) : (
|
||||||
|
<button
|
||||||
|
onClick={() => router.push("/pricing")}
|
||||||
|
className="px-10 py-2 text-base capitalize !rounded-3xl text-white bg-gradient-to-r from-pink-default to-purple-default hover:bg-gray-900 w-full sm:w-auto"
|
||||||
|
>
|
||||||
|
Upgrade
|
||||||
|
</button>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default GetStartedSectionButton;
|
|
@ -0,0 +1,24 @@
|
||||||
|
import Script from "next/script";
|
||||||
|
|
||||||
|
const GoogleAnalytics = ({ ga_id }: { ga_id: string }) => (
|
||||||
|
<>
|
||||||
|
<Script
|
||||||
|
async
|
||||||
|
src={`https://www.googletagmanager.com/gtag/js?
|
||||||
|
id=${ga_id}`}
|
||||||
|
></Script>
|
||||||
|
<Script
|
||||||
|
id="google-analytics"
|
||||||
|
dangerouslySetInnerHTML={{
|
||||||
|
__html: `
|
||||||
|
window.dataLayer = window.dataLayer || [];
|
||||||
|
function gtag(){dataLayer.push(arguments);}
|
||||||
|
gtag('js', new Date());
|
||||||
|
|
||||||
|
gtag('config', '${ga_id}');
|
||||||
|
`,
|
||||||
|
}}
|
||||||
|
></Script>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
export default GoogleAnalytics;
|
|
@ -0,0 +1,88 @@
|
||||||
|
"use client";
|
||||||
|
|
||||||
|
import React from "react";
|
||||||
|
import Navigation from "./Navigation";
|
||||||
|
import ModalSignUp from "@/sections/ModalSignUp/ModalSignUp";
|
||||||
|
import ModalSignIn from "@/sections/ModalSignIn/ModalSignIn";
|
||||||
|
import { logout } from "@/app/(auth)/actions";
|
||||||
|
import { useRouter } from "next/navigation";
|
||||||
|
import { getAuthCookie } from "@/app/(auth)/actions";
|
||||||
|
import { SourceModal } from "@/types";
|
||||||
|
import { AppRouterInstance } from "next/dist/shared/lib/app-router-context.shared-runtime";
|
||||||
|
import pb from "@/lib/pocketbase";
|
||||||
|
|
||||||
|
interface HeaderProps {
|
||||||
|
isUserLoggedIn: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
const signUpButton = {
|
||||||
|
onClick: () => {
|
||||||
|
document
|
||||||
|
.getElementById("sign-up-modal")
|
||||||
|
?.setAttribute("name", SourceModal.SignUp);
|
||||||
|
document.getElementById("sign-up-modal")?.removeAttribute("price_id");
|
||||||
|
document.getElementById("sign-up-modal")?.click();
|
||||||
|
},
|
||||||
|
text: "Sign Up",
|
||||||
|
buttonColor: "bg-pink-700",
|
||||||
|
buttonHover: "hover:bg-pink-700",
|
||||||
|
};
|
||||||
|
const signOutButton = {
|
||||||
|
onClick: () => logout(),
|
||||||
|
text: "Logout",
|
||||||
|
buttonColor: "bg-red-300",
|
||||||
|
buttonHover: "hover:bg-red-600",
|
||||||
|
};
|
||||||
|
const signInButton = {
|
||||||
|
onClick: async (router?: AppRouterInstance) => {
|
||||||
|
const authCookie = await getAuthCookie();
|
||||||
|
pb.authStore.loadFromCookie(authCookie || "");
|
||||||
|
if (!authCookie || !pb.authStore.isValid) {
|
||||||
|
document.getElementById("sign-in-modal")?.setAttribute("name", "signIn");
|
||||||
|
document.getElementById("sign-in-modal")?.click();
|
||||||
|
} else {
|
||||||
|
router?.push("/account");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
text: "SignIn",
|
||||||
|
buttonColor: "text-pink-500",
|
||||||
|
buttonHover: "hover:text-pink-700",
|
||||||
|
};
|
||||||
|
function Header({ isUserLoggedIn }: HeaderProps) {
|
||||||
|
const router = useRouter();
|
||||||
|
const button = isUserLoggedIn ? signOutButton : signUpButton;
|
||||||
|
return (
|
||||||
|
<header className="absolute w-full z-30">
|
||||||
|
<div className="max-w-5xl mx-auto px-4 sm:px-6 md:pt-6">
|
||||||
|
<div className="flex items-center justify-between h-20">
|
||||||
|
<Navigation isUserLoggedIn={isUserLoggedIn} />
|
||||||
|
|
||||||
|
{/* Desktop navigation */}
|
||||||
|
<nav className=" md:flex md:grow">
|
||||||
|
{/* Desktop sign in links */}
|
||||||
|
<div className="flex flex-row grow items-center pr-2">
|
||||||
|
{!isUserLoggedIn && (
|
||||||
|
<button
|
||||||
|
onClick={() => signInButton.onClick(router)}
|
||||||
|
className={`btn-sm cursor-pointer rounded py-5 w-24 ${signInButton.buttonColor} ${signInButton.buttonHover}`}
|
||||||
|
>
|
||||||
|
{signInButton.text}
|
||||||
|
</button>
|
||||||
|
)}
|
||||||
|
<button
|
||||||
|
onClick={button.onClick}
|
||||||
|
className={`btn-sm cursor-pointer rounded py-5 w-24 text-white ml-3 ${button.buttonColor} ${button.buttonHover}`}
|
||||||
|
>
|
||||||
|
{button.text}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<ModalSignIn />
|
||||||
|
<ModalSignUp />
|
||||||
|
</header>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Header;
|
|
@ -0,0 +1,101 @@
|
||||||
|
"use client";
|
||||||
|
|
||||||
|
import Logo from "@/sections/Logo";
|
||||||
|
import React, { useState } from "react";
|
||||||
|
import { Menu } from "@styled-icons/entypo/Menu";
|
||||||
|
import Link from "next/link";
|
||||||
|
|
||||||
|
function Navigation({ isUserLoggedIn }: { isUserLoggedIn: boolean }) {
|
||||||
|
const [checked, setChecked] = useState<boolean>();
|
||||||
|
const handleClick = () => {
|
||||||
|
checked ? setChecked(!checked) : setChecked(checked);
|
||||||
|
};
|
||||||
|
return (
|
||||||
|
<div className="drawer">
|
||||||
|
<input
|
||||||
|
id="my-drawer-3"
|
||||||
|
type="checkbox"
|
||||||
|
className="drawer-toggle "
|
||||||
|
checked={checked}
|
||||||
|
/>
|
||||||
|
<div className="drawer-content flex flex-col">
|
||||||
|
{/* Navbar */}
|
||||||
|
<div className="w-full navbar">
|
||||||
|
<div className="flex-none lg:hidden">
|
||||||
|
<label htmlFor="my-drawer-3">
|
||||||
|
<Menu
|
||||||
|
size={36}
|
||||||
|
className="self-center w-full h-full cursor-pointer fill-black dark:fill-white"
|
||||||
|
/>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="flex-none hidden lg:block">
|
||||||
|
<ul className="menu menu-horizontal items-center">
|
||||||
|
{/* Site branding */}
|
||||||
|
<div className="shrink-0 mr-4">
|
||||||
|
{/* Logo */}
|
||||||
|
<Logo />
|
||||||
|
</div>
|
||||||
|
{/* Navbar menu content here */}
|
||||||
|
<li>
|
||||||
|
<Link href="/pricing" onClick={handleClick}>
|
||||||
|
Pricing
|
||||||
|
</Link>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<Link href="/blogs" onClick={handleClick}>
|
||||||
|
Blogs
|
||||||
|
</Link>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="https://climate.stripe.com/r7FSQz">Climate</a>
|
||||||
|
</li>
|
||||||
|
{isUserLoggedIn ? (
|
||||||
|
<li>
|
||||||
|
<Link href="/account" onClick={handleClick}>
|
||||||
|
Account
|
||||||
|
</Link>
|
||||||
|
</li>
|
||||||
|
) : (
|
||||||
|
<></>
|
||||||
|
)}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{/* Page content here */}
|
||||||
|
</div>
|
||||||
|
<div className="drawer-side">
|
||||||
|
<label htmlFor="my-drawer-3" className="drawer-overlay"></label>
|
||||||
|
|
||||||
|
<ul className="menu w-80 h-full bg-base-200">
|
||||||
|
{/* Sidebar content here */}
|
||||||
|
<div className="shrink-0 m-3">
|
||||||
|
{/* Logo */}
|
||||||
|
<Logo />
|
||||||
|
</div>
|
||||||
|
<li>
|
||||||
|
<Link href="/pricing">Pricing</Link>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<Link href="/blogs">Blogs</Link>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="https://climate.stripe.com/r7FSQz">Climate</a>
|
||||||
|
</li>
|
||||||
|
{isUserLoggedIn ? (
|
||||||
|
<li>
|
||||||
|
<Link href="/account" onClick={handleClick}>
|
||||||
|
Account
|
||||||
|
</Link>
|
||||||
|
</li>
|
||||||
|
) : (
|
||||||
|
<></>
|
||||||
|
)}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Navigation;
|
|
@ -0,0 +1,27 @@
|
||||||
|
"use client";
|
||||||
|
|
||||||
|
import { usePathname } from "next/navigation";
|
||||||
|
import { useEffect } from "react";
|
||||||
|
|
||||||
|
import { IStaticMethods } from "preline/preline";
|
||||||
|
declare global {
|
||||||
|
interface Window {
|
||||||
|
HSStaticMethods: IStaticMethods;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function PrelineScript() {
|
||||||
|
const path = usePathname();
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
import("preline/preline");
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setTimeout(() => {
|
||||||
|
window?.HSStaticMethods?.autoInit();
|
||||||
|
}, 100);
|
||||||
|
}, [path]);
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
import React, { useState } from "react";
|
||||||
|
|
||||||
|
import { MediaPlayer, MediaProvider } from "@vidstack/react";
|
||||||
|
import {
|
||||||
|
DefaultAudioLayout,
|
||||||
|
defaultLayoutIcons,
|
||||||
|
DefaultVideoLayout,
|
||||||
|
} from "@vidstack/react/player/layouts/default";
|
||||||
|
import "@vidstack/react/player/styles/base.css";
|
||||||
|
export type Props = {
|
||||||
|
videotitle: string;
|
||||||
|
video: string;
|
||||||
|
width: number;
|
||||||
|
height: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function YouTubeFrame({ video, width, height }: Props) {
|
||||||
|
return (
|
||||||
|
<MediaPlayer
|
||||||
|
className="w-full aspect-video bg-slate-900 text-white font-sans overflow-hidden rounded-xl ring-media-focus data-[focus]:ring-4"
|
||||||
|
title="Sprite Fight"
|
||||||
|
src="youtube/KCHnP62DWpg"
|
||||||
|
controls
|
||||||
|
>
|
||||||
|
<MediaProvider />
|
||||||
|
<DefaultAudioLayout icons={defaultLayoutIcons} />
|
||||||
|
<DefaultVideoLayout
|
||||||
|
icons={defaultLayoutIcons}
|
||||||
|
thumbnails="https://media-files.vidstack.io/thumbnails.vtt"
|
||||||
|
/>
|
||||||
|
</MediaPlayer>
|
||||||
|
);
|
||||||
|
}
|
|
@ -0,0 +1,572 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html
|
||||||
|
xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:v="urn:schemas-microsoft-com:vml"
|
||||||
|
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||||
|
>
|
||||||
|
<head>
|
||||||
|
<title> </title>
|
||||||
|
<!--[if !mso]><!-->
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||||
|
<!--<![endif]-->
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<style type="text/css">
|
||||||
|
#outlook a {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
-webkit-text-size-adjust: 100%;
|
||||||
|
-ms-text-size-adjust: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
table,
|
||||||
|
td {
|
||||||
|
border-collapse: collapse;
|
||||||
|
mso-table-lspace: 0pt;
|
||||||
|
mso-table-rspace: 0pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
border: 0;
|
||||||
|
height: auto;
|
||||||
|
line-height: 100%;
|
||||||
|
outline: none;
|
||||||
|
text-decoration: none;
|
||||||
|
-ms-interpolation-mode: bicubic;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
display: block;
|
||||||
|
margin: 13px 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<!--[if mso]>
|
||||||
|
<noscript>
|
||||||
|
<xml>
|
||||||
|
<o:OfficeDocumentSettings>
|
||||||
|
<o:AllowPNG />
|
||||||
|
<o:PixelsPerInch>96</o:PixelsPerInch>
|
||||||
|
</o:OfficeDocumentSettings>
|
||||||
|
</xml>
|
||||||
|
</noscript>
|
||||||
|
<![endif]-->
|
||||||
|
<!--[if lte mso 11]>
|
||||||
|
<style type="text/css">
|
||||||
|
.mj-outlook-group-fix {
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<![endif]-->
|
||||||
|
<!--[if !mso]><!-->
|
||||||
|
<link
|
||||||
|
href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700"
|
||||||
|
rel="stylesheet"
|
||||||
|
type="text/css"
|
||||||
|
/>
|
||||||
|
<style type="text/css">
|
||||||
|
@import url(https://fonts.googleapis.com/css?family=Roboto:300,400,500,700);
|
||||||
|
</style>
|
||||||
|
<!--<![endif]-->
|
||||||
|
<style type="text/css">
|
||||||
|
@media only screen and (min-width: 480px) {
|
||||||
|
.mj-column-per-100 {
|
||||||
|
width: 100% !important;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<style media="screen and (min-width:480px)">
|
||||||
|
.moz-text-html .mj-column-per-100 {
|
||||||
|
width: 100% !important;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<style type="text/css">
|
||||||
|
@media only screen and (max-width: 480px) {
|
||||||
|
table.mj-full-width-mobile {
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.mj-full-width-mobile {
|
||||||
|
width: auto !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body style="word-spacing: normal; background-color: #f4f4f4">
|
||||||
|
<div style="background-color: #f4f4f4">
|
||||||
|
<!--[if mso | IE]><table align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600" bgcolor="#151719" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]-->
|
||||||
|
<div
|
||||||
|
style="
|
||||||
|
background: #151719;
|
||||||
|
background-color: #151719;
|
||||||
|
margin: 0px auto;
|
||||||
|
max-width: 600px;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<table
|
||||||
|
align="center"
|
||||||
|
border="0"
|
||||||
|
cellpadding="0"
|
||||||
|
cellspacing="0"
|
||||||
|
role="presentation"
|
||||||
|
style="background: #151719; background-color: #151719; width: 100%"
|
||||||
|
>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td
|
||||||
|
style="
|
||||||
|
direction: ltr;
|
||||||
|
font-size: 0px;
|
||||||
|
padding: 20px 0;
|
||||||
|
text-align: center;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:top;width:600px;" ><![endif]-->
|
||||||
|
<div
|
||||||
|
class="mj-column-per-100 mj-outlook-group-fix"
|
||||||
|
style="
|
||||||
|
font-size: 0px;
|
||||||
|
text-align: left;
|
||||||
|
direction: ltr;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
width: 100%;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<table
|
||||||
|
border="0"
|
||||||
|
cellpadding="0"
|
||||||
|
cellspacing="0"
|
||||||
|
role="presentation"
|
||||||
|
style="vertical-align: top"
|
||||||
|
width="100%"
|
||||||
|
>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td
|
||||||
|
align="center"
|
||||||
|
style="
|
||||||
|
font-size: 0px;
|
||||||
|
padding: 10px 25px;
|
||||||
|
padding-bottom: 30px;
|
||||||
|
word-break: break-word;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<table
|
||||||
|
border="0"
|
||||||
|
cellpadding="0"
|
||||||
|
cellspacing="0"
|
||||||
|
role="presentation"
|
||||||
|
style="
|
||||||
|
border-collapse: collapse;
|
||||||
|
border-spacing: 0px;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td style="width: 180px">
|
||||||
|
<img
|
||||||
|
height="auto"
|
||||||
|
src="https://lh3.googleusercontent.com/nFUBkvMXR0QLeykUdweUzEu5gzHk601Cg3Ld64E8PpEV19VeKk9AkfBev61Es4D8Uig=w1800"
|
||||||
|
style="
|
||||||
|
border: none;
|
||||||
|
display: block;
|
||||||
|
outline: none;
|
||||||
|
text-decoration: none;
|
||||||
|
height: auto;
|
||||||
|
width: 100%;
|
||||||
|
font-size: 13px;
|
||||||
|
"
|
||||||
|
title=""
|
||||||
|
width="180"
|
||||||
|
/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td
|
||||||
|
align="left"
|
||||||
|
style="
|
||||||
|
font-size: 0px;
|
||||||
|
padding: 10px 25px;
|
||||||
|
padding-top: 0px;
|
||||||
|
padding-bottom: 0px;
|
||||||
|
word-break: break-word;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
style="
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
font-size: 13px;
|
||||||
|
line-height: 22px;
|
||||||
|
text-align: left;
|
||||||
|
color: #55575d;
|
||||||
|
"
|
||||||
|
></div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--[if mso | IE]></td></tr></table><![endif]-->
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--[if mso | IE]></td></tr></table><table align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600" bgcolor="#151719" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]-->
|
||||||
|
<div
|
||||||
|
style="
|
||||||
|
background: #151719;
|
||||||
|
background-color: #151719;
|
||||||
|
margin: 0px auto;
|
||||||
|
max-width: 600px;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<table
|
||||||
|
align="center"
|
||||||
|
border="0"
|
||||||
|
cellpadding="0"
|
||||||
|
cellspacing="0"
|
||||||
|
role="presentation"
|
||||||
|
style="background: #151719; background-color: #151719; width: 100%"
|
||||||
|
>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td
|
||||||
|
style="
|
||||||
|
direction: ltr;
|
||||||
|
font-size: 0px;
|
||||||
|
padding: 0 0 0 0;
|
||||||
|
text-align: center;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:top;width:600px;" ><![endif]-->
|
||||||
|
<div
|
||||||
|
class="mj-column-per-100 mj-outlook-group-fix"
|
||||||
|
style="
|
||||||
|
font-size: 0px;
|
||||||
|
text-align: left;
|
||||||
|
direction: ltr;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
width: 100%;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<table
|
||||||
|
border="0"
|
||||||
|
cellpadding="0"
|
||||||
|
cellspacing="0"
|
||||||
|
role="presentation"
|
||||||
|
style="vertical-align: top"
|
||||||
|
width="100%"
|
||||||
|
>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td
|
||||||
|
align="center"
|
||||||
|
style="
|
||||||
|
font-size: 0px;
|
||||||
|
padding: 0px 25px;
|
||||||
|
padding-right: 0px;
|
||||||
|
padding-bottom: 0px;
|
||||||
|
padding-left: 0px;
|
||||||
|
word-break: break-word;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<table
|
||||||
|
border="0"
|
||||||
|
cellpadding="0"
|
||||||
|
cellspacing="0"
|
||||||
|
role="presentation"
|
||||||
|
style="
|
||||||
|
border-collapse: collapse;
|
||||||
|
border-spacing: 0px;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td style="width: 600px">
|
||||||
|
<img
|
||||||
|
height="auto"
|
||||||
|
src="https://lh6.googleusercontent.com/7BpAy4Uh4sYeFpeU2DIQg7vBAmIE5zNmQHSOickHbTxcz1yl6DSf3gL_Ru-TXzgCJVY=w2400"
|
||||||
|
style="
|
||||||
|
border: none;
|
||||||
|
display: block;
|
||||||
|
outline: none;
|
||||||
|
text-decoration: none;
|
||||||
|
height: auto;
|
||||||
|
width: 100%;
|
||||||
|
font-size: 13px;
|
||||||
|
"
|
||||||
|
title=""
|
||||||
|
width="600"
|
||||||
|
/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--[if mso | IE]></td></tr></table><![endif]-->
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--[if mso | IE]></td></tr></table><table align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600" bgcolor="#151719" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]-->
|
||||||
|
<div
|
||||||
|
style="
|
||||||
|
background: #151719;
|
||||||
|
background-color: #151719;
|
||||||
|
margin: 0px auto;
|
||||||
|
max-width: 600px;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<table
|
||||||
|
align="center"
|
||||||
|
border="0"
|
||||||
|
cellpadding="0"
|
||||||
|
cellspacing="0"
|
||||||
|
role="presentation"
|
||||||
|
style="background: #151719; background-color: #151719; width: 100%"
|
||||||
|
>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td
|
||||||
|
style="
|
||||||
|
direction: ltr;
|
||||||
|
font-size: 0px;
|
||||||
|
padding: 0 0 0 0;
|
||||||
|
text-align: center;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:top;width:600px;" ><![endif]-->
|
||||||
|
<div
|
||||||
|
class="mj-column-per-100 mj-outlook-group-fix"
|
||||||
|
style="
|
||||||
|
font-size: 0px;
|
||||||
|
text-align: left;
|
||||||
|
direction: ltr;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
width: 100%;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<table
|
||||||
|
border="0"
|
||||||
|
cellpadding="0"
|
||||||
|
cellspacing="0"
|
||||||
|
role="presentation"
|
||||||
|
style="vertical-align: top"
|
||||||
|
width="100%"
|
||||||
|
>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td
|
||||||
|
align="left"
|
||||||
|
style="
|
||||||
|
font-size: 0px;
|
||||||
|
padding: 10px 25px;
|
||||||
|
padding-top: 25px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
word-break: break-word;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
style="
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
font-size: 13px;
|
||||||
|
line-height: 22px;
|
||||||
|
text-align: left;
|
||||||
|
color: #55575d;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<p
|
||||||
|
style="
|
||||||
|
line-height: 60px;
|
||||||
|
text-align: center;
|
||||||
|
margin: 10px 0;
|
||||||
|
font-size: 55px;
|
||||||
|
color: #fcfcfc;
|
||||||
|
font-family: 'Roboto', Helvetica, Arial,
|
||||||
|
sans-serif;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<b>Thanks For Booking</b>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td
|
||||||
|
align="left"
|
||||||
|
style="
|
||||||
|
font-size: 0px;
|
||||||
|
padding: 10px 25px;
|
||||||
|
padding-top: 0px;
|
||||||
|
padding-bottom: 20px;
|
||||||
|
word-break: break-word;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
style="
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
font-size: 13px;
|
||||||
|
line-height: 22px;
|
||||||
|
text-align: left;
|
||||||
|
color: #55575d;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<p
|
||||||
|
style="
|
||||||
|
line-height: 30px;
|
||||||
|
text-align: center;
|
||||||
|
margin: 10px 0;
|
||||||
|
color: #f5f5f5;
|
||||||
|
font-size: 25px;
|
||||||
|
font-family: 'Roboto', Helvetica, Arial,
|
||||||
|
sans-serif;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<b>Our Sales People Will Be In Touch!</b
|
||||||
|
><br /><span
|
||||||
|
style="
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 18px;
|
||||||
|
font-family: 'Roboto', Helvetica, Arial,
|
||||||
|
sans-serif;
|
||||||
|
"
|
||||||
|
>We know you are going to love Sign365!</span
|
||||||
|
>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--[if mso | IE]></td></tr></table><![endif]-->
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--[if mso | IE]></td></tr></table><table align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600" bgcolor="#151719" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]-->
|
||||||
|
<div
|
||||||
|
style="
|
||||||
|
background: #151719;
|
||||||
|
background-color: #151719;
|
||||||
|
margin: 0px auto;
|
||||||
|
max-width: 600px;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<table
|
||||||
|
align="center"
|
||||||
|
border="0"
|
||||||
|
cellpadding="0"
|
||||||
|
cellspacing="0"
|
||||||
|
role="presentation"
|
||||||
|
style="background: #151719; background-color: #151719; width: 100%"
|
||||||
|
>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td
|
||||||
|
style="
|
||||||
|
direction: ltr;
|
||||||
|
font-size: 0px;
|
||||||
|
padding: 0 0 0 0;
|
||||||
|
padding-bottom: 40px;
|
||||||
|
text-align: center;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:top;width:600px;" ><![endif]-->
|
||||||
|
<div
|
||||||
|
class="mj-column-per-100 mj-outlook-group-fix"
|
||||||
|
style="
|
||||||
|
font-size: 0px;
|
||||||
|
text-align: left;
|
||||||
|
direction: ltr;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
width: 100%;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<table
|
||||||
|
border="0"
|
||||||
|
cellpadding="0"
|
||||||
|
cellspacing="0"
|
||||||
|
role="presentation"
|
||||||
|
style="vertical-align: top"
|
||||||
|
width="100%"
|
||||||
|
>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td
|
||||||
|
align="left"
|
||||||
|
style="
|
||||||
|
font-size: 0px;
|
||||||
|
padding: 10px 25px;
|
||||||
|
padding-top: 5px;
|
||||||
|
padding-bottom: 0px;
|
||||||
|
word-break: break-word;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
style="
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
font-size: 13px;
|
||||||
|
line-height: 22px;
|
||||||
|
text-align: left;
|
||||||
|
color: #55575d;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<p
|
||||||
|
style="
|
||||||
|
line-height: 16px;
|
||||||
|
text-align: center;
|
||||||
|
margin: 10px 0;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #ffffff;
|
||||||
|
font-family: 'Times New Roman', Helvetica, Arial,
|
||||||
|
sans-serif;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
Unit 5 17-19 Foundry Rd, Midland, 6056, Western
|
||||||
|
Australia <br /><span
|
||||||
|
style="
|
||||||
|
color: #ffffff;
|
||||||
|
font-family: 'Times New Roman', Helvetica,
|
||||||
|
Arial, sans-serif;
|
||||||
|
"
|
||||||
|
>© Sign365 2024</span
|
||||||
|
>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--[if mso | IE]></td></tr></table><![endif]-->
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--[if mso | IE]></td></tr></table><![endif]-->
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,270 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml"
|
||||||
|
xmlns:o="urn:schemas-microsoft-com:office:office">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>
|
||||||
|
</title>
|
||||||
|
<!--[if !mso]><!-->
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<!--<![endif]-->
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<style type="text/css">
|
||||||
|
#outlook a {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
-webkit-text-size-adjust: 100%;
|
||||||
|
-ms-text-size-adjust: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
table,
|
||||||
|
td {
|
||||||
|
border-collapse: collapse;
|
||||||
|
mso-table-lspace: 0pt;
|
||||||
|
mso-table-rspace: 0pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
border: 0;
|
||||||
|
height: auto;
|
||||||
|
line-height: 100%;
|
||||||
|
outline: none;
|
||||||
|
text-decoration: none;
|
||||||
|
-ms-interpolation-mode: bicubic;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
display: block;
|
||||||
|
margin: 13px 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<!--[if mso]>
|
||||||
|
<noscript>
|
||||||
|
<xml>
|
||||||
|
<o:OfficeDocumentSettings>
|
||||||
|
<o:AllowPNG/>
|
||||||
|
<o:PixelsPerInch>96</o:PixelsPerInch>
|
||||||
|
</o:OfficeDocumentSettings>
|
||||||
|
</xml>
|
||||||
|
</noscript>
|
||||||
|
<![endif]-->
|
||||||
|
<!--[if lte mso 11]>
|
||||||
|
<style type="text/css">
|
||||||
|
.mj-outlook-group-fix { width:100% !important; }
|
||||||
|
</style>
|
||||||
|
<![endif]-->
|
||||||
|
<!--[if !mso]><!-->
|
||||||
|
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700" rel="stylesheet" type="text/css">
|
||||||
|
<style type="text/css">
|
||||||
|
@import url(https://fonts.googleapis.com/css?family=Roboto:300,400,500,700);
|
||||||
|
</style>
|
||||||
|
<!--<![endif]-->
|
||||||
|
<style type="text/css">
|
||||||
|
@media only screen and (min-width:480px) {
|
||||||
|
.mj-column-per-100 {
|
||||||
|
width: 100% !important;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<style media="screen and (min-width:480px)">
|
||||||
|
.moz-text-html .mj-column-per-100 {
|
||||||
|
width: 100% !important;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<style type="text/css">
|
||||||
|
@media only screen and (max-width:480px) {
|
||||||
|
table.mj-full-width-mobile {
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.mj-full-width-mobile {
|
||||||
|
width: auto !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body style="word-spacing:normal;background-color:#F4F4F4;">
|
||||||
|
<div style="background-color:#F4F4F4;">
|
||||||
|
<!--[if mso | IE]><table align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600" bgcolor="#151719" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]-->
|
||||||
|
<div style="background:#151719;background-color:#151719;margin:0px auto;max-width:600px;">
|
||||||
|
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||||
|
style="background:#151719;background-color:#151719;width:100%;">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td style="direction:ltr;font-size:0px;padding:20px 0;text-align:center;">
|
||||||
|
<!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:top;width:600px;" ><![endif]-->
|
||||||
|
<div class="mj-column-per-100 mj-outlook-group-fix"
|
||||||
|
style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||||
|
style="vertical-align:top;" width="100%">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td align="center"
|
||||||
|
style="font-size:0px;padding:10px 25px;padding-bottom:30px;word-break:break-word;">
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||||
|
style="border-collapse:collapse;border-spacing:0px;">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td style="width:180px;">
|
||||||
|
<img height="auto"
|
||||||
|
src="https://lh3.googleusercontent.com/nFUBkvMXR0QLeykUdweUzEu5gzHk601Cg3Ld64E8PpEV19VeKk9AkfBev61Es4D8Uig=w1800"
|
||||||
|
style="border:none;display:block;outline:none;text-decoration:none;height:auto;width:100%;font-size:13px;"
|
||||||
|
title="" width="180" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="left"
|
||||||
|
style="font-size:0px;padding:10px 25px;padding-top:0px;padding-bottom:0px;word-break:break-word;">
|
||||||
|
<div
|
||||||
|
style="font-family:Arial, sans-serif;font-size:13px;line-height:22px;text-align:left;color:#55575d;">
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--[if mso | IE]></td></tr></table><![endif]-->
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--[if mso | IE]></td></tr></table><table align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600" bgcolor="#151719" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]-->
|
||||||
|
<div style="background:#151719;background-color:#151719;margin:0px auto;max-width:600px;">
|
||||||
|
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||||
|
style="background:#151719;background-color:#151719;width:100%;">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td style="direction:ltr;font-size:0px;padding:0 0 0 0;text-align:center;">
|
||||||
|
<!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:top;width:600px;" ><![endif]-->
|
||||||
|
<div class="mj-column-per-100 mj-outlook-group-fix"
|
||||||
|
style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||||
|
style="vertical-align:top;" width="100%">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td align="center"
|
||||||
|
style="font-size:0px;padding:0px 25px;padding-right:0px;padding-bottom:0px;padding-left:0px;word-break:break-word;">
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||||
|
style="border-collapse:collapse;border-spacing:0px;">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td style="width:600px;">
|
||||||
|
<img height="auto"
|
||||||
|
src="https://lh6.googleusercontent.com/7BpAy4Uh4sYeFpeU2DIQg7vBAmIE5zNmQHSOickHbTxcz1yl6DSf3gL_Ru-TXzgCJVY=w2400"
|
||||||
|
style="border:none;display:block;outline:none;text-decoration:none;height:auto;width:100%;font-size:13px;"
|
||||||
|
title="" width="600" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--[if mso | IE]></td></tr></table><![endif]-->
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--[if mso | IE]></td></tr></table><table align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600" bgcolor="#151719" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]-->
|
||||||
|
<div style="background:#151719;background-color:#151719;margin:0px auto;max-width:600px;">
|
||||||
|
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||||
|
style="background:#151719;background-color:#151719;width:100%;">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td style="direction:ltr;font-size:0px;padding:0 0 0 0;text-align:center;">
|
||||||
|
<!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:top;width:600px;" ><![endif]-->
|
||||||
|
<div class="mj-column-per-100 mj-outlook-group-fix"
|
||||||
|
style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||||
|
style="vertical-align:top;" width="100%">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td align="left"
|
||||||
|
style="font-size:0px;padding:10px 25px;padding-top:25px;padding-bottom:5px;word-break:break-word;">
|
||||||
|
<div
|
||||||
|
style="font-family:Arial, sans-serif;font-size:13px;line-height:22px;text-align:left;color:#55575d;">
|
||||||
|
<p
|
||||||
|
style="line-height: 60px; text-align: center; margin: 10px 0;font-size:55px;color:#fcfcfc;font-family:'Roboto',Helvetica,Arial,sans-serif">
|
||||||
|
<b>Thanks For Signing Up</b></p>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="left"
|
||||||
|
style="font-size:0px;padding:10px 25px;padding-top:0px;padding-bottom:20px;word-break:break-word;">
|
||||||
|
<div
|
||||||
|
style="font-family:Arial, sans-serif;font-size:13px;line-height:22px;text-align:left;color:#55575d;">
|
||||||
|
<p
|
||||||
|
style="line-height: 30px; text-align: center; margin: 10px 0;color:#f5f5f5;font-size:25px;font-family:'Roboto',Helvetica,Arial,sans-serif">
|
||||||
|
<b>Our Sales People Will Be In Touch!</b><br /><span
|
||||||
|
style="color:#ffffff;font-size:18px;font-family:'Roboto',Helvetica,Arial,sans-serif">We
|
||||||
|
know you are going to love Sign365!</span></p>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--[if mso | IE]></td></tr></table><![endif]-->
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--[if mso | IE]></td></tr></table><table align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600" bgcolor="#151719" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]-->
|
||||||
|
<div style="background:#151719;background-color:#151719;margin:0px auto;max-width:600px;">
|
||||||
|
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||||
|
style="background:#151719;background-color:#151719;width:100%;">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td style="direction:ltr;font-size:0px;padding:0 0 0 0;padding-bottom:40px;text-align:center;">
|
||||||
|
<!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:top;width:600px;" ><![endif]-->
|
||||||
|
<div class="mj-column-per-100 mj-outlook-group-fix"
|
||||||
|
style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||||
|
style="vertical-align:top;" width="100%">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td align="left"
|
||||||
|
style="font-size:0px;padding:10px 25px;padding-top:5px;padding-bottom:0px;word-break:break-word;">
|
||||||
|
<div
|
||||||
|
style="font-family:Arial, sans-serif;font-size:13px;line-height:22px;text-align:left;color:#55575d;">
|
||||||
|
<p
|
||||||
|
style="line-height: 16px; text-align: center; margin: 10px 0;font-size:12px;color:#ffffff;font-family:'Times New Roman',Helvetica,Arial,sans-serif">
|
||||||
|
Unit 5 17-19 Foundry Rd, Midland, 6056, Western
|
||||||
|
Australia <br /><span
|
||||||
|
style="color:#ffffff;font-family:'Times New Roman',Helvetica,Arial,sans-serif">©
|
||||||
|
Sign365 2024</span></p>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--[if mso | IE]></td></tr></table><![endif]-->
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--[if mso | IE]></td></tr></table><![endif]-->
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,288 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml"
|
||||||
|
xmlns:o="urn:schemas-microsoft-com:office:office">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>
|
||||||
|
</title>
|
||||||
|
<!--[if !mso]><!-->
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<!--<![endif]-->
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<style type="text/css">
|
||||||
|
#outlook a {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
-webkit-text-size-adjust: 100%;
|
||||||
|
-ms-text-size-adjust: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
table,
|
||||||
|
td {
|
||||||
|
border-collapse: collapse;
|
||||||
|
mso-table-lspace: 0pt;
|
||||||
|
mso-table-rspace: 0pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
border: 0;
|
||||||
|
height: auto;
|
||||||
|
line-height: 100%;
|
||||||
|
outline: none;
|
||||||
|
text-decoration: none;
|
||||||
|
-ms-interpolation-mode: bicubic;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
display: block;
|
||||||
|
margin: 13px 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<!--[if mso]>
|
||||||
|
<noscript>
|
||||||
|
<xml>
|
||||||
|
<o:OfficeDocumentSettings>
|
||||||
|
<o:AllowPNG/>
|
||||||
|
<o:PixelsPerInch>96</o:PixelsPerInch>
|
||||||
|
</o:OfficeDocumentSettings>
|
||||||
|
</xml>
|
||||||
|
</noscript>
|
||||||
|
<![endif]-->
|
||||||
|
<!--[if lte mso 11]>
|
||||||
|
<style type="text/css">
|
||||||
|
.mj-outlook-group-fix { width:100% !important; }
|
||||||
|
</style>
|
||||||
|
<![endif]-->
|
||||||
|
<!--[if !mso]><!-->
|
||||||
|
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700" rel="stylesheet" type="text/css">
|
||||||
|
<style type="text/css">
|
||||||
|
@import url(https://fonts.googleapis.com/css?family=Roboto:300,400,500,700);
|
||||||
|
</style>
|
||||||
|
<!--<![endif]-->
|
||||||
|
<style type="text/css">
|
||||||
|
@media only screen and (min-width:480px) {
|
||||||
|
.mj-column-per-100 {
|
||||||
|
width: 100% !important;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<style media="screen and (min-width:480px)">
|
||||||
|
.moz-text-html .mj-column-per-100 {
|
||||||
|
width: 100% !important;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<style type="text/css">
|
||||||
|
@media only screen and (max-width:480px) {
|
||||||
|
table.mj-full-width-mobile {
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.mj-full-width-mobile {
|
||||||
|
width: auto !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body style="word-spacing:normal;background-color:#F4F4F4;">
|
||||||
|
<div style="background-color:#F4F4F4;">
|
||||||
|
<!--[if mso | IE]><table align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600" bgcolor="#151719" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]-->
|
||||||
|
<div style="background:#151719;background-color:#151719;margin:0px auto;max-width:600px;">
|
||||||
|
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||||
|
style="background:#151719;background-color:#151719;width:100%;">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td style="direction:ltr;font-size:0px;padding:20px 0;text-align:center;">
|
||||||
|
<!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:top;width:600px;" ><![endif]-->
|
||||||
|
<div class="mj-column-per-100 mj-outlook-group-fix"
|
||||||
|
style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||||
|
style="vertical-align:top;" width="100%">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td align="center"
|
||||||
|
style="font-size:0px;padding:10px 25px;padding-bottom:30px;word-break:break-word;">
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||||
|
style="border-collapse:collapse;border-spacing:0px;">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td style="width:180px;">
|
||||||
|
<img height="auto"
|
||||||
|
src="https://lh3.googleusercontent.com/nFUBkvMXR0QLeykUdweUzEu5gzHk601Cg3Ld64E8PpEV19VeKk9AkfBev61Es4D8Uig=w1800"
|
||||||
|
style="border:none;display:block;outline:none;text-decoration:none;height:auto;width:100%;font-size:13px;"
|
||||||
|
title="" width="180" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="left"
|
||||||
|
style="font-size:0px;padding:10px 25px;padding-top:0px;padding-bottom:0px;word-break:break-word;">
|
||||||
|
<div
|
||||||
|
style="font-family:Arial, sans-serif;font-size:13px;line-height:22px;text-align:left;color:#55575d;">
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--[if mso | IE]></td></tr></table><![endif]-->
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--[if mso | IE]></td></tr></table><table align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600" bgcolor="#151719" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]-->
|
||||||
|
<div style="background:#151719;background-color:#151719;margin:0px auto;max-width:600px;">
|
||||||
|
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||||
|
style="background:#151719;background-color:#151719;width:100%;">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td style="direction:ltr;font-size:0px;padding:0 0 0 0;text-align:center;">
|
||||||
|
<!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:top;width:600px;" ><![endif]-->
|
||||||
|
<div class="mj-column-per-100 mj-outlook-group-fix"
|
||||||
|
style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||||
|
style="vertical-align:top;" width="100%">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td align="center"
|
||||||
|
style="font-size:0px;padding:0px 25px;padding-right:0px;padding-bottom:0px;padding-left:0px;word-break:break-word;">
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||||
|
style="border-collapse:collapse;border-spacing:0px;">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td style="width:600px;">
|
||||||
|
<img height="auto"
|
||||||
|
src="https://lh6.googleusercontent.com/3LpVm9IPVlWtVfBjamr8tyJqy5sGesXae47Hv2an7uiotE8iKHLrmjSTTZgmDhRtY2M=w2400"
|
||||||
|
style="border:none;display:block;outline:none;text-decoration:none;height:auto;width:100%;font-size:13px;"
|
||||||
|
title="" width="600" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--[if mso | IE]></td></tr></table><![endif]-->
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--[if mso | IE]></td></tr></table><table align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600" bgcolor="#151719" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]-->
|
||||||
|
<div style="background:#151719;background-color:#151719;margin:0px auto;max-width:600px;">
|
||||||
|
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||||
|
style="background:#151719;background-color:#151719;width:100%;">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td style="direction:ltr;font-size:0px;padding:0 0 0 0;text-align:center;">
|
||||||
|
<!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:top;width:600px;" ><![endif]-->
|
||||||
|
<div class="mj-column-per-100 mj-outlook-group-fix"
|
||||||
|
style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||||
|
style="vertical-align:top;" width="100%">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td align="left"
|
||||||
|
style="font-size:0px;padding:10px 25px;padding-top:25px;padding-bottom:5px;word-break:break-word;">
|
||||||
|
<div
|
||||||
|
style="font-family:Arial, sans-serif;font-size:13px;line-height:22px;text-align:left;color:#55575d;">
|
||||||
|
<p
|
||||||
|
style="line-height: 60px; text-align: center; margin: 10px 0;font-size:55px;color:#fcfcfc;font-family:'Roboto',Helvetica,Arial,sans-serif">
|
||||||
|
<b>White Paper</b></p>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="left"
|
||||||
|
style="font-size:0px;padding:10px 25px;padding-top:0px;padding-bottom:20px;word-break:break-word;">
|
||||||
|
<div
|
||||||
|
style="font-family:Arial, sans-serif;font-size:13px;line-height:22px;text-align:left;color:#55575d;">
|
||||||
|
<p
|
||||||
|
style="line-height: 30px; text-align: center; margin: 10px 0;color:#f5f5f5;font-size:25px;font-family:'Roboto',Helvetica,Arial,sans-serif">
|
||||||
|
<b>Our White Paper Is Attached To This Email</b><br /><span
|
||||||
|
style="color:#ffffff;font-size:18px;font-family:'Roboto',Helvetica,Arial,sans-serif">Discover
|
||||||
|
The Benefits of Using Sign365 For Your Business</span></p>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--[if mso | IE]></td></tr></table><![endif]-->
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--[if mso | IE]></td></tr></table><table align="center" border="0" cellpadding="0" cellspacing="0" class="" style="width:600px;" width="600" bgcolor="#151719" ><tr><td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;"><![endif]-->
|
||||||
|
<div style="background:#151719;background-color:#151719;margin:0px auto;max-width:600px;">
|
||||||
|
<table align="center" border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||||
|
style="background:#151719;background-color:#151719;width:100%;">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td style="direction:ltr;font-size:0px;padding:0 0 0 0;padding-bottom:40px;text-align:center;">
|
||||||
|
<!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td class="" style="vertical-align:top;width:600px;" ><![endif]-->
|
||||||
|
<div class="mj-column-per-100 mj-outlook-group-fix"
|
||||||
|
style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||||
|
style="vertical-align:top;" width="100%">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td align="center" vertical-align="middle"
|
||||||
|
style="font-size:0px;padding:10px 25px;padding-bottom:30px;word-break:break-word;">
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" role="presentation"
|
||||||
|
style="border-collapse:separate;line-height:100%;">
|
||||||
|
<tr>
|
||||||
|
<td align="center" bgcolor="#ffffff" role="presentation"
|
||||||
|
style="border:none;border-radius:3px;cursor:auto;mso-padding-alt:10px 25px;background:#ffffff;"
|
||||||
|
valign="middle">
|
||||||
|
<p
|
||||||
|
style="display:inline-block;background:#ffffff;color:#ffffff;font-family:Roboto, Helvetica, Arial, sans-serif;font-size:18px;font-weight:normal;line-height:120%;margin:0;text-decoration:none;text-transform:none;padding:10px 25px;mso-padding-alt:0px;border-radius:3px;">
|
||||||
|
<span style="color:#151719">Book A Demo</span>
|
||||||
|
</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="left"
|
||||||
|
style="font-size:0px;padding:10px 25px;padding-top:5px;padding-bottom:0px;word-break:break-word;">
|
||||||
|
<div
|
||||||
|
style="font-family:Arial, sans-serif;font-size:13px;line-height:22px;text-align:left;color:#55575d;">
|
||||||
|
<p
|
||||||
|
style="line-height: 16px; text-align: center; margin: 10px 0;font-size:12px;color:#ffffff;font-family:'Times New Roman',Helvetica,Arial,sans-serif">
|
||||||
|
Unit 5 17-19 Foundry Rd, Midland, 6056, Western
|
||||||
|
Australia <br /><span
|
||||||
|
style="color:#ffffff;font-family:'Times New Roman',Helvetica,Arial,sans-serif">©
|
||||||
|
Sign365 2024</span></p>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--[if mso | IE]></td></tr></table><![endif]-->
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--[if mso | IE]></td></tr></table><![endif]-->
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,10 @@
|
||||||
|
export const IconLoading = () => {
|
||||||
|
return (
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" className="animate-spin -ml-1 mr-3 h-5 w-5 text-white" viewBox="0 0 24 24">
|
||||||
|
<circle cx="12" cy="12" r="10" stroke="currentColor" strokeWidth="4" className="opacity-25"></circle>
|
||||||
|
<path fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" className="opacity-75"></path>
|
||||||
|
</svg>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default IconLoading;
|
|
@ -0,0 +1,3 @@
|
||||||
|
<svg width="129" height="129" viewBox="0 0 129 129" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M64.5 12.9C50.8148 12.9 37.6902 18.3364 28.0133 28.0133C18.3364 37.6902 12.9 50.8148 12.9 64.5C12.9 78.1852 18.3364 91.3098 28.0133 100.987C37.6902 110.664 50.8148 116.1 64.5 116.1C78.1852 116.1 91.3098 110.664 100.987 100.987C110.664 91.3098 116.1 78.1852 116.1 64.5C116.1 50.8148 110.664 37.6902 100.987 28.0133C91.3098 18.3364 78.1852 12.9 64.5 12.9ZM0 64.5C0 28.8766 28.8766 0 64.5 0C100.123 0 129 28.8766 129 64.5C129 100.123 100.123 129 64.5 129C28.8766 129 0 100.123 0 64.5ZM94.5828 43.5569C95.8598 44.6932 96.6335 46.2901 96.7339 47.9965C96.8343 49.703 96.2531 51.3795 95.1181 52.6578L60.7203 91.3578C60.1152 92.0388 59.3726 92.5838 58.5416 92.9571C57.7106 93.3303 56.8099 93.5233 55.8989 93.5233C54.9879 93.5233 54.0873 93.3303 53.2562 92.9571C52.4252 92.5838 51.6827 92.0388 51.0775 91.3578L33.8818 72.0078C32.8119 70.7208 32.2842 69.0682 32.4101 67.3993C32.536 65.7303 33.3057 64.1757 34.5567 63.0637C35.8076 61.9518 37.4418 61.3696 39.114 61.4403C40.7862 61.5109 42.3654 62.2287 43.5181 63.4422L55.9021 77.3677L85.4818 44.0858C86.6191 42.8097 88.2164 42.0372 89.9229 41.938C91.6293 41.8388 93.3054 42.4211 94.5828 43.5569Z" fill="#FF0DCA"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
|
@ -0,0 +1,9 @@
|
||||||
|
<svg width="47" height="46" viewBox="0 0 47 46" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<rect width="47" height="46" fill="url(#pattern0)"/>
|
||||||
|
<defs>
|
||||||
|
<pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1">
|
||||||
|
<use xlink:href="#image0_22_385" transform="matrix(0.010195 0 0 0.0104167 0.0106383 0)"/>
|
||||||
|
</pattern>
|
||||||
|
<image id="image0_22_385" width="96" height="96" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAACXBIWXMAAAsTAAALEwEAmpwYAAACtklEQVR4nO2dTWpUQRSFv1E7MoL4F7eQuBODSMgSBBegyzBEUYMzcQ0O1U20QnAYZyL4kygiCVceVINI2khed5376p0PzqTJzzn3Vt16PXkFxhhjzDC4DtwHXgL7wPei/fLZPWBVbbJFVoEXwC8gTlH3M8+Ba2rTrXAL+PIfhf9bn4ENtfmhcxc4PkPxZ+p+9446xFDZAI56FH+m7m/cVIcZGpeAjwso/kyfgCvqUEPi2QKLP9OuOtRQuAz8WEIDfgJXaZAbwEPgLXC4hMLFCeqe+zeB80W3gb1K//uwZN0B1pWFPwc87fmUEmcs/sUT/HSffajspcv+BJgoiv+mctgo6lb+PLZEnl7XbsKuKGiUkTOPFaGvxzVn/nHSBlwQ+uq+b6zVaMCOMGSUA3cem2Jv2zUa8E4ccu8fh/B7sbdpjQZ8E4eM8rSzVWb+Sln56uJHqc3SUYeM5HIDcAPkqzC8A/SFCI8gfTFCIJ8BuAHyVRjeAfpChEeQaEb2pPkzIDuRPV96g63nS2+w9XzpDbaeL73B1vOlN9h6vvQGW8/X12DrWjrqgJFcbgBugHwVhneAvhDhEaQvRgjkMwA3QL4KwztAuEVPYfQjSE2M/QxQE26AG9AL7wA8gvrgESQmfAa4Ab1Qf9GJ5Fo66oCRXG4AboB8FYZ3gL4Q4RGkL0YI5DMAN0C+CsM7QLhFe9L8CMpOZM+X3mDr+dIbbD1feoOt50tvsPV86Q22ni+9wdbz9TXYupaOOmAklxuAGyBfheEdoC9EeATpixEC+QzADZCvwmh5BxwkCBlJ9XUMry6OxJqO4eXdkVgPajRgfUHXS0Vjqvb6esq1HerAkUyPqMikXNuhDh1J9Epxj8ykXNsx5nF0VFZ+9eL/yVq5OWI6kkfUg5J1u+bMN8YYY4wxxhhjjDEMnt/lHMkEtRRJ/wAAAABJRU5ErkJggg=="/>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
|
@ -0,0 +1,9 @@
|
||||||
|
<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<rect width="50" height="50" fill="url(#pattern0)"/>
|
||||||
|
<defs>
|
||||||
|
<pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1">
|
||||||
|
<use xlink:href="#image0_22_387" transform="scale(0.0104167)"/>
|
||||||
|
</pattern>
|
||||||
|
<image id="image0_22_387" width="96" height="96" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAACXBIWXMAAAsTAAALEwEAmpwYAAAELElEQVR4nO2dyW9PURTHPwjVbprUsCDUjr2tEIkhQkuMf4IphGBvx8JYLBpiYWljWhmWpo05uhAtEcMCpRthUUdeciSNpH4/fve9e85995N8N23pPefbe9/93eE8yGQymUwmk8lkMhlbzARWAruBM8At4CkwCAwDP1TD+rXiezf1Z3cBK4AZsYPwRAewFjipyfwJSIv6qf/XCaAXaI8dpDUmAouAfmAkQMIb6RtwEegBJlFjpgI7gKEKkj6eimFru7alVsPMfuB9xMT/qaIt+7RtSVN0+1cGEi7j6C2wiQSZB1wzkGBpUleAbhJhnU4TxZlGgC04pk2nk+Jc/RqLK6YB9wwkTwLpDtCFE2bpBx9JTAPAXIyzAHhjIFlSkt5ojCaZDbw2kCSpYKrabXHMHzCQHKlIL3Sh0ARtiT1wpUndtTI7Om0gGRJJfbGTvzFC0I2ouj0biLi88DUbwJdYD+Wrkbp9I2KtHVW+vhMjUGmibbHaVaz0VkJH5Pl+I2K1a6iq7c4DEYOUJtoXs217y05+Me99lw1gPAM+lN0LdkT+C5Mm2hi7fdvKPL0QcwNdnBhQbPRPKMOApQaCEwcGFFpShgHnDQQmTgw4Fzr57ZE+9YpTA0ZCP4zXGghKHBlQaE1IAyxtrjdCjOgoAbG0x9sIMaJHBGJmoFPKdTNgFJgewoCVBoIRhwYUWhbCgN0GAhGnBuwMYcAZA4GIUwOCbFneNBCIODXgeggDnhkIRJwa8CSEAdYOWzVCDKlYvGyZT84MuG+gjb/1MYQBP5wZ0GnooNj3OhpgyYTvKQ5BnU22u9PAcPQxxYfwg3+4LBG7JwylOA0VRyY8SfGDmKjuOxiOrqe4FCGOekJfiotx4siEnSkuR4sjE4IsR88wtiEjTp4Jo3p1K7ktSXHSEx4SkBMGkivOTDgS0oBeA4kVZ8PR6lQPZomDnhD8YJalo4lSUk84FPD3niXhw7lSQk84GPh3Li7rePqggYRK4J4QOvkvyzqebuWChgTsCaGTX2griV9RkkAmHCyp+F/pFRj3GUiktDgchXzgjtUeKrqmarnyoUTSYJVVeVcZCFiMKeh9AMulCsSgLhGBbi1UITXXcMxacj1OlqqlJBWxrycyfQYSIZF0HAO0aV1NqZluA1MwQqcewZCa6LnFQq51Kls5F6PUoXDrfByULk5xOBoA5uCELq2rKQk9cLtwxmTgcAKfE/otzXb+t86E1xc4bCYRup2tHV22PNNpdenCQtUt+cuSctDjJBbp0OqC7wwkfOzcfk/d3rLXpi9Ri7nRP6hF9kxUQY/JQq1JVMV9tOKA2QU9uVza6QWvtOvO0jHgsZ4wbjXho1q756iO77V6bWGrTAeW60WHU8ANNaYYOj6PeZ3tZ/3aY70WdEr/zbJQNXsymUwmk8lkMplMhkD8ApuTFklOqp8wAAAAAElFTkSuQmCC"/>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
|
@ -0,0 +1,9 @@
|
||||||
|
<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<rect width="50" height="50" fill="url(#pattern0)"/>
|
||||||
|
<defs>
|
||||||
|
<pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1">
|
||||||
|
<use xlink:href="#image0_22_386" transform="scale(0.0104167)"/>
|
||||||
|
</pattern>
|
||||||
|
<image id="image0_22_386" width="96" height="96" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAACXBIWXMAAAsTAAALEwEAmpwYAAADIklEQVR4nO3by04UQRTG8X9mxoVcTLxtBHdGfAEJPIGXtaLRxIUati4R1iosBRFCeAMJGsX4HhpcGy6aeMEtwqZNm5qIEKnTXTX00P39ktqRU13n9FRXVTcgIiIiIiIiIiIiIiIiIiIiIiIiIiLyrzowCIwBi8BH4CewDSSBLVRo/9tuLMtubKPAAFCjDZwFJoD1CANN2rQA/2trwDjQSwFOA3PAVgsHmLR5AZotzcEMcJIDcgvYOICBJYekAM32A7hBCx0B5g9wQMkhK0CzzQINIusA3hUwmCTCtRdxzW9dzqLd+UUlP4lw/UmBRYjySyhi2klKUIDEPZyD3M7Y4QowBVwC+oBODr9ON5Z0TM+A1Yw5Gcrbcbqs+m7sJN0HDLsNWdnVgOvApwyro1N5OpozdvAK6KJ6uoHXxhxN59nhWjZZT9tlS16QdOyThjz9AnqyBJ4w3vlVTn5TzfhLeIJR3XC2s1bRaWe/6eizJ2er1ht20FDNu5ZAFXPfkLd+S6Axw1KzCqudrOpuZtgvdw8tgV56gqQPnRBJm7cQ057YC5Ygy54gl4MusdwFuOqJ/cESxHfUfC7wIstcgD5P7HRj6+Vb/4eufspcgC7DfsBLBcjvWIwC+Kag84Qp8y/gQowpSA/hgh/Ci54g6ZFsiDL/AmY8sV9YgowattTaiO3VMGzERjAYMNwl9yyBKmbYkLeLlkA1QyXX3QGU/F39fDEc4ZhPj8cN1UyPYHUczZ8cvDHk6zEZ9BpfyExWvAg19w7cl6dN4EzsJ/rOX0J3RaedJWOO0iJldgL4Zuwg/bsHrfgirE3v+juGOX/nS/nc343eNHbSbGvuSPaK2xWW4a1ZlxtLusl6blig7G7XQi9gNmOHsVuoIq8919SzW93wkkYFYE8OlmJOyR3uW0cVAFMO0mXpUSJrZFgZVXkKmmr1YmQowyeLVSrA1xgP3CxL1Gn3gqHqBdh0d/1xCtDjvvharWABVoBHeXa4rdqc9LvvXhbci4eNSP/EFyq0/y03lvdubCPuVLPKRzAiIiIiIiIiIiIiIiIiIiIiIiIiIsJevwHM218LQVp+KgAAAABJRU5ErkJggg=="/>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.6 KiB |
|
@ -0,0 +1,9 @@
|
||||||
|
<svg width="45" height="45" viewBox="0 0 45 45" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<rect width="45" height="45" fill="url(#pattern0)"/>
|
||||||
|
<defs>
|
||||||
|
<pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1">
|
||||||
|
<use xlink:href="#image0_22_389" transform="scale(0.0104167)"/>
|
||||||
|
</pattern>
|
||||||
|
<image id="image0_22_389" width="96" height="96" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAACXBIWXMAAAsTAAALEwEAmpwYAAAEvUlEQVR4nO2dbYhWRRTHf7v2YmRW4pYhEdi76JeiIqwgEcoKpJIsiiKiEEIke6M3iMANrAwp0iishUAqikTL7MU+BIH0paLECtekLCvLzDDLbScGztIiyT1znzv33mfm/OB8vmfO/5k7c885Mw8YhmEYRnfhCswwAdLG2QwwAbLG2QwwAbLG2QwwAbLG2QwwAbKhBzgduAboB9YqZsC7wNPALcAZTQ+gWzkHeBzYpgh4kX0DPAFMb3pQbedQ4GZgcwVBP5i9D8xoeqBt5CLg84iBP9BWARObHnQbGAMsBv6pMfgj9kPus2Es8FoDgR9t+4C5ZMghwOqGgz9ifwNzyIynSgbrN+AdYBnwCHAnsAhYArzYwQL+BzCNTJgTGJw9wArgLPkuKGIK8KCIFfKcL4DDSJwjA/f2q4HjSj6rD1gZKIIXLmnuCAjGAxU98z5gWPnM3cCxJEovsFUZiKUVP/ueAOHvJ1EuVAZgS4R3cY8yj+RtULnWdB39ygBcG+n5JwB7lT74XFRyfKAY+F7giIg+PFvz+tMqdigGvi6yD2cqBYjtRyNpB81OZFkNvnyt8ON7EqOvRfvwF5S+HE1CTFYO+q4afJmv9GUqCTFBOejHWpQKuZjEsp/7FYN+tUXfI5eTGIPKVMDhkf2YphTgahJDW3yZ27SjqbJQKcBg5I+xbDkxoPa7MtV8TNOsUwrggOVStDcqbj9xAfYRcIopUC0vl6jX9su3hFEBxwPbA0VwUuP1PUQnmQqdMyMgN3+g+YX8TeAq2y11xmXAnyVFGN0x8QowDzjKZkY4FwA7OxRhxLyYa6Qt3fo+A78PPqxIhBEbAt6ScwW+FmEUMAa4FfixYiG8/SpdFrZ4KxgvbYb7IgixX9rSfVnSULyW/N7/p0hCPCNVOqMAn5q+EdgYQYifgSuLHDD+42TgbklPVHmgY4UcjzICm6zmy4nIoQpEWG/fEeWZKDuo9wKacP/PNtRQjUueU2XLuaukCC81PYBUGAc8BPxeQoTrmnY+JfqAgUABdsr3iFEhN0jiTiuCP09gVMzMgOzrt1aTjsP1AbPgvEg+ZM96pQAPZx+piDUIjQCvkwB+Mbu3wGY2cFjwO4UA/tB316Op+z7fgF+aaxJ8Jrbr0ZQb32jAr+UKv/4iAT5TDHRjSwXwRaGuZ43ylzauha+gX0iAxcodx+ya/dqk8MnP3q5HexxooEafpua0DR2vLLAPAafV5NOS3PJBmnXAyW4o9pmA6bLmaPzx9xMlwRXKATu5BSsWvrv6E6UfX5IQvXIblWbgw3JWuCdCR/anAT+EBSTG7IDBO3ltVdG344W8SXlPxehUdJJn1FYFirBHLvcrc0LmGOA24OPAZ7qUe4X83QtflQjIsLzCnpPO50uAc6UA78U5G5glDVxL5Vqcsm3v/gs5aabIjbWuhfZ2DrcmItfRb21BwEfb2lTf+wdjktxk3nTgfYvjo7keh+2Vayx3NxT8TVIdy55JwJNyHLWOwG+WxTzLX33Rl+rtEbqfnbQq+oTfpTLzDEXD7Tz565ENgeeKd0mRZ0ASaufLfUVGh4xVBN+nHIyIuAIzIuNMgGZxJoAJkDXOZoAJkDXOZoAJYBiGYRh0yr8niBptUthQxAAAAABJRU5ErkJggg=="/>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.1 KiB |
|
@ -0,0 +1,3 @@
|
||||||
|
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M20 20C25.525 20 30 15.525 30 10C30 4.475 25.525 0 20 0C14.475 0 10 4.475 10 10C10 15.525 14.475 20 20 20ZM20 25C13.325 25 0 28.35 0 35V40H40V35C40 28.35 26.675 25 20 25Z" fill="black"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 299 B |
|
@ -0,0 +1,3 @@
|
||||||
|
<svg width="42" height="34" viewBox="0 0 42 34" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M31.4167 33.6667V14.9167H27.25V0.333374H41.8333L37.6667 10.75H41.8333L31.4167 33.6667ZM27.25 19.0834V33.6667H4.33333C2.04166 33.6667 0.166664 31.7917 0.166664 29.5V23.25C0.166664 20.9584 2.04166 19.0834 4.33333 19.0834H27.25ZM9.02083 24.8125H5.89583V27.9375H9.02083V24.8125ZM23.0833 0.333374V14.9167H4.33333C2.04166 14.9167 0.166664 13.0417 0.166664 10.75V4.50004C0.166664 2.20837 2.04166 0.333374 4.33333 0.333374H23.0833ZM9.02083 6.06254H5.89583V9.18754H9.02083V6.06254Z" fill="black"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 601 B |
|
@ -0,0 +1,4 @@
|
||||||
|
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<rect x="18.4956" y="19.9999" width="26.1569" height="2.12731" transform="rotate(-135 18.4956 19.9999)" fill="#D9D9D9"/>
|
||||||
|
<rect y="18.4957" width="26.1569" height="2.12731" transform="rotate(-45 0 18.4957)" fill="#D9D9D9"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 326 B |
|
@ -0,0 +1,10 @@
|
||||||
|
<svg width="43" height="46" viewBox="0 0 43 46" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M41.9002 35.5616C37.7824 41.6221 30.8134 45.606 22.9095 45.606C10.2569 45.606 0 35.3968 0 22.803C0 10.2093 10.2569 0 22.9095 0C28.7626 0 33.946 2.05005 37.9956 5.645L40.2308 2.54121L43 12.7985L33.0174 12.7994L35.3735 9.38232L36.9348 7.11791L37.9952 5.64554C36.9341 7.10145 36.3621 7.92015 35.3735 9.38232C32.0225 5.91392 27.9994 4.59549 22.7832 4.59549C12.6115 4.59549 4.36577 12.8029 4.36577 22.9273C4.36577 33.0517 12.6115 41.2592 22.7832 41.2592C29.228 41.2592 34.8996 37.9643 38.1906 32.9746L41.9002 35.5616ZM24.9674 16.6556H16.6159V16.6581H13.036V20.2207H33.318V16.6581H24.9674V16.6556ZM33.3181 22.5929H24.9674H16.6159H13.036V26.1554H16.6159H24.9674H33.3181V22.5929ZM24.9674 28.5309H28.5466V32.0934H24.9674H16.6159V28.5309H24.9674Z" fill="url(#paint0_linear_505_291)"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.6174 16.6555H24.9688V16.6581H25.671V20.2206H16.5498V16.6581H16.6174V16.6555ZM16.5498 26.1554V22.5928H16.6174H24.9688H25.671V26.1554H24.9688H16.6174H16.5498ZM25.671 28.5308V32.0933H24.9688H16.6174V28.5308H24.9688H25.671Z" fill="black" fill-opacity="0.25"/>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="paint0_linear_505_291" x1="-4.56061" y1="1.30303" x2="44.9545" y2="45.6061" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#FF0DCA"/>
|
||||||
|
<stop offset="1" stop-color="#8000FF"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
|
@ -0,0 +1,26 @@
|
||||||
|
<svg width="48" height="51" viewBox="0 0 48 51" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M46.7723 39.9527C42.1757 46.597 34.3963 50.9648 25.5734 50.9648C11.4496 50.9648 0 39.772 0 25.9648C0 12.1577 11.4496 0.964844 25.5734 0.964844C32.1071 0.964844 37.8932 3.21241 42.4136 7.15371C41.2289 8.75027 40.5904 9.64787 39.4867 11.2511C35.7461 7.44854 31.2551 6.00308 25.4324 6.00308C14.078 6.00308 4.87342 15.0013 4.87342 26.1011C4.87342 37.201 14.078 46.1992 25.4324 46.1992C32.6266 46.1992 38.9577 42.5869 42.6313 37.1164L46.7723 39.9527Z" fill="url(#paint3_linear_5_100)"/>
|
||||||
|
<path d="M41.2295 8.76853L44.9088 3.75089L48 14.9964L36.8566 14.9974L41.2295 8.76853Z" fill="url(#paint4_linear_5_100)"/>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="paint0_linear_5_100" x1="24" y1="0.964844" x2="24" y2="50.9648" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#AB4FD7"/>
|
||||||
|
<stop offset="1" stop-color="#DF3CCF"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="paint1_linear_5_100" x1="24" y1="0.964844" x2="24" y2="50.9648" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#AB4FD7"/>
|
||||||
|
<stop offset="1" stop-color="#DF3CCF"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="paint2_linear_5_100" x1="24" y1="0.964844" x2="24" y2="50.9648" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#AB4FD7"/>
|
||||||
|
<stop offset="1" stop-color="#DF3CCF"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="paint3_linear_5_100" x1="1.39274e-07" y1="25.2506" x2="48" y2="25.2506" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#AB4FD7"/>
|
||||||
|
<stop offset="1" stop-color="#DF3CCF"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="paint4_linear_5_100" x1="24" y1="0.964844" x2="24" y2="50.9648" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#AB4FD7"/>
|
||||||
|
<stop offset="1" stop-color="#DF3CCF"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
|
@ -0,0 +1,30 @@
|
||||||
|
<svg width="48" height="51" viewBox="0 0 48 51" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M14.5518 19.2279H37.1922V23.1337H14.5518V19.2279Z" fill="url(#paint0_linear_5_100)"/>
|
||||||
|
<path d="M14.5518 25.7345H37.1923V29.6403H14.5518V25.7345Z" fill="url(#paint1_linear_5_100)"/>
|
||||||
|
<path d="M18.548 32.2445H31.8659V36.1503H18.548V32.2445Z" fill="url(#paint2_linear_5_100)"/>
|
||||||
|
<path d="M18.548 19.2251H27.8706V23.1309H18.548V19.2251Z" fill="black" fill-opacity="0.2"/>
|
||||||
|
<path d="M18.548 25.7345H27.8706V29.6403H18.548V25.7345Z" fill="black" fill-opacity="0.2"/>
|
||||||
|
<path d="M18.548 32.2445H27.8706V36.1503H18.548V32.2445Z" fill="black" fill-opacity="0.2"/>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="paint0_linear_5_100" x1="24" y1="0.964844" x2="24" y2="50.9648" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#AB4FD7"/>
|
||||||
|
<stop offset="1" stop-color="#DF3CCF"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="paint1_linear_5_100" x1="24" y1="0.964844" x2="24" y2="50.9648" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#AB4FD7"/>
|
||||||
|
<stop offset="1" stop-color="#DF3CCF"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="paint2_linear_5_100" x1="24" y1="0.964844" x2="24" y2="50.9648" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#AB4FD7"/>
|
||||||
|
<stop offset="1" stop-color="#DF3CCF"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="paint3_linear_5_100" x1="1.39274e-07" y1="25.2506" x2="48" y2="25.2506" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#AB4FD7"/>
|
||||||
|
<stop offset="1" stop-color="#DF3CCF"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="paint4_linear_5_100" x1="24" y1="0.964844" x2="24" y2="50.9648" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#AB4FD7"/>
|
||||||
|
<stop offset="1" stop-color="#DF3CCF"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 39 KiB |
After Width: | Height: | Size: 51 KiB |
After Width: | Height: | Size: 42 KiB |
|
@ -0,0 +1,21 @@
|
||||||
|
import { ReadonlyRequestCookies } from "next/dist/server/web/spec-extension/adapters/request-cookies";
|
||||||
|
import pb from "./pocketbase";
|
||||||
|
import { redirect } from "next/navigation";
|
||||||
|
|
||||||
|
export const getUserFromCookie = async (cookies: ReadonlyRequestCookies) => {
|
||||||
|
const cookie = cookies.get('pb_auth');
|
||||||
|
if (!cookie) {
|
||||||
|
redirect('/');
|
||||||
|
//throw new Error("No authenticated user");
|
||||||
|
} else {
|
||||||
|
pb.authStore.loadFromCookie(cookie?.value || '');
|
||||||
|
return pb.authStore.model;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const isAuthenticated = async (cookieStore: ReadonlyRequestCookies) => {
|
||||||
|
const cookie = cookieStore.get('pb_auth');
|
||||||
|
if(!cookie) return false;
|
||||||
|
pb.authStore.loadFromCookie(cookie?.value || '');
|
||||||
|
return pb.authStore.isValid || false;
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
import PocketBase from 'pocketbase';
|
||||||
|
|
||||||
|
const pb = (() => {
|
||||||
|
const POCKETBASE_URL = process.env.NEXT_PUBLIC_POCKETBASE_URL;
|
||||||
|
return new PocketBase(POCKETBASE_URL);
|
||||||
|
})();
|
||||||
|
|
||||||
|
export default pb;
|
|
@ -0,0 +1,24 @@
|
||||||
|
import { NextRequest, NextResponse } from "next/server";
|
||||||
|
import pb from "./lib/pocketbase";
|
||||||
|
import { isAuthenticated } from "./lib/auth";
|
||||||
|
|
||||||
|
export async function middleware(request: NextRequest) {
|
||||||
|
const { pathname } = request.nextUrl;
|
||||||
|
if (
|
||||||
|
pathname.startsWith("/_next") ||
|
||||||
|
pathname.startsWith("/api") ||
|
||||||
|
pathname.startsWith("/static")
|
||||||
|
) {
|
||||||
|
return NextResponse.next();
|
||||||
|
}
|
||||||
|
// const isLoggedIn = await isAuthenticated(request.cookies as any);
|
||||||
|
// if (pathname.startsWith("/account")) {
|
||||||
|
// if (isLoggedIn) {
|
||||||
|
// return NextResponse.next();
|
||||||
|
// } else {
|
||||||
|
// request.nextUrl.pathname = "/"
|
||||||
|
// }
|
||||||
|
// return NextResponse.redirect(request.nextUrl);
|
||||||
|
// }
|
||||||
|
// return NextResponse.next();
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
[build]
|
||||||
|
functions = "./netlify/functions"
|
|
@ -0,0 +1,35 @@
|
||||||
|
const fetch = require('node-fetch-commonjs')
|
||||||
|
|
||||||
|
exports.handler = async function (event) {
|
||||||
|
if (event.body === null) {
|
||||||
|
return {
|
||||||
|
statusCode: 400,
|
||||||
|
body: JSON.stringify("Payload required"),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
const requestBody = JSON.parse(event.body)
|
||||||
|
|
||||||
|
//automatically generated snippet from the email preview
|
||||||
|
//sends a request to an email handler for a subscribed email
|
||||||
|
await fetch(`${process.env.URL}/.netlify/functions/emails/BookNow`, {
|
||||||
|
headers: {
|
||||||
|
"netlify-emails-secret": process.env.NEXT_PUBLIC_NETLIFY_EMAILS_SECRET,
|
||||||
|
},
|
||||||
|
method: "POST",
|
||||||
|
body: JSON.stringify({
|
||||||
|
from: process.env.NEXT_PUBLIC_NETLIFY_FROM_EMAIL,
|
||||||
|
to: requestBody.subscriberEmail,
|
||||||
|
subject: "Thanks For Booking on Sign365",
|
||||||
|
parameters: {
|
||||||
|
email: requestBody.subscriberEmail,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
return {
|
||||||
|
statusCode: 200,
|
||||||
|
body: JSON.stringify("SignUp email sent!"),
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
const fetch = require('node-fetch-commonjs')
|
||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
exports.handler = async function (event) {
|
||||||
|
if (event.body === null) {
|
||||||
|
return {
|
||||||
|
statusCode: 400,
|
||||||
|
body: JSON.stringify("Payload required"),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
const requestBody = JSON.parse(event.body)
|
||||||
|
|
||||||
|
const file = fs.readFileSync(path.resolve("./netlify/functions/triggerLearnMoreEmail/assets/Whitepaper.pdf")).toString("base64");
|
||||||
|
|
||||||
|
//automatically generated snippet from the email preview
|
||||||
|
//sends a request to an email handler for a subscribed email
|
||||||
|
await fetch(`${process.env.URL}/.netlify/functions/emails/WhitePaper`, {
|
||||||
|
headers: {
|
||||||
|
"netlify-emails-secret": process.env.NEXT_PUBLIC_NETLIFY_EMAILS_SECRET,
|
||||||
|
},
|
||||||
|
method: "POST",
|
||||||
|
body: JSON.stringify({
|
||||||
|
from: process.env.NEXT_PUBLIC_NETLIFY_FROM_EMAIL,
|
||||||
|
to: requestBody.subscriberEmail,
|
||||||
|
subject: "Thanks For Visiting Sign365",
|
||||||
|
attachments: [{
|
||||||
|
content: file,
|
||||||
|
filename: "Whitepaper.pdf",
|
||||||
|
type: "pdf",
|
||||||
|
}],
|
||||||
|
parameters: {
|
||||||
|
email: requestBody.subscriberEmail,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
return {
|
||||||
|
statusCode: 200,
|
||||||
|
body: JSON.stringify("WhitePaper email sent!"),
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,63 @@
|
||||||
|
exports.handler = async function (event: Event) {
|
||||||
|
console.log(event);
|
||||||
|
return {
|
||||||
|
statusCode: 200,
|
||||||
|
body: "Hello, World!",
|
||||||
|
headers: {
|
||||||
|
"Access-Control-Allow-Origin": "http://localhost:3000", // <-- This allows any domain
|
||||||
|
// "Access-Control-Allow-Headers": "Content-Type",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// import fetch from 'node-fetch-commonjs';
|
||||||
|
|
||||||
|
// export async function handler(event) {
|
||||||
|
// if (event.body === null) {
|
||||||
|
// return {
|
||||||
|
// statusCode: 400,
|
||||||
|
// body: JSON.stringify("Payload required"),
|
||||||
|
// headers: {
|
||||||
|
// "Access-Control-Allow-Origin": "*",
|
||||||
|
// "Access-Control-Allow-Headers": "Content-Type"
|
||||||
|
// }
|
||||||
|
// };
|
||||||
|
// }
|
||||||
|
// console.log("Incoming event.body:", event.body);
|
||||||
|
// const requestBody = JSON.parse(event.body);
|
||||||
|
// if(!requestBody){
|
||||||
|
// console.log("No Body")
|
||||||
|
// }
|
||||||
|
// const url = `./.netlify/functions/emails/SignUp`;
|
||||||
|
// const email = requestBody.subscriberEmail;
|
||||||
|
// console.log("Using URL:", url);
|
||||||
|
// //automatically generated snippet from the email preview
|
||||||
|
// //sends a request to an email handler for a subscribed email
|
||||||
|
// try {
|
||||||
|
// await fetch(`/.netlify/functions/emails/SignUp`, {
|
||||||
|
// headers: {
|
||||||
|
// "netlify-emails-secret": process.env.NEXT_PUBLIC_NETLIFY_EMAILS_SECRET,
|
||||||
|
// },
|
||||||
|
// method: "POST",
|
||||||
|
// body: JSON.stringify({
|
||||||
|
// from: process.env.NEXT_PUBLIC_NETLIFY_FROM_EMAIL,
|
||||||
|
// to: email,
|
||||||
|
// subject: "Thanks For Signing Up on Sign365",
|
||||||
|
// parameters: {
|
||||||
|
// email: email,
|
||||||
|
// },
|
||||||
|
// }),
|
||||||
|
// });
|
||||||
|
// } catch (err) {
|
||||||
|
// console.log("Error sending Mailchimp email", err.message);
|
||||||
|
// return {
|
||||||
|
// statusCode: 500,
|
||||||
|
// body: JSON.stringify("Failed to send Mailchimp email."),
|
||||||
|
// headers: {
|
||||||
|
// "Access-Control-Allow-Origin": "*",
|
||||||
|
// "Access-Control-Allow-Headers": "Content-Type"
|
||||||
|
// }
|
||||||
|
// };
|
||||||
|
// }
|
||||||
|
|
||||||
|
// }
|
|
@ -0,0 +1,31 @@
|
||||||
|
/** @type {import('next').NextConfig} */
|
||||||
|
const nextConfig = {
|
||||||
|
compiler: {
|
||||||
|
// Enables the styled-components SWC transform
|
||||||
|
styledComponents: true
|
||||||
|
},
|
||||||
|
|
||||||
|
webpack(config) {
|
||||||
|
config.resolve.fallback = {
|
||||||
|
// if you miss it, all the other options in fallback, specified
|
||||||
|
// by next.js will be dropped.
|
||||||
|
...config.resolve.fallback,
|
||||||
|
|
||||||
|
fs: false, // the solution
|
||||||
|
};
|
||||||
|
|
||||||
|
return config;
|
||||||
|
},
|
||||||
|
images: {
|
||||||
|
remotePatterns: [
|
||||||
|
{
|
||||||
|
protocol: "https",
|
||||||
|
hostname: "**",
|
||||||
|
port: "",
|
||||||
|
pathname: "**",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = nextConfig;
|
|
@ -0,0 +1,51 @@
|
||||||
|
{
|
||||||
|
"name": "sign365website",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"dev": "next dev",
|
||||||
|
"build": "next build",
|
||||||
|
"start": "next start",
|
||||||
|
"lint": "next lint"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@hookform/resolvers": "^3.2.0",
|
||||||
|
"@netlify/functions": "^2.1.0",
|
||||||
|
"@next/third-parties": "^14.1.0",
|
||||||
|
"@tailwindcss/forms": "^0.5.4",
|
||||||
|
"@vidstack/react": "^1.9.8",
|
||||||
|
"aos": "^2.3.4",
|
||||||
|
"autoprefixer": "10.4.15",
|
||||||
|
"crypto-js": "^4.2.0",
|
||||||
|
"daisyui": "^3.5.1",
|
||||||
|
"eslint": "8.47.0",
|
||||||
|
"eslint-config-next": "13.4.17",
|
||||||
|
"gray-matter": "^4.0.3",
|
||||||
|
"next": "^14.1.0",
|
||||||
|
"next-qrcode": "^2.5.1",
|
||||||
|
"node-fetch-commonjs": "^3.3.2",
|
||||||
|
"pocketbase": "^0.18.0",
|
||||||
|
"postcss": "^8.4.33",
|
||||||
|
"posthog-js": "^1.105.0",
|
||||||
|
"preline": "^2.0.3",
|
||||||
|
"react": "18.2.0",
|
||||||
|
"react-dom": "18.2.0",
|
||||||
|
"react-hook-form": "^7.45.4",
|
||||||
|
"react-icons": "^4.11.0",
|
||||||
|
"react-toastify": "^9.1.3",
|
||||||
|
"sharp": "^0.32.6",
|
||||||
|
"styled-icons": "^10.47.0",
|
||||||
|
"tailwindcss": "3.3.3",
|
||||||
|
"typescript": "5.1.6",
|
||||||
|
"yup": "^1.2.0",
|
||||||
|
"yup-password": "^0.2.2"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@tailwindcss/typography": "^0.5.9",
|
||||||
|
"@types/aos": "^3.0.4",
|
||||||
|
"@types/crypto-js": "^4.2.1",
|
||||||
|
"@types/node": "20.5.0",
|
||||||
|
"@types/react": "18.2.20",
|
||||||
|
"markdown-to-jsx": "^7.3.2"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
module.exports = {
|
||||||
|
plugins: {
|
||||||
|
tailwindcss: {},
|
||||||
|
autoprefixer: {},
|
||||||
|
},
|
||||||
|
}
|
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 115 KiB |
After Width: | Height: | Size: 143 KiB |
After Width: | Height: | Size: 115 KiB |
After Width: | Height: | Size: 140 KiB |
After Width: | Height: | Size: 119 KiB |
After Width: | Height: | Size: 147 KiB |
After Width: | Height: | Size: 72 KiB |
After Width: | Height: | Size: 180 KiB |
After Width: | Height: | Size: 168 KiB |
After Width: | Height: | Size: 196 KiB |