linkitylink 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.
- package/CLAUDE.md +238 -0
- package/Dockerfile +20 -0
- package/Dockerfile.local +24 -0
- package/LICENSE +674 -0
- package/MANUAL-TESTING.md +399 -0
- package/README.md +119 -0
- package/TEMPLATE-FEDERATION-GO-LIVE.md +269 -0
- package/USER-TESTING-GUIDE.md +420 -0
- package/docker-compose.standalone.yml +14 -0
- package/docker-compose.yml +42 -0
- package/lib/app-handoff.js +315 -0
- package/lib/relevant-bdos-middleware.js +381 -0
- package/package.json +33 -0
- package/public/create.html +1468 -0
- package/public/index.html +117 -0
- package/public/moderate.html +465 -0
- package/public/my-tapestries.html +351 -0
- package/public/relevant-bdos.js +267 -0
- package/public/styles.css +1004 -0
- package/server.js +2914 -0
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
# Linkitylink Manual Test Script
|
|
2
|
+
|
|
3
|
+
This guide provides step-by-step instructions for manually testing all Linkitylink features, including the new social media icons functionality.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- Access to `https://dev.linkityl.ink/` (or your deployment URL)
|
|
8
|
+
- Browser for visual testing
|
|
9
|
+
- Terminal/command line for API testing
|
|
10
|
+
- `curl` and `jq` installed (optional, for API tests)
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Test 1: Landing Page
|
|
15
|
+
|
|
16
|
+
**Objective**: Verify the landing page loads correctly
|
|
17
|
+
|
|
18
|
+
1. Open browser to: `https://dev.linkityl.ink/`
|
|
19
|
+
2. **Expected Results**:
|
|
20
|
+
- Landing page displays
|
|
21
|
+
- Tagline "You've got places to go" is visible
|
|
22
|
+
- Page loads without errors
|
|
23
|
+
3. **Status**: ✅ / ❌
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Test 2: Create Linkitylink with Social Links
|
|
28
|
+
|
|
29
|
+
**Objective**: Create a new linkitylink with both regular and social links
|
|
30
|
+
|
|
31
|
+
### Via API (curl):
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
curl -X POST 'https://dev.linkityl.ink/create' \
|
|
35
|
+
-H 'Content-Type: application/json' \
|
|
36
|
+
-d '{
|
|
37
|
+
"title": "My Test Links",
|
|
38
|
+
"links": [
|
|
39
|
+
{"title": "Website", "url": "https://example.com"},
|
|
40
|
+
{"title": "Blog", "url": "https://blog.example.com"},
|
|
41
|
+
{"title": "Instagram", "url": "https://instagram.com/myhandle", "isSocial": true},
|
|
42
|
+
{"title": "Youtube", "url": "https://youtube.com/@mychannel", "isSocial": true},
|
|
43
|
+
{"title": "Twitter", "url": "https://twitter.com/myhandle", "isSocial": true}
|
|
44
|
+
]
|
|
45
|
+
}'
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Expected Response:
|
|
49
|
+
|
|
50
|
+
```json
|
|
51
|
+
{
|
|
52
|
+
"success": true,
|
|
53
|
+
"uuid": "abc-123-def...",
|
|
54
|
+
"pubKey": "02abcdef12345678...",
|
|
55
|
+
"emojicode": "💚🌍🔑💎📣🕖🎹🏔👓",
|
|
56
|
+
"userUUID": "user-uuid..."
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Action Items:
|
|
61
|
+
|
|
62
|
+
1. Run the curl command
|
|
63
|
+
2. **Save the emojicode** (e.g., `💚🌍🔑💎📣🕖🎹🏔👓`)
|
|
64
|
+
3. **Save the first 16 characters of pubKey** (e.g., `02abcdef12345678`)
|
|
65
|
+
4. **Status**: ✅ / ❌
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Test 3: View via Emojicode URL
|
|
70
|
+
|
|
71
|
+
**Objective**: Verify the `/view/:emojicode` route displays the tapestry correctly
|
|
72
|
+
|
|
73
|
+
1. Copy the emojicode from Test 2
|
|
74
|
+
2. Visit in browser: `https://dev.linkityl.ink/view/[YOUR_EMOJICODE]`
|
|
75
|
+
- Example: `https://dev.linkityl.ink/view/💚🌍🔑💎📣🕖🎹🏔👓`
|
|
76
|
+
|
|
77
|
+
### Expected Results:
|
|
78
|
+
|
|
79
|
+
- ✅ Page title shows "My Test Links"
|
|
80
|
+
- ✅ 2 regular link cards displayed with gradient colors
|
|
81
|
+
- ✅ "SoMa:" label visible at bottom in purple text
|
|
82
|
+
- ✅ 3 social media icons displayed below SoMa label
|
|
83
|
+
- ✅ Each icon has circular purple background with glow effect
|
|
84
|
+
- ✅ Icons are clickable links
|
|
85
|
+
|
|
86
|
+
### Visual Checklist:
|
|
87
|
+
|
|
88
|
+
- [ ] Instagram icon (camera logo)
|
|
89
|
+
- [ ] YouTube icon (play button logo)
|
|
90
|
+
- [ ] Twitter icon (bird logo)
|
|
91
|
+
- [ ] Purple glow effect on icons
|
|
92
|
+
- [ ] Icons centered horizontally
|
|
93
|
+
|
|
94
|
+
**Status**: ✅ / ❌
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Test 4: View via Alphanumeric URL
|
|
99
|
+
|
|
100
|
+
**Objective**: Verify the `/t/:alphanumeric` route displays the same tapestry
|
|
101
|
+
|
|
102
|
+
1. Copy the first 16 characters of pubKey from Test 2
|
|
103
|
+
2. Visit in browser: `https://dev.linkityl.ink/t/[YOUR_PUBKEY_PREFIX]`
|
|
104
|
+
- Example: `https://dev.linkityl.ink/t/02abcdef12345678`
|
|
105
|
+
|
|
106
|
+
### Expected Results:
|
|
107
|
+
|
|
108
|
+
- ✅ **Same exact tapestry** as Test 3
|
|
109
|
+
- ✅ Same title: "My Test Links"
|
|
110
|
+
- ✅ Same regular links
|
|
111
|
+
- ✅ Same social icons with SoMa label
|
|
112
|
+
|
|
113
|
+
**Status**: ✅ / ❌
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Test 5: Verify Social Icons Functionality
|
|
118
|
+
|
|
119
|
+
**Objective**: Ensure social icons are interactive and correctly styled
|
|
120
|
+
|
|
121
|
+
On the tapestry page from Test 3 or 4:
|
|
122
|
+
|
|
123
|
+
### Visual Inspection:
|
|
124
|
+
|
|
125
|
+
1. **Scroll to bottom** of the page
|
|
126
|
+
2. **Locate "SoMa:" label**:
|
|
127
|
+
- Should be centered
|
|
128
|
+
- Purple color (#a78bfa)
|
|
129
|
+
- Glowing effect
|
|
130
|
+
|
|
131
|
+
3. **Check each social icon**:
|
|
132
|
+
- Instagram: Camera with circle outline
|
|
133
|
+
- YouTube: Play button triangle
|
|
134
|
+
- Twitter: Bird silhouette
|
|
135
|
+
- All icons: Purple fill, circular background
|
|
136
|
+
|
|
137
|
+
### Interaction Testing:
|
|
138
|
+
|
|
139
|
+
4. **Hover over each icon**:
|
|
140
|
+
- Should see enhanced purple glow effect
|
|
141
|
+
- Cursor changes to pointer
|
|
142
|
+
|
|
143
|
+
5. **Click each icon**:
|
|
144
|
+
- Opens correct social media URL
|
|
145
|
+
- Opens in new tab/window
|
|
146
|
+
- Instagram → `https://instagram.com/myhandle`
|
|
147
|
+
- YouTube → `https://youtube.com/@mychannel`
|
|
148
|
+
- Twitter → `https://twitter.com/myhandle`
|
|
149
|
+
|
|
150
|
+
**Status**: ✅ / ❌
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Test 6: Templates Endpoint (Optional)
|
|
155
|
+
|
|
156
|
+
**Objective**: Verify approved templates can be fetched
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
curl -s 'https://dev.linkityl.ink/templates' | jq '{success, count: .templates | length}'
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Expected Response:
|
|
163
|
+
|
|
164
|
+
```json
|
|
165
|
+
{
|
|
166
|
+
"success": false,
|
|
167
|
+
"count": 0
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
OR (if templates exist):
|
|
172
|
+
|
|
173
|
+
```json
|
|
174
|
+
{
|
|
175
|
+
"success": true,
|
|
176
|
+
"count": 3
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
**Status**: ✅ / ❌
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## Test 7: Different Link Counts (Optional)
|
|
185
|
+
|
|
186
|
+
**Objective**: Verify correct SVG templates render based on link count
|
|
187
|
+
|
|
188
|
+
### Compact Template (1-6 links):
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
curl -X POST 'https://dev.linkityl.ink/create' \
|
|
192
|
+
-H 'Content-Type: application/json' \
|
|
193
|
+
-d '{
|
|
194
|
+
"title": "Compact Test",
|
|
195
|
+
"links": [
|
|
196
|
+
{"title": "Link 1", "url": "https://example.com"},
|
|
197
|
+
{"title": "Instagram", "url": "https://instagram.com/test", "isSocial": true}
|
|
198
|
+
]
|
|
199
|
+
}'
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
**Expected**: Large vertical stacked cards
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
### Grid Template (7-13 links):
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
curl -X POST 'https://dev.linkityl.ink/create' \
|
|
210
|
+
-H 'Content-Type: application/json' \
|
|
211
|
+
-d '{
|
|
212
|
+
"title": "Grid Test",
|
|
213
|
+
"links": [
|
|
214
|
+
{"title": "Link 1", "url": "https://example.com"},
|
|
215
|
+
{"title": "Link 2", "url": "https://example.com"},
|
|
216
|
+
{"title": "Link 3", "url": "https://example.com"},
|
|
217
|
+
{"title": "Link 4", "url": "https://example.com"},
|
|
218
|
+
{"title": "Link 5", "url": "https://example.com"},
|
|
219
|
+
{"title": "Link 6", "url": "https://example.com"},
|
|
220
|
+
{"title": "Link 7", "url": "https://example.com"},
|
|
221
|
+
{"title": "Instagram", "url": "https://instagram.com/test", "isSocial": true}
|
|
222
|
+
]
|
|
223
|
+
}'
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
**Expected**: 2-column grid layout
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
### Dense Template (14-20 links):
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
curl -X POST 'https://dev.linkityl.ink/create' \
|
|
234
|
+
-H 'Content-Type: application/json' \
|
|
235
|
+
-d '{
|
|
236
|
+
"title": "Dense Test",
|
|
237
|
+
"links": [
|
|
238
|
+
{"title": "L1", "url": "https://example.com"},
|
|
239
|
+
{"title": "L2", "url": "https://example.com"},
|
|
240
|
+
{"title": "L3", "url": "https://example.com"},
|
|
241
|
+
{"title": "L4", "url": "https://example.com"},
|
|
242
|
+
{"title": "L5", "url": "https://example.com"},
|
|
243
|
+
{"title": "L6", "url": "https://example.com"},
|
|
244
|
+
{"title": "L7", "url": "https://example.com"},
|
|
245
|
+
{"title": "L8", "url": "https://example.com"},
|
|
246
|
+
{"title": "L9", "url": "https://example.com"},
|
|
247
|
+
{"title": "L10", "url": "https://example.com"},
|
|
248
|
+
{"title": "L11", "url": "https://example.com"},
|
|
249
|
+
{"title": "L12", "url": "https://example.com"},
|
|
250
|
+
{"title": "L13", "url": "https://example.com"},
|
|
251
|
+
{"title": "L14", "url": "https://example.com"},
|
|
252
|
+
{"title": "Instagram", "url": "https://instagram.com/test", "isSocial": true}
|
|
253
|
+
]
|
|
254
|
+
}'
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
**Expected**: 3-column grid layout
|
|
258
|
+
|
|
259
|
+
**Status**: ✅ / ❌
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## Test 8: Mobile Responsiveness (Optional)
|
|
264
|
+
|
|
265
|
+
**Objective**: Verify tapestries display correctly on mobile devices
|
|
266
|
+
|
|
267
|
+
1. Open any tapestry URL on mobile device or browser dev tools (mobile view)
|
|
268
|
+
2. **Expected**:
|
|
269
|
+
- SVG scales to fit screen
|
|
270
|
+
- All links are tappable
|
|
271
|
+
- Social icons visible and tappable
|
|
272
|
+
- No horizontal scrolling required
|
|
273
|
+
|
|
274
|
+
**Status**: ✅ / ❌
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## Quick Visual Checklist
|
|
279
|
+
|
|
280
|
+
When viewing any tapestry with social links:
|
|
281
|
+
|
|
282
|
+
- [ ] Page title matches your specified title
|
|
283
|
+
- [ ] Regular links displayed as gradient-colored cards
|
|
284
|
+
- [ ] Cards have rounded corners and glow effects
|
|
285
|
+
- [ ] "SoMa:" label at bottom (purple, centered, glowing)
|
|
286
|
+
- [ ] Social icons arranged horizontally below label
|
|
287
|
+
- [ ] Icons have circular purple backgrounds
|
|
288
|
+
- [ ] Purple glow/shadow effect on icons
|
|
289
|
+
- [ ] All links and icons are clickable
|
|
290
|
+
- [ ] No console errors in browser dev tools
|
|
291
|
+
- [ ] SVG is visible and not broken
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
## Supported Social Platforms
|
|
296
|
+
|
|
297
|
+
The following social platforms have custom icons:
|
|
298
|
+
|
|
299
|
+
- ✅ Instagram
|
|
300
|
+
- ✅ TikTok
|
|
301
|
+
- ✅ YouTube
|
|
302
|
+
- ✅ Twitter
|
|
303
|
+
- ✅ Facebook
|
|
304
|
+
- ✅ LinkedIn
|
|
305
|
+
- ✅ GitHub
|
|
306
|
+
|
|
307
|
+
Any link with `"isSocial": true` will render as an icon in the SoMa section.
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
## Common Issues & Troubleshooting
|
|
312
|
+
|
|
313
|
+
### Issue: Social icons not appearing
|
|
314
|
+
|
|
315
|
+
**Possible Causes**:
|
|
316
|
+
- Links don't have `"isSocial": true` flag
|
|
317
|
+
- Old code deployed (check git commit)
|
|
318
|
+
- Server not restarted after code update
|
|
319
|
+
|
|
320
|
+
**Solution**:
|
|
321
|
+
```bash
|
|
322
|
+
cd /path/to/linkitylink
|
|
323
|
+
git pull
|
|
324
|
+
pm2 restart linkitylink
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
### Issue: Icons show as generic Instagram icon
|
|
330
|
+
|
|
331
|
+
**Possible Cause**: Platform name doesn't match expected format
|
|
332
|
+
|
|
333
|
+
**Expected Platform Names** (case-insensitive):
|
|
334
|
+
- "Instagram", "Tiktok", "Youtube", "Twitter", "Facebook", "Linkedin", "Github"
|
|
335
|
+
|
|
336
|
+
**Note**: The `title` field is used to determine which icon to display
|
|
337
|
+
|
|
338
|
+
---
|
|
339
|
+
|
|
340
|
+
### Issue: Emojicode URL shows landing page
|
|
341
|
+
|
|
342
|
+
**Possible Cause**: Using old query param format `/?emojicode=...`
|
|
343
|
+
|
|
344
|
+
**Solution**: Use new route format `/view/:emojicode`
|
|
345
|
+
- ❌ Old: `https://dev.linkityl.ink/?emojicode=💚🌍🔑💎`
|
|
346
|
+
- ✅ New: `https://dev.linkityl.ink/view/💚🌍🔑💎`
|
|
347
|
+
|
|
348
|
+
---
|
|
349
|
+
|
|
350
|
+
## Test Results Summary
|
|
351
|
+
|
|
352
|
+
Fill in your test results:
|
|
353
|
+
|
|
354
|
+
| Test | Feature | Status | Notes |
|
|
355
|
+
|------|---------|--------|-------|
|
|
356
|
+
| 1 | Landing Page | ✅/❌ | |
|
|
357
|
+
| 2 | Create Linkitylink | ✅/❌ | |
|
|
358
|
+
| 3 | Emojicode URL | ✅/❌ | |
|
|
359
|
+
| 4 | Alphanumeric URL | ✅/❌ | |
|
|
360
|
+
| 5 | Social Icons | ✅/❌ | |
|
|
361
|
+
| 6 | Templates | ✅/❌ | |
|
|
362
|
+
| 7 | Different Layouts | ✅/❌ | |
|
|
363
|
+
| 8 | Mobile | ✅/❌ | |
|
|
364
|
+
|
|
365
|
+
---
|
|
366
|
+
|
|
367
|
+
## Production Deployment Checklist
|
|
368
|
+
|
|
369
|
+
Before deploying to production:
|
|
370
|
+
|
|
371
|
+
- [ ] All tests pass on dev environment
|
|
372
|
+
- [ ] Social icons render correctly
|
|
373
|
+
- [ ] Both URL formats work (emojicode and alphanumeric)
|
|
374
|
+
- [ ] Landing page accessible
|
|
375
|
+
- [ ] No console errors
|
|
376
|
+
- [ ] Environment variables configured:
|
|
377
|
+
- `FOUNT_BASE_URL` (production Fount URL)
|
|
378
|
+
- `BDO_BASE_URL` (production BDO URL)
|
|
379
|
+
- `ADDIE_BASE_URL` (production Addie URL)
|
|
380
|
+
- [ ] SSL certificate valid
|
|
381
|
+
- [ ] Nginx configuration correct
|
|
382
|
+
- [ ] pm2 process running
|
|
383
|
+
- [ ] Git commit up to date
|
|
384
|
+
|
|
385
|
+
---
|
|
386
|
+
|
|
387
|
+
## Questions or Issues?
|
|
388
|
+
|
|
389
|
+
If you encounter any problems during testing:
|
|
390
|
+
|
|
391
|
+
1. Check server logs: `pm2 logs linkitylink`
|
|
392
|
+
2. Verify git commit: `git log --oneline -5`
|
|
393
|
+
3. Check environment: `pm2 show linkitylink`
|
|
394
|
+
4. Review this documentation for common issues
|
|
395
|
+
|
|
396
|
+
**Latest Features** (December 2025):
|
|
397
|
+
- ✅ Social media icons with SoMa label
|
|
398
|
+
- ✅ Clean `/view/:emojicode` URLs
|
|
399
|
+
- ✅ Consistent dev environment defaults
|
package/README.md
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# Linkitylink
|
|
2
|
+
|
|
3
|
+
A privacy-first link page service. Create beautiful, shareable link pages without tracking or surveillance.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Linkitylink creates beautiful SVG-based link pages from your links. Share your page via human-memorable emojicodes or browser-friendly alphanumeric URLs.
|
|
8
|
+
|
|
9
|
+
## Features
|
|
10
|
+
|
|
11
|
+
- **Privacy-First** - No tracking, no analytics, no surveillance
|
|
12
|
+
- **Beautiful SVG Templates** - Three adaptive layouts based on link count
|
|
13
|
+
- **Easy Sharing** - Share via emojicode or alphanumeric URL
|
|
14
|
+
- **No Account Required** - Create pages instantly via API
|
|
15
|
+
- **Optional Payment Integration** - Stripe support for premium features
|
|
16
|
+
|
|
17
|
+
## Quick Start
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install
|
|
21
|
+
npm start
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Server runs on `http://localhost:3010`
|
|
25
|
+
|
|
26
|
+
## Usage
|
|
27
|
+
|
|
28
|
+
### Create a Link Page
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
curl -X POST http://localhost:3010/create \
|
|
32
|
+
-H "Content-Type: application/json" \
|
|
33
|
+
-d '{
|
|
34
|
+
"title": "My Links",
|
|
35
|
+
"links": [
|
|
36
|
+
{"title": "GitHub", "url": "https://github.com/user"},
|
|
37
|
+
{"title": "Twitter", "url": "https://twitter.com/user"}
|
|
38
|
+
]
|
|
39
|
+
}'
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Response:
|
|
43
|
+
```json
|
|
44
|
+
{
|
|
45
|
+
"success": true,
|
|
46
|
+
"emojicode": "🔗💎🌟🎨🐉📌🌍🔑",
|
|
47
|
+
"pubKey": "02a1b2c3...",
|
|
48
|
+
"uuid": "abc123..."
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### View a Link Page
|
|
53
|
+
|
|
54
|
+
Via emojicode (persistent):
|
|
55
|
+
```
|
|
56
|
+
http://localhost:3010?emojicode=🔗💎🌟🎨🐉📌🌍🔑
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Via alphanumeric URL (browser-friendly):
|
|
60
|
+
```
|
|
61
|
+
http://localhost:3010/t/02a1b2c3d4e5f6a7
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## SVG Templates
|
|
65
|
+
|
|
66
|
+
Link pages automatically adapt based on link count:
|
|
67
|
+
|
|
68
|
+
- **Compact Layout** (1-6 links) - Large 600x90px cards, vertical stack
|
|
69
|
+
- **Grid Layout** (7-13 links) - 2-column grid, 290x80px cards
|
|
70
|
+
- **Dense Layout** (14-20 links) - 3-column grid, 190x65px cards
|
|
71
|
+
|
|
72
|
+
All templates feature:
|
|
73
|
+
- Six gradient color schemes
|
|
74
|
+
- Dark mode with glowing effects
|
|
75
|
+
- Animated particles
|
|
76
|
+
- Mobile-responsive design
|
|
77
|
+
|
|
78
|
+
## Environment Variables
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
PORT=3010 # Server port
|
|
82
|
+
BDO_BASE_URL=http://localhost:3003 # BDO storage service
|
|
83
|
+
FOUNT_BASE_URL=http://localhost:3001 # User data service (optional)
|
|
84
|
+
ADDIE_BASE_URL=http://localhost:3009 # Payment service (optional)
|
|
85
|
+
NODE_ENV=development # Environment mode
|
|
86
|
+
ENABLE_APP_PURCHASE=false # Show "Buy in App" button (default: false)
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## API Endpoints
|
|
90
|
+
|
|
91
|
+
| Method | Endpoint | Description |
|
|
92
|
+
|--------|----------|-------------|
|
|
93
|
+
| GET | / | Landing page or view page by emojicode |
|
|
94
|
+
| GET | /create | Web interface for creating pages |
|
|
95
|
+
| POST | /create | API for creating link pages |
|
|
96
|
+
| GET | /t/:id | View page by alphanumeric identifier |
|
|
97
|
+
| GET | /my-tapestries | List user's created pages |
|
|
98
|
+
|
|
99
|
+
## Docker
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
# Build and run
|
|
103
|
+
docker-compose -f docker-compose.standalone.yml up -d --build
|
|
104
|
+
|
|
105
|
+
# Verify running
|
|
106
|
+
curl http://localhost:3010
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Wiki Integration
|
|
110
|
+
|
|
111
|
+
Linkitylink is designed to work as an optional add-on to federated wiki deployments, providing link aggregation pages without requiring the full Planet Nine ecosystem.
|
|
112
|
+
|
|
113
|
+
## History
|
|
114
|
+
|
|
115
|
+
Originally developed as "Glyphenge" within The Advancement project. Extracted as a standalone service in November 2025 for easier deployment and wiki integration. Built with Love by Claude.
|
|
116
|
+
|
|
117
|
+
## License
|
|
118
|
+
|
|
119
|
+
MIT
|