Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
95d672d
start article
RichardJECooke Dec 1, 2025
fba1c05
save
RichardJECooke Dec 2, 2025
f834e79
save
RichardJECooke Dec 3, 2025
eff6fad
save
RichardJECooke Dec 3, 2025
7dafcb9
save
RichardJECooke Dec 3, 2025
12d8e73
extraction done
RichardJECooke Dec 3, 2025
c0d8b8e
starting charts
RichardJECooke Dec 3, 2025
4494a0a
save
RichardJECooke Dec 4, 2025
9a7cab3
add image
RichardJECooke Dec 4, 2025
731144c
save
RichardJECooke Dec 5, 2025
bf67006
save
RichardJECooke Dec 5, 2025
b55def1
save
RichardJECooke Dec 5, 2025
9b39af0
save
RichardJECooke Dec 8, 2025
e0a30d5
save work so far
RichardJECooke Dec 9, 2025
b8d1212
save
RichardJECooke Jan 5, 2026
625f8bc
save
RichardJECooke Jan 6, 2026
74d7b64
returning users chart done
RichardJECooke Jan 6, 2026
d4ba966
adding recommendations from llm
RichardJECooke Jan 6, 2026
86de071
llm recommendations
RichardJECooke Jan 6, 2026
1f05eeb
add unique months
RichardJECooke Jan 6, 2026
7b05d1e
login frequency done
RichardJECooke Jan 6, 2026
dea4471
add charts
RichardJECooke Jan 12, 2026
4a68938
text
RichardJECooke Jan 12, 2026
4c97c81
save
RichardJECooke Jan 12, 2026
a1f5f9d
save
RichardJECooke Jan 12, 2026
a4c65ff
save
RichardJECooke Jan 12, 2026
f5b6033
chart explanations
RichardJECooke Jan 12, 2026
4ecd0e0
charts explained
RichardJECooke Jan 12, 2026
c3ba383
chart explanation proofread
RichardJECooke Jan 12, 2026
47dc510
explain cohort analysis
RichardJECooke Jan 12, 2026
92f79a7
other name for chart
RichardJECooke Jan 12, 2026
27c9739
save
RichardJECooke Jan 12, 2026
761cc67
save
RichardJECooke Jan 13, 2026
9853940
explain how to run code
RichardJECooke Jan 13, 2026
60c2cff
explain code
RichardJECooke Jan 13, 2026
b687af8
add description
RichardJECooke Jan 13, 2026
3139f7b
proofread
RichardJECooke Jan 13, 2026
8cc916c
llm proofread
RichardJECooke Jan 13, 2026
3546b31
description
RichardJECooke Jan 13, 2026
70ce111
Edit: Analyzing Why Customers Leave — Cohort Analysis in FusionAuth
bethh0rn Jan 21, 2026
6fcb764
Update cohort-analysis.mdx
bethh0rn Jan 22, 2026
f8c7472
Add: Intro & conclusion polish
bethh0rn Jan 26, 2026
5cae10b
Update cohort-analysis.mdx
bethh0rn Jan 26, 2026
2bf42ac
nathan's changes
RichardJECooke Apr 22, 2026
2ad7172
more nathan changes
RichardJECooke Apr 22, 2026
d89c1cd
nathan and dan feedback
RichardJECooke Apr 23, 2026
c480eae
done with nathan's changes
RichardJECooke Apr 23, 2026
56949cc
changes up until elasticsearch and paging done
RichardJECooke Apr 23, 2026
4234d50
Change to title case. Delete unused file.
RichardJECooke Apr 24, 2026
a460b4f
Change style guide to recommend title case now, as per Nathan's reque…
RichardJECooke Apr 24, 2026
7500ce4
save
RichardJECooke Apr 24, 2026
ca0cc6b
save
RichardJECooke Apr 24, 2026
3d8c553
Edits
RichardJECooke Apr 24, 2026
6db2aa2
Update psql command to read app ID from .env
jamesdanielwhitford Apr 28, 2026
8f6244a
Fix absolute URL: convert fusionauth.io link to relative path
jamesdanielwhitford Apr 29, 2026
e273f9e
Add cohort analysis header image and update frontmatter
jamesdanielwhitford Apr 29, 2026
b64cafb
Replace grep command with manual placeholder instructions for Windows…
jamesdanielwhitford Apr 29, 2026
326a33f
Add example psql command with Docker defaults for clarity
jamesdanielwhitford Apr 29, 2026
b298d87
final feedback items
sixhobbits Apr 30, 2026
f521c5e
separate cd commands
sixhobbits Apr 30, 2026
099aca3
Remove inaccurate Docker example from SQL command in appendix
jamesdanielwhitford May 14, 2026
adc7705
Note that extraction can take several minutes
sixhobbits May 14, 2026
d0628e9
Drop extraction timing note
sixhobbits May 14, 2026
46aae8f
Show real charts.go output and mention static file
sixhobbits May 14, 2026
8b64f72
Clarify abandonment buckets and drop bad reference
sixhobbits May 14, 2026
f55e911
Tell readers to copy .env.example to .env
sixhobbits May 14, 2026
9ea5141
Drop reference to static charts-output.html
sixhobbits May 14, 2026
78a6755
Fix charts.html description to reflect in-memory template serving
jamesdanielwhitford May 15, 2026
f81f2ac
Replace chartAbandonment and chartPercentLoginsPerYear screenshots
jamesdanielwhitford May 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

Here are some guidelines to follow when writing documentation (everything under [docs](astro/src/content/docs)), articles (everything under [articles](astro/src/content/articles)), and blogs [blog](astro/src/content/blog):

- Capitalize all domain objects, especially when working the object's API in which it is created and updated in FusionAuth.
- Capitalize all domain objects, especially when working the object's API in which it is created and updated in FusionAuth.
For example, see the API Key APIs description for `apiKeyId`, where API Key is capitalized: `The unique Id of the API Key to create. If not specified a secure random UUID will be generated.`
- If referring to something that exists as a domain object in FusionAuth, but you are not explicitly referring to an object being created/updated in FusionAuth, use lowercase. Here are some examples:
`To allow users to log into and use your application, you’ll need to create an Application in FusionAuth.`
Expand All @@ -31,7 +31,7 @@ Here are some guidelines to follow when writing documentation (everything under
- All image captions should be one or more complete sentences.
- Use the oxford comma. Apples, bananas, and oranges are my favorite fruits.
- Single spaces should be used instead of double spaces after a period.
- Headers should have the first letter of every word capitalized: `This Is The Header Text`. This is true for all headers (h1, h2, h3, h4). This is also known as [Start Case](https://en.wikipedia.org/wiki/Letter_case).
- Headers should use title case, not start case: `This Is the Header Text`. This is true for all headers (h1, h2, h3, h4). (Disregard the existing start case and sentence case documents in the repository — they are there because the policy has changed three times.)
- When writing, you have access to Asides. Here's an [example blog post using an Aside](https://github.com/FusionAuth/fusionauth-site/blob/main/astro/src/content/blog/log4j-fusionauth.mdx). You can assign the following values to the type: `tip` for tips. `note` for things for the user to be aware of. `important` for things the user should pay attention to. `warn` for dangerous actions like deleting a tenant.
- For links, don't use the absolute URL for the FusionAuth website (https://fusionauth.io), only relative URLs. This allows us to deploy to our local and staging environments and not get sent over to prod.
- If you have a list element containing more than one paragraph, indent the second paragraph by the same amount as the start of the text in the first paragraph to make sure that it renders correctly.
Expand Down Expand Up @@ -160,7 +160,7 @@ Make descriptions full sentences. They must end in a period. Titles, on the othe

If you want to order pages within a section, use `order`. The default value for every page is [defined here](https://github.com/FusionAuth/fusionauth-site/blob/main/astro/src/content/config.js#L61).

Pages are ordered in the nav within a section in descending order.
Pages are ordered in the nav within a section in descending order.

```
order: 0
Expand Down Expand Up @@ -248,7 +248,7 @@ Example response(s)

## Articles

Varies, but you'll always want to
Varies, but you'll always want to

* Open a PR with changes. Tag someone to review it.
* Merge using the GitHub interface or using a squash commit.
Expand Down Expand Up @@ -344,13 +344,13 @@ Prior to requesting review on a PR, please complete the following checklist.
- If the create request has a property of `"name": "My application"`, the response should contain this same value.
- Try and use real world names and values in example requests/responses. Using name such as `Payroll` for an Application name is more descriptive than `app 1` and allows the reader to more understand the example.
4. When referencing a field in the description of another field use this syntax: `<InlineField>name</InlineField>`.
5. Always try and provide a complete description of an API parameter. Brief descriptions that only re-state the obvious are not adeqaute.
6. There are times when two fields are optional, because only one of the two are required. In these cases, ensure we explain when the field is required, and when it is optional. There are many examples of this in the doc already for reference.
5. Always try and provide a complete description of an API parameter. Brief descriptions that only re-state the obvious are not adeqaute.
6. There are times when two fields are optional, because only one of the two are required. In these cases, ensure we explain when the field is required, and when it is optional. There are many examples of this in the doc already for reference.

#### Non API documentation
1. Screenshots. Review color, dimensions and clarity. Review A/B to ensure layout has not changed, and the new screenshot is consistent with the previous one.
- In the PR diff, generally speaking the dimensions and file size will be similar, if they are not, something may have changed.
- The screenshot should not look fuzzy. If it does, the compression may be incorrect.
- In the PR diff, generally speaking the dimensions and file size will be similar, if they are not, something may have changed.
- The screenshot should not look fuzzy. If it does, the compression may be incorrect.
2. If you are referring to a navigatable element, use `<Breadcrumb>Tenants</Breadcrumb>` or `<Breadcrumb>Tenants -> Your Tenant</Breadcrumb>`. In other words, use it even for singular elements.
3. If you are referring to a field the user can fill out, use `<InlineField>Authorized Redirect URLs</InlineField>`.
4. If you are referring to any other UI element, such as a submit button or read-only name, use `<InlineUIElement>Submit</InlineUIElement>` or (on the application view screen) `<InlineUIElement>Introspect endpoint</InlineUIElement>`.
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading