Meet Nesti, your wise old Linux grandfather in penguin form! An interactive AI chatbot that transforms complex Linux system administration into simple, conversational guidance. Ask Nesti anything about Linux commands, and get instant, practical answers—no jargon, just wisdom.
- AI-Powered Intelligence - Powered by Google's Gemini 2.5 Flash model
- Linux-Focused Expertise - Answers ONLY Linux/Unix system administration questions
- Image Analysis - Upload terminal screenshots or config files for analysis
- Conversational UI - Retro pixel art terminal interface with smooth interactions
- Copy to Clipboard - Easily copy responses for quick reference
- Real-time Response - Instant answers with loading indicators
- Production Ready - Deployed on Render (backend) & Vercel (frontend)
- Frontend: https://linux-grandfa.vercel.app
- Backend API: https://linux-grandfa.onrender.com
- API Docs: https://linux-grandfa.onrender.com/docs
LinuxGrandfa-FE/
├── app/
│ ├── components/ # Reusable UI components
│ │ ├── ChatBox.tsx # Main chat interface
│ │ ├── ChatMessage.tsx # Message display with copy button
│ │ ├── ChatInput.tsx # Input with image upload
│ │ ├── PixelCard.tsx # Pixel-art themed container
│ │ ├── PixelButton.tsx # Styled buttons
│ │ └── PixelLogo.tsx # Animated logo
│ ├── config/ # API configuration
│ ├── services/ # API communication
│ └── page.tsx # Main page
├── globals.css # Pixel art styling
└── package.json
Tech Stack:
- Next.js 16 (React framework)
- React 19 (UI library)
- TypeScript 5 (Type safety)
- Tailwind CSS 4 (Styling)
- Google Fonts (Pixel art fonts)
LinuxGrandfa-BE/
├── app/
│ ├── main.py # FastAPI application
│ ├── config/
│ │ └── settings.py # Environment configuration
│ ├── models/
│ │ └── chat.py # Request/response models
│ ├── routers/
│ │ └── chat.py # API endpoints
│ └── services/
│ └── gemini_service.py # Gemini AI integration
├── requirements.txt
├── render.yaml # Render deployment config
└── .env.example # Environment template
Tech Stack:
- FastAPI 0.109+ (Web framework)
- Uvicorn (ASGI server)
- Google Generative AI (Gemini integration)
- Pydantic (Data validation)
cd LinuxGrandfa-FE
# Install dependencies
npm install
# Create environment file
echo 'NEXT_PUBLIC_API_URL=http://localhost:8000' > .env.local
# Run development server
npm run dev
# Open http://localhost:3000cd LinuxGrandfa-BE
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Create environment file
cp .env.example .env
# Edit .env and add your Gemini API key from https://aistudio.google.com/apikey
# Run server
uvicorn app.main:app --reload --port 8000
# View API docs at http://localhost:8000/docsPOST /api/chat/
Request:
{
"message": "How do I list files in Linux?",
"images": ["data:image/png;base64,..."] // Optional
}Response:
{
"response": "Use the 'ls' command to list files...",
"role": "assistant"
}GET /api/chat/health
GET /health
GET /docs # Swagger UI
GET /redoc # ReDoc
- Push code to GitHub
- Connect repository to Render
- Select
LinuxGrandfa-BEfolder as root - Set build command:
pip install -r requirements.txt - Set start command:
uvicorn app.main:app --host 0.0.0.0 --port $PORT - Add environment variables:
GEMINI_API_KEY= Your Gemini API keyCORS_ORIGINS= Your Vercel frontend URL
- Push code to GitHub
- Import project in Vercel
- Select
LinuxGrandfa-FEfolder as root - Add environment variable:
NEXT_PUBLIC_API_URL= Your Render backend URL
- Deploy!
GEMINI_API_KEY=your_api_key_here
GEMINI_MODEL=gemini-2.5-flash
APP_NAME=LinuxGrandfa API
APP_VERSION=1.0.0
DEBUG=false
CORS_ORIGINS=["http://localhost:3000", "https://yourdomain.com"]
NEXT_PUBLIC_API_URL=http://localhost:8000
- Retro Pixel Art Theme - 90s terminal aesthetic
- Responsive Design - Works on desktop, tablet, and mobile
- 3D Shadow Effects - Pixel-perfect layered shadows
- CRT Scan Lines - Authentic monitor effect
- Grid Background - Classic terminal grid pattern
- Smooth Animations - Loading indicators and transitions
- Dark Mode - Easy on the eyes
Nesti (the AI) is configured to:
- Only answer Linux questions - Redirects off-topic queries
- Keep responses concise - 2-4 sentences for simple questions
- Use simple language - No technical jargon
- Provide examples - Practical use cases when relevant
- Warn about dangers - Alerts for destructive commands (rm -rf, etc.)
- Analyze images - Detects Linux-related screenshots
- Frontend: 6 React components + services layer
- Backend: RESTful API with 2 main endpoints
- Code: 100% TypeScript (frontend) + Python (backend)
- Database: Stateless (no DB needed)
- Deployment: Fully cloud-native
Steven Madali - Full-stack developer & Linux enthusiast
MIT License - Feel free to use and modify!
Contributions are welcome! Feel free to:
- Report bugs
- Suggest features
- Submit pull requests
- Improve documentation
- 🐛 Report issues on GitHub
- 💬 Ask Nesti anything about Linux
- 📖 Check the API docs at
/docs
Ready to chat with your Linux mentor? Start here: Linux Grandfa