wip /uses page

besaid.zone b2f994b7 d9ae4ea0

verified
Changed files
+103 -21
src
+11
src/components/CardItem.astro
··· 1 + --- 2 + interface Props { 3 + name: string; 4 + description: string; 5 + } 6 + --- 7 + 8 + <li class="border border-gray-300 rounded-sm p-3"> 9 + <h3 class="font-semibold mb-2">{Astro.props.name}</h3> 10 + <p class="text-gray-600">{Astro.props.description}</p> 11 + </li>
+3 -2
src/components/Navbar.astro
··· 1 1 --- 2 2 const paths = [ 3 - { name: "home", path: "/" }, 4 - { name: "blogs", path: "/blogs" }, 3 + { name: "home", path: "/" }, 4 + { name: "blogs", path: "/blogs" }, 5 + { name: "uses", path: "/uses" }, 5 6 ]; 6 7 import Link from "@components/Link.astro"; 7 8 ---
-2
src/pages/blogs/[blog].astro
··· 9 9 const documents = await getCollection("documents"); 10 10 const blogs = await getCollection("blogs"); 11 11 12 - // Combine both collections for static paths 13 12 const allPosts = [ 14 13 ...documents.map((document) => ({ 15 14 params: { blog: document.id }, ··· 24 23 return allPosts; 25 24 } 26 25 27 - // Try to get the entry from both collections 28 26 let entry: CollectionEntry<"documents"> | CollectionEntry<"blogs"> | undefined = 29 27 await getEntry("documents", Astro.params.blog); 30 28
+6 -17
src/pages/index.astro
··· 7 7 const documents = await getCollection("documents"); 8 8 const blogs = await getCollection("blogs"); 9 9 10 - // Combine both collections and sort by publishedAt 11 10 const allPosts = [ 12 11 ...blogs.map((blog) => ({ 13 12 ...blog, ··· 25 24 })), 26 25 ] 27 26 .sort((a, b) => b.data.publishedAt.valueOf() - a.data.publishedAt.valueOf()) 28 - .slice(0, 5); // Show only the 5 most recent 27 + .slice(0, 5); 29 28 --- 30 29 31 30 <Layout ··· 93 92 <li class="flex items-center gap-1"> 94 93 <div class="i-lucide-mailbox"></div> 95 94 <Link 96 - href="mailto:khadane.miller@gmail.com?subject=Hey%20There" 95 + href="mailto:me@dane.computer?subject=Hey%20There" 97 96 > 98 - Send Message 97 + send message 99 98 </Link> 100 99 </li> 101 100 <li class="flex items-center gap-1"> ··· 105 104 target="_blank" 106 105 rel="noopener noreferrer" 107 106 > 108 - Add on LinkedIn 109 - </Link> 110 - </li> 111 - <li class="flex items-center gap-1"> 112 - <div class="i-lucide-at-sign"></div> 113 - <Link 114 - href="https://www.threads.net/@dane__m" 115 - target="_blank" 116 - rel="noopener noreferrer" 117 - > 118 - Follow on Threads 107 + add on linkedin 119 108 </Link> 120 109 </li> 121 110 <li class="flex items-center gap-1"> 122 111 <div class="i-tabler-brand-bluesky"></div> 123 112 <Link 124 - href="https://bsky.app/profile/dane.computer" 113 + href="https://bsky.app/profile/dane.is.extraordinarily.cool" 125 114 target="_blank" 126 115 rel="noopener noreferrer" 127 116 > 128 - Follow on BlueSky 117 + follow on bluesky 129 118 </Link> 130 119 </li> 131 120 </ul>
+83
src/pages/uses.astro
··· 1 + --- 2 + import CardItem from "@components/CardItem.astro"; 3 + import Layout from "@layouts/Layout.astro"; 4 + const uses = { 5 + hardware: [ 6 + { 7 + item: "Macbook Air (M2, 2022)", 8 + description: 9 + "My personal laptop that I use for development or just surfing the web", 10 + }, 11 + { 12 + item: "Sony WH-1000XM5 Headphones", 13 + description: "Headphones that I use when I'm at my desktop or laptop.", 14 + }, 15 + { 16 + item: "EPOMAKER P75", 17 + description: 18 + "My daily driver keyboard at the moment. Previously used an NK65 keyboard with lubed yellow switches.", 19 + }, 20 + { 21 + item: "Logitech MX Master 3S", 22 + description: 23 + "Easily one of the best mice I've used. If this one breaks I'm buying another one.", 24 + }, 25 + { 26 + item: "Dell 34inch Curved Gaming Monitor", 27 + description: 28 + "No complaints about this monitor. Was skeptical about ultrawide monitors but it's been an alright experience.", 29 + }, 30 + ], 31 + tools: [ 32 + { 33 + item: "Zed", 34 + description: "My current preferred code editor.", 35 + }, 36 + { 37 + item: "Ghostty", 38 + description: 39 + "Haven't been using this very long but I've been enjoying it. Does what it needs to and it's fast.", 40 + }, 41 + { 42 + item: "Tangled", 43 + description: 44 + "I've started pushing my code to tangled.sh since they now support a lot of the features I wanted from other services. It's also built on the AT Protocol.", 45 + }, 46 + ], 47 + }; 48 + --- 49 + 50 + <Layout 51 + title="Dane's Space | Uses" 52 + description="A list of the hardware, software, and tools that power my daily workflow and help me build great things." 53 + > 54 + <h1 class="mt-4 mb-4 text-2xl font-bold text-snes-black">Uses</h1> 55 + <p class="mb-10"> 56 + A comprehensive list of the hardware, software, and tools that power my 57 + daily workflow and help me build great things. 58 + </p> 59 + <section id="uses" class="mb-10"> 60 + <h2 class="font-semibold text-xl mb-4">Hardware</h2> 61 + <ul class="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4"> 62 + { 63 + uses.hardware.map(({ item, description }) => { 64 + return ( 65 + <CardItem name={item} description={description}/> 66 + ); 67 + }) 68 + } 69 + </ul> 70 + </section> 71 + <section id="tools"> 72 + <h2 class="font-semibold text-xl mb-4">Development Tools</h2> 73 + <ul class="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4"> 74 + { 75 + uses.tools.map(({ item, description }) => { 76 + return ( 77 + <CardItem name={item} description={description}/> 78 + ); 79 + }) 80 + } 81 + </ul> 82 + </section> 83 + </Layout>