A web-based desktop environment to centralize your digital workflow and enhance productivity.
Overview β’ Features β’ Tech Stack β’ Getting Started β’ Development β’ Contributing β’ Documentation β’ License
WFCOS (Work From Cafe OS) provides a single, organized interface that helps users reduce clutter, streamline tasks, and access essential tools and applications efficiently from any browser.
Built with a cutting-edge stack including Next.js 15, React 19, and Tailwind CSS v4, WFCOS offers a customizable and performant workspace. Leveraging Radix UI and shadcn/ui, it provides a familiar, desktop-like environment tailored to your needs.
Ideal for remote workers, developers, and anyone seeking a consistent and personalized command center for their online activities.
π Documentation: For detailed information on how this app works, visit our DeepWiki documentation.
- Added blogs section and blog pages
- Track work sessions and productivity
- Link tasks to work sessions
- View sessions as charts and tables
- Charts show weekly, monthly, yearly data
- Tables display all session data
- Session count in task items
-
Framework: Next.js v15.3.1 with App Router
-
UI Library: React v19.1.0
-
Styling: Tailwind CSS v4.1.4
-
State Management: Jotai v2.12.3
-
Icons: Lucide React v0.507.0
-
Drag and Drop: dnd-kit v6.3.1
-
Charts: Recharts v2.15.3
-
Linting: ESLint v9.25.1
-
Git Hooks: Husky v9.1.7
-
Language: TypeScript v5.8.3
-
Package Manager: Bun
-
Clone the repository:
git clone <your-repository-url> cd wfcOS
-
Set up environment variables:
cp env.template .env.local
-
Install dependencies with Bun:
bun install
# Start development server
bun dev
# Build for production
bun build
# Start production server
bun start
# Lint code
bun lint
# Build and run with Docker
docker build -t wfcos .
docker run -p 3000:3000 wfcos
# Or use docker-compose
docker-compose up -d
Click to expand folder structure
.
βββ src/ # Source code
β βββ app/ # Next.js App Router
β β βββ [page]/ # Route-specific directories
β β β βββ page.tsx # Page component
β β β βββ layout.tsx # Page-specific layout
β β β βββ components/ # Page-specific components
β β
β βββ presentation/ # UI Layer
β β βββ components/ # React components
β β β βββ ui/ # Shadcn components
β β β βββ layout/ # Layout components
β β β βββ apps/ # Application feature components
β β βββ styles/ # Global styles
β β
β βββ application/ # Application Layer
β β βββ atoms/ # Jotai atoms for state management
β β βββ hooks/ # Custom React hooks
β β βββ types/ # TypeScript type definitions
β β
β βββ infrastructure/ # Infrastructure Layer
β βββ config/ # Configuration files
β βββ utils/ # Utilities
β βββ lib/ # Shared libraries
β
βββ public/ # Static assets
The project follows a clean architecture approach with three main layers:
Components, UI elements, and styles
|
Business logic, state management
|
Configuration, utilities, external services
|
- Component Structure:
- Server Components (default) vs Client Components (with "use client" directive)
- Component organization follows high cohesion, low coupling principles
- State Management:
- Uses Jotai for global state with atom-based architecture
- Local state when appropriate
- Window System:
- All applications use the reusable window component at
/src/presentation/components/layout/window.tsx
- All applications use the reusable window component at
- App Registry:
- Applications are registered in
/src/infrastructure/config/appRegistry.ts
- Applications are registered in
Naming Conventions
- Directories: Kebab-case (
user-profile/
) - React components: PascalCase (
UserProfile.tsx
) - Utility files: camelCase (
formatDate.ts
) - Page files:
page.tsx
- Layout files:
layout.tsx
- Components: PascalCase (
UserProfile
,UserProfileProps
) - Variables/Functions: camelCase (
getUserData()
) - Constants: UPPER_SNAKE_CASE (
MAX_RETRY_COUNT
) - Booleans: Use prefixes like
is
,has
,should
(isLoading
,hasAccess
)
Commit Message Format
This project uses Conventional Commits for standardized commit messages:
<type>(<scope>): <description>
[optional body]
[optional footer(s)]
Common types:
feat
: A new featurefix
: A bug fixdocs
: Documentation changesstyle
: Code style changes (formatting, etc.)refactor
: Code changes that neither fix bugs nor add featurestest
: Adding or modifying testschore
: Changes to the build process or auxiliary tools
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Make your changes
- Commit your changes using the conventional commit format
- Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.