Files
nx9-url-shortener/README.md
T

440 lines
6.2 KiB
Markdown

# BZOD
**A lightweight, self-hosted URL management platform written in Rust.**
BZOD combines URL shortening, QR code generation, password-protected links, smart preview pages, analytics, audit logging, and lifecycle management into a single self-hosted application with zero external dependencies.
Built with Rust, SQLite, Axum, and Askama, BZOD is designed for individuals, organizations, homelab operators, and businesses that want complete control over their links, analytics, and branding.
---
## Highlights
### v0.2.0
* QR code generation (PNG and SVG)
* QR scan analytics
* Password-protected links
* Smart preview pages
* Link expiration
* Audit trail
* Bulk operations
* Expanded test coverage
* Improved health monitoring
---
## Feature Matrix
| Feature | Status |
| ------------------------- | ------ |
| URL Shortening | ✅ |
| Landing Pages | ✅ |
| QR Code Generation | ✅ |
| QR Analytics | ✅ |
| Password-Protected Links | ✅ |
| Smart Preview Pages | ✅ |
| Link Expiration | ✅ |
| One-Time Links | ✅ |
| Audit Trail | ✅ |
| Bulk Operations | ✅ |
| Analytics Dashboard | ✅ |
| Health Monitoring | ✅ |
| REST API | ✅ |
| CSV Import/Export | 🚧 |
| Geo Analytics | 🚧 |
| Multi-User Administration | 🚧 |
| SSO | 🚧 |
---
## Features
### URL Shortening
Create short links using compact hexadecimal identifiers.
Example:
```text
https://bzo.in/1bb170
```
Redirects to:
```text
https://very-long-domain-name.com
```
---
### QR Code Generation
Generate QR codes for every short URL.
Supported formats:
* PNG
* SVG
Features:
* Downloadable QR assets
* QR scan analytics
* Bulk QR export
* Print-friendly SVG output
---
### Password-Protected Links
Protect sensitive links using Argon2id-hashed passwords.
Features:
* Password gate
* Secure session handling
* Configurable protection
* Audit logging
---
### Smart Preview Pages
Display branded preview pages before redirecting.
Features:
* Custom title
* Description
* Logo support
* Open Graph metadata
* Social sharing previews
---
### Landing Pages
Create standalone landing pages using dedicated page identifiers.
Example:
```text
https://bzo.in/p/1a2b
```
---
### Link Lifecycle Management
Control link validity.
Features:
* Expiration dates
* Automatic expiry jobs
* One-time links
* Maximum access limits
* Administrative disabling
---
### Analytics
Track:
* Total visits
* QR scans
* Country statistics
* Referrers
* User agents
* Daily statistics
* Monthly statistics
* Yearly statistics
---
### Audit Trail
Track administrative actions including:
* Login
* Logout
* URL creation
* URL updates
* URL deletion
* QR operations
* Configuration changes
---
### Administrative Dashboard
Web-based administration interface featuring:
* URL management
* QR code management
* Landing page management
* Preview page management
* API token management
* Audit logs
* Link expiration controls
* Health monitoring
* Analytics dashboard
* SVG charts
* Bulk operations
---
### API Support
REST API endpoints for automation and integration.
```text
/api/v1/*
```
Supports:
* URL creation
* URL management
* QR generation
* Analytics access
* Bulk operations
---
### Security
* Password-protected administration interface
* Password-protected links
* Argon2id password hashing
* Session management
* CSRF protection
* API token authentication
* Audit logging
* Link access controls
---
### Self-Hosted
No external services required.
Dependencies:
* Rust
* SQLite
* Docker (optional)
No:
* React
* Node.js
* Redis
* PostgreSQL
* MongoDB
* Kubernetes
* External SaaS
---
## Architecture
### Databases
BZOD uses four SQLite databases.
| Database | Purpose |
| ------------ | ------------------------------------------------- |
| admin.db | Users, sessions, API keys |
| content.db | URLs, landing pages, preview pages, tags |
| analytics.db | Visits, QR scans, statistics |
| system.db | Audit events, jobs, migrations, health monitoring |
---
## Initial Setup
Create an administrator account:
### Native Installation
```bash
cargo run -- create-admin
```
### Docker
```bash
docker exec -it bzod bzod create-admin
```
---
## Screenshots
### Dashboard
![Dashboard](screenshots/dashboard.png)
### URL Management
![URL Management](screenshots/short-url-panel.png)
### Landing Pages
![Landing Pages](screenshots/landing-page-panel.png)
### Settings
![Settings](screenshots/settings.png)
### Server Status
![Server Status](screenshots/server-status.png)
---
## Docker Deployment
### Build
```bash
docker compose build
```
### Start
```bash
docker compose up -d
```
### Logs
```bash
docker logs -f bzod
```
---
## Docker Compose Example
```yaml
services:
bzod:
build: .
container_name: bzod
restart: unless-stopped
ports:
- "8654:8654"
volumes:
- ./data:/app/data
- ./config:/app/config
environment:
HOST: 0.0.0.0
PORT: 8654
DATA_DIR: /app/data
```
---
## Development
### Build
```bash
cargo build
```
### Run
```bash
cargo run -- serve
```
### Create Administrator
```bash
cargo run -- create-admin
```
### Run Tests
```bash
cargo test
```
---
## Project Structure
```text
src/
├── analytics/
├── auth/
├── charts/
├── cli/
├── db/
├── jobs/
├── models/
├── services/
├── templates/
├── utils/
└── web/
```
---
## Roadmap
Planned features:
* Vanity URLs
* CSV import/export
* Geo analytics
* Multi-user administration
* SSO integration
* Signed temporary links
* OpenAPI documentation
* Webhook support
---
## Production Deployment
Recommended stack:
```text
Internet
│
▼
Nginx Proxy Manager
│
▼
BZOD
│
▼
SQLite
```
HTTPS is strongly recommended.
---
## License
Apache License 2.0
---
## Author
Sunil Purushottam Thakare
Built with Rust, SQLite, Axum, Askama, and a preference for simple, maintainable software.