|
| 1 | +import { GitHubIcon } from "@/components/github-icon"; |
1 | 2 | import { PageShell } from "@/components/layout/page-shell"; |
2 | 3 | import { brand } from "@/lib/brand"; |
| 4 | +import { openSourceProjects } from "@/lib/open-source"; |
3 | 5 | import { projects, statusLabel } from "@/lib/projects"; |
4 | | -import { ExternalLink, Wrench } from "lucide-react"; |
| 6 | +import { ExternalLink, Package, Wrench } from "lucide-react"; |
5 | 7 | import type { Metadata } from "next"; |
6 | 8 | import Link from "next/link"; |
7 | 9 |
|
@@ -125,6 +127,68 @@ export default function ProjectsPage() { |
125 | 127 | })} |
126 | 128 | </div> |
127 | 129 |
|
| 130 | + <section className="mt-16"> |
| 131 | + <h2 className="mb-2 text-xl font-semibold text-white">Open Source</h2> |
| 132 | + <p className="mb-6 max-w-xl text-sm text-zinc-400"> |
| 133 | + Des projets et packages publics conçus pour être utilisés, explorés et |
| 134 | + contribués. |
| 135 | + </p> |
| 136 | + <div className="flex flex-col gap-4 sm:max-w-sm"> |
| 137 | + {openSourceProjects.map((project) => ( |
| 138 | + <div |
| 139 | + key={project.name} |
| 140 | + className="flex flex-col gap-3 rounded-xl border p-5" |
| 141 | + style={{ |
| 142 | + borderColor: `${brand.colors.blue[400]}18`, |
| 143 | + background: brand.colors.surface[2], |
| 144 | + }} |
| 145 | + > |
| 146 | + <div className="flex items-center gap-2"> |
| 147 | + <Package |
| 148 | + size={15} |
| 149 | + aria-hidden="true" |
| 150 | + style={{ color: brand.colors.blue[400] }} |
| 151 | + /> |
| 152 | + <h3 className="text-base font-semibold text-white"> |
| 153 | + {project.name} |
| 154 | + </h3> |
| 155 | + </div> |
| 156 | + <p className="text-[11px] font-medium text-zinc-500"> |
| 157 | + {project.tags.join(" · ")} |
| 158 | + </p> |
| 159 | + <p className="text-sm text-zinc-400">{project.description}</p> |
| 160 | + <div className="mt-1 flex items-center gap-4"> |
| 161 | + <a |
| 162 | + href={project.githubUrl} |
| 163 | + target="_blank" |
| 164 | + rel="noopener noreferrer" |
| 165 | + aria-label={`Voir ${project.name} sur GitHub`} |
| 166 | + className="inline-flex items-center gap-1.5 text-xs font-medium" |
| 167 | + style={{ color: brand.colors.blue[400] }} |
| 168 | + > |
| 169 | + <GitHubIcon size={13} /> |
| 170 | + GitHub |
| 171 | + <ExternalLink size={10} /> |
| 172 | + </a> |
| 173 | + {project.npmUrl && ( |
| 174 | + <a |
| 175 | + href={project.npmUrl} |
| 176 | + target="_blank" |
| 177 | + rel="noopener noreferrer" |
| 178 | + aria-label={`Voir ${project.name} sur npm`} |
| 179 | + className="inline-flex items-center gap-1.5 text-xs font-medium" |
| 180 | + style={{ color: brand.colors.blue[400] }} |
| 181 | + > |
| 182 | + npm |
| 183 | + <ExternalLink size={10} /> |
| 184 | + </a> |
| 185 | + )} |
| 186 | + </div> |
| 187 | + </div> |
| 188 | + ))} |
| 189 | + </div> |
| 190 | + </section> |
| 191 | + |
128 | 192 | <div |
129 | 193 | className="mt-12 rounded-xl border p-6" |
130 | 194 | style={{ borderColor: `${brand.colors.blue[400]}30` }} |
|
0 commit comments