# Concepts

Cohorly is a product analytics platform in the spirit of Mixpanel. Instrument your apps with the SDKs or the HTTP API, and get event analytics - segmentation, funnels, retention, and user profiles - in the Cohorly dashboard.

## Why Cohorly

- **Simple integration.** One project token, one `track()` call, and events
  start flowing. No schema to define up front.
- **Mixpanel-shaped API.** If you have used Mixpanel, the concepts (`track`,
  `identify`, people profiles, super properties) and the HTTP ingestion shape
  will feel familiar.
- **SDKs everywhere.** Client SDKs for web, React, Next.js, React Native, iOS,
  and Android, plus server SDKs for Node.js, NestJS, Python, PHP, and Go.
- **Multi-project.** One account tracks many apps, each isolated by its own
  project token.

## Core concepts

### Events

An **event** is a named action a user took, with an optional bag of
properties. Every event carries a `distinct_id` (who), a `time` (when, in
unix milliseconds), and a unique `$insert_id` used for deduplication.

```json
{
  "event": "Signed Up",
  "properties": {
    "distinct_id": "user_123",
    "time": 1751600000000,
    "$insert_id": "b1f2c3d4-...",
    "plan": "pro"
  }
}
```

### distinct\_id

The `distinct_id` identifies the user or device an event belongs to. The
SDKs start with an anonymous id and, when you call `identify()`, switch to
your real user id. Pre-login activity follows the user forward automatically

- Cohorly links the anonymous id's history onto the identified id, so a
  funnel or retention query spanning the login boundary counts one person, not
  two. Call `reset()` on logout so a shared device doesn't carry one person's
  identity into the next person's session. See [Identity](/reference/data-model#identity)
  for the full mechanics.

### Projects and tokens

Every app you track is a **project**. Each project has a UUID **token** that
authenticates ingestion - the SDKs send it with each event, and Cohorly
routes the data to the matching project. All stored data is scoped by
project. Create projects and copy tokens in the dashboard under **Settings**.

### People profiles

Beyond events, each user has a **profile**: a set of properties you update
with the People API (`set`, `setOnce`, `increment`, `unset`, `delete`),
which map to the `/engage` endpoint.

### Cohorts

A **cohort** is a saved user segment. Cohorts can combine profile properties
and event behavior, and are evaluated against the project's identity data at
query time. Use them to filter analyses, inspect members, or target a [feature
flag](/feature-flags) rule.

### Feature flags

A **feature flag** controls application behavior for a project without
requiring a new deploy. Flags can be simple on/off switches, percentage
rollouts, or named variants with JSON payloads. Rules are evaluated from top to
bottom and can target cohorts or exact distinct IDs. See the [Feature Flags
guide](/feature-flags) and [Feature Flags API](/api/flags).

## The platform

| Piece                   | What it is                                                                                                                                                  |
| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Dashboard               | `cohorly.velloalabs.com` - segmentation, funnels, retention, user profiles, project settings.                                                               |
| Ingestion and Query API | `cohorly-service.velloalabs.com` - HTTP endpoints for sending events and pulling analytics results.                                                         |
| Client SDKs             | Web `@cohorly/web`, React `@cohorly/react`, Next.js `@cohorly/nextjs`, React Native `@cohorly/react-native`, iOS `CohorlySwift`, Android `cohorly-android`. |
| Server SDKs             | Node.js `@cohorly/node`, NestJS `@cohorly/nest`, Python `cohorly`, PHP `cohorly/cohorly-php`, Go `cohorly-go`.                                              |

## Next steps

\`\[
&#x20; {
&#x20;   href: "/quickstart",
&#x20;   title: "Quickstart",
&#x20;   description: "Grab your project token and send your first event in minutes.",
&#x20; },
&#x20; {
&#x20;   href: "/sdks/web",
&#x20;   title: "Install an SDK",
&#x20;   description:
&#x20;     "Instrument a client or server app - web, mobile, Node.js, Python, PHP, or Go.",
&#x20; },
&#x20; {
&#x20;   href: "/api/ingestion",
&#x20;   title: "HTTP API",
&#x20;   description: "Send events directly over HTTP without an SDK.",
&#x20; },
]\`
