Quickstart

Uniph.ai — Quickstart (friction-first)

Minimal steps to run the stack and get first value fast. The app is intent-first: internal execution context is created behind the scenes.

  • Frontend (production): https://uniph.ai
  • Backend API (production): https://api.uniph.ai
  • Local API base: http://localhost:3001 (or set API_BASE)

One-command start

docker compose up

Open http://localhost:3000 and sign in. The dashboard will auto-start ambient onboarding if you have no goals.


Optional smoke tests

From repo root:

npm run test:api
npm run test:quickstart

1. curl (recommended first check)

API_BASE="${API_BASE:-http://localhost:3001}"

# Health
curl -s "$API_BASE/api/health" | jq .

# Ambient start: creates first useful outcome with minimal input
curl -s -X POST "$API_BASE/api/orchestrate/start" \
  -H "Content-Type: application/json" \
  -H "X-User-Email: user@example.com" \
  -d '{"userMessage":"Plan my top priorities for this week"}' | jq .

# Friction KPIs
curl -s "$API_BASE/api/evaluation/friction" | jq .

1b. Optional: direct chat call

curl -s -X POST "$API_BASE/api/infer/chat" \
  -H "Content-Type: application/json" \
  -H "X-User-Email: user@example.com" \
  -d '{"messages":[{"role":"user","content":"What should I focus on this week?"}]}' | jq .

2. Node (fetch)

const API_BASE = process.env.API_BASE || "http://localhost:3001";

async function main() {
  const res = (method, path, body = null, apiKey = null) => {
    const opts = { method, headers: { "Content-Type": "application/json" } };
    if (body) opts.body = JSON.stringify(body);
    if (apiKey) opts.headers["Authorization"] = `Bearer ${apiKey}`;
    return fetch(`${API_BASE}${path}`, opts).then((r) => r.json());
  };

  const started = await res("POST", "/api/orchestrate/start", {
    userMessage: "Help me execute one high-impact objective this week",
  });
  console.log("Action taken:", started.actionTaken);
  console.log("Outcome summary:", started.outcome?.summary);
}

main().catch(console.error);

3. Python (requests)

import os
import json

import requests  # pip install requests

API_BASE = os.environ.get("API_BASE", "http://localhost:3001")

def main():
    # Ambient start
    r = requests.post(
        f"{API_BASE}/api/orchestrate/start",
        json={"userMessage": "Help me execute one high-impact objective this week"},
        headers={"X-User-Email": "user@example.com"},
    )
    r.raise_for_status()
    data = r.json()
    print("Action:", data.get("actionTaken"))
    print("Outcome:", data.get("outcome", {}).get("summary"))

if __name__ == "__main__":
    main()

4. API overview

| Action | Method | Path | Auth | |--------|--------|------|------| | Health | GET | /api/health | — | | List goals | GET | /api/goals | user auth context | | List tasks | GET | /api/tasks | user auth context | | Start orchestration | POST | /api/orchestrate/start | user auth context | | Chat | POST | /api/infer/chat | user auth context | | Memory recall | POST | /api/memory/recall | user auth context |

See API.md for full reference.