Add project comparison guide and improve landing page
This commit is contained in:
1 parent
9fae39dfa4
commit
cefb84f643
2 files changed
+336
-48
No files matched your search
@@ -0,0 +1,296 @@
|
|||||||
|
# BZOD vs Other Self-Hosted URL Shorteners
|
||||||
|
|
||||||
|
**BZOD (nx9-url-shortener)** is a modern, privacy-focused, self-hosted URL management platform built in Rust as part of the **NX9 Platform**.
|
||||||
|
|
||||||
|
Unlike many traditional URL shorteners that focus only on redirects, BZOD combines:
|
||||||
|
|
||||||
|
* URL shortening
|
||||||
|
* Landing pages
|
||||||
|
* QR code generation
|
||||||
|
* Analytics
|
||||||
|
* Password protection
|
||||||
|
* Backup & restore
|
||||||
|
* REST API
|
||||||
|
* CLI automation
|
||||||
|
* Audit logging
|
||||||
|
|
||||||
|
into a single lightweight deployment.
|
||||||
|
|
||||||
|
The project philosophy is:
|
||||||
|
|
||||||
|
> One binary. One command. Full ownership.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Design Philosophy
|
||||||
|
|
||||||
|
| Principle | BZOD |
|
||||||
|
| -------------------------- | ----------------- |
|
||||||
|
| Self-hosted | ✅ |
|
||||||
|
| Privacy-first | ✅ |
|
||||||
|
| Open Source | MIT OR Apache-2.0 |
|
||||||
|
| Vendor Lock-in | None |
|
||||||
|
| Telemetry | None |
|
||||||
|
| External Services Required | None |
|
||||||
|
| Database Server Required | No |
|
||||||
|
| Runtime Dependencies | No |
|
||||||
|
| Single Binary | Yes |
|
||||||
|
| Linux-first | Yes |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# BZOD vs Go URL Shorteners
|
||||||
|
|
||||||
|
Popular Go projects include:
|
||||||
|
|
||||||
|
* Krtk
|
||||||
|
* Slash
|
||||||
|
* Goshorly
|
||||||
|
* Shortr
|
||||||
|
* Custom Gin/Echo implementations
|
||||||
|
|
||||||
|
## Comparison
|
||||||
|
|
||||||
|
| Aspect | BZOD (Rust) | Typical Go Projects |
|
||||||
|
| ------------------- | -------------------- | ------------------- |
|
||||||
|
| Binary | Single ~18 MB binary | Usually 10–20 MB |
|
||||||
|
| Runtime | None | None |
|
||||||
|
| Database | Embedded SQLite | SQLite / PostgreSQL |
|
||||||
|
| Landing Pages | ✅ Built-in | Rare |
|
||||||
|
| QR Generation | ✅ PNG + SVG | Sometimes |
|
||||||
|
| QR Analytics | ✅ | Rare |
|
||||||
|
| Password Protection | ✅ | Varies |
|
||||||
|
| Link Expiry | ✅ | Often |
|
||||||
|
| One-Time Links | ✅ | Rare |
|
||||||
|
| UTM Builder | ✅ | Rare |
|
||||||
|
| REST API | ✅ | Usually |
|
||||||
|
| CLI | ✅ Extensive | Usually limited |
|
||||||
|
| Backup & Restore | ✅ Built-in | Rare |
|
||||||
|
| Audit Logs | ✅ | Rare |
|
||||||
|
| Admin Dashboard | ✅ | Varies |
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
Go shorteners are often:
|
||||||
|
|
||||||
|
* Extremely simple
|
||||||
|
* Fast
|
||||||
|
* Easy to extend
|
||||||
|
|
||||||
|
BZOD focuses on:
|
||||||
|
|
||||||
|
* Rich features
|
||||||
|
* Complete ownership
|
||||||
|
* Minimal operations
|
||||||
|
* Batteries included
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# BZOD vs Python URL Shorteners
|
||||||
|
|
||||||
|
Popular Python projects include:
|
||||||
|
|
||||||
|
* Pygmy
|
||||||
|
* ReducePy
|
||||||
|
* Schort
|
||||||
|
* Flask/FastAPI examples
|
||||||
|
|
||||||
|
## Comparison
|
||||||
|
|
||||||
|
| Aspect | BZOD (Rust) | Python Solutions |
|
||||||
|
| ---------------- | --------------------- | ----------------- |
|
||||||
|
| Runtime | None | Python required |
|
||||||
|
| Deploy Size | ~18 MB | Often 100+ MB |
|
||||||
|
| Memory Usage | Very Low | Moderate |
|
||||||
|
| Landing Pages | ✅ | Rare |
|
||||||
|
| QR Analytics | ✅ | Rare |
|
||||||
|
| Backup & Restore | ✅ | Rare |
|
||||||
|
| CLI Tools | ✅ | Limited |
|
||||||
|
| Dashboard | ✅ | Varies |
|
||||||
|
| Security | Argon2id + Audit Logs | Project dependent |
|
||||||
|
| Performance | Excellent | Good |
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
Python solutions are ideal when:
|
||||||
|
|
||||||
|
* Already using Python
|
||||||
|
* Rapid prototyping
|
||||||
|
* Easy customization
|
||||||
|
|
||||||
|
BZOD is ideal when:
|
||||||
|
|
||||||
|
* Long-term deployment matters
|
||||||
|
* Resource efficiency matters
|
||||||
|
* Minimal maintenance is desired
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# BZOD vs Shlink
|
||||||
|
|
||||||
|
Shlink is one of the most mature self-hosted URL shorteners.
|
||||||
|
|
||||||
|
## Comparison
|
||||||
|
|
||||||
|
| Aspect | BZOD | Shlink |
|
||||||
|
| ------------------------ | ------------- | ---------------- |
|
||||||
|
| Language | Rust | PHP |
|
||||||
|
| Deployment | Single binary | PHP stack |
|
||||||
|
| External DB | No | Usually yes |
|
||||||
|
| Landing Pages | ✅ | ❌ |
|
||||||
|
| Password Protected Links | ✅ | Limited |
|
||||||
|
| QR Analytics | ✅ | Partial |
|
||||||
|
| UTM Builder | ✅ | ❌ |
|
||||||
|
| Backup & Restore | ✅ | External tooling |
|
||||||
|
| Audit Trail | ✅ | Limited |
|
||||||
|
| Dynamic Redirect Rules | ❌ | ✅ |
|
||||||
|
| Multi-domain | Planned | ✅ |
|
||||||
|
| Ecosystem | Growing | Mature |
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
Choose Shlink when:
|
||||||
|
|
||||||
|
* Multi-domain management is critical
|
||||||
|
* Dynamic redirect rules are required
|
||||||
|
* Enterprise-scale analytics matter
|
||||||
|
|
||||||
|
Choose BZOD when:
|
||||||
|
|
||||||
|
* Simplicity matters
|
||||||
|
* Privacy matters
|
||||||
|
* Minimal infrastructure matters
|
||||||
|
* Landing pages are important
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# BZOD vs YOURLS
|
||||||
|
|
||||||
|
YOURLS is the classic self-hosted URL shortener.
|
||||||
|
|
||||||
|
## Comparison
|
||||||
|
|
||||||
|
| Aspect | BZOD | YOURLS |
|
||||||
|
| ------------- | ------------- | ---------- |
|
||||||
|
| Language | Rust | PHP |
|
||||||
|
| Architecture | Single binary | LAMP stack |
|
||||||
|
| Plugins | Not required | Extensive |
|
||||||
|
| Landing Pages | ✅ | Plugin |
|
||||||
|
| QR Analytics | ✅ | Plugin |
|
||||||
|
| Audit Logs | ✅ | Plugin |
|
||||||
|
| Backup Tools | ✅ | External |
|
||||||
|
| API | ✅ | ✅ |
|
||||||
|
| Maintenance | Minimal | Moderate |
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
YOURLS wins on:
|
||||||
|
|
||||||
|
* Age
|
||||||
|
* Community
|
||||||
|
* Plugin ecosystem
|
||||||
|
|
||||||
|
BZOD wins on:
|
||||||
|
|
||||||
|
* Simplicity
|
||||||
|
* Deployment
|
||||||
|
* Modern architecture
|
||||||
|
* Integrated features
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# BZOD vs Chhoto URL
|
||||||
|
|
||||||
|
Chhoto URL is the closest Rust-based competitor.
|
||||||
|
|
||||||
|
## Comparison
|
||||||
|
|
||||||
|
| Aspect | BZOD | Chhoto URL |
|
||||||
|
| ---------------- | ------ | ---------- |
|
||||||
|
| Language | Rust | Rust |
|
||||||
|
| Landing Pages | ✅ | ❌ |
|
||||||
|
| QR Codes | ✅ | ✅ |
|
||||||
|
| QR Analytics | ✅ | ❌ |
|
||||||
|
| Password Links | ✅ | ❌ |
|
||||||
|
| Backup & Restore | ✅ | ❌ |
|
||||||
|
| REST API | ✅ | JSON-RPC |
|
||||||
|
| Audit Logs | ✅ | ❌ |
|
||||||
|
| Analytics | Rich | Basic |
|
||||||
|
| Binary Size | ~18 MB | Smaller |
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
Choose Chhoto URL for:
|
||||||
|
|
||||||
|
* Maximum simplicity
|
||||||
|
* Minimal footprint
|
||||||
|
|
||||||
|
Choose BZOD for:
|
||||||
|
|
||||||
|
* Feature completeness
|
||||||
|
* Better administration
|
||||||
|
* Better analytics
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Why BZOD Exists
|
||||||
|
|
||||||
|
Most self-hosted URL shorteners optimize for one of two extremes:
|
||||||
|
|
||||||
|
1. Extremely simple redirect service
|
||||||
|
2. Large multi-service platform
|
||||||
|
|
||||||
|
BZOD attempts to sit in the middle:
|
||||||
|
|
||||||
|
* Small enough for a Raspberry Pi
|
||||||
|
* Powerful enough for organizations
|
||||||
|
* Simple enough for homelabs
|
||||||
|
* Complete enough for production use
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# The NX9 Philosophy
|
||||||
|
|
||||||
|
BZOD is part of the **NX9 Platform**.
|
||||||
|
|
||||||
|
NX9 projects follow strict engineering principles:
|
||||||
|
|
||||||
|
* Linux-native first
|
||||||
|
* Rust-first
|
||||||
|
* Single binary deployments
|
||||||
|
* No NodeJS
|
||||||
|
* No React dependency
|
||||||
|
* No Python runtime dependency
|
||||||
|
* No vendor lock-in
|
||||||
|
* No telemetry
|
||||||
|
* Privacy-first
|
||||||
|
* Self-hostable
|
||||||
|
* MIT OR Apache-2.0 licensed
|
||||||
|
|
||||||
|
GitHub and Codeberg repositories are only source code hosting locations.
|
||||||
|
|
||||||
|
The actual project is the software itself.
|
||||||
|
|
||||||
|
The goal of NX9 is simple:
|
||||||
|
|
||||||
|
> Build technology that serves people, organizations, communities, and governments — not advertising networks, data brokers, or vendor ecosystems.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Conclusion
|
||||||
|
|
||||||
|
BZOD is not merely a URL shortener.
|
||||||
|
|
||||||
|
It is a lightweight URL management platform that combines:
|
||||||
|
|
||||||
|
* Link shortening
|
||||||
|
* Landing pages
|
||||||
|
* QR ecosystem
|
||||||
|
* Analytics
|
||||||
|
* Automation
|
||||||
|
* Security
|
||||||
|
* Backups
|
||||||
|
|
||||||
|
into a single deployable Rust binary.
|
||||||
|
|
||||||
|
For users seeking privacy, simplicity, ownership, and long-term sustainability, BZOD offers a compelling alternative to both cloud SaaS platforms and traditional self-hosted URL shorteners.
|
||||||
+40
-48
@@ -143,27 +143,54 @@
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Install -->
|
||||||
|
<section class="hero-bg py-24">
|
||||||
|
<div class="max-w-4xl mx-auto px-6 text-center">
|
||||||
|
<h2 class="text-4xl font-bold mb-4">Install BZOD</h2>
|
||||||
|
|
||||||
|
<p class="text-zinc-400 mb-10">
|
||||||
|
Deploy on any Debian/Ubuntu VPS, homelab, mini-PC, or
|
||||||
|
Raspberry Pi.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="bg-black max-w-6xl mx-auto px-6 -mt-10 relative z-10 rounded-3xl overflow-hidden">
|
||||||
<div
|
<div
|
||||||
class="bg-black border border-zinc-800 rounded-3xl overflow-hidden"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="flex items-center justify-between px-5 py-3 border-b border-zinc-800"
|
class="flex items-center justify-between px-5 py-3 border-b border-zinc-800"
|
||||||
>
|
>
|
||||||
<span class="text-zinc-500 text-sm">
|
<span class="text-zinc-500 text-sm">
|
||||||
Linux Installation
|
Downloads the latest release and installs BZOD as a systemd
|
||||||
|
service. Linux Installation
|
||||||
</span>
|
</span>
|
||||||
<button
|
<button
|
||||||
onclick="copyInstallCommand()"
|
onclick="copyInstallCommand()"
|
||||||
class="text-sm bg-violet-600 hover:bg-violet-700 px-4 py-2 rounded-lg transition"
|
class="text-sm bg-violet-600 hover:bg-violet-700 px-4 py-2 rounded-lg transition"
|
||||||
>
|
>
|
||||||
Copy
|
Copy
|
||||||
</button>
|
</button>
|
||||||
</div>
|
|
||||||
<pre
|
|
||||||
class="text-left overflow-x-auto p-6 text-emerald-400 font-mono text-sm"
|
|
||||||
><code id="install-command">curl -fsSL https://bzo.in/deploy.sh | sudo bash</code></pre>
|
|
||||||
</div>
|
</div>
|
||||||
|
<pre
|
||||||
|
class="text-left overflow-x-auto p-6 text-emerald-400 font-mono text-sm"
|
||||||
|
><code id="install-command">curl -fsSL https://bzo.in/deploy.sh | sudo bash</code></pre>
|
||||||
</div>
|
</div>
|
||||||
|
<script>
|
||||||
|
function copyInstallCommand() {
|
||||||
|
const text = "curl -fsSL https://bzo.in/deploy.sh | sudo bash";
|
||||||
|
|
||||||
|
navigator.clipboard.writeText(text);
|
||||||
|
|
||||||
|
const btn = event.target;
|
||||||
|
const old = btn.innerText;
|
||||||
|
|
||||||
|
btn.innerText = "Copied!";
|
||||||
|
setTimeout(() => {
|
||||||
|
btn.innerText = old;
|
||||||
|
}, 2000);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<!-- Features -->
|
<!-- Features -->
|
||||||
@@ -256,41 +283,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<!-- Install -->
|
|
||||||
<section
|
|
||||||
class="py-20 bg-zinc-950 border-t border-zinc-800 border-b border-zinc-800"
|
|
||||||
>
|
|
||||||
<div class="max-w-4xl mx-auto px-6 text-center">
|
|
||||||
<h2 class="text-4xl font-bold mb-4">Install BZOD</h2>
|
|
||||||
|
|
||||||
<p class="text-zinc-400 mb-10">
|
|
||||||
Deploy on any Debian/Ubuntu VPS, homelab, mini-PC, or
|
|
||||||
Raspberry Pi.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p class="text-zinc-500 text-sm mt-4">
|
|
||||||
Downloads the latest release and installs BZOD as a systemd
|
|
||||||
service.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
function copyInstallCommand() {
|
|
||||||
const text = "curl -fsSL https://bzo.in/deploy.sh | sudo bash";
|
|
||||||
|
|
||||||
navigator.clipboard.writeText(text);
|
|
||||||
|
|
||||||
const btn = event.target;
|
|
||||||
const old = btn.innerText;
|
|
||||||
|
|
||||||
btn.innerText = "Copied!";
|
|
||||||
setTimeout(() => {
|
|
||||||
btn.innerText = old;
|
|
||||||
}, 2000);
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<!-- CTA -->
|
<!-- CTA -->
|
||||||
<section class="py-20 bg-black border-t border-zinc-800">
|
<section class="py-20 bg-black border-t border-zinc-800">
|
||||||
<div class="max-w-2xl mx-auto text-center px-6">
|
<div class="max-w-2xl mx-auto text-center px-6">
|
||||||
|
|||||||
Reference in new issue
Block a user