A modular, self-hosted personal dashboard for task management, note-taking, and habit tracking. Built to run 24/7 on a home server with minimal resource usage (~30-50 MB RAM).
- Dashboard — Tasks with goal assignment, stats overview
- Notebook — Markdown editor with folder organization and split edit/preview (Obsidian-compatible
.mdfiles) - Habit Tracker — Daily checklist with streaks, week/month/year/all-time heatmap views
- Responsive — Desktop sidebar + mobile bottom nav
- Private — Designed for Tailscale mesh VPN access
| Layer | Tech |
|---|---|
| Framework | SvelteKit |
| Database | SQLite via better-sqlite3 |
| Styling | Vanilla CSS with custom properties |
| Runtime | Node.js (adapter-node) |
# Install dependencies
npm install
# Start dev server
npm run dev
# Build for production
npm run build
# Run production server
PORT=3000 HOST=0.0.0.0 ORIGIN=http://your-tailscale-ip:3000 node build/index.jsCopy .env.example to .env and adjust:
cp .env.example .env| Variable | Default | Description |
|---|---|---|
PORT |
3000 |
Server port |
HOST |
0.0.0.0 |
Bind address |
ORIGIN |
http://localhost:3000 |
Public URL (required for CSRF) |
- Database:
data/sqrt.db(SQLite, auto-created) - Notes:
vault/directory (flat.mdfiles, Obsidian-compatible)
Both directories are auto-created on first run. Back them up to preserve your data.
- Create
src/routes/my-page/+page.svelte - Optionally add
+page.server.jsfor server-side data - Add a nav entry in
src/routes/+layout.svelte→navItems
sqrt/
├── src/
│ ├── app.html # HTML shell
│ ├── lib/
│ │ ├── server/db.js # SQLite database layer
│ │ └── styles/global.css # Design system
│ └── routes/
│ ├── +layout.svelte # App shell (collapsible sidebar)
│ ├── +page.svelte # Home dashboard
│ ├── notebook/ # Markdown notebook
│ └── habits/ # Habit tracker
├── static/favicon.svg # √ favicon
├── data/ # SQLite DB (gitignored)
├── vault/ # Note files (gitignored)
└── package.json