A Web OS-style application built with Next.js and Node.js for group collaboration. Features a desktop-like interface with draggable windows, a taskbar, and multiple applications.
We've built a powerful theme and wallpaper system to make it easy to change how OrbitOS looks.
All colors, fonts, and styles are controlled by theme files. This is the best way to change the look of the entire OS.
- Where to find them:
src/themes/
- Files to edit:
lightTheme.js
anddarkTheme.js
Example: Editing the Taskbar Transparency
Open src/themes/darkTheme.js
and find the taskbar
property:
// src/themes/darkTheme.js
export const darkTheme = {
// ...
taskbar: 'bg-black/30 backdrop-blur-lg border-t border-white/20',
// ...
};
bg-black/30
: This is the color and transparency (black with 30% opacity). Change tobg-black/50
to make it less transparent.backdrop-blur-lg
: This is the "frosted glass" effect. Change tobackdrop-blur-xl
for more blur, or delete it for no blur.
You can change any color for any component (windows, buttons, text) in these files!
There are two simple steps to add a new wallpaper:
- Add the Image: Drop your new wallpaper image file into the
public/backgrounds/
folder. - Register the Image: Open
src/context/SettingsContext.js
and add the path to your new image to thedefaultWallpapers
array.
// src/context/SettingsContext.js
const defaultWallpapers = [
'/backgrounds/orbitos-default.jpg',
'/backgrounds/nebula.png',
'/backgrounds/my-new-cool-wallpaper.jpg', // <-- Add your new wallpaper here
];
The new wallpaper will now appear in the Settings app automatically.
- 🖥️ Desktop-like UI with wallpaper background
- 📱 Draggable, minimizable, and closable windows
- 📋 Modern, full-width taskbar with "glass" style icons, a Start Menu, and a live clock
- 📝 Built-in applications (Notes, Browser, Settings)
- 🔗 RESTful API for user and file management
- ⚡ Real-time state management with React Context
- 🎨 Powerful Theme Engine: Easily change all colors and styles from central theme files.
- 🖼️ Customizable Wallpapers: Change the desktop background from the Settings app.
- Frontend: Next.js 13+, React 18, Tailwind CSS, Framer Motion
- Backend: Node.js, Express
- Language: JavaScript
- State Management: React Context API
web-os-project/
├── package.json
├── next.config.js
├── jsconfig.json
├── public/ # For all static assets
│ ├── backgrounds/ # Desktop wallpapers live here
│ └── icon/
│ └── notes.png # App icons live here
├── src/
│ ├── app-components/ # Home for app UI components
│ │ ├── browser.js
│ │ ├── notes.js
│ │ └── settings.js
│ ├── components/ # Core UI Components (Desktop, Taskbar, etc.)
│ │ ├── Desktop.js
│ │ ├── Taskbar.js
│ │ ├── Window.js
│ │ └── AppIcon.js
│ ├── context/ # React Context (Global State)
│ │ ├── AppContext.js
│ │ ├── SettingsContext.js
│ │ └── ThemeContext.js
│ ├── pages/ # Next.js routes (ONLY pages with URLs)
│ │ ├── _app.js
│ │ └── index.js # The main desktop page
│ ├── styles/ # CSS files
│ │ └── globals.css
│ ├── system/ # For core OS logic and definitions
│ │ ├── apps/ # App definitions/handlers
│ │ │ ├── App.js
│ │ │ ├── BrowserApp.js
│ │ │ ├── NotesApp.js
│ │ │ └── SettingsApp.js
│ │ └── services/ # System-wide services
│ │ └── AppRegistry.js
│ ├── themes/ # THEME FILES (Edit all colors here)
│ │ ├── lightTheme.js
│ │ └── darkTheme.js
│ └── server/ # Express backend (unchanged)
│ ├── index.js
│ ├── routes/
│ └── db/
└── README.md
- Node.js 16+ installed
- npm or yarn package manager
-
Clone the repository
git clone https://github.com/codehubbers/OrbitOS cd OrbitOS
-
Install dependencies
npm install
-
Start the development servers
Option 1: Run both servers simultaneously
npm run dev:all
Option 2: Run servers separately
Terminal 1 (Frontend):
npm run dev
Terminal 2 (Backend):
npm run server
-
Access the application
- Frontend: http://localhost:3000
- Backend API: http://localhost:3001
npm run dev
- Start Next.js development servernpm run build
- Build the Next.js applicationnpm run start
- Start Next.js production servernpm run server
- Start Express API servernpm run dev:all
- Start both frontend and backend concurrently
GET /api/users
- Get all usersPOST /api/users/register
- Register new userPOST /api/users/login
- User login
GET /api/files
- List all filesPOST /api/files/upload
- Upload fileDELETE /api/files/:id
- Delete file
GET /api/health
- Server health status
- A feature-rich rich text editor with a professional, self-contained UI.
- Developer: @Gordon.H
- Rich Text Formatting: Includes support for headers, bold, italics, lists, and links.
- File System Integration: Standalone file save (to
.html
) and load functionality using browser APIs. - Advanced Editing Tools: Features a toggleable find-and-replace panel.
- Dynamic UI: A floating element displays a real-time word count, ensuring visibility regardless of window size.
- About Panel: Includes an "About" modal with version and developer information.
- Basic web browser with URL input
- Uses iframe for web content display
- System configuration interface
- Theme, notifications, and auto-save settings
-
Fork the repository and create your feature branch
git checkout -b feature/your-feature-name
-
Follow the coding standards
- Use JavaScript (not TypeScript)
- Follow existing component structure
- Use Tailwind CSS for styling
- Keep components small and focused
-
Adding New Applications
This project uses a dynamic App Registry system. To add a new app, follow these three steps:
Step 1: Create the App's UI Component
- Create your new app's React component inside the
src/app-components/
directory (e.g.,src/app-components/my-new-app.js
).
Step 2: Create the App Definition
- In the
src/system/apps/
directory, create a new definition file (e.g.,MyNewApp.js
). - Import the base
App
class and export a new instance with your app's metadata. Thecomponent
key must be a unique string.
// src/system/apps/MyNewApp.js import App from './App'; export default new App({ id: 'mynewapp', name: 'My New App', icon: '🚀', // or '/icon/mynewapp.png' component: 'MyNewApp', // This is the unique key });
Step 3: Register the App
- Open
src/system/services/AppRegistry.js
. - Import your new app definition from Step 2.
- Add the imported app to the
this.apps
array.
// src/system/services/AppRegistry.js import MyNewApp from '../apps/MyNewApp'; // <-- Import it // ... other imports class AppRegistry { constructor() { this.apps = [ // ... other apps MyNewApp, // <-- Add it to the list ]; } // ... }
- Finally, open
src/components/Desktop.js
. - Import your UI component from Step 1.
- Add it to the
appComponents
map, using the unique key from Step 2.
// src/components/Desktop.js import MyNewApp from '@/app-components/my-new-app'; // <-- Import it // ... other imports const appComponents = { // ... other components MyNewApp: MyNewApp, // <-- Map the key to the component };
- Create your new app's React component inside the
-
API Development
- Add new routes in
src/server/routes/
- Follow RESTful conventions
- Include proper error handling
- Return consistent JSON responses
- Add new routes in
-
Testing Your Changes
npm run dev:all
-
Submit Pull Request
- Ensure code works locally
- Write clear commit messages
- Include description of changes
- Use functional components with hooks
- Implement proper error boundaries
- Follow React best practices
- Use semantic HTML elements
- Ensure responsive design
- Add proper accessibility attributes
npm run build
cd src/server
node index.js
- User authentication with JWT
- Real database integration (MongoDB/PostgreSQL)
- File system with actual file storage
- Real-time collaboration features
- Plugin system for custom apps
- Mobile responsive design
- Dark/light theme switching
- Notification system
- More theme options (e.g., Solarized, Dracula)
MIT License - feel free to use this project for learning and development.
For questions or issues, please create an issue in the repository or contact the development team.