-
-
+ });
+ }}
+ className="grid gap-6 bg-gray-50 py-8"
+ >
+
+
+
+
+ Short Link
+
+
+ {generatingSlug ? (
+
+ ) : (
+
+ )}
+ {generatingSlug ? "Generating" : "Randomize"}
+
+
+
+
+ {domain || "dub.sh"}
+
+
{
+ setKeyExistsError(false);
+ setData({ ...data, key: e.target.value });
+ }}
+ aria-invalid="true"
+ aria-describedby="key-error"
+ />
+ {keyExistsError && (
+
+ )}
+
+ {keyExistsError && (
+
+ Short link is already in use.
+
+ )}
+
+
+
- Short Link
+ Destination URL
-
- {generatingSlug ? (
-
- ) : (
-
+
+
{
+ setUrlError(false);
+ setData({ ...data, url: e.target.value });
+ }}
+ className={`${
+ urlError
+ ? "border-red-300 pr-10 text-red-900 placeholder-red-300 focus:border-red-500 focus:ring-red-500"
+ : "border-gray-300 text-gray-900 placeholder-gray-300 focus:border-gray-500 focus:ring-gray-500"
+ } block w-full rounded-md focus:outline-none sm:text-sm`}
+ aria-invalid="true"
+ />
+ {urlError && (
+
)}
-
{generatingSlug ? "Generating" : "Randomize"}
-
-
-
-
- {domain || "dub.sh"}
-
-
{
- setKeyExistsError(false);
- setData({ ...data, key: e.target.value });
- }}
- aria-invalid="true"
- aria-describedby="key-error"
- />
- {keyExistsError && (
-
+
+ {urlError && (
+
+ Invalid url.
+
)}
- {keyExistsError && (
-
- Short link is already in use.
-
- )}
-
-
+
+
+
- Destination URL
-
-
-
{
- setUrlError(false);
- setData({ ...data, url: e.target.value });
- }}
- className={`${
- urlError
- ? "border-red-300 pr-10 text-red-900 placeholder-red-300 focus:border-red-500 focus:ring-red-500"
- : "border-gray-300 text-gray-900 placeholder-gray-300 focus:border-gray-500 focus:ring-gray-500"
- } block w-full rounded-md focus:outline-none sm:text-sm`}
- aria-invalid="true"
- />
- {urlError && (
-
+ {saving ? (
+
+ ) : (
+
+ {props ? "Save changes" : "Add link"}
+
)}
-
- {urlError && (
-
- Invalid url.
-
- )}
+
-
-
-
-
-
-
- {saving ? (
-
- ) : (
- {props ? "Save changes" : "Add link"}
- )}
-
-
-
+
+
+
preview
);
diff --git a/components/app/modals/add-edit-link-modal/og-section.tsx b/components/app/modals/add-edit-link-modal/og-section.tsx
index fe3f15298d..605f5bca0e 100644
--- a/components/app/modals/add-edit-link-modal/og-section.tsx
+++ b/components/app/modals/add-edit-link-modal/og-section.tsx
@@ -135,7 +135,7 @@ export default function OGSection({
id="description"
minRows={3}
className="block w-full rounded-md border-gray-300 pr-10 text-gray-900 placeholder-gray-300 focus:border-gray-500 focus:outline-none focus:ring-gray-500 sm:text-sm"
- placeholder="Dub is an open-source link shortener SaaS with built-in analytics + free custom domains."
+ placeholder="Dub is open-source link management tool for modern marketing teams to create, share, and track short links."
value={description || ""}
onChange={(e) => {
setData({
diff --git a/components/home/features.tsx b/components/home/features.tsx
index 9773d7970a..69b2841e6d 100644
--- a/components/home/features.tsx
+++ b/components/home/features.tsx
@@ -5,6 +5,7 @@ import {
QR,
Users,
Link as LinkIcon,
+ Photo,
} from "@/components/shared/icons";
import MaxWidthWrapper from "@/components/shared/max-width-wrapper";
import { useState } from "react";
@@ -31,6 +32,7 @@ const featureList = [
),
demo: "https://d2vwwcvoksz7ty.cloudfront.net/analytics.mp4",
+ thumbnail: "/_static/features/analytics.png",
},
{
key: "domains",
@@ -51,11 +53,29 @@ const featureList = [
demo: "https://d2vwwcvoksz7ty.cloudfront.net/custom-domain.mp4",
},
{
- key: "links",
- title: "Links with superpowers",
+ key: "social",
+ title: "Custom social media cards",
+ icon:
,
+ description:
+ "Overlay custom OG images on your links to make them stand out on social media.",
+ cta: (
+
+ Customize your links
+
+ ),
+ demo: "https://d2vwwcvoksz7ty.cloudfront.net/og.mp4",
+ },
+ {
+ key: "builder",
+ title: "Powerful link builder",
icon:
,
description:
- "Create links with custom social previews, UTM parameters, password protection, and expiration dates.",
+ "Build your links with UTM parameters, password protection, and even expiration dates.",
cta: (
- Create your project
+ Build your link
- ), //custom cta
+ ),
demo: "https://d2vwwcvoksz7ty.cloudfront.net/og.mp4",
},
{
@@ -186,9 +206,16 @@ export default function Features() {
stiffness: 300,
damping: 30,
}}
- className="min-h-[600px] w-full overflow-hidden whitespace-nowrap rounded-2xl bg-white shadow-2xl lg:mt-10 lg:w-[800px]"
+ className="relative min-h-[600px] w-full overflow-hidden whitespace-nowrap rounded-2xl bg-white shadow-2xl lg:mt-10 lg:w-[800px]"
>
-
+
Your browser does not support the video tag.
diff --git a/components/home/hero.tsx b/components/home/hero.tsx
index 79d60e6807..9aa68c79f8 100644
--- a/components/home/hero.tsx
+++ b/components/home/hero.tsx
@@ -16,17 +16,17 @@ const Hero = () => {
-
- Open Source
+
+ Short Links With
- Bitly Alternative
+ Superpowers
-
- Dub is an open-source link shortener with built-in analytics and free
- custom domains.
-
+
+ Dub is an open-source link management tool for modern marketing teams to
+ create, share, and track short links.
+