Commit Graph

75 Commits

Author SHA1 Message Date
Kevin McConnell cdc1f9b143 Allow typing magic links on mobile
When typing a magic link, rather than pasting it, iOS seems to send
`keydown.enter`, and we weren't submitting the form in that case.

Changed to submit the form in either case, and use the state of the
input target to help guard against double submissions.
2025-12-02 20:09:26 +00:00
Jason Zimdars 8c1d3c6c42 Copy edits 2025-12-02 09:08:57 -06:00
Mike Dalessio 80a6ffc55e Add an expiration note to emails and the magic link page.
ref: https://app.fizzy.do/5986089/cards/3211
2025-12-02 08:41:00 -05:00
Jason Zimdars 235c20f3aa Capitalize sentence 2025-12-01 09:54:57 -06:00
Stanko K.R. e302e79b55 Remove unused view 2025-11-29 11:59:10 +01:00
Stanko K.R. 354dd1e95a Update signup with the design from signin 2025-11-29 11:58:48 +01:00
Jorge Manrubia 4e09352c09 Bring simple signup flow from the fizzy-saas gem
We skip the QB code and we fill external account ids automatically on creation with a sequence

See:
https://github.com/basecamp/fizzy-saas/pull/7
2025-11-28 15:53:58 +01:00
Jason Zimdars 13dce732b2 Fussy punctuation 2025-11-17 17:01:08 -06:00
Jason Fried 8534584052 Small copy adjustment on the new or sign in screen. 2025-11-17 13:14:12 -08:00
Mike Dalessio 6a3135b67a Introduce a simple stimulus controller for the magic link form
which avoids the double-submit problem from:

- https://app.fizzy.do/5986089/cards/2980
- https://app.fizzy.do/5986089/cards/2771
2025-11-17 14:48:20 -05:00
Stanko K.R. 8fa9566c07 Update sign up 2025-11-17 09:12:40 -05:00
Stanko K.R. edf837fed3 Drop memberships 2025-11-17 09:12:39 -05:00
Mike Dalessio d41d50d52b Account.sole → Current.account
and some other de-tenant changes, including removing the controller
tenanting concerns
2025-11-17 09:11:40 -05:00
Jason Zimdars 5668612287 Add icon to public footer 2025-11-12 09:31:06 -06:00
Jason Zimdars 776a8e3c0a Typo 2025-11-11 16:08:27 -06:00
Jason Zimdars bdde877de3 Apply the new hotkey and style to all back buttons
Also updates design for email address change screens
2025-11-11 15:13:30 -06:00
Jason Zimdars 90967374d3 Add for Fizzy and 37signals 2025-11-11 14:18:46 -06:00
Jason Zimdars 1190ae101d Ensure sign-in screens adapt on mobile 2025-11-11 14:14:49 -06:00
Jason Zimdars df02f48007 Update support email, fine-tune attribution lines 2025-11-10 13:43:35 -06:00
David Heinemeier Hansson fef9c2dab6 turbo_frame_tag has built-in dom_id expansion 2025-11-08 16:42:41 +01:00
Jason Zimdars e7646fab96 More copy and design edits 2025-11-07 07:08:24 +01:00
Stanko K.R. bbe74966a1 Extract saas helpers into a concern 2025-11-07 07:08:24 +01:00
Jason Zimdars 2fee728392 Copy and design 2025-11-07 07:08:24 +01:00
Jason Zimdars 7a58c23e55 Copy edits for unified flow 2025-11-07 07:06:28 +01:00
Mike Dalessio d6db4c930b Print the magic link code in the console in development 2025-11-06 14:51:25 -05:00
Jason Zimdars aaa24074f3 Fix magic link code input
Fix that paste action didn't work and hitting `enter` caused the form to
post twice
2025-11-04 13:18:14 -06:00
Jorge Manrubia 2bb90eab13 Use the sole collection as the root for a better onboarding experience for new accounts 2025-11-04 17:09:35 +01:00
Kevin McConnell 4146dc2b92 Disable Turbo prefetch on signup link
This is because we have basic auth enabled there, so prefetching will
trigger the popup.
2025-11-04 12:51:41 +00:00
Jason Zimdars 7d154b682e Rename 'BOXCAR' to 'Fizzy'
Missed files
2025-11-03 16:30:44 -06:00
Jason Zimdars 1f58cd11b0 Show busy state when submitting forms 2025-10-31 16:26:08 +01:00
Stanko Krtalić 98755844a1 Remove the internal API
* Bind sessions to identities
* Remove references to the identity token
* Move email changes to identity
* Move account menu into a turbo-frame
* Create tenants from a tenanted route
2025-10-31 16:26:08 +01:00
Jason Zimdars 5652e5699f Update design, logo, and copy 2025-10-31 16:26:08 +01:00
Mike Dalessio a429f05503 Fix logo references 2025-10-31 16:26:08 +01:00
Stanko K.R. 201c3e27d3 Update tests for the Internal API 2025-10-31 16:26:08 +01:00
Jason Zimdars c0b4205b3c Fix missing images 2025-10-31 16:24:30 +01:00
Stanko K.R. 79b012f319 Add Join Codes 2025-10-31 16:24:30 +01:00
Stanko K.R. c8843360fe Clean up and simplify magic links 2025-10-31 16:23:38 +01:00
Jason Zimdars eac5e1bef9 Bring back the shake effect if you get it wrong, bring back placeholder 2025-10-31 16:22:12 +01:00
Jason Zimdars 0e064fbcd5 Style code input 2025-10-31 16:22:12 +01:00
Jason Zimdars 6ae20f9a9b Style account menu 2025-10-31 16:22:12 +01:00
Jason Zimdars 193d8bd9b5 Style email and magic link code screens 2025-10-31 16:22:12 +01:00
Stanko K.R. 5cef4ffeb0 Add sign in flow using magic links 2025-10-31 16:22:12 +01:00
Mike Dalessio 1277cc065b Introduce untenanted Identity and Membership models
The new integration test shows the desired user-facing behavior, which
is to make it easy to login without a tenanted URL and to jump between
tenants.

Note that we track two things in the identity_token cookie: a signed
id, and the updated_at for the underlying Identity object. This allows
us to effectively cache on the Identity without having to hit the
database, by using an Identity::Mock object that is compatible with
etag and cache methods.
2025-10-31 16:22:12 +01:00
Jason Zimdars f5384baf63 Boxcar -> BOXCAR 2025-10-23 15:05:36 -07:00
Jason Zimdars 49e87310d7 Rename Fizzy, Boxcar 2025-10-22 13:42:41 -07:00
Mike Dalessio ec119b774a Remove the caching around Identity-related fragments
The Identity table read should be OK given the menu is etagged
and the untenanted page should be a rarity.
2025-10-10 11:53:36 -04:00
Mike Dalessio b7abf33c29 Bump identity cache fragments 2025-10-10 11:08:39 -04:00
Mike Dalessio 3399e45130 Introduce an "Identity" model to ease login
- New untenanted Identity and Membership models
- New `identity_token` cookie with path "/" holds state across tenants

We're not sure whether the untenanted database will be sqlite or
MySQL, and so I've been careful to minimize

- database reads, placing them behind etags and caching
- database writes, only writing when a new Session is created (login)

Note that we track two things in the identity_token cookie: a signed
id, and the updated_at for the underlying Identity object. This allows
us to effectively cache on the Identity without having to hit the
database, by using an Identity::Mock object that is compatible with
etag and cache methods.

The new integration test shows the desired user-facing behavior, which
is to make it easy to login without a tenanted URL and to jump between
tenants.

- the untenanted "login_help" page shows all linked memberships
- the jump menu shows all linked memberships (except the current)

Also introduced a utility script to populate existing employee
Identities, grouping accounts by email address.
2025-10-10 10:12:25 -04:00
Mike Dalessio 2d327e6294 Render a helpful menu of tenants temporarily 2025-10-02 16:33:25 -04:00
Mike Dalessio 2630e4bd74 Extract 37id and QB controllers, models, and tests 2025-09-13 16:03:02 -04:00