A futuristic, AI-powered portfolio interface with glassmorphism design and real-time chat capabilities. Built with Next.js, React, Framer Motion, and Tailwind CSS.
- AI-Powered Chat: Conversational AI assistant powered by GPT-4o
- Dynamic Command System: Type
/projects,/stack,/experience, etc. for instant data - Glassmorphism UI: Modern frosted glass aesthetic with neon cyan and violet accents
- Real-time Responses: Streaming chat responses with citations and knowledge base references
- Cyberpunk Aesthetic: Terminal-inspired interface with particle effects and holographic elements
- Responsive Design: Optimized for desktop with fluid animations
- Typography: Space Mono for body text, Orbitron for headings and accents
- Performance Optimized: 60 FPS animations, optimized particle system, GPU-accelerated rendering
- Node.js 18+
- npm or pnpm
- Backend API running at
https://portana-api.aahil-khan.tech(or localhost for development)
# Clone the repository
git clone https://github.com/aahil-khan/portana.git
cd portana-frontend
# Install dependencies
npm install
# or
pnpm installnpm run devOpen http://localhost:3000 to view it in the browser.
npm run build
npm run startportana-frontend/
βββ app/
β βββ layout.tsx # Root layout with font imports
β βββ page.tsx # Main page (chat interface)
β βββ globals.css # Global styles and theme variables
β βββ onboarding/ # Onboarding flow pages
βββ components/
β βββ chat-interface.tsx # Main chat component with routing logic
β βββ boot-screen.tsx # Animated boot/loading screen
β βββ sidebar.tsx # Navigation sidebar
β βββ top-bar.tsx # Header with branding
β βββ background-effects.tsx # Particle system and gradients
β βββ command-data-renderer.tsx # Dynamic command response renderer
β βββ command-suggestion.tsx # Interactive command buttons
β βββ citations.tsx # Knowledge base citations display
β βββ chat-message.tsx # Individual message component
β βββ portana/ # Onboarding components
βββ lib/
β βββ response-types.ts # TypeScript types and utilities
βββ public/ # Static assets
βββ next.config.mjs # Next.js configuration
βββ tailwind.config.ts # Tailwind CSS configuration
βββ tsconfig.json # TypeScript configuration
- Primary: Neon Cyan (
#00d9ff) - Secondary: Violet/Amethyst (
#a78bfa) - Background: Deep Blue (
#0b0d10) - Glass:
rgba(255, 255, 255, 0.05)with backdrop blur
- Display Font: Orbitron (400, 700, 900 weights)
- Used for: Boot screen, headings, accents, key titles
- Style: Sharp, geometric, sci-fi aesthetic
- Body Font: Space Mono (400, 700 weights)
- Used for: All body text, code, UI elements
- Style: Retro-futuristic, terminal aesthetic, monospace
- Frame Rate: 60 FPS target
- Duration: 0.2-0.3s for interactions, 20s for ambient animations
- Easing: ease-out for snappy interactions, linear for continuous effects
Chat Endpoint
POST /api/chat/message
Body: { message: string }
Response: { type: "text" | "hybrid" | "command", content: string, ... }
Command Endpoints
GET /api/commands/projects # Portfolio projects
GET /api/commands/stack # Technology stack
GET /api/commands/experience # Work experience
GET /api/commands/education # Education history
GET /api/commands/timeline # Combined timeline
GET /api/commands/summary # Personal summary
GET /api/commands/achievements # Awards/recognition
GET /api/commands/all # Complete portfolio data
Users can interact with Portana in multiple ways:
/projects- View portfolio projects/stack- See technology stack/experience- Work experience details/education- Education history/timeline- Combined timeline view/summary- Personal summary/achievements- Awards and recognition/all- Complete portfolio data
- "What projects have you worked on?"
- "Show me your tech stack"
- "Tell me about your experience"
- Regular conversation: "Hi!", "Hello", etc.
Text Response
- Natural language answer with citations
- Knowledge base references included
Hybrid Response
- AI answer + suggested command button
- Enables progressive feature discovery
Command Response
- Direct data from command endpoints
- Fast response times (<10ms)
- Particle System: Reduced from 50 to 40 particles, optimized distance calculations
- Animation: Removed expensive word-by-word animations
- Build: SWC minification, response compression, tree-shaking for dependencies
- CSS: GPU acceleration hints (
will-change,backfaceVisibility) - Mouse Tracking: Uses
useRefinstead of state updates (no re-renders) - Canvas: Optimized clearing and line connection limits (50 max)
Result: Smooth 60 FPS animations, eliminated frame jitter
Create a .env.local file:
NEXT_PUBLIC_API_URL=https://portana-api.aahil-khan.tech
Key optimizations:
productionBrowserSourceMaps: false- Reduced bundle sizeoptimizePackageImports: ["framer-motion", "lucide-react"]- Tree-shakingcompress: true- Response compressiononDemandEntries- Better dev/prod caching
- Next.js 16: React framework with Turbopack
- React 19: UI library
- TypeScript: Type safety
- Framer Motion: Advanced animations
- Tailwind CSS v4: Utility-first styling
- Lucide React: Icon library
- Google Fonts: Space Mono, Orbitron
The frontend is optimized for deployment to Vercel:
# Build for production
npm run build
# Start production server
npm run startEnvironment variables are configured via .env.local for development.
- Build Time: ~5-7 seconds (Turbopack)
- Bundle Size: <200KB (gzipped)
- Time to Interactive: <2 seconds
- Target FPS: 60 FPS sustained
# Kill process on port 3000
lsof -ti:3000 | xargs kill -9
npm run devrm -rf .next
npm run buildrm -rf node_modules package-lock.json
npm install- API calls use HTTPS (production)
- No sensitive data stored in localStorage
- CSP headers configured in Next.js
- Input validation on all chat messages
- Session persistence
- Message history export
- Voice input/output
- Mobile app wrapper
- Dark/light mode toggle
- Analytics integration
- Multi-language support
This project is part of Aahil Khan's portfolio. See LICENSE file for details.
Contributions are welcome! Please follow the existing code style and create detailed commit messages.
For questions or feedback about Portana:
- GitHub: @aahil-khan
- LinkedIn: Aahil Khan
Made with β€οΈ by Aahil Khan
Last Updated: November 12, 2025