Roboticela ToDo β your tasks, organized.
Features β’ Installation β’ Usage β’ Server β’ Contributing β’ Support
- About
- Features
- Technology Stack
- Prerequisites
- Installation
- Running the Application
- Server
- Building for Production
- Usage Guide
- Project Structure
- Configuration
- Contributing
- Code of Conduct
- Support
- Roadmap
- License
- Acknowledgments
- About Roboticela
Roboticela ToDo is a modern, cross-platform task manager. Built with Tauri, React, and TypeScript, with an optional Node.js backend for sync, auth, and subscriptions.
- β Free and Open Source - Licensed under AGPL-3.0
- β Cross-Platform - Works on Linux, Windows, macOS, and runs in the browser
- β Fast & Lightweight - Built with Tauri and Rust for desktop; Vite for web
- β Tasks & Calendar - Time-based, daily, and duration tasks with calendar and analytics
- β Sync & Auth - Optional backend for sign-up, Google OAuth, and cloud sync
- β Subscriptions - Optional Paddle billing (Basic, Pro, Lifetime)
- β Theme Support - Multiple themes including light, dark, navy, ocean, and more
- β Actively Maintained - Regular updates and community support
- Task Types - Time-based, daily, and duration tasks with priorities (low, medium, high)
- Categories - Organize as βdoβ or βdonβtβ with repeat options and end dates
- Today & Calendar - Today view and calendar for planning
- Analytics - Insights and completion stats
- Sync - Optional cloud sync when using the backend (desktop and web)
- Email/Password - Register, login, email verification, password reset
- Google OAuth - Sign in with Google (web and desktop with deep link callback)
- Profile - Avatar (optional R2 storage), email preferences, subscription reminders
- Plans - Free, Basic, Pro, and Lifetime via Paddle
- Webhooks - Paddle webhook handling for subscription lifecycle
- Reminder emails - Optional subscription reminder emails (configurable interval)
- Responsive Design - Works on different screen sizes
- Smooth Animations - Powered by Framer Motion
- Desktop or Web - Run as Tauri desktop app or in the browser
- Offline-capable - Local storage / IndexedDB when not using the server
- React 19 - UI library
- TypeScript 5.9 - Type-safe JavaScript
- TailwindCSS 4 - Utility-first CSS
- Framer Motion 12 - Animations
- React Router 7 - Client-side routing
- Lucide React - Icons
- Vite 7 - Build tool
- IndexedDB (idb) - Local task storage when offline or without server
- Node.js - Runtime
- Express 5 - API server
- Prisma - ORM with PostgreSQL
- JWT - Access & refresh tokens; cookie-based refresh
- Google OAuth - Sign-in with Google
- Nodemailer - Email (verification, password reset, subscription reminders)
- Paddle - Subscriptions (Basic, Pro, Lifetime)
- AWS SDK (S3-compatible) - Cloudflare R2 for avatar storage
- npm - Package manager
- ESLint - Linting
- TypeScript ESLint - TypeScript linting
Before installing, ensure you have the following:
π‘ For detailed installation instructions and complete dependency lists, see INSTALL_DEPENDENCIES.md
sudo apt update
sudo apt install libwebkit2gtk-4.1-dev \
build-essential \
curl \
wget \
file \
libxdo-dev \
libssl-dev \
libayatana-appindicator3-dev \
librsvg2-devsudo dnf check-update
sudo dnf install webkit2gtk4.1-devel \
openssl-devel \
curl \
wget \
file \
libappindicator-gtk3-devel \
librsvg2-develsudo pacman -Syu
sudo pacman -S webkit2gtk \
base-devel \
curl \
wget \
file \
openssl \
appmenu-gtk-module \
gtk3 \
libappindicator-gtk3 \
librsvgxcode-select --install- Install Microsoft Visual Studio C++ Build Tools
- Install WebView2 (usually pre-installed on Windows 10/11)
git clone https://github.com/Roboticela/ToDo.git
cd ToDoUsing npm:
npm installcd src-tauri
cargo build
cd ..Run the Tauri app with hot-reload:
npm run tauri devThis will start the Vite dev server and run the desktop application.
To run the frontend in the browser without Tauri:
npm run devThen open http://localhost:5173 in your browser.
The app can run without the server (local/offline mode). For sign-up, sync, Google OAuth, and subscriptions, run the optional Node.js backend.
- Node.js (v20 or higher)
- PostgreSQL - Database for users, tasks, and subscriptions
- npm - Package manager
cd server
npm install
cp .env.example .env
# Edit .env with your database URL, JWT secrets, and optional servicescd server
npm run db:generate # Generate Prisma client
npm run db:push # Push schema to database (dev)
# or
npm run db:migrate # Run migrations (dev)Copy server/.env.example to server/.env and configure:
| Variable | Required | Description |
|---|---|---|
DATABASE_URL |
Yes | PostgreSQL connection string |
JWT_ACCESS_SECRET |
Yes | Min 32 characters |
JWT_REFRESH_SECRET |
Yes | Min 32 characters |
FRONTEND_URL |
No | Frontend origin (e.g. http://localhost:5173) |
BACKEND_URL |
No | Backend origin (e.g. http://localhost:3000) |
APP_DEEP_LINK_SCHEME |
No | Desktop OAuth callback scheme (e.g. roboticela-todo) |
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET |
No | Google OAuth (for Sign in with Google) |
SMTP_* |
No | Nodemailer SMTP (verification, password reset, reminders) |
PADDLE_* |
No | Paddle API key, webhook secret, price IDs |
R2_* |
No | Cloudflare R2 for avatar storage |
PORT |
No | Server port (default 3000) |
See server/.env.example for the full list and comments.
Development (with watch):
cd server
npm run devProduction:
cd server
npm run startThe API runs at http://localhost:3000 by default. Set the frontendβs API base URL to this (e.g. via env or config) when using the backend.
| Prefix | Purpose |
|---|---|
/api/auth |
Login, register, refresh, Google OAuth, logout |
/api/users |
Profile, avatar, email preferences |
/api/tasks |
CRUD and sync for tasks and completions |
/api/paddle |
Checkout, portal, webhook |
/api/email |
Verification, password reset, unsubscribe |
/health |
Health check (no auth) |
server/
βββ prisma/
β βββ schema.prisma # User, Task, Session, Subscription, etc.
β βββ migrations/
βββ routes/
β βββ auth.js # Auth and Google OAuth
β βββ users.js # User profile and avatar
β βββ tasks.js # Tasks and completions
β βββ paddle.js # Paddle checkout and webhooks
β βββ email.js # Email verification, reset, unsubscribe
βββ services/
β βββ jwtService.js
β βββ emailService.js
β βββ r2Service.js # Avatar uploads (R2)
β βββ unsubscribeToken.js
βββ middleware/
β βββ auth.js # JWT auth middleware
βββ jobs/
β βββ subscriptionReminderJob.js
βββ EmailStructures/ # Email templates
βββ config.js # Config from env
βββ server.js # Express app entry
βββ .env.example
βββ package.json
Before building for production, ensure you have:
- All dependencies installed - See INSTALL_DEPENDENCIES.md for detailed platform-specific setup
- Node.js 20+ and npm installed
- Rust and Cargo installed
- Platform-specific build tools (WebKit2GTK for Linux, MSVC for Windows, Xcode for macOS)
To verify your setup:
node --version
npm --version
rustc --version
cargo --versionBuild for your current platform:
npm run build
npm run tauri buildOr use the combined script:
npm run build:desktopThis will build the frontend, compile the Rust backend, bundle with Tauri, and generate platform-specific installers.
Desktop builds:
src-tauri/target/release/ # Executables
src-tauri/target/release/bundle/ # Installers
npm run tauri build -- --debugnpm run tauri buildBuilds can generate SHA256 checksums for integrity verification:
npm run build:desktop # Build and generate checksums
npm run checksums # Generate checksums only
npm run verify # Verify checksumsFor detailed code signing and notarization, see SIGNING.md.
Frontend build fails:
rm -rf node_modules dist
npm install
npm run buildRust compilation errors:
rustup update
cd src-tauri && cargo clean && cd ..Missing dependencies: See INSTALL_DEPENDENCIES.md.
Before releasing:
- Update version in
package.jsonandsrc-tauri/tauri.conf.json - Test in development mode
- Run
npm run tauri buildfor target platforms - Verify checksums if applicable
- Test installers on target platforms
- Run
npm auditandcargo audit
- Launch the App - Run
npm run tauri devornpm run devand open the app. - Sign in (optional) - Use the server for account and sync: register or sign in with Google.
- Today - View and complete todayβs tasks; add time-based, daily, or duration tasks.
- Calendar - Plan tasks by date and see repeats.
- Analytics - View completion stats and insights.
- Settings - Theme, profile, email preferences, subscription (if using backend).
- Task types - Time-based (specific time), daily (repeat days), or duration (startβend).
- Categories - Mark as βdoβ or βdonβtβ; set priority (low, medium, high).
- Repeating - Choose repeat days and optional end date.
- Status - Pending, completed, missed, or skipped.
- / - Today (default)
- /calendar - Calendar view
- /analytics - Analytics
- /settings - Settings, profile, subscription
- /auth/login, /auth/register - Login and register
- /auth/forgot-password, /auth/reset-password - Password reset
- /auth/callback - OAuth callback (web)
- /auth/desktop-success - Desktop OAuth success
ToDo/
β
βββ src/ # React frontend source
β βββ components/ # React components
β β βββ todo/ # ToDo UI
β β β βββ AppLayout.tsx # Main layout (nav + content)
β β β βββ TodoHeader.tsx
β β β βββ TaskForm.tsx
β β β βββ TaskCard.tsx
β β β βββ SideNav.tsx, BottomNav.tsx
β β β βββ SyncIndicator.tsx
β β β βββ ...
β β βββ ui/ # UI primitives (button, dropdown)
β β βββ ThemeScript.tsx
β β βββ AboutModal.tsx, LicenseModal.tsx, StoryModal.tsx
β β βββ DeepLinkAuthSetup.tsx
β β βββ VerificationBanner.tsx
β β
β βββ contexts/
β β βββ AuthContext.tsx
β β βββ ThemeContext.tsx
β β βββ TaskContext.tsx
β β βββ SyncContext.tsx
β β βββ HeaderVisibilityContext.tsx
β β
β βββ pages/
β β βββ auth/ # Login, register, reset password, callback, etc.
β β βββ todo/ # TodayPage, CalendarPage, AnalyticsPage, SettingsPage, SubscriptionPage
β β
β βββ lib/ # Utilities and services
β β βββ authService.ts # Auth API and tokens
β β βββ tauri.ts # Tauri helpers
β β βββ utils.ts
β β
β βββ App.css
β βββ main.tsx # Entry point + router
β
βββ server/ # Optional Node.js backend (see Server section)
β βββ prisma/
β βββ routes/, services/, middleware/, jobs/
β βββ config.js, server.js
β βββ .env.example
β
βββ src-tauri/ # Tauri desktop
β βββ src/
β βββ icons/, capabilities/
β βββ Cargo.toml
β βββ tauri.conf.json
β
βββ public/
βββ index.html
βββ package.json
βββ tsconfig.json
βββ vite.config.ts
βββ LICENSE
βββ INSTALL_DEPENDENCIES.md
βββ SIGNING.md
βββ README.md
The src-tauri/tauri.conf.json file contains Tauri settings: app identifier, version, window size and title, capabilities, and bundle options. Modify it to change desktop app behavior.
The frontend may use an environment variable (e.g. VITE_API_URL or similar) to point to the backend URL when using the server. Check the projectβs env handling for the exact name.
Server configuration is via environment variables. Copy server/.env.example to server/.env and set values as described in the Server section.
We welcome contributions! Whether it's bug fixes, features, docs, or feedback, every bit helps.
- Report Bugs - Open an issue with steps to reproduce and environment details.
- Suggest Features - Share ideas for new features or improvements.
- Write Code - Submit pull requests for bugs or features.
- Improve Documentation - Help keep the README and docs clear and up to date.
- Share the Project - Star the repo and tell others.
-
Fork the Repository
git clone https://github.com/Roboticela/ToDo.git cd ToDo -
Create a Branch
git checkout -b feature/your-feature # or git checkout -b fix/bug-description -
Make Changes - Follow existing style, add tests where relevant, and test locally.
-
Commit
git add . git commit -m "Add: brief description"
Prefixes:
Add:Fix:Update:Docs:Style:Refactor:Test:Chore: -
Push and Open a PR
git push origin feature/your-feature
Then open a Pull Request on GitHub with a clear description and any related issues.
- Frontend - Functional components, TypeScript, TailwindCSS, React best practices.
- Rust -
cargo fmt,cargo clippy, clear error handling, doc comments for public APIs.
We are committed to providing a welcoming and inclusive environment for all contributors, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
Positive behavior: Respectful and inclusive communication, patience with newcomers, accepting constructive criticism, focusing on the communityβs best interest, empathy.
Unacceptable behavior: Harassment, trolling, derogatory comments, personal or political attacks, publishing othersβ private information, or any conduct inappropriate in a professional setting.
Reports of unacceptable behavior will be reviewed and addressed by the maintainers. Maintainers may remove, edit, or reject comments, commits, code, and other contributions that violate this Code of Conduct.
For bugs, feature requests, or technical questions:
π Open an Issue
When reporting a bug, please include:
- OS and version
- App version (or commit)
- Steps to reproduce
- Expected vs actual behavior
- Screenshots or error messages if helpful
- π GitHub: Roboticela/ToDo
- β Star the repo to show your support.
Q: Is this free to use?
A: Yes. Itβs open-source under the AGPL-3.0 license.
Q: Can I use it commercially?
A: Yes, subject to AGPL-3.0. If you distribute or run a modified version over a network, you must make the source available under AGPL-3.0.
Q: Web only or desktop too?
A: Both. Use npm run dev for web or npm run tauri dev / built installer for desktop.
Q: Do I need the server to use the app?
A: No. You can use the app locally (desktop or web) without the server. The server is for accounts, sync, Google sign-in, and subscriptions.
Q: How do I report a security issue?
A: Open a GitHub issue or contact the maintainers directly.
- Export / Backup - Export tasks or backup/restore
- Reminders - Notifications for upcoming tasks
- i18n - Multiple languages for the UI
- Accessibility - Enhanced keyboard and screen reader support
- Mobile - Tauri mobile or PWA improvements
v0.1.0 (Current)
- Tasks: time-based, daily, duration; today, calendar, analytics
- Auth: email/password, Google OAuth, verification, password reset
- Optional server: Prisma/PostgreSQL, JWT, Paddle, R2 avatars, subscription reminders
- Multiple themes, Tauri desktop, React Router
See Releases for the full changelog.
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0).
β You CAN:
- Use the software for any purpose
- Study, modify, and distribute it
- Use it commercially (under the license terms)
- Disclose source when distributing
- Include the license and copyright notice
- State changes made
- License modifications under AGPL-3.0
- If you run a modified version over a network, provide source access to users
β You CANNOT:
- Hold the authors liable for damages
- Use the authorsβ names for endorsement without permission
Full License Text: See the LICENSE file.
Thanks to the open-source projects and communities that make this possible:
- TailwindCSS - Styling
- Framer Motion - Animations
- React Router - Routing
- Lucide React - Icons
- TypeScript - Type safety
Roboticela builds high-quality, open-source software for developers and learners.
To create accessible, privacy-conscious software that supports learning and open collaboration.
Roboticela ToDo is developed and maintained by Roboticela. We focus on:
- π Open Source - Transparent, community-friendly development
- π Privacy - No tracking of users beyond optional analytics you can control
- π Modern Stack - Tauri, React, TypeScript, optional Node/Prisma backend
- π Tasks - Simple, powerful task management with optional cloud sync and subscriptions
- π GitHub: github.com/Roboticela
- π§ Email: contact@roboticela.com
- π Repository: github.com/Roboticela/ToDo
- β Star our repositories
- π Report bugs and suggest features
- π€ Contribute code or documentation
- π£ Share the project with others
Thanks for using Roboticela ToDo.
Built with β€οΈ by Roboticela
Β© 2025 Roboticela. Licensed under AGPL-3.0.
β If you find this project useful, please consider giving it a star on GitHub! β