style: refact feature section

This commit is contained in:
oiov
2025-10-18 16:33:38 +08:00
parent 814610cd59
commit 9d2d730987
5 changed files with 831 additions and 130 deletions

View File

@@ -11,8 +11,14 @@ import { buttonVariants } from "@/components/ui/button";
import { Icons } from "@/components/shared/icons";
import CountUpFn from "../dashboard/count-up";
import {
Collapsible,
CollapsibleContent,
CollapsibleTrigger,
} from "../ui/collapsible";
import { InfiniteSlider } from "../ui/infinite-slider";
import { ProgressiveBlur } from "../ui/progressive-blur";
import { Separator } from "../ui/separator";
import EmailManagerExp from "./email";
import PreviewLanding from "./preview-landing";
import UrlShortener from "./url-shortener";
@@ -86,7 +92,7 @@ export default function HeroLanding({
<PreviewLanding />
<div className="group relative m-auto hidden max-w-5xl md:block">
<div className="group relative m-auto hidden max-w-4xl md:block">
<div className="flex flex-col items-center md:flex-row">
<div className="mb-4 hidden md:mb-0 md:block md:max-w-44 md:border-r md:border-gray-600 md:pr-6">
<p className="text-end text-sm text-black dark:text-gray-400">
@@ -196,149 +202,586 @@ export function LandingImages() {
<div className="mx-auto w-full max-w-5xl px-6">
<div className="flex flex-col items-center gap-4 text-center">
<h2 className="font-mono font-semibold uppercase tracking-wider text-blue-600">
{t("Features")}
{t("FEATURES")}
</h2>
<p className="text-balance text-2xl text-foreground">
<p className="text-balance text-2xl font-semibold text-muted-foreground">
{"All In One Means"}
</p>
</div>
<div className="mb-14 mt-6 flex flex-col items-center justify-around gap-10 md:flex-row-reverse">
<Image
className="size-[260px] rounded-lg transition-all hover:opacity-90 hover:shadow-xl"
alt={t("exampleImageAlt")}
src="/_static/landing/link.svg"
placeholder="blur"
blurDataURL="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAAACCSURBVBhXZYzBCgIxDEQnTdPau+hveBB/XtiLn+NJQdoNS2Orq6zuO0zgZRhSVbvegeAJGx7hvUeMAUSEzu1RUesEKuNkIgyrFaoFzB4i8i1+cDEwXHOuRc65lbVpe38XuPm+YMdIKa3WOj9F60vWcj0IOg8Xy7ngdDxgv9vO+h/gCZNAKuSRdQ2rAAAAAElFTkSuQmCC"
width={280}
height={280}
/>
<div className="grids grids-dark px-2 py-4">
<h3 className="mb-6 text-xl font-bold md:text-3xl">
{t("urlShorteningTitle")}
{/* Short Link Service */}
<div className="mt-16 grid gap-12 sm:px-12 lg:grid-cols-12 lg:gap-24 lg:px-0">
<div className="items-start px-2 py-4 text-left lg:col-span-5">
<h3 className="mb-4 text-xl font-bold text-blue-500 md:text-3xl">
{t("shortLinkService")}
</h3>
<p className="text-lg">{t("urlShorteningDescription")}</p>
</div>
</div>
<div className="flex flex-col items-center justify-around gap-10 md:flex-row">
<Image
className="size-[260px] rounded-lg transition-all hover:opacity-90 hover:shadow-xl"
alt={t("exampleImageAlt")}
src="/_static/landing/hosting.svg"
placeholder="blur"
blurDataURL="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAAACCSURBVBhXZYzBCgIxDEQnTdPau+hveBB/XtiLn+NJQdoNS2Orq6zuO0zgZRhSVbvegeAJGx7hvUeMAUSEzu1RUesEKuNkIgyrFaoFzB4i8i1+cDEwXHOuRc65lbVpe38XuPm+YMdIKa3WOj9F60vWcj0IOg8Xy7ngdDxgv9vO+h/gCZNAKuSRdQ2rAAAAAElFTkSuQmCC"
width={430}
height={280}
/>
<div className="grids grids-dark px-2 py-4">
<h3 className="mb-6 text-xl font-bold md:text-3xl">
{t("freeSubdomainHostingTitle")}
</h3>
<p className="text-lg">{t("freeSubdomainHostingDescription")}</p>
</div>
</div>
<div className="my-14 flex flex-col items-center justify-around gap-10 md:flex-row-reverse">
<Image
className="size-[260px] rounded-lg transition-all hover:opacity-90 hover:shadow-xl"
alt={t("exampleImageAlt")}
src="/_static/landing/email.svg"
placeholder="blur"
blurDataURL="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAAACCSURBVBhXZYzBCgIxDEQnTdPau+hveBB/XtiLn+NJQdoNS2Orq6zuO0zgZRhSVbvegeAJGx7hvUeMAUSEzu1RUesEKuNkIgyrFaoFzB4i8i1+cDEwXHOuRc65lbVpe38XuPm+YMdIKa3WOj9F60vWcj0IOg8Xy7ngdDxgv9vO+h/gCZNAKuSRdQ2rAAAAAElFTkSuQmCC"
width={450}
height={280}
/>
<div className="grids grids-dark px-2 py-4">
<h3 className="mb-6 text-xl font-bold md:text-3xl">
{t("emailReceiversSendersTitle")}
</h3>
<p className="text-lg">
{t("emailReceiversSendersDescription")}{" "}
<a
className="underline"
href="/dashboard/settings"
target="_blank"
>
{t("applyYourApiKey")}
</a>
<p className="font-semibold text-muted-foreground">
{t("shortLinkDescription")}
</p>
<div className="mt-6">
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.link className="mr-2 size-4" /> {t("customSuffix")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("customSuffixDetail", {
defaultValue:
"Create personalized short links with custom suffixes for better branding",
})}
</CollapsibleContent>
</Collapsible>
<Separator />
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.lineChart className="mr-2 size-4" />{" "}
{t("realtimeStats")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("realtimeStatsDetail", {
defaultValue:
"Track visitor counts, geographic locations, and device information in real-time",
})}
</CollapsibleContent>
</Collapsible>
<Separator />
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.pwdKey className="mr-2 size-4" />{" "}
{t("passwordProtection")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("passwordProtectionDetail", {
defaultValue:
"Add password protection to sensitive short links for enhanced security",
})}
</CollapsibleContent>
</Collapsible>
<Separator />
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.clock className="mr-2 size-4" />
{t("linkExpiration")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("linkExpirationDetail", {
defaultValue:
"Set custom expiration dates for temporary links and campaigns",
})}
</CollapsibleContent>
</Collapsible>
<Separator />
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.qrcode className="mr-2 size-4" />
{t("customQRCode")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("customQRCodeDetail", {
defaultValue:
"Generate customizable QR codes for your short links",
})}
</CollapsibleContent>
</Collapsible>
<Separator />
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.braces className="mr-2 size-4" />
{t("shortLinkOpenAPI")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("shortLinkOpenAPIDetail", {
defaultValue:
"Create and manage short links programmatically via REST API",
})}
</CollapsibleContent>
</Collapsible>
</div>
</div>
<div className="overflow-clip rounded-xl border py-4 md:p-3.5 lg:col-span-7">
<div className="flex size-full items-center justify-center rounded-lg border p-3 md:bg-muted/50">
<Image
className="size-[350px] rounded-lg transition-all hover:border hover:opacity-90 hover:shadow-xl"
alt={t("exampleImageAlt")}
src="/_static/landing/link.svg"
placeholder="blur"
blurDataURL="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAAACCSURBVBhXZYzBCgIxDEQnTdPau+hveBB/XtiLn+NJQdoNS2Orq6zuO0zgZRhSVbvegeAJGx7hvUeMAUSEzu1RUesEKuNkIgyrFaoFzB4i8i1+cDEwXHOuRc65lbVpe38XuPm+YMdIKa3WOj9F60vWcj0IOg8Xy7ngdDxgv9vO+h/gCZNAKuSRdQ2rAAAAAElFTkSuQmCC"
width={280}
height={280}
/>
</div>
</div>
</div>
<div className="flex flex-col items-center justify-around gap-10 md:flex-row">
<Image
className="size-[260px] rounded-lg transition-all hover:opacity-90 hover:shadow-xl"
alt={t("exampleImageAlt")}
src="/_static/landing/domain.svg"
placeholder="blur"
blurDataURL="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAAACCSURBVBhXZYzBCgIxDEQnTdPau+hveBB/XtiLn+NJQdoNS2Orq6zuO0zgZRhSVbvegeAJGx7hvUeMAUSEzu1RUesEKuNkIgyrFaoFzB4i8i1+cDEwXHOuRc65lbVpe38XuPm+YMdIKa3WOj9F60vWcj0IOg8Xy7ngdDxgv9vO+h/gCZNAKuSRdQ2rAAAAAElFTkSuQmCC"
width={430}
height={280}
/>
<div className="grids grids-dark px-2 py-4">
<h3 className="mb-6 text-xl font-bold md:text-3xl">
{t("multipleDomainsTitle")}
{/* Domain Email Service */}
<div className="mt-16 grid gap-12 sm:px-12 lg:grid-cols-12 lg:gap-24 lg:px-0">
<div className="items-start px-2 py-4 text-left lg:col-span-5">
<h3 className="mb-4 text-xl font-bold text-blue-500 md:text-3xl">
{t("domainEmail")}
</h3>
<p className="text-lg">{t("multipleDomainsDescription")}</p>
</div>
</div>
<div className="flex flex-col items-center justify-around gap-10 md:flex-row-reverse">
<Image
className="size-[260px] rounded-lg transition-all hover:opacity-90 hover:shadow-xl"
alt={t("exampleImageAlt")}
src="/_static/landing/screenshot.svg"
placeholder="blur"
blurDataURL="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAAACCSURBVBhXZYzBCgIxDEQnTdPau+hveBB/XtiLn+NJQdoNS2Orq6zuO0zgZRhSVbvegeAJGx7hvUeMAUSEzu1RUesEKuNkIgyrFaoFzB4i8i1+cDEwXHOuRc65lbVpe38XuPm+YMdIKa3WOj9F60vWcj0IOg8Xy7ngdDxgv9vO+h/gCZNAKuSRdQ2rAAAAAElFTkSuQmCC"
width={460}
height={280}
/>
<div className="grids grids-dark px-2 py-4">
<h3 className="mb-6 text-xl font-bold md:text-3xl">
{t("websiteScreenshotApiTitle")}
</h3>
<p className="text-lg">
{t("websiteScreenshotApiDescription")}{" "}
<a
className="underline"
href="/dashboard/settings"
target="_blank"
>
{t("applyYourApiKey")}
</a>
<p className="font-semibold text-muted-foreground">
{t("domainEmailDescription")}
</p>
<div className="mt-6">
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.mail className="mr-2 size-4" />
{t("customEmailPrefix")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("customEmailPrefixDetail", {
defaultValue:
"Create email addresses with custom prefixes using your domain",
})}
</CollapsibleContent>
</Collapsible>
<Separator />
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.mailPlus className="mr-2 size-4" />
{t("unlimitedMailboxes")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("unlimitedMailboxesDetail", {
defaultValue:
"Create as many email addresses as you need for different purposes",
})}
</CollapsibleContent>
</Collapsible>
<Separator />
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.inbox className="mr-2 size-4" />
{t("unlimitedReceiving")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("unlimitedReceivingDetail")}
</CollapsibleContent>
</Collapsible>
<Separator />
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.send className="mr-2 size-4" />
{t("flexibleSending")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("flexibleSendingDetail")}
</CollapsibleContent>
</Collapsible>
<Separator />
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.mailOpen className="mr-2 size-4" />
{t("emailForwarding")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("emailForwardingDetail")}
</CollapsibleContent>
</Collapsible>
<Separator />
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.braces className="mr-2 size-4" />
{t("emailOpenAPI")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("emailOpenAPIDetail")}
</CollapsibleContent>
</Collapsible>
</div>
</div>
<div className="overflow-clip rounded-xl border py-4 md:p-3.5 lg:col-span-7">
<div className="flex size-full items-center justify-center rounded-lg border p-3 md:bg-muted/50">
<Image
className="size-[350px] rounded-lg transition-all hover:border hover:opacity-90 hover:shadow-xl"
alt={t("exampleImageAlt")}
src="/_static/landing/email.svg"
placeholder="blur"
blurDataURL="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAAACCSURBVBhXZYzBCgIxDEQnTdPau+hveBB/XtiLn+NJQdoNS2Orq6zuO0zgZRhSVbvegeAJGx7hvUeMAUSEzu1RUesEKuNkIgyrFaoFzB4i8i1+cDEwXHOuRc65lbVpe38XuPm+YMdIKa3WOj9F60vWcj0IOg8Xy7ngdDxgv9vO+h/gCZNAKuSRdQ2rAAAAAElFTkSuQmCC"
width={280}
height={280}
/>
</div>
</div>
</div>
<div className="my-14 flex flex-col items-center justify-around gap-10 md:flex-row">
<Image
className="size-[260px] rounded-lg transition-all hover:opacity-90 hover:shadow-xl"
alt={t("exampleImageAlt")}
src="/_static/landing/info.svg"
placeholder="blur"
blurDataURL="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAAACCSURBVBhXZYzBCgIxDEQnTdPau+hveBB/XtiLn+NJQdoNS2Orq6zuO0zgZRhSVbvegeAJGx7hvUeMAUSEzu1RUesEKuNkIgyrFaoFzB4i8i1+cDEwXHOuRc65lbVpe38XuPm+YMdIKa3WOj9F60vWcj0IOg8Xy7ngdDxgv9vO+h/gCZNAKuSRdQ2rAAAAAElFTkSuQmCC"
width={430}
height={280}
/>
<div className="grids grids-dark px-2 py-4">
<h3 className="mb-6 text-xl font-bold md:text-3xl">
{t("metaInformationApiTitle")}
{/* Subdomain Hosting Service */}
<div className="mt-16 grid gap-12 sm:px-12 lg:grid-cols-12 lg:gap-24 lg:px-0">
<div className="items-start px-2 py-4 text-left lg:col-span-5">
<h3 className="mb-4 text-xl font-bold text-blue-500 md:text-3xl">
{t("subdomainHosting")}
</h3>
<p className="text-lg">
{t("metaInformationApiDescription")}{" "}
<a
className="underline"
href="/dashboard/settings"
target="_blank"
>
{t("applyYourApiKey")}
</a>
<p className="font-semibold text-muted-foreground">
{t("subdomainDescription")}
</p>
<div className="mt-6">
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.cloudflare className="mr-2 size-4" />
{t("cloudflareHosting")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("cloudflareHostingDetail", {
defaultValue:
"Leverage Cloudflare's global infrastructure for fast and reliable DNS hosting",
})}
</CollapsibleContent>
</Collapsible>
<Separator />
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.globe className="mr-2 size-4" />
{t("multiDomainSync")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("multiDomainSyncDetail")}
</CollapsibleContent>
</Collapsible>
<Separator />
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.puzzle className="mr-2 size-4" />
{t("flexibleDNSConfig")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("flexibleDNSConfigDetail")}
</CollapsibleContent>
</Collapsible>
<Separator />
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.globeLock className="mr-2 size-4" />
{t("antiAbuseManagement")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("antiAbuseManagementDetail")}
</CollapsibleContent>
</Collapsible>
</div>
</div>
<div className="overflow-clip rounded-xl border py-4 md:p-3.5 lg:col-span-7">
<div className="flex size-full items-center justify-center rounded-lg border p-3 md:bg-muted/50">
<Image
className="size-[350px] rounded-lg transition-all hover:border hover:opacity-90 hover:shadow-xl"
alt={t("exampleImageAlt")}
src="/_static/landing/hosting.svg"
placeholder="blur"
blurDataURL="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAAACCSURBVBhXZYzBCgIxDEQnTdPau+hveBB/XtiLn+NJQdoNS2Orq6zuO0zgZRhSVbvegeAJGx7hvUeMAUSEzu1RUesEKuNkIgyrFaoFzB4i8i1+cDEwXHOuRc65lbVpe38XuPm+YMdIKa3WOj9F60vWcj0IOg8Xy7ngdDxgv9vO+h/gCZNAKuSRdQ2rAAAAAElFTkSuQmCC"
width={280}
height={280}
/>
</div>
</div>
</div>
{/* File Storage Service */}
<div className="mt-16 grid gap-12 sm:px-12 lg:grid-cols-12 lg:gap-24 lg:px-0">
<div className="items-start px-2 py-4 text-left lg:col-span-5">
<h3 className="mb-4 text-xl font-bold text-blue-500 md:text-3xl">
{t("fileStorage")}
</h3>
<p className="font-semibold text-muted-foreground">
{t("fileStorageDescription")}
</p>
<div className="mt-6">
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.globe className="mr-2 size-4" />
{t("s3Compatible")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("s3CompatibleDetail")}
</CollapsibleContent>
</Collapsible>
<Separator />
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.dashboard className="mr-2 size-4" />
{t("multipleBuckets")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("multipleBucketsDetail", {
defaultValue:
"Configure multiple storage buckets within a single cloud provider for better organization",
})}
</CollapsibleContent>
</Collapsible>
<Separator />
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.fileText className="mr-2 size-4" />
{t("uploadSizeLimit")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("uploadSizeLimitDetail", {
defaultValue:
"Set and adjust maximum file upload sizes based on your requirements",
})}
</CollapsibleContent>
</Collapsible>
<Separator />
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.hand className="mr-2 size-4" />
{t("multipleUploadMethods")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("multipleUploadMethodsDetail", {
defaultValue:
"Upload files using drag-and-drop, batch uploads, or paste from clipboard",
})}
</CollapsibleContent>
</Collapsible>
<Separator />
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.trash className="mr-2 size-4" />
{t("batchDelete")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("batchDeleteDetail", {
defaultValue:
"Delete multiple files at once for efficient file management",
})}
</CollapsibleContent>
</Collapsible>
<Separator />
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.qrcode className="mr-2 size-4" />
{t("quickShortLink")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("quickShortLinkDetail", {
defaultValue:
"Instantly generate short links and QR codes for your stored files",
})}
</CollapsibleContent>
</Collapsible>
</div>
</div>
<div className="overflow-clip rounded-xl border py-4 md:p-3.5 lg:col-span-7">
<div className="flex size-full items-center justify-center rounded-lg border p-3 md:bg-muted/50">
<Image
className="size-[350px] rounded-lg transition-all hover:border hover:opacity-90 hover:shadow-xl"
alt={t("exampleImageAlt")}
src="/_static/landing/domain.svg"
placeholder="blur"
blurDataURL="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAAACCSURBVBhXZYzBCgIxDEQnTdPau+hveBB/XtiLn+NJQdoNS2Orq6zuO0zgZRhSVbvegeAJGx7hvUeMAUSEzu1RUesEKuNkIgyrFaoFzB4i8i1+cDEwXHOuRc65lbVpe38XuPm+YMdIKa3WOj9F60vWcj0IOg8Xy7ngdDxgv9vO+h/gCZNAKuSRdQ2rAAAAAElFTkSuQmCC"
width={280}
height={280}
/>
</div>
</div>
</div>
{/* Open API Service */}
<div className="mt-16 grid gap-12 sm:px-12 lg:grid-cols-12 lg:gap-24 lg:px-0">
<div className="items-start px-2 py-4 text-left lg:col-span-5">
<h3 className="mb-4 text-xl font-bold text-blue-500 md:text-3xl">
{t("openAPI")}
</h3>
<p className="font-semibold text-muted-foreground">
{t("openAPIDescription")}
</p>
<div className="mt-6">
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.scanQrCode className="mr-2 size-4" />
{t("websiteMetadata")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("websiteMetadataDetail", {
defaultValue:
"Extract metadata such as title, description, and Open Graph tags from any website",
})}
</CollapsibleContent>
</Collapsible>
<Separator />
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.camera className="mr-2 size-4" />
{t("websiteScreenshot")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("websiteScreenshotDetail", {
defaultValue:
"Capture high-quality screenshots of any website for previews and documentation",
})}
</CollapsibleContent>
</Collapsible>
<Separator />
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.qrcode className="mr-2 size-4" />
{t("websiteQRCode")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("websiteQRCodeDetail", {
defaultValue:
"Convert any website URL into a scannable QR code",
})}
</CollapsibleContent>
</Collapsible>
<Separator />
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.monitorDown className="mr-2 size-4" />
{t("websiteConversion")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("websiteConversionDetail", {
defaultValue:
"Convert website content to Markdown or plain text format for easy integration",
})}
</CollapsibleContent>
</Collapsible>
<Separator />
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.braces className="mr-2 size-4" />
{t("apiKeyMechanism")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("apiKeyMechanismDetail")}
</CollapsibleContent>
</Collapsible>
</div>
</div>
<div className="overflow-clip rounded-xl border py-4 md:p-3.5 lg:col-span-7">
<div className="flex size-full items-center justify-center rounded-lg border p-3 md:bg-muted/50">
<Image
className="size-[350px] rounded-lg transition-all hover:border hover:opacity-90 hover:shadow-xl"
alt={t("exampleImageAlt")}
src="/_static/landing/screenshot.svg"
placeholder="blur"
blurDataURL="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAAACCSURBVBhXZYzBCgIxDEQnTdPau+hveBB/XtiLn+NJQdoNS2Orq6zuO0zgZRhSVbvegeAJGx7hvUeMAUSEzu1RUesEKuNkIgyrFaoFzB4i8i1+cDEwXHOuRc65lbVpe38XuPm+YMdIKa3WOj9F60vWcj0IOg8Xy7ngdDxgv9vO+h/gCZNAKuSRdQ2rAAAAAElFTkSuQmCC"
width={280}
height={280}
/>
</div>
</div>
</div>
{/* Permission Management Module */}
<div className="mt-16 grid gap-12 sm:px-12 lg:grid-cols-12 lg:gap-24 lg:px-0">
<div className="items-start px-2 py-4 text-left lg:col-span-5">
<h3 className="mb-4 text-xl font-bold text-blue-500 md:text-3xl">
{t("permissionManagement")}
</h3>
<p className="font-semibold text-muted-foreground">
{t("permissionManagementDescription")}
</p>
<div className="mt-6">
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.lineChart className="mr-2 size-4" />
{t("dataVisualization")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("dataVisualizationDetail", {
defaultValue:
"View comprehensive dashboard with charts showing usage trends and analytics",
})}
</CollapsibleContent>
</Collapsible>
<Separator />
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.cog className="mr-2 size-4" />
{t("serviceConfiguration")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("serviceConfigurationDetail")}
</CollapsibleContent>
</Collapsible>
<Separator />
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.users className="mr-2 size-4" />
{t("userManagement")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("userManagementDetail")}
</CollapsibleContent>
</Collapsible>
<Separator />
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.shieldCheck className="mr-2 size-4" />
{t("loginMethods")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("loginMethodsDetail")}
</CollapsibleContent>
</Collapsible>
<Separator />
<Collapsible>
<CollapsibleTrigger className="flex w-full items-center py-3 hover:underline">
<Icons.databaseZap className="mr-2 size-4" />
{t("resourceManagement")}
<Icons.chevronDown className="ml-auto size-4" />
</CollapsibleTrigger>
<CollapsibleContent className="pb-3 text-sm text-muted-foreground">
{t("resourceManagementDetail")}
</CollapsibleContent>
</Collapsible>
</div>
</div>
<div className="overflow-clip rounded-xl border py-4 md:p-3.5 lg:col-span-7">
<div className="flex size-full items-center justify-center rounded-lg border p-3 md:bg-muted/50">
<Image
className="size-[350px] rounded-lg transition-all hover:border hover:opacity-90 hover:shadow-xl"
alt={t("exampleImageAlt")}
src="/_static/landing/info.svg"
placeholder="blur"
blurDataURL="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAAACCSURBVBhXZYzBCgIxDEQnTdPau+hveBB/XtiLn+NJQdoNS2Orq6zuO0zgZRhSVbvegeAJGx7hvUeMAUSEzu1RUesEKuNkIgyrFaoFzB4i8i1+cDEwXHOuRc65lbVpe38XuPm+YMdIKa3WOj9F60vWcj0IOg8Xy7ngdDxgv9vO+h/gCZNAKuSRdQ2rAAAAAElFTkSuQmCC"
width={280}
height={280}
/>
</div>
</div>
</div>
</div>
<TechStackGrid />
<DynamicData />
<div className="grids grids-dark mx-auto my-12 flex w-full max-w-6xl px-4">
@@ -356,7 +799,7 @@ export function DynamicData() {
<div className="mx-auto mt-10 max-w-5xl space-y-8 px-6 md:space-y-16">
<div className="flex flex-col items-center gap-4 text-center">
<h2 className="font-mono font-semibold uppercase tracking-wider text-blue-600">
{t("Stats")}
{t("STATS")}
</h2>
<div className="text-balance text-2xl text-foreground">
<span style={{ fontFamily: "Bahamas Bold" }}>WR.DO Cloud</span> in
@@ -394,6 +837,86 @@ export function DynamicData() {
);
}
export function TechStackGrid() {
const t = useTranslations("Landing");
const items = [
{
icon: "N",
title: "Next.js",
description: "The most popular full stack React framework.",
},
{
icon: "🔐",
title: "Next Auth",
description: "The best open source authentication library.",
},
{
icon: "🗂️",
title: "Prisma ORM",
description: "Lightweight, performant, headless TypeScript ORM.",
},
{
icon: "✏️",
title: "Shadcn UI",
description: "Open source components for building modern websites.",
},
{
icon: "🎨",
title: "Tailwind CSS",
description: "The CSS framework for rapid UI development.",
},
{
icon: "☁️",
title: "Cloudflare",
description: "The best open source cloud platform.",
},
{
icon: "▲",
title: "Vercel",
description: "The best open source hosting platform.",
},
{
icon: "📧",
title: "Resend/Brevo",
description: "The best email service.",
},
];
return (
<div className="mx-auto mt-16 max-w-5xl">
<div className="flex flex-col items-center gap-4 text-center">
<h2 className="font-mono font-semibold uppercase tracking-wider text-blue-600">
{t("TECH STACK")}
</h2>
<p className="text-balance text-2xl font-semibold text-muted-foreground">
{t("Build with your favorite tech stack")}
</p>
</div>
<div className="mt-16 grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-4">
{items.map((item, index) => (
<div
key={index}
className="cursor-pointer rounded-lg border border-gray-200 bg-white p-6 transition-all duration-200 hover:border-gray-300 hover:shadow-md dark:border-gray-700 dark:bg-muted"
>
<div className="mb-4 flex items-center gap-3">
<div className="flex h-10 w-10 items-center justify-center rounded-lg bg-gradient-to-br from-gray-100 to-gray-200 text-lg font-bold text-gray-700">
{item.icon}
</div>
<h3 className="text-lg font-semibold text-gray-900 dark:text-white">
{item.title}
</h3>
</div>
<p className="text-sm leading-relaxed text-gray-600 dark:text-gray-400">
{item.description}
</p>
</div>
))}
</div>
</div>
);
}
export function CardItem({
bgColor = "bg-yellow-400",
rotate = "rotate-12",

View File

@@ -7,6 +7,7 @@ import {
ArrowUpRight,
BookOpen,
BotMessageSquare,
Braces,
Bug,
Calendar,
Camera,
@@ -16,16 +17,20 @@ import {
ChevronLeft,
ChevronRight,
CirclePlay,
Clock,
CloudUpload,
Code,
Cog,
Copy,
Crown,
DatabaseZap,
Download,
EllipsisVertical,
Eye,
File,
FileText,
GlobeLock,
Hand,
Heading1,
HelpCircle,
Home,
@@ -49,16 +54,20 @@ import {
MailPlus,
MessageSquareQuote,
MessagesSquare,
MonitorDown,
Moon,
MoreVertical,
Package,
Paintbrush,
Plus,
Puzzle,
QrCode,
RefreshCw,
ScanQrCode,
Search,
Send,
Settings,
ShieldCheck,
SunMedium,
Trash2,
Type,
@@ -87,15 +96,24 @@ export const Icons = {
chevronRight: ChevronRight,
chevronDown: ChevronDown,
bookOpen: BookOpen,
braces: Braces,
check: Check,
checkCheck: CheckCheck,
close: X,
code: Code,
copy: Copy,
clock: Clock,
cog: Cog,
type: Type,
camera: Camera,
calendar: Calendar,
crown: Crown,
puzzle: Puzzle,
hand: Hand,
scanQrCode: ScanQrCode,
monitorDown: MonitorDown,
shieldCheck: ShieldCheck,
databaseZap: DatabaseZap,
cloudUpload: ({ ...props }: LucideProps) => (
<svg
role="presentation"

View File

@@ -410,7 +410,6 @@
"platformDescription": "Link shortening, domain hosting, email manager and open api, everything you need to build better.",
"documents": "Documents",
"signInForFree": "Sign in for free",
"exampleImageAlt": "example",
"urlShorteningTitle": "URL Shortening",
"urlShorteningDescription": "📖 Instantly transform long, unwieldy URLs into short, memorable links that are easy to share. Enjoy built-in analytics to track clicks, monitor performance, and gain insights into your audience—all in real time.",
"freeSubdomainHostingTitle": "Free Subdomain Hosting",
@@ -445,7 +444,88 @@
"Happy Customers": "Happy Customers",
"Short Links": "Short Links",
"Email Addresses": "Email Addresses",
"Inbox Emails": "Inbox Emails"
"Inbox Emails": "Inbox Emails",
"shortLinkService": "Short Link Generation Service",
"shortLinkDescription": "Flexibly generate short links with real-time access tracking",
"customSuffix": "Custom Short Link Suffix",
"realtimeStats": "Real-time Access Statistics",
"passwordProtection": "Password-Protected Links",
"linkExpiration": "Link Expiration Time",
"customQRCode": "Custom QR Code",
"shortLinkOpenAPI": "Open API for Short Link Creation",
"subdomainHosting": "Subdomain Hosting Service",
"subdomainDescription": "Flexibly manage DNS records for multiple domains",
"cloudflareHosting": "Hosted on Cloudflare",
"multiDomainSync": "Multi-domain DNS Synchronization Management",
"multiDomainSyncDetail": "Support for managing DNS records across multiple Cloudflare accounts and domains",
"flexibleDNSConfig": "Flexible DNS Record Type Configuration",
"flexibleDNSConfigDetail": "Support for creating various DNS record types (CNAME, A, TXT, etc.) configured per domain",
"antiAbuseManagement": "Anti-abuse Management Mode",
"antiAbuseManagementDetail": "Support for application mode with user submission and admin approval, with email notifications to administrators",
"domainEmail": "Domain Email Service",
"domainEmailDescription": "Create unlimited domain-based email addresses with flexible sending and receiving",
"customEmailPrefix": "Custom Email Prefix",
"unlimitedMailboxes": "Unlimited Mailbox Creation",
"unlimitedReceiving": "Unlimited Email Receiving",
"unlimitedReceivingDetail": "Powered by Cloudflare Email Worker",
"flexibleSending": "Flexible Email Sending",
"flexibleSendingDetail": "Multiple email service providers available including Resend and Brevo",
"emailForwarding": "Email Forwarding and Push Notifications",
"emailForwardingDetail": "Catch-all email forwarding and Telegram push notifications",
"emailOpenAPI": "Open API Interface",
"emailOpenAPIDetail": "Create new mailboxes and retrieve inbox lists via API",
"fileStorage": "File Storage Service",
"fileStorageDescription": "Store and manage files across multiple domains with S3-compatible storage solutions",
"s3Compatible": "S3-Compatible Interface",
"s3CompatibleDetail": "Support for multiple cloud storage platforms via S3 API including Cloudflare R2, AWS S3, and OSS",
"multipleBuckets": "Multiple Storage Buckets per Provider",
"uploadSizeLimit": "Dynamic File Upload Size Limits",
"multipleUploadMethods": "Drag-and-drop, Batch, and Paste File Upload",
"batchDelete": "Batch File Deletion",
"quickShortLink": "Quick Generate File Short Links and QR Codes",
"openAPI": "Open API Service",
"openAPIDescription": "Provide comprehensive APIs for website analysis, conversion, and screenshot generation",
"websiteMetadata": "Website Metadata API",
"websiteScreenshot": "Website Screenshot API",
"websiteQRCode": "Website to QR Code API",
"websiteConversion": "Website to Markdown and Text Conversion",
"apiKeyMechanism": "API Key Mechanism",
"apiKeyMechanismDetail": "Support for generating user API Keys for third-party API calls",
"permissionManagement": "Permission Management Module",
"permissionManagementDescription": "Comprehensive administrative control and monitoring for service management",
"dataVisualization": "Multi-dimensional Chart Display of Website Data",
"serviceConfiguration": "Domain Service Configuration",
"serviceConfigurationDetail": "Dynamically configure which services are enabled including short links and temporary email (send/receive)",
"userManagement": "User List Management",
"userManagementDetail": "Set permissions, allocate quotas, disable users, and more",
"loginMethods": "Dynamic Login Method Configuration",
"loginMethodsDetail": "Support for Google, GitHub, password, and LinuxDO login methods",
"resourceManagement": "Unified Management of Short Links, Email, and Subdomains",
"resourceManagementDetail": "Manage all user-created short links, email addresses, and subdomain resources",
"exampleImageAlt": "Example image",
"customSuffixDetail": "Create personalized short links with custom suffixes for better branding",
"realtimeStatsDetail": "Track visitor counts, geographic locations, and device information in real-time",
"passwordProtectionDetail": "Add password protection to sensitive short links for enhanced security",
"linkExpirationDetail": "Set custom expiration dates for temporary links and campaigns",
"customQRCodeDetail": "Generate customizable QR codes for your short links",
"shortLinkOpenAPIDetail": "Create and manage short links programmatically via REST API",
"cloudflareHostingDetail": "Leverage Cloudflare's global infrastructure for fast and reliable DNS hosting",
"customEmailPrefixDetail": "Create email addresses with custom prefixes using your domain",
"unlimitedMailboxesDetail": "Create as many email addresses as you need for different purposes",
"multipleBucketsDetail": "Configure multiple storage buckets within a single cloud provider for better organization",
"uploadSizeLimitDetail": "Set and adjust maximum file upload sizes based on your requirements",
"multipleUploadMethodsDetail": "Upload files using drag-and-drop, batch uploads, or paste from clipboard",
"batchDeleteDetail": "Delete multiple files at once for efficient file management",
"quickShortLinkDetail": "Instantly generate short links and QR codes for your stored files",
"websiteMetadataDetail": "Extract metadata such as title, description, and Open Graph tags from any website",
"websiteScreenshotDetail": "Capture high-quality screenshots of any website for previews and documentation",
"websiteQRCodeDetail": "Convert any website URL into a scannable QR code",
"websiteConversionDetail": "Convert website content to Markdown or plain text format for easy integration",
"dataVisualizationDetail": "View comprehensive dashboard with charts showing usage trends and analytics",
"TECH STACK": "TECH STACK",
"Build with your favorite tech stack": "Build with your favorite tech stack",
"STATS": "STATS",
"FEATURES": "FEATURES"
},
"Auth": {
"Back": "Back",

View File

@@ -410,8 +410,7 @@
"platformDescription": "集成短链生成、子域名托管、无限邮箱服务以及开放API接口一站式域名管理解决方案释放你的域名潜力",
"documents": "部署文档",
"signInForFree": "免费登录",
"exampleImageAlt": "示例",
"urlShorteningTitle": "短链生成器",
"urlShorteningTitle": "短链生成",
"urlShorteningDescription": "📖 立即将冗长、复杂的URL转换为短小易记的链接便于分享。享受内置的分析功能实时跟踪点击量、监控性能并深入了解您的受众。支持设置密码保护、自定义二维码生成支持调用API生成。",
"freeSubdomainHostingTitle": "子域名托管",
"freeSubdomainHostingDescription": "🎉 管理多 Cloudflare 账户下的多个域名的 DNS 记录,支持创建多种 DNS 记录类型CNAME、A、TXT 等)。",
@@ -445,7 +444,88 @@
"Happy Customers": "累计注册用户",
"Short Links": "创建短链数量",
"Email Addresses": "用户邮箱数量",
"Inbox Emails": "接收邮件数量"
"Inbox Emails": "接收邮件数量",
"shortLinkService": "短链生成服务",
"shortLinkDescription": "灵活生成短链接,实时追踪访问数据",
"customSuffix": "自定义短链后缀",
"realtimeStats": "实时访问统计",
"passwordProtection": "设置密码保护链接",
"linkExpiration": "链接过期时间",
"customQRCode": "自定义二维码",
"shortLinkOpenAPI": "开放 API 创建短链",
"subdomainHosting": "子域名托管服务",
"subdomainDescription": "灵活管理多个域名的 DNS 记录配置",
"cloudflareHosting": "托管在 Cloudflare",
"multiDomainSync": "多域名 DNS 同步管理",
"multiDomainSyncDetail": "支持管理多 Cloudflare 账户下的多个域名的 DNS 记录",
"flexibleDNSConfig": "灵活配置 DNS 记录类型",
"flexibleDNSConfigDetail": "支持创建多种 DNS 记录类型CNAME、A、TXT 等),根据不同的域名配置",
"antiAbuseManagement": "防滥用管理模式",
"antiAbuseManagementDetail": "支持开启申请模式(用户提交、管理员审批),均使用邮件通知管理员",
"domainEmail": "域名邮箱服务",
"domainEmailDescription": "创建无限域名邮箱,灵活收发邮件",
"customEmailPrefix": "自定义邮箱前缀",
"unlimitedMailboxes": "创建无限数量邮箱",
"unlimitedReceiving": "接收无限制邮件",
"unlimitedReceivingDetail": "依赖 Cloudflare Email Worker",
"flexibleSending": "灵活发送邮件",
"flexibleSendingDetail": "多渠道发件服务商可供选择,如 Resend、Brevo",
"emailForwarding": "邮件转发与推送",
"emailForwardingDetail": "Catch-all 邮件转发与 Telegram 推送",
"emailOpenAPI": "开放 API 接口",
"emailOpenAPIDetail": "通过 API 创建新邮箱,以及 API 获取收件箱列表",
"fileStorage": "文件存储服务",
"fileStorageDescription": "跨多个域名存储和管理文件,支持 S3 兼容存储方案",
"s3Compatible": "兼容 S3 接口",
"s3CompatibleDetail": "支持多渠道S3 API云存储平台如 Cloudflare R2、AWS S3、OSS 等",
"multipleBuckets": "单渠道多存储桶配置",
"uploadSizeLimit": "动态配置文件上传大小限制",
"multipleUploadMethods": "拖拽、批量、粘贴上传文件",
"batchDelete": "批量删除文件",
"quickShortLink": "快捷生成文件短链、二维码",
"openAPI": "开放接口服务",
"openAPIDescription": "提供网站分析、转换和截图生成的综合 API 服务",
"websiteMetadata": "网站元数据 API",
"websiteScreenshot": "网站截图 API",
"websiteQRCode": "网站转二维码 API",
"websiteConversion": "网站转换为 Markdown、Text",
"apiKeyMechanism": "API Key 机制",
"apiKeyMechanismDetail": "支持生成用户 API Key用于第三方调用开放接口",
"permissionManagement": "权限管理模块",
"permissionManagementDescription": "全面的管理控制和服务监控",
"dataVisualization": "多维度图表展示网站数据",
"serviceConfiguration": "业务域名服务配置",
"serviceConfigurationDetail": "动态配置各项域名相关服务是否启用,包括短链、临时邮箱(收发邮件)、子域名管理",
"userManagement": "用户列表管理",
"userManagementDetail": "设置权限、分配使用额度、禁用用户等",
"loginMethods": "动态配置登录方式",
"loginMethodsDetail": "支持 Google、GitHub、账户密码、LinuxDO 登陆方式",
"resourceManagement": "短链、邮箱、子域名统一管理",
"resourceManagementDetail": "管理所有用户创建的短链、邮箱、子域名资源",
"exampleImageAlt": "示例图片",
"customSuffixDetail": "使用自定义后缀创建个性化的短链接,增强品牌识别度",
"realtimeStatsDetail": "实时追踪访问者数量、地理位置和设备信息",
"passwordProtectionDetail": "为敏感的短链接添加密码保护,增强安全性",
"linkExpirationDetail": "为临时链接和营销活动设置自定义过期日期",
"customQRCodeDetail": "为短链接生成可自定义的二维码",
"shortLinkOpenAPIDetail": "通过 REST API 以编程方式创建和管理短链接",
"cloudflareHostingDetail": "利用 Cloudflare 全球基础设施提供快速可靠的 DNS 托管",
"customEmailPrefixDetail": "使用你的域名创建具有自定义前缀的电子邮件地址",
"unlimitedMailboxesDetail": "根据需要为不同目的创建尽可能多的电子邮件地址",
"multipleBucketsDetail": "在单个云提供商内配置多个存储桶,以便更好地组织",
"uploadSizeLimitDetail": "根据要求设置和调整最大文件上传大小",
"multipleUploadMethodsDetail": "使用拖拽、批量上传或粘贴从剪贴板上传文件",
"batchDeleteDetail": "一次删除多个文件以实现高效的文件管理",
"quickShortLinkDetail": "即时为存储的文件生成短链接和二维码",
"websiteMetadataDetail": "从任何网站提取标题、描述和 Open Graph 标签等元数据",
"websiteScreenshotDetail": "为任何网站捕获高质量的截图,用于预览和文档记录",
"websiteQRCodeDetail": "将任何网站 URL 转换为可扫描的二维码",
"websiteConversionDetail": "将网站内容转换为 Markdown 或纯文本格式,便于集成",
"dataVisualizationDetail": "查看包含使用趋势和分析图表的全面仪表板",
"TECH STACK": "技术栈",
"Build with your favorite tech stack": "使用你最喜欢的技术栈构建",
"STATS": "STATS",
"FEATURES": "功能特性"
},
"Auth": {
"Back": "返回",

File diff suppressed because one or more lines are too long