[HN Gopher] Show HN: My personal website is a shell
       ___________________________________________________________________
        
       Show HN: My personal website is a shell
        
       Author : aavshr
       Score  : 276 points
       Date   : 2021-04-05 16:08 UTC (6 hours ago)
        
 (HTM) web link (aava.sh)
 (TXT) w3m dump (aava.sh)
        
       | tombert wrote:
       | This if fun, few suggestions.
       | 
       | The first command I ran was `ls`, which worked as expected, but
       | then I tried running `./cowsay blah`, which didn't work. I wasn't
       | sure how to run it until eventually I guessed `sh cowsay blah`,
       | and it worked.
       | 
       | Maybe make the `./` shortcut for executing stuff?
       | 
       | While I'm not sure how much work it would be, it might also be
       | kind of cool to implement the `cd` command as well.
        
         | kroltan wrote:
         | Yes, especially since cowsay was marked in a different color!
         | 
         | Expected behaviour from *nix would be that you'd either
         | sh somescript.sh
         | 
         | Or                 ./someexecutable
         | 
         | Of course the extension is not technically required, but it
         | would help in the UX for the user to try running it on the sh
         | command.
        
           | joshspankit wrote:
           | I personally think _this_ is the best solution besides
           | implementing '. /': take the colouring off and simply return
           | "permission denied" when someone tries to 'chmod'
        
           | froh42 wrote:
           | As "cat cowsay" tells me that cowsay is an executable, I
           | wouldn't expect "sh cowsay" to work in any event.
        
         | aavshr wrote:
         | I implemented './' and it should be live now.
        
           | tdy721 wrote:
           | This "just worked" for me. Nice work
        
         | Scarblac wrote:
         | Also I was wondering what 'do-not-run-me' would be so my first
         | try was 'file do-not-run-me', but alas, that command didn't
         | exist.
        
         | amelius wrote:
         | If you type "help", it says:                   sh: run an
         | executable file
        
           | tombert wrote:
           | Yeah, I saw that after, but since it looks like a Unix shell,
           | my first reaction is to just use typical Unix commands.
        
         | ed wrote:
         | I kept trying `./cowsaydo-not-run-me` because `ls` outputs with
         | no separators (`ls -l` fixed me up)
        
           | definitelyhuman wrote:
           | Same here, ls output needs formatting help on mobile. I was
           | hoping glob might work too - could be a useful update
        
           | comprev wrote:
           | Same here on mobile (iPhone 7)
        
         | aavshr wrote:
         | hi thanks for the suggestion.
         | 
         | Yes, I plan to implement './' which is the expected behavior
         | for running executables. I also plan to implement 'cd' and
         | organize the content into nix style directories.
        
         | j4yav wrote:
         | I did the exact same thing and assumed I was seeing some
         | strange behaviour on mobile, until I came here.
        
       | xgbi wrote:
       | Reminds me of
       | https://bellard.org/jslinux/vm.html?cpu=riscv64&url=buildroo...
       | 
       | I'd wager you could _actually_ put a real linux shell in your
       | website with that!
        
       | gorgoiler wrote:
       | It's hard to make a shell that works like a real shell. Make it a
       | shell from a parallel universe instead, or something more like a
       | text adventure game, or a REPL in a context specific to your home
       | page.
       | 
       | A weird aavshr command prompt for probing your inner mind. ADB:
       | aavshr debug bridge. The visitor has just interrupted execution
       | in a novel lisp that runs in your head and can inspect current
       | state and run a handful of functions.
       | 
       | Something less familiar than a shell will give you more freedom
       | to be _really_ weird. REPLs are all the rage and a lot more
       | flexible. Good luck!
        
         | aavshr wrote:
         | thanks for the input, it is indeed hard to make a shell that
         | works a like a real one. I'll keep your words in mind.
        
       | rkalla wrote:
       | Add tab support, how can you make me type out full commands?! :)
        
         | aavshr wrote:
         | will do, I plan to implement all the expected unix shell
         | features, thanks for the suggestion!
        
           | m4lvin wrote:
           | Please also add "arrow up" to repeat the last command :)
        
             | aavshr wrote:
             | hello, thanks for the input. Yeah, implementing history is
             | next in line :D
        
               | dylan604 wrote:
               | the site is so 'shell' like, this actually confused me
               | that it didn't work. that's a compliment on how i had
               | already bought into this being a shell.
        
       | ChrisArchitect wrote:
       | fun! and seeing all the other random shell-inspired personal
       | sites popping up in here made me smile
        
       | maxrev17 wrote:
       | Rm not implemented loool
        
       | aavshr wrote:
       | as suggested by many hn users in this thread, I've implemented
       | './' to execute files and it's live now.
        
       | carlsverre wrote:
       | Nice job! If you want to see a (very hacky) example of
       | autocomplete, history, and inline-image support check out a shell
       | I wrote recently: https://zenith.tech
       | 
       | Code: https://github.com/zenithdb/zenith.tech
        
         | aavshr wrote:
         | thanks!
        
       | 6510 wrote:
       | just one file inthere?? :/
        
       | mraza007 wrote:
       | Hey love your site man, I was actually surprised when I found out
       | about your work. Your company is building amazing product and I
       | remember being interviewed as a user by your company.
       | 
       | Loved the product that you are working on
        
         | aavshr wrote:
         | thank you, yeah we are really excited about our product at
         | work, Deta also gifted me this domain which led me to create
         | this website.
        
       | kroltan wrote:
       | Neat! Though I would recommend making clicking anywhere on the
       | screen focus the text input.
        
       | marvindanig wrote:
       | Nice name, cool project. Keep it up Aavash!
        
       | cschmid wrote:
       | If you want some inspiration, have a look at
       | https://replit.com/site/careers. I believe they're running a
       | docker container, which gives you the full bash experience!
        
         | [deleted]
        
       | yakubin wrote:
       | And... I got rickrolled. Well played.
        
       | css wrote:
       | I tried to go for a shell aesthetic, but it is nowhere near as
       | interesting as yours: https://chrissardegna.com/
        
         | ant6n wrote:
         | That one is really nice because it's an actual website with
         | information that you get without having to put much effort in.
        
           | css wrote:
           | Thanks! Sometimes I worry that the text animation is too
           | slow, but I think its a good balance currently.
        
         | aavshr wrote:
         | looks neat! Do you have the code open sourced?
        
           | css wrote:
           | I'm sure JS devs will hate it, but yes: https://github.com/Re
           | agentX/ReagentX.github.io/blob/master/j...
           | 
           | tl;dr: it appends text from a file to a div, pausing on a
           | specific delimiter.
           | 
           | I only use Github pages for a development testbed, my
           | "deploy" is an FTP copy to my personal web server.
        
       | jhallenworld wrote:
       | I've been waiting for Linux terminals to have inline images,
       | video and particularly GUI for certain programs. I've been
       | thinking of writing this for years now.
        
       | poisonborz wrote:
       | Neat (if not that original) idea and side project, but I hope you
       | know that not too many people will take the plunge to extract
       | info out of something like this. About sites should be about easy
       | showcases. This approach would be better for an online
       | utility/tool.
        
       | rangewookie wrote:
       | this is fun, i agree with the suggestions to make it function
       | more like a real terminal. tab completion is a must
        
       | pachico wrote:
       | Nice and fun. I would use it as website to give to recruiters. I
       | would have saved a lot of time this way.
        
       | colecut wrote:
       | I've enjoyed working on similar projects, they are fun.
       | 
       | A small usability suggestion, since your whole page is a shell
       | and the input field isn't well visually defined, I would make
       | clicking nearly anywhere give focus to the input field.
        
         | aavshr wrote:
         | Hi, thanks for the suggestion. Yeah, this definitely is very
         | annoying when the input isn't focused when you click elsewhere.
        
       | avionicsguy wrote:
       | You are evil!!! I've just rick-rolled myself :D
        
       | avionicsguy wrote:
       | I've been surreptitiously rick-rolled by myself ... funny but
       | kind of evil at the same time ;-)
        
       | rbtprograms wrote:
       | Neat! If I can make one suggestion: I know this is usually not at
       | all what people should with websites, but consider hijacking
       | basic browser hotkeys to augment the shell. Tab for auto complete
       | instead of select next element would be a good start, and I think
       | in this type of situation its acceptable to hijack.
        
         | XCSme wrote:
         | I agree, hijacking is good when it leads to the expected user
         | behaviour. I kept pressing tab to auto-complete the command,
         | but the cursor jumped to the address bar.
        
           | SketchySeaBeast wrote:
           | I kept pressing up to retrieve my last command.
        
         | aavshr wrote:
         | thanks for the input, yes definitely planning to do this
        
           | eyelidlessness wrote:
           | If you do, _please_ check the various meta keys. Hijacking
           | tab is expected here, but not cmd- /alt-tab etc.
        
           | rbtprograms wrote:
           | nice! this is a fun project so I ma glad you are wanting to
           | go further with it.
        
         | ivan888 wrote:
         | Also consider auto focusing the field when the page loads
        
       | great_reversal wrote:
       | I tried `curl` and `wget` before finding the `help` command.
       | Kinda bummed out that tab completion doesn't work. And neither
       | does `ls -la`. Also make it so I can click anywhere to get my
       | cursor back on the right line for typing.
        
       | codethief wrote:
       | `sh do-not-run-me` reminds me of this excellent talk:
       | https://www.destroyallsoftware.com/talks/a-whole-new-world
        
       | rounakdatta wrote:
       | Awesome, did you get a chance to check out the out-of-the-box-
       | thinkers at https://replit.com/site/careers? The original
       | application of the idea aS A full-fledged hiring shell.
       | 
       | Browser is the new cool!
        
       | ape4 wrote:
       | ./cowsay `cat about.txt` didnt really work
        
       | ericls wrote:
       | Many keyboard shortcuts I rely on in a shell is hijacked by
       | browser. So sad
        
       | choletentent wrote:
       | This is the single most awful web experience I had in my life.
       | 
       | I'd look at the comment above as complement, now you know what
       | not to do (:
        
         | imwillofficial wrote:
         | This wasn't helpful, how might OP improve the effort?
        
       | fouc wrote:
       | cowsay and do-not-run-me are up against each together in the ls
       | when I check in safari, i.e. it's not obvious that they're
       | separate commands.
        
         | aavshr wrote:
         | ah thanks for the info, I need to fix it for safari and mobile!
        
       | piinbinary wrote:
       | This reminds me of that XKCD from a few years ago:
       | https://uni.xkcd.com/
        
       | sefsdfse wrote:
       | Don Hopkins did something quite like this a long time ago:
       | http://www.art.net/~hopkins/Don/unix-haters/login.html
        
       | sigmonsays wrote:
       | why not emulate a real shell (ie, a virtual machine) and
       | implement the tty in a web browser?
       | 
       | isolate the system calls with some sort of sandboxed technology
       | so you can provide a real unix experience.
        
         | aavshr wrote:
         | hi thanks for the suggestion. I thought about this but decided
         | against it as: 1. It's slower, I want to emulate the speed of
         | running a shell in your local machine 2. I don't need all the
         | nix shell features since it's a personal website. I can add
         | features that only seem necessary for what I want to tell
         | others about myself.
        
       | diimdeep wrote:
       | Not really a shell, click baited. Sad.
        
       | atum47 wrote:
       | That's pretty cool. I'm working on a text adventure and I end up
       | creating a "shell" as well. One thing I did that I liked very
       | much is auto complete and history. I think it would aggregate a
       | lot to your website as well. Great job!
        
       | Black101 wrote:
       | Command not found : './do-not-run-me'. Type 'help' for available
       | commands.
       | 
       | auto-complete doesn't work also (<tab>)
        
         | aavshr wrote:
         | hello yes sorry, './' and auto-completion don't work as of yet.
         | The website is still early, I plan to implement most of the
         | expected unix shell features soon.
        
           | Black101 wrote:
           | Your site looks nice, but these 2 would drastically increase
           | usability for me
        
       | executive wrote:
       | Your personal website is a blank page with JS disabled.
        
         | lucb1e wrote:
         | I was also rather disappointed that when curling this "shell",
         | nothing happens. Or rather, you just get the minified
         | javascript just like it would give to your browser and using a
         | shell to access this would-be-shell does absolutely nothing.
         | And no tab complete, up arrow, and I see elsewhere in the
         | thread that even ./ didn't use to work. It seems the author has
         | very limited experience with shells and made an -- I would say
         | 'elaborate' but it wasn't -- rick rolling page.
        
           | jraph wrote:
           | Come on, you cannot infer that the author has "very limited
           | experience with shells" from an incomplete (early!)
           | implementation. Read the rest of the thread anyway, you'll
           | understand that you are mistaken very fast.
           | 
           | I agree that a fallback website when JS is disabled (with
           | complete relevant content) would be good (progressive
           | enhancement), with a hint that one may want to try enabling
           | Javascript for fun.
        
         | lostgame wrote:
         | It's as if you're looking for reasons to shit on OP. Come on.
         | 
         | For most websites; there's no reason for JS. For something like
         | this? That's just being a prick about JS for being a prick
         | about JS's sake.
        
       | wtf77 wrote:
       | Useless on mobile
        
       | jswny wrote:
       | Very cool! Mine is a very similar thing written in TypeScript:
       | https://j1.io/
        
       | vletal wrote:
       | Such a great idea! I'd personally consider using busybox in WASM
       | instead of reimplementing a shell. Quick Google search found [1].
       | Have you considered that?
       | 
       | [1] https://tbfleming.github.io/em-shell/
        
         | aavshr wrote:
         | hello, thank you for the pointer. Will definitely look at it.
        
       | sosuke wrote:
       | guest@sif ~ % vi about.txt       Command not found : 'vi'. Type
       | 'help' for available commands.
       | 
       | Very cool site. Looks great! It felt so much like a console that
       | I tried to tab for auto-complete! (^_^)b
        
         | masswerk wrote:
         | JS/UIX [1] originated from the same idea. Compare command
         | "info". Supports vi and (space) invaders. But no globbing. :-)
         | 
         | [1] JS/UIX (2003) https://www.masswerk.at/jsuix/
        
         | aavshr wrote:
         | Thank you. Yes, I just implemented this over the last two
         | weekends and is very early. I plan to implement all the other
         | fun *nix shell features.
        
       | antibland wrote:
       | Great work! I would add that you should turn off auto-
       | capitalization for tablet/mobile devices, to preserve the shell
       | aesthetic.                 <input type="text" autocapitalize="off
       | />
        
       | jll29 wrote:
       | You should support emacs.
        
       | nichochar wrote:
       | Never seen a thread with so little hate and so many suggestions.
       | Made me smile! Good work OP I enjoyed playing around with your
       | website
        
       | PeterWhittaker wrote:
       | Interesting bit of Javascript. Fun.
       | 
       | In the code that handles the long form of ls, I'd suggest
       | ensuring spaces between "file perms" and "file names": Safari
       | gloms them together.
       | 
       | Not sure why "sh" is needed to "run" things, since items are
       | encoded as objects: Why not for...in and if not found "command
       | not found"?
        
         | aavshr wrote:
         | thanks for the suggestions. Yeah, I used 'sh' just for now as a
         | basic command, I plan to implement all the expected nix shell
         | features.
        
       | fsiefken wrote:
       | that's a nice surprise. long ago i implemented my website as a
       | text adventure with parchment.js - it's a bit more usable for non
       | terminal users
        
       | yosito wrote:
       | This is cool. My personal website (https://iamlocaljo.com/) is
       | visually a terminal, though it doesn't support ls, cat, etc and
       | only has commands for page names. Maybe I should add support for
       | ls, cat and other typical shell commands. Good idea.
        
         | aavshr wrote:
         | this look super nice! Great colors and much more informative
         | than my website!
        
         | eyelidlessness wrote:
         | You two should add an Easter egg where you can "ssh" into each
         | other's sites ;)
        
           | jethro_tell wrote:
           | website shell ring!
           | 
           | [NEXT] [PREVIOUS] [RANDOM]
        
             | eyelidlessness wrote:
             | I even almost called it shellring haha
        
               | jethro_tell wrote:
               | heh, would be too fun. the gofer gang is still around if
               | you're all in for text.
        
               | eyelidlessness wrote:
               | My personal site is definitely not a shell, but it
               | occurred to me I could add shell-like functionality as a
               | console easter egg and get in on the fun.
        
       | juangacovas wrote:
       | This reminds me the HTML5 terminal component, which didn't get
       | much attention. I've used it for some API works and is indeed
       | useful / cool
        
       | raghavkhanna wrote:
       | really like the shell ergonomics, how about adding tab
       | completion?
        
       | ajarmst wrote:
       | No command history, no tab completion. One assumes that "shell"
       | is aspirational rather than descriptive. It's an interesting
       | idea, but if you present what appears to be a shell interface to
       | users expecting a shell interface, they're going to wander away
       | pretty quickly after discovering it's merely facade. I wish you
       | luck, but this isn't really ready for visitors yet.
        
         | vxNsr wrote:
         | This is a personal website more for showing off than for being
         | useful.
        
           | ajarmst wrote:
           | That the quality of someone's work doesn't matter because
           | they don't care about it or expect it to be useful isn't a
           | particularly compelling argument.
        
             | vxNsr wrote:
             | I think you're being overly critical of someone's hobby
             | project. This isn't an enterprise app. It's a fun little
             | thing they made and wanted to share with us. If this is how
             | the community reacts to what is really barely a hobby
             | project it doesn't surprise me at all that devs are burnt
             | out from supporting OSS projects that probably have 1000s
             | of ppl like you that complain and expect the world for
             | free.
        
         | majikandy wrote:
         | It is totally ready for visitors. I visited, I enjoyed it.
         | Doesn't seem particularly wise to advise people something isn't
         | ready for people to visit, when those visitors are the only
         | ones who can actually give useful feedback.
        
           | ajarmst wrote:
           | One hopes that the author didn't need me, a stranger, to tell
           | them that this site is missing most of the fundamental
           | features of a shell. Feedback is valuable, but strangers
           | aren't going to visit something that clearly doesn't work a
           | second time to see if they're making progress. There is a
           | reason that early testing and feedback on prototypes is
           | limited to in-house or pre-existing customer review. The
           | author is entitled, and even encouraged, to ignore me--but my
           | feedback is that they should have waited until they were
           | closer to their goal and general feedback would be more
           | valuable than hundreds of copies of "it doesn't work".
        
             | gitgud wrote:
             | > _but my feedback is that they should have waited until
             | they were closer to their goal and general feedback would
             | be more valuable than hundreds of copies of "it doesn't
             | work"._
             | 
             | This is the exact opposite of useful feedback. I hope you
             | realise project that is literally intended for fun...
        
         | aavshr wrote:
         | hi thanks for the input, yes it is very early and I just posted
         | this mainly for validation; I wanted to know if only I thought
         | this was cool or if others also saw it as something fun. I did
         | not anticipate so many people using this. I plan to implement
         | most of the expected shell features soon.
        
           | ajarmst wrote:
           | Cool. It's probably not an original idea, but it's good one.
           | I might even steal it from you at some point. Good luck with
           | the project.
        
         | scudd wrote:
         | I thought it was pretty cool, and glad they shared it.
        
         | racingmars wrote:
         | What definition of "shell" are you basing this on? Some
         | (current) Unix systems I use have default shells that have
         | neither command history nor tab completion.
         | 
         | Easy access to command history and tab completion are certainly
         | niceties that came along at some point, but are in no way part
         | of the definition of a shell.
        
           | ajarmst wrote:
           | ok, I'll bite. What current Unix systems ship with a default
           | shell that supports neither command-completion nor command-
           | history?
        
             | racingmars wrote:
             | The one I have to use frequently is the restricted ksh
             | environment in IBM's IVM/VIOS server, which is AIX.
             | 
             | I believe it does log a short set of command history to a
             | file, but it'd not available with, say, the up arrow.
             | 
             | In general, though, I don't think any form of history is
             | required by the POSIX shell standard, and tab-completion
             | definitely isn't.
        
               | ajarmst wrote:
               | ksh93 supports both completion and history. I lost
               | interest in looking before uncovering information about
               | versions of ksh more than thirty years old, but neither
               | feature is mentioned in descriptions of differences
               | between ksh93 and predecessors, so I suspect the feature
               | has been there for longer. Posix compliance is neither
               | necessary nor sufficient for a reasonable colloquial
               | definition of "shell."
        
       | rainboiboi wrote:
       | pretty cool, makes me want to register one for myself
        
         | aavshr wrote:
         | thanks, you could do it. The code is open sourced
         | (https://github.com/aavshr/aava.sh).
        
       | therufa wrote:
       | I love the idea, but there are a few UX issues which area rather
       | annoying. One such issue is that the <input /> loses focus rather
       | easily, like with as hitting the TAB key. The other thing which I
       | find suboptimal is that the input does not get focus when I click
       | on the "terminal". If I use the shell, I expect to be able to
       | type whenever the pane receives focus.
       | 
       | Another non-technical thing is that as a non-tech user I would be
       | lost, since there's no indication of what to do on the page, a
       | little hint in form of a MOTD would be a nice touch to round it
       | up.
        
         | aavshr wrote:
         | thanks for the suggestions! Yes, the input not focusing is very
         | annoying and other people have also pointed it out in this
         | thread. Will definitely fix that. Also agree about the second
         | point, will probably display help first on load.
        
           | therufa wrote:
           | and also: good job! :) (just to round up the critique :D)
        
       | smusamashah wrote:
       | This can probably go in this list of these websites which look
       | like win 98 mostly https://simone.computer/#/webdesktops
        
       | astatine wrote:
       | A neat side-effect (unintended?) is when I hit ^d to exit the
       | shell (almost by reflex), the bookmark add got triggered on
       | Chrome
        
         | aavshr wrote:
         | Yeah, the website is very early and I just implemented basic
         | commands. I plan to implement keyboard shortcuts, history, and
         | all other fun shell stuff.
        
           | joshspankit wrote:
           | I'd say keep that one. It's a fun little bit of meta
        
             | ubrpwnzr wrote:
             | There isn't one to keep, its just keyboard shortcut in
             | chrome(??)
        
               | Scarblac wrote:
               | He means, don't override it to give it its normal shell
               | meaning, as the current meaning (add bookmark) is pretty
               | desirable for him as owner of the site.
        
       | dllthomas wrote:
       | ... now can you make it work the same over telnet? :D
        
       | tomiplaz wrote:
       | I've done a similar thing few years ago. You can check it out at
       | the bottom of the website at http://138.68.65.145/ (website is
       | old and needs updating, same with the domain). I decided to print
       | the output to the alert popup. I have `clear` and `exit`
       | implemented, and going up/down the command history.
        
       | zekrioca wrote:
       | Very cool! Add some "directory" as sections to your website, so
       | people would "cd" into them to see the various sections (with
       | probably index.html as a default MOTD?). There is also a mini bug
       | when one lists the directory with "-l": the filenames come right
       | next to permissions. Just add a space in between. Great job!
        
         | dhosek wrote:
         | On Safari, I'm getting all the files mashed together.
        
       | aavshr wrote:
       | The website is not mobile-friendly (as of yet)
        
         | suprfsat wrote:
         | est@sif       ~       %       elp       mmand not found :
         | 'elp'. Type       elp' for available commands.       est@sif
         | ~       %
        
       | Exuma wrote:
       | needs a funny response to rm -rf /
        
       | c43verge wrote:
       | I have two suggestions: 1) Add support for tab key so users don't
       | have to type the entire file names 2) On initiation display the
       | available commands or a brief intro text automatically, then let
       | users dive deep into whatever they are interested in (help
       | command works fine but it's a personal website so you would like
       | to give people as much info as possible as fast as you can in the
       | most original way.) It's a quite original idea.
        
         | aavshr wrote:
         | hi thanks for the suggestions. Yeah, I also thought whether I
         | should display the available commands at the start or not, but
         | it makes more sense to do so.
        
           | lostgame wrote:
           | Absolutely do this. The initial blank prompt felt
           | intimidating without any suggestions; and would help with the
           | esoteric aspect of it for certain user sets. :)
        
       ___________________________________________________________________
       (page generated 2021-04-05 23:00 UTC)