Live at: https://hadoku.me/task/
Fast, focused task management with tags, filtering, and multi-user support. Built as a reusable micro-frontend with framework-agnostic API handlers. Perfect for embedding in larger applications or using standalone.
Native Android app available! Built with Capacitor WebView wrapper.
Quick Download:
- ๐ฅ Latest APK
- ๐ Obtainium: Install Obtainium, then add URL:
https://github.com/WolffM/hadoku-task-mobile
Repository: hadoku-task-mobile
- โก Quick Task Entry - Type and press Enter
- ๐ท๏ธ Tag Support - Organize with
#tags - ๐ Smart Filtering - Filter by tag or view all
- ๐ฏ Drag & Drop - Reorder tasks and move between boards
- ๐จ 9 Theme Families - Light, Dark, Strawberry, Ocean, Cyberpunk, Coffee, Lavender, Nature, Pink, Izakaya
- ๐ Multi-Board - Organize tasks across multiple boards
- โก Optimistic Updates - Instant UI response with background sync
- ๐ฅ Multi-User - Public (localStorage), Friend/Admin (server sync)
- ๐ Framework Agnostic - Pure handlers work with any backend
npm install
npm run dev
# Open http://localhost:5173?userType=publicnpm run build:allOutput:
- Client:
dist/index.js(~22KB gzipped),dist/style.css(~7KB gzipped) - Handlers:
dist/server/(TypeScript compiled to JavaScript)
npm install @wolffm/taskClient-side:
import { mount } from '@wolffm/task/frontend'
import '@wolffm/task/style.css'
mount(document.getElementById('app'), {
userType: 'public',
sessionId: 'session-123'
})Server-side (framework-agnostic):
import { TaskHandlers, TaskStorage } from '@wolffm/task/api'
// Implement storage for your environment (KV, filesystem, database, etc.)
const storage: TaskStorage = {
getTasks: async userType => {
/* your implementation */
},
saveTasks: async (userType, tasks) => {
/* your implementation */
},
getStats: async userType => {
/* your implementation */
},
saveStats: async (userType, stats) => {
/* your implementation */
}
}
// Use handlers with any framework (Express, Hono, Cloudflare Workers, etc.)
const tasks = await TaskHandlers.getTasks(storage, auth)
const newTask = await TaskHandlers.createTask(storage, auth, { title: 'Task' })Buy groceries [Enter] # Plain task
Buy groceries #home [Enter] # With tag
Fix bug #high-priority [Enter] # Tagged task
- โ Mark complete
- ร Delete task
- โ Edit title
- + Add tag
- Drag Reorder or move between boards
Choose from 9 theme families via the theme picker (top-right), each with light and dark variants:
- โผ Light / โฝ Dark - Clean and sophisticated defaults
- โ Strawberry - Sweet pink tones
- โ Ocean - Deep sea blues
- โ Cyberpunk - Neon dystopia
- โ Coffee - Rich espresso
- โฟ Lavender - Soft purple
- ๐ฟ Nature - Lush forest greens
- ๐ Pink - Bubblegum vibes
- ๐ฎ Izakaya - Cozy Japanese bar aesthetic
| Document | Purpose | Audience |
|---|---|---|
| ARCHITECTURE.md | System design, patterns, technical decisions | Developers integrating or extending |
| API.md | Complete endpoint reference | Backend implementers |
| CHANGELOG.md | Version history and changes | All users |
| CONTRIBUTING.md | Contribution guidelines | Contributors |
- Getting Started: You're reading it! (README.md)
- How it works: Architecture Overview
- Security model: Authentication & Security
- API endpoints: Complete API Reference
- Add features: Contributing Guide
This package separates pure business logic from framework-specific code:
// Handlers are pure functions - work with ANY framework
await TaskHandlers.getTasks(storage, auth)
await TaskHandlers.createTask(storage, auth, input)Deployment flexibility:
- โ Cloudflare Workers (KV storage)
- โ Node.js + Express (filesystem storage)
- โ Any framework that can call JavaScript functions
- React-based UI with optimistic updates
- All user types use localStorage for instant feedback
- Non-public users sync to server in background
- 9 theme families (18 themes) with CSS custom properties
See ARCHITECTURE.md for detailed design documentation.
This micro-frontend delegates authentication to the parent application.
The task app:
- โ Does NOT handle credentials or passwords
- โ
Receives
userTypeandsessionIdfrom parent - โ Uses these for storage namespacing only
Your parent app must:
- โ Handle user login/logout
- โ Validate authentication keys
- โ
Provide correct
userTypeandsessionId - โ Secure API endpoints
See ARCHITECTURE.md - Security for complete security model.
Contributions are welcome! Please see CONTRIBUTING.md for:
- Development workflow
- Code style guidelines
- How to add features
- Pull request process
MIT License - see LICENSE for details.
- Web Repository: https://github.com/WolffM/hadoku-task
- Mobile Repository: https://github.com/WolffM/hadoku-task-mobile
- Example Deployment: hadoku.me/task
- NPM Package:
@wolffm/task - Android APK: Latest Release
Author: WolffM