Skip to content

Add interactive splash screen (ASCII header + command menu) #50

Description

@jdwit

Summary

Add an interactive splash screen shown when ytstudio is run with no command (and optionally behind a ytstudio / ytstudio menu entrypoint). It gives the tool a recognizable header and turns the bare CLI into a friendly launcher: an ASCII logo + wordmark, a one-line tagline, the current auth/profile state, and an arrow-key menu of the top-level command groups with short descriptions.

This keeps the tool fully scriptable (every command stays available non-interactively) while giving humans a nicer entry point. AI-agent usage is unaffected: the splash only renders for an interactive TTY with no subcommand.

Proposed ASCII layout

True ASCII (no Unicode block/box glyphs) so it renders identically across terminals and fonts. Logo (play button) on the left, wordmark on the right, mirroring a typical TUI header:

  +-----------+    __   _______   ____ _____ _   _ ____ ___ ___
  |  |\       |    \ \ / /_   _| / ___|_   _| | | |  _ \_ _/ _ \
  |  | \      |     \ V /  | |   \___ \ | | | | | | | | | | | | |
  |  |  >     |      | |   | |    ___) || | | |_| | |_| | | |_| |
  |  | /      |      |_|   |_|   |____/ |_|  \___/|____/___\___/
  |  |/       |    manage & analyze your YouTube channel from the terminal
  +-----------+

Below the header: a status line, the prompt, and the selectable menu. The > marks the
highlighted row; the command name is bold, the description dimmed:

  Signed in as @channelhandle    |    profile: default

  What would you like to do?

> Videos        - bulk update, upload, search-replace metadata
  Analytics     - channel & video performance queries
  Comments      - list, reply, approve, reject, ban
  Livestreams   - schedule, start, stop, update broadcasts
  Playlists     - bulk-add by search, reorder by views
  Profile       - switch or manage channel profiles
  Status        - show auth & current configuration
  Quit

Selecting an item either runs the simple command directly (Status, Quit) or drops into that
group's own help/submenu (Videos, Analytics, ...). Menu items map 1:1 to the existing top-level
commands, so nothing new has to be wired into the command tree.

Not-yet-authenticated state

When there are no credentials/active profile, surface onboarding first instead of the channel menu:

  Not signed in.

  What would you like to do?

> Init          - set up Google OAuth credentials
  Login         - authenticate with YouTube
  Quit

Behavior / scope

  • Render the splash only when: stdout is a TTY and no subcommand was given. Otherwise behave exactly as today (so pipes, CI, and agents are unaffected).
  • Add a --no-splash / YTSTUDIO_NO_SPLASH=1 escape hatch, and keep ytstudio --help as the plain Typer help (unchanged).
  • Menu selection: arrow keys + enter; also accept first-letter / number shortcuts. q or Ctrl-C quits cleanly.
  • Colors via the existing Rich/terminal styling; degrade gracefully with NO_COLOR.
  • The exact figlet wordmark + play-button glyphs above are a starting point; open to refinement (e.g. a tighter logo, or a "YouTube red" accent on the wordmark).

Open questions

  • Standalone entrypoint: splash on bare ytstudio, or a dedicated ytstudio menu, or both?
  • Should the status line do a (cached) channel-handle lookup, or stay purely local config to avoid an API call on startup?
  • Wordmark text: YTSTUDIO (one word, as above) vs YT STUDIO (two words)?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions