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.
@@ -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