Skip to content

Commit e7059cb

Browse files
committed
Merge branch 'main' of github.com:Expensify/App into claude-addLicenseTextToAboutPage
2 parents 17f123d + 1e6e8bb commit e7059cb

166 files changed

Lines changed: 5386 additions & 838 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/buildIOS.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ jobs:
144144
op read "op://${{ vars.OP_VAULT }}/OldApp_AppStore/${{ vars.APPLE_STORE_PROVISIONING_PROFILE_FILE }}" --force --out-file ./${{ vars.APPLE_STORE_PROVISIONING_PROFILE_FILE }}
145145
op read "op://${{ vars.OP_VAULT }}/OldApp_AppStore_Share_Extension/${{ vars.APPLE_SHARE_PROVISIONING_PROFILE_FILE }}" --force --out-file ./${{ vars.APPLE_SHARE_PROVISIONING_PROFILE_FILE }}
146146
op read "op://${{ vars.OP_VAULT }}/OldApp_AppStore_Notification_Service/${{ vars.APPLE_NOTIFICATION_PROVISIONING_PROFILE_FILE }}" --force --out-file ./${{ vars.APPLE_NOTIFICATION_PROVISIONING_PROFILE_FILE }}
147-
op read "op://${{ vars.OP_VAULT }}/OldApp_AppStore_Live_Activity_Extension/OldApp_AppStore_LiveActivityExtension.mobileprovision" --force --out-file ./OldApp_AppStore_LiveActivityExtension.mobileprovision
147+
op read "op://${{ vars.OP_VAULT }}/OldApp_AppStore_Live_Activity_Extension/${{ vars.APPLE_LIVE_ACTIVITY_PROVISIONING_PROFILE_FILE }}" --force --out-file ./${{ vars.APPLE_LIVE_ACTIVITY_PROVISIONING_PROFILE_FILE }}
148148
else
149149
op read "op://${{ vars.OP_VAULT }}/OldApp_AdHoc/OldApp_AdHoc.mobileprovision" --force --out-file ./OldApp_AdHoc.mobileprovision
150150
op read "op://${{ vars.OP_VAULT }}/OldApp_AdHoc_Share_Extension/OldApp_AdHoc_Share_Extension.mobileprovision" --force --out-file ./OldApp_AdHoc_Share_Extension.mobileprovision
@@ -171,6 +171,8 @@ jobs:
171171
<string>${{ vars.APPLE_SHARE_PROVISIONING_PROFILE_NAME }}</string>
172172
<key>${{ vars.APPLE_ID }}.NotificationServiceExtension</key>
173173
<string>${{ vars.APPLE_NOTIFICATION_PROVISIONING_PROFILE_NAME }}</string>
174+
<key>${{ vars.APPLE_ID }}.LiveActivityExtension</key>
175+
<string>${{ vars.APPLE_LIVE_ACTIVITY_PROVISIONING_PROFILE_NAME }}</string>
174176
</dict>
175177
</dict>
176178
</plist>
@@ -215,7 +217,7 @@ jobs:
215217
id: prepare-profiles
216218
run: |
217219
if [ "${{ inputs.variant }}" == "Release" ]; then
218-
echo 'PROFILES=[{"name":"${{ vars.APPLE_STORE_PROVISIONING_PROFILE_NAME }}","file":"./${{ vars.APPLE_STORE_PROVISIONING_PROFILE_FILE }}"},{"name":"${{ vars.APPLE_SHARE_PROVISIONING_PROFILE_NAME }}","file":"./${{ vars.APPLE_SHARE_PROVISIONING_PROFILE_FILE }}"},{"name":"${{ vars.APPLE_NOTIFICATION_PROVISIONING_PROFILE_NAME }}","file":"./${{ vars.APPLE_NOTIFICATION_PROVISIONING_PROFILE_FILE }}"}]' >> "$GITHUB_OUTPUT"
220+
echo 'PROFILES=[{"name":"${{ vars.APPLE_STORE_PROVISIONING_PROFILE_NAME }}","file":"./${{ vars.APPLE_STORE_PROVISIONING_PROFILE_FILE }}"},{"name":"${{ vars.APPLE_SHARE_PROVISIONING_PROFILE_NAME }}","file":"./${{ vars.APPLE_SHARE_PROVISIONING_PROFILE_FILE }}"},{"name":"${{ vars.APPLE_NOTIFICATION_PROVISIONING_PROFILE_NAME }}","file":"./${{ vars.APPLE_NOTIFICATION_PROVISIONING_PROFILE_FILE }}"},{"name":"${{ vars.APPLE_LIVE_ACTIVITY_PROVISIONING_PROFILE_NAME }}","file":"./${{ vars.APPLE_LIVE_ACTIVITY_PROVISIONING_PROFILE_FILE }}"}]' >> "$GITHUB_OUTPUT"
219221
else
220222
echo 'PROFILES=[{"name":"(OldApp) AdHoc","file":"./OldApp_AdHoc.mobileprovision"},{"name":"(OldApp) AdHoc: Share Extension","file":"./OldApp_AdHoc_Share_Extension.mobileprovision"},{"name":"(OldApp) AdHoc: Notification Service","file":"./OldApp_AdHoc_Notification_Service.mobileprovision"},{"name":"(OldApp) AdHoc: LiveActivityExtension","file":"./OldApp_AdHoc_LiveActivityExtension.mobileprovision"}]' >> "$GITHUB_OUTPUT"
221223
fi

CLAUDE.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ The skill provides guidance on:
193193
**ALWAYS run these steps after making code changes, before committing:**
194194
1. **Prettier**: Run `npx prettier --write <changed files>` on every file you modified. This is mandatory - CI will reject unformatted code.
195195
2. **ESLint**: Run `npx eslint <changed files> --max-warnings=0` to catch lint errors early.
196-
3. **TypeScript**: Run `npm run typecheck` if you changed types, interfaces, or function signatures.
196+
3. **TypeScript**: Run `npm run typecheck-tsgo` after changes that may affect typing (types, interfaces, or function signatures). It is ~10x faster and usually stricter than tsc. CI validates with `npm run typecheck` (tsc), which remains the required merge gate.
197197

198198
### Testing
199199
- **Unit Tests**: Jest with React Native Testing Library
@@ -234,7 +234,10 @@ npm install
234234
# Clean build artifacts
235235
npm run clean
236236

237-
# Type checking
237+
# Type checking (tsgo, fast, for development only)
238+
npm run typecheck-tsgo
239+
240+
# Type checking (tsc, CI production gate)
238241
npm run typecheck
239242

240243
# Linting

android/app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,8 @@ android {
111111
minSdkVersion rootProject.ext.minSdkVersion
112112
targetSdkVersion rootProject.ext.targetSdkVersion
113113
multiDexEnabled rootProject.ext.multiDexEnabled
114-
versionCode 1009033203
115-
versionName "9.3.32-3"
114+
versionCode 1009033306
115+
versionName "9.3.33-6"
116116
// Supported language variants must be declared here to avoid from being removed during the compilation.
117117
// This also helps us to not include unnecessary language variants in the APK.
118118
resConfigs "en", "es"

assets/images/credit-card-lock.svg

Lines changed: 1 addition & 0 deletions
Loading
Lines changed: 1 addition & 0 deletions
Loading

docs/_layouts/default.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424

2525
<!-- SEO tags -->
2626
{% seo %}
27+
{% if page.noindex %}
28+
<meta name="robots" content="noindex, nofollow">
29+
{% endif %}
2730
</head>
2831
<body{% if page.url contains "/search" %} class="mobile-lhn"{% endif %}>
2932
<!-- Google Tag Manager (noscript) -->
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
---
2+
title: AgentZero Reference – Upcoming Features (New Expensify)
3+
description: Internal reference of planned and coming-soon features for AgentZero. Not for public search indexing.
4+
keywords: upcoming features, roadmap, coming soon, AgentZero reference
5+
noindex: true
6+
sitemap: false
7+
internalScope: For AgentZero and internal tooling only. Use this page to give accurate, forward-looking answers about features that are planned but not yet generally available. Do not expose this URL in end-user-facing help.
8+
---
9+
10+
# AgentZero Reference: Upcoming Features (New Expensify)
11+
12+
This page is a **reference for AgentZero** only. It lists features that are planned or in development for New Expensify. Use it to answer user questions about "coming soon" capabilities accurately and to avoid promising features that are not yet released.
13+
14+
**Important:** These items are subject to change. When in doubt, direct members to official release notes or support for the latest status.
15+
16+
---
17+
18+
## Expense & Report Management
19+
20+
- **Recurring expense templates** – Save and reuse expense templates (e.g. monthly parking, subscriptions) for faster entry instead of re-entering the same expenses each time.
21+
- **Report templates** – Create report templates with default workspace, categories, and approval flow for frequent report types.
22+
- **Approver reminders for outstanding reports** – Optional reminders for approvers when submitted reports have been waiting for approval beyond a set time.
23+
24+
---
25+
26+
## Workspace & Policy
27+
28+
## Workspace Configuration
29+
30+
- **Workspace presets** – Quick-start workspace templates (e.g. "Small business", "Enterprise") to reduce initial workspace setup time.
31+
32+
## Integrations & Accounting
33+
34+
- **Sync status dashboard** – A central view showing sync health, errors, and last successful sync across all accounting connections in one place.
35+
- **Mapping recommendations** – AI-assisted suggestions for chart of accounts and category mapping during accounting integration setup.
36+
37+
---
38+
39+
## Expensify Card & Company Cards
40+
41+
- **Card design customization** – Custom card designs and additional visual options for Expensify Card programs.
42+
43+
---
44+
45+
## Payments & Reimbursements
46+
47+
- **Payment scheduling** – Schedule batch payments for approved reports on a future date (e.g. weekly pay runs).
48+
- **Reimbursement deposit notifications** – Dedicated in-app and email notifications when a reimbursement is initiated, in transit, or deposited.
49+
50+
---
51+
52+
## Travel
53+
54+
- **Travel policy rules** – Stricter enforcement of booking rules (e.g. class of service caps, advance booking requirements, price limits) with clear messaging when a booking falls outside policy.
55+
- **Trip templates** – Reusable trip templates for common routes or recurring event types.
56+
- **Travel reporting dashboard** – Dedicated travel spend and compliance views for admins, separate from general expense reporting.
57+
58+
---
59+
60+
## Search, Insights & Export
61+
62+
- **Scheduled exports** – Automated CSV or integration exports on a recurring schedule (e.g. weekly, monthly).
63+
64+
---
65+
66+
## Security & Compliance
67+
68+
- **Additional 2FA methods** – Support for second-factor authentication methods beyond authenticator apps, such as hardware security keys.
69+
- **Audit log export** – Export workspace audit logs for compliance reviews and internal auditing.
70+
- **Data residency** – Options for data storage in specified geographic regions where applicable.
71+
72+
---
73+
74+
## Help & Localization
75+
76+
- **Help articles in more languages** – Expanded localization of help center content beyond English.
77+
78+
---
79+
80+
- When a member asks "Is X available?" or "When is Y coming?" – check this list before answering.
81+
82+
- Point members to existing, shipped documentation for what is available today.
83+
- Do not cite this page or its URL in member-facing responses.
84+
- Point users to existing, shipped documentation for what is available today.
85+
- Do not cite this page or its URL in end-user-facing responses.
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
---
2+
title: Set up the Expensify Card in the UK and EU
3+
description: Learn how to set up and use the Expensify Card in the UK and EU, including eligibility, supported countries, and step-by-step setup instructions.
4+
keywords: [New Expensify, Expensify Card UK, EU, Global Reimbursements, GBP, EUR, card setup, issue cards, Smart Limit, virtual cards, supported countries, early release]
5+
internalScope: Audience is Workspace Admins in the UK and EU. Covers eligibility, supported countries, enabling the Expensify Card, linking a settlement account, issuing virtual cards, spending limits, foreign exchange details. Does not cover US Expensify Card setup, physical card shipping timelines, non-GBP/EUR settlement accounts
6+
---
7+
8+
9+
# Set up the Expensify Card in the UK and EU
10+
11+
The Expensify Card is available for companies in the United Kingdom and select European countries. This guide walks you through eligibility and how to set up and start using the card in GBP or EUR.
12+
13+
Workspace Admins can issue virtual Expensify Cards to members and manage spending in GBP or EUR. Physical cards will be available soon.
14+
15+
<!-- Can only be requested through New Expensify. Expensify Classic customers need to navigate to New Expensify and follow the instructions below -->
16+
17+
18+
19+
## Who can set up the Expensify Cards in the UK and EU
20+
21+
The card is currently available for:
22+
- Companies with a **GBP or EUR business bank account** connected
23+
- Businesses located in supported **UK or EEA countries**
24+
25+
If your company hasn’t yet connected a GBP or EUR business bank account, [follow this process](https://help.expensify.com/articles/new-expensify/wallet-and-payments/Enable-Global-Reimbursement) to get started.
26+
27+
## Check Which Countries Can Enable the Expensify Card in the UK and EU
28+
29+
30+
The Expensify Card can be used **anywhere Visa is accepted**.
31+
32+
However, only companies registered in the following 20 UK and EU countries can enable the Expensify Card for their Workspace:
33+
34+
- Belgium
35+
- Denmark
36+
- Estonia
37+
- Finland
38+
- Gibraltar
39+
- Greece
40+
- Ireland
41+
- Latvia
42+
- Liechtenstein
43+
- Lithuania
44+
- Luxembourg
45+
- Malta
46+
- Netherlands
47+
- Poland
48+
- Romania
49+
- Slovakia
50+
- Slovenia
51+
- Spain
52+
- Sweden
53+
- United Kingdom
54+
55+
56+
## How to set up the Expensify Card
57+
58+
## What are the pre-requisites to set up the Expensify Card in the UK and EU
59+
60+
To set up the Expensify Card in the UK and EU, you must:
61+
62+
1. Have a GBP or EUR bank account connected. To connect one, [Enable Global Reimbursement](https://help.expensify.com/articles/new-expensify/wallet-and-payments/Enable-Global-Reimbursement).
63+
2. Complete the **[Know Your Customer (KYC)](https://launch-workflow.trulioo.com/68223577c5dae52a6ec9347f)** and **[Know Your Business (KYB)](https://launch-workflow.trulioo.com/681a7cc4e65d2e48f19de9c3)** forms.
64+
3. Share the last 90 days of statements from your connected GBP or EUR bank account with Concierge so they can assess your eligible limit
65+
66+
## 1. How to enable the Expensify Card on your workspace
67+
68+
1. From navigation tabs (on the left on Web, on the bottom on Mobile), choose **Workspaces > [Workspace Name] > More features**.
69+
2. In the **Spend** section, enable **Expensify Card**.
70+
3. So that we can assess your request, reach out to Concierge and provide the last 90 days of statements from the connected UK or EU bank account
71+
72+
Once enabled, **Expensify Card** will appear in the navigation tabs.
73+
74+
## How to link a bank account to settle the Expensify Card
75+
76+
1. From navigation tabs (on the left on Web, on the bottom on Mobile), choose **Workspaces > [Workspace Name] > Expensify Card**
77+
2. Click **Issue new card**.
78+
3. Choose the GBP or EUR business bank account that should be used to settle all Expensify Card transactions.
79+
80+
## How to issue virtual Expensify Cards to employees
81+
82+
1. From navigation tabs (on the left on Web, on the bottom on Mobile), choose **Workspaces > [Workspace Name] > Expensify Card**
83+
2. Click **Issue new card**.
84+
3. Select the employee the card should be issued to.
85+
4. Choose **Virtual**.
86+
5. Pick a limit type:
87+
- **Smart limit** – Spend up to a threshold before needing approval
88+
- **Monthly limit** – Capped monthly spend
89+
- **Fixed limit** – One-time spend cap (card closes once reached)
90+
6. Enter the **spending limit**.
91+
7. Name the card to help with tracking.
92+
8. Click **Issue card** to confirm.
93+
94+
The member can begin spending with the virtual Expensify Card immediately after it’s issued.
95+
96+
97+
# FAQ
98+
99+
## What exchange rate does the Expensify Card use for foreign currency purchases?
100+
101+
We use the [Visa FX calculator](https://www.visa.co.uk/support/consumer/travel-support/exchange-rate-calculator.html) to determine exchange rates for purchases made in currencies other than GBP or EUR. Please ensure that you edit the bank fee to **0%** when using the calculator, as the Expensify Card does not incur any foreign exchange fees.
102+
103+
## Does the Expensify Card support Visa Secure for online transactions?
104+
105+
Yes, the Expensify Card protects online transactions with Visa Secure. Please review the [Visa Secure FAQs]({{site.url}}/assets/Files/Visa-secure-faq-expensify.pdf) for more information.
106+
107+
## How do I get help with the Expensify Card in the UK and EU?
108+
109+
If you need help with eligibility, verification, limits, or issuing a card, message **Concierge** directly from the app.
110+

0 commit comments

Comments
 (0)