diff --git a/.github/workflows/check-link-rot.yml b/.github/workflows/check-link-rot.yml
deleted file mode 100644
index f79ebc7..0000000
--- a/.github/workflows/check-link-rot.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-# .github/workflows/check-link-rot.yml
-name: Check Link Rot
-
-on:
- pull_request:
- types: [opened, synchronize]
-
-jobs:
- check-link-rot:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-node@v3
- - run: npm i -g mintlify
- - run: mintlify broken-links
diff --git a/.vale.ini b/.vale.ini
new file mode 100644
index 0000000..015677b
--- /dev/null
+++ b/.vale.ini
@@ -0,0 +1,32 @@
+# Top level styles
+StylesPath = styles
+MinAlertLevel = suggestion
+IgnoredScopes = code, tt, img, url, a, em, strong, code
+SkippedScopes = script, style, pre, figure, code
+
+# Vocabularies
+Vocab = Mintlify, Trophy
+
+# This is required since Vale doesn't officially support MDX
+[formats]
+mdx = md
+
+# MDX support
+[*.mdx]
+BasedOnStyles = Vale
+Vale.Terms = NO # Enforces really harsh capitalization rules, keep off
+
+# `import ...`, `export ...`
+# ``
+# `...`
+# `{ ... }`
+TokenIgnores = (?sm)((?:import|export) .+?$), \
+(?)(?!`), \
+(<[A-Z]\w+>.+?<\/[A-Z]\w+>)
+
+# Exclude:
+# ``
+BlockIgnores = (?sm)^(<\w+\n .*\s\/>)$, \
+(?sm)^({.+.*})
+
+CommentDelimiters = {/*, */}
\ No newline at end of file
diff --git a/account/billing.mdx b/account/billing.mdx
index 8283077..f0ecd27 100644
--- a/account/billing.mdx
+++ b/account/billing.mdx
@@ -21,7 +21,7 @@ Trophy defines an MAU as a single user that is involved in at least one API call
## Free tier
-All customers start on the free tier. This allows dev teams to build and test implementations for up to **100 MAUs** without accurring any usage charges.
+All customers start on the free tier. This allows dev teams to build and test implementations for up to **100 MAUs** without accruing any usage charges.
If you exceed the free plan, don't panic! Nothing will stop working, we'll
@@ -62,7 +62,7 @@ You can view your usage for the current billing period in the [Trophy dashboard]
- We charge all customers on the 1st of the month in arreas.
+ We charge all customers on the 1st of the month in arrears.
diff --git a/account/branding.mdx b/account/branding.mdx
index d387a22..1d1ced1 100644
--- a/account/branding.mdx
+++ b/account/branding.mdx
@@ -1,7 +1,7 @@
---
title: Branding
description: Configure your logo and brand colors used across features built with Trophy.
-"og:description": Learn how Trophy tracks usage according to the number of usres that use your product.
+"og:description": Learn how Trophy tracks usage according to the number of users that use your product.
icon: palette
---
diff --git a/api-reference/authentication.mdx b/api-reference/authentication.mdx
index af35ef6..7187fba 100644
--- a/api-reference/authentication.mdx
+++ b/api-reference/authentication.mdx
@@ -17,7 +17,7 @@ Trophy keeps track of and displays when each API key in your account was created
### Anatomy of an API key
-Each API key is made up of 2 parts seperated by a period:
+Each API key is made up of 2 parts separated by a period:
```bash
{prefix}•{body}
@@ -64,7 +64,7 @@ API keys can be rotated if you want to change them for any reason. At the point
### Revoking keys
-API keys can also be revoked entirely at which point they become _Inactive_. At the point of revokation, the API key will no longer function and any requests still using it will begin receiving `401` responses immediately.
+API keys can also be revoked entirely at which point they become _Inactive_. At the point of revocation, the API key will no longer function and any requests still using it will begin receiving `401` responses immediately.
Once revoked you can re-activate the API key at any time.
diff --git a/api-reference/idempotency.mdx b/api-reference/idempotency.mdx
index 7f9d8f0..b37981e 100644
--- a/api-reference/idempotency.mdx
+++ b/api-reference/idempotency.mdx
@@ -41,11 +41,13 @@ When Trophy detects an idempotency key has been sent with an event, it will firs
All Trophy [metrics](/platform/metrics) manage idempotency in isolation.
Trophy will accept a user using the same idempotency key for events against
- different metrics as seperate isolated requests.
+ different metrics as separate isolated requests.
Additionally, when using an idempotency key the response will contain two properties to help clients manage replayed requests effectively:
+{/* vale off */}
+
```json
{
...,
@@ -54,9 +56,11 @@ Additionally, when using an idempotency key the response will contain two proper
}
```
+{/* vale on */}
+
- By default Trophy uses an infinte time window for detecting duplicate events.
- If you feel you need different behavoir, please [get in
+ By default Trophy uses an infinite time window for detecting duplicate events.
+ If you feel you need different behavior, please [get in
touch](mailto:support@trophy.so) and we'll happily set that up for you.
diff --git a/assets/platform/leaderboards/hero.png b/assets/platform/leaderboards/hero.png
index ff5182a..90a91f9 100644
Binary files a/assets/platform/leaderboards/hero.png and b/assets/platform/leaderboards/hero.png differ
diff --git a/experimentation/overview.mdx b/experimentation/overview.mdx
index e5350c1..61ef155 100644
--- a/experimentation/overview.mdx
+++ b/experimentation/overview.mdx
@@ -11,7 +11,7 @@ A key part of running a gamified platform is experimentation — tweaking and op
Usually, you'd have to build these tools yourself, but with Trophy you get an experimentation stack out-of-the-box.
- We have plans to extend Trophy's experimentation capibilities in the future to
+ We have plans to extend Trophy's experimentation capabilities in the future to
support more broad A/B testing of your gamification features.
diff --git a/getting-started/quickstart.mdx b/getting-started/quickstart.mdx
index a5f106b..8687771 100644
--- a/getting-started/quickstart.mdx
+++ b/getting-started/quickstart.mdx
@@ -110,7 +110,7 @@ Here you'll integrate your backend web application with Trophy and start buildin
Create friendly competitions to increase user engagement.
- Deliver personalized lifecyle emails to users at the perfect moment.
+ Deliver personalized lifecycle emails to users at the perfect moment.
diff --git a/guides/tutorials/how-to-build-a-gamified-study-platform.mdx b/guides/tutorials/how-to-build-a-gamified-study-platform.mdx
index 9da2586..d6d033a 100644
--- a/guides/tutorials/how-to-build-a-gamified-study-platform.mdx
+++ b/guides/tutorials/how-to-build-a-gamified-study-platform.mdx
@@ -72,7 +72,7 @@ Would you like to use Turbopack for `next dev`? Yes
Would you like to customize the import alias (`@/*` by default)? No
```
-Next, we'll initialize a new install of everyones favourite UI library, shadcn/ui:
+Next, we'll initialize a new install of everyone's favourite UI library, shadcn/ui:
```bash
npx shadcn@latest init
@@ -458,7 +458,7 @@ export default function Flashcard({ flashcard }: Props) {
You'll notice we also added a couple of styles here. These do a couple of things:
-- Ensure that when a `` is flipping, the 'backface' isn't visible during the animation with `backface-visibility: hidden;`
+- Ensure that when a `` is flipping, the 'back face' isn't visible during the animation with `backface-visibility: hidden;`
- As the `` component is a child of the ``, usually it would appear flat when it's parent rotates in 3D. Adding `transform-style: preserve-3d;` to the `` ensures it keeps it's 3D effect when it's parent animates.
```css src/app/flashcard.module.css
@@ -683,7 +683,7 @@ In this section we'll be adding the following gamification elements to the flash
- Achievement unlocked
- Weekly progress summaries
-This might sound like a lot, but would you be surprised if I told you you could build all this in less than 10 lines of code?
+This might sound like a lot, but would you be surprised if I told you could build all this in less than 10 lines of code?
Yup, you can. Trophy makes it super easy to build these features with a few lines of integration code.
@@ -1178,7 +1178,7 @@ To see this in action, all we need to do is unlock our first achievement by view
#### Streak Extended Toasts
-We'll use the same methods to show similar toasts when a user extendeds their streak. As we've set up a daily streak in Trophy, this will trigger the first time a user views a flashcard each day.
+We'll use the same methods to show similar toasts when a user extends their streak. As we've set up a daily streak in Trophy, this will trigger the first time a user views a flashcard each day.
If we wanted to experiment with a different streak cadence, like a weekly
@@ -1407,9 +1407,9 @@ export default function Flashcards({ flashcards }: Props) {
#### Displaying Study Journey
-The last peice of UI we'll add will be a dialog to display the user's study progress, including their streak and any achievements they've unlocked so far.
+The last piece of UI we'll add will be a dialog to display the user's study progress, including their streak and any achievements they've unlocked so far.
-First, we'll add a couple of new server actions to fetch the users streak and achievements from Trophy. As we're using a daily sterak here, we'll fetch the last 14 days of streak data from Trophy to give us enough to work with in our UI:
+First, we'll add a couple of new server actions to fetch the users streak and achievements from Trophy. As we're using a daily streak here, we'll fetch the last 14 days of streak data from Trophy to give us enough to work with in our UI:
```tsx src/app/actions.ts [expandable] {6-7,10-11,24,33,45-58,60-73}
"use server";
diff --git a/platform/achievements.mdx b/platform/achievements.mdx
index 9830daa..0dd1ff1 100644
--- a/platform/achievements.mdx
+++ b/platform/achievements.mdx
@@ -139,7 +139,7 @@ To create new achievements, head to the [achievements page](https://app.trophy.s
- You can assign _attribute filters_ to an achievement to further restrict who can unlock them and when.
+You can assign attribute filters to an achievement to further restrict who can unlock them and when.
- To limit a **Metric** achievement to only apply to events with specific [custom event attributes](/platform/events#custom-event-attributes), select an attribute and enter a value in the **Event Attribute** section.
@@ -172,22 +172,22 @@ When you make an achievement active, it makes it 'live'. Users can complete it a
When you lock an achievement, users who haven't unlocked it yet won't be able to unlock it anymore, but users who have already unlocked it won't be affected.
-Locked acheivements are only returned in APIs for users who have already achieved them.
+Locked achievements are only returned in APIs for users who have already achieved them.
**Archived**
-Archvied achievements can't be completed and aren't returned in any achievement APIs.
+Archived achievements can't be completed and aren't returned in any achievement APIs.
- Once you archive an achievement it disapears from Trophy so be sure to only
+ Once you archive an achievement it disappears from Trophy so be sure to only
archive achievements that you no longer need.
Archived achievements can be restored by [contacting support](#get-support).
-### Acheivement Workflow
+### Achievement Workflow
-Achievements can be moved through different statuses according to the following workfow:
+Achievements can be moved through different statuses according to the following workflow:
```mermaid
flowchart LR
@@ -226,6 +226,8 @@ However if you're using any API achievements, you will have to mark them as comp
This will return back a response that contains details of the achievement that was completed that can be used in any post-completion workflows, like showing an in-app notification.
+{/* vale off */}
+
```json Response
{
"completionId": "0040fe51-6bce-4b44-b0ad-bddc4e123534",
@@ -241,11 +243,13 @@ This will return back a response that contains details of the achievement that w
}
```
+{/* vale on */}
+
## Backdating Achievements
-By default, whenever you move an achievement to 'Active' [status](#managing-achievements), Trophy will check if any existing users meet the requirements of the achievment and complete it for them behind the scenes.
+By default, whenever you move an achievement to 'Active' [status](#managing-achievements), Trophy will check if any existing users meet the requirements of the achievement and complete it for them behind the scenes.
-This means when you release new achievments into production, or edit an existing live achievement, backdating will happen automatically.
+This means when you release new achievements into production, or edit an existing live achievement, backdating will happen automatically.
When achievements are completed in this way, users don't receive any
@@ -253,7 +257,7 @@ This means when you release new achievments into production, or edit an existing
achievements in Trophy resulting in users getting lots of notifications.
-You can check how many users have completed achievements at any time on the [acheivements page](https://app.trophy.so/achievements) in the Trophy dashboard. The _Users_ column in the acheivements can update during backdating.
+You can check how many users have completed achievements at any time on the [achievements page](https://app.trophy.so/achievements) in the Trophy dashboard. The _Users_ column in the achievements can update during backdating.
-The all achievements endpoint returns a list of all achievements within your Trophy account. Each achievement returned also includes `completions` (the number of users who have compelted the acheivement) and `rarity` (the percentage of users who have completed the achievement) as follows:
+The all achievements endpoint returns a list of all achievements within your Trophy account. Each achievement returned also includes `completions` (the number of users who have compeleted the achievement) and `rarity` (the percentage of users who have completed the achievement) as follows:
diff --git a/platform/emails.mdx b/platform/emails.mdx
index 1e2f442..ddd5264 100644
--- a/platform/emails.mdx
+++ b/platform/emails.mdx
@@ -311,7 +311,7 @@ If you specify a timezone for each user through [User Identification](/platform/
Trophy has a fully-featured block-based email builder that allows you to design templates, controlling all email copy and subject lines. Within the [Emails](https://app.trophy.so/emails/configure) page you can create templates and assign them to the 3 different [Email Types](#types-of-emails).
- When you create an email template, it can simulatenously be used across as
+ When you create an email template, it can simultaneously be used across as
many email types as you want. So if you want your emails to be simple, just
having one email template might be enough. Otherwise, general best practice is
creating one template for each type of email you want to send.
@@ -398,7 +398,7 @@ Here's the full list of un-opinionated basic blocks that Trophy supports:
- **H1, H2, H3** - Useful for headings of varying sizes.
- **Button** - Creates a call to action for users to take in emails.
- **Card** - Can nest other blocks, focusing attention.
-- **Divider** - Good for seperating content into logical sections.
+- **Divider** - Good for separating content into logical sections.
- **Emoji** - Include any supported emoji, controlling size.
- **Image** - Upload any image and Trophy will render it in emails.
- **Spacer** - Good for giving blocks room to stand out.
@@ -411,7 +411,7 @@ Trophy also has a powerful conditional rendering system powered by the _Conditio
By nesting any other block inside a conditional block and setting up the conditions logic, you can create almost any email design that will show different blocks in emails based on the evaluation of conditions at send time.
-If you're familiar with the `if/else` logical operators then this will feel very famililar to you. Otherwise here's a quick diagram to explain how it works.
+If you're familiar with the `if/else` logical operators then this will feel very familiar to you. Otherwise here's a quick diagram to explain how it works.
```mermaid
flowchart LR
@@ -609,8 +609,8 @@ Similarly to metrics, each points system has the following variables that can be
When configuring a template for use with achievement emails, the following variables are available:
-- **Is Final Achievement**: If the achievement triggering the email is part of a series of metric achievements, this is true when the achievment is the final achievement in the series
-- **Percent To Next Achievement**: If the achievement triggering the email is part of a series of metric achievements, this is the percentage until the user unlocks the next achievment in the series
+- **Is Final Achievement**: If the achievement triggering the email is part of a series of metric achievements, this is true when the achievement is the final achievement in the series
+- **Percent To Next Achievement**: If the achievement triggering the email is part of a series of metric achievements, this is the percentage until the user unlocks the next achievement in the series
- **Achievement Name**: The name of the achievement that triggered the email
- **Achievement Description**: The description of the achievement that triggered the email
diff --git a/platform/events.mdx b/platform/events.mdx
index 643dbcf..59ab9c4 100644
--- a/platform/events.mdx
+++ b/platform/events.mdx
@@ -35,11 +35,11 @@ You can specify a number of custom event attributes to help you track additional
For example, a language learning app might have a 'Questions Completed' metric and use a custom event attribute to store wether the answer to each question was correct.
-Similarly a fitness app might use an 'Excercises Completed' metric and use a custom event attribute to store the weight that was used in each excercise and another custom event attribute to store how long the excercise lasted.
+Similarly a fitness app might use an 'Exercises Completed' metric and use a custom event attribute to store the weight that was used in each exercise and another custom event attribute to store how long the exercise lasted.
Using custom event attributes in this way allows you to enrich events in Trophy with additional context relevant to your use case and use it to power even more engaging gamification features.
-### Creating Attibutes
+### Creating Attributes
To create a new custom event attribute, head to the metrics page in the Trophy dashboard and hit the _Add Event Attribute_ button.
@@ -69,7 +69,7 @@ If you receive an error similar to the following then you might have miss-spelle
```json
{
- "error": "Invalid attribute keys: devce. Please ensure all attribute keys match those set up at https://app.trophy.so/metrics."
+ "error": "Invalid attribute keys: device. Please ensure all attribute keys match those set up at https://app.trophy.so/metrics."
}
```
diff --git a/platform/leaderboards.mdx b/platform/leaderboards.mdx
index b27b5ad..1b97299 100644
--- a/platform/leaderboards.mdx
+++ b/platform/leaderboards.mdx
@@ -48,7 +48,7 @@ As the start of the week can be different in different countries, there is some
We'll be adding better support for weekly leaderboards in the future based on customer requests, so if that's you [let us know](mailto:support@trophy.so)! However Trophy leaderboards will cover 90% of weekly use cases, so here's what we suggest if you want to set one up.
-To create a weekly leaderboard, set up a [repeating leaderboard](#repeating-leaderboards) on a 7 day schedule and set the start date to be the next occuring first day of the week. While you wait for the start date to come around, the leaderboard will be in `scheduled` status and will automatically go live on the start date.
+To create a weekly leaderboard, set up a [repeating leaderboard](#repeating-leaderboards) on a 7 day schedule and set the start date to be the next occurring first day of the week. While you wait for the start date to come around, the leaderboard will be in `scheduled` status and will automatically go live on the start date.
This will make sure each run of the leaderboard consistently tracks the start and end of each week that your users are familiar with.
@@ -104,7 +104,7 @@ Leaderboards with a start date in the future are scheduled and automatically go
### End Dates
-Leaderboards in Trophy can have end dates. If you set an end date on a leaderboard then after that date it will enter `finished` status and rankings will be be finalized and winners chosen.
+Leaderboards in Trophy can have end dates. If you set an end date on a leaderboard then after that date it will enter `finished` status and rankings will be finalized and winners chosen.
Due to differences in [time zones](#handling-time-zones), leaderboards can be
diff --git a/platform/metrics.mdx b/platform/metrics.mdx
index cf429c9..6c90610 100644
--- a/platform/metrics.mdx
+++ b/platform/metrics.mdx
@@ -58,7 +58,7 @@ To create a Metric, head over to the [Metrics](https://app.trophy.so/metrics) pa
- Configure additional settigns like metric units or currency if applicable on the metric configure page.
+ Configure additional settings like metric units or currency if applicable on the metric configure page.
@@ -69,7 +69,7 @@ Trophy has a built-in analytics dashboard for each metric you create. It shows y
- The total value of all tracked events against the metric
- The number of users actively making progress against the metric
- The metric's [Trophy Retention Impact Score](#trophy-retention-impact-score)
-- The metric's [Achievment Completion Chart](#achievment-completion-chart)
+- The metric's [Achievement Completion Chart](#achievement-completion-chart)
- Deliver personalized lifecyle emails to users to increase retention.
+ Deliver personalized lifecycle emails to users to increase retention.
diff --git a/platform/points.mdx b/platform/points.mdx
index 69e70e4..44545c5 100644
--- a/platform/points.mdx
+++ b/platform/points.mdx
@@ -48,7 +48,7 @@ To create a points system, head to the [points page](https://app.trophy.so/point
You can also optionally upload a badge or logo to represent the points
- system. A `src` freindly URL to the image is returned from APIs for display
+ system. A `src` friendly URL to the image is returned from APIs for display
in your application.
@@ -87,7 +87,7 @@ To create a new points trigger, head to the points system that you want to creat
- Choosing **Metric** will mean points will be automatically awarded to users incrementally as they increase their metric total for a particular metric.
-- Choosing **Streak** will mean points will be automatically awarded to users eaech time their streak is increased by a specific length.
+- Choosing **Streak** will mean points will be automatically awarded to users each time their streak is increased by a specific length.
- Choosing **Achievement** will mean points will be automatically awarded to users when they complete a specific achievement.
@@ -105,7 +105,7 @@ To create a new points trigger, head to the points system that you want to creat
- You can assign _attribute filters_ to a points trigger to further restrict when they apply.
+ You can assign attribute filters to a points trigger to further restrict when they apply.
- To limit a **Metric trigger** to only apply to events with specific [custom event attributes](/platform/events#custom-event-attributes), select an attribute and enter a value in the **Event Attribute** section.
@@ -177,7 +177,7 @@ You can use this API to display the user's total points anywhere in your platfor
Then, the [user points summary API](/api-reference/endpoints/users/get-a-users-points-summary) can be used to fetch historical points data for a particular user.
-Data can be aggregated daily, weekly or monthly between a start and end date. Use this API to display points progress charts to users over any timeframe.
+Data can be aggregated daily, weekly or monthly between a start and end date. Use this API to display points progress charts to users over any time frame.
- This API can also be filtered to only return data for users with specifc
+ This API can also be filtered to only return data for users with specific
[custom user attributes](/platform/users#custom-user-attributes).
diff --git a/platform/streaks.mdx b/platform/streaks.mdx
index a252a70..e875c7f 100644
--- a/platform/streaks.mdx
+++ b/platform/streaks.mdx
@@ -68,11 +68,11 @@ Giving users too many freezes may decrease their perceived value, but granting t
As users use up streak freezes, they'll need a continuous supply of new ones to keep them going. To facilitate this, Trophy can automatically grant streak freezes to users over time. You can choose an arbitrary number of days over which to grant an arbitrary number of freezes to each user.
-If you've [configured time zones](/platform/users#param-tz) for your users, Trophy will automatically consume freezes at midnight in the user's time zone when necessary to extend their streak, and if any new freezes are due to be greatned to a user, they will be granted up to ten minutes later.
+If you've [configured time zones](/platform/users#param-tz) for your users, Trophy will automatically consume freezes at midnight in the user's time zone when necessary to extend their streak, and if any new freezes are due to be granted to a user, they will be granted up to ten minutes later.
### Maximum Freeze Count
-In Trophy you also configure the maxiumum number of freezes that each user can have, up to a limit of 100. [Freeze accumulation](#freeze-accumulation) will only ever grant freezes up to this limit.
+In Trophy you also configure the maximum number of freezes that each user can have, up to a limit of 100. [Freeze accumulation](#freeze-accumulation) will only ever grant freezes up to this limit.
## Tracking Streaks
@@ -108,6 +108,8 @@ This can be used to transactionally trigger UI/UX elements including:
The [user streaks API](/api-reference/endpoints/users/get-a-users-streak) returns the current streak for a single user, along with their recent streak history. Use the [`historyPeriods`](/api-reference/endpoints/users/get-a-users-streak#parameter-history-periods) query parameter to control how many periods to return.
+{/* vale off */}
+
```json Response [expandable]
{
"length": 1,
@@ -157,6 +159,8 @@ The [user streaks API](/api-reference/endpoints/users/get-a-users-streak) return
}
```
+{/* vale on */}
+
Use this data to display a user's streak history within your application.
@@ -193,7 +197,7 @@ If you want to display streaks for multiple users at once, for example to suppor
### Streak Rankings
-You can also use the [streak rankings API](/api-reference/endpoints/streaks/get-streak-rankings) to get a list of up to the the top 100 users by streak length and display a streak leaderboard in your application.
+You can also use the [streak rankings API](/api-reference/endpoints/streaks/get-streak-rankings) to get a list of up to the top 100 users by streak length and display a streak leaderboard in your application.
You can fetch rankings either for 'active' streaks (users on a streak at the time of request), or 'longest' (ranking each users longest ever streak).
diff --git a/platform/users.mdx b/platform/users.mdx
index 8cb6ffe..6c212c0 100644
--- a/platform/users.mdx
+++ b/platform/users.mdx
@@ -94,7 +94,7 @@ Give the attribute a name and a unique key. The key is what you'll use to refere
### Setting Attributes
-Attributes can be assigned values for specific users using their unique key either inline, as users increment metrics through the [metric increment API](/api-reference/endpoints/metrics/send-a-metric-change-event), or explicity through the [user identification](/api-reference/endpoints/users/identify-a-user), [create user](/api-reference/endpoints/users/create-a-user), or [update user](api-reference/endpoints/users/update-a-user) APIs.
+Attributes can be assigned values for specific users using their unique key either inline, as users increment metrics through the [metric increment API](/api-reference/endpoints/metrics/send-a-metric-change-event), or explicitly through the [user identification](/api-reference/endpoints/users/identify-a-user), [create user](/api-reference/endpoints/users/create-a-user), or [update user](api-reference/endpoints/users/update-a-user) APIs.
Trophy will only set values of attributes that have first been created
@@ -103,12 +103,16 @@ Attributes can be assigned values for specific users using their unique key eith
If you receive an error similar to the following then you might have miss-spelled the attribute key in the request, or you need to create the attribute first in the Trophy dashboard:
+{/* vale off */}
+
```json
{
"error": "Invalid attribute keys: pln. Please ensure all attribute keys match those set up at https://app.trophy.so/users/attributes."
}
```
+{/* vale on */}
+
Across all APIs, the schema for setting attribute values is consistent. Here's an example of a request payload that sets the value of two custom user attributes `subject` and `plan`:
@@ -246,7 +250,7 @@ This is why we recommend starting with inline identification first, then explori
### Explicit Identification
-Explicit identification is when you write code in your application that explicitly tells Trophy about users seperate from any metric interactions. This is useful if you want complete control over how and when Trophy learns about your users.
+Explicit identification is when you write code in your application that explicitly tells Trophy about users separate from any metric interactions. This is useful if you want complete control over how and when Trophy learns about your users.
Scenarios where you might want to use explicit identification might be:
@@ -259,9 +263,9 @@ In this case, you can tell Trophy about new users using the [User Identification
- Just like in inline identification, explicit identifcation also works by means
- of an `UPSERT` operation meaning all user attributes are kept in sync with
- Trophy automatically.
+ Just like in inline identification, explicit identification also works by
+ means of an `UPSERT` operation meaning all user attributes are kept in sync
+ with Trophy automatically.
## Creating Users
@@ -275,7 +279,7 @@ To tell Trophy about an update to a user in your platform you can use the [Updat
Any properties that you pass to Trophy will be updated to the new values you specify.
- As [user identifcation](#identifying-users) keeps user records up to date by
+ As [user identification](#identifying-users) keeps user records up to date by
default, it's usually not necessary to explicitly update users in Trophy every
time one of their properties changes in your application. However the user
update API is there if you really need it.
diff --git a/snippets/add-env-var-block.mdx b/snippets/add-env-var-block.mdx
index 92f7c95..32f67e7 100644
--- a/snippets/add-env-var-block.mdx
+++ b/snippets/add-env-var-block.mdx
@@ -1,3 +1,5 @@
+{/* vale off */}
+
```bash
TROPHY_API_KEY='*******'
```
diff --git a/styles/config/vocabularies/Mintlify/accept.txt b/styles/config/vocabularies/Mintlify/accept.txt
new file mode 100644
index 0000000..8c1e069
--- /dev/null
+++ b/styles/config/vocabularies/Mintlify/accept.txt
@@ -0,0 +1,267 @@
+Mintlify
+mintlify
+VSCode
+openapi
+OpenAPI
+Github
+APIs
+
+repo
+npm
+dev
+
+Lorem
+ipsum
+impsum
+amet
+
+const
+myName
+myObject
+bearerAuth
+favicon
+topbar
+url
+borderRadius
+args
+modeToggle
+ModeToggle
+isHidden
+autoplay
+
+_italic_
+Strikethrough
+Blockquotes
+Blockquote
+Singleline
+Multiline
+
+onboarding
+
+async
+await
+boolean
+enum
+func
+impl
+init
+instanceof
+typeof
+params
+stdin
+stdout
+stderr
+stdout
+stdin
+var
+const
+let
+null
+undefined
+struct
+bool
+
+cors
+csrf
+env
+xhr
+xhr2
+jwt
+oauth
+websocket
+localhost
+middleware
+runtime
+webhook
+stdin
+stdout
+
+json
+yaml
+yml
+md
+txt
+tsx
+jsx
+css
+scss
+html
+png
+jpg
+svg
+
+cdn
+cli
+css
+dom
+dto
+env
+git
+gui
+http
+https
+ide
+jvm
+mvc
+orm
+rpc
+sdk
+sql
+ssh
+ssl
+tcp
+tls
+uri
+url
+ux
+ui
+
+nodejs
+npm
+yarn
+pnpm
+eslint
+pytest
+golang
+rustc
+kubectl
+mongo
+postgres
+redis
+
+JavaScript
+TypeScript
+Python
+Ruby
+Rust
+Go
+Golang
+Java
+Kotlin
+Swift
+Node.js
+NodeJS
+Deno
+
+React
+Vue
+Angular
+Next.js
+Nuxt
+Express
+Django
+Flask
+Spring
+Laravel
+Redux
+Vuex
+TensorFlow
+PostgreSQL
+MongoDB
+Redis
+PNPM
+
+Docker
+Kubernetes
+AWS
+Azure
+GCP
+Terraform
+Jenkins
+CircleCI
+GitLab
+Heroku
+
+Git
+git
+GitHub
+GitLab
+Bitbucket
+VSCode
+Visual Studio Code
+IntelliJ
+WebStorm
+ESLint
+eslint
+Prettier
+prettier
+Webpack
+webpack
+Vite
+vite
+Babel
+babel
+Jest
+jest
+Mocha
+Cypress
+Postman
+
+HTTP
+HTTPS
+OAuth
+JWT
+GraphQL
+REST
+WebSocket
+TCP/IP
+
+NPM
+Yarn
+PNPM
+Pip
+PIP
+Cargo
+RubyGems
+
+Swagger
+OpenAPI
+Markdown
+MDX
+Storybook
+TypeDoc
+JSDoc
+
+MySQL
+PostgreSQL
+MongoDB
+Redis
+Elasticsearch
+DynamoDB
+
+Linux
+Unix
+macOS
+iOS
+
+Firefox
+Chromium
+WebKit
+
+config
+ctx
+desc
+dir
+elem
+err
+len
+msg
+num
+obj
+prev
+proc
+ptr
+req
+res
+str
+tmp
+val
+vars
+
+todo
+href
+lang
+nav
+prev
+next
+toc
\ No newline at end of file
diff --git a/styles/config/vocabularies/Mintlify/reject.txt b/styles/config/vocabularies/Mintlify/reject.txt
new file mode 100644
index 0000000..e69de29
diff --git a/styles/config/vocabularies/Trophy/accept.txt b/styles/config/vocabularies/Trophy/accept.txt
new file mode 100644
index 0000000..8b4b9fa
--- /dev/null
+++ b/styles/config/vocabularies/Trophy/accept.txt
@@ -0,0 +1,23 @@
+# General
+MAUs
+[Gg]amification
+SDKs
+gamified
+[Ii]dempotency
+overcounting
+userbase
+Duolingo
+realtime
+[Ll]eaderboard[s]?
+Flippin
+api
+badgeUrl
+achievedAt
+transactionally
+tz
+
+# Markdown rich text
+_[\w\s]+_
+\*[\w\s]+\*
+`[\w\s]+`
+`[a-zA-Z][a-zA-Z0-9]*`
\ No newline at end of file
diff --git a/styles/config/vocabularies/Trophy/reject.txt b/styles/config/vocabularies/Trophy/reject.txt
new file mode 100644
index 0000000..e69de29