Personal task, goal, and idea manager. Built for GTD and Jedi Empty Inbox techniques. Client-first PWA that works offline — your data stays on your device, with optional sync via your own Supabase server.
- Task boxes — Inbox, Today, Week, Later (GTD-style organization)
- Goals — track objectives with statuses (planning, in progress, paused, completed, cancelled)
- Ideas — capture ideas before they become tasks or goals
- Contexts & Categories — organize tasks by context (@Home, @Office) and life area (Work, Family)
- Recurring tasks — flexible repeat rules with skip logic
- Checklists — subtasks within tasks
- Offline-first — all data stored locally in IndexedDB (Dexie), works without internet
- Sync — optional sync between devices via your own Supabase backend
- Bilingual — Russian and English interface
- PWA — installable on mobile and desktop
The app works fully offline without any server. If you want to sync data between devices, you can set up a free Supabase backend. Each user hosts their own server — your data stays under your control.
Supabase offers a generous free tier that is more than enough for personal use. You get a full PostgreSQL database, Edge Functions for server logic, file storage, and built-in authentication — all at no cost.
| Resource | Limit |
|---|---|
| Database | 500 MB |
| File storage | 1 GB |
| Monthly active users | 50,000 |
| Edge Function invocations | 500,000 / month |
| Projects | 2 free projects |
Note: Free projects are automatically paused after 1 week of inactivity. You can unpause them from the Dashboard at any time.
- Go to supabase.com/dashboard and sign up (GitHub account works)
- Create a new organization (any name)
- Create a new project — pick a name, set a database password, and choose a region close to you
- Wait for the project to finish provisioning (about 1 minute)
- Note your Project URL and Anon Key — you will find them in Settings → API
Clear Progress supports sign-in via OAuth (Google, GitHub, and other providers supported by Supabase).
We recommend using OAuth instead of email/password because the free tier limits the built-in email service to 2 emails per hour, which makes OTP codes unreliable.
To enable a provider:
- In the Supabase Dashboard, go to Authentication → Providers
- Choose a provider (e.g., Google or GitHub) and follow the setup instructions:
- Set the Site URL to
https://oinsio.github.io/clear-progress/(or your own domain if self-hosting the client) - Add the same URL to Redirect URLs
The backend consists of database tables, RLS policies, and Edge Functions. A deploy script automates everything.
Prerequisites:
- Node.js >= 20 and pnpm >= 9
- Supabase CLI — install with
npm install -g supabase
Deploy:
# Clone the repository
git clone https://github.com/oinsio/clear-progress.git
cd clear-progress
# Install dependencies
pnpm install
# Log in to Supabase CLI
supabase login
# Configure environment
cd packages/adapter-supabase
cp .env.prod .env.prod.local
# Edit .env.prod.local — fill in your SUPABASE_URL, SUPABASE_ANON_KEY,
# SUPABASE_PROJECT_REF, and SUPABASE_ACCESS_TOKEN
# (find these in Supabase Dashboard → Settings → API)
# Deploy (applies migrations, deploys Edge Functions, creates storage bucket)
bash scripts/deploy.sh prodFor more details, see packages/adapter-supabase/README.md.
- Open Clear Progress
- Go to Settings (gear icon) → Server section
- Click Supabase
- Enter your Project URL (e.g.,
https://yourproject.supabase.coor justyourproject) and Anon Key - Click Connect
- Sign in with your OAuth provider (e.g., Google or GitHub)
Your data will now sync automatically between devices.
| Layer | Technology |
|---|---|
| Frontend | React, TypeScript, Vite, Tailwind CSS |
| Local storage | Dexie (IndexedDB) |
| Backend | Supabase — Edge Functions (Deno), PostgreSQL, Row Level Security, Storage |
| Internationalization | i18next |
| Package manager | pnpm (monorepo) |
git clone https://github.com/oinsio/clear-progress.git
cd clear-progress
pnpm install
pnpm devpnpm buildpackages/
client/ — React PWA (Vite + Tailwind + Dexie)
contract/ — Shared interfaces (SyncAdapter port)
adapter-supabase/ — Supabase backend (Edge Functions + migrations)
adapter-inmemory/ — In-memory adapter (for testing)
integration/ — Integration tests
docs/
architecture/ — Data model, sync protocol, components
adr/ — Architecture Decision Records
guides/ — i18n guide, Temporal API guide
contributing/ — How to add a new adapter
| Type | Tool | Command |
|---|---|---|
| Unit tests | Vitest | pnpm test |
| BDD unit | vitest-cucumber | pnpm test (included) |
| BDD E2E | playwright-bdd | pnpm --filter client test:bdd |
| Mutation testing | Stryker | pnpm --filter client test:mutation |
| Integration | Playwright + Testcontainers | pnpm --filter integration test |
Integration tests spin up a full Supabase stack locally via Docker Compose (Testcontainers). They verify end-to-end sync flows — push/pull, multi-device conflicts, recurring tasks, attachments, and more. Docker must be running before you start them.
- Supabase adapter setup
- How to add a new backend adapter
- Data model and sync protocol
- Architecture Decision Records
- Product specs (OpenSpec)
Free for personal and other noncommercial use. Commercial use requires a separate license — see LICENSE-COMMERCIAL.md.
- LICENSE — full license text
- NOTICE — copyright and AI assistance disclosure
- CLA.md — Contributor License Agreement
- CONTRIBUTING.md — how to contribute



