Briefs Daily

The reference web client

Briefs Daily is a read-focused Next.js client for viewing items, statuses, and activity history. Work is captured and updated through MCP, while Daily gives people a clear place to review what changed.

What Daily does

Daily is the reference client in client/web/daily. It shows the current item projection and append-only activity history from the Briefs System API. The default workflow is assistant-first: create or update work through MCP, then use Daily to review the result.

The /briefs/new questionnaire is the deliberate human-intake exception. It creates an item through the same System API and activity contract used by the other clients.

Browse the Briefs Daily code on GitHub

A daily driver for durable work

Daily is meant to be the place a person returns to throughout the day. It turns assistant and automation activity into a calm, human-readable work surface: what is open, what changed, what needs attention, and which actor made the change.

The conversation is where work is captured. Daily is where the resulting work is reviewed. That split keeps assistants fast and natural while giving people a stable view that does not disappear when a chat ends.

Typical day
1. Ask an assistant to capture a task or note.
2. The assistant writes an Item through MCP.
3. Open Daily to review the current work queue.
4. Inspect an item's Activity history when context matters.
5. Ask the assistant to update status or details as work moves forward.

Where Daily fits in the repository

Daily is a reference implementation, not a separate product model. It is intentionally thin: the System API owns persistence, @briefs/shared owns the schemas, and MCP owns the assistant-facing write tools.

Repository areaResponsibility
client/web/dailyThe daily-driver web experience and auth/session boundary.
client/mcpAssistant-facing tools for creating, updating, and reading work.
systemREST API, persistence, actor resolution, and activity history.
sharedThe Item, Actor, Activity, and input schemas shared by every client.

Run it locally

From the repository root, start the System API and Daily together:

Terminal
npm ci
npm run dev:system    # API — http://localhost:8001
npm run dev:daily     # Daily — http://localhost:3000

Copy client/web/daily/.env.example to .env.local in the Daily package. Without OAUTH_ISSUER, a non-production process can use the development identity configured by DEV_USER_ID.

Environment variables

VariablePurpose
NEXT_PUBLIC_API_URLSystem API base URL used by the client.
NEXT_PUBLIC_MCP_URLMCP endpoint shown in the Connect flow.
NEXT_PUBLIC_DOCS_URLLink back to the SDK documentation site.
APP_URLDaily origin used to construct the OAuth callback URL.
OAUTH_ISSUEROAuth/OIDC issuer used for production sign-in.
OAUTH_CLIENT_IDOAuth client registration identifier.
SESSION_SECRETSecret used to sign the Daily session cookie.
AUTH_SECRETSecret required by production authentication flows.
DEV_USER_IDLocal development identity when OAuth is disabled.

Authentication

Production Daily uses OAuth 2.1 with PKCE and an email-capable OAuth provider. The provider decides which email addresses are allowed to authenticate; Daily receives the resulting identity and stores a signed session. Configure the callback as:

OAuth callback
https://your-daily-host.example/auth/callback

Daily forwards the session's bearer token to the System API and MCP. When the token is missing or rejected, the client treats the session as unauthenticated and asks the user to sign in again. Production also requires OAUTH_ISSUER, AUTH_SECRET, and a non-default SESSION_SECRET.

How it connects

Server components and actions call the System API. With OAuth enabled, requests use the session bearer token; local development can use the configured development identity instead.

Authenticated API request
GET /api/v1/items
Authorization: Bearer <access-token>

Daily does not need to be hosted for the platform to work. Run it locally, replace it with another client, or use the source as a starting point for a custom web experience.

Customize or replace it

To build another client, keep the contracts stable and choose your own presentation layer. Reuse @briefs/shared for schemas and @briefs/web-shared for UI primitives, then give the new client its own API adapter and environment configuration.

See Build a client for the shared Next.js structure and Quickstart for the complete local setup.