@ihsandeen/aya 1.0.0
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/CONTRIBUTING.md +39 -0
- package/LICENSE +21 -0
- package/README.md +141 -0
- package/dist/commands/adab.js +28 -0
- package/dist/commands/adhan.js +58 -0
- package/dist/commands/anatomy.js +29 -0
- package/dist/commands/blame.js +29 -0
- package/dist/commands/commit.js +44 -0
- package/dist/commands/diff.js +54 -0
- package/dist/commands/dua.js +34 -0
- package/dist/commands/fast.js +36 -0
- package/dist/commands/friday.js +21 -0
- package/dist/commands/hero.js +69 -0
- package/dist/commands/hijri.js +42 -0
- package/dist/commands/history.js +98 -0
- package/dist/commands/init.js +54 -0
- package/dist/commands/invest.js +26 -0
- package/dist/commands/journal.js +84 -0
- package/dist/commands/journey.js +24 -0
- package/dist/commands/lens.js +58 -0
- package/dist/commands/memorize.js +117 -0
- package/dist/commands/mirror.js +47 -0
- package/dist/commands/names.js +48 -0
- package/dist/commands/nature.js +28 -0
- package/dist/commands/nazm.js +100 -0
- package/dist/commands/parable.js +332 -0
- package/dist/commands/prayers.js +63 -0
- package/dist/commands/pull.js +28 -0
- package/dist/commands/push.js +156 -0
- package/dist/commands/qibla.js +118 -0
- package/dist/commands/repo.js +34 -0
- package/dist/commands/sabr.js +32 -0
- package/dist/commands/scene.js +54 -0
- package/dist/commands/seek.js +28 -0
- package/dist/commands/shukr.js +22 -0
- package/dist/commands/sleep.js +26 -0
- package/dist/commands/sound.js +35 -0
- package/dist/commands/status.js +109 -0
- package/dist/commands/sunnah.js +24 -0
- package/dist/commands/tafsir.js +89 -0
- package/dist/commands/tasbih.js +50 -0
- package/dist/commands/wudu.js +22 -0
- package/dist/commands/zakat.js +72 -0
- package/dist/data/commands-db.js +365 -0
- package/dist/data/events.js +105 -0
- package/dist/data/gems.js +160 -0
- package/dist/data/nak.js +616 -0
- package/dist/data/tafsir.js +157 -0
- package/dist/data/vocab.js +105 -0
- package/dist/index.js +86 -0
- package/dist/server.js +140 -0
- package/dist/utils/config.js +38 -0
- package/dist/utils/logger.js +104 -0
- package/dist/utils/printer.js +36 -0
- package/docs/index.html +1048 -0
- package/docs/repo.html +952 -0
- package/package.json +55 -0
- package/public/hero.html +285 -0
- package/public/index.html +1039 -0
- package/public/repo.html +904 -0
- package/src/commands/adab.ts +24 -0
- package/src/commands/adhan.ts +55 -0
- package/src/commands/anatomy.ts +25 -0
- package/src/commands/blame.ts +31 -0
- package/src/commands/commit.ts +42 -0
- package/src/commands/diff.ts +56 -0
- package/src/commands/dua.ts +34 -0
- package/src/commands/fast.ts +35 -0
- package/src/commands/friday.ts +17 -0
- package/src/commands/hero.ts +73 -0
- package/src/commands/hijri.ts +43 -0
- package/src/commands/history.ts +103 -0
- package/src/commands/init.ts +53 -0
- package/src/commands/invest.ts +22 -0
- package/src/commands/journal.ts +97 -0
- package/src/commands/journey.ts +20 -0
- package/src/commands/lens.ts +58 -0
- package/src/commands/memorize.ts +131 -0
- package/src/commands/mirror.ts +48 -0
- package/src/commands/names.ts +46 -0
- package/src/commands/nature.ts +24 -0
- package/src/commands/nazm.ts +102 -0
- package/src/commands/parable.ts +360 -0
- package/src/commands/prayers.ts +65 -0
- package/src/commands/pull.ts +28 -0
- package/src/commands/push.ts +171 -0
- package/src/commands/qibla.ts +127 -0
- package/src/commands/repo.ts +34 -0
- package/src/commands/sabr.ts +28 -0
- package/src/commands/scene.ts +56 -0
- package/src/commands/seek.ts +24 -0
- package/src/commands/shukr.ts +19 -0
- package/src/commands/sleep.ts +23 -0
- package/src/commands/sound.ts +34 -0
- package/src/commands/status.ts +132 -0
- package/src/commands/sunnah.ts +21 -0
- package/src/commands/tafsir.ts +86 -0
- package/src/commands/tasbih.ts +49 -0
- package/src/commands/wudu.ts +19 -0
- package/src/commands/zakat.ts +73 -0
- package/src/data/commands-db.ts +372 -0
- package/src/data/events.ts +113 -0
- package/src/data/gems.ts +163 -0
- package/src/data/nak.ts +805 -0
- package/src/data/tafsir.ts +165 -0
- package/src/data/vocab.ts +114 -0
- package/src/index.ts +94 -0
- package/src/server.ts +128 -0
- package/src/utils/config.ts +44 -0
- package/src/utils/logger.ts +122 -0
- package/src/utils/printer.ts +38 -0
- package/tsconfig.json +16 -0
package/docs/index.html
ADDED
|
@@ -0,0 +1,1048 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>aya | The Believer's Interface</title>
|
|
7
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
8
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
9
|
+
<link href="https://fonts.googleapis.com/css2?family=Cinzel:wght@400;700&family=Inter:wght@300;400;600&family=Fira+Code:wght@400&family=Playfair+Display:ital,wght@0,400;0,700;1,400&family=Amiri:wght@400;700&display=swap" rel="stylesheet">
|
|
10
|
+
<style>
|
|
11
|
+
:root {
|
|
12
|
+
--bg: #050505;
|
|
13
|
+
--surface: #0a0a0a;
|
|
14
|
+
--surface-hover: #111111;
|
|
15
|
+
--text: #e5e5e5;
|
|
16
|
+
--text-muted: #888888;
|
|
17
|
+
--gold: #d4af37;
|
|
18
|
+
--gold-dim: #8a702a;
|
|
19
|
+
--accent: #d4af37;
|
|
20
|
+
--border: #333333;
|
|
21
|
+
--font-serif: 'Playfair Display', serif;
|
|
22
|
+
--font-sans: 'Inter', sans-serif;
|
|
23
|
+
--font-mono: 'Fira Code', monospace;
|
|
24
|
+
--font-arabic: 'Amiri', serif;
|
|
25
|
+
--font-cinematic: 'Cinzel', serif;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
* {
|
|
29
|
+
margin: 0;
|
|
30
|
+
padding: 0;
|
|
31
|
+
box-sizing: border-box;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
body {
|
|
35
|
+
background-color: var(--bg);
|
|
36
|
+
color: var(--text);
|
|
37
|
+
font-family: var(--font-sans);
|
|
38
|
+
line-height: 1.6;
|
|
39
|
+
overflow-x: hidden;
|
|
40
|
+
-webkit-font-smoothing: antialiased;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* Cinematic Grain & Lighting */
|
|
44
|
+
.noise {
|
|
45
|
+
position: fixed;
|
|
46
|
+
top: 0; left: 0; width: 100%; height: 100%;
|
|
47
|
+
background: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)' opacity='0.05'/%3E%3C/svg%3E");
|
|
48
|
+
pointer-events: none;
|
|
49
|
+
z-index: 999;
|
|
50
|
+
opacity: 0.03;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.ambient-light {
|
|
54
|
+
position: fixed;
|
|
55
|
+
top: -50%; left: -50%; width: 200%; height: 200%;
|
|
56
|
+
background: radial-gradient(circle at 50% 50%, rgba(212, 175, 55, 0.03), transparent 60%);
|
|
57
|
+
pointer-events: none;
|
|
58
|
+
z-index: -1;
|
|
59
|
+
animation: pulseLight 10s infinite alternate;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
@keyframes pulseLight {
|
|
63
|
+
0% { transform: scale(1); opacity: 0.5; }
|
|
64
|
+
100% { transform: scale(1.1); opacity: 0.8; }
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* Typography Utilities */
|
|
68
|
+
.font-serif { font-family: var(--font-serif); }
|
|
69
|
+
.font-mono { font-family: var(--font-mono); }
|
|
70
|
+
.font-arabic { font-family: var(--font-arabic); }
|
|
71
|
+
.text-gold { color: var(--gold); }
|
|
72
|
+
.text-dim { color: var(--text-muted); }
|
|
73
|
+
.uppercase { text-transform: uppercase; letter-spacing: 0.1em; }
|
|
74
|
+
|
|
75
|
+
h1, h2, h3 { font-weight: 400; }
|
|
76
|
+
|
|
77
|
+
/* Layout */
|
|
78
|
+
.container {
|
|
79
|
+
max-width: 1400px;
|
|
80
|
+
margin: 0 auto;
|
|
81
|
+
padding: 0 2rem;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/* Hero Section */
|
|
85
|
+
header {
|
|
86
|
+
height: 100vh;
|
|
87
|
+
display: flex;
|
|
88
|
+
flex-direction: column;
|
|
89
|
+
justify-content: center;
|
|
90
|
+
align-items: center;
|
|
91
|
+
position: relative;
|
|
92
|
+
text-align: center;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.hero-title {
|
|
96
|
+
font-family: var(--font-cinematic);
|
|
97
|
+
font-size: clamp(3rem, 8vw, 6rem);
|
|
98
|
+
line-height: 1.1;
|
|
99
|
+
margin-bottom: 1rem;
|
|
100
|
+
opacity: 0;
|
|
101
|
+
animation: fadeIn 1.5s ease-out forwards 0.5s;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.hero-subtitle {
|
|
105
|
+
font-family: var(--font-serif);
|
|
106
|
+
font-style: italic;
|
|
107
|
+
font-size: clamp(1.2rem, 2vw, 1.8rem);
|
|
108
|
+
color: var(--text-muted);
|
|
109
|
+
margin-bottom: 3rem;
|
|
110
|
+
opacity: 0;
|
|
111
|
+
animation: slideUp 1s ease-out forwards 1s;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/* Install Bar */
|
|
115
|
+
.install-container {
|
|
116
|
+
margin-bottom: 3rem;
|
|
117
|
+
opacity: 0;
|
|
118
|
+
animation: slideUp 1s ease-out forwards 1.2s;
|
|
119
|
+
position: relative;
|
|
120
|
+
z-index: 10;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.install-bar {
|
|
124
|
+
display: inline-flex;
|
|
125
|
+
align-items: center;
|
|
126
|
+
gap: 1rem;
|
|
127
|
+
background: rgba(20, 20, 20, 0.6);
|
|
128
|
+
border: 1px solid var(--border);
|
|
129
|
+
padding: 1rem 1.5rem;
|
|
130
|
+
border-radius: 4px;
|
|
131
|
+
cursor: pointer;
|
|
132
|
+
transition: all 0.3s ease;
|
|
133
|
+
backdrop-filter: blur(5px);
|
|
134
|
+
font-family: var(--font-mono);
|
|
135
|
+
font-size: 1rem;
|
|
136
|
+
color: var(--text);
|
|
137
|
+
position: relative;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.install-bar:hover {
|
|
141
|
+
border-color: var(--gold);
|
|
142
|
+
background: rgba(20, 20, 20, 0.9);
|
|
143
|
+
box-shadow: 0 0 20px rgba(212, 175, 55, 0.1);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.install-bar .prompt {
|
|
147
|
+
color: var(--gold-dim);
|
|
148
|
+
user-select: none;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.install-bar .cmd-text {
|
|
152
|
+
color: var(--text);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.install-bar .copy-icon {
|
|
156
|
+
color: var(--text-muted);
|
|
157
|
+
margin-left: 1rem;
|
|
158
|
+
transition: color 0.3s ease;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.install-bar:hover .copy-icon {
|
|
162
|
+
color: var(--gold);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.copy-feedback {
|
|
166
|
+
position: absolute;
|
|
167
|
+
top: -40px;
|
|
168
|
+
left: 50%;
|
|
169
|
+
transform: translateX(-50%);
|
|
170
|
+
background: var(--gold);
|
|
171
|
+
color: var(--bg);
|
|
172
|
+
padding: 0.5rem 1rem;
|
|
173
|
+
border-radius: 4px;
|
|
174
|
+
font-size: 0.8rem;
|
|
175
|
+
font-weight: bold;
|
|
176
|
+
font-family: var(--font-mono);
|
|
177
|
+
letter-spacing: 0.05em;
|
|
178
|
+
opacity: 0;
|
|
179
|
+
pointer-events: none;
|
|
180
|
+
transition: opacity 0.3s ease, transform 0.3s ease;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.copy-feedback.show {
|
|
184
|
+
opacity: 1;
|
|
185
|
+
transform: translateX(-50%) translateY(-5px);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.terminal-window {
|
|
189
|
+
background: rgba(10, 10, 10, 0.8);
|
|
190
|
+
border: 1px solid var(--border);
|
|
191
|
+
border-radius: 8px;
|
|
192
|
+
padding: 2rem;
|
|
193
|
+
width: 100%;
|
|
194
|
+
max-width: 800px;
|
|
195
|
+
font-family: var(--font-mono);
|
|
196
|
+
font-size: 0.9rem;
|
|
197
|
+
box-shadow: 0 20px 50px rgba(0,0,0,0.5);
|
|
198
|
+
backdrop-filter: blur(10px);
|
|
199
|
+
text-align: left;
|
|
200
|
+
opacity: 0;
|
|
201
|
+
animation: slideUp 1s ease-out forwards 1.5s;
|
|
202
|
+
transform: perspective(1000px) rotateX(2deg);
|
|
203
|
+
transition: transform 0.3s ease;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.terminal-window:hover {
|
|
207
|
+
transform: perspective(1000px) rotateX(0deg);
|
|
208
|
+
border-color: var(--gold-dim);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
.prompt { color: var(--gold); }
|
|
212
|
+
.cursor { display: inline-block; width: 8px; height: 15px; background: var(--gold); animation: blink 1s infinite; }
|
|
213
|
+
|
|
214
|
+
@keyframes blink { 50% { opacity: 0; } }
|
|
215
|
+
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
|
|
216
|
+
@keyframes slideUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }
|
|
217
|
+
|
|
218
|
+
/* Manifesto */
|
|
219
|
+
.manifesto {
|
|
220
|
+
padding: 8rem 0;
|
|
221
|
+
text-align: center;
|
|
222
|
+
max-width: 800px;
|
|
223
|
+
margin: 0 auto;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.manifesto p {
|
|
227
|
+
font-family: var(--font-serif);
|
|
228
|
+
font-size: 1.5rem;
|
|
229
|
+
margin-bottom: 2rem;
|
|
230
|
+
color: var(--text-muted);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
.manifesto .highlight {
|
|
234
|
+
color: var(--text);
|
|
235
|
+
border-bottom: 1px solid var(--gold);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/* Commands Grid */
|
|
239
|
+
.grid-section {
|
|
240
|
+
padding: 4rem 0;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
.section-header {
|
|
244
|
+
text-align: center;
|
|
245
|
+
margin-bottom: 4rem;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
.section-title {
|
|
249
|
+
font-family: var(--font-cinematic);
|
|
250
|
+
font-size: 3rem;
|
|
251
|
+
color: var(--text);
|
|
252
|
+
margin-bottom: 1rem;
|
|
253
|
+
letter-spacing: 0.05em;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
.section-header p {
|
|
257
|
+
font-family: var(--font-serif);
|
|
258
|
+
font-size: 1.2rem;
|
|
259
|
+
color: var(--text-muted);
|
|
260
|
+
max-width: 600px;
|
|
261
|
+
margin: 0 auto;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/* Filter Navigation */
|
|
265
|
+
.filter-nav {
|
|
266
|
+
display: flex;
|
|
267
|
+
justify-content: center;
|
|
268
|
+
gap: 2rem;
|
|
269
|
+
margin-bottom: 3rem;
|
|
270
|
+
flex-wrap: wrap;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
.filter-btn {
|
|
274
|
+
background: transparent;
|
|
275
|
+
border: none;
|
|
276
|
+
color: var(--text-muted);
|
|
277
|
+
font-family: var(--font-cinematic);
|
|
278
|
+
font-size: 1rem;
|
|
279
|
+
cursor: pointer;
|
|
280
|
+
padding: 0.5rem 1rem;
|
|
281
|
+
position: relative;
|
|
282
|
+
transition: color 0.3s ease;
|
|
283
|
+
text-transform: uppercase;
|
|
284
|
+
letter-spacing: 0.1em;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
.filter-btn::after {
|
|
288
|
+
content: '';
|
|
289
|
+
position: absolute;
|
|
290
|
+
bottom: 0;
|
|
291
|
+
left: 50%;
|
|
292
|
+
width: 0;
|
|
293
|
+
height: 1px;
|
|
294
|
+
background: var(--gold);
|
|
295
|
+
transition: width 0.3s ease, left 0.3s ease;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
.filter-btn:hover, .filter-btn.active {
|
|
299
|
+
color: var(--gold);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
.filter-btn:hover::after, .filter-btn.active::after {
|
|
303
|
+
width: 100%;
|
|
304
|
+
left: 0;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.masonry-grid {
|
|
308
|
+
display: grid;
|
|
309
|
+
grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));
|
|
310
|
+
gap: 2rem;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
.cmd-card {
|
|
314
|
+
background: rgba(20, 20, 20, 0.4);
|
|
315
|
+
border: 1px solid var(--border);
|
|
316
|
+
padding: 2.5rem 2rem;
|
|
317
|
+
transition: all 0.5s cubic-bezier(0.19, 1, 0.22, 1);
|
|
318
|
+
position: relative;
|
|
319
|
+
overflow: hidden;
|
|
320
|
+
opacity: 0; /* JS reveal */
|
|
321
|
+
transform: translateY(20px);
|
|
322
|
+
display: flex;
|
|
323
|
+
flex-direction: column;
|
|
324
|
+
justify-content: space-between;
|
|
325
|
+
height: 100%;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
.cmd-card:hover {
|
|
329
|
+
transform: translateY(-8px) scale(1.02);
|
|
330
|
+
border-color: var(--gold-dim);
|
|
331
|
+
background: rgba(20, 20, 20, 0.95);
|
|
332
|
+
box-shadow: 0 20px 40px rgba(0,0,0,0.6);
|
|
333
|
+
z-index: 2;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
.cmd-card::before {
|
|
337
|
+
content: '';
|
|
338
|
+
position: absolute;
|
|
339
|
+
top: 0; left: 0; width: 3px; height: 0;
|
|
340
|
+
background: var(--gold);
|
|
341
|
+
transition: height 0.5s ease;
|
|
342
|
+
z-index: 3;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
.cmd-card:hover::before {
|
|
346
|
+
height: 100%;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
/* Large Watermark Arabic */
|
|
350
|
+
.watermark-arabic {
|
|
351
|
+
position: absolute;
|
|
352
|
+
top: 10px;
|
|
353
|
+
right: 20px;
|
|
354
|
+
font-family: var(--font-arabic);
|
|
355
|
+
font-size: 8rem;
|
|
356
|
+
color: rgba(255, 255, 255, 0.03);
|
|
357
|
+
pointer-events: none;
|
|
358
|
+
transition: transform 0.5s ease, color 0.5s ease;
|
|
359
|
+
line-height: 1;
|
|
360
|
+
z-index: 0;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
.cmd-card:hover .watermark-arabic {
|
|
364
|
+
transform: scale(1.1) rotate(-5deg);
|
|
365
|
+
color: rgba(212, 175, 55, 0.05);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
.cmd-content {
|
|
369
|
+
position: relative;
|
|
370
|
+
z-index: 1;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
.cmd-header {
|
|
374
|
+
display: flex;
|
|
375
|
+
justify-content: space-between;
|
|
376
|
+
align-items: center;
|
|
377
|
+
margin-bottom: 1.5rem;
|
|
378
|
+
border-bottom: 1px solid rgba(255,255,255,0.05);
|
|
379
|
+
padding-bottom: 0.8rem;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
.copy-btn-mini {
|
|
383
|
+
background: transparent;
|
|
384
|
+
border: 1px solid rgba(255,255,255,0.1);
|
|
385
|
+
color: var(--text-muted);
|
|
386
|
+
cursor: pointer;
|
|
387
|
+
padding: 0.4rem;
|
|
388
|
+
border-radius: 4px;
|
|
389
|
+
transition: all 0.3s ease;
|
|
390
|
+
display: flex;
|
|
391
|
+
align-items: center;
|
|
392
|
+
justify-content: center;
|
|
393
|
+
opacity: 0.6;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
.copy-btn-mini:hover {
|
|
397
|
+
color: var(--gold);
|
|
398
|
+
border-color: var(--gold-dim);
|
|
399
|
+
background: rgba(212, 175, 55, 0.05);
|
|
400
|
+
opacity: 1;
|
|
401
|
+
transform: scale(1.05);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
.copy-btn-mini.copied {
|
|
405
|
+
color: var(--green);
|
|
406
|
+
border-color: var(--green);
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
.cmd-name {
|
|
410
|
+
font-family: var(--font-mono);
|
|
411
|
+
color: var(--gold);
|
|
412
|
+
font-size: 0.95rem;
|
|
413
|
+
letter-spacing: -0.02em;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
.cmd-title {
|
|
417
|
+
font-family: var(--font-cinematic);
|
|
418
|
+
font-size: 1.6rem;
|
|
419
|
+
margin-bottom: 0.8rem;
|
|
420
|
+
color: var(--text);
|
|
421
|
+
letter-spacing: 0.05em;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
.cmd-desc {
|
|
425
|
+
font-size: 1rem;
|
|
426
|
+
color: var(--text-muted);
|
|
427
|
+
margin-bottom: 1.5rem;
|
|
428
|
+
line-height: 1.7;
|
|
429
|
+
font-family: var(--font-serif);
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
.cmd-meta {
|
|
433
|
+
font-family: var(--font-mono);
|
|
434
|
+
font-size: 0.7rem;
|
|
435
|
+
color: var(--gold-dim);
|
|
436
|
+
text-transform: uppercase;
|
|
437
|
+
letter-spacing: 0.15em;
|
|
438
|
+
display: flex;
|
|
439
|
+
align-items: center;
|
|
440
|
+
gap: 0.5rem;
|
|
441
|
+
opacity: 0.8;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
.cmd-meta::before {
|
|
445
|
+
content: '';
|
|
446
|
+
display: block;
|
|
447
|
+
width: 6px;
|
|
448
|
+
height: 6px;
|
|
449
|
+
background: var(--gold);
|
|
450
|
+
border-radius: 50%;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
/* Hidden state for filtering */
|
|
454
|
+
.cmd-card.hidden {
|
|
455
|
+
display: none;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
/* Footer */
|
|
459
|
+
footer {
|
|
460
|
+
padding: 4rem 0;
|
|
461
|
+
text-align: center;
|
|
462
|
+
border-top: 1px solid var(--border);
|
|
463
|
+
margin-top: 4rem;
|
|
464
|
+
color: var(--text-muted);
|
|
465
|
+
font-size: 0.9rem;
|
|
466
|
+
font-family: var(--font-serif);
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
.ihsan-link {
|
|
470
|
+
font-family: var(--font-cinematic);
|
|
471
|
+
font-weight: 400;
|
|
472
|
+
background: linear-gradient(135deg, #d4af37, #f8e5b8, #d4af37);
|
|
473
|
+
-webkit-background-clip: text;
|
|
474
|
+
-webkit-text-fill-color: transparent;
|
|
475
|
+
background-clip: text;
|
|
476
|
+
text-decoration: none;
|
|
477
|
+
transition: opacity 0.3s ease;
|
|
478
|
+
position: relative;
|
|
479
|
+
display: inline-block;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
.ihsan-link:hover {
|
|
483
|
+
opacity: 0.8;
|
|
484
|
+
transform: scale(1.05);
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
/* Scroll Reveal Utility */
|
|
488
|
+
.reveal {
|
|
489
|
+
opacity: 1 !important;
|
|
490
|
+
transform: translateY(0) !important;
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
/* Grid Lines for Architectural Feel */
|
|
494
|
+
.grid-lines {
|
|
495
|
+
position: fixed;
|
|
496
|
+
top: 0; left: 0; width: 100%; height: 100%;
|
|
497
|
+
background-image: linear-gradient(var(--border) 1px, transparent 1px),
|
|
498
|
+
linear-gradient(90deg, var(--border) 1px, transparent 1px);
|
|
499
|
+
background-size: 100px 100px;
|
|
500
|
+
opacity: 0.03;
|
|
501
|
+
z-index: -2;
|
|
502
|
+
pointer-events: none;
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
.repo-link-btn {
|
|
506
|
+
display: inline-block;
|
|
507
|
+
margin-top: 2rem;
|
|
508
|
+
padding: 0.8rem 2rem;
|
|
509
|
+
background: rgba(212, 175, 55, 0.1);
|
|
510
|
+
border: 1px solid var(--gold);
|
|
511
|
+
color: var(--gold);
|
|
512
|
+
text-decoration: none;
|
|
513
|
+
font-family: var(--font-cinematic);
|
|
514
|
+
font-size: 1.2rem;
|
|
515
|
+
transition: all 0.3s ease;
|
|
516
|
+
text-transform: uppercase;
|
|
517
|
+
letter-spacing: 0.1em;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
.repo-link-btn:hover {
|
|
521
|
+
background: var(--gold);
|
|
522
|
+
color: #000;
|
|
523
|
+
box-shadow: 0 0 20px rgba(212, 175, 55, 0.3);
|
|
524
|
+
}
|
|
525
|
+
</style>
|
|
526
|
+
</head>
|
|
527
|
+
<body>
|
|
528
|
+
|
|
529
|
+
<div class="noise"></div>
|
|
530
|
+
<div class="ambient-light"></div>
|
|
531
|
+
<div class="grid-lines"></div>
|
|
532
|
+
|
|
533
|
+
<header class="container">
|
|
534
|
+
<h1 class="hero-title">The Believer's <span class="text-gold">Interface</span></h1>
|
|
535
|
+
<div class="hero-subtitle">
|
|
536
|
+
A CLI tool for the mindful Muslim developer.<br>
|
|
537
|
+
Track your spiritual commits, manage your sins (issues),<br>
|
|
538
|
+
and push good deeds to the Akhira.
|
|
539
|
+
</div>
|
|
540
|
+
|
|
541
|
+
<div class="install-container" onclick="copyInstall()">
|
|
542
|
+
<div class="copy-feedback" id="feedback">Copied!</div>
|
|
543
|
+
<div class="install-bar">
|
|
544
|
+
<span class="prompt">$</span>
|
|
545
|
+
<span class="cmd-text">npm install -g @ihsandeen/aya</span>
|
|
546
|
+
<svg class="copy-icon" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
547
|
+
<rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect>
|
|
548
|
+
<path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path>
|
|
549
|
+
</svg>
|
|
550
|
+
</div>
|
|
551
|
+
</div>
|
|
552
|
+
|
|
553
|
+
<div class="cta-container">
|
|
554
|
+
<a href="https://github.com/ihsandeen/aya" class="cta-button">
|
|
555
|
+
View on GitHub
|
|
556
|
+
</a>
|
|
557
|
+
<a href="repo.html" class="cta-button" style="background: transparent; border: 1px solid var(--border);">
|
|
558
|
+
Open Book of Deeds
|
|
559
|
+
</a>
|
|
560
|
+
</div>
|
|
561
|
+
|
|
562
|
+
<div class="terminal-window" id="terminal">
|
|
563
|
+
<div id="terminal-content"></div>
|
|
564
|
+
</div>
|
|
565
|
+
</header>
|
|
566
|
+
|
|
567
|
+
<section class="manifesto container">
|
|
568
|
+
<p>In a world obsessed with <span class="highlight">speed</span>, we have lost the art of <span class="highlight">stillness</span>.</p>
|
|
569
|
+
<p>We build systems to manage data, but we have no system to manage our <span class="highlight">hearts</span>.</p>
|
|
570
|
+
<p><strong>aya</strong> is not just a CLI. It is a reminder. A digital companion for the spiritual journey.</p>
|
|
571
|
+
<p style="font-size: 1.2rem; margin-top: 2rem; color: var(--gold);">Use it to align your workflow with your purpose.</p>
|
|
572
|
+
</section>
|
|
573
|
+
|
|
574
|
+
<section class="grid-section container">
|
|
575
|
+
<div class="section-header">
|
|
576
|
+
<h2 class="section-title">The Command Set</h2>
|
|
577
|
+
<p class="text-dim">Comprehensive documentation for the spiritual developer.</p>
|
|
578
|
+
</div>
|
|
579
|
+
|
|
580
|
+
<div class="filter-nav">
|
|
581
|
+
<button class="filter-btn active" data-filter="all">All</button>
|
|
582
|
+
<button class="filter-btn" data-filter="Core">Core</button>
|
|
583
|
+
<button class="filter-btn" data-filter="Worship">Worship</button>
|
|
584
|
+
<button class="filter-btn" data-filter="Knowledge">Knowledge</button>
|
|
585
|
+
<button class="filter-btn" data-filter="Character">Character</button>
|
|
586
|
+
<button class="filter-btn" data-filter="Reflection">Reflection</button>
|
|
587
|
+
</div>
|
|
588
|
+
|
|
589
|
+
<div class="masonry-grid" id="command-grid">
|
|
590
|
+
<!-- Commands will be injected here by JS -->
|
|
591
|
+
</div>
|
|
592
|
+
</section>
|
|
593
|
+
|
|
594
|
+
<footer>
|
|
595
|
+
<p>Built with ❤️ by <a href="https://ihsandeen.com/" target="_blank" class="ihsan-link">IHSAN</a></p>
|
|
596
|
+
<p style="margin-top: 0.5rem; opacity: 0.8;">Open source for the Ummah.</p>
|
|
597
|
+
<p class="font-mono" style="margin-top: 0.5rem; opacity: 0.5;">v1.0.0 • 1447 AH</p>
|
|
598
|
+
</footer>
|
|
599
|
+
|
|
600
|
+
<script>
|
|
601
|
+
// Data: Comprehensive List of Commands with NAK-Style Descriptions
|
|
602
|
+
const commands = [
|
|
603
|
+
{
|
|
604
|
+
"name": "aya init",
|
|
605
|
+
"arabic": "نِيَّة",
|
|
606
|
+
"title": "Niyyah",
|
|
607
|
+
"desc": "In the depth of the Arabic language, the word 'Niyyah' comes from 'Nawa', which is the date stone. Think about a date stone. It's hard, it's buried deep in the ground, and nobody sees it. But that entire massive palm tree, the shade it gives, the fruit it bears—it all comes from that one hidden core. If the stone is rotten, there is no tree. If the intention is corrupt, the action is hollow. Before you type `git init` or start a project, check your Niyyah. Is this for fame? For money alone? Or to build something beneficial? The Prophet ﷺ said 'Actions are but by intentions'. Your codebase is the tree; your intention is the seed.",
|
|
608
|
+
"meta": "Intention"
|
|
609
|
+
},
|
|
610
|
+
{
|
|
611
|
+
"name": "aya status",
|
|
612
|
+
"arabic": "مُحَاسَبَة",
|
|
613
|
+
"title": "Muhasaba",
|
|
614
|
+
"desc": "The word 'Hasiba' means to calculate or reckon. On the Day of Judgment, we will have a 'Hisab'—a full audit. But the intelligent one is he who audits himself (Muhasaba) before he is audited. It's looking in the mirror and asking: 'What is my real state right now?' Not what I tell people, but what is the reality of my file system? When you run `git status`, you see what's staged, what's untracked, what's modified. Do this for your heart. What sins are modified but not committed? What good deeds are staged? What part of your character is untracked and wild?",
|
|
615
|
+
"meta": "Self-Accountability"
|
|
616
|
+
},
|
|
617
|
+
{
|
|
618
|
+
"name": "aya add",
|
|
619
|
+
"arabic": "إِعْدَاد",
|
|
620
|
+
"title": "I'dad",
|
|
621
|
+
"desc": "The Quran speaks of 'Wa a'iddu lahum' - Prepare for them whatever force you can. Preparation is half the victory. When you stage files, you are deliberately choosing what becomes part of your history. You aren't just throwing things in; you are selecting the best to present. Don't just drift through life. Stage your day. Stage your prayers. Be intentional about what you are about to commit to your book of deeds.",
|
|
622
|
+
"meta": "Preparation"
|
|
623
|
+
},
|
|
624
|
+
{
|
|
625
|
+
"name": "aya commit",
|
|
626
|
+
"arabic": "أَمَانَة",
|
|
627
|
+
"title": "Amanah",
|
|
628
|
+
"desc": "In the pre-Revelation era, if a man gave his word ('Ahd), he would die defending it. The Deen elevated this. Your word is your bond. When you make a 'commit', you are saving a checkpoint in history. You are saying 'I stand by this code'. It is a testimony. Every day is a series of commits. You commit to a meeting, a prayer, a relationship. Are your commit messages (your intentions) clear? Or are they 'wip', 'fix', 'misc'? Be clear with the Divine and yourself.",
|
|
629
|
+
"meta": "Trust"
|
|
630
|
+
},
|
|
631
|
+
{
|
|
632
|
+
"name": "aya push",
|
|
633
|
+
"arabic": "تَبْلِيغ",
|
|
634
|
+
"title": "Tabligh",
|
|
635
|
+
"desc": "The Prophet ﷺ was commanded: 'Balligh ma onzila ilayk' - Convey what has been revealed to you. Pushing isn't just moving data; it's delivering a message. It's sharing benefit. But with the power to push comes the responsibility of what you are pushing. Is it bug-free? Is it truthful? You have knowledge, wealth, or a smile. Push it to the remote (the world). Don't keep the khair (goodness) in your local environment. Share it. But ensure it builds, not breaks.",
|
|
636
|
+
"meta": "Conveying"
|
|
637
|
+
},
|
|
638
|
+
{
|
|
639
|
+
"name": "aya pull",
|
|
640
|
+
"arabic": "طَلَبُ الْعِلْم",
|
|
641
|
+
"title": "Talab al-'Ilm",
|
|
642
|
+
"desc": "We are not the source of knowledge; we are consumers of it. We 'pull' from the Divine source, from scholars, from history. Musa (AS) traveled specifically to 'pull' knowledge from Khidr. It requires humility. You have to admit your local version is behind. Always be pulling. If you stop syncing with the Quran and Sunnah, your branch diverges. You get conflicts. Stay up to date with the Master branch.",
|
|
643
|
+
"meta": "Seeking Knowledge"
|
|
644
|
+
},
|
|
645
|
+
{
|
|
646
|
+
"name": "aya blame",
|
|
647
|
+
"arabic": "لَوْم",
|
|
648
|
+
"title": "Lawm",
|
|
649
|
+
"desc": "The Quran swears by 'An-Nafs Al-Lawwama'—the self-reproaching soul. This is the soul that blames itself when it slips. In code, `git blame` tells you who wrote a line. In life, don't use 'blame' to point fingers at others. Use it to find where *you* introduced the bug. When calamity strikes, the believer asks 'What did I do?' The hypocrite asks 'Who did this to me?' Be the debugger of your own soul.",
|
|
650
|
+
"meta": "Self-Reproach"
|
|
651
|
+
},
|
|
652
|
+
{
|
|
653
|
+
"name": "aya diff",
|
|
654
|
+
"arabic": "فُرْقَان",
|
|
655
|
+
"title": "Furqan",
|
|
656
|
+
"desc": "The Quran is called Al-Furqan because it differentiates clearly between Truth and Falsehood, right and wrong. A 'diff' shows you exactly what changed. It removes the ambiguity. You need a Furqan in your life to see the difference between a good idea and a temptation. Look at your life a year ago vs today. Run a `diff`. Have you improved? Or have you regressed? Without a diff, you are blind to your own drift.",
|
|
657
|
+
"meta": "The Criterion"
|
|
658
|
+
},
|
|
659
|
+
{
|
|
660
|
+
"name": "aya history",
|
|
661
|
+
"arabic": "تَارِيخ",
|
|
662
|
+
"title": "Tarikh",
|
|
663
|
+
"desc": "History (Tarikh) isn't just dates. It's 'Ibrah'—lessons. The Quran is full of stories not for entertainment, but so we don't repeat the bugs of previous nations. `git log` shows you the path you took. If you don't know your history, you will re-introduce the same errors. Review your past commits. The days you were angry, the days you were patient. Learn from your own log. Don't rewrite history (force push); learn from it.",
|
|
664
|
+
"meta": "History"
|
|
665
|
+
},
|
|
666
|
+
{
|
|
667
|
+
"name": "aya adab",
|
|
668
|
+
"arabic": "أَدَب",
|
|
669
|
+
"title": "Adab",
|
|
670
|
+
"desc": "Adab is often translated as manners, but it means 'putting things in their proper place'. Adab with parents, Adab with teachers, Adab with code. A scholar said 'Make your knowledge salt, and your Adab the flour'. You need more manners than raw data. How do you comment on PRs? Harshly? Or with Adab? How do you treat junior devs? Adab is the API of human interaction.",
|
|
671
|
+
"meta": "Etiquette"
|
|
672
|
+
},
|
|
673
|
+
{
|
|
674
|
+
"name": "aya adhan",
|
|
675
|
+
"arabic": "أَذَان",
|
|
676
|
+
"title": "Adhan",
|
|
677
|
+
"desc": "The Adhan is the interruption of the Dunya for the sake of the Akhirah. It resets your priority queue. When the notification comes, do you swipe it away? Or do you answer? It's a call to success (Hayya 'ala al-Falah). Your prayer times are the breakpoints in your daily code. Stop execution. Debug your heart. Resume.",
|
|
678
|
+
"meta": "The Call"
|
|
679
|
+
},
|
|
680
|
+
{
|
|
681
|
+
"name": "aya anatomy",
|
|
682
|
+
"arabic": "خِلْقَة",
|
|
683
|
+
"title": "Khilqah",
|
|
684
|
+
"desc": "We have been created in the best stature (Ahsani Taqwim). But then we reduce ourselves. Understanding your spiritual anatomy—the Nafs (ego), the Qalb (heart), the Ruh (spirit)—is essential. You are not just hardware (body); you are software (soul). Debug your components. Is your Heart hard? Is your Ego inflated? Is your Spirit starved?",
|
|
685
|
+
"meta": "Creation"
|
|
686
|
+
},
|
|
687
|
+
{
|
|
688
|
+
"name": "aya dua",
|
|
689
|
+
"arabic": "دُعَاء",
|
|
690
|
+
"title": "Du'a",
|
|
691
|
+
"desc": "Du'a is the weapon of the believer. It is the direct line to the Admin. No pull request needed; it's an instant merge if the conditions are met. Allah is 'Al-Mujib' (The Responder). He doesn't leave you on 'read'. Code not working? Life falling apart? raise an Exception to the Most High. Make Du'a. It changes Qadr (destiny).",
|
|
692
|
+
"meta": "Supplication"
|
|
693
|
+
},
|
|
694
|
+
{
|
|
695
|
+
"name": "aya fast",
|
|
696
|
+
"arabic": "صِيَام",
|
|
697
|
+
"title": "Siyam",
|
|
698
|
+
"desc": "Siyam isn't just starving. It comes from a root meaning 'to hold back'. Horses that stood still were called 'Sa'im'. Fasting is a firewall. It blocks incoming desires so your system can cleanup and reboot. Fast from food, yes. But also fast from toxic words, angry comments, and haram glances. Enable the firewall.",
|
|
699
|
+
"meta": "Fasting"
|
|
700
|
+
},
|
|
701
|
+
{
|
|
702
|
+
"name": "aya friday",
|
|
703
|
+
"arabic": "جُمُعَة",
|
|
704
|
+
"title": "Jumu'ah",
|
|
705
|
+
"desc": "Yaum al-Jumu'ah is the weekly sync. The community gathers not just to pray, but to connect. It's the day Adam was created, and the day the Hour will be established. It's the 'master' branch update for the Ummah. Don't miss the Jumu'ah sync. It's mandatory. Wear your best, listen to the Khutbah (the weekly patch notes), and realign.",
|
|
706
|
+
"meta": "The Gathering"
|
|
707
|
+
},
|
|
708
|
+
{
|
|
709
|
+
"name": "aya hero",
|
|
710
|
+
"arabic": "قُدْوَة",
|
|
711
|
+
"title": "Qudwah",
|
|
712
|
+
"desc": "Everyone follows someone. Who is your hero? The Quran gives us the ultimate Qudwah: the Prophet ﷺ. In a world of influencers and tech moguls, who do you emulate? 'Laqad kana lakum fi Rasulillahi uswatun hasanah' - You have in the Messenger the best example. Check your dependencies. Who are you inheriting properties from? If your parent class is corrupt, your instance will be too.",
|
|
713
|
+
"meta": "Role Model"
|
|
714
|
+
},
|
|
715
|
+
{
|
|
716
|
+
"name": "aya hijri",
|
|
717
|
+
"arabic": "هِجْرَة",
|
|
718
|
+
"title": "Hijrah",
|
|
719
|
+
"desc": "The Islamic calendar doesn't start with the birth of the Prophet, but with the Hijrah—the sacrifice. It marks the shift from oppression to statehood. It reminds us that time is defined by action and movement, not just existence. Are you still living in the Jahiliyyah (ignorance) of your past? Make a Hijrah. Move away from bad habits to good ones.",
|
|
720
|
+
"meta": "Migration"
|
|
721
|
+
},
|
|
722
|
+
{
|
|
723
|
+
"name": "aya invest",
|
|
724
|
+
"arabic": "تِجَارَة",
|
|
725
|
+
"title": "Tijarah",
|
|
726
|
+
"desc": "Allah asks: 'Shall I tell you of a trade (Tijarah) that will save you from a painful punishment?' The believer is an investor. You trade your time and wealth in this Dunya for a return in Jannah. It's a long-term hold. Diamond hands for the Akhirah. Where is your capital going? Crypto? Stocks? Or Sadaqah Jariyah (ceaseless charity)? One crashes; the other compounds infinitely.",
|
|
727
|
+
"meta": "Trade"
|
|
728
|
+
},
|
|
729
|
+
{
|
|
730
|
+
"name": "aya journal",
|
|
731
|
+
"arabic": "مُحَاسَبَة",
|
|
732
|
+
"title": "Muhasaba",
|
|
733
|
+
"desc": "Umar (RA) said: 'Account for yourselves before you are accounted for.' Writing down your day—your wins, your sins—is a Sunnah of the introspective. It turns vague feelings into concrete data you can analyze. Start a spiritual log. Document your bugs. Track your feature requests (Duas).",
|
|
734
|
+
"meta": "Accounting"
|
|
735
|
+
},
|
|
736
|
+
{
|
|
737
|
+
"name": "aya journey",
|
|
738
|
+
"arabic": "سَفَر",
|
|
739
|
+
"title": "Safar",
|
|
740
|
+
"desc": "Life is a Safar. We are travelers. The Prophet ﷺ said: 'Be in this world as if you are a stranger or a traveler.' A traveler travels light. He doesn't build a mansion in the transit lounge. Check your baggage. Are you carrying too much Dunya? Lighten the load. The destination is close.",
|
|
741
|
+
"meta": "Travel"
|
|
742
|
+
},
|
|
743
|
+
{
|
|
744
|
+
"name": "aya lens",
|
|
745
|
+
"arabic": "بَصِيرَة",
|
|
746
|
+
"title": "Basirah",
|
|
747
|
+
"desc": "Basar is eyesight; Basirah is insight. It's the ability to see the reality of things, not just their appearance. It's the debugging tool for life. When others see a calamity, the person of Basirah sees a test and a purification. Clean your lens. Sin fogs the heart. Istighfar (seeking forgiveness) polishes it so you can see clearly again.",
|
|
748
|
+
"meta": "Insight"
|
|
749
|
+
},
|
|
750
|
+
{
|
|
751
|
+
"name": "aya memorize",
|
|
752
|
+
"arabic": "حِفْظ",
|
|
753
|
+
"title": "Hifz",
|
|
754
|
+
"desc": "Hifz means to guard/protect. When you memorize Quran, you are guarding it in your chest. But it also guards *you*. The Prophet ﷺ said the one without Quran in their heart is like a ruined house. What is cached in your memory? Lyrics? Memes? Or the Words of the Creator? Fill your RAM with Ayaat.",
|
|
755
|
+
"meta": "Preservation"
|
|
756
|
+
},
|
|
757
|
+
{
|
|
758
|
+
"name": "aya mirror",
|
|
759
|
+
"arabic": "مِرْآة",
|
|
760
|
+
"title": "Mir'ah",
|
|
761
|
+
"desc": "The Believer is the mirror of the Believer. A mirror doesn't lie. It doesn't scream. It just shows you the smudge on your face so you can wipe it. It reflects reality faithfully. Be a mirror to your brother. Correct him gently, privately. And accept correction when the mirror is held up to you.",
|
|
762
|
+
"meta": "Mirror"
|
|
763
|
+
},
|
|
764
|
+
{
|
|
765
|
+
"name": "aya names",
|
|
766
|
+
"arabic": "أَسْمَاءُ اللَّهِ",
|
|
767
|
+
"title": "Asma Allah",
|
|
768
|
+
"desc": "To know Him is to love Him. Allah has Beautiful Names (Al-Asma Al-Husna). He is Al-Wadud (The Loving), Al-Ghafur (The Forgiving). Don't just worship a generic 'God'. Worship the One with these specific attributes. Call upon Him by the Name that matches your need. Broke? Ya Razzaq. Sinful? Ya Ghaffar. Lonely? Ya Wadud.",
|
|
769
|
+
"meta": "Names of Allah"
|
|
770
|
+
},
|
|
771
|
+
{
|
|
772
|
+
"name": "aya nature",
|
|
773
|
+
"arabic": "فِطْرَة",
|
|
774
|
+
"title": "Fitrah",
|
|
775
|
+
"desc": "Every child is born on Fitrah—the factory setting. It is an inclination towards Truth and God. Society, parents, and sins corrupt this configuration. Islam is not a new plugin; it's a factory reset. Return to your source code. You were hardwired to know Allah. Ignore the bloatware of society.",
|
|
776
|
+
"meta": "Innate Nature"
|
|
777
|
+
},
|
|
778
|
+
{
|
|
779
|
+
"name": "aya nazm",
|
|
780
|
+
"arabic": "نَظْم",
|
|
781
|
+
"title": "Nazm",
|
|
782
|
+
"desc": "The Quran is not random. It is a Nazm—a perfectly arranged necklace. Every Ayah is connected to the next; every Surah pairs with its neighbor. It is a structural miracle. To see the Nazm is to see the Architect's plan. Look for the connections in your life. Nothing is random. Allah is the best of Planners.",
|
|
783
|
+
"meta": "Coherence"
|
|
784
|
+
},
|
|
785
|
+
{
|
|
786
|
+
"name": "aya parable",
|
|
787
|
+
"arabic": "مَثَل",
|
|
788
|
+
"title": "Mathal",
|
|
789
|
+
"desc": "Allah uses Mathal (parables) to make complex spiritual truths tangible. The hypocrite is like a rainfall... The deed is like a grain of corn... These aren't just stories; they are compression algorithms for wisdom. Reflect on the parables. Are you the rock that water runs off? Or the fertile soil that absorbs it?",
|
|
790
|
+
"meta": "Parable"
|
|
791
|
+
},
|
|
792
|
+
{
|
|
793
|
+
"name": "aya prayers",
|
|
794
|
+
"arabic": "صَلَاة",
|
|
795
|
+
"title": "Salah",
|
|
796
|
+
"desc": "Salah comes from Silah (connection). It is your link to the Divine. Without it, you are offline. The 5 daily prayers are the heartbeat of the believer. Miss them, and the spiritual heart stops. Is your Salah a burden or a relief? 'Arihna biha ya Bilal' - Give us rest with it, O Bilal. Debug your connection.",
|
|
797
|
+
"meta": "Connection"
|
|
798
|
+
},
|
|
799
|
+
{
|
|
800
|
+
"name": "aya qibla",
|
|
801
|
+
"arabic": "قِبْلَة",
|
|
802
|
+
"title": "Qiblah",
|
|
803
|
+
"desc": "The Qiblah unifies the Ummah. Millions of people, one focal point. It represents unity and purpose. If you don't have a Qiblah in life, you turn in every direction and go nowhere. Where are you facing? Is your heart facing the Dunya or the Akhirah? Align your compass.",
|
|
804
|
+
"meta": "Direction"
|
|
805
|
+
},
|
|
806
|
+
{
|
|
807
|
+
"name": "aya sabr",
|
|
808
|
+
"arabic": "صَبْر",
|
|
809
|
+
"title": "Sabr",
|
|
810
|
+
"desc": "Sabr is not just 'patience' (sitting and waiting). It means to tie down, to remain firm, to persevere. It's active, not passive. It's holding on to the hot coal. It's coding through the error until it's fixed. Sabr has three parts: Sabr on obedience, Sabr against sin, and Sabr on calamity. Which one are you struggling with?",
|
|
811
|
+
"meta": "Perseverance"
|
|
812
|
+
},
|
|
813
|
+
{
|
|
814
|
+
"name": "aya scene",
|
|
815
|
+
"arabic": "مَشْهَد",
|
|
816
|
+
"title": "Mashhad",
|
|
817
|
+
"desc": "The Quran paints scenes of the Day of Judgment so vivid you feel you are there. This is 'Visualized Faith'. You need to visualize the consequences to stay motivated. Visualize your standing before Allah. It puts your current stress in perspective.",
|
|
818
|
+
"meta": "Scene"
|
|
819
|
+
},
|
|
820
|
+
{
|
|
821
|
+
"name": "aya seek",
|
|
822
|
+
"arabic": "اِسْتِعَاذَة",
|
|
823
|
+
"title": "Isti'adhah",
|
|
824
|
+
"desc": "Before you recite, you say A'udhu billah. You seek refuge. You admit you are weak and need protection. The Shaytan is a hacker trying to inject malicious code into your heart. Activate the antivirus. Don't fight Shaytan alone. Run to Allah. You can't outsmart a creature thousands of years old, but Allah can.",
|
|
825
|
+
"meta": "Seeking Refuge"
|
|
826
|
+
},
|
|
827
|
+
{
|
|
828
|
+
"name": "aya shukr",
|
|
829
|
+
"arabic": "شُكْر",
|
|
830
|
+
"title": "Shukr",
|
|
831
|
+
"desc": "Shukr is not just saying 'Thanks'. It is using the blessing for the purpose it was created. If you have eyes but look at haram, you aren't grateful. 'La in shakartum la azidannakum' - If you are grateful, I will surely increase you. Gratitude is the abundance mindset. Ingratitude is the scarcity mindset. Count your blessings, not your bugs.",
|
|
832
|
+
"meta": "Gratitude"
|
|
833
|
+
},
|
|
834
|
+
{
|
|
835
|
+
"name": "aya sleep",
|
|
836
|
+
"arabic": "نَوْم",
|
|
837
|
+
"title": "Nawm",
|
|
838
|
+
"desc": "Sleep is the minor death. Allah takes your soul every night. Will He return it? Sleep is a sign of our vulnerability. We power down. We are not self-sustaining. Recite your Adhkar before sleep. It might be your last logout. Clean the session.",
|
|
839
|
+
"meta": "Sleep"
|
|
840
|
+
},
|
|
841
|
+
{
|
|
842
|
+
"name": "aya sound",
|
|
843
|
+
"arabic": "تَرْتِيل",
|
|
844
|
+
"title": "Tartil",
|
|
845
|
+
"desc": "The Quran is meant to be heard. 'Warattil il-Qurana tartila'. Recite it slowly, beautifully. The sound of the Quran has a healing frequency for the heart. Listen to the Quran. Let it overwrite the noise of the world.",
|
|
846
|
+
"meta": "Measured Recitation"
|
|
847
|
+
},
|
|
848
|
+
{
|
|
849
|
+
"name": "aya sunnah",
|
|
850
|
+
"arabic": "سُنَّة",
|
|
851
|
+
"title": "Sunnah",
|
|
852
|
+
"desc": "The Sunnah is the documentation of the Perfect Implementation. The Prophet ﷺ showed us how to live the theory of Quran. Without Sunnah, we are guessing. Revive a Sunnah. Siwak? Smile? Right foot first? Small deeds, massive love.",
|
|
853
|
+
"meta": "The Way"
|
|
854
|
+
},
|
|
855
|
+
{
|
|
856
|
+
"name": "aya tafsir",
|
|
857
|
+
"arabic": "تَفْسِير",
|
|
858
|
+
"title": "Tafsir",
|
|
859
|
+
"desc": "Tafsir comes from 'Fassara' - to explain or unveil. The Quran has layers. You can read the surface, or you can dive deep. Tafsir is the deep dive. It's analyzing the code to understand the logic. Don't just read the translation. Read the Tafsir. Understand the context (Asbab al-Nuzul).",
|
|
860
|
+
"meta": "Exegesis"
|
|
861
|
+
},
|
|
862
|
+
{
|
|
863
|
+
"name": "aya tasbih",
|
|
864
|
+
"arabic": "تَسْبِيح",
|
|
865
|
+
"title": "Tasbih",
|
|
866
|
+
"desc": "Tasbih (SubhanAllah) means to declare Allah perfect and far removed from any imperfection. It comes from a root meaning 'to float' or 'swim'. When you do Tasbih, you keep your heart floating above the drowning ocean of the Dunya. Keep your tongue moist with Tasbih. It's the lightest on the tongue, heaviest on the scales.",
|
|
867
|
+
"meta": "Glorification"
|
|
868
|
+
},
|
|
869
|
+
{
|
|
870
|
+
"name": "aya wudu",
|
|
871
|
+
"arabic": "وُضُوء",
|
|
872
|
+
"title": "Wudu",
|
|
873
|
+
"desc": "Wudu comes from 'Wada'ah' (brightness/beauty). It washes away sins. As the water drips, the minor sins drip away. It is the prerequisite for connection. Don't just wash your limbs; wash your heart. Prepare to meet the King.",
|
|
874
|
+
"meta": "Ablution"
|
|
875
|
+
},
|
|
876
|
+
{
|
|
877
|
+
"name": "aya zakat",
|
|
878
|
+
"arabic": "زَكَاة",
|
|
879
|
+
"title": "Zakah",
|
|
880
|
+
"desc": "Zakah means purification and growth. It seems like you are giving money away (-), but spiritually you are growing (+). It purifies your wealth from greed and the rights of the poor. Give. It doesn't decrease wealth. It blesses the remainder.",
|
|
881
|
+
"meta": "Purification"
|
|
882
|
+
}
|
|
883
|
+
];
|
|
884
|
+
|
|
885
|
+
// Terminal Typewriter Logic
|
|
886
|
+
const terminalContent = document.getElementById('terminal-content');
|
|
887
|
+
const terminalSequence = [
|
|
888
|
+
{ text: "$ aya init", class: "prompt" },
|
|
889
|
+
{ text: "Initializing Niyyah (Intention)...", class: "text-dim", delay: 500 },
|
|
890
|
+
{ text: "Checking Root... [Clean]", class: "text-gold", delay: 800 },
|
|
891
|
+
{ text: "Loading Modules: [Sabr, Shukr, Ikhlas]", class: "text-dim", delay: 1200 },
|
|
892
|
+
{ text: "System Ready.", class: "text-gold", delay: 1500 },
|
|
893
|
+
{ text: "Bismillah.", class: "text-gold", style: "font-family: var(--font-arabic); font-size: 1.5rem; margin-top: 10px;", delay: 2000 }
|
|
894
|
+
];
|
|
895
|
+
|
|
896
|
+
async function typeWriter(text, element, speed = 30) {
|
|
897
|
+
return new Promise(resolve => {
|
|
898
|
+
let i = 0;
|
|
899
|
+
function type() {
|
|
900
|
+
if (i < text.length) {
|
|
901
|
+
element.textContent += text.charAt(i);
|
|
902
|
+
i++;
|
|
903
|
+
setTimeout(type, speed);
|
|
904
|
+
} else {
|
|
905
|
+
resolve();
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
type();
|
|
909
|
+
});
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
async function runTerminal() {
|
|
913
|
+
for (const line of terminalSequence) {
|
|
914
|
+
const div = document.createElement('div');
|
|
915
|
+
if (line.class) div.className = line.class;
|
|
916
|
+
if (line.style) div.style = line.style;
|
|
917
|
+
terminalContent.appendChild(div);
|
|
918
|
+
|
|
919
|
+
if (line.text.startsWith("$")) {
|
|
920
|
+
await typeWriter(line.text, div);
|
|
921
|
+
} else {
|
|
922
|
+
div.innerHTML = line.text; // Instant render for output lines
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
if (line.delay) await new Promise(r => setTimeout(r, line.delay));
|
|
926
|
+
}
|
|
927
|
+
// Add cursor at the end
|
|
928
|
+
const cursor = document.createElement('span');
|
|
929
|
+
cursor.className = 'cursor';
|
|
930
|
+
terminalContent.appendChild(cursor);
|
|
931
|
+
}
|
|
932
|
+
|
|
933
|
+
// Render Grid
|
|
934
|
+
const grid = document.getElementById('command-grid');
|
|
935
|
+
let allCommands = commands;
|
|
936
|
+
|
|
937
|
+
// Intersection Observer for Scroll Animations
|
|
938
|
+
const observer = new IntersectionObserver((entries) => {
|
|
939
|
+
entries.forEach(entry => {
|
|
940
|
+
if (entry.isIntersecting) {
|
|
941
|
+
entry.target.classList.add('reveal');
|
|
942
|
+
}
|
|
943
|
+
});
|
|
944
|
+
}, { threshold: 0.1 });
|
|
945
|
+
|
|
946
|
+
function renderCommands(filter = 'all') {
|
|
947
|
+
grid.innerHTML = '';
|
|
948
|
+
|
|
949
|
+
const filtered = filter === 'all'
|
|
950
|
+
? allCommands
|
|
951
|
+
: allCommands.filter(cmd => cmd.meta.includes(filter));
|
|
952
|
+
|
|
953
|
+
filtered.forEach((cmd, index) => {
|
|
954
|
+
const card = document.createElement('div');
|
|
955
|
+
card.className = 'cmd-card';
|
|
956
|
+
// Reset animation
|
|
957
|
+
card.style.opacity = '0';
|
|
958
|
+
card.style.transform = 'translateY(20px)';
|
|
959
|
+
|
|
960
|
+
// Stagger based on index in filtered view
|
|
961
|
+
card.style.transitionDelay = `${index * 50}ms`;
|
|
962
|
+
|
|
963
|
+
card.innerHTML = `
|
|
964
|
+
<span class="watermark-arabic">${cmd.arabic}</span>
|
|
965
|
+
<div class="cmd-content">
|
|
966
|
+
<div class="cmd-header">
|
|
967
|
+
<span class="cmd-name">$ ${cmd.name}</span>
|
|
968
|
+
<button class="copy-btn-mini" onclick="copyCommand(this, '${cmd.name}')" title="Copy command">
|
|
969
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
970
|
+
<rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect>
|
|
971
|
+
<path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path>
|
|
972
|
+
</svg>
|
|
973
|
+
</button>
|
|
974
|
+
</div>
|
|
975
|
+
<h3 class="cmd-title">${cmd.title}</h3>
|
|
976
|
+
<p class="cmd-desc">${cmd.desc}</p>
|
|
977
|
+
<span class="cmd-meta">${cmd.meta}</span>
|
|
978
|
+
</div>
|
|
979
|
+
`;
|
|
980
|
+
grid.appendChild(card);
|
|
981
|
+
|
|
982
|
+
// Observe for scroll reveal
|
|
983
|
+
observer.observe(card);
|
|
984
|
+
});
|
|
985
|
+
|
|
986
|
+
// Trigger reflow for animation
|
|
987
|
+
requestAnimationFrame(() => {
|
|
988
|
+
document.querySelectorAll('.cmd-card').forEach(card => card.classList.add('reveal'));
|
|
989
|
+
});
|
|
990
|
+
}
|
|
991
|
+
|
|
992
|
+
// Initial Render
|
|
993
|
+
renderCommands();
|
|
994
|
+
|
|
995
|
+
// Filter Logic
|
|
996
|
+
document.querySelectorAll('.filter-btn').forEach(btn => {
|
|
997
|
+
btn.addEventListener('click', (e) => {
|
|
998
|
+
// UI update
|
|
999
|
+
document.querySelectorAll('.filter-btn').forEach(b => b.classList.remove('active'));
|
|
1000
|
+
e.target.classList.add('active');
|
|
1001
|
+
|
|
1002
|
+
// Logic
|
|
1003
|
+
const filter = e.target.getAttribute('data-filter');
|
|
1004
|
+
renderCommands(filter);
|
|
1005
|
+
});
|
|
1006
|
+
});
|
|
1007
|
+
|
|
1008
|
+
// Start
|
|
1009
|
+
window.onload = () => {
|
|
1010
|
+
runTerminal();
|
|
1011
|
+
};
|
|
1012
|
+
|
|
1013
|
+
// Copy Install Command
|
|
1014
|
+
function copyInstall() {
|
|
1015
|
+
const cmd = "npm install -g @ihsandeen/aya";
|
|
1016
|
+
navigator.clipboard.writeText(cmd).then(() => {
|
|
1017
|
+
const feedback = document.getElementById('feedback');
|
|
1018
|
+
feedback.classList.add('show');
|
|
1019
|
+
setTimeout(() => {
|
|
1020
|
+
feedback.classList.remove('show');
|
|
1021
|
+
}, 2000);
|
|
1022
|
+
});
|
|
1023
|
+
}
|
|
1024
|
+
// Copy Individual Command
|
|
1025
|
+
function copyCommand(btn, cmdName) {
|
|
1026
|
+
// Prevent card hover effect when clicking button
|
|
1027
|
+
event.stopPropagation();
|
|
1028
|
+
|
|
1029
|
+
navigator.clipboard.writeText(cmdName).then(() => {
|
|
1030
|
+
const originalContent = btn.innerHTML;
|
|
1031
|
+
|
|
1032
|
+
// Switch to checkmark
|
|
1033
|
+
btn.innerHTML = `
|
|
1034
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
1035
|
+
<polyline points="20 6 9 17 4 12"></polyline>
|
|
1036
|
+
</svg>
|
|
1037
|
+
`;
|
|
1038
|
+
btn.classList.add('copied');
|
|
1039
|
+
|
|
1040
|
+
setTimeout(() => {
|
|
1041
|
+
btn.innerHTML = originalContent;
|
|
1042
|
+
btn.classList.remove('copied');
|
|
1043
|
+
}, 2000);
|
|
1044
|
+
});
|
|
1045
|
+
}
|
|
1046
|
+
</script>
|
|
1047
|
+
</body>
|
|
1048
|
+
</html>
|