Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
2a2a7b8
Add redesign prototype and mobile/desktop implementation plan
Dharp02 Aug 3, 2026
ca71b4d
feat(nav): swap Settings for Huddle in mobile bottom nav
Dharp02 Aug 3, 2026
8610746
feat(ui): mobile bottom-sheet variant for @mieweb/ui Modal
Dharp02 Aug 3, 2026
637b0f4
feat(huddle): edge-to-edge feed on mobile
Dharp02 Aug 3, 2026
28b376f
docs(redesign): mark step 4 (dashboard 2-col stats) done
Dharp02 Aug 3, 2026
87565d4
feat(clock): full-width action buttons on mobile
Dharp02 Aug 3, 2026
633e205
Make Tickets filters a horizontally scrollable chip row on mobile
Dharp02 Aug 3, 2026
220236c
Confirm Teams/Org/Profile pages stack single-column on mobile
Dharp02 Aug 3, 2026
1c26653
Confirm mobile toast/notification banner placement (Phase 1 complete)
Dharp02 Aug 3, 2026
5e6582f
Reorder desktop sidebar Workspace nav (Clock up, Work last)
Dharp02 Aug 3, 2026
84b3952
Confirm desktop centered-dialog Modal variant preserved (mobile sheet…
Dharp02 Aug 3, 2026
4f384e6
Dashboard: 4-column stat row at desktop widths
Dharp02 Aug 3, 2026
b52a837
Huddle: center feed at max-w-2xl with bordered cards on desktop
Dharp02 Aug 3, 2026
e91f169
Clock: cap layout to centered max-w-2xl on desktop
Dharp02 Aug 3, 2026
10b8456
Tickets: narrow to centered max-w-4xl column on desktop
Dharp02 Aug 3, 2026
19e9baf
Toast: shrink-to-content and center at desktop widths (Phase 2 complete)
Dharp02 Aug 3, 2026
e392f2b
docs(redesign): mark acceptance criteria; note manual smoke-test remains
Dharp02 Aug 3, 2026
7f25103
Rebuild OrgTeamSwitcher as prototype-matching bottom-sheet/dialog Modal
Dharp02 Aug 3, 2026
91db278
OrgTeamSwitcher: match prototype exactly (trigger + animation)
Dharp02 Aug 3, 2026
db7c6b2
Dashboard: add Me/Team toggle beside the title, scoped stats per tab
Dharp02 Aug 3, 2026
b7923fd
Sidebar: embed org/team switcher inline on desktop, matching prototype
Dharp02 Aug 3, 2026
c136b20
Revert "Sidebar: embed org/team switcher inline on desktop, matching …
Dharp02 Aug 3, 2026
11c2c6f
Redesign Teams page: move admin timesheet to Dashboard, add team pill…
Dharp02 Aug 3, 2026
d3af9e5
Clock page: full attach bar, bold session timer, recent sessions
Dharp02 Aug 3, 2026
08e071f
Fix modals to appear centered instead of full-screen on mobile
Dharp02 Aug 3, 2026
2b31c1a
Huddle: flatten composer chrome, widen feed column
Dharp02 Aug 3, 2026
bcef770
Add share button to team header with compact icon-button strip
Dharp02 Aug 3, 2026
421d20c
Clock page: widen column, stop dimming the bottom-nav FAB
Dharp02 Aug 3, 2026
5748039
Tickets: fix clipped ticket options menu
Dharp02 Aug 3, 2026
d504e00
Add personal timesheet view to Me tab on Dashboard
Dharp02 Aug 3, 2026
54f6114
Add header notification bell and sidebar app info/test push
Dharp02 Aug 3, 2026
0c6c77a
Fix Prettier formatting to unblock frontend CI
Dharp02 Aug 3, 2026
cf7661d
Huddle: match composer width to post cards on mobile
Dharp02 Aug 3, 2026
a9172ba
Mobile nav: More sheet + reconnect/dropdown fixes
Dharp02 Aug 4, 2026
fb60124
Move Admin/Developers/Help into mobile More sheet
Dharp02 Aug 4, 2026
0a1f2bd
Persist dashboard Me/Team tab + add Recent Activity feed
Dharp02 Aug 4, 2026
ac918ff
Recent Activity: teams only, roomier row layout
Dharp02 Aug 4, 2026
c16e08d
Huddle: dismiss post highlight ring on click
Dharp02 Aug 4, 2026
e37d5cf
Fix Prettier formatting
Dharp02 Aug 4, 2026
e132e9e
Huddle PostCard: edge-to-edge actions divider + clickable author
Dharp02 Aug 4, 2026
a3f2680
Fix profile route misdetecting Meteor userIds as usernames
Dharp02 Aug 4, 2026
364cf00
Recent activity: show up to 10 events
Dharp02 Aug 4, 2026
e836ad5
Scope org/team switcher bottom-sheet CSS to mobile only
Dharp02 Aug 4, 2026
cab3168
Remove redesign prototype HTML from PR
Dharp02 Aug 4, 2026
c6a3b4f
Add clock page shortcut button to AppHeader
Dharp02 Aug 4, 2026
4cad9a5
Fix AppHeader clock button + stale e2e test selectors
Dharp02 Aug 5, 2026
f2e4a32
Harden e2e test suite against flakes
Dharp02 Aug 5, 2026
4ab0973
Fix Prettier formatting in AppHeader.tsx
Dharp02 Aug 5, 2026
2be1ca1
Remove wave strand from app header
Dharp02 Aug 5, 2026
d5952b7
Revert clock strand animation to straight horizontal travel and remov…
Dharp02 Aug 5, 2026
aa89133
Remove ambient background from AppLayout and Settings
Dharp02 Aug 5, 2026
4597bf6
Show elapsed time in mobile clock header, remove decorative wave
Dharp02 Aug 5, 2026
2634846
Compact ClockPage layout on mobile to give editor more space
Dharp02 Aug 5, 2026
0f290de
Notify team members when plan-required setting is enabled
Dharp02 Aug 5, 2026
6237b2e
Fix stray brace parse error in AppHeader
Dharp02 Aug 5, 2026
14f6a58
Default ticket Team filter to the currently selected team
Dharp02 Aug 5, 2026
7f5ecfd
Add ClockStrand, WorkspaceGreeting, PersonalTimesheetPanel, useClockB…
Dharp02 Aug 5, 2026
8bb35ab
Redesign: update Dashboard, Sidebar, BottomNav, CommandPalette, api, …
Dharp02 Aug 5, 2026
974ec5a
Redesign: update backend clock, e2e tests, eslint config, vendor/ui
Dharp02 Aug 5, 2026
31e732b
Fix reviewer feedback: notification deep-links, cross-org deep-link, …
Dharp02 Aug 6, 2026
02d4241
Dashboard: replace Me/Team toggle with single Overview/Timesheet, lin…
Dharp02 Aug 6, 2026
9a2b9b9
Dashboard: restore Me/Team stats scoping as inline tag toggle above s…
Dharp02 Aug 6, 2026
3cfa9da
Dashboard: restore Me/Team toggle + scoped stats, keep unified Overvi…
Dharp02 Aug 6, 2026
eeec0fe
style: fix prettier formatting in DashboardPage
Dharp02 Aug 6, 2026
513dcdb
Dashboard: show personal timesheet in Me tab, admin timesheet only in…
Dharp02 Aug 7, 2026
2345df0
revert: back out UTC/local midnight fix for clock.teamStatus
Dharp02 Aug 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
node_modules
.pnpm-store
.DS_Store
*.log
packages/*/node_modules
Expand Down
231 changes: 231 additions & 0 deletions docs/redesign-implementation-prompt.md

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ export default [
'backend/data/videos',
'backend/data/videos/**',
'node_modules',
// pnpm's local content-addressable store — third-party package sources
'.pnpm-store',
'**/scheduler.worker.js',
'_build',
'build',
Expand Down
2 changes: 2 additions & 0 deletions meteor-backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
"private": true,
"scripts": {
"start": "METEOR_AGENDA_ENABLED=\"${METEOR_AGENDA_ENABLED:-true}\" SMTP_HOST=\"${SMTP_HOST:-localhost}\" SMTP_PORT=\"${SMTP_PORT:-1025}\" SMTP_SECURE=\"${SMTP_SECURE:-false}\" EMAIL_FROM=\"${EMAIL_FROM:-TimeHuddle <noreply@timehuddle.local>}\" APP_URL=\"${APP_URL:-http://localhost:3000}\" METEOR_PACKAGE_DIRS=../vendor/meteor-wormhole/packages meteor run --port \"${PORT:-3100}\"",
"build:prod": "TOOL_NODE_FLAGS=\"--max-old-space-size=8192\" METEOR_PACKAGE_DIRS=../vendor/meteor-wormhole/packages meteor build --directory prod-build --server-only --architecture os.linux.x86_64 --allow-incompatible-update",
"build:prod:highmem": "TOOL_NODE_FLAGS=\"--max-old-space-size=12288\" METEOR_PACKAGE_DIRS=../vendor/meteor-wormhole/packages meteor build --directory prod-build --server-only --architecture os.linux.x86_64 --allow-incompatible-update",
"test": "meteor test --once --driver-package meteortesting:mocha",
"test:integration": "vitest run --config vitest.config.ts",
"lint": "eslint .",
Expand Down
2 changes: 1 addition & 1 deletion meteor-backend/server/notify-core.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ export async function notifyClockAdmins(actorUserId, teamId, startTime, action)
teamId,
date,
userId: actorUserId,
url: `/app/teams?tab=timesheet&memberId=${actorUserId}&teamId=${teamId}`,
url: `/app/dashboard?tab=timesheet&memberId=${actorUserId}&teamId=${teamId}`,
Comment thread
jlocala1 marked this conversation as resolved.
},
}).catch(() => {})
)
Expand Down
19 changes: 19 additions & 0 deletions meteor-backend/server/teams.js
Original file line number Diff line number Diff line change
Expand Up @@ -478,6 +478,25 @@ Meteor.methods({
if (autoAcceptJoins !== undefined) $set['settings.autoAcceptJoins'] = autoAcceptJoins;
await Teams.updateAsync(team._id, { $set });
const updated = await Teams.findOneAsync(team._id);

// Notify all members (except the admin making the change) when plan-gate is enabled
if (requirePlanForClock === true && !team.settings?.requirePlanForClock) {
const memberIds = Array.from(new Set([...team.members, ...team.admins])).filter(
(id) => id !== userId,
);
const teamLabel = team.name ?? 'Your team';
await Promise.allSettled(
memberIds.map((memberId) =>
createNotification({
userId: memberId,
title: `${teamLabel} now requires a plan before clocking in`,
body: 'Write a short plan on the Clock In/Out page before starting your next shift.',
data: { type: 'team-setting-change', url: '/app/clock', teamId: String(team._id) },
}),
),
);
}

return { team: toPublicTeam(updated) };
},

Expand Down
2 changes: 1 addition & 1 deletion meteor-backend/server/timers.js
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ async function notifyTimesheetAdmins(actorUserId, ticketId, date, action) {
date,
teamId: ticket.teamId,
userId: actorUserId,
url: `/app/teams?tab=timesheet&memberId=${actorUserId}&teamId=${ticket.teamId}`,
url: `/app/dashboard?tab=timesheet&memberId=${actorUserId}&teamId=${ticket.teamId}`,
},
}).catch(() => {})
)
Expand Down
Loading
Loading