A pixel-perfect recreation of Windows 98 on the web with modern features including real-time multiplayer chat and an AI-powered Clippy assistant.
- π₯οΈ Authentic Windows 98 UI: Pixel-perfect recreation with functional window management
- π¬ Real-time Chat: Multiplayer chatroom powered by PartyKit WebSocket
- π€ AI Clippy: LLM-powered assistant using Google Gemini
- π¨ Draggable Windows: Fully functional window system with minimize, maximize, close
- β‘ Built with Next.js 16: Modern React framework with App Router
- Node.js: v22.14.0 or later (Download)
- npm: Comes with Node.js
- Git: For cloning the repository
Run the setup script to automatically install all dependencies:
# Clone the repository
git clone <your-repo-url>
cd windows-xd
# Run the automated setup script
./setup.shThe script will:
- β Check your Node.js version
- β
Install all npm dependencies using
npm ci(ensures exact versions) - β
Create
.env.localfrom template - β Verify everything is ready to run
If you prefer to set up manually:
# 1. Use the correct Node.js version (if using nvm)
nvm use
# 2. Install dependencies (use 'npm ci' to ensure exact versions)
npm ci
# 3. Create environment file
cp .env.example .env.local
# 4. (Optional) Add your Gemini API key to .env.local for Clippy feature
# Get your key from: https://aistudio.google.com/app/apikeynpm run devOpen http://localhost:3000 in your browser.
For production deployment instructions, see the deployment documentation.
Key deployment guides:
- Vercel Setup - Complete deployment guide
- API Key Safety - Security best practices
- PartyKit Deployment - WebSocket server setup
npm run build # Build for production
npm start # Start production servernpm run lint # Run ESLintThis project uses package-lock.json to lock dependency versions.
Always use npm ci instead of npm install when setting up the project:
npm ci # β
Installs exact versions from package-lock.json
npm install # β May install different versions# Install and save to package.json
npm install <package-name>
# Commit BOTH files
git add package.json package-lock.json
git commit -m "feat: add <package-name> dependency"If someone added new dependencies:
git pull
npm ci # Reinstall from updated package-lock.jsonPro Tip: The
setup.shscript automatically usesnpm cito ensure consistency.
windows-xd/
βββ app/
β βββ components/ # React components
β β βββ apps/ # Application windows (Notepad, Paint, Chat, etc.)
β β βββ ...
β βββ hooks/ # Custom React hooks
β βββ types/ # TypeScript type definitions
β βββ layout.tsx # Root layout
β βββ page.tsx # Main page
βββ party/ # PartyKit WebSocket server
βββ docs/ # Documentation
β βββ deployment/ # Deployment guides
β βββ development/ # Development docs
βββ .planning/ # Project planning and documentation
βββ .nvmrc # Node.js version lock
βββ setup.sh # Automated setup script
βββ package.json # Dependencies and scripts
- Framework: Next.js 16.1.6 (App Router)
- Language: TypeScript 5 (strict mode)
- Styling: Tailwind CSS 4
- State Management: React Context API
- Real-time: PartyKit (WebSocket)
- AI: Google Gemini API
- Window Management: react-rnd
See CONTRIBUTING.md for detailed development guidelines.
# Reinstall dependencies with exact versions
rm -rf node_modules package-lock.json
npm install# Kill the process using port 3000
lsof -i :3000
kill -9 <PID># Check for type errors
npx tsc --noEmit[Your License Here]
Contributions are welcome! Please read CONTRIBUTING.md first.