├── public ├── favicon.ico ├── hero-desktop.png ├── hero-mobile.png ├── opengraph-image.png └── customers │ ├── amy-burns.png │ ├── balazs-orban.png │ ├── evil-rabbit.png │ ├── lee-robinson.png │ ├── michael-novotny.png │ └── delba-de-oliveira.png ├── app ├── dashboard │ ├── customers │ │ └── page.tsx │ ├── (overview) │ │ ├── loading.tsx │ │ └── page.tsx │ ├── layout.tsx │ └── invoices │ │ ├── create │ │ └── page.tsx │ │ ├── [id] │ │ └── edit │ │ │ ├── not-found.tsx │ │ │ └── page.tsx │ │ └── page.tsx ├── ui │ ├── home.module.css │ ├── fonts.ts │ ├── global.css │ ├── acme-logo.tsx │ ├── button.tsx │ ├── invoices │ │ ├── status.tsx │ │ ├── edit-form.tsx │ │ ├── error.tsx │ │ ├── breadcrumbs.tsx │ │ ├── buttons.tsx │ │ ├── pagination.tsx │ │ ├── create-form.tsx │ │ └── table.tsx │ ├── dashboard │ │ ├── sidenav.tsx │ │ ├── nav-links.tsx │ │ ├── cards.tsx │ │ ├── revenue-chart.tsx │ │ └── latest-invoices.tsx │ ├── search.tsx │ ├── login-form.tsx │ ├── customers │ │ └── table.tsx │ └── skeletons.tsx ├── login │ └── page.tsx ├── layout.tsx ├── auth.ts ├── page.tsx ├── lib │ ├── utils.ts │ ├── definitions.ts │ ├── placeholder-data.ts │ ├── actions.ts │ └── data.ts └── seed │ └── route.ts ├── postcss.config.js ├── .eslintrc.json ├── next.config.mjs ├── README.md ├── middleware.ts ├── .gitignore ├── auth.config.ts ├── tailwind.config.ts ├── tsconfig.json └── package.json /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaptainStack/nextjs-dashboard/main/public/favicon.ico -------------------------------------------------------------------------------- /app/dashboard/customers/page.tsx: -------------------------------------------------------------------------------- 1 | export default function Page() { 2 | return
Customers Page
; 3 | } 4 | -------------------------------------------------------------------------------- /public/hero-desktop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaptainStack/nextjs-dashboard/main/public/hero-desktop.png -------------------------------------------------------------------------------- /public/hero-mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaptainStack/nextjs-dashboard/main/public/hero-mobile.png -------------------------------------------------------------------------------- /public/opengraph-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaptainStack/nextjs-dashboard/main/public/opengraph-image.png -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /public/customers/amy-burns.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaptainStack/nextjs-dashboard/main/public/customers/amy-burns.png -------------------------------------------------------------------------------- /public/customers/balazs-orban.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaptainStack/nextjs-dashboard/main/public/customers/balazs-orban.png -------------------------------------------------------------------------------- /public/customers/evil-rabbit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaptainStack/nextjs-dashboard/main/public/customers/evil-rabbit.png -------------------------------------------------------------------------------- /public/customers/lee-robinson.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaptainStack/nextjs-dashboard/main/public/customers/lee-robinson.png -------------------------------------------------------------------------------- /public/customers/michael-novotny.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaptainStack/nextjs-dashboard/main/public/customers/michael-novotny.png -------------------------------------------------------------------------------- /public/customers/delba-de-oliveira.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CaptainStack/nextjs-dashboard/main/public/customers/delba-de-oliveira.png -------------------------------------------------------------------------------- /app/dashboard/(overview)/loading.tsx: -------------------------------------------------------------------------------- 1 | import DashboardSkeleton from '@/app/ui/skeletons'; 2 | 3 | export default function Loading() { 4 | returnAcme
11 |Could not find the requested invoice.
10 | 14 | Go Back 15 | 16 |{link.name}
43 | 44 | ); 45 | })} 46 | > 47 | ); 48 | } 49 | -------------------------------------------------------------------------------- /app/dashboard/invoices/page.tsx: -------------------------------------------------------------------------------- 1 | import Pagination from '@/app/ui/invoices/pagination'; 2 | import Search from '@/app/ui/search'; 3 | import Table from '@/app/ui/invoices/table'; 4 | import { CreateInvoice } from '@/app/ui/invoices/buttons'; 5 | import { lusitana } from '@/app/ui/fonts'; 6 | import { InvoicesTableSkeleton } from '@/app/ui/skeletons'; 7 | import { Suspense } from 'react'; 8 | import { fetchInvoicesPages } from '@/app/lib/data'; 9 | import { Metadata } from 'next'; 10 | 11 | export const metadata: Metadata = { 12 | title: 'Invoices', 13 | }; 14 | 15 | export default async function Page({ 16 | searchParams, 17 | }: { 18 | searchParams?: { 19 | query?: string; 20 | page?: string; 21 | }; 22 | }) { 23 | const query = searchParams?.query || ''; 24 | const currentPage = Number(searchParams?.page) || 1; 25 | 26 | const totalPages = await fetchInvoicesPages(query); 27 | 28 | return ( 29 |61 | {value} 62 |
63 |19 | Welcome to Acme. This is the example for the{' '} 20 | 21 | Next.js Learn Course 22 | 23 | , brought to you by Vercel. 24 |
25 | 29 | Log inNo data available.
; 21 | } 22 | 23 | return ( 24 |{label}
38 | ))} 39 |50 | {month.month} 51 |
52 |42 | {invoice.name} 43 |
44 |45 | {invoice.email} 46 |
47 |52 | {invoice.amount} 53 |
54 |{invoice.name}
37 |{invoice.email}
39 |45 | {formatCurrency(invoice.amount)} 46 |
47 |{formatDateToLocal(invoice.date)}
48 || 61 | Customer 62 | | 63 |64 | Email 65 | | 66 |67 | Amount 68 | | 69 |70 | Date 71 | | 72 |73 | Status 74 | | 75 |76 | Edit 77 | | 78 |
|---|---|---|---|---|---|
|
87 |
88 |
97 | {invoice.name} 96 | |
98 | 99 | {invoice.email} 100 | | 101 |102 | {formatCurrency(invoice.amount)} 103 | | 104 |105 | {formatDateToLocal(invoice.date)} 106 | | 107 |
108 | |
110 |
111 |
112 |
115 | |
116 |
{customer.name}
42 |45 | {customer.email} 46 |
47 |Pending
52 |{customer.total_pending}
53 |Paid
56 |{customer.total_paid}
57 |{customer.total_invoices} invoices
61 || 69 | Name 70 | | 71 |72 | Email 73 | | 74 |75 | Total Invoices 76 | | 77 |78 | Total Pending 79 | | 80 |81 | Total Paid 82 | | 83 |
|---|---|---|---|---|
|
90 |
91 |
100 | {customer.name} 99 | |
101 | 102 | {customer.email} 103 | | 104 |105 | {customer.total_invoices} 106 | | 107 |108 | {customer.total_pending} 109 | | 110 |111 | {customer.total_paid} 112 | | 113 |
| 183 | Customer 184 | | 185 |186 | Email 187 | | 188 |189 | Amount 190 | | 191 |192 | Date 193 | | 194 |195 | Status 196 | | 197 |201 | Edit 202 | | 203 |
|---|