fixup style and img
@@ -1,6 +1,6 @@
|
||||
import { NavMobile } from "@/components/layout/mobile-nav";
|
||||
import { NavBar } from "@/components/layout/navbar";
|
||||
import { SiteFooter } from "@/components/layout/site-footer";
|
||||
import { NavMobile } from "@/components/layout/mobile-nav";
|
||||
|
||||
interface MarketingLayoutProps {
|
||||
children: React.ReactNode;
|
||||
@@ -8,10 +8,12 @@ interface MarketingLayoutProps {
|
||||
|
||||
export default function MarketingLayout({ children }: MarketingLayoutProps) {
|
||||
return (
|
||||
<div className="flex min-h-screen flex-col">
|
||||
<div className="flex min-h-screen flex-col bg-[linear-gradient(to_right,#4f4f4f2e_1px,transparent_1px),linear-gradient(to_bottom,#8080800a_1px,transparent_1px)] bg-[size:14px_24px] dark:bg-black dark:bg-[linear-gradient(to_right,#4f4f4f2e_1px,transparent_1px),linear-gradient(to_bottom,#8080800a_1px,transparent_1px)]">
|
||||
<NavMobile />
|
||||
<NavBar scroll={true} />
|
||||
<main className="flex-1">{children}</main>
|
||||
<main className="flex-1 bg-[radial-gradient(circle_400px_at_50%_300px,#a1fffc36,#ffffff)] dark:bg-[radial-gradient(circle_400px_at_50%_300px,#a1fffc36,#000)]">
|
||||
{children}
|
||||
</main>
|
||||
<SiteFooter />
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -138,7 +138,7 @@ export default function UserRecordsList({ user }: RecordListProps) {
|
||||
/>
|
||||
)}
|
||||
<Table>
|
||||
<TableHeader>
|
||||
<TableHeader className="bg-gray-100/50 dark:bg-primary-foreground">
|
||||
<TableRow className="grid grid-cols-3 items-center sm:grid-cols-7">
|
||||
<TableHead className="col-span-1 flex items-center font-bold">
|
||||
Type
|
||||
|
||||
@@ -128,7 +128,7 @@ export default function UserUrlsList({ user }: UrlListProps) {
|
||||
/>
|
||||
)}
|
||||
<Table>
|
||||
<TableHeader>
|
||||
<TableHeader className="bg-gray-100/50 dark:bg-primary-foreground">
|
||||
<TableRow className="grid grid-cols-3 items-center sm:grid-cols-7">
|
||||
<TableHead className="col-span-1 flex items-center font-bold sm:col-span-2">
|
||||
Target
|
||||
@@ -162,7 +162,7 @@ export default function UserUrlsList({ user }: UrlListProps) {
|
||||
>
|
||||
<TableCell className="col-span-1 sm:col-span-2">
|
||||
<Link
|
||||
className="text-slate-600 hover:text-blue-400 hover:underline"
|
||||
className="text-slate-600 hover:text-blue-400 hover:underline dark:text-slate-400"
|
||||
href={short.target}
|
||||
target="_blank"
|
||||
prefetch={false}
|
||||
@@ -175,7 +175,7 @@ export default function UserUrlsList({ user }: UrlListProps) {
|
||||
</TableCell>
|
||||
<TableCell className="col-span-1 flex items-center gap-1 sm:col-span-2">
|
||||
<Link
|
||||
className="text-slate-600 hover:text-blue-400 hover:underline"
|
||||
className="text-slate-600 hover:text-blue-400 hover:underline dark:text-slate-400"
|
||||
href={`/s/${short.url}`}
|
||||
target="_blank"
|
||||
prefetch={false}
|
||||
|
||||
@@ -7,13 +7,12 @@ export async function GET(req: NextRequest) {
|
||||
const url = new URL(req.url);
|
||||
const slug = url.searchParams.get("slug");
|
||||
const ip = url.searchParams.get("ip");
|
||||
if (!slug) return Response.json(null);
|
||||
if (!slug || !ip) return Response.json(null);
|
||||
|
||||
const res = await getUrlBySuffix(slug);
|
||||
if (res?.target && res?.active === 1) {
|
||||
// const ip = req.headers.get("X-Forwarded-For");
|
||||
console.log("[api/s]", ip, res.id);
|
||||
|
||||
// TODO
|
||||
await createUserShortUrlMeta({
|
||||
urlId: res.id,
|
||||
click: 1,
|
||||
|
||||
@@ -5,7 +5,7 @@ export default function StatusDot({ status }: { status: number }) {
|
||||
<div
|
||||
className={cn(
|
||||
"h-[9px] w-[9px] rounded-full",
|
||||
status === 1 ? "bg-green-500" : "bg-yellow-500",
|
||||
status === 1 ? "animate-pulse bg-green-500" : "bg-yellow-500",
|
||||
)}
|
||||
/>
|
||||
);
|
||||
|
||||
@@ -190,15 +190,6 @@ export function DashboardSidebar({ links }: DashboardSidebarProps) {
|
||||
oiov
|
||||
</Link>
|
||||
. <br /> Built with{" "}
|
||||
<Link
|
||||
href="https://nextjs.org?ref=wrdo"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
className="font-medium text-primary underline underline-offset-2"
|
||||
>
|
||||
Nextjs
|
||||
</Link>{" "}
|
||||
&{" "}
|
||||
<Link
|
||||
href="https://www.cloudflare.com?ref=wrdo"
|
||||
target="_blank"
|
||||
|
||||
@@ -10,7 +10,7 @@ import { Icons } from "../shared/icons";
|
||||
|
||||
export function SiteFooter({ className }: React.HTMLAttributes<HTMLElement>) {
|
||||
return (
|
||||
<footer className={cn("border-t", className)}>
|
||||
<footer className={cn("border-t bg-background", className)}>
|
||||
<div className="container grid max-w-6xl grid-cols-2 gap-6 py-14 md:grid-cols-5">
|
||||
<div className="col-span-full flex flex-col items-start sm:col-span-1 md:col-span-2">
|
||||
{/* <NewsletterForm /> */}
|
||||
@@ -64,15 +64,6 @@ export function SiteFooter({ className }: React.HTMLAttributes<HTMLElement>) {
|
||||
oiov
|
||||
</Link>
|
||||
. <br className="block sm:hidden" /> Built with{" "}
|
||||
<Link
|
||||
href="https://nextjs.org?ref=wrdo"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
className="font-medium text-primary underline underline-offset-2"
|
||||
>
|
||||
Nextjs
|
||||
</Link>{" "}
|
||||
&{" "}
|
||||
<Link
|
||||
href="https://www.cloudflare.com?ref=wrdo"
|
||||
target="_blank"
|
||||
|
||||
|
Before Width: | Height: | Size: 223 KiB After Width: | Height: | Size: 230 KiB |
|
Before Width: | Height: | Size: 229 KiB After Width: | Height: | Size: 236 KiB |
|
Before Width: | Height: | Size: 229 KiB |
|
After Width: | Height: | Size: 236 KiB |
|
Before Width: | Height: | Size: 162 KiB After Width: | Height: | Size: 561 KiB |