commit f30be085ffb7cb6941bbe05aa39f3ef56c753652 Author: Markus Maiwald Date: Mon Feb 16 10:38:33 2026 +0100 Initial commit: Nexus NIIX website with Svelte + Alpine.JS + picoCSS 🚀 Website Stack: - SvelteKit for static site generation - Alpine.JS for interactivity - PicoCSS for lightweight styling 📁 Features: - Home page with hero and feature cards - Documentation system with markdown support - Responsive navigation - Dark mode by default 🔧 Configuration: - Cloudflare Pages deployment workflow - Wrangler.toml for Pages config - GitHub Actions for CI/CD 📝 Content: - Placeholder documentation in static/docs/ - Ready for content migration from nexus-forge 📦 Tech Stack: - Node.js >= 18.0.0 - Vite for building - Zero external runtime dependencies diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..07570f2 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,46 @@ +name: Deploy to Cloudflare Pages + +on: + push: + branches: [main] + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'npm' + + - name: Install dependencies + run: npm ci + + - name: Build + run: npm run build + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: '.svelte-kit/output/client' + + deploy: + needs: build + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bb462ab --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +node_modules +.svelte-kit +build +.output +.env +.env.* +!.env.example +dist +.DS_Store +*.log \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..1f2afe5 --- /dev/null +++ b/README.md @@ -0,0 +1,105 @@ +# Nexus NIIX Website + +Official website for Nexus NIIX - Sovereign Technology for the Future. + +## Stack + +- **SvelteKit** - Static site generation +- **Alpine.JS** - Client-side interactivity +- **PicoCSS** - Lightweight CSS framework + +## Development + +### Prerequisites + +- Node.js >= 18.0.0 +- npm or pnpm + +### Installation + +```bash +git clone https://git.sovereign-society.org/nexus/nexus-niix-website.git +cd nexus-niix-website +npm install +``` + +### Development Server + +```bash +npm run dev +``` + +Open http://localhost:5173 in your browser. + +### Build + +```bash +npm run build +``` + +### Preview + +```bash +npm run preview +``` + +## Project Structure + +``` +nexus-niix-website/ +├── src/ +│ ├── routes/ # SvelteKit routes +│ │ ├── +layout.svelte +│ │ ├── +page.svelte +│ │ └── docs/ +│ ├── lib/ # Shared components +│ └── app.html # HTML template +├── static/ +│ ├── docs/ # Documentation markdown files +│ ├── pico.css # PicoCSS styles +│ └── alpine.js # Alpine.js library +├── package.json +├── svelte.config.js +├── vite.config.js +└── wrangler.toml # Cloudflare Pages config +``` + +## Documentation + +Documentation is written in Markdown and located in `static/docs/`. + +To add a new doc: +1. Create a `.md` file in `static/docs/` +2. Add it to the navigation in `src/routes/docs/+page.svelte` +3. The page will be automatically available at `/docs/your-file-name` + +## Deployment + +### Cloudflare Pages (Automatic) + +Push to `main` branch triggers automatic deployment to Cloudflare Pages. + +Manual deployment: +```bash +npm run build +npx wrangler pages deploy .svelte-kit/output/client +``` + +### Manual Build + +```bash +npm run build +# Output is in .svelte-kit/output/client +``` + +## License + +This project is part of the Nexus Organization and is licensed under the **LSL-1.0** (Libertaria Source License 1.0). + +See [LICENSE](https://git.sovereign-society.org/nexus/nexus/-/raw/main/LICENSE) for details. + +## Links + +- **Repository**: https://git.sovereign-society.org/nexus/nexus-niix-website +- **Issues**: https://git.sovereign-society.org/nexus/nexus-niix-website/-/issues +- **Organization**: https://git.sovereign-society.org/nexus diff --git a/package.json b/package.json new file mode 100644 index 0000000..f7d176e --- /dev/null +++ b/package.json @@ -0,0 +1,27 @@ +{ + "name": "nexus-niix-website", + "version": "0.1.0", + "description": "Nexus NIIX Official Website - Svelte + Alpine.JS + picoCSS", + "type": "module", + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "alpinejs": "^3.13.3", + "marked": "^11.1.1" + }, + "devDependencies": { + "@sveltejs/adapter-auto": "^3.1.1", + "@sveltejs/kit": "^2.4.3", + "@sveltejs/vite-plugin-svelte": "^3.0.1", + "picocolors": "^1.0.0", + "picocss": "^1.0.1", + "svelte": "^4.2.8", + "vite": "^5.0.12" + }, + "engines": { + "node": ">=18.0.0" + } +} diff --git a/src/app.html b/src/app.html new file mode 100644 index 0000000..1d4c3c9 --- /dev/null +++ b/src/app.html @@ -0,0 +1,185 @@ + + + + + + + + Nexus NIIX + + + + + + + %sveltekit.head% + + +
%sveltekit.body%
+ + \ No newline at end of file diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte new file mode 100644 index 0000000..660558f --- /dev/null +++ b/src/routes/+layout.svelte @@ -0,0 +1,49 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte new file mode 100644 index 0000000..8eb5daf --- /dev/null +++ b/src/routes/+page.svelte @@ -0,0 +1,101 @@ + + + + Nexus NIIX - Sovereign Technology for the Future + + +
+

Nexus NIIX

+

+ Sovereign technology for the future. + Decentralized, content-addressed, community-powered. +

+
+ Get Started + Read Docs +
+
+ +
+
+

Why Nexus NIIX?

+
+ {#each features as feature} +
+

{feature.icon} {feature.title}

+

{feature.description}

+
+ {/each} +
+
+ +
+

The Ecosystem

+
+
+

📦 NexFS

+

Native Zig flash filesystem. From IoT sensors to Chapter nodes.

+ Learn more → +
+ +
+

🔧 Rumpk

+

Runtime package manager. Secure, signed, content-addressed packages.

+ Learn more → +
+ +
+

📦 Nip

+

Package format with dependency resolution and cryptographic verification.

+ Learn more → +
+ +
+

🌐 Nexus

+

Core utilities and orchestration for sovereign systems.

+ Learn more → +
+
+
+ +
+

Ready to go sovereign?

+

+ Join thousands of developers building the decentralized future. +

+ Download NexusOS +
+
\ No newline at end of file diff --git a/src/routes/docs/+page.svelte b/src/routes/docs/+page.svelte new file mode 100644 index 0000000..46f0897 --- /dev/null +++ b/src/routes/docs/+page.svelte @@ -0,0 +1,230 @@ + + + + Documentation - Nexus NIIX + + +
+ + + + + + + +
+ {#if loading} +
+

Loading documentation...

+
+ {:else if error} +
+

Error: {error}

+
+ {:else} +
+ {@html content} +
+ {/if} +
+
+ + \ No newline at end of file diff --git a/static/alpine.js b/static/alpine.js new file mode 100644 index 0000000..af7df64 --- /dev/null +++ b/static/alpine.js @@ -0,0 +1,5 @@ +(()=>{var tt=!1,rt=!1,V=[],nt=-1;function Vt(e){Sn(e)}function Sn(e){V.includes(e)||V.push(e),An()}function Ee(e){let t=V.indexOf(e);t!==-1&&t>nt&&V.splice(t,1)}function An(){!rt&&!tt&&(tt=!0,queueMicrotask(On))}function On(){tt=!1,rt=!0;for(let e=0;ee.effect(t,{scheduler:r=>{it?Vt(r):r()}}),ot=e.raw}function st(e){k=e}function Wt(e){let t=()=>{};return[n=>{let i=k(n);return e._x_effects||(e._x_effects=new Set,e._x_runEffects=()=>{e._x_effects.forEach(o=>o())}),e._x_effects.add(i),t=()=>{i!==void 0&&(e._x_effects.delete(i),$(i))},i},()=>{t()}]}function q(e,t,r={}){e.dispatchEvent(new CustomEvent(t,{detail:r,bubbles:!0,composed:!0,cancelable:!0}))}function O(e,t){if(typeof ShadowRoot=="function"&&e instanceof ShadowRoot){Array.from(e.children).forEach(i=>O(i,t));return}let r=!1;if(t(e,()=>r=!0),r)return;let n=e.firstElementChild;for(;n;)O(n,t,!1),n=n.nextElementSibling}function v(e,...t){console.warn(`Alpine Warning: ${e}`,...t)}var Gt=!1;function Jt(){Gt&&v("Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems."),Gt=!0,document.body||v("Unable to initialize. Trying to load Alpine before `` is available. Did you forget to add `defer` in Alpine's `