diff --git a/components/card/Panel.vue b/components/card/Panel.vue
new file mode 100644
index 0000000..dceae18
--- /dev/null
+++ b/components/card/Panel.vue
@@ -0,0 +1,53 @@
+
+
+
+
+
+ {{ props.title }}
+
+
+
+
+
+
+
+
+
+
diff --git a/middleware/auth.ts b/middleware/auth.ts
index eccc268..5f4d65d 100644
--- a/middleware/auth.ts
+++ b/middleware/auth.ts
@@ -1,7 +1,10 @@
export default defineNuxtRouteMiddleware((to, from) => {
const user = useSupabaseUser();
- if (!user.value && to.path.startsWith('/notes')) {
+ if (
+ !user.value &&
+ (to.path.startsWith('/notes') || to.path.startsWith('/profile'))
+ ) {
return navigateTo('/login');
} else if (user.value && to.path === '/login') {
return navigateTo('/notes');
diff --git a/pages/profile/index.vue b/pages/profile/index.vue
new file mode 100644
index 0000000..26bd5f0
--- /dev/null
+++ b/pages/profile/index.vue
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
diff --git a/server/api/profile.ts b/server/api/profile.ts
new file mode 100644
index 0000000..bc97d85
--- /dev/null
+++ b/server/api/profile.ts
@@ -0,0 +1,16 @@
+import { serverSupabaseUser, serverSupabaseClient } from '#supabase/server';
+import { Database } from 'utils/database.types';
+
+export default defineEventHandler(async (event) => {
+ const user = await serverSupabaseUser(event);
+ const supabase = serverSupabaseClient(event);
+
+ const { count, error } = await supabase
+ .from('notes')
+ .select('*', { count: 'exact', head: true });
+
+ if (!user) {
+ throw createError({ statusCode: 401, message: 'Unauthorized' });
+ }
+ return { count: count, message: 'Profile', error: error };
+});