Packbase is a social product organised around people, packs, howls, feeds, and tags.
- A pack is a group with members, roles, permissions, feeds, and pack-owned context.
- A howl is a post. Replies, reactions, rehowls, ratings, tags, and media attach to that model.
- A feed is a server-defined ordered view such as
universe:homeor a pack topic. - A tag can exist on a howl even when it has no curated registry entry. Registering a tag adds maintained title and description metadata; deleting that metadata does not erase tags from howls.
- A profile is the server-owned current account identity and settings surface. Clerk authenticates a browser session; Packbase remains the source for product profile data and permissions.
The main path
Browser route
→ React route and feature component
→ Packbase hook and TanStack Query cache
→ published Packbase TypeScript SDK
→ Packbase HTTP route and domain logic
→ PostgreSQL, object storage, or an in-process workerFor an HTML navigation in the deployed web app, the Cloudflare Worker also calls the server’s /context endpoint before serving the application. That path supplies route-specific metadata and maintenance information; it is separate from the browser SDK request that renders product data.
Find the owner of a change
| Desired change | Begin in | Check next |
|---|---|---|
| Layout, copy, interaction, route state | Packbase web route or feature component | Shared UI primitive, accessibility, Lingui catalog, Storybook. |
| Reading or mutating Packbase data in the browser | src/hooks/packbase in the web repository | Published SDK capability, query key, invalidation, auth scope. |
| Validation, authorisation, or domain result | Matching route group in apps/server/src/routes | TypeBox schema, domain helper, Prisma query, focused test. |
| New public HTTP path | Server route registry | Static route contract and SDK compatibility. |
| Delayed howl, gossip, import, cleanup, or cache effect | Server background worker | Durability, retry, partial completion, shutdown drain. |
| Table, relation, or backfill | Split Prisma schema or run-on-boot migration | Disposable database, schema diff, release plan. |
| Share metadata or maintenance screen | Server /context or /server/describeServer and web Worker/app | Both configured API URLs and failure fallbacks. |
| Staff or moderator interface | Packbase web | Server-enforced permission and existing /admin or product route. |
Contracts cross repositories
The web repository pins a published @packbase/sdk-ts version. A server response can be valid and still be unusable by the web client until the SDK understands it. A client-side role check can hide a control and still provide no security unless the server independently enforces the action.
For changes across those boundaries, use the cross-repository workflow.
Source visibility is not production permission
Reading source or running a local instance does not grant access to Packbase production data, Clerk, storage, Cloudflare, or moderation powers. Use isolated development services and the access rules.