From 27c88cdb75aa6aea0706f256a7210d1c14fa7251 Mon Sep 17 00:00:00 2001 From: Liam Date: Sat, 12 Oct 2024 04:12:35 +0100 Subject: [PATCH] add a basic landing page --- bun.lockb | Bin 294696 -> 295456 bytes .../backend/src/controller/app.controller.ts | 6 ++++ projects/backend/src/service/app.service.ts | 15 ++++++++ .../src/types/backend/app-statistics.ts | 6 ++++ projects/website/package.json | 1 + projects/website/src/app/(pages)/page.tsx | 33 ++++++++++++++++-- .../website/src/components/home/statistic.tsx | 16 +++++++++ 7 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 projects/backend/src/service/app.service.ts create mode 100644 projects/common/src/types/backend/app-statistics.ts create mode 100644 projects/website/src/components/home/statistic.tsx diff --git a/bun.lockb b/bun.lockb index 28c7ae446d4c6c427846cc6b9c737f22f18785f4..f38cf1d50a793fcb1f34b78addbcb1f8230db0b3 100755 GIT binary patch delta 53599 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 fGd*E$lPca@rgAXSCzTEW<`o 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 F`G5BuD_j5o diff --git a/projects/backend/src/controller/app.controller.ts b/projects/backend/src/controller/app.controller.ts index b646126..a636562 100644 --- a/projects/backend/src/controller/app.controller.ts +++ b/projects/backend/src/controller/app.controller.ts @@ -1,5 +1,6 @@ import { Controller, Get } from "elysia-decorators"; import { getAppVersion } from "../common/app-utils"; +import { AppService } from "../service/app.service"; @Controller() export default class AppController { @@ -10,4 +11,9 @@ export default class AppController { version: getAppVersion(), }; } + + @Get("/statistics") + public async getStatistics() { + return await AppService.getAppStatistics(); + } } diff --git a/projects/backend/src/service/app.service.ts b/projects/backend/src/service/app.service.ts new file mode 100644 index 0000000..2575987 --- /dev/null +++ b/projects/backend/src/service/app.service.ts @@ -0,0 +1,15 @@ +import { PlayerModel } from "../model/player"; +import { AppStatistics } from "@ssr/common/types/backend/app-statistics"; + +export class AppService { + /** + * Gets the app statistics. + */ + public static async getAppStatistics(): Promise { + const trackedPlayers = await PlayerModel.countDocuments(); + + return { + trackedPlayers, + }; + } +} diff --git a/projects/common/src/types/backend/app-statistics.ts b/projects/common/src/types/backend/app-statistics.ts new file mode 100644 index 0000000..d41543b --- /dev/null +++ b/projects/common/src/types/backend/app-statistics.ts @@ -0,0 +1,6 @@ +export type AppStatistics = { + /** + * The total amount of players being tracked. + */ + trackedPlayers: number; +}; diff --git a/projects/website/package.json b/projects/website/package.json index c1103e0..e57194f 100644 --- a/projects/website/package.json +++ b/projects/website/package.json @@ -39,6 +39,7 @@ "node-cache": "^5.1.2", "react": "19.0.0-rc-3edc000d-20240926", "react-chartjs-2": "^5.2.0", + "react-countup": "^6.5.3", "react-dom": "19.0.0-rc-3edc000d-20240926", "react-hook-form": "^7.53.0", "tailwind-merge": "^2.5.2", diff --git a/projects/website/src/app/(pages)/page.tsx b/projects/website/src/app/(pages)/page.tsx index 30816af..e468de5 100644 --- a/projects/website/src/app/(pages)/page.tsx +++ b/projects/website/src/app/(pages)/page.tsx @@ -1,3 +1,32 @@ -export default function HomePage() { - return

hi
; +import { Button } from "@/components/ui/button"; +import Link from "next/link"; +import ky from "ky"; +import { config } from "../../../config"; +import { AppStatistics } from "@ssr/common/types/backend/app-statistics"; +import Statistic from "@/components/home/statistic"; + +export default async function HomePage() { + const statistics = await ky.get(config.siteApi + "/statistics").json(); + + return ( +
+
+

ScoreSaber Reloaded

+

Welcome to the ScoreSaber Reloaded website.

+
+ +
+

ScoreSaber Reloaded is a website that allows you to track your ScoreSaber data over time.

+
+ +
+

Site Statistics

+ +
+ + + + +
+ ); } diff --git a/projects/website/src/components/home/statistic.tsx b/projects/website/src/components/home/statistic.tsx new file mode 100644 index 0000000..e090ef1 --- /dev/null +++ b/projects/website/src/components/home/statistic.tsx @@ -0,0 +1,16 @@ +"use client"; + +import CountUp from "react-countup"; + +type Statistic = { + title: string; + value: number; +}; + +export default function Statistic({ title, value }: Statistic) { + return ( +

+ {title}: +

+ ); +}