Web quickstart

1. Define your schema

Hypertune uses GraphQL for its schema definition language.

Go to the Schema view, switch to GraphQL mode and paste the following starter schema:

type Query {
  root(context: Context!): Root!
}

input Context {
  environment: Environment!
  user: User!  
}

enum Environment { DEVELOPMENT, STAGING, PRODUCTION }

input User {
  id: String!
  userAgent: UserAgent!
  referer: String!
}

type Root {
  exampleFlag: Boolean!
  userId: String!
  ctaClick: Void!
}

# User agent types

input UserAgent {
  browser: Browser!
  device: Device!
  engine: Engine!
  os: OS!
  cpu: CPU!
}

input Browser {
  name: String! # e.g. Chrome, Edge, Firefox, Safari
  version: String! # dynamic
}

input Device {
  type: String! # e.g. mobile, wearable, tablet
  vendor: String! # e.g. Apple, Google, HP, HTC, Huawei, Microsoft, Motorola, Nokia, Samsung
  model: String! # dynamic
}

input Engine {
  name: String! # e.g. Amaya, EdgeHTML, Gecko
  version: String! # dynamic
}

input OS {
  name: String! # e.g. Android, BlackBerry, Chromium OS, iOS, Mac OS, Windows
  version: String! # dynamic
}

input CPU {
  architecture: String! # e.g. 68k, amd64, arm, arm64
}

2. Define your logic

Go to the Logic view and select the "User Id" field. Set it to Context > User > Id.

Now select the "Cta Click" field. Set it to a Log Event expression with a new event type called "CTA Click". Set the Unit ID to Context > User > Id.

Click "Save" in the top right corner.

3. Fetch your flags

Go to the Preview view and enter the following query:

query Content(
  $userId: String!,
  $userAgent: UserAgent!,
  $referer: String!
) {
  root(
    context: {
      environment: "PRODUCTION",
      user: {
        id: $userId,
        userAgent: $userAgent,
        referer: $referer
      }
    }
  ) {
    exampleFlag
    userId
  }
}

Enter the following query variables:

{
  "userId": "#UID#",
  "userAgent": "#UA#",
  "referer": "#REFERER#"
}

Hypertune uses GraphQL for its query language. In the Result panel, you can see the flag that matches your query.

The #UID# value for the userId variable is a special placeholder that gets replaced with a randomly generated unique ID.

The #UA# placeholder gets replaced with the user agent and the #REFERER# placeholder gets replaced with your page URL.

Go to the Code Snippets tab in the Result panel and select HTML. Copy the snippet and insert it in the <head> of your page.

4. Use your flags

To show or hide a section depending on your flag value, replace the section's code:

<script>
var exampleFlag = window.hypertune?.root?.exampleFlag;
if (exampleFlag) {
  document.write('<div>This section is only shown when exampleFlag is on.</div>');
}
</script>

6. Log events

Switch to the Preview view and enter the following query:

query Content(
  $userId: String!,
  $userAgent: UserAgent!,
  $referer: String!
) {
  root(
    context: {
      environment: "PRODUCTION",
      user: {
        id: $userId,
        userAgent: $userAgent,
        referer: $referer
      }
    }
  ) {
    ctaClick
  }
}

Enter the following query variables:

{
  "userId": "123",
  "userAgent": "#UA#",
  "referer": "#REFERER#"
}

Go to the Code Snippets tab in the Result panel and select JavaScript. This snippet defines a function named queryHypertune. Copy the snippet and insert it inside a new <script> section after the existing Hypertune snippet. Then define another function named ctaClick that calls queryHypertune to log the CTA Click event:

<script>
function queryHypertune(variables) {
  ...
}
function ctaClick() {
  var userId = window.hypertune?.root?.userId;
  if (!userId) {
    return;
  }
  queryHypertune({
    userId: userId,
    userAgent: "#UA#",
    referer: "#REFERER#"
  });
}
</script>

Now you can call the ctaClick function when the user clicks your CTA:

<button onclick="ctaClick();">Sign Up</button>

That's it

Now you can update the logic for exampleFlag from the Hypertune UI without updating your code or waiting for a new build, deployment or release.

Last updated