sandymount 0.0.1 → 0.0.3

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 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
- # sandymount
2
- sandymount
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
+ [![npm version](https://img.shields.io/npm/v/sandymount.svg)](https://www.npmjs.com/package/sandymount)
12
+ [![License: AGPL](https://img.shields.io/badge/License-AGPL-blue.svg)](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,115 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Sandymount CLI
5
+ *
6
+ * SAND Stack: Solid + ActivityPub + Nostr + DID
7
+ *
8
+ * Usage:
9
+ * sandymount [options] Start the SAND server (default)
10
+ * sandymount help Show help
11
+ */
12
+
13
+ import { spawn } from 'child_process';
14
+
15
+ const args = process.argv.slice(2);
16
+ const command = args[0];
17
+
18
+ const VERSION = '0.0.3';
19
+ const DEFAULT_PORT = 5420;
20
+
21
+ function showHelp() {
22
+ console.log(`
23
+ 🏖️ Sandymount v${VERSION}
24
+
25
+ SAND Stack: Solid + ActivityPub + Nostr + DID
26
+
27
+ Usage:
28
+ sandymount [options] Start the server (default)
29
+ sandymount help Show this help
30
+ sandymount version Show version
31
+
32
+ Options:
33
+ --port <n> Port to listen on (default: ${DEFAULT_PORT})
34
+ --root <path> Data directory (default: ./data)
35
+ --no-nostr Disable Nostr relay
36
+ --no-git Disable Git HTTP backend
37
+ --idp Enable identity provider
38
+ --quiet Suppress logs
39
+
40
+ Examples:
41
+ npx sandymount
42
+ sandymount
43
+ sandymount --port 3000
44
+ sand --idp
45
+
46
+ Website: https://sandy-mount.com
47
+ `);
48
+ }
49
+
50
+ function showVersion() {
51
+ console.log(`sandymount v${VERSION}`);
52
+ }
53
+
54
+ function startServer(startArgs) {
55
+ const jssArgs = ['start'];
56
+
57
+ // Add default port if not specified
58
+ if (!startArgs.includes('--port') && !startArgs.includes('-p')) {
59
+ jssArgs.push('--port', String(DEFAULT_PORT));
60
+ }
61
+
62
+ // Add defaults: nostr and git ON unless disabled
63
+ if (!startArgs.includes('--nostr') && !startArgs.includes('--no-nostr')) {
64
+ jssArgs.push('--nostr');
65
+ }
66
+ if (!startArgs.includes('--git') && !startArgs.includes('--no-git')) {
67
+ jssArgs.push('--git');
68
+ }
69
+
70
+ // Pass through all other args
71
+ jssArgs.push(...startArgs);
72
+
73
+ console.log('');
74
+ console.log('🏖️ Starting Sandymount...');
75
+ console.log('');
76
+
77
+ const jss = spawn('jss', jssArgs, { stdio: 'inherit' });
78
+
79
+ jss.on('error', (err) => {
80
+ if (err.code === 'ENOENT') {
81
+ console.error('Error: JSS not found.');
82
+ console.error('');
83
+ console.error('JSS should be installed as a dependency. Try:');
84
+ console.error(' npm install -g sandymount');
85
+ console.error('');
86
+ } else {
87
+ console.error('Error:', err.message);
88
+ }
89
+ process.exit(1);
90
+ });
91
+
92
+ jss.on('exit', (code) => process.exit(code || 0));
93
+ }
94
+
95
+ // Main
96
+ switch (command) {
97
+ case 'help':
98
+ case '--help':
99
+ case '-h':
100
+ showHelp();
101
+ break;
102
+ case 'version':
103
+ case '--version':
104
+ case '-v':
105
+ showVersion();
106
+ break;
107
+ case 'start':
108
+ // Explicit start, pass args after 'start'
109
+ startServer(args.slice(1));
110
+ break;
111
+ default:
112
+ // No command or unknown = start server, pass all args
113
+ startServer(args);
114
+ break;
115
+ }