···11-This repo contains `pad`, a Go CLI/TUI that helps teams draft, repeat, review, and publish async daily standup updates as GitHub issues with less manual copy/paste.
11+This repo contains `pad`, a Go CLI/TUI that helps teams draft, repeat, review, and publish daily standup updates as GitHub issues with less manual copy/paste.
2233## Stack
44···66- CLI: `github.com/spf13/cobra`
77- Simple terminal UI: `github.com/charmbracelet/bubbletea`
88- GitHub integration for the first iterations: `gh` CLI, so the app can reuse the user's existing GitHub auth
99-- Local storage: config only in the user's config directory; async daily history is read from GitHub
99+- Local storage: config only in the user's config directory; daily update history is read from GitHub
1010- Database: none for now; only introduce SQLite if plain files become a real limitation
11111212## Release Versioning
···2828- 2026-04-16: Initial GitHub issue creation goes through `gh` instead of direct API calls so setup stays simple and users can rely on existing GitHub authentication.
2929- 2026-04-16: Go's `os.UserConfigDir()` does not honor `XDG_CONFIG_HOME` on macOS. Keep `pad` on explicit env-aware path helpers so tests and local overrides can isolate config/data cleanly.
3030- 2026-04-16: `gh` authentication depends on its normal config home. If tests or wrappers override `XDG_CONFIG_HOME`, remote commands like `pad list` and remote `pad show` will not see existing `gh auth login` state unless that config is also made available.
3131-- 2026-04-16: `pad repeat` now pre-fills from the latest GitHub async-daily issue by the authenticated user instead of reading local JSON entries.
3131+- 2026-04-16: `pad repeat` now pre-fills from the latest GitHub daily update issue by the authenticated user instead of reading local JSON entries.
+13-13
README.md
···4455# pad
6677-`pad` is a small CLI with a simple terminal UI that helps teams draft and publish async daily standup updates without repeating the same manual steps every day.
77+`pad` is a small CLI with a simple terminal UI that helps teams draft and publish daily standup updates without repeating the same manual steps every day.
8899Current first iteration focuses on the fastest useful workflow:
10101111- open a split editor with live preview directly from `pad create`
1212-- prefill from your latest GitHub async daily issue with `pad repeat`
1313-- list your already-published async dailies directly from GitHub with `pad list`
1212+- prefill from your latest GitHub daily update issue with `pad repeat`
1313+- list your already-published daily updates directly from GitHub with `pad list`
1414- read the merged team report issue with `pad report`
1515- preview the rendered GitHub issue body with `pad show` or `pad create --dry-run`
1616- create the GitHub issue in your configured repository with `pad create`
···78787979Copy the issue template from this repository:
80808181-- [`.github/ISSUE_TEMPLATE/async-daily.yml`](.github/ISSUE_TEMPLATE/async-daily.yml)
8181+- [`.github/ISSUE_TEMPLATE/daily-update.yml`](.github/ISSUE_TEMPLATE/daily-update.yml)
82828383-Place it in your repository at the same path. This template defines the structure that `pad` expects when parsing and creating issues.
8383+Place it in your repository at the same path. This template matches the structure that `pad` currently expects when parsing and creating issues.
84848585### 3. (Optional) Set Up Automated Workflows
86868787This repository includes ready-to-use GitHub Actions workflows:
88888989-**Async Daily Reporter** (`.github/workflows/asyncdaily-reporter.yml.example` → rename to `.yml`)
8989+**Publish Team Digest** (`.github/workflows/publish-team-digest.yml.example` → rename to `.yml`)
9090- Collects all daily issues from team members
9191- Generates a merged report with parking lot items highlighted
9292- Closes individual issues after including them in the report
9393- Runs weekdays at 10:45 AM UTC (customize the cron schedule as needed)
94949595-**Async Daily Template Updater** (`.github/workflows/asyncdaily-updater.yml.example` → rename to `.yml`)
9595+**Refresh Daily Update Template** (`.github/workflows/refresh-daily-update-template.yml.example` → rename to `.yml`)
9696- Automatically updates the issue template date to tomorrow
9797- Runs daily at 12:00 PM UTC
98989999To use these workflows:
1001001011011. Copy the workflow files from `.github/workflows/` to your repository (remove `.example` extension)
102102-2. Copy the scripts from `.github/scripts/` to your repository
102102+2. Copy the Python helper scripts from `.github/scripts/` to your repository
1031033. Set up repository variables (optional):
104104- - `ASYNC_DAILY_LABEL`: Label for individual daily issues (default: `async-daily`)
105105- - `ASYNC_DAILY_REPORT_LABEL`: Label for report issues (default: `async-daily/report`)
104104+ - `DAILY_UPDATE_LABEL`: Label for individual updates (default: `daily-update`)
105105+ - `DAILY_REPORT_LABEL`: Label for report issues (default: `daily-update/report`)
1061064. The reporter workflow uses `GITHUB_TOKEN` which is automatically available
107107108108The report issue title follows this format: `[Daily Report] YYYY/MM/DD`
···182182183183## Main Usage
184184185185-Open the async daily editor for today. The left pane shows the template fields, the right pane shows a live preview, and `pad` asks for confirmation before publishing:
185185+Open the daily update editor for today. The left pane shows the template fields, the right pane shows a live preview, and `pad` asks for confirmation before publishing:
186186187187```bash
188188./pad create
189189```
190190191191-Repeat from your latest GitHub async daily issue into today's editor and create a new issue:
191191+Repeat from your latest GitHub daily update issue into today's editor and create a new issue:
192192193193```bash
194194./pad repeat
···220220./pad create --dry-run
221221```
222222223223-List your async daily issues from GitHub:
223223+List your daily update issues from GitHub:
224224225225```bash
226226./pad list
+3-3
cmd/create.go
···55 "errors"
66 "fmt"
7788- "github.com/prefapp/pad/internal/daily"
99- "github.com/prefapp/pad/internal/tui"
108 "github.com/spf13/cobra"
99+ "github.com/vieitesss/pad/internal/daily"
1010+ "github.com/vieitesss/pad/internal/tui"
1111)
12121313func newCreateCmd() *cobra.Command {
···16161717 cmd := &cobra.Command{
1818 Use: "create",
1919- Short: "Open the async daily editor and create the GitHub issue",
1919+ Short: "Open the daily update editor and create the GitHub issue",
2020 RunE: func(cmd *cobra.Command, _ []string) error {
2121 env, err := loadEnv()
2222 if err != nil {
···8899const DateLayout = "2006-01-02"
10101111-const issueTitlePrefix = "[Async Daily] ["
1111+const issueTitlePrefix = "[Daily Update] ["
1212const reportTitlePrefix = "[Daily Report] "
13131414type IssueRef struct {
···128128129129func (e Entry) ValidateForCreate() error {
130130 if strings.TrimSpace(e.Yesterday) == "" {
131131- return fmt.Errorf("yesterday section is required; fill it in with `pad create` or `pad repeat --edit`")
131131+ return fmt.Errorf("yesterday section is required; fill it in with `pad create` or `pad repeat`")
132132 }
133133134134 if strings.TrimSpace(e.Today) == "" {
135135- return fmt.Errorf("today section is required; fill it in with `pad create` or `pad repeat --edit`")
135135+ return fmt.Errorf("today section is required; fill it in with `pad create` or `pad repeat`")
136136 }
137137138138 return nil
+1-1
internal/daily/entry_test.go
···134134}
135135136136func TestDateFromIssueTitle(t *testing.T) {
137137- date, ok := DateFromIssueTitle("[Async Daily] [2026/04/16]")
137137+ date, ok := DateFromIssueTitle("[Daily Update] [2026/04/16]")
138138 if !ok {
139139 t.Fatalf("expected title to parse")
140140 }