Desktop experience inside the browser

GadgetOS

Browser-based operating system built to simulate a desktop-like experience entirely within your browser.

GadgetOS screenshot

Documentation

<div align="center"> <img src="./public/gadgetOS.svg" alt="GadgetOS Logo" width="64" />

GadgetOS

An AI-powered web operating system — manage files by meaning, execute in natural language, and build in the browser.

Next.js Convex Tailwind CSS OpenAI Vercel

<br />

GadgetOS Desktop

</div>

What is GadgetOS?

GadgetOS is a fully in-browser operating system experience built with Next.js. It features a macOS-inspired frosted glass desktop shell with real apps — a file explorer backed by Convex and S3, an AI terminal powered by GPT-4.1, a multi-tab text editor, an iframe browser with history and bookmarks, a clock, settings, and more.


Features

AppHighlights
File ExplorerFolder tree, file list, image preview, text & semantic (vector) search via Convex
Terminalls, cd, mkdir, touch, cat wired to Convex filesystem — unknown commands answered by GPT-4.1
Text EditorMulti-tab editor that saves files directly to Convex
Browseriframe browser with back/forward/reload stack, Convex-backed bookmarks bar and history, server-side proxy to bypass X-Frame-Options
ClockLive analog + digital clock
SettingsSidebar shell with appearance, profile, and shortcut stubs
AboutSystem info panel
Trash BinSoft-delete destination for future file ops
Desktop ShellFrosted glass navbar, animated floating dock, draggable/resizable windows with dnd-kit

Tech Stack


Getting Started

Prerequisites

  • Node.js 20+
  • A Convex account
  • An OpenAI API key
  • An AWS S3 bucket

1. Clone & install

git clone https://github.com/Hitesh-s0lanki/gadgetOS.git
cd gadgetOS
npm install

2. Configure environment variables

cp .env.example .env.local

Fill in .env.local:

# OpenAI
OPENAI_API_KEY=sk-proj-...

# AWS S3
GADGETOS_ACCESS_KEY_ID=AKIA...
GADGETOS_SECRET_ACCESS_KEY=your-secret-access-key
GADGETOS_REGION=ap-south-1
GADGETOS_S3_BUCKET=your-s3-bucket-name

# Convex
CONVEX_DEPLOYMENT=dev:your-deployment-name
NEXT_PUBLIC_CONVEX_URL=https://your-deployment-name.convex.cloud

3. Start Convex

npx convex dev

4. Run the dev server

npm run dev

Open http://localhost:3001 in your browser.


Project Structure

gadgetos/
├── convex/              # Convex schema, queries & mutations
│   ├── schema.ts
│   ├── files.ts
│   ├── folders.ts
│   ├── browser.ts
│   └── ...
├── src/
│   ├── app/
│   │   ├── (public)/    # Landing page
│   │   ├── webos/       # Desktop shell & lock screen
│   │   └── api/         # Route handlers (proxy, upload, presign, AI terminal)
│   ├── components/
│   │   └── webos/
│   │       ├── apps/    # All OS apps (terminal, browser, file-explorer, …)
│   │       ├── desktop/ # Navbar, taskbar, desktop screen
│   │       ├── window/  # Draggable window base
│   │       └── ...
│   ├── hooks/webos/     # Per-app Zustand window stores
│   └── lib/             # OpenAI helpers
└── public/              # Static assets & icons

API Routes

RouteMethodPurpose
/api/proxyGETServer-side web proxy — strips X-Frame-Options so sites render in the browser iframe
/api/uploadPOSTUploads a file to S3, writes a Convex record
/api/presignGETGenerates a presigned S3 URL for image preview
/api/openai-terminalPOSTGPT-4.1 fallback for unknown terminal commands

Deployment

The project is deployed on Vercel. Vercel Analytics is enabled automatically via the VERCEL_ENV environment variable — no additional configuration needed.

Make sure to add all environment variables from .env.example to your Vercel project settings, then deploy:

vercel --prod

Contributing

  1. Fork the repo
  2. Create a feature branch (git checkout -b features/your-feature)
  3. Commit your changes
  4. Open a pull request against the dev branch

<div align="center">

Built with ❤️ using Next.js, Convex & OpenAI

</div>