Skip to content

Commit 755288b

Browse files
feat: implement core application architecture, UI rendering utilities, and GitHub release automation
1 parent 848bb16 commit 755288b

19 files changed

Lines changed: 674 additions & 219 deletions

File tree

β€Ž.github/workflows/release.ymlβ€Ž

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,5 +53,6 @@ jobs:
5353
version: latest
5454
args: release --clean
5555
env:
56-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
56+
# A Personal Access Token (PAT) is required to push to the external tap repo
57+
GITHUB_TOKEN: ${{ secrets.TAP_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
5758

β€Ž.goreleaser.yamlβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ release:
7777
homebrew_casks:
7878
- repository:
7979
owner: programmersd21
80-
name: kairo
80+
name: kairo_tap
8181

8282
directory: Casks
8383

β€ŽCHANGELOG.mdβ€Ž

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,30 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99

1010
### Added
1111

12+
* **Theme Previews**: The Theme Menu now displays intuitive mini-swatches for every theme, accurately rendering the background, foreground, accent, and success colors side-by-side for flawless visual previewing on any terminal background.
13+
* **Header Breathing Room**: Added a subtle top margin to the header, pushing the "KAIRO" logo and tabs down slightly for a more balanced, uncrowded layout.
1214
* **GitHub Discussions (`u`)**: Added dedicated shortcut to open the project's GitHub Discussions page.
13-
* **Empty State Redesign**: Removed the box border in the empty state and introduced an attractive, centered layout with a minimalist rocket icon and inspiring prompt.
15+
* **Footer UI Update**: Redesigned the footer with individual, circular pill containers (using powerline-style caps) for each keybinding to maximize readability and aesthetic appeal. Keybindings are left-aligned while version and sync status remain anchored to the right.
16+
* **Settings Menu**: Added an interactive settings menu (accessible via `ctrl+s`) to live-configure application settings, with support for live config file watching, reloading, and a shortcut (`g`) to directly open `config.toml` for advanced configuration.
17+
* **Empty State Dashboard**: Transformed the empty home screen into a personal productivity dashboard with compressed, elegant greetings, a minimalist rocket icon, and real-time task completion statistics.
1418
* **Theme Improvements**: Updated the `Nord` theme's muted color to a more prominent tone for improved legibility.
1519

20+
### Fixed
21+
22+
* **Responsive Auto-Resize Engine**: Fully implemented dynamic width constraints across the application.
23+
* The Header Tabs now dynamically shrink and truncate titles (`Upc…`) to guarantee they never overflow the window horizontally.
24+
* The overall Header block and task count pill perfectly anchor to the exact center (`Align(lipgloss.Center)`), surviving aggressive terminal resizing without drifting.
25+
* The Footer (`render.BarLine`) correctly clips to the terminal width without shattering the layout grid.
26+
* **Tab Switch Panics**: Fixed a crash (`strings: negative Repeat count`) that triggered when switching tabs rapidly during narrow terminal conditions.
27+
* **Menu Box Centering**: Resolved an issue where the Help and Theme menu overlays would drift to the left; they now properly inherit the viewport dimensions and float perfectly dead-center.
28+
* **Help Menu Alignment**: Corrected the text alignment inside the Help box to render cleanly on the left instead of forcing awkward center-justification.
29+
* **Cohesive Pill Caps**: Extended the premium powerline pill styling (`ξ‚Ά` / `ξ‚΄`) to the Header Tabs (including smooth animated bubble transitions), the `DELETE?` / `QUIT?` footer badges, and all Task Priority labels (P0-P3).
30+
* **Linear Rainbow Animation Fix**: Resolved a race condition where toggling the rainbow logo multiple times (or changing other settings) would spawn multiple ticker loops, causing the animation to accelerate. It now maintains a consistent, buttery-smooth frame rate.
31+
32+
### Changed
33+
34+
* **Homebrew Repository Modularity**: Migrated the Homebrew Cask publishing from the primary application repository to a dedicated, independent tap repository (`programmersd21/kairo_tap`) to maintain cleaner git history, modularity, and separation of distribution concerns.
35+
1636
## [1.2.2]
1737

1838
### Added

β€ŽCasks/.gitkeepβ€Ž

Whitespace-only changes.

β€ŽCasks/kairo.rbβ€Ž

Lines changed: 0 additions & 39 deletions
This file was deleted.

β€ŽREADME.mdβ€Ž

Lines changed: 75 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ Built with [Bubble Tea](https://github.com/charmbracelet/bubbletea) (TUI framewo
5151
| **Smart Filtering** | Multiple views: Inbox, Today, Upcoming, Completed, by Tag, by Priority |
5252
| **Fuzzy Search** | Lightning-fast command palette with ranked results |
5353
| **Cinematic Animations** | Smooth vertical shutter, cascading row reveals, and glitch/vaporize deletions |
54+
| **Responsive Auto-Resize**| Strict grid enforcement with dynamic title truncation preventing layout drifts |
5455
| **Offline Storage** | SQLite with WAL for reliability and concurrent access |
5556
| **Git Sync** | Optional repository-backed sync with per-task JSON files |
5657
| **Import/Export** | JSON and Markdown support for data portability |
@@ -74,8 +75,8 @@ Built with [Bubble Tea](https://github.com/charmbracelet/bubbletea) (TUI framewo
7475
### macOS (Homebrew)
7576

7677
```bash
77-
brew tap programmersd21/kairo https://github.com/programmersd21/kairo
78-
brew install --cask programmersd21/kairo/kairo
78+
brew tap programmersd21/kairo_tap
79+
brew install --cask kairo
7980
```
8081

8182
### Linux / macOS (curl)
@@ -112,7 +113,7 @@ Downloads the latest GitHub Release for your OS/arch, verifies it against `check
112113
On Windows, Kairo will automatically close to apply the update; simply re-run `kairo` once the terminal returns.
113114

114115
**Startup Notifications:**
115-
Kairo automatically checks for updates on startup. If a newer version is available, a notification will appear in the footer (e.g., `Update: v1.2.1 β†’ v1.2.2`) directing you to run the update command.
116+
Kairo automatically checks for updates on startup. If a newer version is available, a notification will appear in the footer (e.g., `Update: v1.2.2 β†’ v1.2.3`) directing you to run the update command.
116117

117118
---
118119

@@ -250,6 +251,7 @@ Kairo features a **minimalist design system** optimized for clarity and focus.
250251
| `enter` | πŸ‘οΈ View task details |
251252
| `d` | πŸ—‘οΈ Delete task |
252253
| `t` | 🎨 Cycle themes |
254+
| `ctrl+s` | βš™οΈ Open Settings Menu |
253255
| `i` | πŸ“’ Open GitHub issues |
254256
| `c` | πŸ“ Show changelog |
255257
| `?` | ❓ Show help menu |
@@ -283,6 +285,25 @@ Kairo features a **minimalist design system** optimized for clarity and focus.
283285

284286
---
285287

288+
## ⌨️ Vim Mode
289+
290+
For users who live in the terminal, Kairo offers a built-in **Vim Mode** for seamless navigation without leaving the home row.
291+
292+
### Enabling Vim Mode
293+
You can toggle Vim Mode in two ways:
294+
1. **Settings Menu**: Press `ctrl+s` and toggle "Vim Mode" to `true`.
295+
2. **Configuration File**: Set `vim_mode = true` in your `config.toml`.
296+
297+
### Vim Shortcuts
298+
When enabled, the following classic Vim keys are activated for list navigation:
299+
- `j`: Move selection down
300+
- `k`: Move selection up
301+
- `G`: Jump to the bottom of the list
302+
303+
*Note: Standard arrow keys, `pgup`/`pgdown`, and `home`/`end` remain functional regardless of this setting.*
304+
305+
---
306+
286307
## βš™οΈ Configuration
287308

288309
### Config Location
@@ -299,14 +320,15 @@ Kairo features a **minimalist design system** optimized for clarity and focus.
299320
cp configs/kairo.example.toml ~/.config/kairo/config.toml
300321
```
301322

302-
Then edit to customize:
323+
Then edit the file or use the built-in Settings menu (`ctrl+s` in Kairo) to customize:
303324
- **Theme selection** β€” Choose from 32 built-in themes:
304325
- **Premium Dark:** `catppuccin` (Default), `midnight`, `aurora`, `cyberpunk`, `dracula`, `nord`, `obsidian_bloom`, `neon_reef`, `carbon_sunset`, `vanta_aurora`, `plasma_grape`, `midnight_jade`, `synthwave_minimal`, `graphite_matcha`
305326
- **Premium Light:** `vanilla`, `solarized`, `rose`, `matcha`, `cloud`, `sepia`, `cloud_dancer`, `sakura_sand`, `olive_mist`, `terracotta_air`, `vanilla_sky`, `peach_fuzz_neo`, `coastal_drift`, `matcha_latte`
306327
- **Hybrid/Specialized:** `digital_lavender`, `neo_mint_system`, `sunset_gradient_pro`, `forest_sanctuary`
307328
- **Keybindings** β€” Rebind any keyboard shortcut
308329
- **View ordering** β€” Customize your task view tabs
309330
- **Sync settings** β€” Configure Git repository sync
331+
- **Plugins** β€” Toggle and manage your Lua plugins
310332

311333
---
312334

@@ -372,115 +394,110 @@ UI Re-render β†’ Instant User Feedback
372394

373395
```
374396
kairo/
375-
β”œβ”€β”€ .github/
376-
β”‚ β”œβ”€β”€ ISSUE_TEMPLATE/
377-
β”‚ β”‚ β”œβ”€β”€ bug_report.md
378-
β”‚ β”‚ └── feature_request.md
379-
β”‚ β”œβ”€β”€ workflows/
380-
β”‚ β”‚ β”œβ”€β”€ ci.yml
381-
β”‚ β”‚ └── release.yml
382-
β”‚ └── PULL_REQUEST_TEMPLATE.md
383-
β”œβ”€β”€ cmd/
384-
β”‚ └── kairo/
397+
β”œβ”€β”€ CHANGELOG.md
398+
β”œβ”€β”€ cmd
399+
β”‚ └── kairo
385400
β”‚ └── main.go
386-
β”œβ”€β”€ internal/
387-
β”‚ β”œβ”€β”€ api/
401+
β”œβ”€β”€ CODE_OF_CONDUCT.md
402+
β”œβ”€β”€ configs
403+
β”‚ └── kairo.example.toml
404+
β”œβ”€β”€ CONTRIBUTING.md
405+
β”œβ”€β”€ go.mod
406+
β”œβ”€β”€ go.sum
407+
β”œβ”€β”€ internal
408+
β”‚ β”œβ”€β”€ api
388409
β”‚ β”‚ └── api.go
389-
β”‚ β”œβ”€β”€ app/
410+
β”‚ β”œβ”€β”€ app
390411
β”‚ β”‚ β”œβ”€β”€ model.go
391412
β”‚ β”‚ └── msg.go
392-
β”‚ β”œβ”€β”€ buildinfo/
413+
β”‚ β”œβ”€β”€ buildinfo
393414
β”‚ β”‚ └── buildinfo.go
394-
β”‚ β”œβ”€β”€ completion/
415+
β”‚ β”œβ”€β”€ completion
395416
β”‚ β”‚ └── completion.go
396-
β”‚ β”œβ”€β”€ config/
417+
β”‚ β”œβ”€β”€ config
397418
β”‚ β”‚ β”œβ”€β”€ config.go
398419
β”‚ β”‚ └── config_test.go
399-
β”‚ β”œβ”€β”€ core/
400-
β”‚ β”‚ β”œβ”€β”€ codec/
420+
β”‚ β”œβ”€β”€ core
421+
β”‚ β”‚ β”œβ”€β”€ codec
401422
β”‚ β”‚ β”‚ β”œβ”€β”€ json.go
402423
β”‚ β”‚ β”‚ └── markdown.go
403-
β”‚ β”‚ β”œβ”€β”€ nlp/
404-
β”‚ β”‚ β”‚ └── deadline.go
405424
β”‚ β”‚ β”œβ”€β”€ core_test.go
406425
β”‚ β”‚ β”œβ”€β”€ ids.go
426+
β”‚ β”‚ β”œβ”€β”€ nlp
427+
β”‚ β”‚ β”‚ └── deadline.go
407428
β”‚ β”‚ β”œβ”€β”€ task.go
408429
β”‚ β”‚ └── view.go
409-
β”‚ β”œβ”€β”€ hooks/
430+
β”‚ β”œβ”€β”€ hooks
410431
β”‚ β”‚ └── hooks.go
411-
β”‚ β”œβ”€β”€ lua/
432+
β”‚ β”œβ”€β”€ lua
412433
β”‚ β”‚ └── engine.go
413-
β”‚ β”œβ”€β”€ plugins/
434+
β”‚ β”œβ”€β”€ plugins
414435
β”‚ β”‚ └── host.go
415-
β”‚ β”œβ”€β”€ search/
436+
β”‚ β”œβ”€β”€ search
416437
β”‚ β”‚ β”œβ”€β”€ fuzzy.go
417438
β”‚ β”‚ β”œβ”€β”€ fuzzy_test.go
418439
β”‚ β”‚ └── index.go
419-
β”‚ β”œβ”€β”€ service/
440+
β”‚ β”œβ”€β”€ service
420441
β”‚ β”‚ └── service.go
421-
β”‚ β”œβ”€β”€ storage/
442+
β”‚ β”œβ”€β”€ storage
422443
β”‚ β”‚ β”œβ”€β”€ migrations.go
423444
β”‚ β”‚ β”œβ”€β”€ repo.go
424445
β”‚ β”‚ └── repo_test.go
425-
β”‚ β”œβ”€β”€ sync/
446+
β”‚ β”œβ”€β”€ sync
426447
β”‚ β”‚ └── engine.go
427-
β”‚ β”œβ”€β”€ ui/
428-
β”‚ β”‚ β”œβ”€β”€ detail/
448+
β”‚ β”œβ”€β”€ ui
449+
β”‚ β”‚ β”œβ”€β”€ detail
429450
β”‚ β”‚ β”‚ └── model.go
430-
β”‚ β”‚ β”œβ”€β”€ editor/
451+
β”‚ β”‚ β”œβ”€β”€ editor
431452
β”‚ β”‚ β”‚ └── model.go
432-
β”‚ β”‚ β”œβ”€β”€ help/
453+
β”‚ β”‚ β”œβ”€β”€ help
433454
β”‚ β”‚ β”‚ └── model.go
434-
β”‚ β”‚ β”œβ”€β”€ keymap/
455+
β”‚ β”‚ β”œβ”€β”€ keymap
435456
β”‚ β”‚ β”‚ β”œβ”€β”€ keymap.go
436457
β”‚ β”‚ β”‚ β”œβ”€β”€ keymap_test.go
437458
β”‚ β”‚ β”‚ β”œβ”€β”€ normalize.go
438459
β”‚ β”‚ β”‚ └── normalize_test.go
439-
β”‚ β”‚ β”œβ”€β”€ palette/
460+
β”‚ β”‚ β”œβ”€β”€ palette
440461
β”‚ β”‚ β”‚ └── model.go
441-
β”‚ β”‚ β”œβ”€β”€ plugin_menu/
462+
β”‚ β”‚ β”œβ”€β”€ plugin_menu
442463
β”‚ β”‚ β”‚ └── model.go
443-
β”‚ β”‚ β”œβ”€β”€ render/
464+
β”‚ β”‚ β”œβ”€β”€ render
444465
β”‚ β”‚ β”‚ β”œβ”€β”€ easing.go
445466
β”‚ β”‚ β”‚ └── render.go
446-
β”‚ β”‚ β”œβ”€β”€ styles/
467+
β”‚ β”‚ β”œβ”€β”€ settings
468+
β”‚ β”‚ β”‚ └── model.go
469+
β”‚ β”‚ β”œβ”€β”€ styles
447470
β”‚ β”‚ β”‚ └── styles.go
448-
β”‚ β”‚ β”œβ”€β”€ tasklist/
471+
β”‚ β”‚ β”œβ”€β”€ tasklist
449472
β”‚ β”‚ β”‚ └── model.go
450-
β”‚ β”‚ β”œβ”€β”€ theme/
473+
β”‚ β”‚ β”œβ”€β”€ theme
451474
β”‚ β”‚ β”‚ └── theme.go
452-
β”‚ β”‚ └── theme_menu/
475+
β”‚ β”‚ └── theme_menu
453476
β”‚ β”‚ └── model.go
454-
β”‚ β”œβ”€β”€ updater/
477+
β”‚ β”œβ”€β”€ updater
455478
β”‚ β”‚ β”œβ”€β”€ checksums.go
456479
β”‚ β”‚ β”œβ”€β”€ download.go
457480
β”‚ β”‚ β”œβ”€β”€ extract.go
458481
β”‚ β”‚ β”œβ”€β”€ github.go
459482
β”‚ β”‚ β”œβ”€β”€ updater.go
460483
β”‚ β”‚ └── windows_helper.go
461-
β”‚ └── util/
484+
β”‚ └── util
462485
β”‚ β”œβ”€β”€ paths.go
463486
β”‚ └── util_test.go
464-
β”œβ”€β”€ plugins/
487+
β”œβ”€β”€ LICENSE
488+
β”œβ”€β”€ Makefile
489+
β”œβ”€β”€ plugins
465490
β”‚ β”œβ”€β”€ auto-cleanup.lua
466491
β”‚ β”œβ”€β”€ auto-tagger.lua
467492
β”‚ β”œβ”€β”€ sample.lua
468493
β”‚ └── task-logger.lua
469-
β”œβ”€β”€ screenshots/
494+
β”œβ”€β”€ README.md
495+
β”œβ”€β”€ screenshots
470496
β”‚ └── demo.gif
471-
β”œβ”€β”€ scripts/
497+
β”œβ”€β”€ scripts
472498
β”‚ β”œβ”€β”€ install.ps1
473499
β”‚ └── install.sh
474-
β”œβ”€β”€ local/
475-
β”‚ └── demo_preset.json
476-
β”œβ”€β”€ .gitignore
477-
β”œβ”€β”€ .goreleaser.yaml
478-
β”œβ”€β”€ CHANGELOG.md
479-
β”œβ”€β”€ go.mod
480-
β”œβ”€β”€ go.sum
481-
β”œβ”€β”€ LICENSE
482-
β”œβ”€β”€ Makefile
483-
β”œβ”€β”€ README.md
500+
β”œβ”€β”€ SECURITY.md
484501
└── VERSION.txt
485502
```
486503

β€ŽVERSION.txtβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.2.2
1+
1.2.3

0 commit comments

Comments
Β (0)