Skip to content

[EPIC] GitDog for Mac — pixel dog in the menu bar #1

@realproject7

Description

@realproject7

Vision

RunCat-style menu-bar-only Swift app for reviewers: an animated pixel dog lives in the menu bar; occasionally a paid repo-review request arrives; the reviewer answers 3 prompts in the popover and earns Treats. No Dock icon, no separate window — everything in the NSPopover.

Surface split (locked)

Reviewers live ONLY in this popover. Senders (paying side) live on the web (Steemhunt/gitdog). The popover's "New Request" link opens the web dashboard in the browser.

Stack & constraints

  • Swift native, NSStatusItem (frame-cycled template images) + NSPopover hosting SwiftUI (NSHostingView), LSUIElement=YES
  • This repo is PUBLIC and open source: NO secrets; talks only to the server's /api/v1 with the user's token
  • Latest stable Swift/Xcode; no overengineering, DRY
  • Server API contract: Steemhunt/gitdog docs/api-v1.md
  • Design package: ~/Projects/z-design/gitdog-design/ (local) · ~/projects/z-design/gitdog/ (VPS) — 4 popover screens at 360px (popover.html = spec incl. colors/spacing), monochrome sprite strips (sleep/arrived/wag/run), brand tokens (navy #1a2440, cream #f5ead9, orange #e8943d, green #3fae6a, Press Start 2P + DM Mono)

Gates (LAST)

Apple Developer ID signing/notarization/DMG; production API base URL.

Amendments after ticket review

  • Style gate note: owner picked pixel style (design Phase 0) and approved brand tokens (Phase 3) on 2026-06-11 — proposal §12 gates are PASSED, not pending. UI body font = SF Pro Rounded; Press Start 2P for accents/badges only (matches design/app-ui/popover.html)

Engineering policy: no mock/temp/stub code (binding)

Every PR ships the production implementation of its scope. Concretely:

  1. BANNED in merged code: TODO/FIXME/HACK comments deferring functionality; functions returning hardcoded/sample data; if (dev) return fakeX; commented-out "real" paths; placeholder UI text/images standing in for unimplemented features; "will be replaced by/when" comments. CI greps for TODO|FIXME|HACK|placeholder|mock outside test dirs; any hit must be justified in the PR description.
  2. Mocks/fakes live ONLY in test code (__tests__, *.test.ts, Swift test targets) and the dev seed script. Application code never imports them.
  3. If an external dependency is unavailable locally, the ticket names the substitute (local Postgres, Base Sepolia, dev-mode auth). The substitute is reached through the SAME code path as production — only env config differs. Never a parallel fake code path.
  4. Dev-mode auth is NOT a mock: it is a complete, tested auth module behind the same interface real OAuth implements — real GitHub public-data fetch, real score, real session. It only skips the OAuth handshake.
  5. If a ticket cannot be completed for real, STOP and comment on the issue asking for a decision — do not merge a partial implementation with stubs. A smaller fully-working scope beats a full-width stubbed one.
  6. Acceptance criteria are executable: every AC is demonstrated by a test or a reproducible command documented in the PR description.
  7. Reviewers: any rule 1–4 violation = REQUEST CHANGES, regardless of how good the rest of the PR is.

Design assets on the QuadWork VPS

Design package mirror for VPS agents: ~/projects/z-design/gitdog/ (breeds/, icons/, scorecard/, app-ui/, web/, docs/ incl. both proposals + design README). Same content as this repo's design/ + docs/ (PR #17). Use local paths — do not re-download from GitHub.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions