sandymount 0.0.1 → 0.0.2
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/CNAME +1 -0
- package/MAGIC.md +9 -0
- package/README.md +235 -2
- package/bin/sandymount.js +108 -0
- package/getting-started.html +439 -0
- package/index.html +680 -0
- package/manifesto.html +203 -0
- package/og-image.png +0 -0
- package/og-image.svg +86 -0
- package/package.json +31 -5
- package/styles.css +907 -0
- package/tools.html +234 -0
package/CNAME
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
sandy-mount.com
|
package/MAGIC.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
## MAGI and MAGIC: Simplifying Media Creation with AI
|
|
2
|
+
|
|
3
|
+
### MAGI (Media AGI):
|
|
4
|
+
MAGI stands for Media AGI—artificial general intelligence designed specifically for media. It’s AGI with a focus on creating, curating, and optimizing media content. From videos to podcasts, articles to ads, MAGI can handle it all. It’s not just about automation; it’s about making media smarter, faster, and more adaptable.
|
|
5
|
+
|
|
6
|
+
### MAGIC (Media AGI Compiler):
|
|
7
|
+
MAGIC is the Media AGI Compiler. Think of it as the tool that takes your input—ideas, rough drafts, or concepts—and compiles them into polished media outputs. It’s like hitting the “make it awesome” button. MAGIC helps creators bridge the gap between imagination and reality, turning media production into a smooth, collaborative process.
|
|
8
|
+
|
|
9
|
+
MAGI and MAGIC together could change how we think about creating media, putting powerful tools in the hands of anyone with a story to tell.
|
package/README.md
CHANGED
|
@@ -1,2 +1,235 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# 🏖️ Sandymount
|
|
4
|
+
|
|
5
|
+
## The SAND Stack
|
|
6
|
+
|
|
7
|
+
**S**olid · **A**ctivityPub · **N**ostr · **D**ID
|
|
8
|
+
|
|
9
|
+
*Personal sovereignty in one command*
|
|
10
|
+
|
|
11
|
+
[](https://www.npmjs.com/package/sandymount)
|
|
12
|
+
[](https://opensource.org/licenses/AGPL-3.0)
|
|
13
|
+
|
|
14
|
+
[Quick Start](#quick-start) · [Features](#features) · [Why SAND?](#why-sand) · [Roadmap](#roadmap)
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
## Quick Start
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm install -g sandymount
|
|
24
|
+
sandymount start
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**That's it.** Your personal SAND server is running.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## What is SAND?
|
|
32
|
+
|
|
33
|
+
Four protocols, one stack, total sovereignty:
|
|
34
|
+
|
|
35
|
+
| | Protocol | What You Get |
|
|
36
|
+
|:---:|----------|--------------|
|
|
37
|
+
| **S** | [Solid](https://solidproject.org/) | Personal data pod — files, profiles, apps |
|
|
38
|
+
| **A** | [ActivityPub](https://activitypub.rocks/) | Federated social — Mastodon, Threads, WordPress |
|
|
39
|
+
| **N** | [Nostr](https://nostr.com/) | Censorship-resistant social — relays, zaps, keys |
|
|
40
|
+
| **D** | [DID](https://www.w3.org/TR/did-core/) | Decentralized identity — one key, every protocol |
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Features
|
|
45
|
+
|
|
46
|
+
### ✅ Available Now
|
|
47
|
+
|
|
48
|
+
| Feature | Description |
|
|
49
|
+
|---------|-------------|
|
|
50
|
+
| **Solid Pod** | Full LDP server with WebID, Web Access Control, Solid-OIDC |
|
|
51
|
+
| **Nostr Relay** | NIP-01 compliant, rate-limited, memory-efficient |
|
|
52
|
+
| **Git Server** | Clone and push repos via HTTP with WebID auth |
|
|
53
|
+
| **DID Resolution** | did:nostr → WebID, NIP-98 HTTP authentication |
|
|
54
|
+
| **Mobile Ready** | Runs on Android/Termux, ~100MB RAM |
|
|
55
|
+
|
|
56
|
+
### 🔜 Coming Soon
|
|
57
|
+
|
|
58
|
+
| Feature | Description |
|
|
59
|
+
|---------|-------------|
|
|
60
|
+
| **ActivityPub** | Mastodon-compatible federation via FedBox |
|
|
61
|
+
| **Unified Identity** | One keypair for Solid + AP + Nostr |
|
|
62
|
+
| **P2P Connectivity** | No VPS required |
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Installation
|
|
67
|
+
|
|
68
|
+
### Any Platform
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
npm install -g sandymount
|
|
72
|
+
sandymount start
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Android (Termux)
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
pkg install nodejs-lts
|
|
79
|
+
npm install -g sandymount pm2
|
|
80
|
+
pm2 start sandymount -- start
|
|
81
|
+
pm2 save
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### With Options
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
sandymount start --port 3000 --nostr --git
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Endpoints
|
|
93
|
+
|
|
94
|
+
| Endpoint | Protocol | Description |
|
|
95
|
+
|----------|----------|-------------|
|
|
96
|
+
| `/` | Solid | Pod root, WebID profile |
|
|
97
|
+
| `/relay` | Nostr | WebSocket relay (wss://) |
|
|
98
|
+
| `/relay/info` | Nostr | NIP-11 relay metadata |
|
|
99
|
+
| `/.git` | Git | Clone/push repositories |
|
|
100
|
+
| `/.well-known/webfinger` | Discovery | WebFinger lookup |
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Why SAND?
|
|
105
|
+
|
|
106
|
+
### The Problem
|
|
107
|
+
|
|
108
|
+
| Your Life | Who Controls It |
|
|
109
|
+
|-----------|-----------------|
|
|
110
|
+
| Identity | Google, Apple, Facebook |
|
|
111
|
+
| Files | Dropbox, iCloud, Drive |
|
|
112
|
+
| Social | Twitter, Instagram, TikTok |
|
|
113
|
+
| Followers | The platform |
|
|
114
|
+
|
|
115
|
+
### The Solution
|
|
116
|
+
|
|
117
|
+
| SAND Protocol | What It Fixes |
|
|
118
|
+
|---------------|---------------|
|
|
119
|
+
| **DID** | You own your identity |
|
|
120
|
+
| **Solid** | You own your data |
|
|
121
|
+
| **Nostr** | You own your voice |
|
|
122
|
+
| **ActivityPub** | You own your social graph |
|
|
123
|
+
|
|
124
|
+
### The Vision
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
Your phone = Your server
|
|
128
|
+
Your key = Your identity
|
|
129
|
+
Your pod = Your data
|
|
130
|
+
Your relay = Your reach
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**Zero to sovereignty in 60 seconds.**
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Architecture
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
┌─────────────────────────────────────────────────────┐
|
|
141
|
+
│ SAND Stack │
|
|
142
|
+
├────────────┬────────────┬────────────┬──────────────┤
|
|
143
|
+
│ Solid │ ActivityPub│ Nostr │ DID │
|
|
144
|
+
│ (LDP) │ (AP) │ (NIP-01) │ (did:nostr) │
|
|
145
|
+
├────────────┴────────────┴────────────┴──────────────┤
|
|
146
|
+
│ Fastify Server │
|
|
147
|
+
├─────────────────────────────────────────────────────┤
|
|
148
|
+
│ Filesystem │
|
|
149
|
+
└─────────────────────────────────────────────────────┘
|
|
150
|
+
|
|
151
|
+
One port · One process · One identity
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Roadmap
|
|
157
|
+
|
|
158
|
+
### v0.0.x — Foundation ✅
|
|
159
|
+
- [x] Solid pod (LDP, WAC, WebID)
|
|
160
|
+
- [x] Nostr relay (NIP-01, NIP-11)
|
|
161
|
+
- [x] Git HTTP backend
|
|
162
|
+
- [x] DID resolution (did:nostr)
|
|
163
|
+
- [x] Android/Termux support
|
|
164
|
+
|
|
165
|
+
### v0.1.x — Federation
|
|
166
|
+
- [ ] ActivityPub integration
|
|
167
|
+
- [ ] Mastodon compatibility
|
|
168
|
+
- [ ] WebID = AP Actor = Nostr pubkey
|
|
169
|
+
|
|
170
|
+
### v0.2.x — Mobile
|
|
171
|
+
- [ ] One-tap install app
|
|
172
|
+
- [ ] Built-in relay service
|
|
173
|
+
- [ ] P2P mode (no VPS)
|
|
174
|
+
|
|
175
|
+
### v1.0 — Production
|
|
176
|
+
- [ ] Clustering
|
|
177
|
+
- [ ] Admin dashboard
|
|
178
|
+
- [ ] Plugin system
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Configuration
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
# CLI
|
|
186
|
+
sandymount start --port 3000 --nostr --git
|
|
187
|
+
|
|
188
|
+
# Environment
|
|
189
|
+
export SAND_PORT=3000
|
|
190
|
+
export SAND_NOSTR=true
|
|
191
|
+
export SAND_GIT=true
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Resources
|
|
197
|
+
|
|
198
|
+
| Resource | Link |
|
|
199
|
+
|----------|------|
|
|
200
|
+
| Website | [sandy-mount.com](https://sandy-mount.com) |
|
|
201
|
+
| GitHub | [sandy-mount/sandymount](https://github.com/sandy-mount/sandymount) |
|
|
202
|
+
| npm | [npmjs.com/package/sandymount](https://www.npmjs.com/package/sandymount) |
|
|
203
|
+
| Solid | [solidproject.org](https://solidproject.org) |
|
|
204
|
+
| Nostr | [nostr.com](https://nostr.com) |
|
|
205
|
+
| ActivityPub | [activitypub.rocks](https://activitypub.rocks) |
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Contributing
|
|
210
|
+
|
|
211
|
+
We welcome contributions in:
|
|
212
|
+
- ActivityPub integration
|
|
213
|
+
- Mobile app development
|
|
214
|
+
- P2P connectivity
|
|
215
|
+
- Documentation
|
|
216
|
+
|
|
217
|
+
See [Issue #3](https://github.com/sandy-mount/sandymount/issues/3) for the SAND Stack roadmap.
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## License
|
|
222
|
+
|
|
223
|
+
**AGPL-3.0** — Free as in freedom.
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
<div align="center">
|
|
228
|
+
|
|
229
|
+
**Sandymount** — *Because your data should be yours.*
|
|
230
|
+
|
|
231
|
+
🏖️
|
|
232
|
+
|
|
233
|
+
[sandy-mount.com](https://sandy-mount.com)
|
|
234
|
+
|
|
235
|
+
</div>
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Sandymount CLI
|
|
5
|
+
*
|
|
6
|
+
* SAND Stack: Solid + ActivityPub + Nostr + DID
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* sandymount start [options] Start the SAND server
|
|
10
|
+
* sandymount help Show help
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { spawn } from 'child_process';
|
|
14
|
+
import { fileURLToPath } from 'url';
|
|
15
|
+
import { dirname, join } from 'path';
|
|
16
|
+
|
|
17
|
+
const args = process.argv.slice(2);
|
|
18
|
+
const command = args[0];
|
|
19
|
+
|
|
20
|
+
const VERSION = '0.0.2';
|
|
21
|
+
|
|
22
|
+
function showHelp() {
|
|
23
|
+
console.log(`
|
|
24
|
+
🏖️ Sandymount v${VERSION}
|
|
25
|
+
|
|
26
|
+
SAND Stack: Solid + ActivityPub + Nostr + DID
|
|
27
|
+
|
|
28
|
+
Usage:
|
|
29
|
+
sandymount start [options] Start the server
|
|
30
|
+
sandymount help Show this help
|
|
31
|
+
sandymount version Show version
|
|
32
|
+
|
|
33
|
+
Start Options:
|
|
34
|
+
--port <n> Port to listen on (default: 3000)
|
|
35
|
+
--root <path> Data directory (default: ./data)
|
|
36
|
+
--nostr Enable Nostr relay
|
|
37
|
+
--git Enable Git HTTP backend
|
|
38
|
+
--idp Enable identity provider
|
|
39
|
+
--quiet Suppress logs
|
|
40
|
+
|
|
41
|
+
Examples:
|
|
42
|
+
sandymount start
|
|
43
|
+
sandymount start --port 8080 --nostr --git
|
|
44
|
+
sand start --nostr --git
|
|
45
|
+
|
|
46
|
+
Website: https://sandy-mount.com
|
|
47
|
+
`);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function showVersion() {
|
|
51
|
+
console.log(`sandymount v${VERSION}`);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function startServer() {
|
|
55
|
+
// Pass through all arguments after 'start' to jss
|
|
56
|
+
const jssArgs = ['start', ...args.slice(1)];
|
|
57
|
+
|
|
58
|
+
// Add defaults if not specified
|
|
59
|
+
if (!args.includes('--nostr') && !args.includes('--no-nostr')) {
|
|
60
|
+
jssArgs.push('--nostr');
|
|
61
|
+
}
|
|
62
|
+
if (!args.includes('--git') && !args.includes('--no-git')) {
|
|
63
|
+
jssArgs.push('--git');
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
console.log('');
|
|
67
|
+
console.log('🏖️ Starting Sandymount...');
|
|
68
|
+
console.log('');
|
|
69
|
+
|
|
70
|
+
const jss = spawn('jss', jssArgs, { stdio: 'inherit' });
|
|
71
|
+
|
|
72
|
+
jss.on('error', (err) => {
|
|
73
|
+
if (err.code === 'ENOENT') {
|
|
74
|
+
console.error('Error: JSS not found.');
|
|
75
|
+
console.error('');
|
|
76
|
+
console.error('JSS should be installed as a dependency. Try:');
|
|
77
|
+
console.error(' npm install -g sandymount');
|
|
78
|
+
console.error('');
|
|
79
|
+
} else {
|
|
80
|
+
console.error('Error:', err.message);
|
|
81
|
+
}
|
|
82
|
+
process.exit(1);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
jss.on('exit', (code) => process.exit(code || 0));
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Main
|
|
89
|
+
switch (command) {
|
|
90
|
+
case 'start':
|
|
91
|
+
startServer();
|
|
92
|
+
break;
|
|
93
|
+
case 'version':
|
|
94
|
+
case '--version':
|
|
95
|
+
case '-v':
|
|
96
|
+
showVersion();
|
|
97
|
+
break;
|
|
98
|
+
case 'help':
|
|
99
|
+
case '--help':
|
|
100
|
+
case '-h':
|
|
101
|
+
case undefined:
|
|
102
|
+
showHelp();
|
|
103
|
+
break;
|
|
104
|
+
default:
|
|
105
|
+
console.error(`Unknown command: ${command}`);
|
|
106
|
+
console.error('Run "sandymount help" for usage.');
|
|
107
|
+
process.exit(1);
|
|
108
|
+
}
|