Not OP, but usernames usually have restrictions to certain characters and lengths. It's pretty common to not allow : / and ., which would stop it. Space and @ usually aren't allowed either.
So "Go to superspammysite.com for horny pictures" is still an allowed username, right? Or of you skip spaces "superspammysite.com" may be enough that some spammer wants to abuse it.
I think you can't restrict usernames enough to not allow any spam. The only right way is to really just have the email and nothing else in the first confirmation mail.
Then you have "Hello superspammysite.com, welcome to our website." Not enough space for some kind of scam-text like in TFA. And considering that this has not happened in the last 27 years, it does not actually seem that worthwhile for spammers.
This is not a plea for feedback on whether or not Jekyll or Tailwind CSS are good or bad tools to build websites with.
Love them? Good! Hate them? Also fine! But if you have such a website and want to host it on GitHub Pages for free, it's not going to work out of box (unless you are using Tailwind CSS over CDN, or their "Play" version via JS). And here's what to do instead.
I created this tool when writing a blog post on how to use Airtable as a database for a Jekyll website. Personally, I don't like tutorials that build to-do apps (or now, Wordle clones) as I think they are often detached from real world and thus tend to skip important topics. So I decided to build something real that I myself might end up using as a developer.
The demo is now live and it tells you the version numbers for a limited set of things (like top 10 GitHub repositories, plus a few other things). Posting it here so that I can get some feedback from other developers. If others also find this useful, I will continue the work.
Here's my pitch for why it might be useful:
1. It's a fast way to learn what's the current version of something. If you go to the home page and start typing, you will get it in 2 actions (given the thing you're after is in my database). If you type something like https://up-to.date/react in the browser, it now becomes a single-step process.
2. Apart from being fast, this has a potential to prevent mistakes. Many developers trust Google or GitHub as the source of truth on these matters and will not look in other places. But that could lead to mistakes.
Some examples of wrong answers I am getting today (May 5, 2022):
- Bootstrap: if you go to https://github.com/twbs/bootstrap, you will think that Bootstrap's current version is 4.6.1, but if you then go to https://getbootstrap.com, you will know that it's actually 5.1.3
- Rails: if you google Ruby on Rails, the special card on the right will tell you the latest version is 7.0.2.3, but according to https://rubyonrails.org, it's now 7.0.2.4 already
One other thing I want to mention:
Clicking search results on the homepage takes you to a dedicated page. There, you will see an email signup form. I put it there in order to see actual interest: if people sign up, that's the best indicator for me that I should continue working on this project. But I am not asking you to enter your email in that form, only do it if you really wish to get updates on new releases.
Also, this is a static website so it uses a 3rd party tool for capturing emails. You guessed it right, that tool is also built by me.
Being a Starter Kit, it helps compile Tailwind and then remove the un-used CSS. It does not matter if you use Tailwind 2 or 3, it should work.
The idea is that Jekyll is Ruby while the way Tailwind is setup (usually) is easier managed by the available NPMs. This kit makes it easy to marry the two.
I like it as this is simpler than the others I had seen, nothing more than the bare needed to get the work done.
Random rant:
I still don‘t get it. Why is inline CSS supposed to be bad but tailwind is supposed to be fine? And yes, inline CSS lacks features like hover and predefined color palettes. Personally, these days I‘m lost in between them all and have started using them all; a framework like bootstrap, some handy thing like tailwind with a prefix and inline CSS for anything I feel like. Did I mention that I like !important ?
in my experience things like Tailwind are mostly pushed by managers, not developers
the managers see how simple it is to build complex UIs in Tailwind and then project it into how much resources they can save their company and how quickly they'll be able to iterate on design
a major problem with projects that are built with tailwind is that the code produced is unmaintainable, unreadable spaghetti
you can even see it on their own home page if you scroll down a couple sections
> in my experience things like Tailwind are mostly pushed by managers, not developers
In my experience, Tailwind adoption is pushed hard by engineers who use it on side projects and see how delightful it is to use.
And if you think it's unmaintainable, maybe you should explain why you feel that way (apart from your clear distaste for it). My counterpoint is that it's amazing to be able to pick up a project after months or years and instantly understand what's going on.
we might have different experiences, but in my view when you take the downsides into account: a build system requirement and very large amount of dependencies, then Tailwind isn't worth it
you should avoid large dependency trees and if possible avoid the JS-ecosystem altogether, because these dependencies introduce security vulnerabilities routinely
we already have web components which support scoped styles, so you can just build a component once and reuse it everywhere else in your code
I really dislike the js ecosystem, but as mentioned in my other comment, there is barely any security risk in shipping a compiled css file. Most of the deps are just there for file system watching and live-reloads.
Regarding web components, you can just use them with tailwind, they are not complementers. Hell, if you want to have a stylized button, of course just write it once, but the reusability comes from it being a component — I really have to question the reusability of CSS styles that are more complex than a few properties. Like, do you honestly reuse the style of a button in your menu? Perhaps the color scheme and font, but those should be variables to begin with.
> there is barely any security risk in shipping a compiled css file
not when you require 500 dependencies to actually compile the css
imagine running “npm run build” but instead of getting a css file you get your hard drive wiped out, because some author of random npm module decided it’s April Fool’s day today
this is a hard reality than many are not willing to acknowledge because of all the hype around JS
I agree that it is currently a very real security risk but at the same time we should ask ourselves what on Earth are our OSs do? Because my phone could protect me from that 100%. Running arbitrary code should pose no such threat ever.
FWIW I'm a (developer turned) manager who took over a team that was using tailwind and said "hey if you wanted you could do X or Y or Z as an alternative to tailwind..." and everyone metaphorically gasped in horror and said that tailwind was better than anything they had collectively done before.
I didn't get it at first either but I think perhaps a surprisingly big part of it is the fact that our UI is based on React and having everything contained within each component so you don't have to go hoping around between files is much nicer. And then it's just a thorough, tasteful and well thought out framework based on modern principles.
Everyone is tired of defending "inline style" for a long while now. It has `hover:bg-gray400` and thing like `md:w-1/3` and some fancy animation too. I think they should start creating 2-3 properties size classes more, currently it's mostly 1:1.
Tailwind employs utility CSS methodology, but it's not equivalent to inline. It standardizes your core elements (colors, font sizing, spacing) which ensures the consistency of a framework mixed with the flexibility of inline.
Any reused styles (eg button) should be turned into a class via composition.
So it's flexible, but also ensures adherence to your company design standards.
Here is my thought process, but take it lightly as I have not been part of front-end teams for quite a long time. It is more about how your code modules are organized, for what purpose, and how it will be managed.
I would say go bang-bang with all the classes for Marketing/Landing Pages and websites that will change regularly both in code and final designs.
Now, for a user logged in WebApp where many engineers (front + back) will work but want to leverage TailwindCSS without having to write everything from scratch, leverage its capabilities, but start writing your classes -- use TailwindCSS as a utility.
TailwindCSS makes it easy to get in new members to the team, and even new developers, just like Bootstrap does. It gives you the advantage of using it as your tamed tooling, complete with sharable design tokens between designers, the front-end, and the back-end.
Imagine you have 100 Jekyll templates that all contain a few dozen instances of <div style="display: flex; ..."> don't you feel you're wasting some bandwidth by not creating a .flex { display: flex; } class to handle that common case? This is all Tailwind is doing.
gzip is remarkably efficient to reduce duplicate repeating strings.
You could have 10 classes or raw styles repeated 50 times and all instances of those might condense down to 1 string of WWUElinMSS1J1TQwMFFISi7KtsMiZAuVKU.
Thanks for reading it, and raising some very good questions. I tried to keep the blog post short, as my side of this story is how I helped this business build the MVP, not the business itself.
Here are some answers:
- The market was definitely not USA
- He made some kind of an arrangement with his employer, where he helped them during the transition period after merger (something he really didn't want to do, given he was being fired right after) and they didn't come after him for entering the same market as a much smaller player.
- Initially he handled all the issues you raised (and ones you did not) manually. At scale, you cannot handle courier demand manually, that's why you need software in this business. But he didn't start at scale, he just started. Did things that didn't scale. After we launched, he didn't sit back and watch money pile in. He was there all day, refreshing my non-autorefreshable application and being on the phone with couriers and restaurants and sometimes end customers, making sure it all didn't fall apart.
- The outcome: as I said, this was not a US-based business and the money he made was not the US money (both in terms of currency and scale). He built a business of a local importance in a small market. To me, there's nothing wrong with having a small bootstrapped business. In fact, that's one of my goals in life.
When the pandemic hit, food delivery became really hot and 3 startups of global scale have entered his market. His former employer didn't survive, even though they had nearly 100% of market share at some point. So he had to pivot as well. Instead of running a delivery business, he is now running a SaaS business - offering only the software to restaurants who want to handle online orders themselves (with in-house delivery) to avoid paying 30% marketplace fees. This allowed him to focus his attention elsewhere, while running this SaaS on the side, with nearly 0 involvement and exactly 0 employees.
Thanks for the reply. Good to hear he's pivoted to SaaS, I think its a better business model and managing a 3-sided food delivery marketplace without funding or scale sounds like a nightmare
> I assume there was some additional context about the order in the form that the restaurant filled out, to assist in the end-of-month bookkeeping?
Sure, there were a couple extra fields.
> And unless you built reporting into the MVP, I bet your friend got to learn how to use some kind of database GUI (e.g. phpMyAdmin) and/or basic queries?
I don't really remember, but I bet we'd include an option to export to Excel. This project was built on Rails, and there are readily available gems to export data. Also, I believe we had a dashboard powered by https://github.com/ankane/chartkick. Setting it up may have taken 50% of time. Was it necessary? No. Did I mention this in my post, saying we could have done it in a day? Also no :D
> This tripped me up for a second. In this context, "free" indicates that the courier was available..
Thanks for catching this, changed it to "available" for clarity