dashboard: add coming soon page, terms of service and privacy policy

This commit is contained in:
Ayden Jahola 2024-10-29 10:27:50 +00:00
parent e551656955
commit 3a2fe0ebc1
No known key found for this signature in database
GPG key ID: 71DD90AE4AE92742
26 changed files with 411 additions and 0 deletions

3
dashboard/.eslintrc.json Normal file
View file

@ -0,0 +1,3 @@
{
"extends": ["next/core-web-vitals", "next/typescript"]
}

40
dashboard/.gitignore vendored Normal file
View file

@ -0,0 +1,40 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/versions
# testing
/coverage
# next.js
/.next/
/out/
# production
/build
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# env files (can opt-in for commiting if needed)
.env*
# vercel
.vercel
# typescript
*.tsbuildinfo
next-env.d.ts

36
dashboard/README.md Normal file
View file

@ -0,0 +1,36 @@
This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).
## Getting Started
First, run the development server:
```bash
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev
```
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.
## Learn More
To learn more about Next.js, take a look at the following resources:
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
## Deploy on Vercel
The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.

BIN
dashboard/app/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,3 @@
@tailwind base;
@tailwind components;
@tailwind utilities;

39
dashboard/app/layout.tsx Normal file
View file

@ -0,0 +1,39 @@
import type { Metadata } from "next";
import localFont from "next/font/local";
import "./globals.css";
import Navbar from "@/components/Navbar";
import Footer from "@/components/Footer";
const geistSans = localFont({
src: "./fonts/GeistVF.woff",
variable: "--font-geist-sans",
weight: "100 900",
});
const geistMono = localFont({
src: "./fonts/GeistMonoVF.woff",
variable: "--font-geist-mono",
weight: "100 900",
});
export const metadata: Metadata = {
title: "Create Next App",
description: "Generated by create next app",
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="en">
<body
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
>
<Navbar />
{children}
<Footer />
</body>
</html>
);
}

5
dashboard/app/page.tsx Normal file
View file

@ -0,0 +1,5 @@
import ComingSoon from "@/components/coming-soon";
export default function Home() {
return <ComingSoon />;
}

View file

@ -0,0 +1,5 @@
import PrivacyPolicyPage from "@/components/legal/PrivacyPolicy";
export default function PrivacyPolicy() {
return <PrivacyPolicyPage />;
}

View file

@ -0,0 +1,5 @@
import TermsOfServicePage from "@/components/legal/TermsOfService";
export default function TermsOfService() {
return <TermsOfServicePage />;
}

View file

@ -0,0 +1,9 @@
export default function Footer() {
return (
<footer className="w-full bg-gray-800 p-4">
<div className="container mx-auto text-center text-gray-400">
&copy; {new Date().getFullYear()} Ayden Jahola. All rights reserved.
</div>
</footer>
);
}

View file

@ -0,0 +1,27 @@
import Link from "next/link";
export default function Navbar() {
return (
<nav className="w-full bg-gray-800 p-4">
<div className="container mx-auto flex justify-between items-center">
<Link href="/" className="text-white text-lg font-bold">
DCU Esports Bot Dashboard
</Link>
<div className="space-x-4">
<Link
href="/terms-of-service"
className="text-gray-300 hover:text-white"
>
Terms of Service
</Link>
<Link
href="/privacy-policy"
className="text-gray-300 hover:text-white"
>
Privacy Policy
</Link>
</div>
</div>
</nav>
);
}

View file

@ -0,0 +1,9 @@
export default function ComingSoon() {
return (
<div className="flex items-center justify-center min-h-screen bg-gray-900">
<h1 className="text-4xl font-bold text-center text-white sm:text-6xl">
Coming Soon
</h1>
</div>
);
}

View file

@ -0,0 +1,65 @@
export default function PrivacyPolicyPage() {
return (
<div className="p-8 text-gray-200 bg-gray-900 min-h-screen">
<h1 className="text-4xl font-bold mb-4">Privacy Policy</h1>
<p>Last Updated: 29/10/2024</p>
<section className="my-6">
<h2 className="text-2xl font-semibold">1. Information We Collect</h2>
<p>
Our Bot collects certain information from users to provide its
features. This may include Discord user IDs, server IDs, and any
necessary content to perform bot commands. No sensitive personal data
is collected.
</p>
</section>
<section className="my-6">
<h2 className="text-2xl font-semibold">
2. How We Use Your Information
</h2>
<p>
The information collected by the Bot is used solely to operate and
improve its functionality. We do not share or sell any user data to
third parties.
</p>
</section>
<section className="my-6">
<h2 className="text-2xl font-semibold">3. Data Retention</h2>
<p>
We retain data only as long as necessary to provide the Bots
services. If you would like your data removed, please contact us, and
we will make reasonable efforts to delete it.
</p>
</section>
<section className="my-6">
<h2 className="text-2xl font-semibold">4. Security</h2>
<p>
We take reasonable steps to protect the information collected by the
Bot. However, we cannot guarantee absolute security due to the nature
of internet services.
</p>
</section>
<section className="my-6">
<h2 className="text-2xl font-semibold">
5. Changes to the Privacy Policy
</h2>
<p>
We may update this Privacy Policy periodically. Please review this
page regularly to stay informed about any changes.
</p>
</section>
<section className="my-6">
<h2 className="text-2xl font-semibold">6. Contact Us</h2>
<p>
If you have any questions regarding this Privacy Policy, please
contact us at info@aydenjahola.com.
</p>
</section>
</div>
);
}

View file

@ -0,0 +1,73 @@
export default function TermsOfServicePage() {
return (
<div className="p-8 text-gray-200 bg-gray-900 min-h-screen">
<h1 className="text-4xl font-bold mb-4">Terms of Service</h1>
<p>Last Updated: 29/10/2024</p>
<section className="my-6">
<h2 className="text-2xl font-semibold">1. Acceptance of Terms</h2>
<p>
By using our Discord bot (the &quot;Bot&quot;), you agree to be bound
by these Terms of Service. If you do not agree to these terms, please
refrain from using the Bot.
</p>
</section>
<section className="my-6">
<h2 className="text-2xl font-semibold">2. Use of the Bot</h2>
<p>
Our Discord bot (the &quot;Bot&quot;) is designed to enhance your
server experience by providing various utilities and interactive
features. These include email-based user verification, role management
based on verification status, a video game-themed trivia game with
leaderboard tracking, and moderation tools. By using the Bot, you
agree to follow Discords Terms of Service and our additional rules,
ensuring fair and respectful engagement in all interactions
facilitated by the Bot.
</p>
</section>
<section className="my-6">
<h2 className="text-2xl font-semibold">3. Prohibited Conduct</h2>
<p>
You agree not to misuse the Bot by engaging in activities that may
harm, disrupt, or negatively affect the functionality of the Bot or
violate any applicable laws.
</p>
</section>
<section className="my-6">
<h2 className="text-2xl font-semibold">4. Disclaimer of Warranties</h2>
<p>
The Bot is provided as-is without warranties of any kind. We do not
guarantee that the Bot will be error-free or available at all times.
</p>
</section>
<section className="my-6">
<h2 className="text-2xl font-semibold">5. Limitation of Liability</h2>
<p>
We are not liable for any damages resulting from your use of the Bot.
This limitation of liability applies to the fullest extent permitted
by law.
</p>
</section>
<section className="my-6">
<h2 className="text-2xl font-semibold">6. Changes to the Terms</h2>
<p>
We may update these Terms of Service from time to time. We encourage
you to review these terms regularly for any changes.
</p>
</section>
<section className="my-6">
<h2 className="text-2xl font-semibold">7. Contact Us</h2>
<p>
If you have any questions about these Terms of Service, please contact
us at info@aydenjahola.com.
</p>
</section>
</div>
);
}

7
dashboard/next.config.ts Normal file
View file

@ -0,0 +1,7 @@
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
/* config options here */
};
export default nextConfig;

26
dashboard/package.json Normal file
View file

@ -0,0 +1,26 @@
{
"name": "dashboard",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev --turbopack",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"dependencies": {
"react": "19.0.0-rc-69d4b800-20241021",
"react-dom": "19.0.0-rc-69d4b800-20241021",
"next": "15.0.1"
},
"devDependencies": {
"typescript": "^5",
"@types/node": "^20",
"@types/react": "^18",
"@types/react-dom": "^18",
"postcss": "^8",
"tailwindcss": "^3.4.1",
"eslint": "^8",
"eslint-config-next": "15.0.1"
}
}

View file

@ -0,0 +1,8 @@
/** @type {import('postcss-load-config').Config} */
const config = {
plugins: {
tailwindcss: {},
},
};
export default config;

View file

@ -0,0 +1 @@
<svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg>

After

Width:  |  Height:  |  Size: 391 B

View file

@ -0,0 +1 @@
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.27 14.1a6.5 6.5 0 0 0 3.67-3.45q-1.24.21-2.7.34-.31 1.83-.97 3.1M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.48-1.52a7 7 0 0 1-.96 0H7.5a4 4 0 0 1-.84-1.32q-.38-.89-.63-2.08a40 40 0 0 0 3.92 0q-.25 1.2-.63 2.08a4 4 0 0 1-.84 1.31zm2.94-4.76q1.66-.15 2.95-.43a7 7 0 0 0 0-2.58q-1.3-.27-2.95-.43a18 18 0 0 1 0 3.44m-1.27-3.54a17 17 0 0 1 0 3.64 39 39 0 0 1-4.3 0 17 17 0 0 1 0-3.64 39 39 0 0 1 4.3 0m1.1-1.17q1.45.13 2.69.34a6.5 6.5 0 0 0-3.67-3.44q.65 1.26.98 3.1M8.48 1.5l.01.02q.41.37.84 1.31.38.89.63 2.08a40 40 0 0 0-3.92 0q.25-1.2.63-2.08a4 4 0 0 1 .85-1.32 7 7 0 0 1 .96 0m-2.75.4a6.5 6.5 0 0 0-3.67 3.44 29 29 0 0 1 2.7-.34q.31-1.83.97-3.1M4.58 6.28q-1.66.16-2.95.43a7 7 0 0 0 0 2.58q1.3.27 2.95.43a18 18 0 0 1 0-3.44m.17 4.71q-1.45-.12-2.69-.34a6.5 6.5 0 0 0 3.67 3.44q-.65-1.27-.98-3.1" fill="#666"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"/></clipPath></defs></svg>

After

Width:  |  Height:  |  Size: 1 KiB

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -0,0 +1 @@
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1155 1000"><path d="m577.3 0 577.4 1000H0z" fill="#fff"/></svg>

After

Width:  |  Height:  |  Size: 128 B

View file

@ -0,0 +1 @@
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 2.5h13v10a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1zM0 1h16v11.5a2.5 2.5 0 0 1-2.5 2.5h-11A2.5 2.5 0 0 1 0 12.5zm3.75 4.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5M7 4.75a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0m1.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5" fill="#666"/></svg>

After

Width:  |  Height:  |  Size: 385 B

View file

@ -0,0 +1,19 @@
import type { Config } from "tailwindcss";
const config: Config = {
content: [
"./pages/**/*.{js,ts,jsx,tsx,mdx}",
"./components/**/*.{js,ts,jsx,tsx,mdx}",
"./app/**/*.{js,ts,jsx,tsx,mdx}",
],
theme: {
extend: {
colors: {
background: "var(--background)",
foreground: "var(--foreground)",
},
},
},
plugins: [],
};
export default config;

27
dashboard/tsconfig.json Normal file
View file

@ -0,0 +1,27 @@
{
"compilerOptions": {
"target": "ES2017",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"incremental": true,
"plugins": [
{
"name": "next"
}
],
"paths": {
"@/*": ["./*"]
}
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
"exclude": ["node_modules"]
}