WfcOS
No description available
Install / Use
/learn @ekmigasari/WfcOSREADME
📋 Overview
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.
✨ Features
Version 2.3.1 - Latest Release
💼 Blog
- Added blogs section and blog pages
⏱️ Timer
- Track work sessions and productivity
- Link tasks to work sessions
📊 Session Log
- View sessions as charts and tables
- Charts show weekly, monthly, yearly data
- Tables display all session data
✅ To-do List
- Session count in task items
🛠️ Tech Stack
-
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
🚀 Getting Started
Prerequisites
Installation
-
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
Development Commands
# Start development server
bun dev
# Build for production
bun build
# Start production server
bun start
# Lint code
bun lint
Docker Deployment
# Build and run with Docker
docker build -t wfcos .
docker run -p 3000:3000 wfcos
# Or use docker-compose
docker-compose up -d
📁 Project Structure
<details> <summary>Click to expand folder structure</summary>.
├── 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
</details>
🧩 Architecture
The project follows a clean architecture approach with three main layers:
<table> <tr> <td valign="top" width="33%"> <h3 align="center">Presentation Layer</h3> <p align="center">Components, UI elements, and styles</p> <p align="center"><code>/src/presentation/</code></p> </td> <td valign="top" width="33%"> <h3 align="center">Application Layer</h3> <p align="center">Business logic, state management</p> <p align="center"><code>/src/application/</code></p> </td> <td valign="top" width="33%"> <h3 align="center">Infrastructure Layer</h3> <p align="center">Configuration, utilities, external services</p> <p align="center"><code>/src/infrastructure/</code></p> </td> </tr> </table>Key Components
- 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
📝 Development Guidelines
<details> <summary>Naming Conventions</summary>Files & Directories
- Directories: Kebab-case (
user-profile/) - React components: PascalCase (
UserProfile.tsx) - Utility files: camelCase (
formatDate.ts) - Page files:
page.tsx - Layout files:
layout.tsx
Code Style
- Components: PascalCase (
UserProfile,UserProfileProps) - Variables/Functions: camelCase (
getUserData()) - Constants: UPPER_SNAKE_CASE (
MAX_RETRY_COUNT) - Booleans: Use prefixes like
is,has,should(isLoading,hasAccess)
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
🤝 Contributing
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
📜 License
This project is licensed under the MIT License - see the LICENSE file for details.
🙏 Acknowledgements
Related Skills
node-connect
338.7kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.6kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
338.7kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.6kCommit, push, and open a PR
