Une solution open-source pour raccourcir et gérer vos liens (LinkedIn, YouTube, etc.) en toute sérénité.
- 🔗 Raccourcissement d'URL — génère un lien court unique (hash MD5 encodé en base64) à partir de n'importe quelle URL
- 👤 Authentification — inscription et connexion des utilisateurs (mots de passe hashés avec bcrypt)
- 📊 Suivi des clics — chaque lien conserve un compteur de clics (
nb_click) - 🖥️ Tableau de bord — interface pour créer et visualiser ses liens
- 🔳 Génération de QR code — (prévu, pas encore implémenté)
| Composant | Technologie |
|---|---|
| Backend | Flask via APIFlask |
| Base de données | SQLAlchemy + Flask-Migrate (Alembic) — SQLite par défaut |
| Authentification | Flask-Login, Flask-Bcrypt, Flask-JWT-Extended |
| Formulaires | Flask-WTF / WTForms |
| Frontend | Templates Jinja2, Tailwind CSS + DaisyUI, HTMX |
| Déploiement | Docker, Gunicorn |
shot-url/
├── app/
│ ├── model/ # Modèles SQLAlchemy (User, Url)
│ ├── view/ # Blueprints (auth, url, main)
│ ├── templates/ # Templates Jinja2
│ ├── static/ # CSS (Tailwind), images
│ ├── form.py # Formulaires WTForms
│ ├── utils.py # Logique de raccourcissement d'URL
│ └── __init__.py # Factory de l'application (create_app)
├── migrations/ # Migrations de base de données (Alembic)
├── config.py # Configuration (dev / prod)
├── main.py # Point d'entrée de l'application
└── requirement.txt # Dépendances Python
- Python >= 3.14
- Node.js (pour compiler le CSS avec Tailwind)
git clone https://github.com/jjk361282-beep/shot-url.git
cd shot-urlAvec pip :
python -m venv .venv
. .venv/bin/activate # sous Windows : .venv\Scripts\activate
pip install -r requirement.txtAvec uv :
uv syncCopiez le fichier d'exemple et complétez-le :
cp .env.example .envDATABASE_URL=
JWT_SECRET=
SECRET_KEY=
APP_ENV=devflask db upgradenpm install
npm run cssflask runL'application est accessible sur http://127.0.0.1:5000.
docker build -t shot-url .
docker run -p 5000:5000 shot-url- Génération de QR code pour chaque lien raccourci
- Statistiques avancées (clics par jour, provenance, etc.)
- Expiration automatique des liens (
date_expiratedéjà présent dans le modèle) - API publique documentée (APIFlask/OpenAPI)
Les contributions sont les bienvenues ! N'hésitez pas à ouvrir une issue ou une pull request.
