1<!DOCTYPE html><html lang="en" class="geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable h-full antialiased"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/05f02np7lk292.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0az8vxg2gfuhm.js"/>
1<script src="/_next/static/chunks/2nhq4c2zi1p8t.js" async=""></script>
1<script src="/_next/static/chunks/0dr-zs30cmz0j.js" async=""></script>
1<script src="/_next/static/chunks/2-rtuqsgzmno4.js" async=""></script>
1<script src="/_next/static/chunks/turbopack-2_d3mbj0i5as0.js" async=""></script>
1<script src="/_next/static/chunks/0nszf2490b_6y.js" async=""></script>
1<script src="/_next/static/chunks/0bbqz7t6zdl1q.js" async=""></script>
1<script src="/_next/static/chunks/0q3bufvj1_oi5.js" async=""></script>
1<script src="/_next/static/chunks/1lvp-mfq3vcdw.js" async=""></script>
1<title>ATS-Dopi â Cybersec Student & Full-Stack Developer</title><meta name="description" content="Portfolio, cybersecurity tools and centralized admin dashboard."/><link rel="icon" href="/icon.svg?icon.0wstcxy2h5d-p.svg" sizes="any" type="image/svg+xml"/><meta name="next-size-adjust" content=""/>
1<script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script>
1</head><body class="min-h-full flex flex-col"><div hidden=""><!--$--><!--/$--></div><canvas class="pointer-events-none fixed inset-0 z-0" aria-hidden="true"></canvas><div class="relative z-10 flex min-h-full flex-1 flex-col"><div class="flex min-h-full flex-1 flex-col"><header class="sticky top-0 z-40 border-b border-border bg-background/80 backdrop-blur-sm"><div class="mx-auto w-full max-w-6xl flex h-14 items-center justify-between px-6"><a href="/" class="text-sm font-semibold tracking-tight">ATS-Dopi</a><nav class="flex items-center gap-1 sm:gap-2"><a href="/projects" class="rounded-md px-3 py-1.5 text-sm text-muted-foreground transition-colors hover:text-foreground">Projects</a><a href="/cyber" class="rounded-md px-3 py-1.5 text-sm text-muted-foreground transition-colors hover:text-foreground">CyberTool</a><a href="/cyber-watch" class="rounded-md px-3 py-1.5 text-sm text-muted-foreground transition-colors hover:text-foreground">CVE Watch</a><a href="/tools" class="rounded-md px-3 py-1.5 text-sm text-muted-foreground transition-colors hover:text-foreground">Tools</a><a href="/status" class="rounded-md px-3 py-1.5 text-sm text-muted-foreground transition-colors hover:text-foreground">Status</a><div class="ml-2 flex items-center gap-2 pl-2 border-l border-border"><div class="flex items-center gap-1 rounded-md border border-border px-1 py-0.5 text-xs"><button class="rounded px-1.5 py-0.5 transition-colors text-muted-foreground hover:text-foreground">FR</button><button class="rounded px-1.5 py-0.5 transition-colors bg-accent-muted text-accent">EN</button></div><button class="rounded-md bg-accent px-3 py-1.5 text-sm font-medium text-accent-foreground transition-colors hover:opacity-90">Connexion</button></div></nav></div></header><div class="flex flex-1 flex-col"><main><section class="px-6 py-32"><div class="mx-auto max-w-4xl"><h1 class="text-5xl font-semibold tracking-tight sm:text-7xl animate-fade-in">ATS-Dopi</h1><p class="mt-6 max-w-xl text-lg text-muted-foreground animate-fade-in-delayed">Cybersecurity student. I build tools, bots and infrastructure. With a knack for Full-Stack development.</p><div class="mt-12 font-mono text-sm"></div><nav class="mt-12 flex flex-wrap gap-x-6 gap-y-2 text-sm animate-fade-in-delayed-2"><a class="text-foreground underline underline-offset-4 hover:text-accent" href="/projects">View projects</a><a class="text-muted-foreground underline underline-offset-4 hover:text-accent" href="/cyber">CyberTool</a><a class="text-muted-foreground underline underline-offset-4 hover:text-accent" href="/tools">Online Tools</a><a class="text-muted-foreground underline underline-offset-4 hover:text-accent" href="/status">Service status</a></nav><p class="mt-8 font-mono text-xs text-muted-foreground/60 animate-fade-in-delayed-2"><span class="text-accent">â</span> <!-- -->769<!-- --> vues au total</p></div></section><section class="border-t border-border px-6 py-24"><div class="mx-auto max-w-4xl"><h2 class="text-2xl font-semibold tracking-tight">About me</h2><div class="mt-6 space-y-4 text-base text-muted-foreground leading-relaxed"><p>Cybersecurity student and full-stack developer. I've designed and deployed multiple websites and projects â from portfolios to admin dashboards â using Next.js, TypeScript, PostgreSQL, Docker and the Linux ecosystem. I run my own Ubuntu 24.04 VPS, managing the full infrastructure end-to-end: Nginx reverse proxy, Docker
1containers, PostgreSQL, monitoring, automated backups.</p><p>On the security side, I regularly compete in CTF (Capture The Flag) challenges, consistently ranking in the top 50. Offensive security, reverse engineering, crypto, forensics â I like understanding how systems break to better protect them. This site is my portfolio and centralized admin dashboard.</p></div><div class="mt-8 flex flex-wrap gap-2"><span class="inline-flex items-center gap-1 rounded border px-2 py-0.5 text-xs font-medium bg-muted text-muted-foreground border-border ">Next.js</span><span class="inline-flex items-center gap-1 rounded border px-2 py-0.5 text-xs font-medium bg-muted text-muted-foreground border-border ">TypeScript</span><span class="inline-flex items-center gap-1 rounded border px-2 py-0.5 text-xs font-medium bg-muted text-muted-foreground border-border ">Tailwind</span><span class="inline-flex items-center gap-1 rounded border px-2 py-0.5 text-xs font-medium bg-muted text-muted-foreground border-border ">Prisma</span><span class="inline-flex items-center gap-1 rounded border px-2 py-0.5 text-xs font-medium bg-muted text-muted-foreground border-border ">PostgreSQL</span><span class="inline-flex items-center gap-1 rounded border px-2 py-0.5 text-xs font-medium bg-muted text-muted-foreground border-border ">Docker</span><span class="inline-flex items-center gap-1 rounded border px-2 py-0.5 text-xs font-medium bg-muted text-muted-foreground border-border ">Nginx</span><span class="inline-flex items-center gap-1 rounded border px-2 py-0.5 text-xs font-medium bg-muted text-muted-foreground border-border ">Node.js</span><span class="inline-flex items-center gap-1 rounded border px-2 py-0.5 text-xs font-medium bg-muted text-muted-foreground border-border ">Python</span></div></div></section><section class="border-t border-border px-6 py-24"><div class="mx-auto max-w-4xl"><div class="flex items-baseline justify-between"><div><h2 class="text-2xl font-semibold tracking-tight">Projects</h2><p class="mt-1 text-xs text-muted-foreground">Top 3 most viewed â updated automatically</p></div><a class="text-sm text-muted-foreground underline underline-offset-4 hover:text-accent" href="/projects">See all</a></div><div class="mt-8 space-y-4"><a class="group block rounded-lg border border-border p-5 transition-colors hover:border-accent/30 hover:bg-card" href="/projects/llmify"><div class="flex items-baseline justify-between"><div class="flex items-center gap-3"><span class="font-mono text-xs text-accent/60">#<!-- -->1</span><h3 class="text-base font-medium group-hover:text-accent transition-colors">LLMify</h3></div><div class="flex items-center gap-3"><span class="text-xs text-muted-foreground">HTML</span><span class="font-mono text-xs text-muted-foreground">70<!-- --> <!-- -->views</span></div></div><p class="mt-1 text-sm text-muted-foreground line-clamp-2">Generate a structured llms.txt for any codebase â drag & drop a folder, 100% local, zero setup, single HTML file</p></a><a class="group block rounded-lg border border-border p-5 transition-colors hover:border-accent/30 hover:bg-card" href="/projects/splitsmart"><div class="flex items-baseline justify-between"><div class="flex items-center gap-3"><span class="font-mono text-xs text-accent/60">#<!-- -->2</span><h3 class="text-base font-medium group-hover:text-accent transition-colors">SplitSmart</h3></div><div class="flex items-center gap-3"><span class="text-xs text-muted-foreground">TypeScript</span><span class="font-mono text-xs text-muted-foreground">70<!-- --> <!-- -->views</span></div></div><p class="mt-1 text-sm text-muted-foreground line-clamp-2">Split expenses with friends, track balances and settle up easily â self-hosted Splitwise/Tricount alternative (React, Express, SQLite, Docker)</p></a><a class="group block rounded-lg border border-border p-5 transition-colors hover:border-accent/30 hover:bg-card" href="/projects/habitflow"><div class="flex items-baseline justify-between"><div class="flex items-center gap-3"><span class="font-mono text-xs text-accent/60">#<!-- -->3</span><h3 class="text-base font-medium group-hover:text-accent transition-colors">HabitFlow</h3></div><div class="flex items-center gap-3"><span class="text-xs text-muted-foreground">TypeScript</span><span class="font-mono text-xs text-muted-foreground">68<!-- --> <!-- -->views</span></div></div><p class="mt-1 text-sm text-muted-foreground line-clamp-2">Self-hosted habit tracker with streaks, GitHub-style heatmap calendar and weekly stats (React, Express, SQLite, Docker)</p></a></div></div></section></main><!--$--><!--/$--></div><footer class="border-t border-border"><div class="mx-auto w-full max-w-6xl flex flex-col gap-8 px-6 py-12"><div class="flex flex-col items-start gap-4 sm:flex-row sm:items-center sm:justify-between"><div><h2 class="text-sm font-medium">Notifications</h2><p class="mt-1 text-xs text-muted-foreground">Get updates by email.</p></div><form class="flex flex-col gap-2 sm:flex-row sm:items-center"><input class="w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground
1/60 transition-colors focus:border-accent focus:outline-none disabled:opacity-50 sm:w-64" type="email" placeholder="[email protected]" value=""/><button class="inline-flex items-center justify-center gap-2 rounded-md font-medium transition-all disabled:opacity-50 disabled:cursor-not-allowed bg-accent text-accent-foreground hover:opacity-90 border-transparent h-8 px-3 text-xs " type="submit" disabled="">S'inscrire</button></form></div><div class="flex flex-col items-center justify-between gap-4 border-t border-border pt-8 sm:flex-row"><p class="text-xs text-muted-foreground">ATS-Dopi · Full-Stack Developer · 2026</p><nav class="flex items-center gap-4 text-xs text-muted-foreground"><a href="/application/mentions-legales" class="hover:text-foreground transition-colors">Legal notice</a><a href="/application/privacy-policy" class="hover:text-foreground transition-colors">Privacy</a><a href="/application/cookies-policy" class="hover:text-foreground transition-colors">Cookies</a><a href="https://github.com/ATSDopi" target="_blank" rel="noopener noreferrer" class="hover:text-foreground transition-colors">GitHub</a></nav></div></div></footer></div></div>
1<script src="/_next/static/chunks/0az8vxg2gfuhm.js" id="_R_" async=""></script>
1<script>(self.__next_f=self.__next_f||[]).push([0])</script>
1<script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n5:I[97367,[\"/_next/static/chunks/0nszf2490b_6y.js\"],\"OutletBoundary\"]\n6:\"$Sreact.suspense\"\n8:I[97367,[\"/_next/static/chunks/0nszf2490b_6y.js\"],\"ViewportBoundary\"]\na:I[97367,[\"/_next/static/chunks/0nszf2490b_6y.js\"],\"MetadataBoundary\"]\nc:I[68027,[\"/_next/static/chunks/0nszf2490b_6y.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/05f02np7lk292.css\",\"style\"]\n:HL[\"/_next/static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n0:{\"P\":null,\"c\":[\"\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"(public)\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4096]},\"$undefined\",\"$undefined\",4096]},\"$undefined\",\"$undefined\",4112],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/05f02np7lk292.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0nszf2490b_6y.js\",\"async\":true,\"nonce\":\"$undefined\"}]],\"$L2\"]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0q3bufvj1_oi5.js\",\"async\":true,\"nonce\":\"$undefined\"}]],\"$L3\"]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[\"$L4\",[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/1lvp-mfq3vcdw.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L5\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@7\"}]}]]}],{},null,false,null]},null,false,null]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$6\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/05f02np7lk292.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":false,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"UUpbl3tolaJwnuT6TbXeH\"}\nd:I[52592,[\"/_next/static/chunks/0nszf2490b_6y.js\"],\"BootScreen\"]\ne:I[85659,[\"/_next/static/chunks/0nszf2490b_6y.js\"],\"FireflyBackground\"]\nf:I[39756,[\"/_next/static/chunks/0nszf2490b_6y.js\"],\"default\"]\n10:I[37457,[\"/_next/static/chunks/0nszf2490b_6y.js\"],\"default\"]\n11:I[29306,[\"/_next/static/chunks/0nszf2490b_6y.js\",\"/_next/static/chunks/0bbqz7t6zdl1q.js\"],\"default\"]\n2:[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable h-full antialiased\",\"children\":[\"$\",\"body\",null,{\"className\":\"min-h-full flex flex-col\",\"children\":[[\"$\",\"$Ld\",null,{}],[\"$\",\"$Le\",null,{}],[\"$\",\"div\",null,{\"className\":\"relative z-10 flex min-h-full flex-1 flex-col\",\"children\":[\"$\",\"$Lf\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L10\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"$L11\",null,{}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]}]\n9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n12:I[27201,[\"/_next/static/chunks/0nszf2490b_6y.js\"],\"IconMark\"]\n7:null\nb:[[\"$\",\"title\",\"0\",{\"children\":\"ATS-Dopi â Cybersec Student \u0026 Full-Stack Developer\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Portfolio, cybersecurity tools and centralized admin dashboard.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/icon.svg?icon.0wstcxy2h5d-p.svg\",\"sizes\":\"any\",\"type\":\"image/svg+xml\"}],[\"$\",\"$L12\",\"3\",{}]]\n13:I[26732,[\"/_next/static/chunks/0nszf2490b_6y.js\",\"/_next/static/chunks/0q3bufvj1_oi5.js\"],\"SessionProvider\"]\n15:I[30826,[\"/_next/static/chunks/0nszf2490b_6y.js\",\"/_next/static/chunks/0q3bufvj1_oi5.js\"],\"LanguageToggle\"]\n16:I[76835,[\"/_next/static/chunks/0nszf2490b_6y.js\",\"/_next/static/chunks/0q3bufvj1_oi5.js\"],\"AuthButton\"]\n17:I[53651,[\"/_next/static/chunks/0nszf2490b_6y.js\",\"/_next/static/chunks/0q3bufvj1_oi5.js\"],\"NewsletterForm\"]\n18:I[35538,[\"/_next/static/chunks/0nszf2490b_6y.js\",\"/_next/static/chunks/0q3bufvj1_oi5.js\"],\"CookieConsent\"]\n3:[\"$\",\"$L13\",null,{\"session\":null,\"children\":[[\"$\",\"div\",null,{\"className\":\"flex min-h-full flex-1 flex-col\",\"children\":[\"$L14\",[\"$\",\"header\",null,{\"className\":\"sticky top-0 z-40 border-b border-border bg-background/80 backdrop-blur-sm\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto w-full max-w-6xl flex h-14 items-center justify-between px-6\",\"children\":[[\"$\",\"a\",null,{\"href\":\"/\",\"className\":\"text-sm font-semibold tracking-tight\",\"children\":\"ATS-Dopi\"}],[\"$\",\"nav\",null,{\"className\":\"flex items-center gap-1 sm:gap-2\",\"children\":[[\"$\",\"a\",null,{\"href\":\"/projects\",\"className\":\"rounded-md px-3 py-1.5 text-sm text-muted-foreground transition-colors hover:text-foreground\",\"children\":\"Projects\"}],[\"$\",\"a\",null,{\"href\":\"/cyber\",\"className\":\"rounded-md px-3 py-1.5 text-sm text-muted-foreground transition-colors hover:text-foreground\",\"children\":\"CyberTool\"}],[\"$\",\"a\",null,{\"href\":\"/cyber-watch\",\"className\":\"rounded-md px-3 py-1.5 text-sm text-muted-foreground transition-colors hover:text-foreground\",\"children\":\"CVE Watch\"}],[\"$\",\"a\",null,{\"href\":\"/tools\",\"className\":\"rounded-md px-3 py-1.5 text-sm text-muted-foreground transition-colors hover:text-foreground\",\"children\":\"Tools\"}],[\"$\",\"a\",null,{\"href\":\"/status\",\"className\":\"rounded-md px-3 py-1.5 text-sm text-muted-foreground transition-colors hover:text-foreground\",\"children\":\"Status\"}],[\"$\",\"div\",null,{\"className\":\"ml-2 flex items-center gap-2 pl-2 border-l border-border\",\"children\":[[\"$\",\"$L15\",null,{\"currentLocale\":\"en\"}],[\"$\",\"$L16\",null,{\"session\":null}]]}]]}]]}]}],[\"$\",\"div\",null,{\"className\":\"flex flex-1 flex-col\",\"children\":[\"$\",\"$Lf\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L10\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"$L11\",null,{}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}],[\"$\",\"footer\",null,{\"className\":\"border-t border-border\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto w-full max-w-6xl flex flex-col gap-8 px-6 py-12\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-col items-start gap-4 sm:flex-row sm:items-center sm:justify-between\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-sm font-medium\",\"children\":\"Notifications\"}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-xs text-muted-foreground\",\"children\":\"Get updates by email.\"}]]}],[\"$\",\"$L17\",null,{}]]}],[\"$\",\"div\",null,{\"className\":\"flex flex-col items-center justify-between gap-4 border-t border-border pt-8 sm:flex-row\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-xs text-muted-foreground\",\"children\":\"ATS-Dopi · Full-Stack Developer · 2026\"}],[\"$\",\"nav\",null,{\"className\":\"flex items-center gap-4 text-xs text-muted-foreground\",\"children\":[[\"$\",\"a\",null,{\"href\":\"/application/mentions-legales\",\"className\":\"hover:text-foreground transition-colors\",\"children\":\"Legal notice\"}],[\"$\",\"a\",null,{\"href\":\"/application/privacy-policy\",\"className\":\"hover:text-foreground transition-colors\",\"children\":\"Privacy\"}],[\"$\",\"a\",null,{\"href\":\"/application/cookies-policy\",\"className\":\"hover:text-foreground transition-colors\",\"children\":\"Cookies\"}],[\"$\",\"a\",null,{\"href\":\"https://github.com/ATSDopi\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"hover:text-foreground transition-colors\",\"children\":\"GitHub\"}]]}]]}]]}]}]]}],[\"$\",\"$L18\",null,{\"locale\":\"en\"}]]}]\n14:null\n19:I[54355,[\"/_next/static/chunks/0nszf2490b_6y.js\",\"/_next/static/chunks/0q3bufvj1_oi5.js\",\"/_next/static/chunks/1lvp-mfq3vcdw.js\"],\"BootAnimation\"]\n1a:I[22016,[\"/_next/static/chunks/0nszf2490b_6y.js\",\"/_next/static/chunks/0q3bufvj1_oi5.js\",\"/_next/static/chunks/1lvp-mfq3vcdw.js\"],\"\"]\n4:[\"$\",\"main\",null,{\"children\":[[\"$\",\"section\",null,{\"className\":\"px-6 py-32\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-4xl\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-5xl font-semibold tracking-tight sm:text-7xl animate-fade-in\",\"children\":\"ATS-Dopi\"}],[\"$\",\"p\",null,{\"className\":\"mt-6 max-w-xl text-lg text-muted-foreground animate-fade-in-delayed\",\"children\":\"Cybersecurity student. I build tools, bots and infrastru
1cture. With a knack for Full-Stack development.\"}],[\"$\",\"$L19\",null,{\"lines\":[{\"text\":\"$$ whoami\",\"delay\":200,\"type\":\"cmd\"},{\"text\":\"cybersec student · full-stack developer · vps admin\",\"delay\":400,\"type\":\"out\"},{\"text\":\"$$ status\",\"delay\":600,\"type\":\"cmd\"},{\"text\":\"â available for new projects\",\"delay\":300,\"type\":\"status\"}]}],[\"$\",\"nav\",null,{\"className\":\"mt-12 flex flex-wrap gap-x-6 gap-y-2 text-sm animate-fade-in-delayed-2\",\"children\":[[\"$\",\"$L1a\",null,{\"href\":\"/projects\",\"className\":\"text-foreground underline underline-offset-4 hover:text-accent\",\"children\":\"View projects\"}],[\"$\",\"$L1a\",null,{\"href\":\"/cyber\",\"className\":\"text-muted-foreground underline underline-offset-4 hover:text-accent\",\"children\":\"CyberTool\"}],[\"$\",\"$L1a\",null,{\"href\":\"/tools\",\"className\":\"text-muted-foreground underline underline-offset-4 hover:text-accent\",\"children\":\"Online Tools\"}],[\"$\",\"$L1a\",null,{\"href\":\"/status\",\"className\":\"text-muted-foreground underline underline-offset-4 hover:text-accent\",\"children\":\"Service status\"}]]}],[\"$\",\"p\",null,{\"className\":\"mt-8 font-mono text-xs text-muted-foreground/60 animate-fade-in-delayed-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-accent\",\"children\":\"â\"}],\" \",\"769\",\" vues au total\"]}]]}]}],[\"$\",\"section\",null,{\"className\":\"border-t border-border px-6 py-24\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-4xl\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold tracking-tight\",\"children\":\"About me\"}],[\"$\",\"div\",null,{\"className\":\"mt-6 space-y-4 text-base text-muted-foreground leading-relaxed\",\"children\":[[\"$\",\"p\",null,{\"children\":\"Cybersecurity student and full-stack developer. I've designed and deployed multiple websites and projects â from portfolios to admin dashboards â using Next.js, TypeScript, PostgreSQL, Docker and the Linux ecosystem. I run my own Ubuntu 24.04 VPS, managing the full infrastructure end-to-end: Nginx reverse proxy, Docker
1containers, PostgreSQL, monitoring, automated backups.\"}],[\"$\",\"p\",null,{\"children\":\"On the security side, I regularly compete in CTF (Capture The Flag) challenges, consistently ranking in the top 50. Offensive security, reverse engineering, crypto, forensics â I like understanding how systems break to better protect them. This site is my portfolio and centralized admin dashboard.\"}]]}],[\"$\",\"div\",null,{\"className\":\"mt-8 flex flex-wrap gap-2\",\"children\":[[\"$\",\"span\",\"Next.js\",{\"className\":\"inline-flex items-center gap-1 rounded border px-2 py-0.5 text-xs font-medium bg-muted text-muted-foreground border-border \",\"children\":\"Next.js\"}],[\"$\",\"span\",\"TypeScript\",{\"className\":\"inline-flex items-center gap-1 rounded border px-2 py-0.5 text-xs font-medium bg-muted text-muted-foreground border-border \",\"children\":\"TypeScript\"}],[\"$\",\"span\",\"Tailwind\",{\"className\":\"inline-flex items-center gap-1 rounded border px-2 py-0.5 text-xs font-medium bg-muted text-muted-foreground border-border \",\"children\":\"Tailwind\"}],[\"$\",\"span\",\"Prisma\",{\"className\":\"inline-flex items-center gap-1 rounded border px-2 py-0.5 text-xs font-medium bg-muted text-muted-foreground border-border \",\"children\":\"Prisma\"}],[\"$\",\"span\",\"PostgreSQL\",{\"className\":\"inline-flex items-center gap-1 rounded border px-2 py-0.5 text-xs font-medium bg-muted text-muted-foreground border-border \",\"children\":\"PostgreSQL\"}],[\"$\",\"span\",\"Docker\",{\"className\":\"inline-flex items-center gap-1 rounded border px-2 py-0.5 text-xs font-medium bg-muted text-muted-foreground border-border \",\"children\":\"Docker\"}],\"$L1b\",\"$L1c\",\"$L1d\"]}]]}]}],\"$L1e\"]}]\n1b:[\"$\",\"span\",\"Nginx\",{\"className\":\"inline-flex items-center gap-1 rounded border px-2 py-0.5 text-xs font-medium bg-muted text-muted-foreground border-border \",\"children\":\"Nginx\"}]\n1c:[\"$\",\"span\",\"Node.js\",{\"className\":\"inline-flex items-center gap-1 rounded border px-2 py-0.5 text-xs font-medium bg-muted text-muted-foreground border-border \",\"children\":\"Node.js\"}]\n1d:[\"$\",\"span\",\"Python\",{\"className\":\"inline-flex items-center gap-1 rounded border px-2 py-0.5 text-xs font-medium bg-muted text-muted-foreground border-border \",\"children\":\"Python\"}]\n1e:[\"$\",\"section\",null,{\"className\":\"border-t border-border px-6 py-24\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-4xl\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold tracking-tight\",\"children\":\"Projects\"}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-xs text-muted-foreground\",\"children\":\"Top 3 most viewed â updated automatically\"}]]}],[\"$\",\"$L1a\",null,{\"href\":\"/projects\",\"className\":\"text-sm text-muted-foreground underline underline-offset-4 hover:text-accent\",\"children\":\"See all\"}]]}],[\"$\",\"div\",null,{\"className\":\"mt-8 space-y-4\",\"children\":[[\"$\",\"$L1a\",\"cmu2gorml000a01ljfar8vs1t\",{\"href\":\"/projects/llmify\",\"className\":\"group block rounded-lg border border-border p-5 transition-colors hover:border-accent/30 hover:bg-card\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"font-mono text-xs text-accent/60\",\"children\":[\"#\",1]}],[\"$\",\"h3\",null,{\"className\":\"text-base font-medium group-hover:text-accent transition-colors\",\"children\":\"LLMify\"}]]}],[\"$\",\"div\",null,{\"className\":\"flex items-center gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-xs text-muted-foreground\",\"children\":\"HTML\"}],[\"$\",\"span\",null,{\"className\":\"font-mono text-xs text-muted-foreground\",\"children\":[\"70\",\" \",\"views\"]}]]}]]}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm text-muted-foreground line-clamp-2\",\"children\":\"Generate a structured llms.txt for any codebase â drag \u0026 drop a folder, 100% local, zero setup, single HTML file\"}]]}],[\"$\",\"$L1a\",\"cmu2goosl000201ljls7gw96h\",{\"href\":\"/projects/splitsmart\",\"className\":\"group block rounded-lg border border-border p-5 transition-colors hover:border-accent/30 hover:bg-card\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"font-mono text-xs text-accent/60\",\"children\":[\"#\",2]}],[\"$\",\"h3\",null,{\"className\":\"text-base font-medium group-hover:text-accent transition-colors\",\"children\":\"SplitSmart\"}]]}],[\"$\",\"div\",null,{\"className\":\"flex items-center gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-xs text-muted-foreground\",\"children\":\"TypeScript\"}],[\"$\",\"span\",null,{\"className\":\"font-mono text-xs text-muted-foreground\",\"children\":[\"70\",\" \",\"views\"]}]]}]]}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm text-muted-foreground line-clamp-2\",\"children\":\"Split expenses with friends, track balances and settle up easily â self-hosted Splitwise/Tricount alternative (React, Express, SQLite, Docker)\"}]]}],[\"$\",\"$L1a\",\"cmu2gop5p000301ljjtfrckrw\",{\"href\":\"/projects/habitflow\",\"className\":\"group block rounded-lg border border-border p-5 transition-colors hover:border-accent/30 hover:bg-card\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-baseline justify-between\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"font-mono text-xs text-accent/60\",\"children\":[\"#\",3]}],[\"$\",\"h3\",null,{\"className\":\"text-base font-medium group-hover:text-accent transition-colors\",\"children\":\"HabitFlow\"}]]}],[\"$\",\"div\",null,{\"className\":\"flex items-center gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-xs text-muted-foreground\",\"children\":\"TypeScript\"}],[\"$\",\"span\",null,{\"className\":\"font-mono text-xs text-muted-foreground\",\"children\":[\"68\",\" \",\"views\"]}]]}]]}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm text-muted-foreground line-clamp-2\",\"children\":\"Self-hosted habit tracker with streaks, GitHub-style heatmap calendar and weekly stats (React, Express, SQLite, Docker)\"}]]}]]}]]}]}]\n"])</script>
1</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.