ββββββββββββββββββββ βββββββββββββββββββ ββββββββββββββ βββββββ ββββββββ
βββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββ βββββββββββββββββ
ββββββββββββββ ββββββ βββ βββ βββββββββ βββββββββ βββ βββ βββββββββββ
ββββββββββββββ ββββββββββ βββ βββββββββββββββββββ βββ βββ βββββββββββ
βββββββββββββββββββ ββββββ βββ ββββββ βββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββ βββββ βββ ββββββ βββββββββββββββββββββ βββββββ ββββββββ
SENTINEL_OS // PORTFOLIO β A hacker-aesthetic portfolio template built for cybersecurity professionals, penetration testers, and security researchers who want their online presence to hit as hard as their tooling.
| HOME // SYSTEM | PROJECT_FILES |
![]() |
![]() |
| BLOG & LOGS | ESTABLISH_LINK // CONTACT |
![]() |
![]() |
[+] TERMINAL_AESTHETIC β Authentic hacker OS interface with scanline overlays,
glowing green-on-black palette, and monospace typography
[+] FULL_PAGE_LAYOUT β Persistent sidebar nav + top bar + status footer on every page
[+] ANIMATED_MATRIX β WebGL matrix rain shader on the home screen
[+] LIVE_STATUS_BAR β System uptime, IP readout, and session controls always visible
[+] RESPONSIVE_DESIGN β Mobile-first layout that holds up on any screen size
[+] NODE_CARD_SYSTEM β Window-chrome project cards with accent colors per project type
[+] TERMINAL_WIDGETS β Glowing terminal boxes with header bars, dot controls, and prompts
[+] BLOG_LOG_SYSTEM β Severity-tagged log entries (CRITICAL / INFO) with image previews
[+] VULNERABILITY_INDEX β Live animated bar chart widget in the blog sidebar
[+] CONTACT_UPLINK β Encrypted-aesthetic contact form with social node links
[+] SEO_OPTIMIZED β Meta tags, OG tags, and semantic HTML on every route
[+] FILE_BASED_ROUTING β TanStack Router with automatic route tree generation
| Layer | Technology |
|---|---|
| Framework | TanStack Start (React 19 + SSR) |
| Routing | TanStack Router β file-based, type-safe |
| Styling | Tailwind CSS v4 with custom design tokens |
| Language | TypeScript 5 |
| Bundler | Vite 8 |
| UI Primitives | Radix UI (headless, accessible) |
| Forms | React Hook Form + Zod |
| Charts | Recharts |
| Icons | Lucide React + Material Symbols Outlined |
| Package Manager | Bun |
| Code Quality | ESLint + Prettier |
# Clone the repo
git clone https://github.com/your-username/hacker-portfolio.git
cd hacker-portfolio
# Install dependencies (recommended: bun)
bun install
# or with npm
npm installbun run dev
# or
npm run devOpen http://localhost:3000 β the OS will boot.
bun run build
# or
npm run buildsrc/
βββ components/
β βββ MatrixShader.tsx # WebGL matrix rain effect (home page)
β βββ SiteLayout.tsx # Root layout: sidebar + topbar + footer
β βββ ui/ # Radix UI component wrappers
βββ routes/
β βββ __root.tsx # App shell, font loading, global providers
β βββ index.tsx # HOME β whoami terminal + hero
β βββ projects.tsx # PROJECT_FILES β node cards + fs terminal
β βββ blog.tsx # BLOG & LOGS β log entries + sidebar widgets
β βββ contact.tsx # ESTABLISH_LINK β contact form + uplinks
βββ hooks/ # Custom React hooks
βββ lib/ # Utility functions
βββ styles.css # Design tokens, global styles, animations
βββ router.tsx # TanStack Router configuration
Edit src/components/SiteLayout.tsx and update the sidebar operator block:
// Find the OPERATOR_01 section and change:
<div className="font-label-caps text-on-surface">OPERATOR_01</div>
<div className="font-code-sm text-outline">STATUS: ENCRYPTED</div>
// To your alias and tagline
<div className="font-label-caps text-on-surface">YOUR_HANDLE</div>
<div className="font-code-sm text-outline">STATUS: ACTIVE</div>In src/routes/projects.tsx, extend the PROJECTS array:
{
node: "NODE_03 // WEB",
category: "WEB",
accent: "primary", // "primary" (green) | "secondary" (cyan)
title: "YOUR_PROJECT_NAME",
badge: "[ STATUS: LIVE ]",
description: "> Your description here...",
tags: ["React", "Node.js", "PostgreSQL"],
cta: "VIEW_SOURCE_CODE",
image: "https://your-image-url.com/screenshot.jpg",
}In src/routes/blog.tsx, extend the ENTRIES array:
{
id: "#00143",
severity: "INFO", // "CRITICAL" | "INFO"
severityColor: "border-secondary-fixed text-secondary-fixed",
timestamp: "T-MINUS: 2024.01.15 // 09:00 GMT",
title: "YOUR_POST_TITLE",
excerpt: "Short summary of the post...",
tags: ["#TAG1", "#TAG2"],
image: "https://your-image-url.com/cover.jpg",
overlay: "bg-secondary-fixed/10",
accent: "text-secondary-fixed",
}In src/routes/contact.tsx, find the UPLINKS array and swap in your real URLs:
{ icon: "code", label: "GIT_REPOSITORY", sub: "192.168.1.1 // GITHUB", href: "https://github.com/you" },
{ icon: "link", label: "SOCIAL_NODE", sub: "172.16.254.1 // LINKEDIN", href: "https://linkedin.com/in/you" },
{ icon: "language", label: "COMM_LINK", sub: "10.0.0.1 // X_TWITTER", href: "https://x.com/you" },The entire design system lives in src/styles.css under @theme. The primary accent is neon green and secondary is cyan. Swap freely:
@theme {
--color-primary-fixed: #79ff5b; /* main accent β neon green */
--color-secondary-fixed: #6ff6ff; /* secondary accent β cyan */
--color-error: #ffb4ab; /* CRITICAL severity color */
--color-background: #131313; /* page background */
}| Class | Description |
|---|---|
font-headline-lg |
48px mono β page titles (desktop) |
font-headline-lg-mobile |
32px mono β page titles (mobile) |
font-headline-md |
24px mono β card headings |
font-label-caps |
12px mono uppercase tracking β labels |
font-code-sm |
14px mono β terminal output, badges |
font-body-md |
16px sans β readable body text |
font-body-lg |
18px sans β intro paragraphs |
| Class | Effect |
|---|---|
terminal-glow |
Green box-shadow + border glow on any container |
terminal-header-bar |
Translucent green top bar for terminal chrome |
scanline-overlay |
Fixed scanline effect over the whole page |
glitch-text |
CSS glitch animation on hover |
animate-flicker |
Subtle opacity flicker loop |
This template is SSR-ready via TanStack Start + Nitro. Deploy anywhere that runs Node:
# Vercel
vercel deploy
# Netlify
netlify deploy --prod
# Self-hosted (after build)
bun run build
node .output/server/index.mjsNote: This project syncs with Lovable. Keep the connected branch in a working state β avoid force-pushing or rewriting published history.
MIT License β use it, fork it, hack it.
Credit appreciated but not required.
[ SYSTEM_READY ] // UPTIME: 99.9% // BUILD: STABLE
Built with >_ and too much caffeine.



