-
-
Read more
-
+
+
+
+
+
+
+
+
+ Why Choose Us?
+
+
+ {features.map((feature, index) => (
+
+
+
+
+
+
+ {feature.title}
+
+
+ {feature.description}
+
+
+
+ ))}
+
+
+
-
- Pricing
-
-
-
-
- Well, actually... it's completely free! 🎉
-
-
- Here's what you get:
-
-
-
-
- -
- ✅ Infinite URLs
-
- -
- ⏳ URLs will be deleted if unused for 3 months
-
-
-
-
-
-
-
-
- Donations are always appreciated! ❤️
-
-
- Supporting keeps this service running!
-
-
-
-
- -
- 🌟 This service will remain free and open source forever
-
- -
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+ About
+
+ A modern URL shortener built with performance and simplicity in mind. Open source and free to use.
+
+
+
+
+ Support the project
+
+
+
+
+
+ Quick Links
+
+
+ Terms of Service
+
+
+ Privacy Policy
+
+
+ API Documentation
+
+
+ System Status
+
+
+
+
+
+ Connect
+
+
+
+
+ Statistics
+
+
+ Total URLs
+ 30+
+
+
+ Active Users
+ 1
+
+
+ API Calls/Day
+ 650+
+
+
+
+
+
+
+
+
+
+
© 2024 aapelix.link
+
·
+
+ Made with
+
+ by
+
+ aapelix
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
);
-}
+}
\ No newline at end of file
diff --git a/app/report/ticket/new/page.tsx b/app/report/ticket/new/page.tsx
index 3000d0f..75561b4 100644
--- a/app/report/ticket/new/page.tsx
+++ b/app/report/ticket/new/page.tsx
@@ -1,5 +1,6 @@
"use client"
+import { motion } from "framer-motion";
import { Card, CardContent } from "@/components/ui/card";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
@@ -10,20 +11,55 @@ import { createTicket, getUser } from "./actions";
import { Textarea } from "@/components/ui/textarea";
import { Button } from "@/components/ui/button";
import { Switch } from "@/components/ui/switch";
+import { AlertCircle, Shield, SendHorizontal } from "lucide-react";
+
+const FloatingCursor = () => {
+ const [position, setPosition] = useState({ x: 0, y: 0 });
+
+ useEffect(() => {
+ const handleMouseMove = (e: { clientX: any; clientY: any; }) => {
+ setPosition({ x: e.clientX, y: e.clientY });
+ };
+ window.addEventListener('mousemove', handleMouseMove);
+ return () => window.removeEventListener('mousemove', handleMouseMove);
+ }, []);
+
+ return (
+
+ );
+};
+
+import { ReactNode } from "react";
+
+const FormField = ({ children }: { children: ReactNode }) => (
+
+ {children}
+
+);
function TicketForm() {
const params = useSearchParams();
-
const [user, setUser] = useState
(null);
- const [selected, setSelected] = useState(null);
+ const [selected, setSelected] = useState("");
const [urlId, setUrlId] = useState("");
const [description, setDescription] = useState("");
- const [connected, setConnected] = useState(false);
+ const [connected, setConnected] = useState(true);
useEffect(() => {
const a = async () => {
const userData = await getUser();
- console.log(userData);
setUser(userData?.email ?? null);
}
@@ -31,59 +67,175 @@ function TicketForm() {
const url_id = params.get("url_id");
setUrlId(url_id ?? "");
- }, [])
+ }, []);
const handleSubmit = () => {
if (!urlId || !selected) return;
createTicket({ email: user ?? undefined, url_id: urlId, type: selected ?? "", description });
- }
+ };
return (
-
-
-
Create a new ticket
-
-
-
-
-
setUser(e.target.value)} />
-
-
-
-
-
-
setUrlId(e.target.value)} value={urlId} />
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+ Report an Issue
+
+
+
+
+
+
+
+
+
+ setUser(e.target.value)}
+ className="bg-zinc-800 border-zinc-700 focus:ring-white/20"
+ />
+
+
+
+
+
+
+
+
+
+
+
+ setUrlId(e.target.value)}
+ value={urlId}
+ className="bg-zinc-800 border-zinc-700 focus:ring-white/20"
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Your report will be reviewed by our team within 24 hours
+
+
+
+
+
+
+
+
- )
+ );
}
export default function Page() {
return (
-
Loading...}>
+
+ Loading...
+
+ }>
- )
+ );
}
\ No newline at end of file
diff --git a/components/ui/separator.tsx b/components/ui/separator.tsx
new file mode 100644
index 0000000..12d81c4
--- /dev/null
+++ b/components/ui/separator.tsx
@@ -0,0 +1,31 @@
+"use client"
+
+import * as React from "react"
+import * as SeparatorPrimitive from "@radix-ui/react-separator"
+
+import { cn } from "@/lib/utils"
+
+const Separator = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(
+ (
+ { className, orientation = "horizontal", decorative = true, ...props },
+ ref
+ ) => (
+
+ )
+)
+Separator.displayName = SeparatorPrimitive.Root.displayName
+
+export { Separator }
diff --git a/package.json b/package.json
index e080507..c182a62 100644
--- a/package.json
+++ b/package.json
@@ -14,6 +14,7 @@
"@radix-ui/react-label": "^2.1.1",
"@radix-ui/react-navigation-menu": "^1.2.3",
"@radix-ui/react-select": "^2.1.4",
+ "@radix-ui/react-separator": "^1.1.1",
"@radix-ui/react-slot": "^1.1.1",
"@radix-ui/react-switch": "^1.1.2",
"@supabase/ssr": "^0.5.2",
@@ -21,6 +22,7 @@
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"lucide-react": "^0.469.0",
+ "motion": "^11.15.0",
"next": "15.1.0",
"next-themes": "^0.4.4",
"qrcode.react": "^4.2.0",
diff --git a/yarn.lock b/yarn.lock
index ffaa772..330d318 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -568,6 +568,13 @@
aria-hidden "^1.1.1"
react-remove-scroll "^2.6.1"
+"@radix-ui/react-separator@^1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-separator/-/react-separator-1.1.1.tgz#dd60621553c858238d876be9b0702287424866d2"
+ integrity sha512-RRiNRSrD8iUiXriq/Y5n4/3iE8HzqgLHsusUSg5jVpU2+3tqcUFPJXHDymwEypunc2sWxDUS3UC+rkZRlHedsw==
+ dependencies:
+ "@radix-ui/react-primitive" "2.0.1"
+
"@radix-ui/react-slot@1.1.1", "@radix-ui/react-slot@^1.1.1":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.1.1.tgz#ab9a0ffae4027db7dc2af503c223c978706affc3"
@@ -1793,6 +1800,15 @@ foreground-child@^3.1.0:
cross-spawn "^7.0.0"
signal-exit "^4.0.1"
+framer-motion@^11.15.0:
+ version "11.15.0"
+ resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-11.15.0.tgz#93e5d1839d500ba9cab1d617959a36142a61212b"
+ integrity sha512-MLk8IvZntxOMg7lDBLw2qgTHHv664bYoYmnFTmE0Gm/FW67aOJk0WM3ctMcG+Xhcv+vh5uyyXwxvxhSeJzSe+w==
+ dependencies:
+ motion-dom "^11.14.3"
+ motion-utils "^11.14.3"
+ tslib "^2.4.0"
+
fsevents@~2.3.2:
version "2.3.3"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
@@ -2365,6 +2381,24 @@ minimist@^1.2.0, minimist@^1.2.6:
resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707"
integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
+motion-dom@^11.14.3:
+ version "11.14.3"
+ resolved "https://registry.yarnpkg.com/motion-dom/-/motion-dom-11.14.3.tgz#725c72c0f1d0b632e42fdd8d13b69ecf9fe202c0"
+ integrity sha512-lW+D2wBy5vxLJi6aCP0xyxTxlTfiu+b+zcpVbGVFUxotwThqhdpPRSmX8xztAgtZMPMeU0WGVn/k1w4I+TbPqA==
+
+motion-utils@^11.14.3:
+ version "11.14.3"
+ resolved "https://registry.yarnpkg.com/motion-utils/-/motion-utils-11.14.3.tgz#cd4a413463739498411f82abb67b3dd58768b0f8"
+ integrity sha512-Xg+8xnqIJTpr0L/cidfTTBFkvRw26ZtGGuIhA94J9PQ2p4mEa06Xx7QVYZH0BP+EpMSaDlu+q0I0mmvwADPsaQ==
+
+motion@^11.15.0:
+ version "11.15.0"
+ resolved "https://registry.yarnpkg.com/motion/-/motion-11.15.0.tgz#1fb62b16300ad011dd4cde0a80ce3fc2a7e63b6e"
+ integrity sha512-iZ7dwADQJWGsqsSkBhNHdI2LyYWU+hA1Nhy357wCLZq1yHxGImgt3l7Yv0HT/WOskcYDq9nxdedyl4zUv7UFFw==
+ dependencies:
+ framer-motion "^11.15.0"
+ tslib "^2.4.0"
+
ms@^2.1.1, ms@^2.1.3:
version "2.1.3"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"