Skip to main content

Runtime and API reference

Verified 13 September 2026 from executable route registration, manifests, lockfiles, deployment workflows, and production probes. Secret values are never part of this reference. This documentation release changes no API schema or TypeScript interface.

Runtime map

SurfaceSource rootPackage/runtime contractMain locked versionsDeployment
AI Lab browserrepository rootpnpm 9.15.4; Node 20+ for tooling; Vite static build; Rust compiled to WASMVite 6.4.2, TypeScript 5.9.3, Three.js 0.170.0, React 18.2.0, Phaser 3.90.0, brain_sim 0.1.0Vercel exepert at app.exepert.com
API, identity, and CMSapi/Hono on Vercel Node; region hnd1; 60-second configured function ceilingHono 4.13.5, Better Auth 1.7.2, OAuth Provider 1.7.2, pg 8.23.0, Jose 6.2.11, Resend 6.26.0, Sharp 0.35.4Same Vercel exepert artifact
Documentationdocs-site/Separate pnpm lockfile; Node 20+; static Docusaurus build copied into root distDocusaurus 3.10.1, Mermaid theme 3.10.1, React 18.3.1, local search 0.45.0https://app.exepert.com/docs
Website and blogapps/landing/Bun 1.3.14; Vercel Node 24.x; isolated Bun lockfile and root directoryNext.js 15.5.24, React 19.2.8, TypeScript 5.9.3, Tailwind CSS 4.2.4, TipTap 3.31.3, Motion 12.38.0, Three.js 0.170.0Vercel exepert-landing at www.exepert.com
Brain Learning Labapps/brain-learning/Bun 1.3.14; Vite static app; Cloudflare Pages Functions; browser Web Worker; compatibility date 2026-09-10React 18.2.0, Vite 6.4.1, TypeScript 5.9.3, Three.js 0.170.0, Playwright 1.60.0Cloudflare exepert-brain-learning at learn.exepert.com
Learning www redirectapps/brain-learning/www-redirect/Cloudflare Worker-compatible JavaScript; same reviewed release workflowNo application dependency graphCloudflare exepert-brain-learning-www
Identity gatewayapps/auth-gateway/Bun 1.3.14 checks; Cloudflare Pages Functions; compatibility date 2026-09-12TypeScript 5.9.3; Wrangler 4.130.0 in deployment workflowsCloudflare exepert-auth-gateway at auth.exepert.com
Portable identity runtimeservices/identity-runtime/ and supabase/functions/brain-identity/Shared identity modules bundled to pinned npm imports; Supabase Deno 2; one database connectionSame Better Auth/Hono/pg identity composition as the Vercel APISupabase Edge Function behind the gateway
Shared data planesupabase/PostgreSQL 17, Data API, Storage, RLS, Realtime, Deno 2 Edge FunctionsSupabase JS 2.106.2; repository CLI 2.102.0; identity workflows pin CLI 2.104.0Supabase managed project

The root browser remains useful without Supabase or Typesense. The Learning Lab remains useful without sign-in, WebGL, or inference. Optional service failure must not block those public shells.

Repository modules

ModuleResponsibility
api/index.tsVercel Web Request entry point; normalizes rewrites and exports the supported HTTP methods.
api/_lib/identity-app-factory.tsRegisters explicit identity, discovery, principal-token, and merge routes, then delegates /api/auth/* to Better Auth.
api/_lib/auth-factory.tsComposes email/password, Google, anonymous identities, CAPTCHA, JWT/JWKS, and OAuth Provider behavior.
api/_lib/cms-routes.ts and cms-service.tsRegisters and implements member-only editorial workflows, revisions, media, publication, and scheduled jobs.
apps/landing/appNext.js website, public blog projection, admin UI, auth/CMS proxy use, RSS, sitemap, and revalidation endpoint.
apps/brain-learning/srcSix lessons, three depth tracks, anatomy/MRI viewers, local progress, deterministic simulation, and release metadata.
apps/brain-learning/functionsLearning session, logout, progress, and tutor Pages API.
apps/auth-gateway/src/handler.tsMethod/path allowlist, 64 KiB body bound, request/response header filtering, gateway authentication, and 12-second upstream timeout.
services/identity-runtime/edge-entry.tsInstantiates the portable identity composition, validates the gateway secret, and enforces the cutover gate.
supabase/migrationsCumulative schema, grants, RLS, stable principals, CMS, learning progress, tutor quotas, and OAuth resource registration.

app.exepert.com identity API

All explicit identity responses disable caching. Non-GET cookie mutations must come from a trusted EXEPERT origin; bearer-authenticated native/API requests are validated by their own token path.

Method and routeAuthenticationHandler and dataSuccess and failure behaviorAvailability
GET /api/auth/configPublicidentity-app-factory; runtime mode, public Turnstile site key, desktop client ID, issuer, and resource200 JSON; server configuration failure becomes 500Live
GET /api/auth/healthPublicIdentity app plus PostgreSQL select 1200 {ok:true}; database/configuration failure becomes 500Live
GET /api/.well-known/oauth-authorization-server/api/authPublicGenerated authorization-server metadata200 JSON with permissive read CORSLive
GET /api/.well-known/oauth-protected-resourcePublicBetter Auth OAuth resource metadata200 JSON with permissive read CORS; provider failure becomes 500Live
POST /api/supabase/tokenBetter Auth session or valid bearer; trusted origin for cookie requestsStable principal lookup plus ES256 bridge signer200 five-minute token and normalized user; unauthenticated 401; policy/origin failure 403Live
POST /api/identity/merge-intentAuthenticated principal; trusted origin for cookie requestsPrivate merge-ticket state201 intent; invalid identity/origin deniedLive
POST /api/identity/mergeAuthenticated member; trusted origin for cookie requestsConsumes bounded JSON merge ticket and merges principal ownership200 {principalId}; invalid body 400; policy/conflict status is preservedLive
POST /api/identity/claim-legacyAuthenticated Better Auth identity; trusted origin for cookie requestsValidates a legacy Supabase access token and adopts its principal200 {principalId}; invalid body 400; unauthorized/conflicting claims are deniedLive
`GETPOST /api/auth/*`Endpoint-specificBetter Auth handler with versioned-session overlapBetter Auth status/body; prior valid session secrets are re-signed with the current secret when appropriate

Vercel also exposes the two standards paths /.well-known/oauth-authorization-server/api/auth and /.well-known/oauth-protected-resource/api; vercel.json rewrites them to the explicit handlers above.

Better Auth-generated capability groups

Better Auth 1.7.2 owns the catch-all routes rather than local Hono registration. Treat the installed version and factory as the route authority.

CapabilityRoute family and behavior
SessionSession inspection, sign-out, session revocation, and account/session management under /api/auth/*; HttpOnly secure cookies in production; 30-day session lifetime and daily update age.
Email and passwordEmail sign-up/sign-in, email verification, password-reset request and completion; verification is required and password reset revokes sessions.
Anonymous identitySparse anonymous sign-in for metered features; anonymous deletion is disabled and creation is rate-limited.
GoogleSocial sign-in initiation and callback on the configured Better Auth base URL; account linking trusts only Google.
CAPTCHA and rate limitsCloudflare Turnstile on email sign-up, email sign-in, and password-reset request; database-backed global/custom limits.
JWT and JWKSES256 JWT/JWKS endpoints with five-minute token expiry and 30-day key rotation/grace behavior.
OAuth ProviderAuthorization, token, refresh, introspection, revocation, user-info, consent, end-session, and JWKS capabilities for the registered public desktop client. Dynamic client registration is disabled.

app.exepert.com CMS API

The landing /admin UI calls these routes through its same-origin proxy. Except for the scheduled job, non-GET requests require a trusted origin. CMS membership and role checks are server-side. Request JSON is capped at 1 MiB. Private draft, revision, asset, and job tables are inaccessible to anon and authenticated Data API roles.

Method and routeAuthenticationPrimary store/actionResponse or notable failureAvailability
GET /api/cms/meBetter Auth memberPrincipal and app_private.cms_memberMember profile; 401/403 when absent or unauthorizedLive
GET /api/cms/featuredCMS memberFeatured slot plus private post summaryOrdered configuration; CMS-disabled/unavailable 503Live
PUT /api/cms/featuredAuthorized editorReplaces validated featured orderingUpdated ordering; validation 400/422, conflict/policy status preservedLive
GET /api/cms/postsCMS memberFiltered/cursor list from private postsPaginated JSON; unauthorized 401/403Live
POST /api/cms/postsAuthorized author/editorCreates private draft and initial state201 post; invalid body or policy deniedLive
GET /api/cms/posts/:idCMS memberPrivate post detail and editorial metadataPost JSON; missing 404Live
PATCH /api/cms/posts/:idAuthorized owner/editorVersion-checked draft update and revisionUpdated post; stale version 409; invalid input 400/422Live
POST /api/cms/posts/:id/publishAuthorized editorPublishes immutable public article/asset projection and requests revalidationPublished post; conflict/policy/revalidation details surfacedLive
POST /api/cms/posts/:id/scheduleAuthorized editorSchedules private publication jobScheduled post/job; invalid schedule deniedLive
POST /api/cms/posts/:id/unpublishAuthorized editorRemoves public projection while retaining private editorial recordUpdated post; missing/conflict/policy errors preservedLive
POST /api/cms/posts/:id/archiveAuthorized editorArchives editorial post and removes public projectionUpdated post; missing/conflict/policy errors preservedLive
GET /api/cms/posts/:id/revisionsCMS memberPrivate revision historyRevision list; missing/unauthorized deniedLive
POST /api/cms/posts/:id/revisions/:revisionId/restoreAuthorized owner/editorRestores revision through versioned updateRestored post; stale version 409; missing 404Live
POST /api/cms/posts/:id/assetsAuthorized owner/editorCreates validated media upload intentSigned upload data/asset record; size/type/policy deniedLive
POST /api/cms/assets/:id/completeAuthorized owner/editorVerifies upload, processes image with Sharp, writes immutable public objectCompleted asset; invalid/missing upload deniedLive
GET /api/cms/assets/:id/contentCMS memberReads private editorial asset through server authorizationMedia response; missing/unauthorized deniedLive
DELETE /api/cms/assets/:idAuthorized owner/editorDeletes an unused private asset and storage objectsCompletion JSON; in-use/conflict/policy deniedLive
POST /api/cms/jobs/publish-dueBearer CMS_CRON_SECRETClaims due jobs, publishes projections, and revalidates landing pathsJob summary; invalid bearer 401/403; service failure 503Live

Unknown API routes return 404. Known Hono/Better Auth/CMS statuses are preserved. Unexpected CMS failures use 503 cms_unavailable; other unexpected identity failures use a generic 500 without secret-bearing detail.

www.exepert.com routes and proxies

Method and routeAuthenticationHandler/dataBehaviorAvailability
`GETPOST /api/auth/:path*`Endpoint-specificNext.js rewrite to app.exepert.com/api/auth/:path*Preserves the public website origin while Better Auth remains centralized
Supported CMS methods on /api/cms/:path*CMS member or job credentialNext.js rewrite to app.exepert.com/api/cms/:path*CMS response is returned through the website originLive
POST /api/internal/blog-revalidateBearer BLOG_REVALIDATION_SECRETNext.js revalidation handlerRevalidates allowlisted article/index/feed paths; invalid bearer deniedLive
GET /rss.xmlPublicNext.js route using public article projectionsRSS XML; safe empty/failure handling in the public data layerLive
GET /sitemap.xmlPublicNext.js metadata routeCanonical website and published-article URLsLive
GET /robots.txtPublicNext.js metadata routeCrawler directives and sitemap locationLive

The public blog reads public.blog_article, public.blog_article_asset, public.blog_slug_redirect, and public.blog_featured_slot through the publishable Supabase key. It never receives the service-role key or private CMS tables.

Supabase Edge Function API

These fixed endpoints use https://<project>.supabase.co/functions/v1/<function-name>. A read-only publication-day probe reached every deployed handler: public health returned 200, protected handlers returned their expected 401 or 405, and direct brain-identity traffic returned its deliberate 404. Those probes verify the deployed boundary, not a successful authenticated model invocation or data mutation.

Method and function routeAuthenticationHandler and dataResponse or notable failureAvailability
`GETPOST /chat-models`Valid EXEPERT principal tokenReads the 9Router model catalogue; POST can request a refreshModel and combo catalogue; missing/invalid token 401; provider/configuration failure 500/503
`GETPOST /chat-saved-prompts`Non-anonymous principalOwner-scoped chat_saved_prompts; POST actions are list, lookup, create, update, and deleteList or record JSON; invalid body/action 400; missing record 404; idempotent delete
GET /run-chat?models=1Valid EXEPERT principal tokenAlternate model-catalogue path retained by the chat gatewayCatalogue JSON; other GET requests 404; invalid token deniedLive endpoint
POST /run-chatValid EXEPERT principal token and owned projectBounded text/image request, 9Router model call, quota RPC, and trace/span persistenceStructured research JSON or SSE token stream; validation 400/413; ownership 403; quota 429; provider failure 502/503Live endpoint; provider availability is independent
POST /run-playgroundValid EXEPERT principal tokenRenders a prompt template and streams an OpenAI- or Anthropic-compatible provider responseSSE output; invalid request 400; quota 429; provider/configuration errors are streamedLive endpoint; configured provider required
GET /run-world-agentPublicWorld gateway readiness and protocol versions200 when configured; safe 503 when the gateway is unavailableLive; readiness probe passed
POST /run-world-agentNon-anonymous principal plus quotaValidates bounded world observations, selected text/vision capability, and returns a deterministic action contract around the model responseJSON or SSE decision; sign-in 401; invalid observation 400/413; unavailable model 404; capability 422; quota 429; upstream 502/504Live endpoint; configured provider required
POST /chat-affectValid principal and owned projectWrites owner-checked affective_state span annotations; optional 9Router refinement degrades to local analysisAnalysis JSON; invalid input 400/413; ownership 403; quota 429; write/configuration 500Live endpoint
POST /chat-feedbackValid principal and owned projectUpserts owner-checked positive/negative human span annotation200 annotation ID; invalid input 400; ownership 403; missing span 404; quota 429Live endpoint
POST /ingest-arcade-trajectoryValid principal and owned projectValidates a body up to 512 KiB and calls the owner-bound trajectory ingest RPCAcknowledged episode/chunks; invalid 400/413; ownership 403; conflict 409Live endpoint
POST /delete-arcade-trajectoriesValid principalCalls the internal delete RPC for that principal onlyDeleted episode/chunk counts; invalid token 401; server failure 500Live endpoint
POST /otlp-receiverConstant-time checked X-EXEPERT-INGEST-KEYUpserts OTLP traces/spans; optional Typesense indexing is best-effortIngest counts; unauthorized 401; rate 429; invalid/large payload 400/413; write failure 500Live endpoint
POST /run-evalConstant-time checked X-EXEPERT-INGEST-KEYRuns configured or heuristic span evaluation and upserts annotationsEvaluation count; invalid target 400; missing spans 404; write/provider failure 500Live endpoint
/brain-identity/*Cloudflare-held gateway secretPortable Better Auth candidate and PostgreSQL identity dataRequests without the exact gateway header return 404; public access is only through auth.exepert.comLive behind gateway; cutover gated

All function handlers answer CORS preflight with OPTIONS; it is omitted from the table for readability. The browser must never receive service keys, router keys, ingest keys, or provider credentials.

learn.exepert.com API

The Pages Function accepts only the five routes below and rejects non-EXEPERT mutation origins. In current production, identity and tutor flags are false.

Method and routeAuthenticationHandler/dataResponse or failureAvailability
GET /api/sessionPublicFeature-state response; identity bridge only when enabledCurrent production returns 200 with enabled:falseLive; identity disabled
POST /api/logoutSession when identity is enabledProxies Better Auth sign-out to auth.exepert.comCurrent production fails closed as identity-disabled; no cross-account local data transferDisabled
GET /api/progressNon-anonymous memberIdentity principal token, then owner-scoped Supabase select200 progress list; current unauthenticated request 401; backend error 503Disabled for account sync
PUT /api/progressNon-anonymous membersave_brain_progress RPC with expected versionSaved record; optimistic conflict 409; invalid body 400; backend error 503Disabled for account sync
POST /api/tutorNon-anonymous member plus valid lesson/question; Turnstile only for AI modeDeterministic corpus filter, private quota RPC, optional Workers AIOnce identity is enabled, returns an authored answer when AI prerequisites, quota, citations, or provider fail; invalid input 400Disabled; authored lesson explanations remain in the static UI

The account bridge, progress table, and quota code exist, but their production availability is controlled independently. Do not describe a successful static learning session as proof of cloud synchronization or AI inference.

auth.exepert.com gateway contract

The gateway accepts GET/OPTIONS for configuration, health, and discovery; GET/POST/OPTIONS for /api/auth/*; and POST/OPTIONS for the principal token and /api/identity/* routes. It strips unapproved request headers and hop-by-hop response headers, preserves cookies, rejects bodies over 64 KiB, times out slow body reads after 5 seconds, and times out the upstream after 12 seconds.

When IDENTITY_CUTOVER_ENABLED=false, only these probes pass:

  • GET /api/auth/config
  • GET /api/auth/health
  • GET /api/.well-known/oauth-authorization-server/api/auth
  • GET /api/.well-known/oauth-protected-resource
  • the two equivalent root /.well-known/* discovery paths

Every other allowlisted route returns 503 identity_cutover_disabled. Unknown paths or methods return 404. The Supabase Edge runtime independently requires X-EXEPERT-Identity-Gateway; direct public traffic without the matching secret returns 404.

Versioned public interfaces

Brain Learning and its download package share the following version-one types:

  • BrainAssetManifest identifies source, species, representation, units, revision, license, limitations, and per-file hashes.
  • LearningLesson binds one lesson version to approved sources, assets, three audience tracks, an activity, and authored quiz feedback.
  • LearningProgress binds one principal, lesson, and track to answers, completion, optimistic version, and update time. The pending marker is device-only.
  • SimulationConfig fixes the illustrative-regional-v2 model, seed, bounded coupling/damping/stimulus, 200 steps, and dt=0.05.

The simulator uses authored four-region connections and fixed-point arithmetic. Those connections are explicitly illustrative and are not measured human connectivity.

Data ownership and RLS boundaries

DataOwner and access boundary
Better Auth identities and sessionsPrivate authn schema, accessed by the identity backend database role. Browser clients never query it directly.
Stable principals and merge ticketsapp_private; identity services only. Principal IDs remain stable across supported merges.
CMS drafts, revisions, membership, assets, and jobsapp_private; Node CMS only. Data API roles have no table access.
Published blogPublic projection tables with read-only anon/authenticated grants and RLS; written by the backend role.
AI Lab user recordsOwner-scoped public tables and explicit RLS/RPC boundaries; auth.uid() is the stable principal.
Brain progresspublic.brain_learning_progress; non-anonymous owner can read; writes only through save_brain_progress optimistic RPC. Production app sync is disabled.
Tutor counters and gateway digestapp_private; no browser table access. Reservation requires the member principal and Cloudflare-held gateway secret. Tutor is disabled.
Learning release metadataPublic read-only release records; large archives remain on Hugging Face.
Device learning draftsBrowser local storage partitioned by principal or guest; pending progress from one account is never uploaded as another.

Configuration names

Values belong in provider secret/environment stores or local ignored files. Documentation and client bundles may contain names and public keys, never secret values.

ScopeNames
Root browser, publicVITE_SUPABASE_URL, VITE_SUPABASE_PUBLISHABLE_KEY or legacy VITE_SUPABASE_ANON_KEY, VITE_AUTH_RUNTIME_MODE, optional VITE_DOCS_URL, and optional search-only VITE_TYPESENSE_* values
Active identity serverBETTER_AUTH_URL, BETTER_AUTH_DATABASE_URL (or runtime SUPABASE_DB_URL), AUTH_RUNTIME_MODE, BETTER_AUTH_SECRET, BETTER_AUTH_SECRETS, GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_CLIENT_SECRET_NEXT, GOOGLE_CLIENT_SECRET_VERSION
Principal-token bridgeSUPABASE_URL, SUPABASE_PUBLISHABLE_KEY or SUPABASE_ANON_KEY, SUPABASE_JWT_PRIVATE_JWK, SUPABASE_JWT_KID, SUPABASE_JWT_PRIVATE_JWK_NEXT, SUPABASE_JWT_KID_NEXT, SUPABASE_JWT_SIGNER; the Edge runtime uses the corresponding EXEPERT_SUPABASE_JWT_* aliases
Identity policy/emailRESEND_API_KEY, RESEND_FROM, TURNSTILE_SITE_KEY, TURNSTILE_SECRET_KEY, TURNSTILE_ALLOWED_HOSTNAMES, EXEPERT_DESKTOP_CLIENT_ID, EXEPERT_AUTH_RESOURCE, EXEPERT_SHARED_COOKIE_ENABLED
CMSCMS_ENABLED, CMS_CRON_SECRET, SUPABASE_SERVICE_ROLE_KEY, BLOG_REVALIDATION_URL, BLOG_REVALIDATION_SECRET
LandingEXEPERT_API_ORIGIN, NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY, BLOG_REVALIDATION_SECRET; NEXT_DIST_DIR and BLOG_TEST_PUBLIC_PORT are test/build controls
Learning PagesIDENTITY_ENABLED, IDENTITY_ORIGIN, SUPABASE_URL, SUPABASE_PUBLISHABLE_KEY, TUTOR_ENABLED, TURNSTILE_SITE_KEY, TURNSTILE_SECRET, TUTOR_GATEWAY_SECRET, and optional AI binding
Identity gateway/EdgeIDENTITY_FUNCTION_ORIGIN, EXEPERT_IDENTITY_GATEWAY_SECRET, IDENTITY_CUTOVER_ENABLED; Edge diagnostics also recognize IDENTITY_DEBUG_ERRORS and must keep it false in production
AI Lab Edge FunctionsSUPABASE_URL, SUPABASE_PUBLISHABLE_KEYS or legacy SUPABASE_ANON_KEY, SUPABASE_SECRET_KEYS or legacy SUPABASE_SERVICE_ROLE_KEY, ROUTER_BASE_URL, ROUTER_API_KEY, ROUTER_DEFAULT_MODEL, optional ROUTER_COMBO_MEMBERS, ROUTER_VISION_MODELS, ROUTER_AFFECT_MODEL, EXEPERT_INGEST_KEY, optional TYPESENSE_URL/TYPESENSE_ADMIN_KEY, and evaluator-only OPENAI_API_KEY/ANTHROPIC_API_KEY fallbacks
Release workflowsBRAIN_LEARNING_RELEASE_GATES, BRAIN_IDENTITY_CANDIDATE_GATES, BRAIN_IDENTITY_PRODUCTION_GATES, BRAIN_CLOUDFLARE_PAGES_TOKEN, AUTH_CLOUDFLARE_PAGES_TOKEN, BRAIN_SUPABASE_ACCESS_TOKEN

BETTER_AUTH_SECRETS uses versioned version:secret entries. The legacy BETTER_AUTH_SECRET remains during the defined session overlap. Credential selectors must retain both current and standby material until rollback is no longer required.

Build, test, and deployment commands

TargetReproducible commandsDeployment behavior
Root AI Labpnpm.cmd install --frozen-lockfile; pnpm.cmd typecheck; pnpm.cmd test; pnpm.cmd buildscripts/vercel-build.sh builds WASM/Vite and docs, then merges docs into dist.
Docs onlypnpm.cmd --dir docs-site typecheck; pnpm.cmd --dir docs-site exec docusaurus buildDirect Docusaurus command avoids rewriting the activity calendar.
Landingbun install --frozen-lockfile; bun run test; bun run topology:check; bun run lint; bun run typecheck; bun run build from apps/landingVercel project root is apps/landing; unchanged app files use its ignored-build check to skip deployment.
Brain LearningLocal development; bun install --frozen-lockfile; bun test; bun run build; bun run package:kitbrain-learning-deploy.yml requires main, a passed static release gate, and the exact reviewed commit; deploys both Pages projects.
Identity candidateRoot pnpm identity:bundle and pnpm auth-gateway:build; gateway bun run check and bun testCandidate and promotion workflows require separate gates and exact reviewed commits before Supabase/Cloudflare deployment.

The root CI runs DCO, TypeScript, Vitest, Vite/WASM, landing browser checks, and research/docs checks according to changed scope. Pull-request commits require a Signed-off-by trailer.

Rollback paths

  • AI Lab/API/docs: promote the preceding known-good exepert Vercel deployment. Keep both session secrets and signing keys during credential overlap.
  • Website/blog: promote the preceding exepert-landing deployment. Public projections remain immutable until a later authorized editorial action.
  • Brain Learning: restore the preceding verified Cloudflare Pages deployment or use the stable pages.dev endpoint while diagnosing the custom hostname. Keep identity and tutor flags false.
  • Identity candidate: set the cutover flag false, retain the active Vercel authority, and leave the gateway probes available. Direct Edge traffic stays blocked.
  • Database: migrations are additive. Disable dependent application flags on failure; do not destroy progress, CMS, or identity records as an application rollback.

Open Brain Kit boundary

The public dataset is AkmalAlif69/exepert-open-brain-kit, and the demonstration is AkmalAlif69/exepert-brain-learning. Release 0.1.2 is pinned by revision and SHA-256 in apps/brain-learning/src/release.ts.

Each third-party source retains its own license and attribution. Restricted BraTS files, HCP participant files, generated-model checkpoints, private EXEPERT code, and credentials are excluded. “Weights” in product discussion must not be used to describe this release: it is a learning asset and deterministic simulation package, not a trained biological or clinical model.