Skip to content
Open
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
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@
"serialize-error": "^13.0.1",
"thenby": "^1.4.0",
"ua-parser-js": "^2.0.9",
"undici": "^8.2.0",
"uuid": "^14.0.0",
"zod": "^4.3.6",
"zustand": "^5.0.12"
Expand Down
9 changes: 9 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions prisma/migrations/21_add_link_utm_parameters/migration.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
-- AlterTable
ALTER TABLE "link"
ADD COLUMN "utm_source" VARCHAR(255),
ADD COLUMN "utm_medium" VARCHAR(255),
ADD COLUMN "utm_campaign" VARCHAR(255),
ADD COLUMN "utm_term" VARCHAR(255),
ADD COLUMN "utm_content" VARCHAR(255);
8 changes: 8 additions & 0 deletions prisma/migrations/22_add_link_og_metadata/migration.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
-- AlterTable
ALTER TABLE "link"
ADD COLUMN "og_title" VARCHAR(255),
ADD COLUMN "og_description" VARCHAR(500),
ADD COLUMN "og_image" VARCHAR(2047),
ADD COLUMN "og_title_manual" BOOLEAN NOT NULL DEFAULT false,
ADD COLUMN "og_description_manual" BOOLEAN NOT NULL DEFAULT false,
ADD COLUMN "og_image_manual" BOOLEAN NOT NULL DEFAULT false;
29 changes: 20 additions & 9 deletions prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -287,15 +287,26 @@ model Revenue {
}

model Link {
id String @id() @map("link_id") @db.Uuid
name String @db.VarChar(100)
url String @db.VarChar(500)
slug String @unique() @db.VarChar(100)
userId String? @map("user_id") @db.Uuid
teamId String? @map("team_id") @db.Uuid
createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6)
updatedAt DateTime? @updatedAt @map("updated_at") @db.Timestamptz(6)
deletedAt DateTime? @map("deleted_at") @db.Timestamptz(6)
id String @id() @map("link_id") @db.Uuid
name String @db.VarChar(100)
url String @db.VarChar(500)
slug String @unique() @db.VarChar(100)
utmSource String? @map("utm_source") @db.VarChar(255)
utmMedium String? @map("utm_medium") @db.VarChar(255)
utmCampaign String? @map("utm_campaign") @db.VarChar(255)
utmTerm String? @map("utm_term") @db.VarChar(255)
utmContent String? @map("utm_content") @db.VarChar(255)
ogTitle String? @map("og_title") @db.VarChar(255)
ogDescription String? @map("og_description") @db.VarChar(500)
ogImage String? @map("og_image") @db.VarChar(2047)
ogTitleManual Boolean @default(false) @map("og_title_manual")
ogDescriptionManual Boolean @default(false) @map("og_description_manual")
ogImageManual Boolean @default(false) @map("og_image_manual")
userId String? @map("user_id") @db.Uuid
teamId String? @map("team_id") @db.Uuid
createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6)
updatedAt DateTime? @updatedAt @map("updated_at") @db.Timestamptz(6)
deletedAt DateTime? @map("deleted_at") @db.Timestamptz(6)

user User? @relation("user", fields: [userId], references: [id])
team Team? @relation(fields: [teamId], references: [id])
Expand Down
5 changes: 5 additions & 0 deletions public/intl/messages/ar-SA.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
"attribution": "الإسناد",
"attribution-description": "شاهد كيف يتفاعل المستخدمون مع حملاتك التسويقية وما الذي يحفز التحويلات.",
"audience": "جمهور",
"auto-detected-from-destination": "تم اكتشافه تلقائيًا من الوجهة",
"average": "المتوسط",
"back": "للخلف",
"before": "قبل",
Expand Down Expand Up @@ -74,6 +75,8 @@
"current": "الحالي",
"current-password": "كلمة المرور الحالية",
"custom-range": "فترة مخصّصة",
"customize-preview": "تخصيص المعاينة",
"customize-preview-description": "تجاوز العنوان والوصف والصورة المستخدمة عند مشاركة هذا الرابط القصير على وسائل التواصل الاجتماعي. يتم اكتشاف الحقول الفارغة تلقائيًا من عنوان URL الوجهة.",
"dashboard": "لوحة التحكم",
"data": "البيانات",
"date": "التاريخ",
Expand Down Expand Up @@ -140,6 +143,7 @@
"growth": "نمو",
"hostname": "اسم المضيف",
"hour": "ساعة",
"image-url": "رابط الصورة",
"includes": "يتضمن",
"inp": "INP",
"insight": "رؤية معمقة",
Expand Down Expand Up @@ -230,6 +234,7 @@
"poor": "ضعيف",
"powered-by": "مشغل بواسطة {name}",
"preferences": "التفضيلات",
"preview": "معاينة",
"previous": "السابق",
"previous-period": "الفترة السابقة",
"previous-year": "العام السابق",
Expand Down
5 changes: 5 additions & 0 deletions public/intl/messages/be-BY.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
"attribution": "Атрыбуцыя",
"attribution-description": "Глядзіце, як карыстальнікі ўзаемадзейнічаюць з вашым маркетынгам і што прыводзіць да канверсій.",
"audience": "Аўдыторыя",
"auto-detected-from-destination": "Аўтаматычна вызначана з прызначэння",
"average": "Сярэдняе",
"back": "Назад",
"before": "Да",
Expand Down Expand Up @@ -74,6 +75,8 @@
"current": "Цяперашні",
"current-password": "Цяперашні пароль",
"custom-range": "Іншы дыяпазон",
"customize-preview": "Наладзіць папярэдні прагляд",
"customize-preview-description": "Перавызначыць загаловак, апісанне і відарыс, якія выкарыстоўваюцца пры абагульванні гэтай кароткай спасылкі ў сацыяльных сетках. Пустыя палі вызначаюцца аўтаматычна з URL прызначэння.",
"dashboard": "Інфармацыйная панэль",
"data": "Дадзеныя",
"date": "Дата",
Expand Down Expand Up @@ -140,6 +143,7 @@
"growth": "Рост",
"hostname": "Імя хаста",
"hour": "Гадзіна",
"image-url": "URL відарыса",
"includes": "Уключае",
"inp": "INP",
"insight": "Інсайт",
Expand Down Expand Up @@ -230,6 +234,7 @@
"poor": "Дрэнна",
"powered-by": "Зроблена {name}",
"preferences": "Налады",
"preview": "Папярэдні прагляд",
"previous": "Папярэдні",
"previous-period": "Папярэдні перыяд",
"previous-year": "Папярэдні год",
Expand Down
5 changes: 5 additions & 0 deletions public/intl/messages/bg-BG.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
"attribution": "Атрибуция",
"attribution-description": "Вижте как потребителите взаимодействат с вашия маркетинг и какво води до конверсии.",
"audience": "Аудитория",
"auto-detected-from-destination": "Автоматично открито от местоназначението",
"average": "Средно",
"back": "Назад",
"before": "Преди",
Expand Down Expand Up @@ -74,6 +75,8 @@
"current": "Текущ",
"current-password": "Текуща парола",
"custom-range": "Обхват",
"customize-preview": "Персонализирай прегледа",
"customize-preview-description": "Замени заглавието, описанието и изображението, използвани при споделяне на тази кратка връзка в социалните мрежи. Празните полета се откриват автоматично от URL на местоназначението.",
"dashboard": "Табло",
"data": "Данни",
"date": "Дата",
Expand Down Expand Up @@ -140,6 +143,7 @@
"growth": "Растеж",
"hostname": "Име на хост",
"hour": "Час",
"image-url": "URL на изображението",
"includes": "Включва",
"inp": "INP",
"insight": "Прозрение",
Expand Down Expand Up @@ -230,6 +234,7 @@
"poor": "Слабо",
"powered-by": "Поддържано от {name}",
"preferences": "Предпочитания",
"preview": "Преглед",
"previous": "Предишен",
"previous-period": "Предишен период",
"previous-year": "Предишна година",
Expand Down
5 changes: 5 additions & 0 deletions public/intl/messages/bn-BD.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
"attribution": "অ্যাট্রিবিউশন",
"attribution-description": "দেখুন ব্যবহারকারীরা কীভাবে আপনার মার্কেটিংয়ের সাথে যুক্ত হয় এবং কীভাবে রূপান্তর ঘটে।",
"audience": "দর্শক",
"auto-detected-from-destination": "গন্তব্য থেকে স্বয়ংক্রিয়ভাবে শনাক্ত",
"average": "গড়",
"back": "পেছনে",
"before": "পূর্বে",
Expand Down Expand Up @@ -74,6 +75,8 @@
"current": "বর্তমান",
"current-password": "বর্তমান পাসওয়ার্ড",
"custom-range": "কাস্টম রেঞ্জ",
"customize-preview": "প্রিভিউ কাস্টমাইজ করুন",
"customize-preview-description": "এই সংক্ষিপ্ত লিঙ্কটি সোশ্যাল মিডিয়ায় শেয়ার করার সময় ব্যবহৃত শিরোনাম, বিবরণ এবং চিত্র ওভাররাইড করুন। খালি ক্ষেত্রগুলি গন্তব্য URL থেকে স্বয়ংক্রিয়ভাবে শনাক্ত করা হয়।",
"dashboard": "ড্যাশবোর্ড",
"data": "ডেটা",
"date": "তারিখ",
Expand Down Expand Up @@ -140,6 +143,7 @@
"growth": "বৃদ্ধি",
"hostname": "হোস্টনেম",
"hour": "ঘণ্টা",
"image-url": "চিত্রের URL",
"includes": "অন্তর্ভুক্ত",
"inp": "INP",
"insight": "অন্তর্দৃষ্টি",
Expand Down Expand Up @@ -230,6 +234,7 @@
"poor": "খারাপ",
"powered-by": "{name} দ্বারা চালিত",
"preferences": "পছন্দসমূহ",
"preview": "প্রিভিউ",
"previous": "পূর্ববর্তী",
"previous-period": "পূর্ববর্তী সময়কাল",
"previous-year": "গত বছর",
Expand Down
5 changes: 5 additions & 0 deletions public/intl/messages/bs-BA.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"attribution": "Atribucija",
"attribution-description": "Pogledajte kako korisnici komuniciraju s vašim marketingom i šta dovodi do konverzija.",
"audience": "Publika",
"auto-detected-from-destination": "Automatski otkriveno iz odredišta",
"average": "Prosjek",
"back": "Nazad",
"before": "Prije",
Expand Down Expand Up @@ -54,6 +55,10 @@
"confirm": "Potvrdi",
"confirm-password": "Potvrdi šifru",
"contains": "Sadrži",
"customize-preview": "Prilagodi pregled",
"customize-preview-description": "Zamijenite naslov, opis i sliku koji se koriste kada se ovaj kratki link dijeli na društvenim mrežama. Prazna polja se automatski otkrivaju iz odredišnog URL-a.",
"image-url": "URL slike",
"preview": "Pregled",
"regex-match": "Odgovara regularnom izrazu",
"regex-not-match": "Ne odgovara regularnom izrazu",
"content": "Sadržaj",
Expand Down
5 changes: 5 additions & 0 deletions public/intl/messages/ca-ES.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"attribution": "Atribució",
"attribution-description": "Vegeu com els usuaris interactuen amb el vostre màrqueting i què impulsa les conversions.",
"audience": "Audiència",
"auto-detected-from-destination": "Detectat automàticament des de la destinació",
"average": "Mitjana",
"back": "Enrere",
"before": "Abans",
Expand Down Expand Up @@ -54,6 +55,10 @@
"confirm": "Confirmar",
"confirm-password": "Confirma la contrasenya",
"contains": "Conté",
"customize-preview": "Personalitza la visualització prèvia",
"customize-preview-description": "Substitueix el títol, la descripció i la imatge que s'utilitzen quan es comparteix aquest enllaç curt a les xarxes socials. Els camps buits es detecten automàticament des de l'URL de destinació.",
"image-url": "URL de la imatge",
"preview": "Visualització prèvia",
"regex-match": "Coincideix amb l'expressió regular",
"regex-not-match": "No coincideix amb l'expressió regular",
"content": "Contingut",
Expand Down
5 changes: 5 additions & 0 deletions public/intl/messages/cs-CZ.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"attribution": "Atribuce",
"attribution-description": "Podívejte se, jak uživatelé interagují s vaším marketingem a co vede ke konverzím.",
"audience": "Publikum",
"auto-detected-from-destination": "Automaticky detekováno z cíle",
"average": "Průměr",
"back": "Zpět",
"before": "Před",
Expand Down Expand Up @@ -54,6 +55,10 @@
"confirm": "Potvrdit",
"confirm-password": "Potvrdit heslo",
"contains": "Obsahuje",
"customize-preview": "Upravit náhled",
"customize-preview-description": "Přepsat název, popis a obrázek použité při sdílení tohoto krátkého odkazu na sociálních sítích. Prázdná pole jsou automaticky detekována z cílové URL.",
"image-url": "URL obrázku",
"preview": "Náhled",
"regex-match": "Odpovídá regulárnímu výrazu",
"regex-not-match": "Neodpovídá regulárnímu výrazu",
"content": "Obsah",
Expand Down
5 changes: 5 additions & 0 deletions public/intl/messages/da-DK.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"attribution": "Attribuering",
"attribution-description": "Se, hvordan brugere interagerer med din markedsføring, og hvad der driver konverteringer.",
"audience": "Målgruppe",
"auto-detected-from-destination": "Automatisk registreret fra destinationen",
"average": "Gennemsnit",
"back": "Tilbage",
"before": "Før",
Expand Down Expand Up @@ -54,6 +55,10 @@
"confirm": "Bekræft",
"confirm-password": "Godkendt adgangskode",
"contains": "Indeholder",
"customize-preview": "Tilpas forhåndsvisning",
"customize-preview-description": "Tilsidesæt titlen, beskrivelsen og billedet, der bruges, når dette korte link deles på sociale medier. Tomme felter registreres automatisk fra destinations-URL'en.",
"image-url": "Billed-URL",
"preview": "Forhåndsvisning",
"regex-match": "Matcher regulært udtryk",
"regex-not-match": "Matcher ikke regulært udtryk",
"content": "Indhold",
Expand Down
5 changes: 5 additions & 0 deletions public/intl/messages/de-CH.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"attribution": "Zuordnig",
"attribution-description": "Lueg wie d'Benutzer mit dim Marketing interagiere und was zu Umwandlige führt.",
"audience": "Zielgruppe",
"auto-detected-from-destination": "Automatisch vom Ziel erkannt",
"average": "Durchschnitt",
"back": "Zrugg",
"before": "Vor",
Expand Down Expand Up @@ -54,6 +55,10 @@
"confirm": "Bestätige",
"confirm-password": "Passwort widerhole",
"contains": "Enthaltet",
"customize-preview": "Vorschau anpassen",
"customize-preview-description": "Überschreiben Sie den Titel, die Beschreibung und das Bild, die beim Teilen dieses Kurzlinks in sozialen Netzwerken verwendet werden. Leere Felder werden automatisch aus der Ziel-URL erkannt.",
"image-url": "Bild-URL",
"preview": "Vorschau",
"regex-match": "Entspricht regulärem Ausdruck",
"regex-not-match": "Entspricht nicht regulärem Ausdruck",
"content": "Inhalt",
Expand Down
5 changes: 5 additions & 0 deletions public/intl/messages/de-DE.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"attribution": "Zuordnung",
"attribution-description": "Sehen Sie, wie Nutzer mit Ihrem Marketing interagieren und was zu Konversionen führt.",
"audience": "Zielgruppe",
"auto-detected-from-destination": "Automatisch vom Ziel erkannt",
"average": "Durchschnitt",
"back": "Zurück",
"before": "Vor",
Expand Down Expand Up @@ -54,6 +55,10 @@
"confirm": "Bestätigen",
"confirm-password": "Passwort wiederholen",
"contains": "Enthält",
"customize-preview": "Vorschau anpassen",
"customize-preview-description": "Überschreiben Sie den Titel, die Beschreibung und das Bild, die beim Teilen dieses Kurzlinks in sozialen Netzwerken verwendet werden. Leere Felder werden automatisch aus der Ziel-URL erkannt.",
"image-url": "Bild-URL",
"preview": "Vorschau",
"regex-match": "Entspricht regulärem Ausdruck",
"regex-not-match": "Entspricht nicht regulärem Ausdruck",
"content": "Inhalt",
Expand Down
5 changes: 5 additions & 0 deletions public/intl/messages/el-GR.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
"attribution": "Απόδοση",
"attribution-description": "Δείτε πώς αλληλεπιδρούν οι χρήστες με το μάρκετινγκ και τι οδηγεί σε μετατροπές.",
"audience": "Κοινό",
"auto-detected-from-destination": "Εντοπίστηκε αυτόματα από τον προορισμό",
"average": "Μέσος όρος",
"back": "Πίσω",
"before": "Πριν",
Expand Down Expand Up @@ -74,6 +75,8 @@
"current": "Τρέχων",
"current-password": "Τωρινός κωδικός πρόσβασης",
"custom-range": "Προσαρμοσμένο εύρος",
"customize-preview": "Προσαρμογή προεπισκόπησης",
"customize-preview-description": "Αντικαταστήστε τον τίτλο, την περιγραφή και την εικόνα που χρησιμοποιούνται όταν αυτός ο σύντομος σύνδεσμος κοινοποιείται στα μέσα κοινωνικής δικτύωσης. Τα κενά πεδία ανιχνεύονται αυτόματα από το URL προορισμού.",
"dashboard": "Πίνακας",
"data": "Δεδομένα",
"date": "Ημερομηνία",
Expand Down Expand Up @@ -140,6 +143,7 @@
"growth": "Ανάπτυξη",
"hostname": "Όνομα κεντρικού υπολογιστή",
"hour": "Ώρα",
"image-url": "URL εικόνας",
"includes": "Περιλαμβάνει",
"inp": "INP",
"insight": "Πληροφορία",
Expand Down Expand Up @@ -230,6 +234,7 @@
"poor": "Κακό",
"powered-by": "Με την υποστήριξη του {name}",
"preferences": "Προτιμήσεις",
"preview": "Προεπισκόπηση",
"previous": "Προηγούμενο",
"previous-period": "Προηγούμενη περίοδος",
"previous-year": "Προηγούμενο έτος",
Expand Down
5 changes: 5 additions & 0 deletions public/intl/messages/en-GB.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"attribution": "Attribution",
"attribution-description": "See how users engage with your marketing and what drives conversions.",
"audience": "Audience",
"auto-detected-from-destination": "Auto-detected from destination",
"average": "Average",
"back": "Back",
"before": "Before",
Expand Down Expand Up @@ -54,6 +55,10 @@
"confirm": "Confirm",
"confirm-password": "Confirm password",
"contains": "Contains",
"customize-preview": "Customise preview",
"customize-preview-description": "Override the title, description and image used when this short link is shared on social media. Empty fields are auto-detected from the destination URL.",
"image-url": "Image URL",
"preview": "Preview",
"regex-match": "Matches regex",
"regex-not-match": "Does not match regex",
"content": "Content",
Expand Down
Loading