Monorepo with bun workspaces:
/apps
/web # Next.js 16 + Magic UI (Normal) + terminal-style React UI (Hardcore)
/ssh # ssh2 server wrapper for Hardcore mode
/packages
/tui # headless command engine + ANSI formatting (shared by SSH + web)
/agent-core # LLM loop + command dispatcher (future)
/tools # slash commands + RAG tools (future)
/data
config.json # site metadata, intro, bio
resume.json # structured work/education data
resume.pdf # downloadable PDF
skills.json # skills by category
projects.json # project cards data
links.json # social/contact links
- Full-screen 50/50 split (Normal | Hardcore)
- Mobile detection → auto-redirect to
/normal - Mode selector with icons (Globe for Normal, Terminal for Hardcore)
- Hardcore shows "Coming soon" hover state
Built with Next.js 16, Tailwind CSS v4, shadcn/ui, and Magic UI:
- BlurFade: Section reveal animations
- TypingAnimation: Hero text effect
- Badge/Card: Content display
- Avatar: Profile image
Sections:
- Hero, About, Work, Education, Skills, Projects, Contact
- Blog (MDX-based, future)
- Web: React terminal-style UI that renders ANSI output (no terminal emulator)
- SSH: Planned ssh2 server that streams ANSI to a real PTY
/message: capture text + email → Resend/email pipeline/download: return signed URL for resume.pdf/skills: return curated markdown file/achievements: curated markdown/links: static list (GitHub, LinkedIn, projects)/references: structured list with quotes/tldr: self-pitch
- Model: gpt-4.1-mini (fast, cost efficient)
- RAG: Supabase pgvector
- Flow: parse → dispatch command if
/; else → LLM + RAG. If low confidence → fallback with /message
- Parses input and dispatches slash commands
- Emits ANSI-formatted text for consistent styling
- Web UX: command autocomplete, input history, prompt/welcome banner
- Mobile toolbar and full keymaps are future additions
config.json- Site metadata, intro, bioresume.json- Work experience, educationresume.pdf- Downloadable resumeskills.json- Skills categorizedprojects.json- Project datalinks.json- Social links- Curated GitHub repos (future)
- personality.md (future)
- Normal mode: Vercel (Next.js)
- Hardcore web: Vercel (client-only ANSI console)
- Hardcore SSH: Dedicated server with ssh2 (planned)
- Validate email on /message
- Rate limit web/SSH
- Redact sensitive patterns in logs
- Idle timeout on sessions
- PostHog events: page_view, mode_selected, resume_downloaded, command_executed, ai_query, message_submitted
- Anonymous session IDs
- Normal mode: Fully responsive
- Mobile banner: "Visit on desktop for Hardcore mode"
- Banner dismissible, stored in localStorage
- Hardcore: Not optimized for mobile (desktop/SSH only)
- ANSI parsing differences between web and real terminals
- Large output volume can stress React rendering if unbounded
- LLM hallucinations → require citations, fallback
- Abuse via /message → CAPTCHA + rate limits
- Resume hosting issues → stable S3/Supabase bucket
- M1: Landing + Normal mode + Hardcore placeholder
- M2: Hardcore mode (TUI + SSH + web terminal)
- M3: Command system
- M4: AI + RAG
- M5: Mobile toolbar + PWA
- M6: Telemetry + polish