Skip to content

Commit

Permalink
everything
Browse files Browse the repository at this point in the history
  • Loading branch information
AtotheY committed Oct 8, 2024
1 parent d3c2f71 commit adc28dc
Show file tree
Hide file tree
Showing 8 changed files with 369 additions and 238 deletions.
79 changes: 65 additions & 14 deletions app/globals.css
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,7 @@
@tailwind components;
@tailwind utilities;

:root {
--background: #ffffff;
--foreground: #171717;
}

@media (prefers-color-scheme: dark) {
:root {
--background: #0a0a0a;
--foreground: #ededed;
}
}

body {
color: var(--foreground);
background: var(--background);
font-family: Arial, Helvetica, sans-serif;
}

Expand All @@ -25,3 +11,68 @@ body {
text-wrap: balance;
}
}

@layer base {
:root {
--background: 0 0% 100%;
--foreground: 0 0% 3.9%;
--card: 0 0% 100%;
--card-foreground: 0 0% 3.9%;
--popover: 0 0% 100%;
--popover-foreground: 0 0% 3.9%;
--primary: 0 0% 9%;
--primary-foreground: 0 0% 98%;
--secondary: 0 0% 96.1%;
--secondary-foreground: 0 0% 9%;
--muted: 0 0% 96.1%;
--muted-foreground: 0 0% 45.1%;
--accent: 0 0% 96.1%;
--accent-foreground: 0 0% 9%;
--destructive: 0 84.2% 60.2%;
--destructive-foreground: 0 0% 98%;
--border: 0 0% 89.8%;
--input: 0 0% 89.8%;
--ring: 0 0% 3.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: 0 0% 3.9%;
--foreground: 0 0% 98%;
--card: 0 0% 3.9%;
--card-foreground: 0 0% 98%;
--popover: 0 0% 3.9%;
--popover-foreground: 0 0% 98%;
--primary: 0 0% 98%;
--primary-foreground: 0 0% 9%;
--secondary: 0 0% 14.9%;
--secondary-foreground: 0 0% 98%;
--muted: 0 0% 14.9%;
--muted-foreground: 0 0% 63.9%;
--accent: 0 0% 14.9%;
--accent-foreground: 0 0% 98%;
--destructive: 0 62.8% 30.6%;
--destructive-foreground: 0 0% 98%;
--border: 0 0% 14.9%;
--input: 0 0% 14.9%;
--ring: 0 0% 83.1%;
--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;
}
}
104 changes: 4 additions & 100 deletions app/page.tsx
Original file line number Diff line number Diff line change
@@ -1,101 +1,5 @@
import Image from "next/image";
import { LinkTree } from "@/components/link-tree"

export default function Home() {
return (
<div className="grid grid-rows-[20px_1fr_20px] items-center justify-items-center min-h-screen p-8 pb-20 gap-16 sm:p-20 font-[family-name:var(--font-geist-sans)]">
<main className="flex flex-col gap-8 row-start-2 items-center sm:items-start">
<Image
className="dark:invert"
src="https://nextjs.org/icons/next.svg"
alt="Next.js logo"
width={180}
height={38}
priority
/>
<ol className="list-inside list-decimal text-sm text-center sm:text-left font-[family-name:var(--font-geist-mono)]">
<li className="mb-2">
Get started by editing{" "}
<code className="bg-black/[.05] dark:bg-white/[.06] px-1 py-0.5 rounded font-semibold">
app/page.tsx
</code>
.
</li>
<li>Save and see your changes instantly.</li>
</ol>

<div className="flex gap-4 items-center flex-col sm:flex-row">
<a
className="rounded-full border border-solid border-transparent transition-colors flex items-center justify-center bg-foreground text-background gap-2 hover:bg-[#383838] dark:hover:bg-[#ccc] text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5"
href="https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
<Image
className="dark:invert"
src="https://nextjs.org/icons/vercel.svg"
alt="Vercel logomark"
width={20}
height={20}
/>
Deploy now
</a>
<a
className="rounded-full border border-solid border-black/[.08] dark:border-white/[.145] transition-colors flex items-center justify-center hover:bg-[#f2f2f2] dark:hover:bg-[#1a1a1a] hover:border-transparent text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5 sm:min-w-44"
href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
Read our docs
</a>
</div>
</main>
<footer className="row-start-3 flex gap-6 flex-wrap items-center justify-center">
<a
className="flex items-center gap-2 hover:underline hover:underline-offset-4"
href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
<Image
aria-hidden
src="https://nextjs.org/icons/file.svg"
alt="File icon"
width={16}
height={16}
/>
Learn
</a>
<a
className="flex items-center gap-2 hover:underline hover:underline-offset-4"
href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
<Image
aria-hidden
src="https://nextjs.org/icons/window.svg"
alt="Window icon"
width={16}
height={16}
/>
Examples
</a>
<a
className="flex items-center gap-2 hover:underline hover:underline-offset-4"
href="https://nextjs.org?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
<Image
aria-hidden
src="https://nextjs.org/icons/globe.svg"
alt="Globe icon"
width={16}
height={16}
/>
Go to nextjs.org →
</a>
</footer>
</div>
);
}
export default function Page() {
return <LinkTree />
}
20 changes: 20 additions & 0 deletions components.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"$schema": "https://ui.shadcn.com/schema.json",
"style": "new-york",
"rsc": true,
"tsx": true,
"tailwind": {
"config": "tailwind.config.ts",
"css": "app/globals.css",
"baseColor": "neutral",
"cssVariables": true,
"prefix": ""
},
"aliases": {
"components": "@/components",
"utils": "@/lib/utils",
"ui": "@/components/ui",
"lib": "@/lib",
"hooks": "@/hooks"
}
}
138 changes: 138 additions & 0 deletions components/link-tree.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
'use client'

import React from 'react'
import { Linkedin, Twitter, Instagram, Mail, Music, Gamepad, Youtube } from 'lucide-react'

interface LinkItem {
type: 'category' | 'link' | 'youtube'
title: string
url?: string
youtubeId?: string
}

const profileImage = "/placeholder.svg?height=200&width=200"
const name = "@anthonysistilli"
const description = "Tech founder & senior software engineer"

const socialLinks = [
{ platform: 'LinkedIn', url: 'https://linkedin.com/in/example' },
{ platform: 'Twitter', url: 'https://twitter.com/example' },
{ platform: 'Mail', url: 'mailto:[email protected]' },
{ platform: 'Music', url: 'https://music.example.com' },
{ platform: 'Youtube', url: 'https://youtube.com/@example' },
{ platform: 'Gamepad', url: 'https://game.example.com' },
{ platform: 'Instagram', url: 'https://instagram.com/example' },
]

const items: LinkItem[] = [
{ type: 'youtube', title: 'Latest Youtube Video', youtubeId: 'dQw4w9WgXcQ' },
{ type: 'link', title: "Join Hyrd's waitlist - My company", url: 'https://hyrd.dev' },
{ type: 'link', title: 'Hyrd.dev - Find a tech job in minutes, not months', url: 'https://hyrd.dev' },
{ type: 'category', title: 'Resources' },
{ type: 'link', title: 'Buy me a coffee :)', url: 'https://buymeacoffee.com/example' },
{ type: 'link', title: 'Startup notes & coding resources (mind map)', url: 'https://example.com/mindmap' },
{ type: 'link', title: 'My saas landing page boilerplate on Github', url: 'https://github.com/example/repo' },
]

export function LinkTree() {
return (
<div className="min-h-screen bg-red-50 py-8 px-4 relative overflow-hidden">
{/* Cloud background pattern */}
<div className="absolute inset-0 z-0 opacity-20">
<svg className="w-full h-full" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 1000" preserveAspectRatio="none">
<path d="M0,200 Q200,100 400,200 T800,200 T1200,200 T1600,200 V1000 H0 Z" fill="#FFCCCB" />
<path d="M0,400 Q200,300 400,400 T800,400 T1200,400 T1600,400 V1000 H0 Z" fill="#FFCCCB" />
<path d="M0,600 Q200,500 400,600 T800,600 T1200,600 T1600,600 V1000 H0 Z" fill="#FFCCCB" />
<path d="M0,800 Q200,700 400,800 T800,800 T1200,800 T1600,800 V1000 H0 Z" fill="#FFCCCB" />
</svg>
</div>

<div className="max-w-md mx-auto space-y-6 relative z-10">
<div className="text-center">
<img
src={profileImage}
alt={name}
className="w-24 h-24 rounded-full mx-auto mb-4 border-2 border-red-200 shadow-sm"
/>
<h1 className="text-2xl font-bold text-gray-800">{name}</h1>
<p className="text-gray-600">{description}</p>
</div>

<div className="flex justify-center space-x-4">
{socialLinks.map((link, index) => (
<a
key={index}
href={link.url}
target="_blank"
rel="noopener noreferrer"
className="text-red-500 hover:text-red-600 transition-colors"
>
<span className="sr-only">{link.platform}</span>
{getSocialIcon(link.platform)}
</a>
))}
</div>

<div className="space-y-4">
{items.map((item, index) => (
<div key={index}>
{item.type === 'category' && (
<h2 className="text-lg font-semibold text-red-500 mb-2">{item.title}</h2>
)}
{item.type === 'link' && (
<a
href={item.url}
target="_blank"
rel="noopener noreferrer"
className="block bg-white rounded-full shadow hover:shadow-md transition-shadow p-4 border border-red-400 hover:border-red-500 text-center"
style={{
boxShadow: '0 0 5px rgba(255, 0, 0, 0.2)',
}}
>
<span className="text-gray-800 font-medium">{item.title}</span>
</a>
)}
{item.type === 'youtube' && (
<div>
<h2 className="text-lg font-semibold text-red-500 mb-2">{item.title}</h2>
<div className="aspect-video">
<iframe
width="100%"
height="100%"
src={`https://www.youtube.com/embed/${item.youtubeId}`}
title={item.title}
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowFullScreen
></iframe>
</div>
</div>
)}
</div>
))}
</div>
</div>
</div>
)
}

function getSocialIcon(platform: string) {
switch (platform.toLowerCase()) {
case 'twitter':
return <Twitter className="w-6 h-6" />
case 'linkedin':
return <Linkedin className="w-6 h-6" />
case 'youtube':
return <Youtube className="w-6 h-6" />
case 'instagram':
return <Instagram className="w-6 h-6" />
case 'mail':
return <Mail className="w-6 h-6" />
case 'music':
return <Music className="w-6 h-6" />
case 'gamepad':
return <Gamepad className="w-6 h-6" />
default:
return null
}
}
6 changes: 6 additions & 0 deletions lib/utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { clsx, type ClassValue } from "clsx"
import { twMerge } from "tailwind-merge"

export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs))
}
Loading

0 comments on commit adc28dc

Please sign in to comment.