TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
Blitz Task is a self-hosted task manager meant to cover work, school, dev projects and daily life in one place.
ProductivityC# · TypeScriptGitHub @LinkNexusOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
A self-hosted task and project manager — Kanban board and table view, built to cover work,
school, side projects and daily life in one place instead of three apps.
Single maintainer, running in production, actively built. If you want to know where it is
going, ROADMAP.md is honest about what exists and what does not.Read the full README ↗A self-hosted task and project manager — Kanban board and table view, built to cover work, school, side projects and daily life in one place instead of three apps.
Single maintainer, running in production, actively built. If you want to know where it is going, ROADMAP.md is honest about what exists and what does not.
Not there yet: recurring tasks, reminders, a calendar view, comments, search, notifications. Those are Phases 3–5 of the roadmap.
One deployable unit — the backend serves the built frontend, so there is no separate frontend host.
| Backend | ASP.NET Core 10 minimal API, EF Core, SQLite |
| Frontend | React 19, TypeScript, Vite, TanStack Router/Query/Table, Tailwind v4, shadcn/ui |
| Tooling | Biome (not ESLint/Prettier), bun, xUnit |
| Deploy | Docker image on GHCR, Dokploy + Traefik on a VPS |
SQLite is a deliberate choice, not a placeholder: a single-user-to-small-team self-hosted app has no need for a second container to babysit, and it makes the whole app one file to back up.
The image is built by CI and published to GHCR, so nothing is compiled on the host.
curl -O https://raw.githubusercontent.com/LinkNexus/blitz-task/main/docker-compose.yml
# set the required variables below, then:
docker compose up -d
The app listens on port 8080 inside the container and expects a reverse proxy in front of it for TLS.
| Variable | Required | Notes |
|---|---|---|
RESEND_API_KEY | yes | Email delivery. Read directly from the environment, not from a config section. |
Resend__FromEmail | yes | Must be a domain verified in Resend. |
Resend__FromName | no | Defaults to BlitzTask. |
App__SupportEmail | no | Address shown in email footers. Unset means the line is omitted. |
App__BaseUrl | yes | Public origin, e.g. https://tasks.example.com. Emailed links are built from it, and reminders are sent by a background job with no request to infer it from. |
ConnectionStrings__DefaultConnection | no | Defaults to Data Source=Data/blitz-task.db. |
__ is ASP.NET's separator for nested configuration, so Resend__FromEmail sets the
FromEmail key of the Resend section. The compose file declares the required ones with
:?, so a misconfigured deploy fails loudly instead of starting half-broken — which matters,
because email is not optional here: account confirmation gates almost every endpoint, so
without working mail nobody can get past registration.
Three paths hold everything, and the compose file puts the first two on named volumes:
Data/blitz-task.db — the database.Uploads/ — attachments and project images.Data/DataProtection-Keys/ — the key ring that signs auth cookies and CSRF tokens. Losing
it does not lose data, but it logs every user out and invalidates their antiforgery tokens
on every redeploy.Migrations are applied automatically on startup, so upgrading is a pull and a restart.
Requires .NET 10 SDK and bun.
# backend — http://localhost:5121
dotnet run --project server/BlitzTask.Backend
# frontend — http://localhost:5173, proxies /api to the backend
cd web && bun install && bun run dev
Email in development goes to SMTP on localhost:1025 rather than Resend, so run a catcher
such as Mailpit — without one, registration cannot complete.
dotnet test server/BlitzTask.Backend.Tests # backend
cd web && bun test # frontend
bunx biome check . # lint + format, repo root
The API client is generated, and the build order matters. web/src/api/** is gitignored
and produced by @hey-api/openapi-ts from an OpenAPI document that the backend build
emits. Change a C# endpoint and the chain is:
dotnet build server/BlitzTask.Backend # rewrites BlitzTask.Backend.json
cd web && bun run api:gen # rewrites src/api/**
Typecheck with tsc -b, never tsc --noEmit. web/tsconfig.json is solution-style with
"files": [], so --noEmit compiles nothing and cheerfully exits 0 on a broken app. And
tsc -b needs a build first, because the route tree (src/routeTree.gen.ts) is gitignored
and emitted by the router's Vite plugin — on a fresh clone, run bun run build before
typechecking or you get ~22 phantom errors.
Contributors: run git config core.hooksPath .githooks once. It refuses commits on main,
staying out of the way during merges and rebases.
CLAUDE.md documents the architecture and the non-obvious constraints in more depth — it is written for AI agents but is the most accurate description of how the code fits together.