Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "",
"name": "airdb-website",
"type": "module",
"version": "0.0.1",
"scripts": {
Expand Down
Binary file added public/social.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 1 addition & 6 deletions src/components/sections/navbar&footer/FooterSection.astro
Original file line number Diff line number Diff line change
Expand Up @@ -46,19 +46,14 @@ const sectionBeian: string =
{section.section}
</h3>
<ul class="mt-3 grid space-y-3">
{section.links.map((link, index) => (
{section.links.map((link) => (
<li>
<a
href={link.url}
class="inline-flex gap-x-2 rounded-lg text-neutral-600 outline-none ring-zinc-500 transition duration-300 hover:text-neutral-500 focus-visible:ring dark:text-neutral-400 dark:ring-zinc-200 dark:hover:text-neutral-300 dark:focus:outline-none"
>
{link.name}
</a>
{section.section === "Company" && index === 2 ? (
<span class="ms-1 inline rounded-lg bg-orange-500 px-2 py-1 text-xs font-bold text-neutral-50">
We're hiring!
</span>
) : null}
</li>
))}
</ul>
Expand Down
183 changes: 87 additions & 96 deletions src/components/sections/pricing/PricingSection.astro
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ import Icon from "@components/ui/icons/Icon.astro";
// Define props from Astro
const { pricing } = Astro.props;

// Define TypeScript type for products.
// Define TypeScript type for a pricing plan.
/*
type Product = {
type Plan = {
name: string;
description: string;
price: string;
Expand All @@ -17,6 +17,8 @@ type Product = {
features: Array<string>;
purchaseBtnTitle: string;
purchaseLink: string;
highlight?: boolean;
badge?: string;
};
*/
---
Expand All @@ -35,108 +37,97 @@ type Product = {
{pricing.subTitle}
</p>
</div>
<!-- Contains two main product blocks -->
<div class="flex flex-wrap items-center justify-center gap-4 sm:gap-0">
<!-- Starter Kit product details -->
<div
class="w-full rounded-xl bg-gray-800 p-6 sm:w-1/2 sm:rounded-r-none sm:p-8 lg:w-1/3"
>
<div class="mb-4">
<h3 class="text-2xl font-bold text-neutral-100 sm:text-3xl">
{pricing.starterKit.name}
</h3>
<p class="text-indigo-300">{pricing.starterKit.description}</p>
</div>

<div class="mb-4">
<span class="text-4xl font-bold text-neutral-200"
>{pricing.starterKit.price}</span
>
<span class="text-lg font-bold text-neutral-300"
>{pricing.starterKit.cents}</span
>
<span class="ms-3 text-sm text-indigo-200"
>{pricing.starterKit.billingFrequency}</span
>
</div>
<!-- Features list - automatically created by mapping over `features` array -->
<ul class="mb-6 space-y-2 text-neutral-300">
{
pricing.starterKit.features.map((feature: string) => (
<li class="flex items-center gap-1.5">
<Icon name="checkCircle" />

<span>{feature}</span>
</li>
))
}
</ul>
<!-- CTA for purchasing the product -->
<a
href={pricing.starterKit.purchaseLink}
class="block rounded-lg bg-gray-500 px-8 py-3 text-center text-sm font-bold text-gray-100 ring-indigo-300 transition duration-100 outline-none hover:bg-gray-600 focus-visible:ring active:text-gray-300 md:text-base"
>{pricing.starterKit.purchaseBtnTitle}</a
>
</div>
<!-- Professional Toolbox product details -->
<div
class="w-full rounded-xl bg-gradient-to-tr from-[#FF512F] to-[#F09819] p-6 shadow-xl sm:w-1/2 sm:p-8"
>
<div
class="mb-4 flex flex-col items-start justify-between gap-4 lg:flex-row"
>
<div>
<h3 class="text-2xl font-bold text-neutral-100 sm:text-3xl">
{pricing.professionalToolbox.name}
</h3>
<p class="text-orange-200">
{pricing.professionalToolbox.description}
</p>
</div>

<span
class="bg-opacity-50 order-first inline-block rounded-full bg-orange-200 px-3 py-1 text-center text-xs font-bold tracking-wider text-orange-600 uppercase lg:order-none"
>{pricing.badge}</span
>
</div>
<!-- Pricing plan cards - automatically created by mapping over `plans` array -->
<div class="grid grid-cols-1 items-stretch gap-6 sm:grid-cols-2 lg:grid-cols-3">
{
pricing.plans.map((plan: any) =>
plan.highlight ? (
<div class="rounded-xl bg-gradient-to-tr from-[#FF512F] to-[#F09819] p-6 shadow-xl sm:p-8">
<div class="mb-4 flex flex-col items-start justify-between gap-4 lg:flex-row">
<div>
<h3 class="text-2xl font-bold text-neutral-100 sm:text-3xl">
{plan.name}
</h3>
<p class="text-orange-200">{plan.description}</p>
</div>
{plan.badge && (
<span class="bg-opacity-50 order-first inline-block rounded-full bg-orange-200 px-3 py-1 text-center text-xs font-bold tracking-wider text-orange-600 uppercase lg:order-none">
{plan.badge}
</span>
)}
</div>

<div class="mb-4">
<span class="text-6xl font-bold text-neutral-200"
>{pricing.professionalToolbox.price}</span
>
<span class="text-lg font-bold text-orange-100"
>{pricing.professionalToolbox.cents}</span
>
<span class="ms-3 text-orange-200"
>{pricing.professionalToolbox.billingFrequency}</span
>
</div>
<!-- Features list - automatically created by mapping over `features` array -->
<ul class="mb-6 space-y-2 text-orange-100">
{
pricing.professionalToolbox.features.map((feature: string) => (
<li class="flex items-center gap-1.5">
<Icon name="checkCircle" />
<div class="mb-4">
<span class="text-4xl font-bold text-neutral-200 sm:text-5xl">
{plan.price}
</span>
<span class="text-lg font-bold text-orange-100">
{plan.cents}
</span>
<span class="ms-3 text-orange-200">
{plan.billingFrequency}
</span>
</div>
<ul class="mb-6 space-y-2 text-orange-100">
{plan.features.map((feature: string) => (
<li class="flex items-center gap-1.5">
<Icon name="checkCircle" />
<span>{feature}</span>
</li>
))}
</ul>
<a
href={plan.purchaseLink}
class="bg-opacity-50 hover:bg-opacity-50 block rounded-lg bg-orange-200 px-8 py-3 text-center text-sm font-bold text-neutral-100 ring-orange-300 transition duration-100 outline-none hover:bg-orange-300 focus-visible:ring active:bg-orange-400 md:text-base"
>
{plan.purchaseBtnTitle}
</a>
</div>
) : (
<div class="rounded-xl bg-gray-800 p-6 sm:p-8">
<div class="mb-4">
<h3 class="text-2xl font-bold text-neutral-100 sm:text-3xl">
{plan.name}
</h3>
<p class="text-indigo-300">{plan.description}</p>
</div>

<span>{feature}</span>
</li>
))
}
</ul>
<!-- CTA for purchasing the product -->
<a
href={pricing.professionalToolbox.purchaseLink}
class="bg-opacity-50 hover:bg-opacity-50 block rounded-lg bg-orange-200 px-8 py-3 text-center text-sm font-bold text-neutral-100 ring-orange-300 transition duration-100 outline-none hover:bg-orange-300 focus-visible:ring active:bg-orange-400 md:text-base"
>{pricing.professionalToolbox.purchaseBtnTitle}</a
>
</div>
<div class="mb-4">
<span class="text-4xl font-bold text-neutral-200">
{plan.price}
</span>
<span class="text-lg font-bold text-neutral-300">
{plan.cents}
</span>
<span class="ms-3 text-sm text-indigo-200">
{plan.billingFrequency}
</span>
</div>
<ul class="mb-6 space-y-2 text-neutral-300">
{plan.features.map((feature: string) => (
<li class="flex items-center gap-1.5">
<Icon name="checkCircle" />
<span>{feature}</span>
</li>
))}
</ul>
<a
href={plan.purchaseLink}
class="block rounded-lg bg-gray-500 px-8 py-3 text-center text-sm font-bold text-gray-100 ring-indigo-300 transition duration-100 outline-none hover:bg-gray-600 focus-visible:ring active:text-gray-300 md:text-base"
>
{plan.purchaseBtnTitle}
</a>
</div>
)
)
}
</div>
<!-- Call to action for Enterprise Solutions -->
<div class="mt-8 flex items-center justify-center gap-x-3 md:mt-12">
<p class="text-sm text-neutral-600 dark:text-neutral-400">
{pricing.thirdOption}
</p>

<SecondaryCTA title={pricing.btnText} url="#" />
<SecondaryCTA title={pricing.btnText} url="/contact" />
</div>
</section>
2 changes: 1 addition & 1 deletion src/components/ui/forms/RegisterModal.astro
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ const config = {
<Checkbox label="I accept the " , id="terms-agree">
<a
class="font-medium text-orange-400 decoration-2 hover:underline dark:text-orange-400 dark:focus:outline-none"
href="#">Terms and Conditions</a
href="/about/terms-of-service/">Terms and Conditions</a
>
</Checkbox>
<!-- Submit button for the registration form -->
Expand Down
88 changes: 56 additions & 32 deletions src/data_files/pricing.json
Original file line number Diff line number Diff line change
@@ -1,39 +1,63 @@
{
"title": "Simple, Transparent Pricing",
"subTitle": "Boost efficiency with Airdb's clear, value-driven plans.",
"badge": "Best value",
"thirdOption": "Enterprise Solutions?",
"thirdOption": "Need something bigger?",
"btnText": "Get a Custom Quote",

"starterKit": {
"name": "Basic Service",
"description": "Best option for your website - small scale uses",
"price": "99",
"cents": ".00",
"billingFrequency": "USD / monthly",
"features": [
"Standard support",
"One-stop Corporatec IT services",
"website hosting solution",
"Access to empower your business with AI tools"
],
"purchaseBtnTitle": "Get Started",
"purchaseLink": "#"
},
"plans": [
{
"name": "Basic Service",
"description": "Best for individuals and small teams getting started",
"price": "99",
"cents": ".00",
"billingFrequency": "USD / monthly",
"features": [
"Standard support",
"One-stop corporate IT services",
"Website hosting solution",
"Access to core AI tools",
"Community forum access"
],
"purchaseBtnTitle": "Get Started",
"purchaseLink": "#",
"highlight": false
},

"professionalToolbox": {
"name": "Professional Technical Adviser",
"description": "Best for large scale uses",
"price": "999",
"cents": ".00",
"billingFrequency": "USD / monthly",
"features": [
"Premium priority support",
"CTO/CIO/CISO/DPO as a service",
"Exclusive content & deals",
"High-level security & compliance technical solutions"
],
"purchaseBtnTitle": "Get Expert Support",
"purchaseLink": "#"
}
{
"name": "Growth Plan",
"description": "Best for growing teams that need dedicated AI and data support",
"price": "349",
"cents": ".00",
"billingFrequency": "USD / monthly",
"features": [
"Priority support",
"Dedicated AI copilot workspace",
"Data pipeline integration",
"Monthly performance & usage reports",
"Up to 5 team seats included"
],
"purchaseBtnTitle": "Start Growing",
"purchaseLink": "#",
"highlight": true,
"badge": "Best value"
},

{
"name": "Professional Technical Adviser",
"description": "Best for large scale uses",
"price": "999",
"cents": ".00",
"billingFrequency": "USD / monthly",
"features": [
"Premium priority support",
"CTO/CIO/CISO/DPO as a service",
"Exclusive content & deals",
"High-level security & compliance technical solutions",
"Unlimited team seats"
],
"purchaseBtnTitle": "Get Expert Support",
"purchaseLink": "#",
"highlight": false
}
]
}
Loading