Skip to content

Repository files navigation

Do-It

Do-It is a local-first task graph for a personal homelab. It runs one Go server on a device inside your Wi-Fi network, then every laptop or phone on that network opens the same browser UI.

The product goal is simple: tasks, notes, files, and images stay synced across local devices without needing a cloud account. The UI is intentionally quiet: monochrome, translucent, no stupid decorative noise, and connected mind map instead of boring flat list.

Screenshot of my homelab on Vivo Phone Screenshot of my homelab on Vivo Y71(3GB RAM 16GB ROM)Phone

What it does

  • Go HTTP server with embedded static frontend.
  • Task graph with parent-child connections.
  • Live sync across open browsers using Server-Sent Events.
  • File and image uploads stored on the host device.
  • Connected device status for active browser sessions.
  • JSON persistence for tasks and attachment metadata.
  • Unit tests for task storage, uploads, and device presence.

System Architecture

image

Quick Start

go test ./...
go run .

Open:

http://localhost:8080

To make the server reachable from other devices on the same Wi-Fi:

DOIT_ADDR=0.0.0.0:8080 go run .

The app prints LAN URLs like:

http://192.168.1.22:8080

Open that address from another device connected to the same Wi-Fi.

Terminal Download

Install the latest release with either curl or wget:

curl -fsSL https://raw.githubusercontent.com/blackdragoon26/Do-It/main/scripts/install.sh | sh
wget -qO- https://raw.githubusercontent.com/blackdragoon26/Do-It/main/scripts/install.sh | sh

The installer downloads the matching GitHub release archive for Linux or macOS on amd64/arm64, then installs doit into ~/.local/bin. If you cloned the repository or downloaded scripts/install.sh locally, override the destination or version when needed:

DOIT_INSTALL_DIR=/usr/local/bin DOIT_VERSION=v1.0.0 sh scripts/install.sh

Manual download format:

https://github.com/blackdragoon26/Do-It/releases/latest/download/Do-It_linux_amd64.tar.gz
https://github.com/blackdragoon26/Do-It/releases/latest/download/Do-It_linux_arm64.tar.gz
https://github.com/blackdragoon26/Do-It/releases/latest/download/Do-It_darwin_amd64.tar.gz
https://github.com/blackdragoon26/Do-It/releases/latest/download/Do-It_darwin_arm64.tar.gz

Data Storage

By default, Do-It writes local app data under:

data/state.json
data/uploads/

Use DOIT_DATA_DIR to choose a safer persistent location:

DOIT_DATA_DIR=/path/to/doit-data go run .

For an always-on phone or mini server, put DOIT_DATA_DIR somewhere backed up and large enough for uploads.

Data Flow Diagram (my type of)

Untitled-2026-04-22-2336 excalidraw

Homelab Shape

Recommended always-on hosts:

  • Old Android phone running Termux(which I did on Vivo).
  • Raspberry Pi.
  • Mini PC.
  • NAS or small Linux box.

Most stock routers cannot run this directly. If a router runs OpenWrt and supports custom packages or containers, it might be possible, but router flash storage is usually a bad place for uploads.

More detail: docs/DEPLOYMENT.md

Project Layout

main.go              server boot, config, static file embedding
server.go            HTTP routes, SSE live sync, uploads, device presence
store.go             task data model, mutex-protected store, JSON persistence
static/index.html    app shell
static/app.css       visual system
static/app.js        browser state, graph layout, API calls
*_test.go            backend tests
docs/                architecture, deployment, and contributor notes

API Summary

GET    /api/tasks          current task snapshot
POST   /api/tasks          create task with optional uploads
PATCH  /api/tasks/{id}     update task fields
DELETE /api/tasks/{id}     delete task
GET    /api/events         live SSE stream
GET    /api/devices        active connected devices
POST   /api/client-status  browser-reported battery/network health
GET    /api/network        LAN URLs detected by the server
GET    /uploads/{file}     uploaded file serving

Detailed design: docs/ARCHITECTURE.md

Development

go test ./...
go build ./...
go run .

When static files change, restart go run . because the frontend is embedded into the Go binary.

UI/contributor rules: docs/CONTRIBUTING.md

About

A self-hosted binary (for Raspberry Pi, adv. routers, old phones), built in Go, running SSE/HTTP server, allowing simple synced notes/multimedia files across all devices connected to ur local home wifi.

Topics

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages