Commit Graph

673 Commits

Author SHA1 Message Date
Jay Ohms e379721c2f Merge branch 'main' into mobile-app/prepare-webviews
* main: (107 commits)
  Document the new sign in method
  Replace handle_ naming
  Use same constant for fake magic links
  Replace FakeMagicLink with a temporary object
  Tidy up session_token
  Clean up interfaces
  Split tests by controller or responsibility
  Simplify auth logic
  Fix due to unit test when creating with invalid emails
  Restore sessions_controller test on creating invalid email address
  Move magic link api tests to their own files
  Rename test to clarify what they're about
  Cleanup session creation
  Update to always return a pending auth token for JSON responses.
  Update API test for cross code
  Change test expectation on single tenant mode account creation
  Add unit tests for the new endpoints
  Pass a server token when creating a magic link via API
  Simplify code a bit
  Simplify session create logic for both html and json
  ...
2025-12-19 13:52:04 -05:00
Jorge Manrubia 2cbbdfbd19 Merge pull request #2138 from italomatos/refactor/replace-reverse-merge-with-with-defaults
Refactor: Replace reverse_merge with with_defaults for improved readability
2025-12-19 11:24:46 +01:00
Oleh Khomei e67e658e98 Remove unused method 2025-12-18 20:37:28 +02:00
Adrien Maston 12bc237665 Horizontal column picker
... in card perma
2025-12-17 11:34:31 +01:00
Jason Zimdars 8659e19671 Collapse and expand system comments 2025-12-16 14:21:48 -06:00
Jorge Manrubia 0278fe6ae4 Revert "Mobile app / Scoped stylesheets" (#1698)
This reverts commit 39c1906e67.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-16 17:20:18 +01:00
Adrien Maston 1f346085b9 Merge branch 'main' into mobile-app/scoped-stylesheets
* main: (119 commits)
  Bust comment view cache
  Update lexxy to bring fixes from https://github.com/basecamp/lexxy/releases/tag/v0.1.24.beta
  Fix unexpected remove empty line from README
  Lightbox uses Stimulus target callbacks instead of data-action
  Add test coverage for the image lightbox
  Add tests for tenancy middleware and timezone cookie
  Refactor: Simplify TimeWindowParser using Rails convenience methods
  SMTP: support SMTPS on port 465 (#2132)
  Bump fizzy-saas to retain fewer docker images (#2134)
  Add test coverage for with_golden_first scope (#2130)
  Refactor: improve query scope composition with merge syntax (#2131)
  Validate avatar sizes
  Introduce Vips configuration
  Tailscale serve support (#2126)
  Update tests with final method naming: record! -> record
  CSP config to allow Minio in development
  Update fizzy-saas to get employee restriction in staging
  Drop staff restriction in beta and staging
  Unused
  Use new FIZZY_GH_TOKEN with limited access
  ...
2025-12-15 10:43:32 +01:00
Italo Matos cd4fbc011c Refactor: Replace reverse_merge with with_defaults for improved readability
Replace all occurrences of reverse_merge with with_defaults across the codebase.
The with_defaults method provides clearer intent and better readability when
setting default values for hash parameters.

Changes:
- app/helpers/columns_helper.rb: Update column_frame_tag method
- app/models/user/email_address_changeable.rb: Update generate_email_address_change_token method
- app/models/account.rb: Update create_with_owner method
- app/controllers/concerns/filter_scoped.rb: Update filter_params method

This refactoring maintains the same functionality while improving code clarity.
2025-12-14 14:22:06 -03:00
Mike Dalessio 3d523b84fc Explicitly use main_app for URL helpers
in controller concerns that are mixed into other engines' controllers. This prevents errors like:

> NoMethodError: undefined method 'session_menu_url' for an instance of ActiveStorage::DirectUploadsController

See also 912bb8a8 and 5ee10800
2025-12-11 12:55:32 -05:00
Adrien Maston 865fbdcf66 Merge branch 'main' into mobile-app/scoped-stylesheets
* main: (117 commits)
  Explain that the upload URL is account-scope
  Allow direct uploads via API
  Storage: ignore jobs for now-deleted targets
  API: Support `created_at` for API card and comment creation (#2056)
  Enforce CSP (#2070)
  CSP: full config with env vars per source (#2069)
  Speedy, auditable, deadlock-resistant storage tracking (#2026)
  Gitleaks: ignore legit non-sensitive API keys and tokens in docs/ and test/ (#2068)
  Get gitleaks-audit green again
  Bump actions/checkout from 4 to 6 (#2047)
  Bump docker/login-action from 3.5.0 to 3.6.0 (#2046)
  Bump docker/metadata-action from 5.8.0 to 5.10.0 (#2045)
  Bump sigstore/cosign-installer from 3.9.2 to 4.0.0 (#2044)
  make MySQL SSL mode configurable via env var (#2036)
  Update tip text for turning a card into a Golden Ticket
  Revert "Fix Lexxy prompt list padding by lowering rich-text specificity"
  Fix Lexxy prompt list padding by lowering rich-text specificity
  Improve phrasing
  Fix crash due to missing partial
  Fix status and filter mistakes
  ...
2025-12-11 13:42:48 +01:00
Mike Dalessio e0c821f69b Autolinking is more robust
and handles URLs with CGI params, recognizes more (and multiple)
trailing punctuation marks including entity-encoded punctuation like
`&quot;`.
2025-12-10 10:42:24 -05:00
Mike Dalessio c5721b8187 Avoid unescaping characters when auto-linking
which could lead to Nokogiri unintentionally parsing tags from a
previously-escaped text node.
2025-12-10 10:38:43 -05:00
Adrien Maston 6c53fdb525 Merge branch 'main' into mobile-app/scoped-stylesheets
* main: (70 commits)
  bin/ci: run OSS suite in SAAS mode for full coverage (#2029)
  Fix flaky tests caused by leaky show_exceptions twiddling (#2028)
  Fix ActiveStorage FileNotFoundError with immediate variant processing (#2022)
  Immediate avatar and embed variants (#2002)
  Should be in global gitignore
  Account for browser button styled and adjust mobile padding for perma BG
  Wrap the overflow menu
  doc: update style doc reference for LLM agents
  Fix Identity destruction callback ordering
  Ensure user toggles on board edit page are cached properly
  Adopt a cooldown period for dependency updates
  Add lazy error context for Rails error reporter (#2014)
  Disable board edit buttons for select all/none when not privileged
  Autotuner: use structured logging instead of Sentry (#2011)
  Add datetime to the search results
  Fix involvement button label
  Bump mittens to 0.3.1 (#2006)
  No need to pass Currentl.user since it is the default value for the param
  Validate email before creating identity during join code redemption
  Ignore RubyMine project files in .gitignore
  ...
2025-12-09 09:11:51 +01:00
Mike Dalessio abe48f0efa Ensure user toggles on board edit page are cached properly
Not including the disabled flag as part of the cache resulted in
issues like the one described in #1992
2025-12-08 14:21:56 -05:00
Alexander Zaytsev c479235c60 Fix involvement button label 2025-12-08 15:54:36 +01:00
Adrien Maston 7a5a3c91f8 Merge branch 'main' into mobile-app/scoped-stylesheets
* main: (82 commits)
  We can remove ad-hoc handling now that we rely on page refreshes in the card perma
  Only broadcast when the preview changes, use the _later variant for the broadcast, add tests
  Update pinned cards when the title changes
  Rename to be more consistent
  Beautify board watchers list (#1946)
  Add missing data-attr on public board
  Fix hotkey text size on tiny viewports
  Use buil-in support for :self in Stimulus
  Save a bunch of invocations on morph events from children elements
  Fix: memoization was showing stale values when morphing
  GitHub actions: limit GITHUB_TOKEN permissions (#1933)
  Validate Identity email address
  Drop defunct user creation script
  Golden cards should be placed at the top
  Animate the column height with a stimulus controller so that it does not depend to the server to update when you D&D
  mise: respect .ruby-version
  Support custom validation messages
  Move css bit to the new blank slates CSS
  Prevent board names with only spaces and show validation message
  Keep the column color when D&D cards
  ...
2025-12-05 12:20:05 +01:00
Justin Starner d28fbaa101 Refactor card deletion to use custom modal
Replaces the standard turbo_confirm attribute with a custom dialog modal for a better user experience.

- Removes `button_to_delete_card` helper in favor of inline markup.
- Implements `keydown.esc->dialog#close:stop` to prevent the Escape key from inadvertently closing selected card.
2025-12-04 21:47:09 -05:00
David Heinemeier Hansson d729cf59f9 Beautify board watchers list (#1946)
* Beautify board_watchers_list by escaping the concat jungle

* Correct it and clean it

* Latest Rails to get the content tag fix

* Test against original collection
2025-12-04 16:14:52 -08:00
Jorge Manrubia e3e57a6a7e Merge pull request #1927 from basecamp/speed-up-sorting
Faster D&D by optimistically inserting dropped cards
2025-12-04 21:31:21 +01:00
Mike Dalessio 00eee29837 Validate Identity email address
using the "standard" email regexp URI::MailTo::EMAIL_REGEXP. The form
field will validate this in the browser, but if bots are creating
identities, they can put whatever they want in here. So let's add some
protection against that.

The HtmlHelper regex was renamed here to avoid confusing Brakeman,
which does imprecise constant lookup and was confusing the two
constants, one of which uses `\A` and `\z` and the other does
not (intentionally).

ref: https://app.fizzy.do/5986089/cards/3276
2025-12-04 14:01:15 -05:00
Jorge Manrubia a380492b32 Animate the column height with a stimulus controller so that it does not depend to the server to update when you D&D 2025-12-04 19:15:38 +01:00
Jorge Manrubia 539d3721db Keep the column color when D&D cards 2025-12-04 18:31:23 +01:00
Jorge Manrubia 19051aec3e Append dropped cards instead of relying on server-side rendering to refresh the columns
This implements a simple strategy to optimistically insert cards in columns without waiting for the column refresh. Cards will be placed at the top respecting golden cards.

This uses sorting by "created at" with sorting by "updated at" for the _Not now_ column, so that the treatment everywhere is homogenous.
2025-12-04 18:31:23 +01:00
Mike Dalessio 912bb8a8e5 Bump fizzy-saas to enable console auditing
ref: https://app.fizzy.do/5986089/cards/2469
ref: https://github.com/basecamp/fizzy-saas/pull/20
2025-12-04 12:25:54 -05:00
Sean Boult c1468de3d7 Fix title on bell icon 2025-12-03 21:20:34 -06:00
Adrien Maston a770f614c0 Merge branch 'main' into mobile-app/scoped-stylesheets
* main: (85 commits)
  Fix crash when inserting an emoji into a max length reaction
  change the object type in the example code (#1824)
  We can't hide public boards like this
  Consistent breakpoints for min- and max-width
  Repair tooltip z-index selector
  Fix bin/setup to explicitly use bash syntax for mise hook-env (#1813)
  Update AGENTS.md (#1818)
  Bundler: normalize platforms (#1822)
  Robots, begone (#1812)
  Account for input padding on autoresize pseudo-element
  Updated database.sqlite.yml
  (account): encode external_account_id in slug
  Allow typing magic links on mobile
  Add contributing guide
  Disconnect action cable when user is deactivated
  Disable ARM image builds
  Disable image builds for PRs
  Add libssl-dev
  Add automated Docker image builds
  Make the jump nav hotkeys look like the others
  ...
2025-12-03 10:57:27 +01:00
Jorge Manrubia 11249949eb Fix: edit comment button disappears when morphing the page
This also replaces the ad-hoc stimulus controller with the pure-css based
solution we recently added.

https://app.fizzy.do/5986089/cards/3243
2025-12-02 07:06:50 +01:00
Jason Zimdars 06a1473f5b Allow using '#' to match tags when filtering 2025-12-01 15:22:42 -06:00
Andy Smith 67921430a6 Merge pull request #1776 from basecamp/fizzy-menu-ui-updates
Add dividers and move icon to left
2025-12-01 14:51:24 -06:00
Andy Smith 9bbaee4f3a Add dividers and move icon to left 2025-12-01 14:43:06 -06:00
Jason Zimdars 6bb1a7238c No need to special case shift
The symbol isn't doing it
2025-12-01 14:12:46 -06:00
Jason Zimdars 7644b0e793 ESC is primary back hotkey, use helper in more places 2025-12-01 13:54:08 -06:00
Andy Smith 971244092d Colorful column list names on hover 2025-12-01 12:38:20 -06:00
Jason Zimdars 0fc3ed5042 No need for x tags if this is just for private cards 2025-12-01 10:58:06 -06:00
Jason Zimdars 0452a456d6 Update opengraph tile; update helper to include X tags and use it on public 2025-12-01 10:19:28 -06:00
Adrien Maston 47f71cb6a5 Merge branch 'main' into mobile-app/scoped-stylesheets
* main: (26 commits)
  Update fizzy-saas
  Update to fizzy-saas to remove jobs from beta
  Claude can fetch the .mcp.json file that shipyard places in your home
  Update fizzy-saas
  This was moved to the engine
  Introduce an "owner" role, and prevent it from being administered
  Make sure the sqlite db is prepared in SAAS mode
  Update fizzy-saas gem
  Move env-specific config bits to the saas gem
  Migrate sqlite schema
  Use main branch of fizzy-saas
  Change copy
  Make sign up Magic Links work across devices
  Remove unused view
  Update signup with the design from signin
  Revert "Update to latest version with the env config bits moved"
  Update to latest version with the env config bits moved
  Organize everything under Signups
  Create signups controller
  update pipelines
  ...
2025-12-01 09:36:52 +01:00
Mike Dalessio edf6b53469 Introduce an "owner" role, and prevent it from being administered
to prevent the owner from being demoted or kicked out.

ref: https://app.fizzy.do/5986089/cards/3213
2025-11-29 14:13:29 -05:00
Adrien Maston df2e4c1518 Merge branch 'main' into mobile-app/scoped-stylesheets
* main: (35 commits)
  Replace the whole card on update
  Include bottom inset on the modal and footer, too
  Attempt to fix expanded search input
  Lose the second close button
  This seems to have caused the unwanted effect of not focusing the field in Mobile Safari
  Always display the cancel button, `esc` isn't obvious
  Nothing should cover the bar, trays or search results
  Dark theme color isn't black
  Add env constaints for mobile layout
  Smaller on mobile
  Reasonalbe max heights
  Remove top orientation (it doesn't work well), make right and left classes exclusive
  This is too fancy, remove it
  Set reasonable maxes
  Restore bubble to Maybe
  Restore structured logging of `queenbee_id`
  Add a kamal pre-build hook with some safety checks
  Configure beta to use production blob store
  Configure beta load balancer
  Update beta deployment and secrets config
  ...
2025-11-25 10:36:48 +01:00
Jason Zimdars 6af569ddd8 Use move icon here, too 2025-11-24 12:03:34 +01:00
Jason Zimdars 86932803e4 Clarify not now move actions copy 2025-11-24 12:03:34 +01:00
Adrien Maston 041ac0c28e Add conditional stylesheets for mobile apps 2025-11-24 11:52:56 +01:00
Jorge Manrubia a4cc568a71 Merge branch 'main' into column-nav-keyboard
Resolved conflict in app/views/boards/show/_columns.html.erb by combining:
- hide-scrollbar class from main
- navigable-list controller from column-nav-keyboard

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-21 10:54:45 +01:00
Jorge Manrubia 9d08f26c59 Disable turbo when navigating to another account
So that the turbo-permanent trays get properly replaced

https://app.fizzy.do/5986089/cards/3094
2025-11-21 09:54:16 +01:00
Jason Zimdars ad7eb594d3 Match copy coming in #1663 2025-11-20 21:31:40 -06:00
Jorge Manrubia c052839bd6 Removed quotes since we were not using them 2025-11-20 21:37:41 +01:00
Jorge Manrubia baadd484b4 Review triage 2025-11-20 21:28:41 +01:00
Jorge Manrubia 3f21ea2329 Revert "Revert "Add more detail to events summaries"" 2025-11-20 21:12:41 +01:00
Jorge Manrubia 7200af879f Revert "Add more detail to events summaries" 2025-11-20 21:12:10 +01:00
Jorge Manrubia 4aef7230e5 Merge pull request #1659 from basecamp/notifications-copy
Add more detail to events summaries
2025-11-20 21:11:58 +01:00
Jorge Manrubia a48aa84f11 Remove legacy event 2025-11-20 21:11:02 +01:00