Commit Graph
148 Commits
Author SHA1 Message Date
Snow LeeandClaude Fable 5 fad9ae4f6b feat(web): react-table admin tables + RHF/zod forms; docs reflect the Stack A dependency set
Members and shares-audit render through @tanstack/react-table (sortable,
spec-first); org rename, hub signup policy, and onboarding create/join are
react-hook-form + zod with inline errors replacing toast-on-typo. 55/55.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-19 13:15:24 -07:00
Snow LeeandClaude Fable 5 2e835d266d feat(web): file tree virtualized with @tanstack/react-virtual
Only the visible window renders (collapsed subtrees not at all — the ~5k-file
DOM cliff from the CTO review is gone). Flat rows keep data-path/.active
contract, nesting guide lines, mobile 44px rows; scroll-into-view moves into
FileTree via scrollToIndex. Fold behavior pinned by spec first. 54/54.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-19 13:08:39 -07:00
Snow LeeandClaude Fable 5 2993049bf4 feat(web): buttons on shadcn Button — house variants (primary/danger/subtle/toolbar) keep the exact look
cva variants map to the existing .pbtn/.danger-btn/.ai-btn/.btn classes, so
style.css owns appearance while shadcn adds focus-ring/disabled plumbing.
Migrated: modals, ShareDialog, EmptyState, Browser topbar. 53/53.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-19 13:05:13 -07:00
Snow LeeandClaude Fable 5 b7ce76b72e feat(web): palette on cmdk in a Radix Dialog — house fuzzy scorer kept (shouldFilter=false)
cmdk owns keyboard nav/selection/aria; matching, stemming, highlighting and
ordering unchanged. Specs target #palette input (cmdk owns the input id).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-19 12:57:08 -07:00
Snow LeeandClaude Fable 5 4a4e13f14c feat(web): modals on Radix Dialog — same imperative API, same classes, Radix-owned dismissal
modalPrompt/modalConfirm/ShareDialog render in DialogContent (.modal kept for
specs/styling); Escape pinned by spec first.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-19 12:51:59 -07:00
Snow LeeandClaude Fable 5 cb06737af7 feat(web): project switcher on shadcn Select — specs moved to behavioral contract first
Trigger keeps #project-select + proj-mark; items portal'd with keyboard nav
from Radix; picking navigates (spec: open, both projects listed, pick → URL).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-19 12:49:19 -07:00
Snow LeeandClaude Fable 5 c1db12e75e feat(web): account menu on Radix DropdownMenu (non-modal for legacy click-through parity)
Ids preserved (#account-btn/#account-menu/#menu-*/#signout); Radix owns
Escape/outside dismissal + focus; dismissal behavior pinned by spec first.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-19 12:47:47 -07:00
Snow LeeandClaude Fable 5 fe8911861c feat(web): search tooltip on Radix (shadcn) — portal'd, house-styled tipcard; provider at root
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-19 12:39:33 -07:00
Snow LeeandClaude Fable 5 65c4a29bf8 feat(web): toasts on sonner behind the same toast() API; specs pin behavior via expectToast
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-19 12:37:46 -07:00
Snow LeeandClaude Fable 5 407c443a40 feat(web): Stack A foundation — Tailwind v4 + shadcn/ui wired, zero visual change
Tailwind v4 via @tailwindcss/vite, theme+utilities only (no preflight) so
legacy style.css keeps owning base styles during migration; BearDrive tokens
mapped into @theme incl. shadcn semantic slots (primary=honey, popover=raise…).
shadcn components copied in (button, tooltip, dropdown-menu, dialog, select,
command, sonner, input, label, form, table) with radix-ui/cmdk/sonner/cva;
sonner pinned dark (next-themes dropped). Stack A libs installed:
react-virtual, react-table, react-hook-form + zod. 50/50 e2e unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-19 12:34:52 -07:00
Snow W. Lee (Sungwon)andGitHub 6826de29ee Merge pull request #34 from runbear-io/feat/nav-lucide-redesign
feat(web): nav redesign — lucide icons, project settings in header, workspace actions in org bar
2026-07-19 11:52:12 -07:00
Snow LeeandClaude Fable 5 703dda4dbd agents: beardrive-cto — architecture/reusability/scalability reviewer for backend + frontend
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-19 11:49:45 -07:00
Snow LeeandClaude Fable 5 4c59bbc794 fix(web): search tooltip painted under the section border — lift the header's stacking context
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-19 11:44:59 -07:00
Snow LeeandClaude Fable 5 7ddb211fcf feat(web): scoped insights/history keep the file or folder selected in the tree
On /insights/<path> and /history/<path> the tree highlights (and unfolds to)
the target; Dashboard/History menu items light up only for their root,
project-wide views. 50/50 e2e.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-19 11:41:35 -07:00
Snow LeeandClaude Fable 5 d18ad1fa91 test(web): regression specs — ⋯ Insights scopes to the open file and selected folder
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-19 11:36:56 -07:00
Snow LeeandClaude Fable 5 288b426e82 fix(web): search tooltip clipped by the sidebar edge — right-align it
#sidebar is overflow:hidden; the centered card poked past its right edge.
The tooltip now grows leftward from the button, arrow anchored beneath it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-19 11:27:01 -07:00
Snow LeeandClaude Fable 5 3f974d96e4 feat(web): search moves beside the brand in the sidebar header, with a ⌘K hover tooltip
Icon-only trigger in the vault header (Linear-style); a tiny search.ts
emitter asks Browser's palette to open — no plumbing through the shell.
Custom tooltip card (label + kbd chip, arrow) on hover/focus. Topbar search
and its centered styles removed. 47/47 e2e incl. header-trigger spec.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-19 11:24:07 -07:00
Snow LeeandClaude Fable 5 75f2b0bfe9 feat(web): topbar cleanup — centered 2x search, icon-only Share, History/Download into the ⋯ menu
- search control sits centered in the topbar at ~2x width, kbd right-aligned
  (static again on mobile)
- Share is icon-only
- History button shows only on the project home: gone from dashboard/history
  (and other view routes) and whenever a file/folder is selected — the ⋯
  menu and sidebar carry it
- Download is ⋯-menu-only; a hidden anchor keeps the browser download flow
46/46 e2e.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-19 11:16:50 -07:00
Snow LeeandClaude Fable 5 317045cecb feat(web): History in the project menu, after Installation
Navigates to the existing /history route; active state follows the URL.
46/46 e2e.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-19 11:07:14 -07:00
Snow LeeandClaude Fable 5 bacb528de6 feat(web): Installation and Settings are real routes; every page owns a URL
/<pid>/install and /<pid>/settings join /insights and /history as view
routes — deep links, reload, and back/forward work; the sidebar menu
navigates instead of toggling panel state. Rule recorded in CLAUDE.md:
new surfaces are view routes, never URL-less panels (org/hub admin panels
are the legacy exceptions). 46/46 e2e incl. deep-link spec.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-19 10:51:25 -07:00
Snow LeeandClaude Fable 5 e894f4ced9 fix(web): Dashboard menu dead after opening a panel on the insights route
Panels are not routes: navigating to the already-current /insights URL never
changes pathname, so the route-change effect couldn't close the open panel.
Menu Dashboard (and the ⋯ Insights entry) now close the panel explicitly.
Regression spec added; 46/46.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-19 10:47:23 -07:00
Snow LeeandClaude Fable 5 7a41a9e5b6 feat(web): project menu in the sidebar — Dashboard, Installation, Settings
Under the project dropdown: Dashboard (project insights), Installation
(connect guide, moved out of Settings), Settings (project facts). Active
states follow the open view/panel; the inline gear next to the dropdown is
gone. 46/46 e2e.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-19 09:58:48 -07:00
Snow LeeandClaude Fable 5 3698d70f68 feat(web): insights scoped to the selected file or folder
The ⋯ menu's Insights opens /insights/<current path>: a folder scopes the
treemap/scatter/hot-path/agent-coverage to its subtree, a file to itself;
crumb and title show the scope. urlForView now carries targets for insights
like it did for history. 45/45 e2e.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-19 09:51:07 -07:00
Snow LeeandClaude Fable 5 51ce477b07 feat(web): remove browser upload UI — content enters via local sync only (for now)
Topbar button, ⋯ menu entry, palette action, hidden file input, and the
upload plumbing (upload.ts) are gone; the server upload API stays (devices
and the store proxy depend on it). Spec reworked to seed via API and assert
the affordance is absent. 44/44 green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-19 09:48:17 -07:00
Snow LeeandClaude Fable 5 40a0b19aa4 feat(web): PropelAuth-style sidebar layout — brand header, project dropdown, account menu
- header is the brand only (BearDrive), linking home
- Projects section is a dropdown (native select, styled) with the project
  mark, plus the project-settings gear beside it and + to create
- sidebar footer is the account row (avatar, name, email) opening a popover:
  Organization → <org> Settings, Hub → Signup & access (admins), Account →
  Log out (danger red)
- volume mode unchanged (sign-out stays in its header)
- Playwright suite reworked for the new layout — 44/44 green; static rebuilt

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-19 09:42:30 -07:00
Snow LeeandClaude Fable 5 77735660c9 feat(web): nav redesign — lucide icons; project settings in header, workspace gear + sign-out in org bar
Design feedback applied:
- icons are lucide-react (lucide.dev) behind the existing <Icon name> API;
  the inline SVG sprite is gone
- org bar (sidebar footer): the Manage text button is a gear icon opening
  the org admin panel; sign-out moved here, after the gear
- header: the org-manage (people) button is removed; the header gear now
  opens a new per-PROJECT settings panel (identity facts + connect guide);
  sign-out stays in the header only when no project/org bar is present
  (volume mode, loading, empty state)

Playwright suite updated and green (44/44); static/ rebuilt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-19 09:25:22 -07:00
Snow W. Lee (Sungwon)andGitHub fce5cdb670 Merge pull request #4 from runbear-io/dependabot/go_modules/go_modules-a3c8a40308
build(deps): Bump golang.org/x/crypto from 0.51.0 to 0.52.0 in the go_modules group across 1 directory
2026-07-19 09:04:16 -07:00
Snow W. Lee (Sungwon)andGitHub 30d7c956ad Merge pull request #30 from runbear-io/feat/web-404-html
Viewer: friendly 404 with uploading hint; HTML files render as sandboxed pages
2026-07-19 09:04:12 -07:00
Snow W. Lee (Sungwon)andGitHub 4617a73e93 Merge pull request #29 from runbear-io/chore/changelog-080
Changelog: v0.7.1 and v0.8.0
2026-07-19 09:04:09 -07:00
Snow W. Lee (Sungwon)andGitHub 93e61d42ad Merge pull request #32 from runbear-io/feat/plugin-agent-first-onboarding
feat(plugin): agent-first onboarding — cloud-default login, wiki auto-detection, payoff link
2026-07-18 21:59:34 -07:00
Snow W. Lee (Sungwon)andGitHub 9cdf17353a Merge pull request #33 from runbear-io/fix/log-account-attribution
fix(cli): log/status show signed-in account, not git author fallback
2026-07-18 21:59:31 -07:00
Snow W. Lee (Sungwon)andGitHub 388130afd8 Merge pull request #31 from runbear-io/chore/gitignore-cloud
chore: gitignore /cloud/ (private beardrive-cloud nested repo)
2026-07-18 21:59:28 -07:00
Snow LeeandClaude Fable 5 a6ee5aa75e docs+skill: fold live-e2e findings into onboarding docs; add onboarding-e2e skill
From the first agent-conversation e2e against a live hub:
- install.md: git handoff for tracked knowledge folders (one transport per
  folder), .bdrive//.bdriveignore git guidance, Hermes per-user hook warning,
  drop stale share--list aside
- SKILL.md: .bdriveignore is local-only on --shared mounts (root file sits
  outside the include list) — doc now matches behavior
- new project skill .claude/skills/onboarding-e2e: reusable procedure to
  re-run the conversation-level e2e (staging, instruction materialization,
  agent prompt contract, verification, pass bar)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-18 21:25:35 -07:00
Snow LeeandClaude Fable 5 a16580b300 fix(cli): log and status show the signed-in account, not the git author fallback
bdrive log preferred Op.Author (git/OS identity) even when the op carried the
hub account (Op.User/UserName), so team history showed local git emails.
Found by the agent-onboarding live e2e: device signed in as e2e-bot showed
snow@runbear.io in log. Now: UserName → User → Author. bdrive status likewise
shows 'signed in as Name <email>' when a session exists.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-18 21:24:00 -07:00
Snow LeeandClaude Fable 5 66f7a98fcc feat(plugin): agent-first onboarding — cloud-default login, wiki auto-detection, hub-URL payoff
- login copy across README/skill/commands: bare `bdrive login` (BearDrive
  Cloud) is the default; signup auto-creates a free personal workspace,
  pending invites route into the team; self-hosted hubs pass a URL
- init flows propose a detected knowledge folder (wiki/docs/notes/handbook/
  vault) as --shared instead of asking open-endedly; repo-root rule restated
- install always ends by handing the user a `bdrive url` link to a
  representative page — the activation moment

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-18 16:25:13 -07:00
Snow LeeandClaude Fable 5 5d7272c39d chore: gitignore /cloud/ (private beardrive-cloud nested repo)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbiaaVM2ACxeRi8ySG9ybc
2026-07-17 11:16:11 -07:00
Snow LeeandClaude Fable 5 cb621c153e feat(web): friendly 404 for missing paths; HTML files render as sandboxed pages
Two viewer features plus the security fix the second one surfaced:

- Missing file/folder paths now get a not-found view: the path, and the
  hint that a just-created file may still be uploading or syncing from a
  teammate's device — the tree polls every few seconds so it appears on
  its own, plus a Check again button that refetches immediately. The
  topbar's share/download actions no longer show for nonexistent files.

- Opening an .html file renders it as a page (sandboxed iframe,
  allow-scripts only) instead of showing source text.

- SECURITY: /api/file was already serving synced HTML inline as
  text/html on the hub origin with session cookies — a stored-XSS
  surface reachable by direct navigation, previously masked only by the
  viewer showing HTML as text. Inline HTML and SVG responses now carry
  'Content-Security-Policy: sandbox allow-scripts' (the same wall as
  /s/* share pages); downloads are exempt (attachments never execute in
  the hub origin).

Tests: Go CSP-header matrix (html/svg sandboxed, md clean, download
exempt); e2e: sandboxed-iframe rendering incl. in-frame content + CSP
assertion, and the not-found → late-upload → Check again flow. 44 specs
green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P5cxPQdSGJnjXCYY9GeWXt
2026-07-16 11:01:38 -07:00
Snow LeeandClaude Fable 5 a80a0d42ee docs: changelog entries for v0.7.1 and v0.8.0
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P5cxPQdSGJnjXCYY9GeWXt
2026-07-16 10:31:36 -07:00
Snow W. Lee (Sungwon)andGitHub 01902d435f Merge pull request #28 from runbear-io/feat/link-convention-hook
Gated hub links on every mentioned file path, injected fresh each turn
v0.8.0
2026-07-16 10:30:11 -07:00
Snow LeeandClaude Fable 5 3cb39ebf35 docs: --hook flag in README/SKILL command tables + CLAUDE.md plugin note
The docs-sync rule: CLI flag changes update both README and SKILL.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P5cxPQdSGJnjXCYY9GeWXt
2026-07-16 10:28:25 -07:00
Snow LeeandClaude Fable 5 644caff70e feat(hooks): every mentioned file path gets a gated hub link — formula injected each turn
Field report follow-up: an agent with a stale skill copy couldn't find
the gated URL after creating a file. Instructions rot; hook output is
computed fresh from the binary every turn. Claude Code's turn-start
pull hook now runs 'bdrive sync --hook claude-code', which:

- pulls as before, and stamps the session note from the event JSON
  (replacing the sh/sed pipeline for the pull leg)
- emits the project's gated-link formula as UserPromptSubmit
  additionalContext: whenever the agent mentions a synced file path in
  prose, it appends the hub link on an emoji — `<path>` [🔗](<url>) —
  path plain (it's the local path), hyperlink on the emoji only; code
  blocks stay plain; bdrive share stays explicit-opt-in-public

Blind-tested: an agent given only the injected context decorated every
path mention correctly, kept the code-block command plain, and checked
files were synced before linking.

- hooks install now CONVERGES marker-identified groups to the current
  shape (command/matcher/flags), so improvements reach existing
  projects on reinstall instead of being frozen by the idempotency
  marker; hermes same
- plugin: UserPromptSubmit → beardrive-pull.sh (stdout passes through);
  version 0.3.0
- SKILL 'Share what you make' generalized to 'Link what you mention'
  (URL formula documented for non-Claude platforms); install.md pointer
  template updated

Never fails the turn: every error path in --hook mode is a silent
successful exit; offline still emits (links serve online teammates).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P5cxPQdSGJnjXCYY9GeWXt
2026-07-16 10:25:07 -07:00
Snow W. Lee (Sungwon)andGitHub 99ffe1156a Merge pull request #27 from runbear-io/chore/plugin-0.2.0
chore(plugin): bump plugin version to 0.2.0
2026-07-15 16:34:36 -07:00
Snow LeeandClaude Fable 5 f93aba401b chore(plugin): bump plugin version to 0.2.0
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 16:33:01 -07:00
Snow W. Lee (Sungwon)andGitHub e42778d4cf Merge pull request #26 from runbear-io/feat/frontmatter-table
Render markdown frontmatter as a key/value table
v0.7.1
2026-07-15 16:18:01 -07:00
Snow W. Lee (Sungwon)andGitHub cd72ee5e63 Merge pull request #25 from runbear-io/fix/landing-gated-link
Landing chat mockup: gated team link by default, public only on request
2026-07-15 16:17:58 -07:00
Snow LeeandClaude Fable 5 364ba187a2 feat(web): render markdown frontmatter as a key/value table
A leading YAML frontmatter block used to render as goldmark's
thematic-break soup (hr + stray text). It now renders as a compact
table: keys in the author's order (yaml.Node, not a map), flat lists
comma-joined, nested values as compact YAML in <code>, everything
HTML-escaped. Anything that isn't a well-formed YAML mapping — mid-doc
fences, unclosed fences, list-shaped or invalid YAML — falls through
and renders exactly as before; empty frontmatter is simply hidden.

Applies everywhere the server renders markdown: the hub viewer and
public share pages, each with theme-matched styling. Matters most for
OKF/gbrain-style frontmattered knowledge bases.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P5cxPQdSGJnjXCYY9GeWXt
2026-07-15 16:17:08 -07:00
Snow LeeandClaude Fable 5 a3729da5db fix(website): the chat mockup demos the gated link, not an unasked public one
'Share with the team' must show the product's actual default: the
permission-walled bdrive url viewer link (sign-in + membership), with
the public /s/ link as an explicit opt-in — matching the skill's
'Share what you make' rule shipped in v0.7.0. The old mockup had Claude
minting a public link unasked, contradicting the shipped behavior.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P5cxPQdSGJnjXCYY9GeWXt
2026-07-15 16:04:15 -07:00
Snow W. Lee (Sungwon)andGitHub 22c3ebbf0e Merge pull request #24 from runbear-io/feat/gtm-readiness
GTM readiness: reviewer-scored launch prep (6 rounds → 9/8/9/9/8/9 ×2)
2026-07-15 15:58:11 -07:00
Snow LeeandClaude Fable 5 bc872aa603 feat(gtm): landing-page growth fixes — resolvable og:image, real proof over mockups
From the reviewer's focused 'good enough to grow?' pass:
- og:image now points at raw.githubusercontent (resolves today;
  beardrive.ai doesn't yet) with width/height so link-preview cards —
  the top of a reshare-driven funnel — actually render
- the two real, previously-unused screenshots are embedded: browse.png
  (read heat + change feed) under the how-it-works architecture card,
  share.png inside the Share-by-URL step — real proof next to the
  stylized mockups

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P5cxPQdSGJnjXCYY9GeWXt
2026-07-15 15:40:00 -07:00
Snow LeeandClaude Fable 5 9c8c782330 feat(gtm): round 6 — confirmation pass, goal complete; post-exit polish
Rounds 5 and 6 both scored 9/8/9/9/8/9 with zero repo-fixable
blocker/major findings — the exit bar (two consecutive passes) is met.
Round 6 truth-verified the loop's copy against the code (commands,
Insights sections, hook platforms, url format — all accurate; zero
fabricated proof). Post-exit optional minors applied: og:image +
twitter card meta on the site, SKILL login-cell waitlist parity.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P5cxPQdSGJnjXCYY9GeWXt
2026-07-15 12:27:54 -07:00