Commit Graph
4896 Commits
Author SHA1 Message Date
Reece c530ae286f server folder improvements 2026-04-01 14:43:47 +01:00
Reece 54b3f0553d feat: server-folder watch folders with SSE auth, TTL cleanup, and on-demand processing
- Add sseToken exchange flow (POST /sse-token → GET /events?sseToken=) replacing JWT-in-URL
- Server folder outputs stay on server; IDB holds only metadata (serverOutputFilenames)
- Trigger immediate processing on upload via POST /server-folder/{id}/process
- Scheduled scan skips session-managed folders (on-demand only)
- Per-folder output TTL with hourly cleanup; delete-on-download fires on local FS export only
- .ready marker prevents partial-upload race in collectFilesForProcessing
- Fix concurrent map mutation in cleanupOldJobs with removeIf
- Update Playwright tests to use sseToken flow and trigger endpoint
2026-03-30 18:50:47 +01:00
Reece c96360d32e Improved folder creation 2026-03-26 14:52:13 +00:00
Reece 1beacd5668 Improved stats 2026-03-25 16:22:51 +00:00
Reece 0826eab7a7 Stats and turn modals into filters 2026-03-25 14:00:43 +00:00
Reece fac51bc339 filters and error handling 2026-03-24 15:52:42 +00:00
Reece 2139edc157 Backend smart foldering 2026-03-23 21:37:27 +00:00
Reece 1cade6c030 Service worker retry failed files 2026-03-23 15:33:31 +00:00
Reece 90976cf751 retry, output versioning, IDB race fixes, and code quality 2026-03-23 14:59:15 +00:00
Reece a5955000d0 Routing for watched folders 2026-03-19 13:10:34 +00:00
Reece 48fc657a3a Improvements 2026-03-17 14:27:32 +00:00
Reece 993abdae45 Review fixes 2026-03-13 15:21:03 +00:00
Reece 8e29790ff0 rework indexxedb system 2026-03-13 14:10:18 +00:00
Reece 4e419d135d add folders fixes and improvements 2026-03-13 00:35:44 +00:00
Reece 0f1c0c2e3f improved file handling and fix default population 2026-03-13 00:03:26 +00:00
Reece 379bbf5ed4 test 2026-03-12 13:28:41 +00:00
Reece BrowneandGitHub 931a3c9d16 Merge branch 'main' into feature/v2/smartfolders 2026-03-12 13:03:56 +00:00
James BruntonandGitHub 8674765528 Add system for managing env vars (#5902)
# Description of Changes
Previously, `VITE_*` environment variables were scattered across the
codebase with hardcoded fallback values inline (e.g.
`import.meta.env.VITE_STRIPE_KEY || 'pk_live_...'`). This made it
unclear which variables
were required, what they were for, and caused real keys to be silently
used in builds where they hadn't been explicitly configured.

## What's changed

I've added `frontend/.env.example` and `frontend/.env.desktop.example`,
which declare every `VITE_*` variable the app uses, with comments
explaining each one and sensible defaults where applicable. These
are the source of truth for what's required.

I've added a setup script which runs before `npm run dev`, `build`,
`tauri-dev`, and all `tauri-build*` commands. It:
- Creates your local `.env` / `.env.desktop` from the example files on
first run, so you don't need to do anything manually
- Errors if you're missing keys that the example defines (e.g. after
pulling changes that added a new variable). These can either be
manually-set env vars, or in your `.env` file (env vars take precedence
over `.env` file vars when running)
- Warns if you have `VITE_*` variables set in your environment that
aren't listed in any example file

I've removed all `|| 'hardcoded-value'` defaults from source files
because they are not necessary in this system, as all variables must be
explicitly set (they can be set to `VITE_ENV_VAR=`, just as long as the
variable actually exists). I think this system will make it really
obvious exactly what you need to set and what's actually running in the
code.

I've added a test that checks that every `import.meta.env.VITE_*`
reference found in source is present in at least one example file, so
new variables can't be added without being documented.

## For contributors

New contributors shouldn't need to do anything - `npm run dev` will
create your `.env` automatically.

If you already have a `.env` file in the `frontend/` folder, you may
well need to update it to make the system happy. Here's an example
output from running `npm run dev` with an old `.env` file:

```
$ npm run dev

> frontend@0.1.0 dev
> npm run prep && vite


> frontend@0.1.0 prep
> tsx scripts/setup-env.ts && npm run generate-icons

setup-env: see frontend/README.md#environment-variables for documentation
setup-env: .env is missing keys from config/.env.example:
  VITE_GOOGLE_DRIVE_CLIENT_ID
  VITE_GOOGLE_DRIVE_API_KEY
  VITE_GOOGLE_DRIVE_APP_ID
  VITE_PUBLIC_POSTHOG_KEY
  VITE_PUBLIC_POSTHOG_HOST
  Add them manually or delete your local file to re-copy from the example.
setup-env: the following VITE_ vars are set but not listed in any example file:
  VITE_DEV_BYPASS_AUTH
  Add them to config/.env.example or config/.env.desktop.example if they are required.
```

If you add a new `VITE_*` variable to the codebase, add it to the
appropriate `frontend/config/.env.example` file or the test will fail.
2026-03-12 13:03:44 +00:00
Reece BrowneandGitHub 27baf4b59d Merge branch 'main' into feature/v2/smartfolders 2026-03-12 12:58:22 +00:00
Reece 539e6d77a0 lint and tsc 2026-03-12 12:55:48 +00:00
Reece 1becfbe8de Improved myfolders 2026-03-12 12:05:38 +00:00
Reece 05f442a48a Revert erronious change 2026-03-12 01:11:58 +00:00
Reece 02bd302b4a Watch homepage improvements 2026-03-12 01:09:14 +00:00
ConnorYohandGitHub d5d03b9ada Manage state of price-lookup calls (#5915)
Now calls stripe-price-lookup once when prices are required rather then
bombarding on every rerender
2026-03-11 13:53:49 +00:00
James BruntonandGitHub 32cf6866f3 Move AI advice to AGENTS.md and add symlink from CLAUDE.md (#5914)
# Description of Changes
Inspired by https://github.com/pydantic/pydantic-ai/pull/4169, this PR
moves our `CLAUDE.md` advice to the more generic `AGENTS.md` file (which
works on Codex, Gemini, etc). It also adds a symlink from `CLAUDE.md` to
`AGENTS.md`, which Claude follows properly, so all AIs should get the
same advice and we only need to keep one file up-to-date.
2026-03-11 13:43:30 +00:00
Reece c31d7a7c5d New modals and animations 2026-03-11 12:00:42 +00:00
James BruntonandGitHub fa8c52b2be Add SaaS frontend code (#5879)
# Description of Changes
Adds the code for the SaaS frontend as proprietary code to the OSS repo.
This version of the code is adapted from 22/1/2026, which was the last
SaaS version based on the 'V2' design. This will move us closer to being
able to have the OSS products understand whether the user has a SaaS
account, and provide the correct UI in those cases.
2026-03-11 11:53:54 +00:00
Reece 1eab84bdb3 UI upgrades 2026-03-10 16:24:46 +00:00
ConnorYohandGitHub 8bc37bf5ae Desktop: Fallback to local backend if self-hosted server is offline (#5880)
* Adds a fallback mechanism so the desktop app routes tool operations to
the local bundled backend when the user's self-hosted Stirling-PDF
server goes offline, and disables tools in the UI that aren't supported
locally.

* `selfHostedServerMonitor.ts` independently polls the self-hosted
server every 15s and exposes which tool endpoints are unavailable when
it goes offline
* `operationRouter.ts` intercepts operations destined for the
self-hosted server and reroutes them to the local bundled backend when
the monitor reports it offline
* `useSelfHostedToolAvailability.ts` feeds the offline tool set into
useToolManagement, disabling affected tools in the UI with a
selfHostedOffline reason and banner warning

- `SelfHostedOfflineBanner `is a dismissable (session-only) gray bar
shown at the top of the UI when in self-hosted mode and the server goes
offline. It shows:
2026-03-10 10:04:56 +00:00
Reece 1aff53e405 Ui overhaul step 1 2026-03-09 16:26:49 +00:00
James BruntonandGitHub 6d9fc59bc5 Get rid of bad description for file association on Windows (#5905)
# Description of Changes
Explorer currently shows this on Windows:

<img width="380" height="43" alt="image"
src="https://github.com/user-attachments/assets/a892d827-8e0a-4f85-a035-52a454eaadd8"
/>

This PR just removes the description for the file association so we use
the default behaviour. This string is only used on Windows according to
the [Tauri docs](https://v2.tauri.app/reference/config/#description-1).
2026-03-09 15:02:10 +00:00
ff31b2f9ca Posthog-fixes (#5901)
PostHog is now initialized with persistence: 'memory' so no cookies are
written on first load. Consent is handled in a PostHogConsentSync
component that switches to localStorage+cookie persistence only when the
user accepts, using the official @posthog/react package (cherry-picked
from 14aaf64)

---------

Co-authored-by: James Brunton <james@stirlingpdf.com>
2026-03-09 12:13:09 +00:00
Brian BanerjeeandGitHub 81596f0299 Limit PostHog cookie to Stirling PDF's subdomain only (#5882) 2026-03-08 21:03:10 +00:00
Reece df65620d85 Watch folders set up 2026-03-06 18:40:27 +00:00
Reece BrowneandGitHub 63d38e382d Chore/v2/transforms as root (#5868)
Any task that changes file type or produces more/fewer files than the
input are now consumed as root files not incremented versions of the
input.
2026-03-06 13:46:40 +00:00
Anthony StirlingandGitHub a57e336675 Add searchable settings selector to AppConfigModal and improve nav behavior (#5873) v2.7.0 2026-03-06 11:11:17 +00:00
Anthony StirlingandGitHub 456106195e translations and version bump (#5878) 2026-03-06 11:09:18 +00:00
Anthony StirlingandGitHub 7c1eb4183b stop enabling english (#5874) 2026-03-06 10:09:51 +00:00
7d640e9ce6 option to hide google drive and add settings (#5863)
Co-authored-by: EthanHealy01 <80844253+EthanHealy01@users.noreply.github.com>
2026-03-06 10:09:33 +00:00
ConnorYohandGitHub cafcee6c99 Add the production billing portal link for static plan page (#5860) 2026-03-06 10:08:38 +00:00
ConnorYohandGitHub 7fdd100abf Fix signatures not showing (#5872) 2026-03-06 00:43:29 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
086b55b0bb build(deps): bump pypdf from 6.7.4 to 6.7.5 in /testing/cucumber in the pip group across 1 directory (#5853)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-06 00:15:46 +00:00
c77242d943 fix: merge pdf pipeline validation (#5799)
Co-authored-by: RenzoMXD <RenzoMXD@users.noreply.github.com>
2026-03-06 00:14:30 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
30b0924d6b build(deps): bump digicert/ssm-code-signing from 1.2.0 to 1.2.1 (#5692)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-06 00:13:59 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2d6f206c36 build(deps): bump actions/setup-node from 4.4.0 to 6.2.0 (#5691)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-06 00:13:35 +00:00
Anthony StirlingandGitHub 6c83da6417 Audit fixes and improvements (#5835) 2026-03-05 22:00:44 +00:00
Anthony StirlingandGitHub 879ffc066f tauri notifications (#5875) 2026-03-05 18:30:20 +00:00
Anthony StirlingandGitHub 0f7ee5c5b0 settings menu reworks (#5864) 2026-03-05 16:20:20 +00:00
Anthony StirlingandGitHub ba2d10a75b Persist Tauri window state between launches (#5871) 2026-03-05 16:18:25 +00:00
ConnorYohandGitHub 98835ce7b5 Don't build mac if you don't have the secrets (#5861)
Don't build mac if signing secrets unnavailable. 

No point in trying to build without signing as you cannot install it on
a mac without signature.
2026-03-04 15:59:42 +00:00