Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
27c4ad6805 | ||
|
|
592154e961 |
No files matched your search
@@ -5,3 +5,4 @@ data/
|
|||||||
*.db-shm
|
*.db-shm
|
||||||
.env
|
.env
|
||||||
|
|
||||||
|
.idea/
|
||||||
@@ -1,10 +1,50 @@
|
|||||||
# nx9-url-shortener
|
# nx9-url-shortener
|
||||||
|
|
||||||
A lightweight, self-hosted URL shortener and landing page platform written in Rust.
|
**A lightweight, self-hosted URL management platform written in Rust.**
|
||||||
|
|
||||||
`nx9-url-shortener` is designed for individuals, organizations, and homelab operators who want complete control over their short links without relying on third-party services.
|
nx9-url-shortener 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, it provides URL shortening, landing pages, analytics, audit logging, API access, and a web-based administration interface while maintaining a small deployment footprint.
|
Built with Rust, SQLite, Axum, and Askama, nx9-url-shortener 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 | 🚧 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -17,7 +57,7 @@ Create short links using compact hexadecimal identifiers.
|
|||||||
Example:
|
Example:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
https://<your-short-domain>/1bb170
|
https://your-short-domain/1bb170
|
||||||
```
|
```
|
||||||
|
|
||||||
Redirects to:
|
Redirects to:
|
||||||
@@ -28,6 +68,51 @@ 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
|
### Landing Pages
|
||||||
|
|
||||||
Create standalone landing pages using dedicated page identifiers.
|
Create standalone landing pages using dedicated page identifiers.
|
||||||
@@ -35,16 +120,31 @@ Create standalone landing pages using dedicated page identifiers.
|
|||||||
Example:
|
Example:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
https://<your-short-domain>/p/1a2b
|
https://your-short-domain/p/1a2b
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### Link Lifecycle Management
|
||||||
|
|
||||||
|
Control link validity.
|
||||||
|
|
||||||
|
Features:
|
||||||
|
|
||||||
|
* Expiration dates
|
||||||
|
* Automatic expiry jobs
|
||||||
|
* One-time links
|
||||||
|
* Maximum access limits
|
||||||
|
* Administrative disabling
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### Analytics
|
### Analytics
|
||||||
|
|
||||||
Track:
|
Track:
|
||||||
|
|
||||||
* Total visits
|
* Total visits
|
||||||
|
* QR scans
|
||||||
* Country statistics
|
* Country statistics
|
||||||
* Referrers
|
* Referrers
|
||||||
* User agents
|
* User agents
|
||||||
@@ -54,17 +154,35 @@ Track:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### Audit Trail
|
||||||
|
|
||||||
|
Track administrative actions including:
|
||||||
|
|
||||||
|
* Login
|
||||||
|
* Logout
|
||||||
|
* URL creation
|
||||||
|
* URL updates
|
||||||
|
* URL deletion
|
||||||
|
* QR operations
|
||||||
|
* Configuration changes
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### Administrative Dashboard
|
### Administrative Dashboard
|
||||||
|
|
||||||
Web-based administration interface featuring:
|
Web-based administration interface featuring:
|
||||||
|
|
||||||
* URL management
|
* URL management
|
||||||
|
* QR code management
|
||||||
* Landing page management
|
* Landing page management
|
||||||
|
* Preview page management
|
||||||
* API token management
|
* API token management
|
||||||
* Audit logs
|
* Audit logs
|
||||||
* Health checks
|
* Link expiration controls
|
||||||
|
* Health monitoring
|
||||||
* Analytics dashboard
|
* Analytics dashboard
|
||||||
* SVG charts
|
* SVG charts
|
||||||
|
* Bulk operations
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -76,15 +194,26 @@ REST API endpoints for automation and integration.
|
|||||||
/api/v1/*
|
/api/v1/*
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Supports:
|
||||||
|
|
||||||
|
* URL creation
|
||||||
|
* URL management
|
||||||
|
* QR generation
|
||||||
|
* Analytics access
|
||||||
|
* Bulk operations
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Security
|
### Security
|
||||||
|
|
||||||
* Password-protected administration interface
|
* Password-protected administration interface
|
||||||
|
* Password-protected links
|
||||||
|
* Argon2id password hashing
|
||||||
* Session management
|
* Session management
|
||||||
* CSRF protection
|
* CSRF protection
|
||||||
* API token authentication
|
* API token authentication
|
||||||
* Audit logging
|
* Audit logging
|
||||||
|
* Link access controls
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -103,8 +232,10 @@ No:
|
|||||||
* React
|
* React
|
||||||
* Node.js
|
* Node.js
|
||||||
* Redis
|
* Redis
|
||||||
|
* PostgreSQL
|
||||||
|
* MongoDB
|
||||||
* Kubernetes
|
* Kubernetes
|
||||||
* External databases
|
* External SaaS
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -112,27 +243,32 @@ No:
|
|||||||
|
|
||||||
### Databases
|
### Databases
|
||||||
|
|
||||||
The application uses four SQLite databases.
|
nx9-url-shortener uses four SQLite databases.
|
||||||
|
|
||||||
| Database | Purpose |
|
| Database | Purpose |
|
||||||
| ------------ | ---------------------------------------- |
|
| ------------ | ------------------------------------------------- |
|
||||||
| admin.db | Users, sessions, API keys, audit logs |
|
| admin.db | Users, sessions, API keys |
|
||||||
| content.db | URLs, landing pages, tags |
|
| content.db | URLs, landing pages, preview pages, tags |
|
||||||
| analytics.db | Visits and statistics |
|
| analytics.db | Visits, QR scans, statistics |
|
||||||
| system.db | Jobs, migrations, backups, health checks |
|
| system.db | Audit events, jobs, migrations, health monitoring |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Default Credentials
|
## Initial Setup
|
||||||
|
|
||||||
Initial login:
|
Create an administrator account:
|
||||||
|
|
||||||
```text
|
### Native Installation
|
||||||
Username: admin
|
|
||||||
Password: admin
|
```bash
|
||||||
|
cargo run -- create-admin
|
||||||
```
|
```
|
||||||
|
|
||||||
Change the password immediately after first login.
|
### Docker
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker exec -it nx9-url-shortener nx9-url-shortener create-admin
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -142,9 +278,9 @@ Change the password immediately after first login.
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
### Short URL Management
|
### URL Management
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### Landing Pages
|
### Landing Pages
|
||||||
|
|
||||||
@@ -174,10 +310,10 @@ docker compose build
|
|||||||
docker compose up -d
|
docker compose up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
### View Logs
|
### Logs
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker logs -f bzod
|
docker logs -f nx9-url-shortener
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -186,9 +322,9 @@ docker logs -f bzod
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
services:
|
services:
|
||||||
bzod:
|
nx9-url-shortener:
|
||||||
build: .
|
build: .
|
||||||
container_name: bzod
|
container_name: nx9-url-shortener
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
ports:
|
ports:
|
||||||
@@ -220,13 +356,7 @@ cargo build
|
|||||||
cargo run -- serve
|
cargo run -- serve
|
||||||
```
|
```
|
||||||
|
|
||||||
### Run Migrations
|
### Create Administrator
|
||||||
|
|
||||||
```bash
|
|
||||||
cargo run -- migrate
|
|
||||||
```
|
|
||||||
|
|
||||||
### Create Admin User
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cargo run -- create-admin
|
cargo run -- create-admin
|
||||||
@@ -263,14 +393,14 @@ src/
|
|||||||
|
|
||||||
Planned features:
|
Planned features:
|
||||||
|
|
||||||
* QR code generation
|
* Vanity URLs
|
||||||
* Link expiration
|
* CSV import/export
|
||||||
* Link disabling
|
* Geo analytics
|
||||||
* CSV exports
|
|
||||||
* Bulk URL import
|
|
||||||
* GeoIP integration
|
|
||||||
* Multi-user administration
|
* Multi-user administration
|
||||||
* SSO support
|
* SSO integration
|
||||||
|
* Signed temporary links
|
||||||
|
* OpenAPI documentation
|
||||||
|
* Webhook support
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -305,4 +435,5 @@ Apache License 2.0
|
|||||||
|
|
||||||
Sunil Purushottam Thakare
|
Sunil Purushottam Thakare
|
||||||
|
|
||||||
Built using Rust, SQLite, Axum, Askama, and a preference for simple, maintainable software.
|
Built with Rust, SQLite, Axum, Askama, and a preference for simple, maintainable software.
|
||||||
|
|
||||||
Reference in new issue
Block a user