Conversation
Align the project name to "tec-nova Nagasaki" (with テクノバながさき gloss on first mention) and the host fact to "長崎市と長崎大学による共同事業" across requirements.md and CLAUDE.md, matching the README revamp. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…ue-wide aggregation Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… counting rule Pure, Workers-safe (Intl only) logic shared by API and frontends. Terms: morning 9-12 / afternoon 13-16 / evening 16-19 (JST). countsTowardParticipation applies the 'arrived <30min before term end is not counted' rule. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…n summary Adds stats.participationCount plus per-session term/counted to the profile response, and participationSummaryQuery/Response for the venue-wide aggregation endpoint. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…profile API fetchParticipantProfile joins events for the JST date, classifies each session's term, applies the 30-min rule, and counts distinct (date, term) pairs. visitCount is kept for backward compatibility. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Aggregates participation counts by term and date over an optional date range. Counting (the 30-min rule) cannot be expressed in SQL, so candidate sessions are fetched and deduped per (date, term, participant) in JS. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…n UI Profile shows 参加回数 (participationCount) and tags each session with its term and a カウント対象外 badge when the 30-min rule excludes it; today's history derives term client-side. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
New 集計 page renders KPI cards and a per-date/per-term table from /api/stats/participation. Participant detail shows 参加回数; dashboard gains a term column; nav gets a 集計 link. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
feat: ターム制と参加回数カウント(30分ルール・会場全体集計)
Add classifyVisit (single-pass term+counted), participationKey, and toJstDateString so the API and frontends share one source for term classification, the 30-minute rule, and JST date handling. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…on stats Add term/counted to today-session items and visitDayCount/uncountedVisitCount to the participant profile stats. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Morning=sky, afternoon=amber, evening=violet, dimmed when uncounted; UncountedBadge marks visits excluded from participation. Adds @tecnova/shared as a workspace dependency of @tecnova/ui. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Compute per-session term/counted and the participation/visit/day/uncounted aggregates server-side via a single classifyVisit pass; unify JST-today helpers through toJstDateString. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
History rows show color-coded term + counted state from the API; the profile heatmap colors counted visits by stay duration and marks uncounted ones with an x; stats show participation count with total visits / visit days / uncounted visits. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Dashboard and detail sheet render server-provided term/counted via TermBadge; stats page tints the morning/afternoon/evening KPI cards. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Update mvp.md and requirements.md for the participation breakdown, the counted/uncounted heatmap, server-side term derivation, and the consolidated venue-schedule helpers. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add the motion package (Framer Motion's current name, imported from motion/react and compatible with React 19) as a checkin dependency for profile-screen UI animations. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Reusable count-up component that animates 0 -> value and falls back to the final value instantly when the user prefers reduced motion. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Cohesive visual pass on the reception profile screen, staying within the existing sky/emerald + LINE Seed JP + PanelHeader language: - make 参加回数 a hero block with a count-up and icon'd breakdown chips - treat the visit heatmap as a build log: tiles pop in with a staggered reveal (delay capped so large grids stay snappy) - add a pulsing presence dot, stat icons, count-up on 来場回数, and tap feedback on the check-in/out action - gentle gradient background for depth All animation respects prefers-reduced-motion. No data, state machine, or shared-component changes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…m-ui feat: term-based participation tracking + elevated reception profile UI
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…s/today Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Spec and task-by-task plan for elevating the checkin screens with a shared motion vocabulary. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Reusable motion constants plus Reveal, StatTile, LiveDot, and PageShell, all reduced-motion aware. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Extract the sonar success icon and choreograph the result card (icon pop + ring, staggered rows, footer settle). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Gradient ground, staggered card entrance, a static scan reticle, and a scan-lock confirmation puck; fix the manual-entry icon. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Apply the motion vocabulary to login, manual (sliding segmented control), first-time, history (animated summary + live dot), settings, and the guideline carousel (directional slides). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Enable React view transitions and morph the scan-lock puck into the participant profile header; reduced-motion safe. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The exit crossfade still played a 0.2s fade when motion is reduced; make it instant for consistency with the rest of the app. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
feat(checkin): redesign screens with shared motion + scan→profile transition
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release:
develop→main(production)Promotes the accumulated
developwork to production. No DB migrations (packages/dbunchanged) and no new env vars / secrets required.What's shipping
Checkin motion redesign (#35)
Reveal/StatTile/LiveDot/PageShell+ motion constants), all reduced-motion aware.experimental.viewTransition).Term-based participation tracking (#33, #34)
venue-schedulemodule: term classification (morning/afternoon/evening, JST) + the 30-minute counting rule, shared by API and frontends./api/stats/participationvenue-wide aggregation endpoint (behind existing admin auth).Docs & chores
.gitignore/ vscode tweaks.Production notes
.env.exampleunchanged)./api/stats/participation— admin-guarded.Deploy checklist
mainpnpm --filter @tecnova/api deploy🤖 Generated with Claude Code