@kyro-cms/admin 0.1.5 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +149 -51
- package/package.json +52 -5
- package/src/collections/auth/index.ts +2 -2
- package/src/collections/portfolio/index.ts +343 -0
- package/src/components/ActionBar.tsx +153 -16
- package/src/components/Admin.tsx +136 -27
- package/src/components/ApiExplorer.tsx +325 -0
- package/src/components/ApiKeysManager.tsx +563 -0
- package/src/components/AuditLogsPage.tsx +664 -0
- package/src/components/AutoForm.tsx +1417 -661
- package/src/components/BrandingHub.tsx +267 -0
- package/src/components/BulkActionsBar.tsx +3 -3
- package/src/components/CreateView.tsx +3 -3
- package/src/components/Dashboard.tsx +393 -0
- package/src/components/DetailView.tsx +199 -57
- package/src/components/DeveloperCenter.tsx +403 -0
- package/src/components/EnhancedListView.tsx +786 -0
- package/src/components/GraphQLExplorer.tsx +675 -0
- package/src/components/GraphQLPlayground.tsx +627 -0
- package/src/components/ListView.tsx +191 -53
- package/src/components/MediaGallery.tsx +1569 -0
- package/src/components/Modal.tsx +149 -0
- package/src/components/RestPlayground.tsx +951 -0
- package/src/components/Sidebar.astro +237 -0
- package/src/components/UserManagement.tsx +204 -0
- package/src/components/VersionHistoryPanel.tsx +3 -3
- package/src/components/WebhookManager.tsx +608 -0
- package/src/components/blocks/AccordionBlock.tsx +97 -0
- package/src/components/blocks/ArrayBlock.tsx +75 -0
- package/src/components/blocks/BlockEditModal.MARKER +12 -0
- package/src/components/blocks/BlockEditModal.tsx +774 -0
- package/src/components/blocks/ButtonBlock.tsx +165 -0
- package/src/components/blocks/ChildBlocksTree.tsx +551 -0
- package/src/components/blocks/CodeBlock.tsx +66 -0
- package/src/components/blocks/ColumnsBlock.tsx +151 -0
- package/src/components/blocks/DividerBlock.tsx +43 -0
- package/src/components/blocks/FileBlock.tsx +64 -0
- package/src/components/blocks/HeadingBlock.tsx +81 -0
- package/src/components/blocks/HeroBlock.tsx +157 -0
- package/src/components/blocks/ImageBlock.tsx +83 -0
- package/src/components/blocks/LinkBlock.tsx +71 -0
- package/src/components/blocks/ListBlock.tsx +39 -0
- package/src/components/blocks/ParagraphBlock.tsx +61 -0
- package/src/components/blocks/RelationshipBlock.tsx +279 -0
- package/src/components/blocks/VStackBlock.tsx +75 -0
- package/src/components/blocks/VideoBlock.tsx +45 -0
- package/src/components/blocks/index.ts +10 -0
- package/src/components/fields/BlocksField.tsx +323 -0
- package/src/components/fields/CheckboxField.tsx +15 -9
- package/src/components/fields/CodeField.tsx +234 -0
- package/src/components/fields/DateField.tsx +38 -11
- package/src/components/fields/EditorClient.tsx +271 -0
- package/src/components/fields/FileField.tsx +390 -0
- package/src/components/fields/HybridContentField.tsx +109 -0
- package/src/components/fields/ImageField.tsx +429 -0
- package/src/components/fields/JSONField.tsx +361 -0
- package/src/components/fields/MarkdownField.tsx +282 -0
- package/src/components/fields/NumberField.tsx +42 -12
- package/src/components/fields/PortableTextField.tsx +143 -0
- package/src/components/fields/PortableTextRenderer.tsx +68 -0
- package/src/components/fields/RelationshipField.tsx +231 -59
- package/src/components/fields/SelectField.tsx +25 -15
- package/src/components/fields/TextField.tsx +45 -14
- package/src/components/fields/extensions/blockComponents.tsx +237 -0
- package/src/components/fields/extensions/blocksStore.ts +273 -0
- package/src/components/fields/index.ts +13 -0
- package/src/components/index.ts +1 -2
- package/src/components/layout/Header.tsx +2 -2
- package/src/components/layout/Layout.tsx +2 -2
- package/src/components/ui/Badge.tsx +9 -4
- package/src/components/ui/BlockDrawer.tsx +79 -0
- package/src/components/ui/Button.tsx +1 -1
- package/src/components/ui/CommandPalette.tsx +362 -0
- package/src/components/ui/CommandPaletteWrapper.tsx +97 -0
- package/src/components/ui/Dropdown.tsx +1 -1
- package/src/components/ui/Modal.tsx +37 -12
- package/src/components/ui/PromptModal.tsx +94 -0
- package/src/components/ui/SlidePanel.tsx +43 -16
- package/src/components/ui/Toast.tsx +80 -14
- package/src/env.d.ts +16 -0
- package/src/env.ts +20 -0
- package/src/index.ts +0 -1
- package/src/layouts/AdminLayout.astro +164 -170
- package/src/layouts/AuthLayout.astro +50 -0
- package/src/lib/MediaService.ts +541 -0
- package/src/lib/auth/sqlite-adapter.ts +319 -0
- package/src/lib/config.ts +22 -6
- package/src/lib/dataStore.ts +132 -74
- package/src/lib/db/adapter.ts +54 -0
- package/src/lib/db/drizzle-mysql-adapter.ts +194 -0
- package/src/lib/db/drizzle-mysql-auth-adapter.ts +327 -0
- package/src/lib/db/drizzle-postgres-adapter.ts +202 -0
- package/src/lib/db/drizzle-postgres-auth-adapter.ts +304 -0
- package/src/lib/db/drizzle-sqlite-adapter.ts +227 -0
- package/src/lib/db/drizzle-sqlite-auth-adapter.ts +548 -0
- package/src/lib/db/index.ts +449 -0
- package/src/lib/db/mongodb-adapter.ts +207 -0
- package/src/lib/db/mongodb-auth-adapter.ts +305 -0
- package/src/lib/db/schema/mysql-auth.ts +113 -0
- package/src/lib/db/schema/mysql-content.ts +20 -0
- package/src/lib/db/schema/postgres-auth.ts +116 -0
- package/src/lib/db/schema/postgres-content.ts +35 -0
- package/src/lib/db/schema/postgres-media.ts +52 -0
- package/src/lib/db/schema/postgres-settings.ts +11 -0
- package/src/lib/db/schema/sqlite-auth.ts +112 -0
- package/src/lib/db/schema/sqlite-content.ts +20 -0
- package/src/lib/graphql/index.ts +1 -0
- package/src/lib/graphql/schema.ts +443 -0
- package/src/lib/rate-limit.ts +267 -0
- package/src/lib/storage.ts +374 -0
- package/src/lib/store.ts +85 -0
- package/src/middleware.ts +116 -28
- package/src/pages/[collection]/[id].astro +178 -122
- package/src/pages/[collection]/index.astro +24 -156
- package/src/pages/admin/api-explorer.astro +98 -0
- package/src/pages/admin/graphql-explorer.astro +40 -0
- package/src/pages/admin/graphql.astro +97 -0
- package/src/pages/admin/index.astro +286 -0
- package/src/pages/admin/keys.astro +8 -0
- package/src/pages/admin/rest-playground.astro +44 -0
- package/src/pages/admin/webhooks.astro +8 -0
- package/src/pages/api/[collection]/[id]/publish.ts +44 -0
- package/src/pages/api/[collection]/[id]/unpublish.ts +42 -0
- package/src/pages/api/[collection]/[id]/versions.ts +36 -0
- package/src/pages/api/[collection]/[id].ts +102 -159
- package/src/pages/api/[collection]/index.ts +151 -230
- package/src/pages/api/auth/[id].ts +48 -69
- package/src/pages/api/auth/audit-logs.ts +20 -43
- package/src/pages/api/auth/login.ts +159 -45
- package/src/pages/api/auth/logout.ts +50 -20
- package/src/pages/api/auth/refresh.ts +119 -0
- package/src/pages/api/auth/register.ts +110 -40
- package/src/pages/api/auth/users.ts +22 -97
- package/src/pages/api/collections.ts +59 -0
- package/src/pages/api/globals/[slug]/test.ts +172 -0
- package/src/pages/api/globals/[slug].ts +42 -0
- package/src/pages/api/graphql.ts +90 -0
- package/src/pages/api/health.ts +417 -40
- package/src/pages/api/keys/[id].ts +26 -0
- package/src/pages/api/keys/index.ts +75 -0
- package/src/pages/api/media/[id].ts +309 -0
- package/src/pages/api/media/folders.ts +609 -0
- package/src/pages/api/media/index.ts +146 -0
- package/src/pages/api/media/resize.ts +267 -0
- package/src/pages/api/search.ts +82 -0
- package/src/pages/api/slug-availability.ts +70 -0
- package/src/pages/api/storage-config.ts +20 -0
- package/src/pages/api/storage-status.ts +206 -0
- package/src/pages/api/upload.ts +334 -0
- package/src/pages/api/webhooks/index.ts +71 -0
- package/src/pages/audit/index.astro +2 -104
- package/src/pages/login.astro +82 -0
- package/src/pages/media.astro +10 -0
- package/src/pages/preview/[collection]/[id].astro +178 -0
- package/src/pages/register.astro +102 -0
- package/src/pages/roles/index.astro +21 -21
- package/src/pages/settings/[slug].astro +162 -0
- package/src/pages/settings/index.astro +9 -0
- package/src/pages/users/[id].astro +29 -21
- package/src/pages/users/index.astro +22 -17
- package/src/pages/users/new.astro +18 -17
- package/src/styles/main.css +553 -128
- package/src/components/layout/Sidebar.tsx +0 -497
- package/src/pages/index.astro +0 -225
package/src/pages/index.astro
DELETED
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
import AdminLayout from '../layouts/AdminLayout.astro';
|
|
3
|
-
import { collections } from "../lib/config";
|
|
4
|
-
|
|
5
|
-
const authCollections = ['users', 'roles', 'audit_logs'];
|
|
6
|
-
const authItems = authCollections.map(slug => ({
|
|
7
|
-
slug,
|
|
8
|
-
label: collections[slug]?.label || slug,
|
|
9
|
-
icon: slug === 'users' ? 'users' : slug === 'roles' ? 'shield' : 'file-text'
|
|
10
|
-
}));
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
<AdminLayout title="Dashboard">
|
|
14
|
-
<div class="flex-1 overflow-y-auto p-8 pr-12 space-y-8">
|
|
15
|
-
<!-- Header -->
|
|
16
|
-
<div class="surface-tile p-6 flex items-center justify-between gap-8">
|
|
17
|
-
<div class="relative flex-1 max-w-2xl">
|
|
18
|
-
<div class="absolute inset-y-0 left-6 flex items-center pointer-events-none text-[#64748b]">
|
|
19
|
-
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
20
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path>
|
|
21
|
-
</svg>
|
|
22
|
-
</div>
|
|
23
|
-
<input type="text" placeholder="Search anything..." class="w-full bg-gray-50/50 border border-transparent rounded-2xl py-4 pl-16 pr-8 text-lg font-medium focus:outline-none focus:bg-white focus:border-gray-100 transition-all shadow-inner" />
|
|
24
|
-
</div>
|
|
25
|
-
<div class="flex p-1.5 bg-gray-50/50 rounded-2xl">
|
|
26
|
-
<button class="flex items-center gap-3 px-8 py-3 bg-[#0b1222] text-white rounded-xl font-bold shadow-lg transition-all active:scale-95">
|
|
27
|
-
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
28
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" d="M4 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2V6zM14 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2V6zM4 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2v-2zM14 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2v-2z"></path>
|
|
29
|
-
</svg>
|
|
30
|
-
<span>Card</span>
|
|
31
|
-
</button>
|
|
32
|
-
<button class="flex items-center gap-3 px-8 py-3 text-[#64748b] rounded-xl font-bold hover:bg-white/50 transition-all">
|
|
33
|
-
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
34
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" d="M4 6h16M4 12h16M4 18h16"></path>
|
|
35
|
-
</svg>
|
|
36
|
-
<span>List</span>
|
|
37
|
-
</button>
|
|
38
|
-
</div>
|
|
39
|
-
</div>
|
|
40
|
-
|
|
41
|
-
<!-- Auth Management Section -->
|
|
42
|
-
<div class="surface-tile overflow-hidden">
|
|
43
|
-
<div class="flex items-center justify-between p-12 border-b border-gray-50/50">
|
|
44
|
-
<div class="flex-1">
|
|
45
|
-
<h2 class="text-5xl font-black tracking-tighter text-[#0b1222]">
|
|
46
|
-
Authentication
|
|
47
|
-
</h2>
|
|
48
|
-
<p class="text-[#64748b] font-bold mt-4 uppercase tracking-[0.2em] text-sm">
|
|
49
|
-
Manage users, roles, and security
|
|
50
|
-
</p>
|
|
51
|
-
</div>
|
|
52
|
-
<a href="/users/new" class="flex items-center gap-2 px-6 py-3 bg-[#0b1222] text-white rounded-xl font-bold transition-all hover:bg-[#1a2332] active:scale-95">
|
|
53
|
-
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
54
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" d="M12 5v14M5 12h14"></path>
|
|
55
|
-
</svg>
|
|
56
|
-
Add User
|
|
57
|
-
</a>
|
|
58
|
-
</div>
|
|
59
|
-
|
|
60
|
-
<div class="grid grid-cols-1 md:grid-cols-3 gap-6 p-6">
|
|
61
|
-
{authItems.map((item) => (
|
|
62
|
-
<a href={`/${item.slug}`} class="group p-6 bg-gray-50/30 rounded-2xl hover:bg-gray-50/50 transition-all border border-transparent hover:border-gray-100/50">
|
|
63
|
-
<div class="flex items-center gap-4 mb-4">
|
|
64
|
-
<div class={`w-12 h-12 rounded-xl flex items-center justify-center ${
|
|
65
|
-
item.slug === 'users' ? 'bg-blue-50 text-blue-500' :
|
|
66
|
-
item.slug === 'roles' ? 'bg-purple-50 text-purple-500' :
|
|
67
|
-
'bg-green-50 text-green-500'
|
|
68
|
-
}`}>
|
|
69
|
-
{item.icon === 'users' && (
|
|
70
|
-
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
71
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z"></path>
|
|
72
|
-
</svg>
|
|
73
|
-
)}
|
|
74
|
-
{item.icon === 'shield' && (
|
|
75
|
-
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
76
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"></path>
|
|
77
|
-
</svg>
|
|
78
|
-
)}
|
|
79
|
-
{item.icon === 'file-text' && (
|
|
80
|
-
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
81
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"></path>
|
|
82
|
-
</svg>
|
|
83
|
-
)}
|
|
84
|
-
</div>
|
|
85
|
-
<div>
|
|
86
|
-
<h3 class="text-xl font-black text-[#0b1222] tracking-tighter">{item.label}</h3>
|
|
87
|
-
<p class="text-sm text-[#64748b] font-medium mt-1">Manage {item.slug.replace('_', ' ')}</p>
|
|
88
|
-
</div>
|
|
89
|
-
</div>
|
|
90
|
-
<div class="flex items-center gap-2 text-[#64748b] font-bold text-sm group-hover:text-[#0b1222] transition-colors">
|
|
91
|
-
<span>View all</span>
|
|
92
|
-
<svg class="w-4 h-4 transform group-hover:translate-x-1 transition-transform" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
93
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path>
|
|
94
|
-
</svg>
|
|
95
|
-
</div>
|
|
96
|
-
</a>
|
|
97
|
-
))}
|
|
98
|
-
</div>
|
|
99
|
-
</div>
|
|
100
|
-
|
|
101
|
-
<!-- Security Quick Actions -->
|
|
102
|
-
<div class="surface-tile overflow-hidden">
|
|
103
|
-
<div class="p-8 border-b border-gray-50/50">
|
|
104
|
-
<h2 class="text-3xl font-black tracking-tighter text-[#0b1222]">
|
|
105
|
-
Security & Monitoring
|
|
106
|
-
</h2>
|
|
107
|
-
<p class="text-[#64748b] font-bold mt-2 text-sm">
|
|
108
|
-
Rate limiting, audit logs, and account lockout settings
|
|
109
|
-
</p>
|
|
110
|
-
</div>
|
|
111
|
-
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4 p-6">
|
|
112
|
-
<a href="/audit_logs" class="p-5 bg-gray-50/30 rounded-xl hover:bg-gray-50/50 transition-all border border-transparent hover:border-gray-100/50 group">
|
|
113
|
-
<div class="w-10 h-10 rounded-lg bg-orange-50 text-orange-500 flex items-center justify-center mb-3">
|
|
114
|
-
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
115
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"></path>
|
|
116
|
-
</svg>
|
|
117
|
-
</div>
|
|
118
|
-
<h4 class="font-bold text-[#0b1222] mb-1">Audit Logs</h4>
|
|
119
|
-
<p class="text-xs text-[#64748b]">View last 30 days</p>
|
|
120
|
-
</a>
|
|
121
|
-
|
|
122
|
-
<a href="/users?locked=true" class="p-5 bg-gray-50/30 rounded-xl hover:bg-gray-50/50 transition-all border border-transparent hover:border-gray-100/50 group">
|
|
123
|
-
<div class="w-10 h-10 rounded-lg bg-red-50 text-red-500 flex items-center justify-center mb-3">
|
|
124
|
-
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
125
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"></path>
|
|
126
|
-
</svg>
|
|
127
|
-
</div>
|
|
128
|
-
<h4 class="font-bold text-[#0b1222] mb-1">Locked Accounts</h4>
|
|
129
|
-
<p class="text-xs text-[#64748b]">Manage lockouts</p>
|
|
130
|
-
</a>
|
|
131
|
-
|
|
132
|
-
<a href="/roles" class="p-5 bg-gray-50/30 rounded-xl hover:bg-gray-50/50 transition-all border border-transparent hover:border-gray-100/50 group">
|
|
133
|
-
<div class="w-10 h-10 rounded-lg bg-indigo-50 text-indigo-500 flex items-center justify-center mb-3">
|
|
134
|
-
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
135
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"></path>
|
|
136
|
-
</svg>
|
|
137
|
-
</div>
|
|
138
|
-
<h4 class="font-bold text-[#0b1222] mb-1">Permissions</h4>
|
|
139
|
-
<p class="text-xs text-[#64748b]">RBAC settings</p>
|
|
140
|
-
</a>
|
|
141
|
-
|
|
142
|
-
<a href="/api/health" target="_blank" class="p-5 bg-gray-50/30 rounded-xl hover:bg-gray-50/50 transition-all border border-transparent hover:border-gray-100/50 group">
|
|
143
|
-
<div class="w-10 h-10 rounded-lg bg-green-50 text-green-500 flex items-center justify-center mb-3">
|
|
144
|
-
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
145
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"></path>
|
|
146
|
-
</svg>
|
|
147
|
-
</div>
|
|
148
|
-
<h4 class="font-bold text-[#0b1222] mb-1">API Health</h4>
|
|
149
|
-
<p class="text-xs text-[#64748b]">System status</p>
|
|
150
|
-
</a>
|
|
151
|
-
</div>
|
|
152
|
-
</div>
|
|
153
|
-
|
|
154
|
-
<!-- Environment Info -->
|
|
155
|
-
<div class="surface-tile p-6">
|
|
156
|
-
<h3 class="text-xl font-black text-[#0b1222] tracking-tighter mb-4">Configuration</h3>
|
|
157
|
-
<div class="grid grid-cols-2 md:grid-cols-4 gap-4">
|
|
158
|
-
<div class="bg-gray-50/50 rounded-xl p-4">
|
|
159
|
-
<div class="text-xs text-[#64748b] font-bold uppercase tracking-wider mb-1">Database</div>
|
|
160
|
-
<div class="text-sm font-bold text-[#0b1222]">PostgreSQL</div>
|
|
161
|
-
</div>
|
|
162
|
-
<div class="bg-gray-50/50 rounded-xl p-4">
|
|
163
|
-
<div class="text-xs text-[#64748b] font-bold uppercase tracking-wider mb-1">Cache/Sessions</div>
|
|
164
|
-
<div class="text-sm font-bold text-[#0b1222]">Redis</div>
|
|
165
|
-
</div>
|
|
166
|
-
<div class="bg-gray-50/50 rounded-xl p-4">
|
|
167
|
-
<div class="text-xs text-[#64748b] font-bold uppercase tracking-wider mb-1">Auth Method</div>
|
|
168
|
-
<div class="text-sm font-bold text-[#0b1222]">JWT + Redis</div>
|
|
169
|
-
</div>
|
|
170
|
-
<div class="bg-gray-50/50 rounded-xl p-4">
|
|
171
|
-
<div class="text-xs text-[#64748b] font-bold uppercase tracking-wider mb-1">Email</div>
|
|
172
|
-
<div class="text-sm font-bold text-[#0b1222]">Nodemailer</div>
|
|
173
|
-
</div>
|
|
174
|
-
</div>
|
|
175
|
-
<p class="text-xs text-[#64748b] mt-4 font-medium">
|
|
176
|
-
Configure via <code class="bg-gray-100 px-2 py-0.5 rounded text-[#0b1222]">.env</code> file
|
|
177
|
-
</p>
|
|
178
|
-
</div>
|
|
179
|
-
|
|
180
|
-
<!-- Quick Links -->
|
|
181
|
-
<div class="grid grid-cols-1 md:grid-cols-3 gap-6">
|
|
182
|
-
<a href="/api/health" target="_blank" class="surface-tile group p-6 hover:shadow-2xl transition-all hover:translate-y-[-4px]">
|
|
183
|
-
<div class="flex items-center gap-4">
|
|
184
|
-
<div class="w-14 h-14 rounded-2xl bg-green-50 flex items-center justify-center text-green-500 group-hover:scale-110 transition-transform">
|
|
185
|
-
<svg class="w-7 h-7" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
186
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"></path>
|
|
187
|
-
</svg>
|
|
188
|
-
</div>
|
|
189
|
-
<div>
|
|
190
|
-
<h4 class="text-lg font-bold text-[#0b1222]">API Health</h4>
|
|
191
|
-
<p class="text-sm text-[#64748b]">Check system status</p>
|
|
192
|
-
</div>
|
|
193
|
-
</div>
|
|
194
|
-
</a>
|
|
195
|
-
|
|
196
|
-
<a href="/graphql" target="_blank" class="surface-tile group p-6 hover:shadow-2xl transition-all hover:translate-y-[-4px]">
|
|
197
|
-
<div class="flex items-center gap-4">
|
|
198
|
-
<div class="w-14 h-14 rounded-2xl bg-pink-50 flex items-center justify-center text-pink-500 group-hover:scale-110 transition-transform">
|
|
199
|
-
<svg class="w-7 h-7" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
200
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"></path>
|
|
201
|
-
</svg>
|
|
202
|
-
</div>
|
|
203
|
-
<div>
|
|
204
|
-
<h4 class="text-lg font-bold text-[#0b1222]">GraphQL</h4>
|
|
205
|
-
<p class="text-sm text-[#64748b]">API Playground</p>
|
|
206
|
-
</div>
|
|
207
|
-
</div>
|
|
208
|
-
</a>
|
|
209
|
-
|
|
210
|
-
<a href="/api/collections" target="_blank" class="surface-tile group p-6 hover:shadow-2xl transition-all hover:translate-y-[-4px]">
|
|
211
|
-
<div class="flex items-center gap-4">
|
|
212
|
-
<div class="w-14 h-14 rounded-2xl bg-blue-50 flex items-center justify-center text-blue-500 group-hover:scale-110 transition-transform">
|
|
213
|
-
<svg class="w-7 h-7" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
214
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4"></path>
|
|
215
|
-
</svg>
|
|
216
|
-
</div>
|
|
217
|
-
<div>
|
|
218
|
-
<h4 class="text-lg font-bold text-[#0b1222]">REST API</h4>
|
|
219
|
-
<p class="text-sm text-[#64748b]">Collections endpoint</p>
|
|
220
|
-
</div>
|
|
221
|
-
</div>
|
|
222
|
-
</a>
|
|
223
|
-
</div>
|
|
224
|
-
</div>
|
|
225
|
-
</AdminLayout>
|