splashboard 0.1.0

A customizable terminal splash screen with plugin-based data sources
# splashboard

A customizable terminal splash screen with plugin-based data sources.

> `splashboard` = `splash` + `dashboard` — a splash screen for your shell, rendered as a dashboard.

## What is this

Every time you open a terminal, you see... a blinking cursor.
What if instead, you saw a dashboard of the things you actually care about?

`splashboard` renders a customizable TUI splash screen on shell startup — greetings, git status, system info, GitHub notifications, weather, RSS, calendar, whatever you wire up. One line in your `.bashrc` / `.zshrc` / `config.fish` and you're done.

## Goals

- **Zero friction install** — one-line shell rc snippet
- **Blazing fast startup** — cached-first render, async refresh in background
- **Plugin ecosystem** — subprocess-based plugins, write them in any language
- **Beautiful by default** — built on Ratatui, pleasing out of the box
- **Customizable** — TOML config, themeable, layout control

## Design sketch

- **Language**: Rust
- **TUI**: [Ratatui]https://ratatui.rs/ + crossterm
- **Config**: TOML at `~/.config/splashboard/config.toml`
- **Cache**: `~/.cache/splashboard/` (per-widget, TTL-based)
- **Plugins**: executables in `~/.config/splashboard/plugins/`, stdin=JSON request, stdout=JSON response

### Lazy / cached rendering

Startup MUST NOT block the shell. The pattern:

1. On launch, read cached data and render immediately
2. Spawn async tasks to refresh data in background
3. Persist refreshed data for the next invocation

This way even HTTP-backed widgets (GitHub, weather, RSS) feel instant.

## Built-in widgets (planned)

### Sync (fast, local)
- Clock / date / greeting
- Git status (branch, dirty, ahead/behind)
- System info (OS, uptime, CPU/mem)
- TODO list (from local Markdown)

### Async (HTTP, lazy-cached)
- GitHub notifications / PRs awaiting review
- Weather
- RSS feed
- Calendar (iCal / Google)

### Plugins (user-defined)
- Anything you can express as "run an executable, get JSON back"
- Bash, Python, Go, Node, Ruby, whatever

## Plugin protocol (draft)

Plugins live at `~/.config/splashboard/plugins/<name>` and are executables.

**Input** (stdin, JSON):
```json
{
  "config": { ... per-plugin user config ... },
  "context": { "tty_width": 120, "tty_height": 40 }
}
```

**Output** (stdout, JSON):
```json
{
  "title": "My Plugin",
  "lines": ["line 1", "line 2"],
  "color": "cyan",
  "icon": "📦"
}
```

Language-agnostic. Write a plugin in Bash in 5 lines.

## Installation (planned)

```bash
# Install
cargo install splashboard
# or
brew install unhappychoice/tap/splashboard

# Wire into your shell
splashboard init bash >> ~/.bashrc
# splashboard init zsh >> ~/.zshrc
# splashboard init fish >> ~/.config/fish/config.fish
```

## Status

Early design phase. See [Issues](https://github.com/unhappychoice/splashboard/issues) for the roadmap.

## License

ISC

## Related

- [gitlogue]https://github.com/unhappychoice/gitlogue — cinematic git history replay
- [gittype]https://github.com/unhappychoice/gittype — CLI typing game from your source code
- [mdts]https://github.com/unhappychoice/mdts — local Markdown tree server