Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
8098318
Update _routes.yml
stephanieelliott Jan 30, 2026
08e731e
Create index.html
stephanieelliott Jan 30, 2026
0a136bd
Create index.html
stephanieelliott Jan 30, 2026
86c7ce2
Create manage-your-billing.md
stephanieelliott Jan 30, 2026
0d0b14e
Update _routes.yml
stephanieelliott Jan 30, 2026
a91dd2c
Update hub.html
stephanieelliott Jan 30, 2026
59b3ad9
Update manage-your-billing.md
stephanieelliott Jan 30, 2026
5b22008
Update hub.html
stephanieelliott Jan 30, 2026
91097cf
Update lhn-template.html
stephanieelliott Jan 30, 2026
ce3fb89
Update manage-your-billing.md
stephanieelliott Jan 30, 2026
41eb283
Create Manage-Billing-and-Subscriptions-in-New-Expensify.md
stephanieelliott Jan 30, 2026
a248bee
Create Manage-Billing-and-Subscriptions-in-Expensify-Classic.md
stephanieelliott Jan 30, 2026
039a5d4
Rename docs/articles/consolidated/billing/manage-your-billing.md to d…
stephanieelliott Jan 30, 2026
9791801
Rename docs/articles/consolidated/billing/Manage-Billing-and-Subscrip…
stephanieelliott Jan 30, 2026
1961dec
Rename docs/articles/consolidated/billing/Manage-Billing-and-Subscrip…
stephanieelliott Jan 30, 2026
dc92029
Delete docs/articles/consolidated/billing directory
stephanieelliott Jan 30, 2026
35f112a
Create What-billing-ownership-means-in-Expensify.md
stephanieelliott Jan 30, 2026
bb703ab
Update What-billing-ownership-means-in-Expensify.md
stephanieelliott Jan 30, 2026
02b4c68
Create How-to-manage-subscriptions-in-Expensify.md
stephanieelliott Jan 30, 2026
a46d4d5
Create How-to-manage-subscriptions-and-billing-in-New-Expensify.md
stephanieelliott Jan 30, 2026
1e9c192
Create Deleting-workspaces-in-Expensify.md
stephanieelliott Jan 30, 2026
0cb6a6a
Rename How-to-manage-subscriptions-in-Expensify.md to Managing-subscr…
stephanieelliott Jan 30, 2026
166fa65
Update Managing-subscriptions-in-Expensify.md
stephanieelliott Jan 30, 2026
beeec54
Create How-to-Manage-Billing-and-Subscriptions-in-Expensify-Classic.md
stephanieelliott Jan 30, 2026
1d3a915
Rename How-to-manage-subscriptions-and-billing-in-New-Expensify.md to…
stephanieelliott Jan 30, 2026
2b8d583
Create What-billing-ownership-means-in-Expensify.md
stephanieelliott Jan 30, 2026
be03086
Update createDocsRoutes.ts
stephanieelliott Jan 30, 2026
1911bac
Create index.html
stephanieelliott Jan 30, 2026
0488e60
Create What-billing-ownership-means-in-Expensify.md
stephanieelliott Jan 30, 2026
b29378a
Update _routes.yml
stephanieelliott Jan 30, 2026
ee1a800
Delete docs/articles/consolidated/billing/What-billing-ownership-mean…
stephanieelliott Jan 30, 2026
fc8deab
Delete docs/articles/consolidated/Subscription and Plan Management di…
stephanieelliott Jan 30, 2026
0adfb9b
Update _routes.yml
stephanieelliott Jan 30, 2026
3b1379e
Update createDocsRoutes.ts
stephanieelliott Jan 30, 2026
e5c3d3d
Update _routes.yml
stephanieelliott Jan 30, 2026
6c588ac
Update _routes.yml
stephanieelliott Jan 30, 2026
d85bd30
Delete docs/articles/consolidated/billing/subscription-and-plan-manag…
stephanieelliott Jan 30, 2026
d9339f3
Rename What-billing-ownership-means-in-Expensify.md to what-billing-o…
stephanieelliott Jan 30, 2026
75daa0a
Add subscription and plan management section to billing in _routes.yml
stephanieelliott Jan 31, 2026
695f216
Refactor billing section titles and descriptions in _routes.yml and u…
stephanieelliott Jan 31, 2026
93347bd
Add new articles on subscription and workspace management to _routes.yml
stephanieelliott Jan 31, 2026
69884e6
Add new billing-related HTML files for setup, payment, and pricing se…
stephanieelliott Jan 31, 2026
e96e33c
Remove obsolete billing-related HTML files and update _routes.yml to …
stephanieelliott Jan 31, 2026
5939ceb
Add new articles on Expensify plans, pricing, and billing to _routes.…
stephanieelliott Jan 31, 2026
5bcb13c
Update titles in _routes.yml for consistency and formatting
stephanieelliott Jan 31, 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: 16 additions & 0 deletions .github/scripts/createDocsRoutes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ const platformNames = {
expensifyClassic: 'expensify-classic',
newExpensify: 'new-expensify',
travel: 'travel',
consolidated: 'consolidated',
} as const;

/**
Expand Down Expand Up @@ -142,11 +143,20 @@ function run() {
const expensifyClassicArticleHubs = fs.readdirSync(`${docsDir}/articles/${platformNames.expensifyClassic}`);
const newExpensifyArticleHubs = fs.readdirSync(`${docsDir}/articles/${platformNames.newExpensify}`);
const travelArticleHubs = fs.readdirSync(`${docsDir}/articles/${platformNames.travel}`);
const consolidatedArticleHubs = fs.readdirSync(`${docsDir}/articles/${platformNames.consolidated}`);


const expensifyClassicRoute = routes.platforms.find((platform) => platform.href === platformNames.expensifyClassic);
const newExpensifyRoute = routes.platforms.find((platform) => platform.href === platformNames.newExpensify);
const travelRoute = routes.platforms.find((platform) => platform.href === platformNames.travel);
const consolidatedRoute = routes.platforms.find(
(platform) => platform.href === platformNames.consolidated
);

if (!consolidatedRoute) {
console.error('Consolidated platform missing from _routes.yml');
process.exit(1);
}
if (expensifyClassicArticleHubs.length !== expensifyClassicRoute?.hubs.length) {
console.error(warnMessage(platformNames.expensifyClassic));
process.exit(1);
Expand All @@ -162,9 +172,15 @@ function run() {
process.exit(1);
}

if (consolidatedArticleHubs.length !== consolidatedRoute?.hubs.length) {
console.error(warnMessage(platformNames.consolidated));
process.exit(1);
}

createHubsWithArticles(expensifyClassicArticleHubs, platformNames.expensifyClassic, expensifyClassicRoute.hubs);
createHubsWithArticles(newExpensifyArticleHubs, platformNames.newExpensify, newExpensifyRoute.hubs);
createHubsWithArticles(travelArticleHubs, platformNames.travel, travelRoute.hubs);
createHubsWithArticles(consolidatedArticleHubs, platformNames.consolidated, consolidatedRoute.hubs);

// Convert the object to YAML and write it to the file
let yamlString = yaml.dump(routes);
Expand Down
42 changes: 42 additions & 0 deletions docs/_data/_routes.yml
Original file line number Diff line number Diff line change
Expand Up @@ -202,3 +202,45 @@ platforms:
title: Event Management
icon: /assets/images/envelope-receipt.svg
description: "Learn how to create and manage Travel Events for group bookings."

- href: consolidated
title: Consolidated Help Site
hub-title: Consolidated Help Site
hub-description: Questions? Find the answers by clicking a Category or using the search bar.
url: use.expensify.com
description: "Get the help you need."
image: /assets/images/help-travel.png

hubs:
- href: billing
title: Billing & Subscriptions
icon: /assets/images/accounting.svg
description: "Learn about billing."

sections:
- href: subscription-and-plan-management
title: Managing Plans and Subscriptions
articles:
- href: what-billing-ownership-means-in-expensify
title: What billing ownership means in Expensify
- href: Managing-subscriptions-in-Expensify
title: Managing subscriptions in Expensify
- href: Deleting-workspaces-in-Expensify
title: Deleting a workspace in Expensify
- href: How-to-Manage-Billing-and-Subscriptions-in-Expensify-Classic
title: Manage Billing & Subscriptions in Expensify Classic
- href: How-to-Manage-Subscriptions-and-Billing-in-New-Expensify
title: How to manage subscriptions and billing in New Expensify

- href: plans-and-pricing
title: Plans and Pricing
articles:
- href: expensify_plan_overview
title: "Expensify Plans Overview: Collect vs Control"
- href: expensify_plan_pricing
title: "Expensify Plan Pricing and Billing: Annual, Pay-Per-Use, and Localized Rates"
- href: expensify_card_pricing_benefits
title: "Expensify Card: How Pricing Discounts and Cash Back Work"
- href: expensify_legacy_pricing
title: "Expensify Legacy Pricing: Who Qualifies and What It Means"

58 changes: 41 additions & 17 deletions docs/_includes/hub.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,51 @@
{% assign activeHub = urlParts[3] %}

{% assign platform = site.data.routes.platforms | where: "href", activePlatform | first %}

{% assign hub = platform.hubs | where: "href", activeHub | first %}

<h1 class="title">{{ hub.title }}</h1>
{% if hub %}
<h1 class="title">{{ hub.title }}</h1>
<p>{{ hub.description }}</p>

{% assign sections = hub.sections %}
{% assign articles = hub.articles %}

<p>{{ hub.description }}</p>
{% assign combined = nil %}

{% if hub.articles %}
{% assign sortedSectionsAndArticles = hub.sections | concat: hub.articles | sort: 'title' %}
{% else %}
{% assign sortedSectionsAndArticles = hub.sections | sort: 'title' %}
{% endif%}
{% if sections and articles %}
{% assign combined = sections | concat: articles %}
{% elsif sections %}
{% assign combined = sections %}
{% elsif articles %}
{% assign combined = articles %}
{% endif %}

<section>
<div class="cards-group">
{% if combined %}
{% assign sortedSectionsAndArticles = combined | sort: 'title' %}
{% endif %}

{% if sortedSectionsAndArticles %}
<section>
<div class="cards-group">
{% for item in sortedSectionsAndArticles %}
{% if item.articles %}
{% include section-card.html platform=activePlatform hub=hub.href section=item.href title=item.title %}
{% else %}
{% include article-card.html hub=hub.href href=item.href title=item.title platform=activePlatform %}
{% endif %}
{% if item.articles %}
{% include section-card.html
platform=activePlatform
hub=hub.href
section=item.href
title=item.title
%}
{% else %}
{% include article-card.html
platform=activePlatform
hub=hub.href
href=item.href
title=item.title
%}
{% endif %}
{% endfor %}
</div>
</section>
</div>
</section>
{% endif %}
{% endif %}

169 changes: 99 additions & 70 deletions docs/_includes/lhn-template.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,79 +10,108 @@
{% assign section = hub.sections | where: "href", activeSection | first %}

<ul class="lhn-items">
<li class="home-link">
{% if page.url == "/" %}
<div class="selected">Home</div>
{% else %}
<a href="/" class="link">Home</a>
{% endif %}
</li>
<li class="home-link">
{% if page.url == "/" %}
<div class="selected">Home</div>
{% else %}
<a href="/" class="link">Home</a>
{% endif %}
</li>

{% for platform in site.data.routes.platforms %}
{% if platform.href == activePlatform %}
<li>
<div class="icon-with-link selected">
<a href="/"><img src="/assets/images/down.svg" class="base-icon"></img></a>
<span>{{ platform.title }}</span>
</div>
{% for hub in platform.hubs %}
<ul>
{% if hub.href == activeHub %}
<div class="icon-with-link selected">
<a href="/{{ activePlatform }}/hubs"><img src="/assets/images/down.svg" class="base-icon"></img></a>
<span>{{ hub.title }}</span>
</div>
<ul class="nested-treeview">
{% if hub.articles %}
{% assign sortedSectionsAndArticles = hub.sections | concat: hub.articles | sort: 'title' %}
{% else %}
{% assign sortedSectionsAndArticles = hub.sections | sort: 'title' %}
{% endif%}
{% for item in sortedSectionsAndArticles %}
{% if item.articles %}
<li>
{% if item.href == activeSection %}
<div class="icon-with-link selected">
<a href="/{{ activePlatform }}/hubs/{{ hub.href }}"><img src="/assets/images/down.svg" class="base-icon"></img></a>
<span>{{ item.title }}</span>
</div>
<ul>
{% for article in item.articles %}
{% assign article_href = item.href | append: '/' | append: article.href %}
{% include lhn-article-link.html platform=activePlatform hub=hub.href href=article_href title=article.title %}
{% endfor %}
</ul>
{% else %}
<a href="{{ item.href }}" class="icon-with-link link">
<img src="/assets/images/arrow-right.svg" class="base-icon"></img>
{{ item.title }}
</a>
{% endif %}
</li>
{% else %}
{% include lhn-article-link.html platform=activePlatform hub=hub.href href=item.href title=item.title %}
{% endif %}
{% for platform in site.data.routes.platforms %}
{% if platform.href == activePlatform %}
<li>
<div class="icon-with-link selected">
<a href="/"><img src="/assets/images/down.svg" class="base-icon"></a>
<span>{{ platform.title }}</span>
</div>

{% for hub in platform.hubs %}
<ul>
{% if hub.href == activeHub %}
<div class="icon-with-link selected">
<a href="/{{ activePlatform }}/hubs">
<img src="/assets/images/down.svg" class="base-icon">
</a>
<span>{{ hub.title }}</span>
</div>

<ul class="nested-treeview">
{% assign sections = hub.sections %}
{% assign articles = hub.articles %}
{% assign combined = nil %}

{% if sections and articles %}
{% assign combined = sections | concat: articles %}
{% elsif sections %}
{% assign combined = sections %}
{% elsif articles %}
{% assign combined = articles %}
{% endif %}

{% if combined %}
{% assign sortedSectionsAndArticles = combined | sort: 'title' %}
{% endif %}

{% if sortedSectionsAndArticles %}
{% for item in sortedSectionsAndArticles %}
{% if item.articles %}
<li>
{% if item.href == activeSection %}
<div class="icon-with-link selected">
<a href="/{{ activePlatform }}/hubs/{{ hub.href }}">
<img src="/assets/images/down.svg" class="base-icon">
</a>
<span>{{ item.title }}</span>
</div>

<ul>
{% for article in item.articles %}
{% assign article_href = item.href | append: '/' | append: article.href %}
{% include lhn-article-link.html
platform=activePlatform
hub=hub.href
href=article_href
title=article.title
%}
{% endfor %}
</ul>
</ul>
{% else %}
<a href="{{ item.href }}" class="icon-with-link link">
<img src="/assets/images/arrow-right.svg" class="base-icon">
{{ item.title }}
</a>
{% endif %}
</li>
{% else %}
<li>
<a href="/{{ activePlatform }}/hubs/{{ hub.href }}" class="icon-with-link link">
<img src="/assets/images/arrow-right.svg" class="base-icon"></img>
{{ hub.title }}
</a>
</li>
{% include lhn-article-link.html
platform=activePlatform
hub=hub.href
href=item.href
title=item.title
%}
{% endif %}
</ul>
{% endfor %}
</li>

{% else %}
<li>
<a href="/{{ platform.href }}/hubs" class="icon-with-link link">
<img src="/assets/images/arrow-right.svg" class="base-icon"></img>
{{ platform.title }}
{% endfor %}
{% endif %}
</ul>
{% else %}
<li>
<a href="/{{ activePlatform }}/hubs/{{ hub.href }}" class="icon-with-link link">
<img src="/assets/images/arrow-right.svg" class="base-icon">
{{ hub.title }}
</a>
</li>
{% endif %}
{% endfor %}
</li>
{% endif %}
</ul>
{% endfor %}
</li>
{% else %}
<li>
<a href="/{{ platform.href }}/hubs" class="icon-with-link link">
<img src="/assets/images/arrow-right.svg" class="base-icon">
{{ platform.title }}
</a>
</li>
{% endif %}
{% endfor %}
</ul>
Loading
Loading