From a89dbe4932748ddf86d50504955a825f1d04c4c0 Mon Sep 17 00:00:00 2001 From: Aidan Date: Thu, 23 Jan 2025 18:30:01 -0500 Subject: [PATCH] Create starting point website with Next.js --- .gitignore | 158 ++++++++------------------------- README.md | 2 +- app/components/FeatureCard.tsx | 31 +++++++ app/components/Hero.tsx | 45 ++++++++++ app/components/Navbar.tsx | 75 ++++++++++++++++ app/globals.css | 72 +++++++++++++++ app/layout.tsx | 27 ++++++ app/page.tsx | 43 +++++++++ bun.lockb | Bin 0 -> 161164 bytes components.json | 21 +++++ components/ui/button.tsx | 57 ++++++++++++ eslint.config.mjs | 16 ++++ lib/utils.ts | 6 ++ next.config.ts | 7 ++ package.json | 34 +++++++ postcss.config.mjs | 8 ++ tailwind.config.ts | 62 +++++++++++++ tsconfig.json | 27 ++++++ 18 files changed, 567 insertions(+), 124 deletions(-) create mode 100644 app/components/FeatureCard.tsx create mode 100644 app/components/Hero.tsx create mode 100644 app/components/Navbar.tsx create mode 100644 app/globals.css create mode 100644 app/layout.tsx create mode 100644 app/page.tsx create mode 100755 bun.lockb create mode 100644 components.json create mode 100644 components/ui/button.tsx create mode 100644 eslint.config.mjs create mode 100644 lib/utils.ts create mode 100644 next.config.ts create mode 100644 package.json create mode 100644 postcss.config.mjs create mode 100644 tailwind.config.ts create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore index ceaea36..579713d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,132 +1,44 @@ -# ---> Node -# Logs -logs -*.log +# 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* -lerna-debug.log* .pnpm-debug.log* -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json +# env files (can opt-in for committing if needed) +.env* -# Runtime data -pids -*.pid -*.seed -*.pid.lock +# vercel +.vercel -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache +# typescript *.tsbuildinfo +next-env.d.ts -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional stylelint cache -.stylelintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# vuepress v2.x temp and cache directory -.temp -.cache - -# Docusaurus cache and generated files -.docusaurus - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v2 -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* - +# vs code +.vscode/ \ No newline at end of file diff --git a/README.md b/README.md index 4cd7887..38a2467 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ # web -LibreCloud's website \ No newline at end of file +LibreCloud's website diff --git a/app/components/FeatureCard.tsx b/app/components/FeatureCard.tsx new file mode 100644 index 0000000..8645215 --- /dev/null +++ b/app/components/FeatureCard.tsx @@ -0,0 +1,31 @@ +import type { LucideIcon } from "lucide-react" +import { Button } from "@/components/ui/button" + +interface FeatureCardProps { + title: string + description: string + link: string + icon: LucideIcon +} + +const FeatureCard = ({ title, description, link, icon: Icon }: FeatureCardProps) => { + return ( +
+
+ +
+

{title}

+

{description}

+ + + +
+ ) +} + +export default FeatureCard + diff --git a/app/components/Hero.tsx b/app/components/Hero.tsx new file mode 100644 index 0000000..f18b5a3 --- /dev/null +++ b/app/components/Hero.tsx @@ -0,0 +1,45 @@ +'use client'; + +import { Button } from "@/components/ui/button" +import { ArrowRight } from "lucide-react" +import { ReactTyped } from "react-typed" + +const Hero = () => { + const phrases = ["developers", "students", "non-profits", "everyone"] + + return ( +
+
+
+

+ Free Cloud Services + + for {/* there is probably a better way to format this */} + +

+

+ Experience FOSS at its best with LibreCloud, a free service provider built with all kinds of people in mind. +

+
+ +
+
+
+
+ ) +} + +export default Hero + diff --git a/app/components/Navbar.tsx b/app/components/Navbar.tsx new file mode 100644 index 0000000..6176ccc --- /dev/null +++ b/app/components/Navbar.tsx @@ -0,0 +1,75 @@ +'use client'; + +import { useState } from "react" +import Link from "next/link" +import { Menu, X, Server, Home } from "lucide-react" + +const Navbar = () => { + const [isOpen, setIsOpen] = useState(false) + + return ( + + ) +} + +export default Navbar + diff --git a/app/globals.css b/app/globals.css new file mode 100644 index 0000000..f102207 --- /dev/null +++ b/app/globals.css @@ -0,0 +1,72 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +body { + font-family: Arial, Helvetica, sans-serif; +} + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 222.2 84% 4.9%; + --card: 0 0% 100%; + --card-foreground: 222.2 84% 4.9%; + --popover: 0 0% 100%; + --popover-foreground: 222.2 84% 4.9%; + --primary: 222.2 47.4% 11.2%; + --primary-foreground: 210 40% 98%; + --secondary: 210 40% 96.1%; + --secondary-foreground: 222.2 47.4% 11.2%; + --muted: 210 40% 96.1%; + --muted-foreground: 215.4 16.3% 46.9%; + --accent: 210 40% 96.1%; + --accent-foreground: 222.2 47.4% 11.2%; + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 210 40% 98%; + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; + --ring: 222.2 84% 4.9%; + --chart-1: 12 76% 61%; + --chart-2: 173 58% 39%; + --chart-3: 197 37% 24%; + --chart-4: 43 74% 66%; + --chart-5: 27 87% 67%; + --radius: 0.5rem; + } + .dark { + --background: 222.2 84% 4.9%; + --foreground: 210 40% 98%; + --card: 222.2 84% 4.9%; + --card-foreground: 210 40% 98%; + --popover: 222.2 84% 4.9%; + --popover-foreground: 210 40% 98%; + --primary: 210 40% 98%; + --primary-foreground: 222.2 47.4% 11.2%; + --secondary: 217.2 32.6% 17.5%; + --secondary-foreground: 210 40% 98%; + --muted: 217.2 32.6% 17.5%; + --muted-foreground: 215 20.2% 65.1%; + --accent: 217.2 32.6% 17.5%; + --accent-foreground: 210 40% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 210 40% 98%; + --border: 217.2 32.6% 17.5%; + --input: 217.2 32.6% 17.5%; + --ring: 212.7 26.8% 83.9%; + --chart-1: 220 70% 50%; + --chart-2: 160 60% 45%; + --chart-3: 30 80% 55%; + --chart-4: 280 65% 60%; + --chart-5: 340 75% 55%; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} diff --git a/app/layout.tsx b/app/layout.tsx new file mode 100644 index 0000000..80c9075 --- /dev/null +++ b/app/layout.tsx @@ -0,0 +1,27 @@ +import "./globals.css" +import type { Metadata } from "next" +import { Inter } from "next/font/google" +import Navbar from "../app/components/Navbar" + +const inter = Inter({ subsets: ["latin"] }) + +export const metadata: Metadata = { + title: "LibreCloud - Free Cloud Services", + description: "Secure and private cloud services including email, password management, and code hosting.", +} + +export default function RootLayout({ + children, +}: { + children: React.ReactNode +}) { + return ( + + + + {children} + + + ) +} + diff --git a/app/page.tsx b/app/page.tsx new file mode 100644 index 0000000..347271c --- /dev/null +++ b/app/page.tsx @@ -0,0 +1,43 @@ +import Hero from "../app/components/Hero" +import FeatureCard from "../app/components/FeatureCard" +import { Mail, Lock, Code, } from "lucide-react" + +export default function Home() { + const features = [ + { + title: "Email", + description: "4GB of free email storage and a synced calendar.", + link: "https://pontusmail.org/", + icon: Mail, + }, + { + title: "Password Manager", + description: "Securely store and manage your passwords across devices with Vaultwarden.", + link: "https://vaultwarden.p0ntus.com/", + icon: Lock, + }, + { + title: "Repo Hosting", + description: "Host your code repositories on our Gitea instance.", + link: "https://git.pontusmail.org/", + icon: Code, + }, + ] + + return ( +
+ +
+
+

Services

+
+ {features.map((feature, index) => ( + + ))} +
+
+
+
+ ) +} + diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..9e9224552b84ffb236480643bd565607f56d686c GIT binary patch literal 161164 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 literal 0 HcmV?d00001 diff --git a/components.json b/components.json new file mode 100644 index 0000000..4a7d1f5 --- /dev/null +++ b/components.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "tailwind.config.ts", + "css": "app/globals.css", + "baseColor": "slate", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "iconLibrary": "lucide" +} \ No newline at end of file diff --git a/components/ui/button.tsx b/components/ui/button.tsx new file mode 100644 index 0000000..65d4fcd --- /dev/null +++ b/components/ui/button.tsx @@ -0,0 +1,57 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", + { + variants: { + variant: { + default: + "bg-primary text-primary-foreground shadow hover:bg-primary/90", + destructive: + "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90", + outline: + "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground", + secondary: + "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-9 px-4 py-2", + sm: "h-8 rounded-md px-3 text-xs", + lg: "h-10 rounded-md px-8", + icon: "h-9 w-9", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +) + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean +} + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button" + return ( + + ) + } +) +Button.displayName = "Button" + +export { Button, buttonVariants } diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..c85fb67 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,16 @@ +import { dirname } from "path"; +import { fileURLToPath } from "url"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const compat = new FlatCompat({ + baseDirectory: __dirname, +}); + +const eslintConfig = [ + ...compat.extends("next/core-web-vitals", "next/typescript"), +]; + +export default eslintConfig; diff --git a/lib/utils.ts b/lib/utils.ts new file mode 100644 index 0000000..bd0c391 --- /dev/null +++ b/lib/utils.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/next.config.ts b/next.config.ts new file mode 100644 index 0000000..e9ffa30 --- /dev/null +++ b/next.config.ts @@ -0,0 +1,7 @@ +import type { NextConfig } from "next"; + +const nextConfig: NextConfig = { + /* config options here */ +}; + +export default nextConfig; diff --git a/package.json b/package.json new file mode 100644 index 0000000..31bd513 --- /dev/null +++ b/package.json @@ -0,0 +1,34 @@ +{ + "name": "web", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev --turbopack", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "@radix-ui/react-slot": "^1.1.1", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide-react": "^0.474.0", + "next": "15.1.6", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "react-typed": "^2.0.12", + "tailwind-merge": "^2.6.0", + "tailwindcss-animate": "^1.0.7" + }, + "devDependencies": { + "typescript": "^5", + "@types/node": "^20", + "@types/react": "^19", + "@types/react-dom": "^19", + "postcss": "^8", + "tailwindcss": "^3.4.1", + "eslint": "^9", + "eslint-config-next": "15.1.6", + "@eslint/eslintrc": "^3" + } +} diff --git a/postcss.config.mjs b/postcss.config.mjs new file mode 100644 index 0000000..1a69fd2 --- /dev/null +++ b/postcss.config.mjs @@ -0,0 +1,8 @@ +/** @type {import('postcss-load-config').Config} */ +const config = { + plugins: { + tailwindcss: {}, + }, +}; + +export default config; diff --git a/tailwind.config.ts b/tailwind.config.ts new file mode 100644 index 0000000..773b1e6 --- /dev/null +++ b/tailwind.config.ts @@ -0,0 +1,62 @@ +import type { Config } from "tailwindcss"; + +export default { + darkMode: ["class"], + content: [ + "./pages/**/*.{js,ts,jsx,tsx,mdx}", + "./components/**/*.{js,ts,jsx,tsx,mdx}", + "./app/**/*.{js,ts,jsx,tsx,mdx}", + ], + theme: { + extend: { + colors: { + background: 'hsl(var(--background))', + foreground: 'hsl(var(--foreground))', + card: { + DEFAULT: 'hsl(var(--card))', + foreground: 'hsl(var(--card-foreground))' + }, + popover: { + DEFAULT: 'hsl(var(--popover))', + foreground: 'hsl(var(--popover-foreground))' + }, + primary: { + DEFAULT: 'hsl(var(--primary))', + foreground: 'hsl(var(--primary-foreground))' + }, + secondary: { + DEFAULT: 'hsl(var(--secondary))', + foreground: 'hsl(var(--secondary-foreground))' + }, + muted: { + DEFAULT: 'hsl(var(--muted))', + foreground: 'hsl(var(--muted-foreground))' + }, + accent: { + DEFAULT: 'hsl(var(--accent))', + foreground: 'hsl(var(--accent-foreground))' + }, + destructive: { + DEFAULT: 'hsl(var(--destructive))', + foreground: 'hsl(var(--destructive-foreground))' + }, + border: 'hsl(var(--border))', + input: 'hsl(var(--input))', + ring: 'hsl(var(--ring))', + chart: { + '1': 'hsl(var(--chart-1))', + '2': 'hsl(var(--chart-2))', + '3': 'hsl(var(--chart-3))', + '4': 'hsl(var(--chart-4))', + '5': 'hsl(var(--chart-5))' + } + }, + borderRadius: { + lg: 'var(--radius)', + md: 'calc(var(--radius) - 2px)', + sm: 'calc(var(--radius) - 4px)' + } + } + }, + plugins: [require("tailwindcss-animate")], +} satisfies Config; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..d8b9323 --- /dev/null +++ b/tsconfig.json @@ -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"] +}