A personal task manager where the goal is to empty the bucket. When everything's done, you float.
Quick start • Features • Stack • Self-hosting • Development
Not another todo app that rewards you for adding more. Float is built around one idea: tasks are weight — get rid of them and you float.
No gamification, no streaks, no guilt. Add tasks, knock them out, reach zero.
- Smart input — type
buy milk @tomorrow @15hand the date is parsed automatically - Groups & projects — organize projects into groups, tasks belong to projects
- Overview — all projects side by side, add and complete tasks inline
- Command palette —
Cmd+Kto search everything instantly - Dark / light — system-aware, one-click toggle
- Date picker — quick shortcuts (today, tomorrow, monday) + natural language + mini calendar
- File attachments — drag or click to attach files to any task
- Keyboard shortcuts —
nto add,Escto close,Cmd+Kto search - "You're floating" — the state you reach when every task is done
SvelteKit 5 + Tailwind ──► Caddy ──► Axum (Rust) ──► PostgreSQL
| Layer | Technology |
|---|---|
| Frontend | SvelteKit 5, Tailwind CSS, Inter font |
| Backend | Rust, Axum, SeaORM, JWT auth |
| Database | PostgreSQL 16 (UUID primary keys) |
| Proxy | Caddy |
| Deploy | Docker Compose, Cloudflare Tunnel |
- Docker + Docker Compose
- A domain with Cloudflare (optional, for HTTPS)
git clone https://github.com/Remenby31/float.git
cd float
# Generate a JWT secret
export JWT_SECRET=$(openssl rand -base64 32)
# Start everything
cd deploy
docker compose up -dFloat is now running on http://localhost:8888.
Registration is disabled by default (personal app). Create your user manually:
# Generate a bcrypt hash for your password
node -e "const b=require('bcryptjs');console.log(b.hashSync('your-password',10))"
# Insert into the database
docker exec float-db psql -U float -c \
"INSERT INTO users (email, username, password_hash) \
VALUES ('you@example.com', 'yourname', '\$2b\$10\$...');"Add to your tunnel config:
- hostname: float.yourdomain.com
service: http://localhost:8888# Start PostgreSQL
docker compose up db -d
# Run the API (auto-migrates on startup)
cd crates/api
cargo runcd frontend
npm install
npm run devThe dev server proxies /api to localhost:3000 (the Rust API).
float/
├── crates/
│ ├── api/ # Axum HTTP server, routes, auth
│ ├── core/ # Shared types
│ ├── db/ # SeaORM entities
│ └── migration/ # Database migrations
├── frontend/
│ └── src/
│ ├── lib/
│ │ ├── components/ # SmartInput, TaskDetail, DatePicker, CommandPalette, ColorPicker
│ │ ├── api.ts # API client
│ │ ├── smart-input.ts # @ mention parser
│ │ ├── theme.svelte.ts
│ │ └── keyboard.ts
│ └── routes/
│ ├── login/
│ ├── register/
│ └── app/
│ ├── overview/
│ └── project/[id]/
├── deploy/
│ ├── docker-compose.yml
│ └── Caddyfile
├── float-branding/ # Design system, tokens, logo
└── README.md
Monochrome, dark-first, Inter. Inspired by Linear and Notion.
- No color noise — the UI is black and white, color is for your project dots
- Minimal text — the interface should be intuitive without labels
- Micro-animations — 200ms ease-out, spring on completion, stagger on load
MIT