Skip to content

Release to production: term participation tracking + checkin motion redesign#36

Merged
ut42tech merged 35 commits into
mainfrom
develop
May 29, 2026
Merged

Release to production: term participation tracking + checkin motion redesign#36
ut42tech merged 35 commits into
mainfrom
develop

Conversation

@ut42tech
Copy link
Copy Markdown
Owner

Release: developmain (production)

Promotes the accumulated develop work to production. No DB migrations (packages/db unchanged) and no new env vars / secrets required.

What's shipping

Checkin motion redesign (#35)

  • Shared motion primitives (Reveal / StatTile / LiveDot / PageShell + motion constants), all reduced-motion aware.
  • All 7 non-profile screens elevated — home (scan reticle, scan-lock puck), login (hero), manual (sliding segmented control), first-time (staggered grid), history (animated summary + pulsing presence dot), settings (mentor identity header), guideline (directional slide transitions).
  • Choreographed result card; scan→profile View Transition morph (experimental.viewTransition).

Term-based participation tracking (#33, #34)

  • venue-schedule module: term classification (morning/afternoon/evening, JST) + the 30-minute counting rule, shared by API and frontends.
  • API derives per-session term/counted + participation/visit/day aggregates; new /api/stats/participation venue-wide aggregation endpoint (behind existing admin auth).
  • Term + uncounted badges across checkin and admin; admin 集計 stats page; participation breakdown on the reception profile.

Docs & chores

  • Branding aligned to "tec-nova Nagasaki"; signage + chime app design/plan docs (planning only — no signage code yet); .gitignore / vscode tweaks.

Production notes

  • ✅ No DB schema / migration changes.
  • ✅ No new environment variables or secrets (.env.example unchanged).
  • 🆕 New API endpoint /api/stats/participation — admin-guarded.
  • ✅ Workspace type-check + Biome clean; checkin production build green.
  • ✅ Security review (identify → false-positive filter, threshold ≥8): no high-confidence findings.

Deploy checklist

  • Merge to main
  • Deploy API — pnpm --filter @tecnova/api deploy
  • Deploy checkin + admin (Vercel)
  • Smoke-test: checkin scan→profile + check-in/out, admin 集計 page, term badges, reduced-motion

🤖 Generated with Claude Code

ut42tech and others added 30 commits May 28, 2026 20:41
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>
ut42tech and others added 5 commits May 30, 2026 02:02
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
@vercel
Copy link
Copy Markdown

vercel Bot commented May 29, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
tecnova-platform-admin Ready Ready Preview, Comment May 29, 2026 5:21pm
tecnova-platform-checkin Ready Ready Preview, Comment May 29, 2026 5:21pm

@ut42tech ut42tech merged commit 4861633 into main May 29, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant