From 6bb0e5578aead42a91ce0ad2d084712736d7b9b9 Mon Sep 17 00:00:00 2001 From: TZGyn Date: Mon, 29 Apr 2024 21:04:05 +0800 Subject: [PATCH] added browser data to visitors --- frontend/bun.lockb | Bin 213634 -> 213634 bytes frontend/package.json | 2 +- frontend/src/lib/db/schema.ts | 1 + .../routes/(app)/links/[id]/+page.server.ts | 10 ++++++ .../src/routes/(app)/links/[id]/+page.svelte | 28 ++++++++++++--- frontend/src/routes/(landing)/+layout.svelte | 30 ++++++++++++++++ .../src/routes/(landing)/landing/+page.svelte | 33 ++++++++++++++++++ .../landing/[...catchall]/+page.server.ts | 6 ++++ .../landing/[...catchall]/+page.svelte | 15 ++++++++ redirect/src/index.ts | 1 + redirect/src/types.ts | 1 + 11 files changed, 121 insertions(+), 6 deletions(-) create mode 100644 frontend/src/routes/(landing)/+layout.svelte create mode 100644 frontend/src/routes/(landing)/landing/+page.svelte create mode 100644 frontend/src/routes/(landing)/landing/[...catchall]/+page.server.ts create mode 100644 frontend/src/routes/(landing)/landing/[...catchall]/+page.svelte diff --git a/frontend/bun.lockb b/frontend/bun.lockb index d7e373740ad416cc166e1eaa89e018e4fde9202e..553f5a7351fc1fc36582336e6025a7de67246a8b 100755 GIT binary patch delta 32 ncmZo_nTno$T_ delta 32 icmZo_ { .where(eq(visitorSchema.shortenerId, shortener.id)) .groupBy(visitorSchema.os) + const visitorByBrowser = await db + .select({ + count: sql`cast(count(*) as int)`, + browser: visitorSchema.browser, + }) + .from(visitorSchema) + .where(eq(visitorSchema.shortenerId, shortener.id)) + .groupBy(visitorSchema.browser) + const visitorByDeviceVendor = await db .select({ count: sql`cast(count(*) as int)`, @@ -101,6 +110,7 @@ export const load = (async (event) => { visitorByCountry, visitorByCity, visitorByOS, + visitorByBrowser, visitorByDeviceVendor, visitorByDeviceType, page_title, diff --git a/frontend/src/routes/(app)/links/[id]/+page.svelte b/frontend/src/routes/(app)/links/[id]/+page.svelte index aeafcf0..0133618 100644 --- a/frontend/src/routes/(app)/links/[id]/+page.svelte +++ b/frontend/src/routes/(app)/links/[id]/+page.svelte @@ -99,12 +99,13 @@
-
{data.shortener.link}
+
{data.shortener.link}
-
- +
+ Clicks
- + + @@ -158,7 +160,7 @@ - + @@ -170,6 +172,7 @@ Vendor Type OS + Browser @@ -224,6 +227,21 @@ {/each}
+ +
+ {#each data.visitorByBrowser as visitorByBrowser} +
+
+ +
+ {visitorByBrowser.browser ?? 'Undefined Browser'} +
+
+
{visitorByBrowser.count}
+
+ {/each} +
+
diff --git a/frontend/src/routes/(landing)/+layout.svelte b/frontend/src/routes/(landing)/+layout.svelte new file mode 100644 index 0000000..602ae0a --- /dev/null +++ b/frontend/src/routes/(landing)/+layout.svelte @@ -0,0 +1,30 @@ + + +
+
+
+ +
kon.sh
+
+
+ Docs + Pricing +
+
+ + Login + + + +
+
+ +
diff --git a/frontend/src/routes/(landing)/landing/+page.svelte b/frontend/src/routes/(landing)/landing/+page.svelte new file mode 100644 index 0000000..a7714d9 --- /dev/null +++ b/frontend/src/routes/(landing)/landing/+page.svelte @@ -0,0 +1,33 @@ + + +
+
+
+

+ Kon.sh +

+

+ Open Source Self-hostable Link Shortener With Analytics +

+ +
+
+

Why Kon.sh?

+

+ Kon.sh is completely self-hostable, open source, and free. No + vendor lock-in, can be hosted using docker/docker compose with + no limitations. + + Learn More + +

+
+
+
diff --git a/frontend/src/routes/(landing)/landing/[...catchall]/+page.server.ts b/frontend/src/routes/(landing)/landing/[...catchall]/+page.server.ts new file mode 100644 index 0000000..612734e --- /dev/null +++ b/frontend/src/routes/(landing)/landing/[...catchall]/+page.server.ts @@ -0,0 +1,6 @@ +import type { PageServerLoad } from './$types' +import { redirect } from '@sveltejs/kit' + +export const load = (async () => { + return redirect(300, '/landing') +}) satisfies PageServerLoad diff --git a/frontend/src/routes/(landing)/landing/[...catchall]/+page.svelte b/frontend/src/routes/(landing)/landing/[...catchall]/+page.svelte new file mode 100644 index 0000000..1c44a55 --- /dev/null +++ b/frontend/src/routes/(landing)/landing/[...catchall]/+page.svelte @@ -0,0 +1,15 @@ + + +
+
+
+
404
+
Page Not Found
+
+ +
+
diff --git a/redirect/src/index.ts b/redirect/src/index.ts index 940f0a8..12e8a07 100644 --- a/redirect/src/index.ts +++ b/redirect/src/index.ts @@ -44,6 +44,7 @@ app.get( city: geolocation.data.location.city.name as string, device_type: ua_parser.getDevice().type, device_vendor: ua_parser.getDevice().vendor, + browser: ua_parser.getBrowser().name, os: ua_parser.getOS().name, } diff --git a/redirect/src/types.ts b/redirect/src/types.ts index 1d5af7f..890b19a 100644 --- a/redirect/src/types.ts +++ b/redirect/src/types.ts @@ -39,6 +39,7 @@ export interface VisitorTable { device_type: string | null device_vendor: string | null os: string | null + browser: string | null created_at: ColumnType }