Skip to content

Commit 06766df

Browse files
feat: implement issues #350, #361, #349, #360 (#371)
#350 - NotificationCenter: badge capped at 99+, dropdown with icons, relative timestamps, invoice links, 30s polling, mark-all-read, Escape/keyboard nav, max 50 notifications stored #361 - Dashboard filtering/sorting: URL-param-driven multi-select status chips, date range picker, sort select, sticky desktop bar, collapsible mobile drawer, invoice count display, clear filters button #349 - StatusTimeline: vertical event timeline (Created, First Payment, Milestone 50%, Fully Funded, Released, Expired), relative+absolute timestamps, scrollable at >6 events, empty state, mobile stepper #360 - Groups detail page: group name, pool progress bar, deadline countdown, member table with contributed/share/pct/status, Contribute button opens PayModal pre-filled, creator Release Funds button, read-only without wallet, responsive desktop table + mobile cards Also: update .gitignore with snapshots, logs, editor, dist artifacts Co-authored-by: Emmanuel Chukwunyere <emmanuelanalaba@gmail.com>
1 parent daad8fe commit 06766df

8 files changed

Lines changed: 1002 additions & 537 deletions

File tree

.gitignore

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,32 @@ next-env.d.ts
1818
# OS files
1919
.DS_Store
2020
Thumbs.db
21+
*.DS_Store
2122

2223
# Test artifacts
2324
**/__snapshots__/
2425
*.snap
2526
coverage/
2627
playwright-report/
2728
test-results/
29+
junit.xml
30+
*.lcov
2831

2932
# Logs
3033
*.log
3134
npm-debug.log*
35+
yarn-debug.log*
36+
yarn-error.log*
3237

3338
# Editor
3439
.vscode/
40+
.idea/
41+
*.swp
42+
*.swo
43+
44+
# Misc
45+
.turbo/
46+
.vercel/
47+
.cache/
48+
*.tgz
49+
dist/

src/app/dashboard/page.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1+
import { Suspense } from "react";
12
import DashboardClient from "@/components/DashboardClient";
3+
import { InvoiceListSkeleton } from "@/components/Skeleton";
24

35
export const metadata = {
46
robots: { index: false, follow: false },
57
title: "Your Invoices — StellarSplit",
68
};
79

8-
/**
9-
* Dashboard page with streaming SSR.
10-
* The page shell renders immediately, and invoice cards stream in as they load.
11-
*/
1210
export default async function DashboardPage() {
1311
return (
1412
<main className="max-w-3xl mx-auto w-full px-4 sm:px-6 py-16 overflow-x-hidden">
15-
<DashboardClient />
13+
<Suspense fallback={<InvoiceListSkeleton />}>
14+
<DashboardClient />
15+
</Suspense>
1616
</main>
1717
);
1818
}

0 commit comments

Comments
 (0)