Commit Graph
48 Commits
Author SHA1 Message Date
Ivan Vasilov 01c6b56a7c feat: Add disabled state for PostgREST (#39625)
* Fix the type for the project service status query.

* Fix the statuses math in ServiceStatus for services health.

* Minor fixes.

* Fix minor type issues.
2025-12-18 16:00:20 +00:00
Ivan Vasilov cc47bcfa6d chore: Migrate studio to use ui-patterns/shimmeringLoader (#41405)
* Add shimmering-loader CSS to ui-patterns.

* Import the shimmering-loader classes from the ui-patterns component.

* Remove ShimmeringLoader from studio.

* Migrate studio to use ui-patterns/ShimmeringLoader.

* Migrate away from using default import for ShimmeringLoader.

* Fix the css imports in docs and studio.
2025-12-17 14:54:07 +01:00
Ivan VasilovandJoshen Lim 5fb5acc0b9 chore: Refactor the generation of ids for snippets (#41264)
* Add a generateDeterministicUuid function and tests for it.

* Use the new function and generate an id automatically when creating a snippet.

* Clean up extra code.

* Don't pass in id when creating a snippet.

* Add generateSnippetTitle function and use it instead of fixed string.

* When SQL editor is open, generate an id form a generated snippet title.

* Add id override for SQL editor to avoid flash when saving the snippet.

* Merge the two generate functions to happen in the same useMemo block.

* Save the snippet to the API when adding it.

* Minor fixes from CodeRabbit review.

* Hide new folder CTA in sql editor for self-hosted

* Don't add the snippet for saving, just set the value.

* UpsertContentPayload always has an id.

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2025-12-16 09:43:59 +01:00
Ivan Vasilov 0d5be306ef chore: Bump React Query to v5 (#40174)
* Bump the deps, refactor deprecated code.

* Migrate keepPreviousData usage.

* Migrate all uses of InfiniteQuery.

* Fix refetchInterval in queries.

* Migrate all use of isLoading to isPending in mutations.

* Fix accessing location in claim-project.

* Fix a bug in duplicate query keys.

* Migrate all queries to use isPending.

* Revert "Fix accessing location in claim-project."

This reverts commit 2a07df64b5.

* Revert the rss.xml file to master.
2025-12-10 10:10:29 +01:00
Saxon FletcherandJoshen Lim 23346c1c52 Small advisor refinements (#41150)
* small advisor refinements

* copy

* Nit

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2025-12-08 16:27:06 +10:00
Danny WhiteandJoshen Lim b420385144 feat(studio): getting started completed state (#41007)
* hardcoded cta

* inset cta

* dismiss action

* left-aligned

* cleanup

* fix greens

* fix mode switcher

* combine dismiss functions

* simplify check

* remove dismiss action

could be confused for just dismissing the end state

* Tiny fies

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2025-12-05 20:56:34 +11:00
Kevin Grüneberg 915a08812d feat: support new platform plan (#40890) (#41046)
Forward compatible changes to support new platform plan (similar handling to Enterprise)
2025-12-04 17:31:27 +08:00
Joshen Lim 888b1794c6 Revert "feat: support new platform plan" (#40980)
Revert "feat: support new platform plan (#40890)"

This reverts commit ae4fe1b740.
2025-12-03 10:41:53 +08:00
Danny WhiteandJoshen Lim fea4053458 fix(studio): remove hardcoded badge capitalisation (#40970)
* fixes

* fixes

* www fixes

* Adjust JWT keys table

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2025-12-03 07:52:56 +11:00
Kevin Grüneberg ae4fe1b740 feat: support new platform plan (#40890)
Forward compatible changes to support new platform plan (similar handling to Enterprise)
2025-12-02 15:35:39 +08:00
Ali WaseemandJoshen Lim 74b13e2cef fix: added logic to check and parse valid day.js (#40960)
* wip: added logic for migration checking

* updated null check

* updated to return undefined

* updated use memo check

* updated migration text

* updated text based on migrations data

* re-added tabbed deleted code

* Updated insertedAt date logic

* Fit missing gap + add tooltip

* Niot

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2025-12-02 13:18:33 +08:00
Danny WhiteandJoshen Lim 46ac132051 chore(studio): empty state improvements (#40807)
* migrations

* clearer value prop

* consistent verb

* migration input

* triggers

* extract trigger buttons

* database backups

* schema title

* unrelated nit

* fix

* shared component

* ui-patterns

* rename

* improve docs

* remove redundant overrides

* remove old file

* prettier fix

* fix type error

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2025-11-27 17:26:20 +08:00
Joshen LimandAlaister Young ff38efd38f Update service status checks text note when some services are unhealthy (#40767)
* Update service status checks

* Nit

* Update apps/studio/components/interfaces/HomeNew/ServiceStatus.tsx

Co-authored-by: Alaister Young <alaister@users.noreply.github.com>

---------

Co-authored-by: Alaister Young <alaister@users.noreply.github.com>
2025-11-26 13:27:55 +08:00
Ali WaseemandPamela Chia 25dc1efb9f Analytics: Update tracking for Advisor (#40629)
* remove resolved events

* Remove advisor_resolved event tracking

* updated linting

* updated events to be cleaner

* refactored types

* refactor(telemetry): rename advisor click telemetry to assistant button click

---------

Co-authored-by: Pamela Chia <pamelachiamayyee@gmail.com>
2025-11-21 08:53:06 -07:00
Ivan Vasilov a40ccc4b45 chore: Clean onSuccess and onError props on useQuery (#40641)
* Remove all onSuccess and onErrors from useQuery.

* Minor fixes to all refetchInterval.

* Fix smaller type issues.
2025-11-20 14:08:56 +01:00
Jordi Enric ece02759d7 [DESIGN-301] Project Homepage: refactor to logflare endpoint (#40124) 2025-11-10 10:30:45 +01:00
c63d2a92a0 Unify Inbox and Advisor (#40026)
* sidebar-manager

* storage keys

* tests

* more ai spots

* test fix

* revert to default

* remove ref

* Update apps/studio/state/sidebar-manager-state.tsx

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update apps/studio/components/ui/AIAssistantPanel/AIAssistant.tsx

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix ts

* fix

* fux

* fux query param

* clean

* fix

* more

* mock local storage

* simplify

* remove provider test

* remve useopensidebar

* fix(new homepage): open ai assistant on advisor card button clicks

* Update apps/studio/components/layouts/ProjectLayout/LayoutSidebar/index.tsx

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>

* Update apps/studio/state/sidebar-manager-state.tsx

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>

* refine

* editor sidebar manager

* reset results

* advisor sidebar manager

* empty state and notice

* event tracking

* remove variable

* remove use effect

* open in sidebar

* use sidebar old home

* Update apps/studio/components/ui/EditorPanel/EditorPanel.tsx

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>

* connect hotkey

* Update apps/studio/components/layouts/AppLayout/AssistantButton.tsx

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>

* Update apps/studio/state/advisor-state.ts

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>

* Update apps/studio/state/advisor-state.ts

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>

* fix

* initial prompt

* fix(inline editor button): only show keyboard shortcut if hotkey active

* cleanup(advisor panel): minor code cleanup

* fix(advisor panel): misplaced key on list

* fix(advisor panel): add error state

* fix(advisor panel): improve a11y

* fix(advisor panel): cannot find selected item

* fix

* fix

* tooltip

* link

* sidebar move up

* merge inbox

* project/org sidebars

* panels

* clean

* fix use effect

* layoutheader export

* fix

* ts

* prettier

* tests

* remove markdown

* remove org and project filters from state

* text link

* Update apps/studio/state/sidebar-manager-state.tsx

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix

* prettier

* remove files

* bump limit

* noop

* format

* remove notifications on self hosted

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Charis Lam <26616127+charislam@users.noreply.github.com>
Co-authored-by: Alaister Young <alaister@users.noreply.github.com>
2025-11-07 15:01:53 +10:00
Riccardo Busetti 3182df1c76 feat(etl): Improve destination panel UI (#40001) 2025-10-31 15:34:10 +01:00
Saxon Fletcher d66307f98b fix responsive issues (#40029)
* fix responsive issues

* sidebar width
2025-10-31 19:25:41 +10:00
Joshen Lim b4d38fabd0 Chore/barrel files bye part 05 (#40016)
* Clean up barrel files part 4

* nit

* Part 5 of cleaning up barrel files

* Revert changes for types

* Nit
2025-10-31 13:15:31 +08:00
d10001b7a7 Advisor sidebar manager (#39889)
* sidebar-manager

* storage keys

* tests

* more ai spots

* test fix

* revert to default

* remove ref

* Update apps/studio/state/sidebar-manager-state.tsx

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update apps/studio/components/ui/AIAssistantPanel/AIAssistant.tsx

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix ts

* fix

* fux

* fux query param

* clean

* fix

* more

* mock local storage

* simplify

* remove provider test

* remve useopensidebar

* fix(new homepage): open ai assistant on advisor card button clicks

* Update apps/studio/components/layouts/ProjectLayout/LayoutSidebar/index.tsx

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>

* Update apps/studio/state/sidebar-manager-state.tsx

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>

* refine

* editor sidebar manager

* reset results

* advisor sidebar manager

* empty state and notice

* event tracking

* remove variable

* remove use effect

* open in sidebar

* use sidebar old home

* Update apps/studio/components/ui/EditorPanel/EditorPanel.tsx

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>

* connect hotkey

* Update apps/studio/components/layouts/AppLayout/AssistantButton.tsx

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>

* Update apps/studio/state/advisor-state.ts

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>

* Update apps/studio/state/advisor-state.ts

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>

* fix

* initial prompt

* fix(inline editor button): only show keyboard shortcut if hotkey active

* cleanup(advisor panel): minor code cleanup

* fix(advisor panel): misplaced key on list

* fix(advisor panel): add error state

* fix(advisor panel): improve a11y

* fix(advisor panel): cannot find selected item

* fix

* fix

* tooltip

* link

* sidebar move up

* LayoutSidebarProvider to only sendEvent if in a project

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Charis Lam <26616127+charislam@users.noreply.github.com>
Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2025-10-30 17:43:02 +10:00
Saxon FletcherandJoshen Lim 4608b9af8c Simplify paused state (#39922)
* simplify paused state

* copy

* dialog

* Update UI

* More nudges

* nit

* Nudge

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2025-10-29 23:56:22 +08:00
738c568e6b Sidebar manager (#39795)
* sidebar-manager

* storage keys

* tests

* more ai spots

* test fix

* revert to default

* remove ref

* Update apps/studio/state/sidebar-manager-state.tsx

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update apps/studio/components/ui/AIAssistantPanel/AIAssistant.tsx

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix ts

* fix

* fux

* fux query param

* clean

* fix

* more

* mock local storage

* simplify

* remove provider test

* remve useopensidebar

* fix(new homepage): open ai assistant on advisor card button clicks

* Update apps/studio/components/layouts/ProjectLayout/LayoutSidebar/index.tsx

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>

* Update apps/studio/state/sidebar-manager-state.tsx

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>

* refine

* FIX

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Charis Lam <26616127+charislam@users.noreply.github.com>
2025-10-28 10:07:21 +10:00
Jordi Enric c44220c096 add coming up state to new project home DESIGN-300 (#39680)
* add coming up state to new project home

* handle redirect correctly

* tweak spinner/laben logic

* show empty state in advisor whiel coming up

* prevent query while advisor is forcing empty state

* fix enabled

* rm state dep

* move complex bool to variable
2025-10-23 15:25:43 +02:00
Jordi Enric a37ae0a3dc swap error rate for success rate and add tests (#39774)
* swap error rate for success rate and add tests

* rm comment

* format delta
2025-10-22 17:15:15 +02:00
Jordi EnricandAli Waseem aa30698cc2 feat: new getting started section to open correct presets in Connect dialog DESIGN-302 (#39731)
* fix framework dropdown opening and scrolling page up

* fix tab opening

* add infertab util

* add some tests

* update getting started section

* fix rounded

* smol explainer

* Update apps/studio/components/interfaces/Connect/Connect.tsx

Co-authored-by: Ali Waseem <waseema393@gmail.com>

* simplify confiitonal

* moar tests

---------

Co-authored-by: Ali Waseem <waseema393@gmail.com>
2025-10-22 17:14:36 +02:00
Joshen Lim a880031cc0 Fix project card instance size missing (#39616)
* Fix project card instance size missing

* Fix types
2025-10-17 23:39:33 +08:00
Saxon Fletcher d6f076bda7 Hide GettingStarted if mature (#39582)
* hide if mature

* use project
2025-10-16 14:36:10 +08:00
Raminder Singh a21fa43d8f feat: add iceberg (analytics bucket) destination in UI (#39324) 2025-10-16 06:56:11 +05:30
Saxon Fletcher 43b686e31a Drag query to home (#39506)
* drag report to home

* drag handle styling and report overlay
2025-10-16 09:01:55 +10:00
Saxon FletcherandJoshen Lim 622486f750 Refresh report and status update (#39473)
* refresh report

* project status

* prettier

* Minor refactors

* add back refreshing

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2025-10-14 08:09:48 +10:00
Saxon Fletcher afc97c6413 Remove has configured auth step (#39424) 2025-10-10 18:28:28 +10:00
Saxon FletcherandJoshen Lim 410d76fff3 Getting started step status (#38910)
* home row size

* use prop instead

* revert previewer

* hook getting started up

* report empty state

* remove images for now

* fix paused state

* remove file

* swithed toggles

* remove any

* Simplify top section

* Nit clean

* Simplify

* Add new snippet button to SnippetDropdown, and hide Row arrow if number of children doesnt exceed number of columns

* Hide arrow in Row component if number of children doesnt exceed number of columns

* Fix snippetdropdown if theres snippet with same name

* update hasFirstUser check to return false if count is estimate

* bucket and functions code actions

* reframe sign ups

* fix

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2025-10-10 13:34:04 +10:00
Joshen Lim aa22af8ecd Deprecate useProjectByRefQuery, replace all usage with just useProjec… (#39316)
* Midway

* Add projects-infinite-query and remove use projects query in account audit logs

* Remove useProjectsQuery from RouteValidationWrapper

* Remove useProjectsQuery from OrganizationCard

* Remove useProjectsQuery in new project page

* Deprecate useProjectByRefQuery, replace all usage with just useProjectDetailQuery

* Remove useProjectsQuery from Organization Audit logs

* Fix check
2025-10-08 10:50:10 +08:00
Danny WhiteandJoshen Lim 5ff03b2971 feat: custom bucket icons (#39280)
* chore: separate interfaces per bucket type

* chore: reuse existing bucket creation modal for files

* chore: allow external trigger for new bucket modal

* chore: minor fixes

* chore: full-size empty state

* chore: files other tabs

* fix: show tab bar when on file subroute

* chore: use existing table component to list buckets

* fix: tests

* fix: build error

* chore: remove future bucket type components from PR

* fix: dependency

* Couple of refactors to simplify implementation

* Fix TS

* chore: move s3 settings out to sidebar

* fix: minor nits

* fix: reuse existing loading spinners from schema visualiser

* fix: loading for files

* fix: prevent loading of table for zero buckets

* chore: improved loading state

* chore: shimmer on table

* chore: copywriting on S3

* chore: improve empty states

* fix: deprecated input instructions

* fix: filter/search bucket table

* chore: tidy

* fix: tests

* first commit

* improve documentation and fix icon build error

* change svg kebab case to camel case for React

* copy nits

* fix svg codeblock color

* add bucket (normal) icon

* add bucket icon to policies

* add bucket icon to other storage bucket surfaces

* fix spacing on empty state

* fix inconsistent icons in home sections

Make 1:1 with what we have in the sidebar with optically-correct strokeWidth.

* fix icons

Like the previous commit, this makes sure we use the same product icons as in the sidebar.

* clearer bucket add icon naming

* remove unused layouts

* fix naming collision

* Tinnnnyyy nit

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2025-10-08 13:14:03 +11:00
626eb30e77 Assistant action orientated approach (#38806)
* update onboarding

* update model and fix part issue

* action orientated assistant

* fix tool

* lock

* remove unused filter

* fix tests

* fix again

* update package

* update container

* fix tests

* refactor(ai assistant): break out message markdown and profile picture

* wip

* refactor(ai assistant): break up message component

* refactor: break ai assistant message down into multiple files

* refactor: simplify ReportBlock state

* fix: styling of draggable report block header

When the drag handle is showing, it overlaps with the block header.
Decrease the opacity of the header so the handle can be seen and the two
can be distinguished.

* fix: minor tweaks to tool ui

* refactor: simplify DisplayBlockRenderer state

* fix: remove double deploy button in edge function block

When the confirm footer is shown, the deploy button on the top right should be
hidden (not just disabled) to avoid confusion.

* refactor, test: message sanitization by opt-in level

Refactor the message sanitization to have more type safety and be more testable.
Add tests to ensure:

- Message sanitization always runs on generate-v4
- Message sanitization correctly works by opt-in level

* Fix conflicts in pnpm lock

* Couple of nits and refactors

* Revert casing for report block snippet

* adjust sanitised prompt

* Fix tests

---------

Co-authored-by: Charis Lam <26616127+charislam@users.noreply.github.com>
Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2025-09-29 03:57:36 +00:00
5f533247e1 Update docs url to env var (#38772)
* Update Supabase docs URLs to use env variable

Co-authored-by: a <a@alaisteryoung.com>

* Refactor: Use DOCS_URL constant for documentation links

This change centralizes documentation links using a new DOCS_URL constant, improving maintainability and consistency.

Co-authored-by: a <a@alaisteryoung.com>

* Refactor: Use DOCS_URL constant for all documentation links

This change replaces hardcoded documentation URLs with a centralized constant, improving maintainability and consistency.

Co-authored-by: a <a@alaisteryoung.com>

* replace more instances

* ci: Autofix updates from GitHub workflow

* remaining instances

* fix duplicate useRouter

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: alaister <10985857+alaister@users.noreply.github.com>
2025-09-26 10:16:33 +00:00
Pamela ChiaandJoshen Lim b3b5652555 Feat/add tracking and phflag for new home (#38853)
* add phflag

* track homev2 clicks

* track v2 drags

* remove old home tracking and extra visibility tracking

* add advisor, usage, and report clicks

* fix import type

* track remove charts from home

* rename actions to follow conventions

* fix lints

* simplify activity stats and add issue count property

* reduce useSelectedProjectQuery

* revert onClick and improve event properties

* Fix broken images

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2025-09-23 21:22:27 +08:00
Joshen Lim 3254f23149 Fix last backup timestamp info (#38857) 2025-09-22 11:46:54 +07:00
Saxon Fletcher 0c8359ca0f Refine home styles (#38903)
* home row size

* use prop instead

* revert previewer
2025-09-22 04:42:03 +00:00
Saxon Fletcher 478a38dfb2 Chore/new getting started (#38843)
* Update GettingStarted.tsx

* geting started

* update getting started

* badge

* image fixes

* padding

* select none
2025-09-21 23:18:17 +00:00
Saxon FletcherandJoshen Lim dc41cfd7e1 Refine top section home new (#38802)
* refine activity

* make component

* Smol fix

* Nit

* add group

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2025-09-18 19:46:50 +10:00
Joshen Lim d46525eac1 Chore/swap use check permissions with use async check project permissions part 8 (Season Finale) (#38619)
* Update perms checking in audit logs

* Deprecate useCheckPermissions, useIsPermissionsLoaded and useCheckProjectPermissions as they're no longer used

* Rename useAsyncCheckProjectPermissions to useAsyncCheckPermissions

* Fix TS
2025-09-16 17:05:57 +08:00
Saxon FletcherandJoshen Lim 30e73ee44d Home New: Report (#38341)
* new home top

* advisors

* fix ts

* add report section

* add report

* Nit refactor

* refactor row

* prevent adding snippet twice

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2025-09-16 11:00:25 +08:00
Saxon FletcherandJoshen Lim 3bea8f5bf0 Home New: Project Usage (#38339)
* new home top

* advisors

* add project usage section

* fix ts

* postgres

* add advisor section

* Nit

* Nit

* Attempt to fix ui library build issue

* Revert changes to Row/index.tsx

* Fix icon positioning

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2025-09-12 09:34:28 +10:00
Saxon FletcherandCharis Lam 697709af58 Home New: Getting Started (#38574)
* getting started row

* refine

* fix: minor type and lint issues

* connect

---------

Co-authored-by: Charis Lam <26616127+charislam@users.noreply.github.com>
2025-09-11 00:05:03 +00:00
8da4cbc46e Home New: Advisors (#38337)
* new home top

* advisors

* fix ts

* add advisor section

* Update apps/studio/components/interfaces/Linter/Linter.utils.tsx

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>

* Update apps/studio/components/interfaces/Linter/LintDetail.tsx

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>

* Update apps/studio/components/interfaces/Linter/LinterDataGrid.tsx

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>

* Update packages/ui-patterns/src/Row/index.tsx

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>

* Update packages/ui-patterns/src/Row/index.tsx

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>

* Update apps/studio/components/interfaces/HomeNew/AdvisorSection.tsx

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>

* row refactor

---------

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>
Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2025-09-10 12:49:34 +10:00
Saxon FletcherandJoshen Lim 0f712bc9e2 Home New: Top (#38336)
* new home top

* misc clean ups

* branching truncate

* revert to button

* fixes

* Add comments + small style nudges

* Add comment

* nit

* Use Timestampinfo

* final final final v4

* I swear last nit i found

* FIX

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2025-09-04 10:58:30 +10:00