This commit is contained in:
2025-07-06 17:42:45 +02:00
parent f4db985695
commit 3edaf9b3c8
7 changed files with 1332 additions and 5 deletions

1245
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -27,6 +27,7 @@
"react": "^19.0.0", "react": "^19.0.0",
"react-dom": "^19.0.0", "react-dom": "^19.0.0",
"react-hook-form": "^7.60.0", "react-hook-form": "^7.60.0",
"react-markdown": "^10.1.0",
"sonner": "^2.0.6", "sonner": "^2.0.6",
"tailwind-merge": "^3.3.1", "tailwind-merge": "^3.3.1",
"zod": "^3.25.74" "zod": "^3.25.74"
@ -34,6 +35,7 @@
"devDependencies": { "devDependencies": {
"@eslint/eslintrc": "^3", "@eslint/eslintrc": "^3",
"@tailwindcss/postcss": "^4", "@tailwindcss/postcss": "^4",
"@tailwindcss/typography": "^0.5.16",
"@types/node": "^20", "@types/node": "^20",
"@types/react": "^19", "@types/react": "^19",
"@types/react-dom": "^19", "@types/react-dom": "^19",

View File

@ -91,3 +91,12 @@ model CommissionTypeExtra {
@@unique([typeId, extraId]) @@unique([typeId, extraId])
} }
model TermsOfService {
id String @id @default(cuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
version Int @default(autoincrement())
markdown String
}

View File

@ -112,6 +112,55 @@
--sidebar-ring: oklch(0.556 0 0); --sidebar-ring: oklch(0.556 0 0);
} }
.markdown {
@apply text-base leading-relaxed text-foreground;
}
.markdown h1 {
@apply text-4xl font-bold mt-6 mb-4;
}
.markdown h2 {
@apply text-3xl font-semibold mt-6 mb-3;
}
.markdown h3 {
@apply text-2xl font-medium mt-5 mb-2;
}
.markdown p {
@apply my-4;
}
.markdown ul {
@apply list-disc pl-6 my-4;
}
.markdown ol {
@apply list-decimal pl-6 my-4;
}
.markdown li {
@apply mb-1;
}
.markdown blockquote {
@apply border-l-4 pl-4 italic text-muted-foreground my-4;
}
.markdown code {
@apply bg-muted px-1 py-0.5 rounded font-mono text-sm;
}
.markdown pre {
@apply bg-muted p-4 rounded overflow-x-auto text-sm my-4;
}
.markdown a {
@apply underline text-primary hover:text-primary/80;
}
@layer base { @layer base {
* { * {
@apply border-border outline-ring/50; @apply border-border outline-ring/50;

18
src/app/tos/page.tsx Normal file
View File

@ -0,0 +1,18 @@
import prisma from "@/lib/prisma";
import ReactMarkdown from 'react-markdown';
export default async function TosPage() {
const tos = await prisma.termsOfService.findFirst({
orderBy: [{ version: "desc" }],
})
console.log(tos?.markdown)
return (
<div className="container py-10 space-y-10">
<div className="markdown">
<ReactMarkdown>{tos?.markdown}</ReactMarkdown>
</div>
</div>
);
}

View File

@ -15,6 +15,7 @@ import { CommissionExtra, CommissionOption, CommissionType, CommissionTypeExtra,
import { commissionOrderSchema } from "@/schemas/commissionOrder" import { commissionOrderSchema } from "@/schemas/commissionOrder"
import { calculatePrice } from "@/utils/calculatePrice" import { calculatePrice } from "@/utils/calculatePrice"
import { zodResolver } from "@hookform/resolvers/zod" import { zodResolver } from "@hookform/resolvers/zod"
import Link from "next/link"
import { useMemo, useState } from "react" import { useMemo, useState } from "react"
import { useForm, useWatch } from "react-hook-form" import { useForm, useWatch } from "react-hook-form"
import * as z from "zod/v4" import * as z from "zod/v4"
@ -239,6 +240,14 @@ export function CommissionOrderForm({ types }: Props) {
Estimated Price: {price.toFixed(2)} Estimated Price: {price.toFixed(2)}
</div> </div>
<div className="text-muted-foreground">
By submitting this form, you agree to our{" "}
<Link href="/tos" className="underline">
Terms of Service
</Link>
.
</div>
<Button type="submit" disabled={!form.formState.isValid}> <Button type="submit" disabled={!form.formState.isValid}>
Submit Request Submit Request
</Button> </Button>

View File

@ -17,6 +17,11 @@ export default function TopNav() {
<Link href="/commissions">Commissions</Link> <Link href="/commissions">Commissions</Link>
</NavigationMenuLink> </NavigationMenuLink>
</NavigationMenuItem> </NavigationMenuItem>
<NavigationMenuItem>
<NavigationMenuLink asChild className={navigationMenuTriggerStyle()}>
<Link href="/tos">Terms of Service</Link>
</NavigationMenuLink>
</NavigationMenuItem>
</NavigationMenuList> </NavigationMenuList>
</NavigationMenu> </NavigationMenu>
); );