railsmaker-core 0.0.1
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.
- checksums.yaml +7 -0
- data/README.md +169 -0
- data/bin/railsmaker +344 -0
- data/lib/railsmaker/generators/app_generator.rb +157 -0
- data/lib/railsmaker/generators/auth_generator.rb +97 -0
- data/lib/railsmaker/generators/base_generator.rb +39 -0
- data/lib/railsmaker/generators/concerns/gsub_validation.rb +24 -0
- data/lib/railsmaker/generators/litestream_generator.rb +89 -0
- data/lib/railsmaker/generators/mailjet_generator.rb +68 -0
- data/lib/railsmaker/generators/opentelemetry_generator.rb +79 -0
- data/lib/railsmaker/generators/plausible_generator.rb +33 -0
- data/lib/railsmaker/generators/plausible_instrumentation_generator.rb +28 -0
- data/lib/railsmaker/generators/sentry_generator.rb +46 -0
- data/lib/railsmaker/generators/server_command_generator.rb +178 -0
- data/lib/railsmaker/generators/signoz_generator.rb +33 -0
- data/lib/railsmaker/generators/signoz_opentelemetry_generator.rb +37 -0
- data/lib/railsmaker/generators/templates/app/credentials.example.yml +14 -0
- data/lib/railsmaker/generators/templates/app/main_index.html.erb +71 -0
- data/lib/railsmaker/generators/templates/auth/app/controllers/omniauth_callbacks_controller.rb +18 -0
- data/lib/railsmaker/generators/templates/litestream/litestream.yml.erb +32 -0
- data/lib/railsmaker/generators/templates/opentelemetry/lograge.rb.erb +9 -0
- data/lib/railsmaker/generators/templates/shell_scripts/plausible.sh.erb +51 -0
- data/lib/railsmaker/generators/templates/shell_scripts/signoz.sh.erb +38 -0
- data/lib/railsmaker/generators/templates/shell_scripts/signoz_opentelemetry.sh.erb +49 -0
- data/lib/railsmaker/generators/templates/ui/app/assets/images/og-image.webp +0 -0
- data/lib/railsmaker/generators/templates/ui/app/assets/images/plausible-screenshot.png +0 -0
- data/lib/railsmaker/generators/templates/ui/app/assets/images/signoz-screenshot.png +0 -0
- data/lib/railsmaker/generators/templates/ui/app/controllers/demo_controller.rb +7 -0
- data/lib/railsmaker/generators/templates/ui/app/controllers/pages_controller.rb +4 -0
- data/lib/railsmaker/generators/templates/ui/app/helpers/seo_helper.rb +39 -0
- data/lib/railsmaker/generators/templates/ui/app/javascript/controllers/flash_controller.js +14 -0
- data/lib/railsmaker/generators/templates/ui/app/javascript/controllers/index.js +11 -0
- data/lib/railsmaker/generators/templates/ui/app/javascript/controllers/scroll_fade_controller.js +27 -0
- data/lib/railsmaker/generators/templates/ui/app/views/clearance_mailer/change_password.html.erb +8 -0
- data/lib/railsmaker/generators/templates/ui/app/views/clearance_mailer/change_password.text.erb +5 -0
- data/lib/railsmaker/generators/templates/ui/app/views/demo/analytics.html.erb +214 -0
- data/lib/railsmaker/generators/templates/ui/app/views/demo/index.html.erb +312 -0
- data/lib/railsmaker/generators/templates/ui/app/views/demo/support.html.erb +147 -0
- data/lib/railsmaker/generators/templates/ui/app/views/layouts/_navbar.html.erb +193 -0
- data/lib/railsmaker/generators/templates/ui/app/views/layouts/application.html.erb +62 -0
- data/lib/railsmaker/generators/templates/ui/app/views/main/index.html.erb +320 -0
- data/lib/railsmaker/generators/templates/ui/app/views/pages/privacy.html.erb +63 -0
- data/lib/railsmaker/generators/templates/ui/app/views/pages/terms.html.erb +54 -0
- data/lib/railsmaker/generators/templates/ui/app/views/passwords/create.html.erb +9 -0
- data/lib/railsmaker/generators/templates/ui/app/views/passwords/edit.html.erb +21 -0
- data/lib/railsmaker/generators/templates/ui/app/views/passwords/new.html.erb +26 -0
- data/lib/railsmaker/generators/templates/ui/app/views/sessions/new.html.erb +49 -0
- data/lib/railsmaker/generators/templates/ui/app/views/shared/_auth_layout.html.erb +24 -0
- data/lib/railsmaker/generators/templates/ui/app/views/shared/_flash.html.erb +19 -0
- data/lib/railsmaker/generators/templates/ui/app/views/shared/_footer.html.erb +52 -0
- data/lib/railsmaker/generators/templates/ui/app/views/shared/_structured_data.html.erb +20 -0
- data/lib/railsmaker/generators/templates/ui/app/views/users/new.html.erb +49 -0
- data/lib/railsmaker/generators/templates/ui/config/sitemap.rb +33 -0
- data/lib/railsmaker/generators/templates/ui/public/icon.png +0 -0
- data/lib/railsmaker/generators/templates/ui/public/icon.svg +5 -0
- data/lib/railsmaker/generators/templates/ui/public/robots.txt +8 -0
- data/lib/railsmaker/generators/ui_generator.rb +68 -0
- data/lib/railsmaker.rb +29 -0
- metadata +359 -0
@@ -0,0 +1,214 @@
|
|
1
|
+
<div class="container mx-auto px-4 py-8 mt-16 pb-24 md:pb-8">
|
2
|
+
<!-- Page Header -->
|
3
|
+
<div class="flex items-center gap-3 mb-8">
|
4
|
+
<div class="size-12 rounded-lg bg-primary/10 flex items-center justify-center">
|
5
|
+
<svg xmlns="http://www.w3.org/2000/svg" class="size-6 text-primary" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
6
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z" />
|
7
|
+
</svg>
|
8
|
+
</div>
|
9
|
+
<div>
|
10
|
+
<h2 class="text-2xl font-bold">Analytics</h2>
|
11
|
+
<p class="text-base-content/60">Track your application metrics</p>
|
12
|
+
</div>
|
13
|
+
</div>
|
14
|
+
|
15
|
+
<!-- Main Content -->
|
16
|
+
<div class="grid grid-cols-1 gap-8">
|
17
|
+
<!-- Stats Overview -->
|
18
|
+
<div class="card bg-base-100 shadow-xl">
|
19
|
+
<div class="card-body p-0">
|
20
|
+
<div class="stats stats-vertical md:stats-horizontal w-full">
|
21
|
+
<div class="stat">
|
22
|
+
<div class="stat-figure text-primary">
|
23
|
+
<div class="rounded-lg bg-primary/10 p-2">
|
24
|
+
<svg xmlns="http://www.w3.org/2000/svg" class="size-6 text-primary" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
25
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
|
26
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z" />
|
27
|
+
</svg>
|
28
|
+
</div>
|
29
|
+
</div>
|
30
|
+
<div class="stat-title">Total Page Views</div>
|
31
|
+
<div class="stat-value text-primary">25.6K</div>
|
32
|
+
<div class="stat-desc flex items-center gap-1">
|
33
|
+
<svg xmlns="http://www.w3.org/2000/svg" class="size-4 text-success" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
34
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 7h8m0 0v8m0-8l-8 8-4-4-6 6" />
|
35
|
+
</svg>
|
36
|
+
21% more than last month
|
37
|
+
</div>
|
38
|
+
</div>
|
39
|
+
|
40
|
+
<div class="stat">
|
41
|
+
<div class="stat-figure text-secondary">
|
42
|
+
<div class="rounded-lg bg-secondary/10 p-2">
|
43
|
+
<svg xmlns="http://www.w3.org/2000/svg" class="size-6 text-secondary" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
44
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z" />
|
45
|
+
</svg>
|
46
|
+
</div>
|
47
|
+
</div>
|
48
|
+
<div class="stat-title">Unique Visitors</div>
|
49
|
+
<div class="stat-value text-secondary">2.6K</div>
|
50
|
+
<div class="stat-desc flex items-center gap-1">
|
51
|
+
<svg xmlns="http://www.w3.org/2000/svg" class="size-4 text-success" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
52
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 7h8m0 0v8m0-8l-8 8-4-4-6 6" />
|
53
|
+
</svg>
|
54
|
+
14% more than last month
|
55
|
+
</div>
|
56
|
+
</div>
|
57
|
+
</div>
|
58
|
+
</div>
|
59
|
+
</div>
|
60
|
+
|
61
|
+
<!-- Charts Grid -->
|
62
|
+
<div class="grid grid-cols-1 md:grid-cols-2 gap-8">
|
63
|
+
<!-- Traffic Sources -->
|
64
|
+
<div class="card bg-base-100 shadow-xl">
|
65
|
+
<div class="card-body">
|
66
|
+
<div class="flex items-center justify-between mb-6">
|
67
|
+
<h2 class="card-title">Traffic Sources</h2>
|
68
|
+
<select class="select select-sm select-bordered">
|
69
|
+
<option>Last 7 days</option>
|
70
|
+
<option>Last 30 days</option>
|
71
|
+
<option>Last 90 days</option>
|
72
|
+
</select>
|
73
|
+
</div>
|
74
|
+
<div class="space-y-6">
|
75
|
+
<div>
|
76
|
+
<div class="flex justify-between items-center mb-2">
|
77
|
+
<div class="flex items-center gap-2">
|
78
|
+
<div class="size-2 rounded-full bg-primary"></div>
|
79
|
+
<span class="font-medium">Direct Traffic</span>
|
80
|
+
</div>
|
81
|
+
<span class="font-medium">45%</span>
|
82
|
+
</div>
|
83
|
+
<progress class="progress progress-primary w-full" value="45" max="100"></progress>
|
84
|
+
</div>
|
85
|
+
|
86
|
+
<div>
|
87
|
+
<div class="flex justify-between items-center mb-2">
|
88
|
+
<div class="flex items-center gap-2">
|
89
|
+
<div class="size-2 rounded-full bg-secondary"></div>
|
90
|
+
<span class="font-medium">Social Media</span>
|
91
|
+
</div>
|
92
|
+
<span class="font-medium">30%</span>
|
93
|
+
</div>
|
94
|
+
<progress class="progress progress-secondary w-full" value="30" max="100"></progress>
|
95
|
+
</div>
|
96
|
+
|
97
|
+
<div>
|
98
|
+
<div class="flex justify-between items-center mb-2">
|
99
|
+
<div class="flex items-center gap-2">
|
100
|
+
<div class="size-2 rounded-full bg-accent"></div>
|
101
|
+
<span class="font-medium">Referral</span>
|
102
|
+
</div>
|
103
|
+
<span class="font-medium">25%</span>
|
104
|
+
</div>
|
105
|
+
<progress class="progress progress-accent w-full" value="25" max="100"></progress>
|
106
|
+
</div>
|
107
|
+
</div>
|
108
|
+
</div>
|
109
|
+
</div>
|
110
|
+
|
111
|
+
<!-- User Engagement -->
|
112
|
+
<div class="card bg-base-100 shadow-xl">
|
113
|
+
<div class="card-body">
|
114
|
+
<div class="flex items-center justify-between mb-6">
|
115
|
+
<h2 class="card-title">Page Performance</h2>
|
116
|
+
<div class="badge badge-primary">Live Data</div>
|
117
|
+
</div>
|
118
|
+
<div class="overflow-x-auto -mx-4 md:mx-0">
|
119
|
+
<div class="md:hidden">
|
120
|
+
<div class="space-y-4">
|
121
|
+
<div class="bg-base-200 p-4 rounded-lg">
|
122
|
+
<div class="flex items-center gap-2 mb-2">
|
123
|
+
<div class="size-2 rounded-full bg-success"></div>
|
124
|
+
<span class="font-medium">Homepage</span>
|
125
|
+
</div>
|
126
|
+
<div class="flex justify-between mt-2 text-sm">
|
127
|
+
<span class="opacity-70">Views:</span>
|
128
|
+
<span class="font-medium">12,543</span>
|
129
|
+
</div>
|
130
|
+
<div class="flex justify-between mt-1 text-sm">
|
131
|
+
<span class="opacity-70">Avg. Time:</span>
|
132
|
+
<span class="font-medium">2m 15s</span>
|
133
|
+
</div>
|
134
|
+
</div>
|
135
|
+
|
136
|
+
<div class="bg-base-200 p-4 rounded-lg">
|
137
|
+
<div class="flex items-center gap-2 mb-2">
|
138
|
+
<div class="size-2 rounded-full bg-warning"></div>
|
139
|
+
<span class="font-medium">Features</span>
|
140
|
+
</div>
|
141
|
+
<div class="flex justify-between mt-2 text-sm">
|
142
|
+
<span class="opacity-70">Views:</span>
|
143
|
+
<span class="font-medium">8,234</span>
|
144
|
+
</div>
|
145
|
+
<div class="flex justify-between mt-1 text-sm">
|
146
|
+
<span class="opacity-70">Avg. Time:</span>
|
147
|
+
<span class="font-medium">1m 45s</span>
|
148
|
+
</div>
|
149
|
+
</div>
|
150
|
+
|
151
|
+
<div class="bg-base-200 p-4 rounded-lg">
|
152
|
+
<div class="flex items-center gap-2 mb-2">
|
153
|
+
<div class="size-2 rounded-full bg-info"></div>
|
154
|
+
<span class="font-medium">Pricing</span>
|
155
|
+
</div>
|
156
|
+
<div class="flex justify-between mt-2 text-sm">
|
157
|
+
<span class="opacity-70">Views:</span>
|
158
|
+
<span class="font-medium">6,158</span>
|
159
|
+
</div>
|
160
|
+
<div class="flex justify-between mt-1 text-sm">
|
161
|
+
<span class="opacity-70">Avg. Time:</span>
|
162
|
+
<span class="font-medium">3m 12s</span>
|
163
|
+
</div>
|
164
|
+
</div>
|
165
|
+
</div>
|
166
|
+
</div>
|
167
|
+
|
168
|
+
<div class="hidden md:block">
|
169
|
+
<table class="table table-zebra w-full">
|
170
|
+
<thead>
|
171
|
+
<tr>
|
172
|
+
<th>Page</th>
|
173
|
+
<th class="text-right">Views</th>
|
174
|
+
<th class="text-right">Avg. Time</th>
|
175
|
+
<th class="text-right">Bounce Rate</th>
|
176
|
+
</tr>
|
177
|
+
</thead>
|
178
|
+
<tbody>
|
179
|
+
<tr>
|
180
|
+
<td class="flex items-center gap-2">
|
181
|
+
<div class="size-2 rounded-full bg-success"></div>
|
182
|
+
Homepage
|
183
|
+
</td>
|
184
|
+
<td class="text-right">12,543</td>
|
185
|
+
<td class="text-right">2m 15s</td>
|
186
|
+
<td class="text-right">32%</td>
|
187
|
+
</tr>
|
188
|
+
<tr>
|
189
|
+
<td class="flex items-center gap-2">
|
190
|
+
<div class="size-2 rounded-full bg-warning"></div>
|
191
|
+
Features
|
192
|
+
</td>
|
193
|
+
<td class="text-right">8,234</td>
|
194
|
+
<td class="text-right">1m 45s</td>
|
195
|
+
<td class="text-right">28%</td>
|
196
|
+
</tr>
|
197
|
+
<tr>
|
198
|
+
<td class="flex items-center gap-2">
|
199
|
+
<div class="size-2 rounded-full bg-info"></div>
|
200
|
+
Pricing
|
201
|
+
</td>
|
202
|
+
<td class="text-right">6,158</td>
|
203
|
+
<td class="text-right">3m 12s</td>
|
204
|
+
<td class="text-right">25%</td>
|
205
|
+
</tr>
|
206
|
+
</tbody>
|
207
|
+
</table>
|
208
|
+
</div>
|
209
|
+
</div>
|
210
|
+
</div>
|
211
|
+
</div>
|
212
|
+
</div>
|
213
|
+
</div>
|
214
|
+
</div>
|
@@ -0,0 +1,312 @@
|
|
1
|
+
<div class="container mx-auto px-4 py-8 mt-16 pb-24 md:pb-8">
|
2
|
+
<!-- Page Header -->
|
3
|
+
<div class="flex flex-col md:flex-row md:items-center md:justify-between gap-4 mb-8">
|
4
|
+
<div class="flex items-center gap-3">
|
5
|
+
<div class="size-12 rounded-lg bg-primary/10 flex items-center justify-center">
|
6
|
+
<svg xmlns="http://www.w3.org/2000/svg" class="size-6 text-primary" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
7
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" />
|
8
|
+
</svg>
|
9
|
+
</div>
|
10
|
+
<div>
|
11
|
+
<h2 class="text-2xl font-bold">Dashboard</h2>
|
12
|
+
<p class="text-base-content/60">Welcome back, Team</p>
|
13
|
+
</div>
|
14
|
+
</div>
|
15
|
+
|
16
|
+
<div class="flex gap-2">
|
17
|
+
<button class="btn btn-disabled">
|
18
|
+
<svg xmlns="http://www.w3.org/2000/svg" class="size-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
19
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4v16m8-8H4" />
|
20
|
+
</svg>
|
21
|
+
New Project
|
22
|
+
</button>
|
23
|
+
</div>
|
24
|
+
</div>
|
25
|
+
|
26
|
+
<!-- Stats Overview -->
|
27
|
+
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4 mb-8">
|
28
|
+
<div class="card bg-base-100 shadow-sm">
|
29
|
+
<div class="card-body p-6">
|
30
|
+
<div class="flex items-center justify-between">
|
31
|
+
<div>
|
32
|
+
<div class="text-xs font-semibold text-base-content/70 uppercase">Active Projects</div>
|
33
|
+
<div class="text-2xl font-bold mt-1">12</div>
|
34
|
+
</div>
|
35
|
+
<div class="rounded-lg bg-primary/10 p-2">
|
36
|
+
<svg xmlns="http://www.w3.org/2000/svg" class="size-6 text-primary" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
37
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2" />
|
38
|
+
</svg>
|
39
|
+
</div>
|
40
|
+
</div>
|
41
|
+
<div class="text-xs text-success mt-2">↑ 8% from last month</div>
|
42
|
+
</div>
|
43
|
+
</div>
|
44
|
+
|
45
|
+
<div class="card bg-base-100 shadow-sm">
|
46
|
+
<div class="card-body p-6">
|
47
|
+
<div class="flex items-center justify-between">
|
48
|
+
<div>
|
49
|
+
<div class="text-xs font-semibold text-base-content/70 uppercase">Team Members</div>
|
50
|
+
<div class="text-2xl font-bold mt-1">24</div>
|
51
|
+
</div>
|
52
|
+
<div class="rounded-lg bg-success/10 p-2">
|
53
|
+
<svg xmlns="http://www.w3.org/2000/svg" class="size-6 text-success" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
54
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z" />
|
55
|
+
</svg>
|
56
|
+
</div>
|
57
|
+
</div>
|
58
|
+
<div class="text-xs text-success mt-2">↑ 2 new this week</div>
|
59
|
+
</div>
|
60
|
+
</div>
|
61
|
+
|
62
|
+
<div class="card bg-base-100 shadow-sm">
|
63
|
+
<div class="card-body p-6">
|
64
|
+
<div class="flex items-center justify-between">
|
65
|
+
<div>
|
66
|
+
<div class="text-xs font-semibold text-base-content/70 uppercase">Tasks Completed</div>
|
67
|
+
<div class="text-2xl font-bold mt-1">84%</div>
|
68
|
+
</div>
|
69
|
+
<div class="rounded-lg bg-warning/10 p-2">
|
70
|
+
<svg xmlns="http://www.w3.org/2000/svg" class="size-6 text-warning" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
71
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4" />
|
72
|
+
</svg>
|
73
|
+
</div>
|
74
|
+
</div>
|
75
|
+
<div class="text-xs text-success mt-2">↑ 12% improvement</div>
|
76
|
+
</div>
|
77
|
+
</div>
|
78
|
+
|
79
|
+
<div class="card bg-base-100 shadow-sm">
|
80
|
+
<div class="card-body p-6">
|
81
|
+
<div class="flex items-center justify-between">
|
82
|
+
<div>
|
83
|
+
<div class="text-xs font-semibold text-base-content/70 uppercase">Time Tracked</div>
|
84
|
+
<div class="text-2xl font-bold mt-1">164h</div>
|
85
|
+
</div>
|
86
|
+
<div class="rounded-lg bg-info/10 p-2">
|
87
|
+
<svg xmlns="http://www.w3.org/2000/svg" class="size-6 text-info" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
88
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" />
|
89
|
+
</svg>
|
90
|
+
</div>
|
91
|
+
</div>
|
92
|
+
<div class="text-xs text-success mt-2">On track with estimates</div>
|
93
|
+
</div>
|
94
|
+
</div>
|
95
|
+
</div>
|
96
|
+
|
97
|
+
<!-- Main Content Grid -->
|
98
|
+
<div class="grid grid-cols-1 lg:grid-cols-3 gap-8">
|
99
|
+
<!-- Project Tasks -->
|
100
|
+
<div class="lg:col-span-2">
|
101
|
+
<div class="card bg-base-100 shadow-sm">
|
102
|
+
<div class="card-body p-6">
|
103
|
+
<div class="flex flex-col sm:flex-row sm:items-center justify-between gap-4 mb-6">
|
104
|
+
<h3 class="card-title">Current Tasks</h3>
|
105
|
+
<select class="select select-sm select-bordered w-full sm:w-[200px]">
|
106
|
+
<option>All Projects</option>
|
107
|
+
<option>Website Redesign</option>
|
108
|
+
<option>Mobile App</option>
|
109
|
+
<option>API Integration</option>
|
110
|
+
</select>
|
111
|
+
</div>
|
112
|
+
|
113
|
+
<!-- Desktop Table (hidden on mobile) -->
|
114
|
+
<div class="hidden md:block overflow-x-auto">
|
115
|
+
<table class="table table-zebra">
|
116
|
+
<thead>
|
117
|
+
<tr>
|
118
|
+
<th>Task</th>
|
119
|
+
<th>Due Date</th>
|
120
|
+
<th>Status</th>
|
121
|
+
<th>Assigned</th>
|
122
|
+
</tr>
|
123
|
+
</thead>
|
124
|
+
<tbody>
|
125
|
+
<tr>
|
126
|
+
<td class="max-w-[240px]">
|
127
|
+
<div class="font-medium">Homepage Redesign</div>
|
128
|
+
<div class="text-xs text-base-content/60">Update hero section and CTA</div>
|
129
|
+
</td>
|
130
|
+
<td>
|
131
|
+
<div class="text-sm">Sep 25</div>
|
132
|
+
<div class="text-xs text-error">Overdue</div>
|
133
|
+
</td>
|
134
|
+
<td><div class="badge badge-warning badge-sm">In Progress</div></td>
|
135
|
+
<td>
|
136
|
+
<div class="avatar-group -space-x-4 rtl:space-x-reverse">
|
137
|
+
<div class="avatar">
|
138
|
+
<div class="w-8">
|
139
|
+
<img src="https://api.dicebear.com/7.x/avataaars/svg?seed=1" />
|
140
|
+
</div>
|
141
|
+
</div>
|
142
|
+
<div class="avatar">
|
143
|
+
<div class="w-8">
|
144
|
+
<img src="https://api.dicebear.com/7.x/avataaars/svg?seed=2" />
|
145
|
+
</div>
|
146
|
+
</div>
|
147
|
+
</div>
|
148
|
+
</td>
|
149
|
+
</tr>
|
150
|
+
<tr>
|
151
|
+
<td class="max-w-[240px]">
|
152
|
+
<div class="font-medium">User Authentication</div>
|
153
|
+
<div class="text-xs text-base-content/60">Implement OAuth flow</div>
|
154
|
+
</td>
|
155
|
+
<td>
|
156
|
+
<div class="text-sm">Sep 28</div>
|
157
|
+
<div class="text-xs text-success">On Track</div>
|
158
|
+
</td>
|
159
|
+
<td><div class="badge badge-success badge-sm">Completed</div></td>
|
160
|
+
<td>
|
161
|
+
<div class="avatar">
|
162
|
+
<div class="w-8">
|
163
|
+
<img src="https://api.dicebear.com/7.x/avataaars/svg?seed=3" />
|
164
|
+
</div>
|
165
|
+
</div>
|
166
|
+
</td>
|
167
|
+
</tr>
|
168
|
+
<tr>
|
169
|
+
<td class="max-w-[240px]">
|
170
|
+
<div class="font-medium">API Documentation</div>
|
171
|
+
<div class="text-xs text-base-content/60">Update endpoint references</div>
|
172
|
+
</td>
|
173
|
+
<td>
|
174
|
+
<div class="text-sm">Sep 30</div>
|
175
|
+
<div class="text-xs text-success">On Track</div>
|
176
|
+
</td>
|
177
|
+
<td><div class="badge badge-neutral badge-sm">Not Started</div></td>
|
178
|
+
<td>
|
179
|
+
<div class="avatar">
|
180
|
+
<div class="w-8">
|
181
|
+
<img src="https://api.dicebear.com/7.x/avataaars/svg?seed=4" />
|
182
|
+
</div>
|
183
|
+
</div>
|
184
|
+
</td>
|
185
|
+
</tr>
|
186
|
+
</tbody>
|
187
|
+
</table>
|
188
|
+
</div>
|
189
|
+
|
190
|
+
<!-- Mobile Task List -->
|
191
|
+
<div class="md:hidden space-y-4">
|
192
|
+
<div class="card bg-base-200">
|
193
|
+
<div class="card-body p-4">
|
194
|
+
<div class="flex items-center justify-between mb-2">
|
195
|
+
<h4 class="font-medium">Homepage Redesign</h4>
|
196
|
+
<div class="badge badge-warning badge-sm">In Progress</div>
|
197
|
+
</div>
|
198
|
+
<p class="text-sm text-base-content/60 mb-3">Update hero section and CTA</p>
|
199
|
+
<div class="flex items-center justify-between">
|
200
|
+
<div>
|
201
|
+
<div class="text-sm">Sep 25</div>
|
202
|
+
<div class="text-xs text-error">Overdue</div>
|
203
|
+
</div>
|
204
|
+
<div class="avatar-group -space-x-4 rtl:space-x-reverse">
|
205
|
+
<div class="avatar">
|
206
|
+
<div class="w-8">
|
207
|
+
<img src="https://api.dicebear.com/7.x/avataaars/svg?seed=1" />
|
208
|
+
</div>
|
209
|
+
</div>
|
210
|
+
<div class="avatar">
|
211
|
+
<div class="w-8">
|
212
|
+
<img src="https://api.dicebear.com/7.x/avataaars/svg?seed=2" />
|
213
|
+
</div>
|
214
|
+
</div>
|
215
|
+
</div>
|
216
|
+
</div>
|
217
|
+
</div>
|
218
|
+
</div>
|
219
|
+
|
220
|
+
<div class="card bg-base-200">
|
221
|
+
<div class="card-body p-4">
|
222
|
+
<div class="flex items-center justify-between mb-2">
|
223
|
+
<h4 class="font-medium">User Authentication</h4>
|
224
|
+
<div class="badge badge-success badge-sm">Completed</div>
|
225
|
+
</div>
|
226
|
+
<p class="text-sm text-base-content/60 mb-3">Implement OAuth flow</p>
|
227
|
+
<div class="flex items-center justify-between">
|
228
|
+
<div>
|
229
|
+
<div class="text-sm">Sep 28</div>
|
230
|
+
<div class="text-xs text-success">On Track</div>
|
231
|
+
</div>
|
232
|
+
<div class="avatar">
|
233
|
+
<div class="w-8">
|
234
|
+
<img src="https://api.dicebear.com/7.x/avataaars/svg?seed=3" />
|
235
|
+
</div>
|
236
|
+
</div>
|
237
|
+
</div>
|
238
|
+
</div>
|
239
|
+
</div>
|
240
|
+
|
241
|
+
<div class="card bg-base-200">
|
242
|
+
<div class="card-body p-4">
|
243
|
+
<div class="flex items-center justify-between mb-2">
|
244
|
+
<h4 class="font-medium">API Documentation</h4>
|
245
|
+
<div class="badge badge-neutral badge-sm">Not Started</div>
|
246
|
+
</div>
|
247
|
+
<p class="text-sm text-base-content/60 mb-3">Update endpoint references</p>
|
248
|
+
<div class="flex items-center justify-between">
|
249
|
+
<div>
|
250
|
+
<div class="text-sm">Sep 30</div>
|
251
|
+
<div class="text-xs text-success">On Track</div>
|
252
|
+
</div>
|
253
|
+
<div class="avatar">
|
254
|
+
<div class="w-8">
|
255
|
+
<img src="https://api.dicebear.com/7.x/avataaars/svg?seed=4" />
|
256
|
+
</div>
|
257
|
+
</div>
|
258
|
+
</div>
|
259
|
+
</div>
|
260
|
+
</div>
|
261
|
+
</div>
|
262
|
+
</div>
|
263
|
+
</div>
|
264
|
+
</div>
|
265
|
+
|
266
|
+
<!-- Team Activity -->
|
267
|
+
<div class="lg:col-span-1">
|
268
|
+
<div class="card bg-base-100 shadow-sm">
|
269
|
+
<div class="card-body p-6">
|
270
|
+
<h3 class="card-title mb-6">Recent Activity</h3>
|
271
|
+
<div class="space-y-6">
|
272
|
+
<div class="flex gap-4">
|
273
|
+
<div class="avatar">
|
274
|
+
<div class="w-10 rounded-full">
|
275
|
+
<img src="https://api.dicebear.com/7.x/avataaars/svg?seed=5" />
|
276
|
+
</div>
|
277
|
+
</div>
|
278
|
+
<div>
|
279
|
+
<p class="text-sm"><span class="font-medium">Alex</span> completed <span class="font-medium">Homepage Design</span></p>
|
280
|
+
<time class="text-xs text-base-content/60">2 hours ago</time>
|
281
|
+
</div>
|
282
|
+
</div>
|
283
|
+
|
284
|
+
<div class="flex gap-4">
|
285
|
+
<div class="avatar">
|
286
|
+
<div class="w-10 rounded-full">
|
287
|
+
<img src="https://api.dicebear.com/7.x/avataaars/svg?seed=6" />
|
288
|
+
</div>
|
289
|
+
</div>
|
290
|
+
<div>
|
291
|
+
<p class="text-sm"><span class="font-medium">Sarah</span> commented on <span class="font-medium">API Integration</span></p>
|
292
|
+
<time class="text-xs text-base-content/60">5 hours ago</time>
|
293
|
+
</div>
|
294
|
+
</div>
|
295
|
+
|
296
|
+
<div class="flex gap-4">
|
297
|
+
<div class="avatar">
|
298
|
+
<div class="w-10 rounded-full">
|
299
|
+
<img src="https://api.dicebear.com/7.x/avataaars/svg?seed=7" />
|
300
|
+
</div>
|
301
|
+
</div>
|
302
|
+
<div>
|
303
|
+
<p class="text-sm"><span class="font-medium">Mike</span> created <span class="font-medium">New Project</span></p>
|
304
|
+
<time class="text-xs text-base-content/60">1 day ago</time>
|
305
|
+
</div>
|
306
|
+
</div>
|
307
|
+
</div>
|
308
|
+
</div>
|
309
|
+
</div>
|
310
|
+
</div>
|
311
|
+
</div>
|
312
|
+
</div>
|