165 Commits

Author SHA1 Message Date
b7439a4a5c fix: close AudioContext after beep; add browser guard
Some checks failed
Client Prod Build (NixCN) TeamCity build failed
Client Check Build (NixCN) TeamCity build finished
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 10:42:12 +08:00
039585d106 feat: replace checkin success banner with toast; add beep on success
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 10:35:10 +08:00
52b262dbf2 docs: add check-in toast + beep implementation plan
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 10:25:21 +08:00
2f41c5cd00 docs: add check-in toast + beep design spec
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 10:20:26 +08:00
e28dc8c402 fix: show '用户名已被占用' when backend returns 500 on username conflict
Some checks failed
Client Check Build (NixCN) TeamCity build failed
Client Prod Build (NixCN) TeamCity build finished
Backend returns 500 instead of 409/422 for duplicate usernames. Patch
both the profile update action and the onboarding completeProfile action
to intercept status 500 and surface it as a field-level error on the
username input rather than a generic top-level alert.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 08:54:52 +08:00
d5a3c72b9b fix: suppress initial validation errors on event edit form
Some checks failed
Client Prod Build (NixCN) TeamCity build finished
Client Check Build (NixCN) TeamCity build failed
superValidate with start_time/end_time: '' returns datetime validation
errors which superForm shows immediately on load. { errors: false } tells
superforms not to validate the default values — errors only appear after
the user attempts to submit.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-12 15:18:20 +08:00
e9852c0527 fix: restore local: true on datetime schema to allow datetime-local form values
All checks were successful
Client Check Build (NixCN) TeamCity build finished
z.string().datetime({ local: true }) accepts both datetime-local strings
("YYYY-MM-DDTHH:mm") for client-side form validation and UTC ISO strings
("...Z") received by the server after onSubmit conversion. The stricter
z.string().datetime() (no local: true) rejected the datetime-local strings
set by the $effect pre-fill, showing false validation errors on page load.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-12 15:11:06 +08:00
c9be152687 chore: apply lint formatting; fix pre-existing resolve() lint error in attendance pagination
All checks were successful
Client Check Build (NixCN) TeamCity build finished
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-12 15:01:33 +08:00
9e65addd9e fix: display attendance and event dates in browser local timezone
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-12 15:01:33 +08:00
eade01ef6e fix: display event and agenda times in browser local timezone
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-12 15:01:33 +08:00
1c9abdab70 fix: convert agenda times to UTC in browser before form submission
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-12 15:01:33 +08:00
c922c30b67 fix: convert event times to UTC in browser before form submission
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-12 15:01:33 +08:00
abbf810874 feat: add toLocalDatetimeStr utility for UTC ISO → datetime-local conversion
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-12 15:01:33 +08:00
3053d7ce21 docs: add timezone handling implementation plan 2026-06-12 15:01:33 +08:00
94ceb46e70 docs: add timezone handling design spec
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 14:27:34 +08:00
8aff9f6c80 feat: display agenda author on event detail page
All checks were successful
Client Prod Build (NixCN) TeamCity build finished
Client Check Build (NixCN) TeamCity build finished
Show the presenter's linked name beneath each item in the
published schedule. Fixes stale DataAgendaDoc refs now that
getAgendaSchedule returns ServiceAgendaAgendaListItem[].

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 22:02:38 +08:00
54bad60264 docs: add agenda author display implementation plan
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 22:02:38 +08:00
cd9c32d3be docs: add agenda author display design spec
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 22:02:38 +08:00
f6fd1cc0fb fix: rename agenda form field name→title to prevent 1Password person-name autofill
All checks were successful
Client Check Build (NixCN CMS) TeamCity build finished
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 22:06:26 +08:00
2482b392b5 fix: remove resolve() wrapping of page.url.pathname in attendance pagination
All checks were successful
Client Check Build (NixCN CMS) TeamCity build finished
resolve() prepends the /app base path, but page.url.pathname already
includes it — causing double /app/ in pagination hrefs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 21:45:18 +08:00
735df89e13 fix: sort approved agenda items by time; add day headers to schedule view
All checks were successful
Client Prod Build (NixCN CMS) TeamCity build finished
Client Check Build (NixCN CMS) TeamCity build finished
- Admin agenda page: approved items now sorted by start_time (nulls/zero-dates last)
- AgendaSchedule: group items by day with M月D日 header above each group

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 17:16:24 +08:00
5e41c73cfd fixup! docs: add agenda estimated-time field design spec
All checks were successful
Client Check Build (NixCN CMS) TeamCity build finished
2026-05-07 16:58:59 +08:00
b8f780b7b3 fix: add required and placeholder to estimated time input
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 16:50:45 +08:00
ccd65d0099 feat: add estimated time input to agenda submit dialog
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 16:47:07 +08:00
e7977db0cc feat: use agendaSubmitSchema in submitAgenda action; append estimated time to description
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 16:45:26 +08:00
a6f61e6e0d feat: add agendaSubmitSchema with estimatedTime field
Extends agendaItemSchema with a required coerced integer estimatedTime
(1–999 minutes) for the agenda submit flow.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 16:39:46 +08:00
3edb321b3a docs: add implementation plan for agenda estimated-time field
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 16:16:11 +08:00
7bd27153ab docs: add agenda estimated-time field design spec
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 16:12:19 +08:00
96453ae197 feat: add pagination and KYC detail modal to attendance page
All checks were successful
Client Prod Build (NixCN CMS) TeamCity build finished
Client Check Build (NixCN CMS) TeamCity build finished
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-04 01:53:31 +08:00
46994243e4 fix: use dayjs.utc for agenda item time display in admin agenda page
All checks were successful
Client Prod Build (NixCN CMS) TeamCity build finished
Client Check Build (NixCN CMS) TeamCity build finished
Replaced raw ISO string slicing with dayjs.utc() formatting, consistent
with the rest of the codebase, so agenda item times are not shifted by
the browser's local timezone offset.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-04 00:26:12 +08:00
635d5278e3 fix: nickname and subtitle length limit
All checks were successful
Client Prod Build (NixCN CMS) TeamCity build finished
Client Check Build (NixCN CMS) TeamCity build finished
2026-05-04 00:06:23 +08:00
c3291f5d5c fix: prevent double UTC+8 offset on event date display
All checks were successful
Client Prod Build (NixCN CMS) TeamCity build finished
Client Check Build (NixCN CMS) TeamCity build finished
The backend returns naive datetime strings already in UTC+8. dayjs was
re-applying the browser's local +8 offset, shifting date labels by one
day. Centralise dayjs configuration in src/lib/dayjs.ts with the UTC
plugin and switch all event start/end date formatting to dayjs.utc() so
the string is read as-is without timezone conversion.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-03 23:45:22 +08:00
cbe0ec88e4 fix: daisyui theme
All checks were successful
Client Check Build (NixCN CMS) TeamCity build finished
Client Prod Build (NixCN CMS) TeamCity build finished
2026-05-02 21:59:53 +08:00
46a2451e98 Remove antfu config from zed settings
All checks were successful
Client Check Build (NixCN CMS) TeamCity build finished
Signed-off-by: Asai Neko <sugar@sne.moe>
2026-05-02 20:23:25 +08:00
267f97a1e7 Change node version to 24 and pin pnpm version
Signed-off-by: Asai Neko <sugar@sne.moe>
2026-05-02 20:23:25 +08:00
a2d2f8c752 Init devenv shell
Signed-off-by: Asai Neko <sugar@sne.moe>
2026-05-02 20:23:25 +08:00
bd7ff728fb Make the primary color nix-themed 2026-05-02 20:23:25 +08:00
b5784d2e46 Add devenv for project
Signed-off-by: Asai Neko <sugar@sne.moe>
2026-05-02 20:23:25 +08:00
95539c3807 fix(profile): update UI constraints and tests to match new 5-255/24 limits
All checks were successful
Client Check Build (NixCN CMS) TeamCity build finished
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 00:58:29 +08:00
1a11af5ea4 fix: update username/nickname constraints to match backend
Username: 3–32 → 5–255. Nickname: max 64 → max 24 (UTF-8 rune limit).
Applied to both onboarding and profile schemas.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 00:55:07 +08:00
9d0e591412 docs(onboarding): reformat plan and spec to consistent tab indentation
All checks were successful
Client Check Build (NixCN CMS) TeamCity build finished
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 00:46:08 +08:00
f386ac8937 chore(onboarding): add cast comment and run lint
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 00:45:32 +08:00
c5784f80dc test(onboarding): add E2E tests for UUID-username onboarding dialog
Also fixes the `completeProfile` form action: SvelteKit only supports form
actions in `+page.server.ts`, not `+layout.server.ts`. Moved the action to a
dedicated `/(app)/onboarding/+page.server.ts` and updated the dialog form's
`action` attribute to the absolute path `/app/onboarding?/completeProfile`.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 00:44:06 +08:00
c4419a1193 feat(onboarding): add OnboardingDialog component and wire into app layout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 00:29:43 +08:00
cb325692f7 feat(onboarding): detect UUID username and add completeProfile layout action
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 00:21:37 +08:00
5754c163d7 feat(onboarding): add onboarding Zod schema
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 00:14:57 +08:00
18de60285e docs: add onboarding dialog implementation plan
6-task plan: schema → layout server → component → layout wire-up → E2E tests → lint/build.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 00:10:56 +08:00
66ca0ed2a0 docs: add onboarding dialog design spec
Mandatory username/nickname gate for newly registered users (UUID username).
Layout-level detection + named action + Bits UI dialog, no dedicated route.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 00:02:21 +08:00
e80ad704d1 feat(sentry): add /vitals tunnel to bypass adblockers
All checks were successful
Client Check Build (NixCN CMS) TeamCity build finished
Routes Sentry envelopes through a first-party /app/vitals endpoint
instead of directly to *.ingest.sentry.io. DSN host and project ID
are validated server-side from the SENTRY_DSN env var before proxying.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-18 20:35:37 +08:00
e1009ed622 docs: add navigation progress bar design spec and implementation plan
All checks were successful
Client Check Build (NixCN CMS) TeamCity build finished
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-18 20:09:39 +08:00