Skip to content

cesalas13/personal-dashboard

Repository files navigation

Personal Dashboard

A local-first, single-file personal operator dashboard you can fork and make your own. Track projects, capture notes and ideas, keep a registry of sources, and launch your own tools, all from one dark, dense, keyboard-friendly console.

No accounts. No backend required. No data leaves your machine. Open index.html and it just works.

This is a clean, generic template. It ships with sample data only. Replace the samples with your own, or edit everything in-app and let it save to your browser.

Why this exists

Most dashboards either lock your data in someone else's cloud or need a heavy build step and a server. This one is the opposite:

  • Local-first. Your edits persist to your browser's localStorage instantly. Opening the file over file:// works fully offline.
  • Single file. The whole app is index.html. No bundler, no npm install, no framework.
  • Honest about state. A three-tier loader (canonical file, embedded fallback, inline seed) keeps it rendering whether you serve it, open it directly, or ship it as a static asset.
  • Customizable without touching code. Branding, theme colors, which modules show, and their labels all live in one config.js.
  • Dense when you need it. The sidebar collapses into a compact rail and remembers that choice locally.

Modules

The template ships as a public-safe mirror skeleton: it preserves a broad dashboard shape, but every page uses sample fixtures or honest empty states.

Module set What it's for
Overview Current focus, what's next, active-project count, recent activity.
Sitemap archive A grouped index of every enabled module. Start here when you want to see the whole app.
Today / To do / Calendar Generic daily planning, task queue, and schedule surfaces with editable examples.
Projects A status pipeline (active / paused / archived / dead). Inline-editable cards.
Launchpad A registry of your tools/agents. Copies the command to run them. Process launching is OFF by default for safety.
Notes Quick capture. Click to edit, Enter to save.
Sources The feeds, newsletters, and inputs you track.
Ideas A backlog with status and effort.
Workflow / Goals / Memory / Usage / Telemetry Generic mirror pages for the larger operator-console shape. Replace sample context with your own.
Routine / Wellness / Inventory / Budget / Hobbies / Creative / Move tracker / Housing / Connections Optional life-system pages, generic by default and safe to hide in config.js.
Sync Persistence status, reset to samples, and JSON export.

The arrow button in the sidebar header collapses the module column into a narrow rail. That preference is stored in localStorage and stays local to your browser.

Quick start

git clone https://github.com/cesalas13/personal-dashboard.git
cd personal-dashboard
open index.html        # macOS. Or just double-click it.

That's it. Edit anything in the UI and it saves locally.

Optional: run the local server

You only need this if you want your state to sync across browser tabs or devices on your own machine.

python3 scripts/serve.py     # serves at http://127.0.0.1:8765

Then set serverSync: true in config.js. See SECURITY.md before enabling anything that runs processes.

Make it yours

  1. Rebrand and retheme: edit config.js (app name, accent color, which modules appear).
  2. Add your data: edit state.json, then run sh scripts/build.sh so the offline fallback stays in sync. Or just add everything in-app.
  3. Read the guide: docs/customization.md covers theming, modules, adding a new panel, and the data model.

How state loading works

1. fetch('./state.json')          canonical data (served, or Safari over file://)
2. <script id="embedded-state">   offline fallback, rebuilt by scripts/build.sh
3. INLINE_STATE                    last-resort minimal seed
   + any {"_external": "data/x.json"} pointer is loaded from that file
   + your edits overlay on top and persist to localStorage

sh scripts/build.sh (which calls scripts/embed_state.py) regenerates tier 2 from state.json. The embed step escapes </script> and externalizes heavy keys so the inline fallback stays small and safe. A test suite guards all of this.

Privacy

This template never collects or transmits anything. The included scripts/privacy_scan.py is a gate you can run before publishing your fork to make sure no personal markers (names, emails, home paths) slipped in. See PRIVACY.md.

Tests

python3 -m pytest          # privacy gate + embedded-state safety + fixtures
python3 scripts/privacy_scan.py

License

MIT. Build whatever you want with it.

About

No description, website, or topics provided.

Resources

License

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors