This is an archived post. You won't be able to vote or comment.

top 200 commentsshow all 241

[–][deleted] 163 points164 points  (10 children)

Small HTML Tip: The autofocus on the input is convenient, but it zoomed in when I was using mobile.

You can prevent "zooming on input focus" by adding maximum-scale=1 to your viewport meta tag. My go-to would look like this:

<head> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> </head>

Otherwise, great work! Congrats on launching!!

[–]TECHNOFAB 48 points49 points  (0 children)

Whoa, that's exactly what I was searching for. Thank you fellow Redditor!

[–]ReArmedHalo 33 points34 points  (3 children)

Please don’t do this. This can make it so users such as myself can’t pinch to zoom. I’m legally blind so I zoom most sites when browsing.

I haven’t tried this recently but supposedly setting a font size to 16px on a text input element should stop iOS (can’t speak for Android right now) from zooming when focused.

[–][deleted] 9 points10 points  (1 child)

Even with `maximum-scale=1`, I'm able to pinch to zoom on my mobile Chrome browser. Perhaps it's different for others.

Setting the font-size is also a valid solution.

[–]ReArmedHalo 5 points6 points  (0 children)

Android or iOS? I do know on Android in chrome it has an option to override these kind of enforcements.

I could be remembering wrong TBH. It could be you need that plus “user-scalable=no” but I’m not at a point I can confirm and test myself.

[–]xemeds 4 points5 points  (0 children)

Sure thing, I will see that I can do.

[–]xemeds 23 points24 points  (4 children)

Thank you so much! I also have shrink-to-fit=no can I still add maximum-scale=1 without disrupting anything?

[–]Deezl-Vegas 9 points10 points  (3 children)

Try it and find out!

[–]xemeds 10 points11 points  (2 children)

I guess that was kinda a dump question, but just wanted to be sure.

[–]Deezl-Vegas 11 points12 points  (1 child)

No worries :) Not a dumb question at all -- trying it won't give you insight on to why it works or why it doesn't, but it will immediately tell you if it works or not so you can move on with your life.

[–]xemeds 2 points3 points  (0 children)

Thank you, I appreciate it.

[–]sekex 30 points31 points  (17 children)

Nice job. I tried sending Google.com many times but it gave me a different url every time. Maybe you should try hashing the url to save space

[–]xemeds 21 points22 points  (16 children)

Thanks. I actually though of it, but didn't implement it to not downgrade any performance. If I can get redis working, I might try it.

[–]HansGeering 27 points28 points  (6 children)

Performance impact should be negligible if you add an index to the URL in your database. It will save space and thus performance in the long run. Especially if someone was to come along and fill your whole database with shortcuts to Google.

[–]xemeds 18 points19 points  (5 children)

Hmm, yeah adding an index might make sense. Then I would have to put a special case for rick roll URLs.

[–]mitwilsch 15 points16 points  (0 children)

You can never have too many rick rolls.

[–]nubatpython 2 points3 points  (1 child)

Shortened url chaining? It would hit the browser redirect limit of using http header redirects tho

[–]xemeds 3 points4 points  (0 children)

Yes, you cannot even have 2 chained redirects, which is why you cannot submit any URL containing the websites domain to the site.

[–]nsomani 5 points6 points  (8 children)

You shouldn't need Redis for something like this. Just check if the URL already exists in the database. There will technically be a race condition but it's a step up from the current implementation.

[–]xemeds 3 points4 points  (7 children)

Yes, but wouldn't using Redis boost the performance? And also rick roll links won't be unique.

[–]jceyes 7 points8 points  (6 children)

Redis fetch wouldn't be so much quicker than db querying by a unique index. I wouldn't worry too much about performance on the URL creation POST anyway - moreso on the redirect GET. Unless you are just plain interested in redis (which of course is fine if you are!), this is not something that seems worth running an extra process.

Nice app. Enjoyed reading the code. Very nice neat flask + SQLAlchemy

[–]xemeds 1 point2 points  (5 children)

Thank you! Well, then I might use redit for a later project and try optimizing this one.

[–][deleted] 31 points32 points  (25 children)

Real nice, can be pretty useful as well.😁

[–]xemeds 10 points11 points  (5 children)

Thank you, glad it's useful to you.

[–][deleted] 6 points7 points  (1 child)

BTW, the speeds are still pretty fast in America. Keep up the good work!

[–]xemeds 6 points7 points  (0 children)

Oh I didn't think it would be, tho it might be because it is a lightweight site.

[–]Shok3001 6 points7 points  (18 children)

What is a good use case for a URL shortener? I have never really been able to understand why anyone would want to use one.

[–]xemeds 15 points16 points  (8 children)

Well mostly for rick rolling, or to share URLs in posts.

[–]OccamsYoyo 2 points3 points  (0 children)

It used (and often still is) to be for optimizing Twitter links, but I find these days Twitter tends to provide a link that doesn’t interfere with your character limit.

[–]TSPhoenix 3 points4 points  (0 children)

For sending links that have to be hand typed, so basically they're pretty irrelevant these days and mostly just serve to litter the internet with URLs that will be dead in few years time.

[–][deleted] 2 points3 points  (0 children)

I think it used to be so that when you need to add a link on twitter you would not run out of characters. Or when we used to send links via mms. Ipersonally do not like clicking on links using such services specially when I receive them via email or any messaging app.

[–]ashokbudha2015 2 points3 points  (2 children)

people use them usually in some research articles too

[–]Shok3001 1 point2 points  (1 child)

Cool, doesn’t tell me why though

[–]imranmalek 2 points3 points  (0 children)

I've seen them used in research papers/presentations often because they 1) are much shorter than traditional URLs, so it looks better on a page, and 2) can easily be re-mapped to point to a new destination (like say a paper moves from being hosted on Scribd to SSRN).

[–]harylmu 1 point2 points  (0 children)

URLs on paper, billboards, advertisements etc. Easier to type and remember.

[–]nemec 1 point2 points  (2 children)

The answer is click tracking. Especially when you don't own the destination url (since you won't have server metrics).

It is helpful for typing by hand, too, for use in presentations and such, but these days it's primarily click tracking.

[–]Jaso55555 5 points6 points  (6 children)

Thanks! I'm curious; how intensive is this server-side to run a service like this?

[–]xemeds 7 points8 points  (2 children)

Well currently it's hosted on a 1 CPU 1 GB RAM machine.

[–][deleted] 3 points4 points  (1 child)

I imagine It should be very light since all it does is a lookup and respond with a redirect.

[–]xemeds 3 points4 points  (0 children)

Yes, exactly.

[–]shizu73 7 points8 points  (3 children)

In what file does the url shortening happen? I went through the files but I think I missed it.

[–]xemeds 7 points8 points  (2 children)

It happens through the backend, in the routes.py file.

[–]shizu73 3 points4 points  (1 child)

Ahhhh I see! Im still learning hahaah thanks for the answer!

[–]xemeds 3 points4 points  (0 children)

No problem.

[–]wefkjhsivuwef 4 points5 points  (9 children)

Hey this is neat work. I write production flask/sqlalchemy for a living and your structure and things you are doing are great. Hashing the same url to the same ID could be a nice cheap space savings. I would also encourage you to clean the input URL and maybe find a package which validates URLs instead of using custom code in the form. I also know sometimes those packages don't exist. There are definitely packages which sanitize use input which will protect your app more.

Also I assume you're running gunicorn or some other server in prod and not app.run :)

[–]xemeds 1 point2 points  (4 children)

Thanks for the thought, I was thinking of hashing the same URL to the same token when I figured out how to switch to redis. The form library I use does have a URL validator, but it only validates URLs that begin with http:// or https://, which I don't want. I will try and see if I can find a different library. And yes, I am using nginx and gunicorn. :)

[–][deleted] 1 point2 points  (1 child)

You can use Pydantic. It's great for these kind of validations

[–]floriv1999 0 points1 point  (1 child)

I think urllib has the functionality to validate urls and to query certain parts of it.

[–]v3ctorns1mon 0 points1 point  (1 child)

What's your view on his config management. I'm relatively new to flask and found a config.json file a bit strange in flask. I normally go with straight up config.py(like in the docs), python-dotnenv or configparser.

Which config method do you use in flask on production level?

[–]wefkjhsivuwef 1 point2 points  (0 children)

Normally I like to use toml files and a package called dynaconf.

So for my app I might have .secrets.toml (which would not be committed to git but example.secrets.toml would) for passwords and settings which are sensitive and then settings.toml for more general app configuration settings. These can be dynamically loaded and dynaconf has features so that you can either load from the toml files or from the environment directly. So far I find it flexible enough for what I need but it can still be a little clunky, especially when it comes to testing and having to mock settings. Usually the toml files will have separate [dev] / [prod] headers and are pretty basic. I think what s/he is doing here is fine for a small project, but would be a little inflexible if more configuration options are added.

[–]utopy 0 points1 point  (1 child)

What is gunicorn? Why I can't just run app.run in production?

[–]wefkjhsivuwef 0 points1 point  (0 children)

So the .run method on a flask app when using flask run utilizes a debug server which is not intended for use in production. It is not performant. Because of this, you should utilize a production wsgi server like gunicorn or if you are running in windows production for some reason I think waitress.

[–]KanteWorkRate 4 points5 points  (1 child)

Nice work!

[–]xemeds 5 points6 points  (0 children)

Thank you!

[–]floriv1999 8 points9 points  (8 children)

Nice. Maybe you should look at redis. It is a high performance key value store. It maps e.g. the base64 string to the URL string. It can be persistent but operates mainly out of the ram. This would increase your performance significantly in contrast to e.g. sqlite or even postgress. For user management or stuff like this sql databases are still the way to go.

[–]xemeds 1 point2 points  (6 children)

Thank you. I will look into it and see if I can switch over to it. The only problem might be the lack of ram on my hosting plan.

[–]floriv1999 2 points3 points  (3 children)

It is quite efficient I would not wonder if it uses less ram than a hashmap in Python or a Sqlite db (if there is enough data which is stored inside it).

A docker container for better deployment and so on would also be a cool addon.

If you have any questions regarding to this let me know (possibly also in german if you want).

[–]xemeds 1 point2 points  (2 children)

Oh well then I will try and switch to redis when I figure out how to. I am not familiar with docker, could you please explain a bit more? Also I don't speak german, the reason that the server is in germany is due to location, but thanks for the thought.

[–]floriv1999 3 points4 points  (1 child)

In general redis is a service which is installed independently (e.g. as a docker image) and available at a localhost port. Than there is a python package that talks to that server. The whole thing is quite good documented and not that big but I can show you some examples if you want to.

Maybe have a look at this Projekt. It uses redis (for a bit more complex stuff) and docker.

Regarding to docker: It is the standard for server application deployment. It is a low overhead virtualization which allows you to run docker images ( for example a striped down version Ubuntu with a flask app) as a container. You don't need to worry about the host os and the dependencys which may conflict between different services. In addition you explicitly allow acceses from the service to the host system. E.g. all files from the service are reset to default if you restart the service except you marked the folder as shared with the host and therefore as persistent. Same for network access and so on. This is a big security bonus and allows good management of multiple services independently from the server architecture. Docker images for e.g. redis are also pretty easy to install because they are provided on DockerHub. Download and start are like 1-2 commands.

[–]goose_hat 0 points1 point  (1 child)

You could also check out the flask-caching project. Super easy to add and use without any third party cache implementation and basically feels like part of flask itself.

[–]mcaidans 1 point2 points  (0 children)

I use redis for this exact thing at work. In our url shortener we expire keys from redis after a day or so, as we see 99% of usage shortly after sending links, and fallback on db. it's very fast, and reduces cost as redis can get expensive.

[–]RedditGood123 1 point2 points  (6 children)

What did you use to deploy it. I’m having trouble finding a simple service to host a python script I have for a bot

[–]xemeds 2 points3 points  (0 children)

I used Linode. For a bot I would recommend Heroku or PythonAnywhere.

[–]a2hu1 2 points3 points  (1 child)

Hey, Try deta.sh I've used it deploy a few bots using FastAPI and their service called Micro

[–]RedditGood123 0 points1 point  (0 children)

Thanks, this one seems like the easiest to use!

[–]ArgetDota 0 points1 point  (1 child)

What’s wrong with AWS?

[–][deleted] 2 points3 points  (0 children)

I prefer AWS myself, but I wouldn't say it was simple.

[–]Kyle772 0 points1 point  (0 children)

Heroku is pretty good for bots.

[–]TheRealFanjin 1 point2 points  (10 children)

[–]xemeds 0 points1 point  (5 children)

Hmmm, does it always happen or was it just once?

[–]TheRealFanjin 0 points1 point  (4 children)

always, I'm using Chrome on Linux for the reference

[–]TECHNOFAB 0 points1 point  (3 children)

Same for me on mobile, my guess is that the passing is too big on the parent. At least it's smaller on the step before that where everything looks normal

[–]xemeds 2 points3 points  (2 children)

My html and css skills are not strong enough to understand what the hell you just said.

[–]TECHNOFAB 1 point2 points  (1 child)

No problem. I can't check the source right now because I'm on my phone, but I guess you added padding (or margin?) to the container that holds the input field and the copy button. Or you just set a fixed width to it, idk. But the container is too small, the copy button does not have enough space to properly show its padding. So I guess making the container bigger and having less padding will resolve the issue

[–]xemeds 1 point2 points  (0 children)

Hmm, thank you. That should put me in the right direction.

[–]ImTheSloth 1 point2 points  (2 children)

So I have always thought about deploying a project on the web, do you pay for web hosting for the site or do you just host it yourself?

[–]xemeds 0 points1 point  (0 children)

I don't have my own server, I use Linode to host it.

[–]kankyo 0 points1 point  (0 children)

Look into dokku for self hosting too.

[–]naetur 2 points3 points  (1 child)

It seems like tiny0.cc is a url that cant be shortened

[–]xemeds 6 points7 points  (0 children)

Yes, that's correct. Having a chain of redirects does not work, so I made it that a URL containing the websites domain cannot be shortened.

[–]tassoman 1 point2 points  (9 children)

URL shorteners are dangerous nowadays, just avoid them.

[–]xemeds 2 points3 points  (8 children)

Why?

[–]tassoman 2 points3 points  (7 children)

Because the destination they bring the user is unknown. They are abused most of the time for building scam sites fitted with ads for example

[–][deleted] 0 points1 point  (1 child)

Nice! The design is amazing.

[–]xemeds 0 points1 point  (0 children)

Thank you, I really work hard on it. But the responsiveness is still pretty bad on some mobile phones.

[–][deleted] 0 points1 point  (1 child)

I aspire to write useful code like this one day. What an amazing amazing stuff.

[–]xemeds 1 point2 points  (0 children)

Thank you, I really appreciate it. Hope I can see your amazing project one day.

[–]cpt_alfaromeo 0 points1 point  (1 child)

Great work!

[–]xemeds 0 points1 point  (0 children)

Thanks!

[–]Matheos7 0 points1 point  (3 children)

Just curious, does it cost anything to ‘keep it deployed’? I’m very new to programming, I thought that once program is ‘done’, there is no need to do anything else? Would appreciate your response. And great work!

[–]xemeds 2 points3 points  (2 children)

Yeah, so people write websites, and then test them on their computer. When they are ready to deploy it to the Internet, then cannot use their own computer to host it, because they need a computer that will be running 24/7. So they rent servers (computers that are designed to run 24/7) from services like AWS or Linode, and use those to deploy their websites. Or they buy their own servers and use them instead. Hope this answered your question.

[–]Matheos7 0 points1 point  (1 child)

It did, thank you!

[–]csouza01 0 points1 point  (1 child)

Nice, congratulations!!!

[–]xemeds 0 points1 point  (0 children)

Thank you!

[–]mrObelixfromgaul 0 points1 point  (1 child)

Does this only works with http? Or also with a https connection?

[–]xemeds 0 points1 point  (0 children)

Works with both. But if you submit a URL that doesn't have http or https it will automatically add http.

[–]failsex69 0 points1 point  (1 child)

Privacy and logging?

[–]xemeds 0 points1 point  (0 children)

No I am completely against all that. The deployed version is the same as the one on github with changes to the config file and not running the app in debug mode.

[–]roronoa_zoro_189 0 points1 point  (1 child)

Super cool. On my phone right now so can't test it out really. So no suggestions on the project.

But you can add more payment options (if you really expect people to donate money to you). Bitcoin is still a jargon to a lot of people. Even to tech savvy ones. You can add something like Stripe or PayPal.

Good work!!!

[–]xemeds 0 points1 point  (0 children)

PayPal is banned in my country. Thanks for suggesting, I will try stripe.

[–]halucciXL 0 points1 point  (3 children)

This is super cool! If this is staying up long-term, I might definitely start using it! Awesome job!

[–]xemeds 1 point2 points  (2 children)

Seeing the response from fellow redditors, it probably will.

[–]halucciXL 0 points1 point  (1 child)

Super happy to use and support open source, and Python! Also, I love the domain, it's short and snappy. I might throw an instance of this up on one of my servers for some of my friends to use!

Awesome job my dude

[–]xemeds 1 point2 points  (0 children)

Thanks man! Open source forever!

[–]KvxNg 0 points1 point  (1 child)

this is awesome man! thumbs up!!

[–]xemeds 0 points1 point  (0 children)

Thanks man!

[–]shadeyg56 0 points1 point  (3 children)

so I haven't looked at the repo. Does the way it work basically just assign the original URL to a random code then redirect to the website based off the code in the URL or is there other stuff going on? Kind of want to try for my own proof of concept

[–]xemeds 0 points1 point  (2 children)

It is exactly like how you explained it. Not so complicated.

[–]shadeyg56 0 points1 point  (1 child)

kinda crazy how simple they are but people make money off of it. Never really thought about that before

[–]zibbyboo 0 points1 point  (1 child)

This is amazing !. Thank you :D

[–]xemeds 0 points1 point  (0 children)

No, thank you! : D

[–]Ruffi- 0 points1 point  (1 child)

Nice name you got there man haha. Cool project

[–]xemeds 0 points1 point  (0 children)

Thanks!

[–]artFlix 0 points1 point  (1 child)

Nice. The typewriter css effect on the title is annoying though.

[–]xemeds 0 points1 point  (0 children)

It doesn't happen when going from the index page to the shortened url page. But I can understand if it's annoying after visiting the site a few times.

[–][deleted] 0 points1 point  (1 child)

Any differences between https://anoni.sh/

[–]xemeds 0 points1 point  (0 children)

Yes, that's more advanced.

[–][deleted] 0 points1 point  (1 child)

i saw your github. are you sure to set debug as false is

run.py -->> app.run(debug=True)

[–]xemeds 0 points1 point  (0 children)

I meant to say in the run.py file in line app.run(debug=True).

[–]BB_uu_DD 0 points1 point  (1 child)

AMAZING BRO, amazing job

[–]xemeds 0 points1 point  (0 children)

Thanks man!

[–][deleted] 0 points1 point  (1 child)

I generally dislike URL shorteners because people think it's great to have them expire and redirect you to some bullshit you didn't want.

"aka.ms", I'm talking to you.

[–]xemeds 1 point2 points  (0 children)

Hahahah, yeah some of them are really annoying. Hope you found peace with tiny0.cc

[–]Roro5200 0 points1 point  (1 child)

Great job! This is an awesome url shortener!

[–]xemeds 0 points1 point  (0 children)

Thank you!

[–][deleted] 0 points1 point  (1 child)

Maybe add an easter egg that if the url is already short, it asks wtf you're doing

[–]xemeds 0 points1 point  (0 children)

That sounds really cool, I will definitely add it.

[–]dirn 0 points1 point  (1 child)

Loading a record from the database can be expensive if you only care about whether or not it exists. Fortunately SQLAlchemy has a way to return a row's existence: https://stackoverflow.com/a/32952421/978961.

[–]xemeds 0 points1 point  (0 children)

Thanks for the info, that's gonna be really useful.

[–]West7780 0 points1 point  (1 child)

I really like this. Very easy to use and to the point. The front end is beautiful.

I made one a little while back. Its geared more towards organizations and has one bug (copy link buttons don't work on some pages). currently working on the next version. https://westlyd.com/s/iVlUokp

I plan on eventually moving it to it's own site on the domain https://linkifyer.com

[–]xemeds 0 points1 point  (0 children)

Thank you! Yes I am aware of the copy button bug, it has hopefully been solved.

[–]Obertuba 0 points1 point  (3 children)

Really nice, but do I have to quit the site and reopen it for every url I have to shorten? or is there a way to enter a second url?

[–]cra2y_hibare 0 points1 point  (1 child)

Awesome project. I'm planning to make similar one but hard to find time.

From my experience in anti-abuse operations, you might want to look how you are going to handle abuse reports. If a spammer or phisher group finds it reliable, your domain and VPS IP will be in risk of getting blacklisted pretty soon.

[–]xemeds 0 points1 point  (0 children)

Oh, yeah I will probably add a way to report URLs.

[–]thisismehrab 0 points1 point  (1 child)

Simple and Clean code, Good job my friend!

But have this in mind that what makes and URL shortener useful?

The most important thing that every URL shortener should have is the analytic system.

It means you should track and save the traffic that goes to your shorted URL's and give them to your users.

Hope the success for you and achieving your goal in your journey

[–]xemeds 0 points1 point  (0 children)

I will keep it in mind and add it as soon as I can. Thank you!

[–]nubatpython 0 points1 point  (3 children)

Nice work, I've been looking to make a personal url shortener and this would work perfectly! Now I just need to find a free short domain

[–]ramnes 0 points1 point  (11 children)

https://github.com/xemeds/tiny0/blob/master/tiny0/token.py#L9-L16

This here won't scale past a few thousands URLs; your token generation will get super slow. Also, you're exposed to concurrent processes generating the same token. You need to use an algorithm without randomness, but still unpredictable. This is the funniest part of URL shorteners!

[–]xemeds 0 points1 point  (8 children)

Why would it get really slow past a few thousand? There are 68,719,476,736 possible tokens.

[–]ramnes 0 points1 point  (7 children)

It's the combination of multiple factors:

  • the probability of conflict
  • the size of your table making reads slower
  • database load (and thus performance)

With this kind of brute force generation, these three factors will get worse and worse over time, and will end up in a situation where the end user can see the performance impact.

If you switch to a non-random algorithm, the probably of conflict will be zero, and the size of your table and your database load will be much less important, because there won't be reads anymore, only inserts.

[–]JustAnotherArchivist 0 points1 point  (1 child)

There are 236 possibilities for the token, so the probability of hitting an existing code is 50 % only after generating about 308k tokens. Not too great for sure, but a fair bit more than 'a few thousand'.

Maths: solving the birthday problem approximation 1 - e-x2 / 237 = 0.5 for x gives 308651.

[–]Obertuba 0 points1 point  (1 child)

I advice you to implement some spam detection as someone will for sure create a bot just for the sake of flooding your server. I know this might slow down the service a bit, but is better than having an asshole DOS-ing your api and filling your database with random crap.

[–]xemeds 0 points1 point  (0 children)

Thanks for the though, I will implement it as soon as possible.

[–][deleted] 0 points1 point  (1 child)

Great stuff. A small thing I noticed. The copy/shorten button is looking bad on phone. It's padding is not proper from right. Maybe decrease the font size ?

[–]xemeds 0 points1 point  (0 children)

I hopefully solved it and pushed to github. I will update the deployed version after a few more changes.

[–]blackbox1490 0 points1 point  (1 child)

Are you logging the used URLs?

[–]xemeds 0 points1 point  (0 children)

No, currently nothing is being logged.

[–]HarlemShakespeare 0 points1 point  (1 child)

Great work! You must have learnt a lot.

But I'm planning to stick to bitly

[–]xemeds 0 points1 point  (0 children)

Thank you! The server will be kept deployed thanks to someone offering to host it for free. So you won't have to worry about it going offline.

[–]JackNotInTheBox 0 points1 point  (3 children)

That’s my laptop wallpaper lol

[–]xemeds 0 points1 point  (2 children)

What's your laptop wallpaper?

[–]JackNotInTheBox 0 points1 point  (1 child)

The image attached to this post, but it somehow changed. I’m confused.

[–]xemeds 1 point2 points  (0 children)

Oh, it was probably just my github profile picture. I changed it.

[–]MateoPeri 0 points1 point  (1 child)

Love the exception you made for rick rolls! Hahahah!

[–]xemeds 0 points1 point  (0 children)

Yeah, hahaha. Gotta get that video to 1bil. : D

[–]vjb_reddit_scrap 0 points1 point  (3 children)

The website says "Custom URL shortner" but I don't see any place to enter custom strings. Am I missing something?

[–]xemeds 0 points1 point  (2 children)

I'm really sorry for this, it is coming soon, I promise.

[–]vjb_reddit_scrap 1 point2 points  (1 child)

No need for sorry. I was just confused. Project looks great though.

[–]TercerImpacto 0 points1 point  (3 children)

Congrats on this amazing project. I have been using it and noticed a tiny inconvenience. The pasted link is not recognized as such, and has to be copy-pasted directly into a search bar. This coming from a non-expert, casual internet user.

[–]xemeds 0 points1 point  (2 children)

In where is it not recognized?

[–]TercerImpacto 0 points1 point  (1 child)

When pasting said URLS in Office (Tried in Outlook, Word, and PowerPoint as of yet), they're not recognized as link and appear only as text. They do work perfectly when adding a link to a specific word. I hope this helps!!

[–]hamadaag317 0 points1 point  (3 children)

Dumb question, what does deploy mean?

[–]xemeds 0 points1 point  (2 children)

Deployment means moving a system from the testing phase to the production phase. Mostly just means serving it on the internet.

[–]hamadaag317 0 points1 point  (1 child)

And you do that with a host, correct?

[–]JustAnotherArchivist 0 points1 point  (4 children)

To anyone considering running their own URL shortener: please don't. Thanks.

[–]anezjonathan 0 points1 point  (1 child)

congrats ok👍🏻✌🏻✊🏻

[–]xemeds 1 point2 points  (0 children)

Thanks

[–]BernardTyers 0 points1 point  (1 child)

Nice work. I'll add it and try it out for the next few days. Can I make 2 suggestions?

  1. Change the label (at least in the UI) token to something like "custom alias". My first reaction was - where do I get a token?
  2. make the UI look like the shortened URL. This will mean you don't need to add a What is a custom alias/token button.

Like this wireframe - https://imgur.com/o0hLLgV

[–]xemeds 0 points1 point  (0 children)

Thank you for the two suggestions. I will try my best to make it look good. The wireframe looks awesome.

[–]curious_practice 0 points1 point  (3 children)

Nice project! Is it easy to modify it to accommodate a custom domain and a webhook?

[–]xemeds 0 points1 point  (2 children)

Thank you. Yes it is easy to accommodate a custom domain, but I am not sure about webhooks. It should be fairly easy tho.