Skip to content

Commit 2c20938

Browse files
committed
feaet: t&c
1 parent a9bc6e9 commit 2c20938

File tree

7 files changed

+157
-13
lines changed

7 files changed

+157
-13
lines changed

app/about/page.tsx

Lines changed: 52 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,56 @@
1-
export default function About() {
1+
import { ArrowLeft } from 'lucide-react'
2+
import { Button } from '@/components/ui/button'
3+
import Link from 'next/link'
4+
5+
export default function AboutPage() {
26
return (
3-
<div className="container mx-auto px-4">
4-
<h1 className="text-3xl font-bold">About</h1>
5-
<p className="mt-4">
6-
Librarease is a simple and powerful library management system. It is
7-
designed to help libraries manage their collections, track their
8-
borrowings, and communicate with their users.
9-
</p>
7+
<div className="">
8+
<div className="container mx-auto px-4 py-12 max-w-3xl">
9+
{/* Header */}
10+
<div className="mb-10">
11+
<Button variant="ghost" asChild className="mb-4 -ml-4">
12+
<Link href="/">
13+
<ArrowLeft className="mr-2 h-4 w-4" />
14+
Back to Home
15+
</Link>
16+
</Button>
17+
18+
<div className="flex items-center gap-3 mb-4">
19+
<h1 className="text-3xl font-bold leading-tight bg-gradient-to-r from-foreground via-foreground to-foreground/80 bg-clip-text text-transparent">
20+
About LibrarEase
21+
</h1>
22+
</div>
23+
</div>
24+
25+
{/* Main Content */}
26+
<p className="text-lg text-foreground/80 mb-6">
27+
LibrarEase is a modern library management platform built to make
28+
libraries easier to run and more enjoyable to use. Designed for
29+
libraries of all sizes, it provides a single place to manage books,
30+
memberships, subscriptions, and borrowing activities.
31+
</p>
32+
<p className="text-lg text-foreground/80 mb-6">
33+
For librarians, LibrarEase offers powerful tools to organize
34+
collections, track borrow and return histories, and manage memberships
35+
with ease. Libraries can assign roles such as admin and staff, send
36+
notifications, and stay connected with users through automated emails.
37+
Features like QR-based borrowing and returning ensure smooth
38+
day-to-day operations. The built-in dashboard provides useful charts
39+
and insights, helping librarians understand trends and make
40+
data-driven decisions.
41+
</p>
42+
<p className="text-lg text-foreground/80 mb-6">
43+
For readers and members, LibrarEase makes borrowing simple and
44+
accessible. Users can subscribe through their library memberships,
45+
receive timely notifications, and enjoy a seamless borrowing
46+
experience through the user app.
47+
</p>
48+
<p className="text-lg text-foreground/80">
49+
Fast, reliable, and easy to use, LibrarEase brings together everything
50+
needed to create a better library experience for both librarians and
51+
readers.
52+
</p>
53+
</div>
1054
</div>
1155
)
1256
}

app/globals.css

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
@import 'tailwindcss';
22

3+
@plugin "@tailwindcss/typography";
4+
35
@plugin 'tailwindcss-animate';
46

57
@custom-variant dark (&:is(.dark *));

app/privacy/page.tsx

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,39 @@
11
import { getPrivacyDoc } from '@/lib/api/docs'
2+
import { ArrowLeft } from 'lucide-react'
3+
import { Button } from '@/components/ui/button'
4+
import Link from 'next/link'
25

36
export default async function PrivacyPage() {
47
const doc = await getPrivacyDoc()
5-
return <div className="prose" dangerouslySetInnerHTML={{ __html: doc }} />
8+
9+
return (
10+
<div className="">
11+
<div className="container mx-auto px-4 py-12 max-w-3xl">
12+
{/* Header */}
13+
<div className="mb-10">
14+
<Button variant="ghost" asChild className="mb-4 -ml-4">
15+
<Link href="/">
16+
<ArrowLeft className="mr-2 h-4 w-4" />
17+
Back to Home
18+
</Link>
19+
</Button>
20+
<div
21+
className="prose prose-slate max-w-none w-full mx-auto
22+
prose-headings:text-foreground prose-headings:font-semibold
23+
prose-h1:text-3xl prose-h1:mb-4 prose-h1:mt-8 prose-h1:border-b prose-h1:border-foreground/10 prose-h1:pb-3
24+
prose-h2:text-2xl prose-h2:mb-3 prose-h2:mt-6 prose-h2:text-foreground/80
25+
prose-h3:text-xl prose-h3:mb-2 prose-h3:mt-4 prose-h3:text-foreground/70
26+
prose-p:text-foreground/80 prose-p:leading-relaxed prose-p:mb-4
27+
prose-a:text-emerald-600 prose-a:no-underline hover:prose-a:text-emerald-700 hover:prose-a:underline
28+
prose-strong:text-foreground prose-strong:font-semibold
29+
prose-ul:text-foreground/80 prose-ol:text-foreground/80
30+
prose-li:mb-1 prose-li:leading-relaxed
31+
prose-blockquote:border-l-emerald-500 prose-blockquote:bg-emerald-50 prose-blockquote:p-4 prose-blockquote:rounded-r-lg
32+
prose-code:bg-slate-100 prose-code:px-2 prose-code:py-1 prose-code:rounded prose-code:text-foreground"
33+
dangerouslySetInnerHTML={{ __html: doc }}
34+
/>
35+
</div>
36+
</div>
37+
</div>
38+
)
639
}

app/terms/page.tsx

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,41 @@
11
import { getTermsDoc } from '@/lib/api/docs'
2+
import { Calendar, ArrowLeft } from 'lucide-react'
3+
import { Button } from '@/components/ui/button'
4+
import { Card, CardContent } from '@/components/ui/card'
5+
import Link from 'next/link'
26

37
export default async function TermsPage() {
48
const doc = await getTermsDoc()
5-
return <div className="prose" dangerouslySetInnerHTML={{ __html: doc }} />
9+
10+
return (
11+
<div className="">
12+
<div className="container mx-auto px-4 py-12 max-w-3xl">
13+
{/* Header */}
14+
<div className="mb-10">
15+
<Button variant="ghost" asChild className="mb-4 -ml-4">
16+
<Link href="/">
17+
<ArrowLeft className="mr-2 h-4 w-4" />
18+
Back to Home
19+
</Link>
20+
</Button>
21+
22+
<div
23+
className="prose prose-slate max-w-none w-full mx-auto
24+
prose-headings:text-foreground prose-headings:font-semibold
25+
prose-h1:text-3xl prose-h1:mb-4 prose-h1:mt-8 prose-h1:border-b prose-h1:border-foreground/10 prose-h1:pb-3
26+
prose-h2:text-2xl prose-h2:mb-3 prose-h2:mt-6 prose-h2:text-foreground/80
27+
prose-h3:text-xl prose-h3:mb-2 prose-h3:mt-4 prose-h3:text-foreground/70
28+
prose-p:text-foreground/80 prose-p:leading-relaxed prose-p:mb-4
29+
prose-a:text-emerald-600 prose-a:no-underline hover:prose-a:text-emerald-700 hover:prose-a:underline
30+
prose-strong:text-foreground prose-strong:font-semibold
31+
prose-ul:text-foreground/80 prose-ol:text-foreground/80
32+
prose-li:mb-1 prose-li:leading-relaxed
33+
prose-blockquote:border-l-emerald-500 prose-blockquote:bg-emerald-50 prose-blockquote:p-4 prose-blockquote:rounded-r-lg
34+
prose-code:bg-slate-100 prose-code:px-2 prose-code:py-1 prose-code:rounded prose-code:text-foreground"
35+
dangerouslySetInnerHTML={{ __html: doc }}
36+
/>
37+
</div>
38+
</div>
39+
</div>
40+
)
641
}

components/ui/breadcrumb.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { Slot } from '@radix-ui/react-slot'
33
import { ChevronRight, MoreHorizontal } from 'lucide-react'
44

55
import { cn } from '@/lib/utils'
6+
import Link from 'next/link'
67

78
const Breadcrumb = React.forwardRef<
89
HTMLElement,
@@ -41,11 +42,11 @@ BreadcrumbItem.displayName = 'BreadcrumbItem'
4142

4243
const BreadcrumbLink = React.forwardRef<
4344
HTMLAnchorElement,
44-
React.ComponentPropsWithoutRef<'a'> & {
45+
React.ComponentPropsWithoutRef<typeof Link> & {
4546
asChild?: boolean
4647
}
4748
>(({ asChild, className, ...props }, ref) => {
48-
const Comp = asChild ? Slot : 'a'
49+
const Comp = asChild ? Slot : Link
4950

5051
return (
5152
<Comp

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
"devDependencies": {
7070
"@eslint/eslintrc": "^3",
7171
"@tailwindcss/postcss": "^4.0.8",
72+
"@tailwindcss/typography": "^0.5.16",
7273
"@types/node": "^20",
7374
"@types/react": "19.1.11",
7475
"@types/react-dom": "19.1.7",

yarn.lock

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1774,6 +1774,16 @@
17741774
postcss "^8.4.41"
17751775
tailwindcss "4.1.12"
17761776

1777+
"@tailwindcss/typography@^0.5.16":
1778+
version "0.5.16"
1779+
resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.5.16.tgz#a926c8f44d5c439b2915e231cad80058850047c6"
1780+
integrity sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==
1781+
dependencies:
1782+
lodash.castarray "^4.4.0"
1783+
lodash.isplainobject "^4.0.6"
1784+
lodash.merge "^4.6.2"
1785+
postcss-selector-parser "6.0.10"
1786+
17771787
"@tootallnate/once@2":
17781788
version "2.0.0"
17791789
resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf"
@@ -2589,6 +2599,11 @@ cross-spawn@^7.0.6:
25892599
shebang-command "^2.0.0"
25902600
which "^2.0.1"
25912601

2602+
cssesc@^3.0.0:
2603+
version "3.0.0"
2604+
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
2605+
integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
2606+
25922607
csstype@^3.0.2:
25932608
version "3.1.3"
25942609
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
@@ -4174,6 +4189,11 @@ lodash.camelcase@^4.3.0:
41744189
resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
41754190
integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==
41764191

4192+
lodash.castarray@^4.4.0:
4193+
version "4.4.0"
4194+
resolved "https://registry.yarnpkg.com/lodash.castarray/-/lodash.castarray-4.4.0.tgz#c02513515e309daddd4c24c60cfddcf5976d9115"
4195+
integrity sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==
4196+
41774197
lodash.clonedeep@^4.5.0:
41784198
version "4.5.0"
41794199
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
@@ -4552,6 +4572,14 @@ possible-typed-array-names@^1.0.0:
45524572
resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae"
45534573
integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==
45544574

4575+
postcss-selector-parser@6.0.10:
4576+
version "6.0.10"
4577+
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d"
4578+
integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==
4579+
dependencies:
4580+
cssesc "^3.0.0"
4581+
util-deprecate "^1.0.2"
4582+
45554583
postcss@8.4.31:
45564584
version "8.4.31"
45574585
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d"
@@ -5394,7 +5422,7 @@ use-sync-external-store@^1.5.0:
53945422
resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz#55122e2a3edd2a6c106174c27485e0fd59bcfca0"
53955423
integrity sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==
53965424

5397-
util-deprecate@^1.0.1:
5425+
util-deprecate@^1.0.1, util-deprecate@^1.0.2:
53985426
version "1.0.2"
53995427
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
54005428
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==

0 commit comments

Comments
 (0)