The URL shortener that takes itself way too seriously (or not)
PunLink is a hilariously over-engineered URL shortener that generates punny short URLs... or makes them absurdly, unnecessarily long. Because why settle for abc123 when you can have taco-bout-it or please/click/here/thank/you/very/much/absolutely-extraordinarily-magnificent-website?
Instead of boring random characters, get creative slugs like:
link.ly/taco-bout-itlink.ly/url-be-sorrylink.ly/no-caplink.ly/thats-what-sheet-said(for spreadsheets)link.ly/brew-tiful(for coffee sites)
Because who needs efficiency? Make URLs comically long:
link.ly/absolutely-extraordinarily-magnificent-website-you-will-ever-visit-seriouslylink.ly/please/click/here/thank/you/very/much/super-mega-ultra-important-link
Can't decide? Let fate choose between punny short or ridiculously long!
- Themed pun categories: Food, Tech, Dad Jokes, General
- Easter eggs: Special puns for specific domains (YouTube, GitHub, Google Sheets, etc.)
- Click tracking: See which puns are most popular
- Stats dashboard: View your punniest creations
- Beautiful UI: Gradient backgrounds because it's 2025
- Fully containerized: Docker + Docker Compose ready
- SQLite database: Lightweight and portable
# Clone the repository
git clone https://github.com/yourusername/punlink.git
cd punlink
# Build and run with Docker Compose
docker-compose up -d
# Visit http://localhost:5000# Build the image
docker build -t punlink .
# Run the container
docker run -d -p 5000:5000 -v $(pwd)/data:/data punlink
# Visit http://localhost:5000# Install dependencies
pip install -r requirements.txt
# Run the app
python app/app.py
# Visit http://localhost:5000POST /shorten
Content-Type: application/json
{
"url": "https://stackoverflow.com",
"category": "tech" # optional: food, tech, dad, general
}
# Response
{
"slug": "stack-overflow-more-like-snack-overflow",
"short_url": "http://localhost:5000/stack-overflow-more-like-snack-overflow",
"original_url": "https://stackoverflow.com",
"type": "pun"
}POST /lengthen
Content-Type: application/json
{
"url": "https://example.com",
"super_long": false # true for EXTREMELY long URLs
}
# Response
{
"slug": "absolutely-extraordinarily-magnificent-website",
"long_url": "http://localhost:5000/absolutely-extraordinarily-magnificent-website",
"original_url": "https://example.com",
"type": "long"
}POST /surprise
Content-Type: application/json
{
"url": "https://example.com"
}
# Response - randomly picks between punny short or long
{
"slug": "...",
"url": "...",
"original_url": "https://example.com",
"type": "pun|surprise_long"
}GET /stats # HTML page
GET /api/stats # JSON responseGET /{slug} # Redirects to original URL
# Supports nested slugs: /please/click/here/taco-bout-itPunLink has special puns for specific domains:
- YouTube:
cat-video-incoming,definitely-not-rickroll - Stack Overflow:
stack-overflow-more-like-snack-overflow,copy-paste-champion - GitHub:
git-commit-m-fix-stuff,works-on-my-machine - Google Sheets:
thats-what-sheet-said,spread-the-sheets - Starbucks:
brew-tiful,espresso-yourself - Zoom:
you-are-muted,can-you-see-my-screen - And many more!
punlink/
βββ app/
β βββ app.py # Main Flask application
β βββ pun_generator.py # Pun generation logic
β βββ url_lengthener.py # URL lengthening logic
β βββ models.py # Database models
βββ templates/
β βββ index.html # Main page
β βββ stats.html # Stats page
β βββ 404.html # Error page
βββ static/
β βββ style.css # Styles
βββ Dockerfile
βββ docker-compose.yml
βββ requirements.txt
βββ README.md
- Backend: Python 3.11 + Flask
- Database: SQLite
- Web Server: Gunicorn (production)
- Containerization: Docker + Docker Compose
- Frontend: Vanilla HTML/CSS/JavaScript (keeping it simple)
# Create a punny URL for a cat video
curl -X POST http://localhost:5000/shorten \
-H "Content-Type: application/json" \
-d '{"url": "https://youtube.com/watch?v=dQw4w9WgXcQ"}'
# Result: {"slug": "definitely-not-rickroll", ...}
# Create an absurdly long URL
curl -X POST http://localhost:5000/lengthen \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com", "super_long": true}'
# Access the URL
curl -L http://localhost:5000/definitely-not-rickroll
# Redirects to the original URLBecause the world needed more puns and less efficiency. Also:
- Regular URL shorteners are boring
- Dad jokes are underrepresented in tech
- Sometimes you want URLs to be longer, not shorter
- We have Docker, might as well use it
- SQLite deserves more love
Have better puns? Found a bug? Want to add more ridiculous features?
- Fork the repo
- Create a feature branch
- Add your puns/features
- Submit a PR with a punny title
MIT License - Use it, abuse it, make it punnier.
- Thanks to all the dad joke enthusiasts
- Stack Overflow for the memes
- Everyone who thought URL shorteners needed more personality
- Puns may cause eye-rolling
- Long URLs might break your layout
- May induce uncontrollable urge to make more puns
- Not guaranteed to improve productivity (quite the opposite)
Having issues? Create an issue on GitHub. We promise to respond with at least one pun.
Remember: Life is too short for boring URLs. Make them punny. Or make them long. Or both. We're not here to judge.
Made with questionable humor and Python π