bada means "sea" (바다) in Korean — a place where important things gather and flow.
bada is a Vim-first TUI todo app for capturing what matters, organizing it into projects/tags, and finishing with calm focus.
bada uses a framed, "taskdog-inspired" terminal UI:
- Framed panels — every screen is drawn in a rounded, titled panel
(
bada · Tasks,bada · Calendar,bada · Gantt,bada · Trash,bada · Help). - Timeline panel — a compact Gantt-style day grid of active dated tasks sits above the task table.
- Task table — columns for status, title, assignee, reporter, priority
(
Pn), due-in (relative, e.g.in 3d/today/2d ago), due, end, topic, tags, timezone, recurrence, and notes. - Full-width selection bar highlights the current row; done tasks are struck through, multi-selected tasks are tinted.
- Status-dot legend (
● ● ● ●) and a key-hint footer showing the active shortcuts. - Full-width status bar with the current mode, sort, active filter/search, and position.
Tasks are listed directly; each task's topic appears in the table so the list stays flat and scan-friendly.
Open with : commands (tab to autocomplete), or the shortcuts noted:
:agenda— the daily agenda (also opens on launch). Leads with a day's I Ching reading, an at-a-glance triage summary, a completion streak, and a 7-day sparkline, then sections for Overdue, Due Today (as a schedule), Upcoming, Recurring, No date, and Recently Added/Done. Presszto fold the header.:calendar— month grid;h/lday,j/kweek,H/Lmonth,Enterday detail.:gantt— timeline of tasks with start/due bars and a "today" marker.:stats— productivity dashboard: counts, completions (today/week/month), current & longest streaks, a 7-day completion chart, and pending breakdowns by priority and topic.:help(or?) — full keybinding reference.:config— open the config file in$EDITOR; bada reloads it (theme, keybindings, etc.) when you save and quit the editor.:theme— list available palettes;:theme <name>switches to one (light,dark,purple).
Quick filter commands:
:overdue— show overdue unfinished tasks.:pending— show pending tasks.:in-progress/:progress— show in-progress tasks.:done/:completed— show completed tasks.:today— show unfinished tasks due today.:week— show unfinished tasks due in the next 7 days.:all/:clear/:reset— return to the original unfiltered list.
- Status:
rrotates the task through its status pipeline. By default that isPENDING→IN-PROGRESS→DONE, but a project (topic) can define its own workflow — see Projects & custom workflows below. - Delete to trash:
D(Xdeletes all done). - Edit / rename:
eopens the metadata editor. - Priority:
+/-cycles None → Low → Med → High (green / amber / red flag). - Due shift:
]/[(+1d/-1d). - Undo:
ureverts the last in-place edit (status, priority, due, or metadata). Deletes are recovered from the Trash (T) instead. - Sort:
sthend/p/t/c/o/w/a/s(due/priority/title/created/topic/stage/auto/state). gg/Gbindings (jump to top / bottom)- Quick filters: use commands like
:overdue,:pending,:today,:week, and:allto clear. - Search:
/opens a query prompt;For,fopens fuzzy search;Enterapplies,Esccancels (submit empty to clear). - Detail & notes:
Enteropens a task's detail view — status (with an overdue tag), topics, priority, due, recurrence, and its notes. Inside it,eedits the task's fields (the metadata box) andn(orv) opens the note text editor. Works from the task list, the agenda, and the kanban. - Agenda: opens on launch; type
:agendato view again. It leads with an at-a-glance summary (overdue / due today / upcoming / done today), a completion streak, and a 7-day due-count sparkline, then sections for Overdue, Due Today (as a time-ordered schedule), Upcoming, Recurring, No date (prioritized undated tasks), and Recently Added/Done. Each row shows its project and workflow stage. Usej/kto select,Enternotes,rstatus,eedit,[/]reschedule,gjump to the task list, andzto fold the header for more room. Scope the list to a topic first and the agenda filters to that project (Agenda · <topic>). - Help:
?(or:help) opens the full keybinding reference. - Other views:
:calendar(month grid) and:gantt(timeline). - From a filtered/searched/topic-scoped list,
Escorqreturns to the original list; when already on the original list,qquits.
Topics double as projects. Open the projects overview with :projects
(aliases :topics, and :dashboard for muscle memory) to manage them:
- Scope to a project with
Enter(filters the task list to that topic). - Custom status workflow with
w: define an ordered pipeline of stages, e.g. a thesis project withwriting → review → submission → rebuttal. In the editor:aadd,erename,ccycle a stage's category,J/Kreorder,Ddelete,ssave (Escalso saves and closes). - Each stage has a category —
pending,active, ordone— which drives its color. Mark the terminal stagedone; rotating a task into it completes the task (sets its completion time), just like the built-inDONE. - Project metadata:
eedits the description,tsets a target date,atoggles archived. The projects overview shows each project's completion bar, overdue count, and stage funnel. - Kanban board:
:kanban(or:kanban <topic>;:boardis a legacy alias) opens a column-per-stage board for the scoped project.h/lmove between columns,j/kbetween tasks, andL/Hadvance a task to the next stage or send it back. - Stage filter & sort:
:stage <name>filters the list to a single workflow stage; sort by pipeline position withsthenw.
A task's workflow is governed by its primary topic — the first topic listed
on the task. Other topics remain plain labels. Tasks whose primary topic has no
custom workflow keep the default PENDING/IN-PROGRESS/DONE behavior, so
existing tasks are unaffected.
You can set recurrence in the metadata editor using the Recurrence and Interval fields.
Examples:
every dayevery 3 daysevery 2 weeksevery 2 weeks on Monevery monthevery month on Fridaily,weekly,monthly(aliases)
Notes:
- Weekday names accept short and long forms:
Mon/Monday,Tue/Tuesday, etc. - If
Recurrenceis empty butIntervalis set, it is treated asevery N days. - The UI shows a "Next: YYYY-MM-DD" preview for recurring tasks.
bada ships several built-in palettes: light (default), dark, purple, ocean, forest, rose, and graphite. There are four ways to switch:
:themecommand: run:themeto list the available palettes, or:theme <name>(e.g.:theme purple) to switch. The change applies immediately and is saved to yourconfig.toml.- Cycle live: press
tin the list view to rotate through the presets, applied and saved immediately. - Pick a preset: set
preset = "ocean","forest","rose","graphite","purple","dark", or"light"in the[theme]section ofconfig.toml. - Hand-tune colors: edit any key in
[theme]to customize headings, accents, status bar, selection highlight, etc. Individual keys override the chosen preset, so you can start frompreset = "purple"and adjust a single hue.
The UI is framed in rounded panels with a colored table-header bar, a status-dot legend, and a key-hint footer. Two notable theme keys drive the framing:
border— color of the rounded panel frames.status_alt_bg/status_alt_fg— the table-header bar and the key-hint chips.
See config.example.toml for the full [theme] section and explicit palette
values.
- Deleted tasks are archived as JSON snapshots in
trash_dir(defaulttrash/). - Press
Tto open Trash;spacemulti-selects (auto-advances),urestores selected/current,Ppurges (with confirm),esc/qexits. - Status bar shows cursor, selection count, and trash path; clear the folder to purge manually if needed.
./install.sh
Options:
./install.sh --prefix /usr/local --bin-name bada
The installer does a clean rebuild every time and warns if another bada
earlier on your PATH (e.g. a stale copy in ~/go/bin or ~/.local/bin)
would shadow the freshly built binary — that is the usual cause of an "old
version keeps running" after an update.
./uninstall.sh
Removes the installed binary, the local build artifact, and any other bada
copies found on your PATH. Use the same --prefix/--bin-name you installed
with. To also delete user data (config, DB, and trash):
./uninstall.sh --purge
- Agenda row selection/actions (jump to task, edit, rotate status, reschedule directly from agenda)
- Data Portability: Robust Import/Export (CSV/JSON/TOML) and automatic SQLite maintenance (VACUUM/Snapshots).
- Integrate with Gorae / Bori
Recurrence needs some NLP feature to parse and calculate next due date
- Clearer input model: Allow every X days/weeks/months + optional weekday selector (e.g., every 2 weeks on Mon), while keeping a raw rule fallback.
- Next occurrence preview: Show "Next: YYYY‑MM‑DD" in metadata and in the recurring list so users trust the schedule.
- Skip/shift controls: Add ]/[ to shift next occurrence and a s key to skip just one cycle.
- Completion behavior toggle: Choose whether completing a recurring task creates a new instance or just updates the due date in place.
- End conditions: Support "until date" or "after N occurrences."
- Exception dates: Let users add one‑off skip dates (holidays, vacations).
- Human‑readable labels: Store a normalized rule and a display label (e.g., weekly:mon,wed → "Weekly on Mon/Wed").
- Supabase and create API
- Natural Language Intake: Convert "Buy milk tomorrow at 5pm" into a structured task with a due date and tags.
- Strategic Advisory: AI analyzes your task list to suggest the most efficient order of operations (e.g., "Group these three errands together to save time").
- Automated Project Planning: Generate a multi-step task breakdown from a single high-level goal (e.g., "Plan a 3-day hiking trip").
- Writing features: email or report.
This is a comprehensive and well-thought-out feature set. It strikes a great balance between a "power user" CLI/TUI application and modern AI-driven productivity.
I have polished your existing list for clarity and professional terminology, then added a section of "Next-Level Ideas" to further differentiate your project.
- Dependency Tracking: Mark tasks as "blocked by" another task. The AI can then use this data to suggest a valid path forward.
- Recurring Logic: Support for complex recurrences (e.g., "Every 3rd Tuesday" or "2 weeks after completion").
- Pomodoro Integration: A built-in timer in the status bar that links directly to the active task for time-tracking.
- Git-style "Undo": A command-line history (reflog) so you can revert accidental bulk deletions or project moves.
- Complexity Estimation: Let the AI estimate how many "Story Points" or minutes a task will take based on its title and description.
- Stale Task Detection: An AI "nag" that identifies tasks that have been sitting idle for weeks and suggests either deleting them, breaking them down, or rescheduling.
- Contextual Tagging: Automatically suggest tags based on the content of the task (e.g., recognizing "Email" and "Boss" and suggesting
@commor@work).
- Velocity Tracking: A simple dashboard showing tasks completed per day/week to help you understand your actual capacity.
- Workload Heatmap: A visual representation (perhaps in the calendar view) showing which days are dangerously over-scheduled.
- Hook System: Allow users to run scripts on certain events (e.g.,
on_task_completetriggers a script that updates a Slack status). - Sync Backend: Optional end-to-end encrypted sync between multiple machines using a simple central relay or Git-based syncing.
- Two-way sync modes: read-only (safe) vs. bidirectional (opt-in), with a clear "source of truth" toggle.
- Task mapping: Jira Issue → Bada Task fields (summary, status, priority, due, labels, assignee, reporter).
- Filters: sync by JQL (e.g., "assigned to me AND status != Done"), per-project toggles.
- Status actions: Bada status changes → Jira transitions (configurable mapping).
- Comment/notes bridge: append Bada notes to Jira comments (or vice versa), with opt-in prefixes.
- Offline queue: local actions stored and pushed when online; show "pending sync" badge.
- Daily view: "Today" panel showing Jira due/overdue issues alongside local tasks.
- Quick commands: :jira sync, :jira open ISSUE-123, :jira assign me.
- Rate-limit and batching: avoid API spamming; show last sync time and errors.
- Auth: API token + base URL stored in config; support per-user profiles.
Here's a productivity‑first roadmap for Bada that stays personal, fast, and calm:
Phase 1: Capture & Clarity
- Quick capture everywhere: global "inbox" + minimal friction add flow
- Better defaults: smarter default filter, recent tasks, quick tags
- Lightweight notes: faster note edit/preview, auto‑save
Phase 2: Focus & Flow
- Focus mode: single task focus with minimal UI
- Time‑blocking hints: "today" section, due/overdue clarity
- Gentle reminders: daily review screen and "next 3 days" digest
Phase 3: Review & Reflection
- Weekly review view: stale tasks, overdue, and "someday"
- Simple stats: completed today/this week, streaks (optional)
- Archive hygiene: bulk cleanup and restore improvements
Phase 4: Organization
- Topics/tags hygiene: rename/merge tooling, quick re-tagging
- Saved searches: "contexts" like @home, @deepwork
- Priority & energy pairing: low/medium/high effort tagging
Phase 5: Quality of Life
- Undo history for destructive actions
- Export/import backups (CSV/JSON)
- Theming polish + keyboard ergonomics refinements
- If you want, I can turn this into a GitHub milestones list with issue titles and acceptance criteria.