[HN Gopher] Show HN: I wrote a "web OS" based on the Apple Lisa'...
       ___________________________________________________________________
        
       Show HN: I wrote a "web OS" based on the Apple Lisa's UI, with
       1-bit graphics
        
       https://lisagui.com/info.html  This is a web OS I wrote in vanilla
       JS that looks like the Apple Lisa Office System (1983-85), with
       other contemporaneous influences and additional improvements and
       features. It's currently in alpha and isn't remotely bug free. I
       had been holding off on posting this here until it was somewhat
       presentable and useful. Please note; the Lisa conforms more
       literally to the desktop metaphor than most modern GUIs - some of
       the important differences are mentioned in the readme.  This is a
       complete recreation of the UI in JS; it all renders to a single
       canvas element. It's not a CSS theme, and not an emulator ported to
       JS. None of the code is written by Apple. I'll be happy to
       elaborate more in the comments, but the short version is the entire
       UI is defined outside the DOM using JS objects. Thus, every
       interface element - menus, windows, controls, and even typefaces -
       was recreated from scratch. There are no font files - I wrote my
       own typesetting system, which supports combining multiple text
       styles and generates new glyph variants on the fly.  Many of the
       technical decisions I made were motivated by a desire to have this
       look the same in every browser. That's harder to do with the DOM
       and CSS, and why I moved as much logic as I could to JS. Also, the
       only part of the project outside of vanilla JS and standard web
       APIs is the Gulp toolkit, which I'm using as a minification/build
       tool. No vibe coding was used to make this!  This is based on a UI
       from the 80s, and won't work well on your phone. If you insist on
       running it that way, turn on trackpad mode in the touchscreen
       settings panel of the preferences app. For best results, install it
       as a PWA (add it to your home screen). Also there are some odd
       Android bugs; the native touchscreen keyboard is currently broken,
       and there's an issue with the cursor when dragging windows.  I
       realize there's not a whole lot to do within LisaGUI right now;
       I've got a big list of additional features and apps I'll be adding
       in the future. I've been working on this project for a while, and
       I'm eager to hear people's feedback and answer questions about it.
        
       Author : ayaros
       Score  : 467 points
       Date   : 2025-07-06 18:32 UTC (1 days ago)
        
 (HTM) web link (alpha.lisagui.com)
 (TXT) w3m dump (alpha.lisagui.com)
        
       | mysterydip wrote:
       | I'm on mobile so only able to try a couple things, but impressed
       | with how responsive it is! Thanks for sharing
        
         | ayaros wrote:
         | Thanks for looking!
        
       | Jonovono wrote:
       | Crazy cool, wow!
        
         | ayaros wrote:
         | Thank you!
        
       | subjectsigma wrote:
       | Just clicking around I accidentally highlighted the background
       | element or something, which caused the whole page to turn blue.
       | Then no matter what I clicked I couldn't get it to un-select.
       | Making everything blue didn't ruin the experience or anything but
       | it was a little annoying. Safari 18.5 (20621.2.5.11.8) and Google
       | Chrome 138.0.7204.93.
        
         | humptybumpty wrote:
         | Same on iphone. Maybe a swipe or something and it selected the
         | whole page blue
         | 
         | Edit: doing nothing will do the autoselect. Odd
        
         | pvg wrote:
         | I think that tint is intended to emulate the look of the Lisa
         | CRT.
        
           | ayaros wrote:
           | Yes, that's correct. There's a variety of palettes to choose
           | from in the preferences!
        
         | rgovostes wrote:
         | I had the same reaction, but it's intentional. Open the
         | Preferences app, check Decorate Desktop, and then select
         | something other than Pale Blue Dot from the color palette
         | picker.
        
         | ayaros wrote:
         | Unless the canvas element itself is being selected - which
         | would be a big oversight on my part, that's the default color
         | palette, which is a blue tint to mimic the Lisa's CRT. Right
         | now, it isn't applied until the settings start loading.
         | 
         | If this is causing any confusion I might put a priority on
         | saving this setting in a way where it can be applied
         | immediately as the page is loaded.
        
           | subjectsigma wrote:
           | I think you and other commenters are correct - it's just the
           | theming. I can't get it to _not_ have the tint on startup and
           | it goes away when changing the theme as rgovostes described.
           | The reason I was confused was because it starts out as black-
           | and-white and then turns blue, and the blue is basically the
           | same color as selecting text! Oh well, I feel silly now.
        
             | ayaros wrote:
             | Yeah. This is part of why I wanted to get this on places
             | like HN eventually. This is valuable user feedback! For the
             | longest time I kept this project totally secret.
             | 
             | What I'll probably do is serialize the setting data to
             | localstorage so it's available before the system starts up
             | and loads from IndexedDB.
        
       | smokel wrote:
       | Perhaps I'm doing something wrong, but the line widths in the
       | characters are quite inconsistent. For example the two l's in
       | "install" have different widths. This makes something pretty
       | amazing look slightly disappointing.
       | 
       | (Tested in Firefox and Chrome on desktop.)
        
         | ayaros wrote:
         | I'll take a closer look at this. Might be a kerning issue.
         | 
         | EDIT: I'm honestly not sure what this issue might be... If
         | you're up for sending me a screenshot, there's an email link at
         | the bottom of https://yaros.ae/.
        
       | rgovostes wrote:
       | The shadow text style and fatbits editor in the Preferences app
       | really took me back. Other than a lack of close buttons on
       | windows, it's remarkable that you can strip away 40 years of UX
       | "innovation" and the result is still productive and intuitive.
       | 
       | (Edit: Menus staying open after one click was a welcome
       | improvement that I think came much later.)
        
         | layer8 wrote:
         | You can double-click on the icon in the top left corner of a
         | window to close it. (Which, I guess, is just the shorthand for
         | File > Set Aside.)
        
           | ayaros wrote:
           | Yes.
           | 
           | Setting aside specifically places something on the desktop.
           | Save-able documents have a "save and put away" option which
           | "refiles" it back in its folder without putting it on the
           | desktop.
           | 
           | You made me realize I still need to add a separate "put away"
           | option on all windows regardless, so there's always a menu
           | command that can be used to refile something.
           | 
           | The desktop isn't a normal directory - I discuss this in the
           | readme a bit.
        
         | ayaros wrote:
         | Yes, sticky menus arrived much later. I put the extra effort to
         | add them here because everyone's so used to them now. Both
         | options work - you can single-click to keep a menu open, or you
         | can hold down the mouse and drag to open a menu which closes
         | when you release the mouse.
         | 
         | There's at least one Mac extension I know of that lets you use
         | sticky menus on earlier versions of Mac OS, like System 6. I
         | figured I'd backport that feature a little further, so to
         | speak...
         | 
         | EDIT: Also, forgot to mention it in this reply, but you double
         | click the titlebar icon to close the window.
        
       | hackyhacky wrote:
       | How did you research this? Do you _own_ a Lisa?
        
         | layer8 wrote:
         | There are Lisa emulators out there: https://emulation.gametechw
         | iki.com/index.php/Apple_Lisa_emul.... And you can find ROMs on
         | macintoshrepository.org.
        
         | ayaros wrote:
         | Yes I do, a Lisa 2/10! LisaEm was also invaluable. Also, just a
         | general obsession with vintage computers and UIs helped quite a
         | bit!
        
       | ayaros wrote:
       | The Lisa doesn't have square pixels, so the canvas is scaled to
       | be 1.5x as high as it is wide. This generally looks fine on high-
       | dpi displays, because there's technically twice as much space to
       | render with (pixels are 2px wide by 3px high). However, things
       | will look distorted on a lower resolution display (where pixels
       | are 1px wide by 1.5px high). That's just a compromise I made when
       | designing this.
       | 
       | The good news is, if you have a large enough low-dpi display, and
       | you make the window big enough, the automatic integer scaling
       | settings will kick in, and the pixels themselves will be
       | displayed larger. This can be forced via the preferences app
       | (under the display options). If you screw this up, then restart
       | LisaGUI while holding the shift key to reset the scaling
       | settings.
       | 
       | EDIT: Unrelated to this, there are a couple minor bugs with PWAs
       | on iOS relating to the positioning of the canvas. These can be
       | resolved by rotating your device to a different orientation and
       | then rotating it back to the original position... but this is
       | annoying.
       | 
       |  _EDIT 2: To close windows, just double click the icon in the
       | titlebar! This "collapses the window back into an icon."_
        
         | ivape wrote:
         | How do you handle dynamic window/font scaling regardless of
         | browser size (you get it for free with html mostly).
        
           | ayaros wrote:
           | It's integer scaling; it involves changing the width, height,
           | and style attributes of the canvas dynamically. I have a
           | whole class that handles this, and let me tell you it took a
           | lot of effort to get working properly and involved juggling
           | around quite a few parameters, including the DPI, the border
           | width, the pixel aspect ratio, and more. I had to use a
           | ResizeObserver object to detect changes in the size of the
           | DOM's body element.
           | 
           | To get the canvas to be consistently smooth, I had to apply a
           | lot of contrast using a CSS filter, and I set image-rendering
           | to pixelated, IIRC.
        
             | Gormo wrote:
             | It might be worthwhile to overshoot the target resolution
             | significantly with the nearest-neighbor scaler, then
             | downscale interpolatively (e.g. bilinear) to the viewport.
             | This should help dealing with doubled rows/columns and
             | moire patterns, while maintaining visually crisp pixels.
             | 
             | I do something similar when dealing with raw screenshots
             | from DOS games, which are typically 320x200, but intended
             | for 4:3 display, so pixels are 5:6. In this case, upscaling
             | to 1600x1200 (the smallest possible integer upscale to
             | achieve the correct aspect ratio) with nearest-neighbor,
             | then downscaling with bilinear to the target res (e.g.
             | 1440x1080, 960x720, etc.) works really well.
        
               | Dwedit wrote:
               | Not only do you upscale with nearest neighbor then
               | downscale with bilinear, you also make sure that you are
               | using the correct colorspace for downscaling.
               | 
               | The most common mistake is to reinterpret sRGB as if it
               | is a linear color space, and assume that half of RGB
               | 255,255,255 is RGB 128,128,128. But that's wrong. sRGB is
               | a gamma-compressed color space that does not respond
               | linearly.
               | 
               | First you treat all sRGB values as if they are between 0
               | and 1. To convert into linear RGB, take all values to the
               | power of 2.2 (like squaring them). Then you do any math
               | on color values in Linear RGB. For example, half of
               | linear 1 is indeed 0.5. To convert back into sRGB, take
               | all values to the power of 1/2.2 (like a square root).'
               | 
               | This means that 0.5 in linear RGB corresponds to 0.73 in
               | sRGB. You can confirm this by placing a black and white
               | checkerboard next to a square of RGB 186,186,186. They
               | will match in apparent intensity (provided you have an
               | sRGB display that doesn't have viewing angle problems).
               | 
               | Some graphics APIs can do the sRGB to Linear RGB
               | conversion for you automatically, but you need to request
               | the API to do that. This makes the pixel shader only see
               | Linear RGB, but the pixels are coming from an sRGB
               | texture, and are being written to an sRGB buffer as
               | output.
        
           | socalgal2 wrote:
           | The short answer is, you can't
           | 
           | If we're talking about pixel perfect rendering there are
           | various issues in the Web APIs that conspire against you.
           | 
           | devicePixelRatio (dpr) - This is supposed to tell you how
           | many CSS pixels = one device pixel. This particular demo
           | ignores it. On my Windows PC my dpr is 1.25 and the site
           | looks horrendous with every other pixel 4th pixel of a font
           | being double wide (or something along those lines). Not
           | dissing the demo, it's cool. It's uncommon for Web devs to be
           | aware of these issues as like 99.99% are on a Mac and never
           | set zoom to anything other then 100%
           | 
           | The idea was supposed to be, you could take the CSS size and
           | multiply by devicePixelRatio to get the display size.
           | Unfortunately that does not work for various reasons.
           | 
           | There's zoom. Firefox and Chrome change the devicePixelRatio
           | in response to zooming. Safari does not. Even if Safari
           | supported this it's not enough. You can maybe repo how bad
           | the site looks on my Windows PC on a Mac by zooming in on any
           | browser (pick zoom from the menus, not pinch to zoom - see
           | below)
           | 
           | Next there is pixel snapping. The short version is, imagine
           | your window is 3 pixels wide and you ask the browser to make
           | 2 elements side by side each 50% wide. If you check the CSS
           | width both elements will say they are 1.5 pixels wide
           | (getContentBoundingRect().width). But the browser won't
           | display a 1.5 pixel element. I will snap one element 2 pixels
           | and the other 1 pixel. To find out which is which you're
           | supposed to use ResizeObserver with
           | devicePixelContentBoxSize, but again Safari doesn't support
           | this. It's not just with splits, that just the easiest way to
           | demo the issue. Get this wrong and your checkerboard
           | background will have a stripe somewhere where the
           | checkerboard is missing a row or column.
           | 
           | Next there is pinch to zoom. It's separate and reported no
           | where in the Web API AFAICT. The browsers will re-render
           | text/svg to a higher resolution when you pinch to zoom but
           | they don't pass that info to the page so it can not re-render
           | canvases in response.
           | 
           | So: tl;dr, you can't - partly because of Safari. Partly
           | because the Web is missing functionality
        
       | FerkiHN wrote:
       | Wow this is mega cool!
        
         | ayaros wrote:
         | Thanks! <3
        
       | fitsumbelay wrote:
       | very cool, plus so much tasty design and functional tips that
       | spark inspiration. I really love that look of aliased type that
       | still reaches for that calligraphic look that's _just_ beyond the
       | GUI's capacity to display. Nostalgia shmacking me in the taste
       | buds with this one ...
        
         | ayaros wrote:
         | Yes. The text styles were fun to do. They aren't implemented
         | the same way QuickDraw does it, but it's close enough.
        
       | londons_explore wrote:
       | > minor bugs with PWAs on iOS
       | 
       | There are major bugs with PWA's, and I suspect most of them stem
       | from the tens of billions of dollars per year of app store
       | revenue that would be undermined if PWA's actually became
       | useful...
        
         | frumplestlatz wrote:
         | Users aren't demanding and have never demanded good PWA
         | support. I suspect it has more to do with that.
        
           | yoz-y wrote:
           | Random people have no business of knowing what a "PWA" is. So
           | of course they don't ask specifically for that.
           | 
           | People asking for "I just want to have fully featured apps
           | coming from wherever" are aplenty. Apple has pushed app
           | snippets and in-AppStore one shot apps for a long time. These
           | would be much better as PWAs.
           | 
           | Not because PWAs are inherently better. I believe native
           | programs are superior. However history has shown that vast
           | majority of apps are just poorly wrapped websites.
           | 
           | As an aside, iOS PWA support is really phoned in. For example
           | they introduced environmental css variables for safe insets.
           | And then provided no way to test them outside of real device
           | or a simulator.
        
           | slivanes wrote:
           | I'd bet they would if they were offered a nearly 30% price
           | reduction.
        
         | ayaros wrote:
         | Well, yeah... of course. Thankfully, mobile support hasn't been
         | _the_ highest priority.
        
         | dang wrote:
         | We detached this subthread from
         | https://news.ycombinator.com/item?id=44483280.
        
       | reconnecting wrote:
       | Amazing turn on/off effect!
        
         | ayaros wrote:
         | Thanks! I put a lot of effort into making sure it was just
         | right. The delay right after shutdown before the button panel
         | shows up where you see absolutely nothing before noticing your
         | own reflection in the blackness of your screen was also
         | intentional!
        
       | revskill wrote:
       | Cool but color hurt my eyes.
        
         | ayaros wrote:
         | In the preferences app, you can set the brightness after
         | clicking "Set Conveniences," and you can change the color
         | palette after clicking "Decorate Desktop." You may have to play
         | around a little to find a setting that is most comfortable to
         | you.
        
       | JSR_FDED wrote:
       | This is amazing! Thanks for the excellent memories!
        
         | ayaros wrote:
         | Thank you! I'm happy you enjoyed it!
        
       | jonathanlydall wrote:
       | Very cool.
       | 
       | Something I recommend doing for the mouse cursor on mobile is to
       | make it work like Microsoft's Remote Desktop on iOS (possibly
       | Android too, but I'm an iPhone user so don't know for sure) where
       | the cursor isn't where you tap on the screen, but you kind of pan
       | anywhere on the screen which proportionally moves the cursor
       | which is somewhere not under your finger. It's a bit hard to
       | explain, you just need to try using RDP on Microsoft's free
       | Windows App on your mobile device.
        
         | ayaros wrote:
         | Thanks. And yes, I did that! Under preferences, go to the
         | touchscreen options panel, then enable trackpad mode!
        
           | john-aj wrote:
           | That is surprisingly pleasant to use, actually!
        
             | ayaros wrote:
             | Yes, one thumb on each side works great in landscape mode.
             | Eventually I'll have to add some UI feedback to this mode
             | when toggling it on or off, which shouldn't be too hard to
             | do with a little CSS since the trackpad and button are just
             | div elements overlaid on top of the canvas.
        
               | phatskat wrote:
               | I don't know if multi-tap functions are already spoken
               | for, I've only played with this a little so far (great
               | job btw!). I think being able to toggle Trackpad Mode
               | with a three-finger tap would be a nice _touch_.
        
       | Avshalom wrote:
       | > Author's note: I pronounce the letters in GUI separately. Why
       | would you ever pronounce it "gooey?" Please don't do that. Just
       | don't.
       | 
       | Solidarity!
        
         | johnklos wrote:
         | ...because fighting about silly things that are just fun to
         | poke each other about is much more fun than fighting about
         | things like politics in this day and age...
         | 
         | vi versus emacs, vi versus vim, (guh sound)IF versus (j
         | sound)IF, m68k versus x86, Mac versus Amiga, BSD versus Linux,
         | et cetera.
        
           | ayaros wrote:
           | Yes, I know right! Imagine what kind of beautiful world we
           | could live in if we spent trillions of dollars on this
           | instead of the military industrial complex!
        
           | bbarnett wrote:
           | Where I grew up, in the 80s, it was a toss between a mouse
           | and trackball for people. Same sort of arguments.
           | 
           | I kind of like both.
        
         | ayaros wrote:
         | Thankfully someone agrees with me!
        
           | bbarnett wrote:
           | Initialisms are just that!
           | 
           | Otherwise, how can you tell snmp from sntp from smtp!
        
           | Avshalom wrote:
           | There! Are! Dozens! Of! Us!
           | 
           | (actually there's a shit ton of us who learned computers via
           | text and pronounce things _correctly_ )
        
             | ayaros wrote:
             | YES
        
         | wpm wrote:
         | We should pronounce all acronyms/initialisms.
         | 
         | TUI = tooey
         | 
         | CLI = clee
         | 
         | TCP/IP = tickipip
         | 
         | GPT = gipity
         | 
         | DNS = dunce
         | 
         | HTTP = Hittup
         | 
         | USB = Oosbuh
         | 
         | USB-C = Oosbuhc
        
           | ayaros wrote:
           | This is pure evil
        
           | hoistbypetard wrote:
           | > GPT = gipity
           | 
           | I'm calling foul on that one. It's "Jay pay tay". Which
           | sounds the same as the French phrase "J'ai pete" or "I
           | farted."
           | 
           | That makes me laugh more than gipity.
        
           | phatskat wrote:
           | My favorite is my friend's pronunciation of "LGBTQIA", or
           | "littebittiqua". Also, I'm definitely gonna start using
           | "dunce" and "Oosbuh", but stick with "USB C"
        
         | Gormo wrote:
         | Almost as bad as people who pronounce 'SQL' as 'sequel'.
        
       | g_host56 wrote:
       | very cool!
        
         | ayaros wrote:
         | <3 <3 <3
        
       | sfblah wrote:
       | So I played the puzzle game on this Lisa and it appears
       | unsolvable to me, which sort of surprised me. Has anyone else
       | given it a shot?
       | 
       | Here's a picture of how far I got: https://imgur.com/a/QhnnC4X
        
         | phyzix5761 wrote:
         | Yeah, I was able to solve it
        
         | ayaros wrote:
         | Oh, it's totally solvable, but it's tricky! You kind of have to
         | strategically "snake" the letters around a bit to sequentially
         | place them in the right spots - you get less and less room to
         | do so as you place more and more tiles.
        
           | smokel wrote:
           | Unfortunately it is _not_ solvable. See this blog post on how
           | to programmatically check for solvability:
           | 
           | https://datawookie.dev/blog/2019/04/sliding-puzzle-solvable/
        
         | Shorel wrote:
         | If it is randomly generated, half of the puzzles are
         | unsolvable.
        
       | Cieric wrote:
       | This is pretty cool and it's surprising how well it works on
       | mobile. I think the shuffle puzzle game has a bug where it can
       | generate unsolvable puzzles. I ran into a parity issue. I solved
       | it with the blank in the upper left but got no response from the
       | game so I don't believe that was the intended solution.
       | 
       | Also checked with an online solver and it verified that there was
       | no solution.
        
         | ayaros wrote:
         | I haven't gone as far as verifying puzzles are solvable - right
         | now I only verify the state of the puzzle is valid. Maybe in
         | the future. For now I guess it will be like solitaire, where if
         | you can't solve it you'll have to reshuffle it.
         | 
         | Incidentally, I'm planning on adding solitaire as the next
         | game!
        
           | Shorel wrote:
           | I remember making that puzzle in C++.
           | 
           | Half of the random states created are solvable, and the other
           | half are unsolvable.
           | 
           | My solution was not checking if the puzzle is solvable (the
           | mathematics of this seem complicated), but starting with a
           | solved one and then do a fixed number of random movements.
        
             | ayaros wrote:
             | That's a good idea.
        
           | Cieric wrote:
           | Oh nice. I don't actually know how to play solitaire, but I
           | know Microsoft used the method of randomly generating them,
           | solving them and then saving solvable seeds. (I believe they
           | had 2 that weren't solvable somehow though so maybe it was a
           | human solving them and it was a typo or mistake)
           | 
           | Also, I was just checking around to see if there were any
           | good methods for telling if a puzzle is solvable without
           | solving it. Seems geeks for geeks have some code for it.
           | 
           | https://www.geeksforgeeks.org/dsa/check-
           | instance-15-puzzle-s... The only other solution I can think
           | of is detecting both configurations (blank in bottom right or
           | top left) and displaying something when either is reached.
        
           | BubbleRings wrote:
           | Great work, great memories on the Lisa.
           | 
           | But sheesh! The first time I play the numbers puzzle on a
           | computer in my life, and the first time in 30 years that I
           | play it at all, and I find out some joker has snapped two of
           | the pieces out and reversed them, making it unsolvable?!
           | Diabolical!
        
           | pedroslopez wrote:
           | I spent so long fiddling with the puzzle game, trying to get
           | a final 2 tiles swapped, just to find it was unsolvable
           | _sigh_
           | 
           | Cool stuff though!
        
             | jcheng wrote:
             | Same here, I spent forever on it :(
        
       | rustystump wrote:
       | These are the kinds of show hn I live for. Tasty vanilla js +
       | learning about an esoteric "Lisa GUI" well before my time. Bravo!
       | 
       | I would love to see a breakout style game or something in the
       | demo/examples but that is my inner child speaking.
        
         | ayaros wrote:
         | Thank you. That means a lot to me!
         | 
         | That's a good game idea. The next game I'm going to do will be
         | solitaire. I was also thinking of trying to eventually make
         | something like the mazewar game from the Xerox Alto to pay my
         | respects to Xerox, although I know that will be an undertaking,
         | especially adding in networking...
        
       | ckrapu wrote:
       | Very cool.
        
         | ayaros wrote:
         | Thank you!
        
       | DigiEggz wrote:
       | Love both the project and the landing page design. Thank you for
       | creating this!!
        
         | ayaros wrote:
         | Thanks! You might also appreciate the 404 page on the alpha
         | subdomain! And whatever you do, do NOT try to open this with MS
         | Internet Explorer! I can't imagine what might happen if you do
         | that!
        
       | leakycap wrote:
       | I never realized it, but I'd never even used an emulated Lisa -
       | until today! Thanks for bringing life back to this old platform
       | and letting us relive the thinking that led off the GUI. Cheers.
        
         | ayaros wrote:
         | It's my pleasure. I am very happy you got some nostalgia out of
         | it!
        
       | hoistbypetard wrote:
       | I never spent a lot of time using Lisa, but I got several
       | opportunities to kick the tires as a Mac repair tech in the early
       | 90s. I even fixed a Lisa or two, and converted one to a "Mac XL".
       | You've captured the UI really nicely, and it was fun to click
       | around. Good job!
        
         | ayaros wrote:
         | I'm really happy you enjoyed it! The Lisa's a really cool
         | machine; definitely easier to work with and service than some
         | of Apple's other designs...
        
       | kaoD wrote:
       | The font looks weird and uneven horizontally (some characters are
       | "fatter" like if they were randomly bold). Is it supposed to look
       | like that? Firefox + Windows.
        
       | shusaku wrote:
       | Unfortunately it doesn't work on my iPhone SE due to the small
       | screen. I'll have to upgrade my hardware if I want to use the
       | latest OS I guess :)
        
         | ayaros wrote:
         | That's definitely way too small! You should try it on a desktop
         | or laptop.
        
       | DustinBrett wrote:
       | Looks great! I love the choice to make it consistent across
       | browsers through canvas rendering. Cool that it's a PWA.
        
       | malkia wrote:
       | This brings back good memories, My first computer was Apple ][/e
       | or /c clone (bulgarian Pravets 8Ts), and then had a 286, later
       | 386 PC with Hercules (monographics) monitor!
       | 
       | So I appreciate when things look really cool, reminds of me
       | Think-Pascal.
        
         | ayaros wrote:
         | Be sure to check out LisaGUI's "Windows 93(tm)" theme which
         | (aside from being a reference to the colors of that other great
         | Web OS) is a Blue/Pink CGA-inspired theme, and the "Through the
         | Looking Glass" icon theme which is literally just icons from
         | Windows 1.x/2.x. (Although I had to make the recycle bin icon
         | myself using the Win95 recycle symbol)
        
       | ww520 wrote:
       | This is awesome. It's actually pretty quick. Major kudos.
        
         | ayaros wrote:
         | Thank you! Although just between you and me, it really depends
         | on the speed of your computer and whatever JS engine you're
         | using. If you open up the bounce demo and start increasing the
         | number of objects on screen, you'll find the FPS dips quite a
         | bit. Also, scrolling through a multi-page text document may
         | also slow things down..... just don't tell anyone! ;)
        
       | int_19h wrote:
       | Is keyboard not supposed to work? E.g. tabbing through the
       | widgets.
        
         | ayaros wrote:
         | The Lisa doesn't have an alt-tab function for Window
         | management, so I haven't added one. Also, it would be difficult
         | to use those keys in particular because it would conflict with
         | your system's alt+tab keyboard shortcut.
         | 
         | When you select text in a textbox, the keyboard should input
         | text. Also, individual menu items have their own keyboard
         | shortcuts. If you're on a PC, it defaults to using the Control
         | key as the "Apple" key. If your on a Mac, it defaults to using
         | the Command key. This option can be changed in the preferences
         | app in the "Set Conveniences" pane.
        
           | int_19h wrote:
           | I don't mean Alt+Tab, just Tab by itself to move focus
           | through the widgets in the current window. I don't know how
           | it's supposed to work on Lisa, but pretty much every TUI or
           | GUI I've seen from early 90s onwards had full keyboard
           | navigation support like that.
        
             | KerrAvon wrote:
             | Nope. AFAIK, full keyboard navigation was first developed
             | for Microsoft Windows, as a necessity, because they
             | couldn't rely on people having a working mouse.
        
       | ceautery wrote:
       | What's up with the clock? Mine was two minutes off of local
       | system time.
        
         | ayaros wrote:
         | The clock is not entirely bug-free and has been a bit of a
         | victim of my impulse towards premature optimization. I've
         | rewrote it once and I'm considering rewriting it again... so
         | it's not just you. It should hopefully work properly if you
         | reload the page.
        
         | magicalhippo wrote:
         | Here it was "on time" except it apparently uses round(), so 30
         | seconds past the minute it would show the next minute.
        
           | ayaros wrote:
           | For some reason I never seem to encounter bugs like this
           | myself! I guess I'll have to do another rewrite of that. Was
           | it just the menu clock? Did the clock app exhibit the same
           | behavior?
        
             | magicalhippo wrote:
             | Boy do I know that feeling :D
             | 
             | I didn't look at the menu clock, only the clock app.
             | 
             | Real cool project tho, kudos!
        
       | ayaros wrote:
       | I've received several comments regarding the font - people are
       | saying some of the character widths appear uneven. The font
       | characters are literally bitmap fonts; each character is printed
       | the same way every time, unless one or more styles is applied to
       | it, but this is done in a consistent way. The Lisa's system font
       | is also of a notably distinct style; the vertical parts of each
       | letter are slightly wider than the horizontal parts to make up
       | for the 2:3 pixel aspect ratio.
       | 
       | If things appear uneven, these issues may be due to viewing the
       | screen at 1x scale on a lower-DPI display, as I mentioned in
       | another comment. The only way for me to debug these issues is
       | with a screenshot. You can press Windows + PrintScreen to take a
       | screenshot on Windows, or press Command + Shift + 3 on a Mac. You
       | can send them to me using the email link at the bottom of
       | https://yaros.ae/ or by messaging me on Bluesky
       | (https://bsky.app/profile/lisagui.com).
       | 
       | Also, I've been posting project updates to the Bluesky account,
       | and I'll continue to do so in the future for anyone interested in
       | keeping up with the project. There's also an RSS link on my
       | website for anyone who's old-school and doesn't want to make a
       | Bluesky account.
        
       | russellbeattie wrote:
       | On the original Mac, the menu bar drop downs didn't stay open if
       | you just clicked on the title. You had to keep the mouse button
       | down, highlight the menu item then let go to activate. Not sure
       | if that is how the Lisa worked.
        
       | em3rgent0rdr wrote:
       | amazing how fast and snappy this UI is, even though it is running
       | inside a browser.
        
       | spagoop wrote:
       | would love to see the source code for this, poked around but
       | couldn't find anything :-)
        
         | ayaros wrote:
         | It's not open source right now... maybe someday, but not right
         | now. :)
        
       | muzani wrote:
       | Kind of an edge case here, but I love making 1-bit palettes and
       | then testing them on old Apple UIs. This is just perfect. I hope
       | you can make the color editable :)
        
         | ayaros wrote:
         | I do have plans to eventually add a UI to add, edit, and remove
         | custom color palette values... it's just a matter of coding up
         | a dialog that lets you type in the RGB values and a label for
         | each user-defined preset. I just haven't gotten around to it
         | yet.
        
       | djaychela wrote:
       | Just trying this out on iPhone on Firefox, and found something.
       | If the phone is rotation locked in portrait mode (which mine
       | normally is) I don't see buttons to install, try etc.
       | 
       | But if rotation lock is off, it's fine. Maybe there's something
       | in the way the resolution is read that is different if the lock
       | is on? Nothing appears in the menu bar at the top so there was no
       | way to do anything.
       | 
       | Amazing efforts here though, now I can actually use it! Truly
       | impressive.
        
         | ayaros wrote:
         | The menu bar is hidden in the installer because that's how the
         | Lisa's installer looked. I definitely need to do some work on
         | layouts to make things more responsive. If your phone's screen
         | is too small the text may overflow and things can get cut-off.
         | But I don't want to cram scroll-able panes into all these
         | dialogs because the Lisa didn't even do that.
         | 
         | I'm balancing historical accuracy with modern constraints with
         | my own self-imposed technical debts, so there's bound to be
         | compromises!
        
         | zoom6628 wrote:
         | I had to scale down a bit using page zoom to see the buttons
         | and after that all was good. Well not good actually .... it was
         | bloody brilliant!!
         | 
         | Love this .... actually made me smile while using it. And so
         | fast!
        
       | rbanffy wrote:
       | In many ways, the Lisa is more sophisticated than our current
       | GUIs. In particular, I liked the way applications meshed into the
       | system and disappeared into stationery - if you want to create a
       | document, double click on its corresponding stationery stack and
       | a new document is created. No need to find open Excel (or
       | LisaCalc).
       | 
       | IIRC, Windows 95 briefly had this in the form of a Templates
       | folder. You added files to that folder and then you could create
       | new copies of those files from the context menu. I don't remember
       | it persisting into other versions of Windows.
        
         | kalleboo wrote:
         | macOS still supports turning any file into a template, a
         | feature first introduced in System 7 back in 1991.
         | 
         | Just Get Info on any file in the Finder, then check the
         | "Stationary pad" box.
        
           | rbanffy wrote:
           | Wow! That's amazing! Never realized it was still there.
        
           | joemi wrote:
           | I can't believe I never knew about this! This could be useful
           | to some of my workflows.
           | 
           | I just looked it up and here's an official help page about
           | it: https://support.apple.com/en-tm/guide/mac-
           | help/mchlp1341/mac
        
         | p_l wrote:
         | Template mechanism was also present in OS/2 Presentation
         | Manager, at least since 2.0.
         | 
         | Windows support for this survived I think until XP at least,
         | but generally it runs the "New ..." context sub menu in
         | Explorer.
        
         | thesuitonym wrote:
         | > if you want to create a document, double click on its
         | corresponding stationery stack and a new document is created.
         | No need to find open Excel (or LisaCalc
         | 
         | This is a cool idea, but not really as practical, at least, not
         | in the way it's presented here. To create a document, you first
         | have to have an existing template of that type. What happens if
         | you delete all of your templates? Even in our small demo
         | environment here, it's such an obvious flaw that the author
         | keeps templates on a RAMdisk. But even without that problem,
         | you have to know where your templates are saved. I was
         | surprised to find a drawing app.
         | 
         | One way to potentially fix this is to just allow document
         | creation from the global File menu. File > New > LisaType
         | Paper. Of course, if Lisa had been successful, this would break
         | down, too. Imagine a menu with LisaType Paper, LisaCalc
         | Spreadsheet, Lotus Spreadsheet, Lotus Document, etc, etc.
         | 
         | But it is a very elegant system, and I wish we could have seen
         | a world where this desktop metaphor survived, so we could see
         | how those problems would have been solved.
        
       | demetrius wrote:
       | It treats any of my clicks as an attempt to select text, and
       | draws everything with blue selection overlay (Firefox on
       | Windows).
       | 
       | Otherwise, looks cool!
        
         | jannes wrote:
         | I thought the same, but it's actually just the default Color
         | Palette being applied. You can change it in the preferences.
        
       | MarkusWandel wrote:
       | Works perfectly in Desktop Google Chrome. And on a 13 year old
       | computer, running in Javascript, is lightning fast. Just shows
       | how lean software can be and how responsive a desktop environment
       | should be. Not that it was that fast originally. Never used a
       | Lisa, but did use an original Mac 512K and the GUI environment
       | was "ambitious" for the CPU of the day.
        
       | gwbas1c wrote:
       | Took me a minute to figure out how to close a window. (Had to
       | remember it's the same way as closing a window in Win 3.1) I even
       | scrolled through the help document and didn't see it.
        
         | ayaros wrote:
         | Sorry! It's a bit buried in the "Tips" document. This is
         | something I need to emphasize more!
        
         | mirkules wrote:
         | I think this works even to this day on Win 10. I'm not sure
         | about Win 11 though.
        
       | zahirbmirza wrote:
       | I miss those "extra" icons mac used to have.
        
       | mlindner wrote:
       | Why does the screen turn light blue like it's highlighted text a
       | few seconds after the page loads? Firefox on Mac OS.
        
         | thesuitonym wrote:
         | Ditto, Firefox on Win 11
        
       | cruffle_duffle wrote:
       | The FPS display needs a way to be disabled. It rapidly "flickers"
       | between several values on my iPhone due to what I'd assume is
       | rounding or something. It's a very annoying distraction from what
       | otherwise looks pretty cool.
        
       | badc0ffee wrote:
       | It looks good in a maximized window on an external retina display
       | on my MBP.
       | 
       | One thing, though, is that it "stutters" every 15 seconds or so.
       | Like, it pauses for a noticeable time, like hundreds of ms. The
       | UI shows a consistent 119-120 FPS, even when this is happening.
       | 
       | It's possible the fault is Firefox, and not your page. I do have
       | 64 GB of RAM, but also a zillion tabs open.
        
       | edda7 wrote:
       | Please add Frotz to this, so we can play text adventures.
       | Amazingly, well done!
        
       ___________________________________________________________________
       (page generated 2025-07-07 23:01 UTC)