GTM reviewer round 1 (baseline: positioning 6, funnel 4, open-paid 8,
community 3, launch 3, metrics 2; 3 blockers + 3 majors, all repo-fixable):
- TRUTH: removed the false 'no server required' claim (x3 on the
website) and stale 'S3/GCS directly' sync claims in both plugin
manifests — hub-only since v0.3.0
- POSITIONING: one line everywhere ('the open-source Google Drive for
AI agents' + the attribution/read-analytics wedge) across README,
website, marketplace.json, plugin.json, SKILL.md; third 'Why' card
and AGPL-why rationale; nav CTA → Star on GitHub
- COMMUNITY: CONTRIBUTING.md, issue forms + PR template, public dated
ROADMAP.md, CHANGELOG.md seeded from all 8 releases
- DEMO ASSETS: real product screenshots captured from the seeded demo
hub (Insights treemap, browse-with-heat, public share page) embedded
in README + website — no fabricated content anywhere
- DOCS: self-hosting quickstart, metrics plan (north star: active
shared brains), launch-plan drafts (Show HN/PH/launch week), and
docs/gtm-handoff.md — the prioritized external-action checklist
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P5cxPQdSGJnjXCYY9GeWXt
2.6 KiB
Contributing to BearDrive
Thanks for wanting to help. BearDrive is early (pre-1.0) and moving fast — small, focused PRs land quickest, and an issue or discussion before a big change saves everyone time.
Build & test
go build ./... # everything, no CGO, no Node needed
go vet ./...
go test ./... # full suite
go test ./internal/syncer -run TestConflict -v # one test
Set BDRIVE_HOME=/some/tmp/dir when testing the CLI by hand so you never
touch your real ~/.bdrive.
Run a local hub
go build -o bdrive ./cmd/bdrive
mkdir -p /tmp/hub-storage
./bdrive web /tmp/hub-storage --addr :8080 --upload # plain-folder viewer
For hub mode with accounts, see the self-hosting guide
(docs/self-hosting.md). The e2e test harness
(BDRIVE_E2E_SERVE=1 go test -run TestE2EServe ./internal/webapp) starts a
seeded hub on :8993 with test accounts — handy for frontend work.
The rules that matter here
- Sync changes need multi-device tests. The real coverage lives in
internal/syncer/syncer_test.go: simulated devices syncing through a shared remote, driven cycle by cycle. A new sync behavior without a multi-device test is untested where it matters. - Never break sync. Errors degrade to offline and retry next cycle;
a cycle must not fail because a side feature (telemetry, hooks) did.
Read the invariants section in CLAUDE.md before touching
internal/syncer,internal/journal, orinternal/store— replay determinism and journal ownership are the whole concurrency story. - Frontend changes rebuild the committed assets. The web UI lives in
internal/webapp/frontend(React + TS, Vite); its build output is committed atinternal/webapp/staticsogo buildneeds no Node. After changingfrontend/src:npm run build, commit the newstatic/, and keepnpm run e2egreen.frontend/check-dist.shverifies freshness. - Docs travel with behavior. Changing CLI commands, flags, or output
means updating both
README.mdandplugin/skills/beardrive/SKILL.md— the skill is what makes agents beardrive-aware and must match the binary.
Where to start
ROADMAP.md marks items we'd love help with, and issues
labeled good first issue / help wanted are curated to be approachable.
Bug reports with a reproduction (the issue form asks for bdrive version,
OS, and hub vs plain-folder mode) are gold.
Conduct
Be kind, be direct, assume good intent. Maintainers reserve the right to moderate. Security issues: email snow@runbear.io rather than opening a public issue.