GZ Playground

Web experiments and other fun stuff

The PWA Philosophy


From my #presentation to the Fredericksburg Developer Group: The Progressive Web App Philosophy. If you couldn’t make it, check out the slides below. And the source for the 10 Minute PWA demo is on Github.  

Christmas Ghost Break Room


Not #web #development related but I had this idea over a decade ago and finally fleshed it out: Once a year the spirits of #Christmas visit a troubled soul and show them the error of their ways. Grab a sneak peak behind the scenes as the ghosts of Christmas past and future relax while their... Read the full article

CSS Blurry Christmas Lights


Lots of blurry colored lights make for a great #holiday background. I set out to create a procedurally generated background that could be tweaked easily. The effect uses a pure #css solution. #SASS variables are used to simplify the color application. This demo uses JavaScript to randomize the color and position of the lights.

Flickering Zeta o’ Lantern Pumpkin


I’ve been working Zeta o’ Lantern art into my #Halloween projects for a long time. This one is featured in War of the Worlds Broadcast. It has a glowing candle-lit effect using a div with a #CSS3 background transition #animation and color changed randomly with #JavaScript.  

Xmas Eve Nightmare

Angular / Firebase / Material Design

An on-going interactive fiction project started in 2016 and worked on only at the year's end. It uses a custom story engine called Flux. Its current incarnation involves saving your family from a Christmas without presents while trapped in a blizzard.

2018 Edition


Just in time for #ChristmasEve the 2018 version of Xmas Eve Nightmare is done. This is the first year it has a complete story, albeit a short story, with an ending. It also has all new cover art to fit the new story.

PWA Action


Happy #Festivus! For my feats of strength I’m giving Xmas Eve Nightmare #PWA powers. It doesn’t have offline support yet but the layout is all cleaned up and it prompts for install on #mobile.

New Cover Art


#Pencil drawing of new cover art, for the revised 2018 Xmas Eve Nightmare story. Going with a much shorter, but complete, story this year. You’re about to learn that everything you know about #Christmas is wrong!

Location Themes


#Flux now supports themes for each location. The theme overtakes the content area by applying a class name set in the editor. The theme styles are set in the project theme #sass file.

Attack Area 51!

Unity / WebGL

An experiment in pushing the limits of Unity driven WebGL. Rescue your extraterrestrial friends trapped at the infamous Area 51.



Playing with timeline animation. Not one of my strong suits. But here’s a flyby of the Area 51 primitive.

Base Model


A really rough sketch of the base with the main buildings, runways and some of the taxiways. The saucer is in view for reference.

Kill Count


Added an enemy kill count UI for some feedback. Going to play with different fonts but for now I’m going with #retro CRT.

Enemy Explosions


Added some enemy planes I found in the asset store. Eventually I’ll buy some models of F18s. The planes detect particle collisions and swap out for an explosion prefab.

War of the Worlds Broadcast

ES6, HTML5 Audio, CSS Animation

Relive the night of October 30th 1938, when martians were real. Demo site featuring ES6, HTML5 Audio, CSS Animation and Invaders from outer space.

Final QA


Did a final round of #QA for War of the Worlds Broadcast. Lots of minor fixes and tweaks. Adjustments to the layout for really narrow phones in portrait orientation. Almost forgot to install ssl on the site :).

Zeta o’ Lantern

Wanted to give the site an extra #halloween touch. I’ve been working the Zeta o’ Lantern into my blogs for a long time. This one features a glowing candle-lit effect using a div with a #css background transition and color changed randomly with #JavaScript

Missed it by That Much


The Lighthouse scores are pretty good. I got dinged for not having http2 or webp images. And the fact that it’s so media heavy. Not too concerned about that. Overall I’m pretty happy with it.

Offline Support & Manifest

Added all the behind-the-scenes PWA features, web-manifest and service worker. I use workbox to handle the caching strategies. Since the site is static, everything is cached upfront.


TensorFlow.js / Vue.js / CSS3

An experiment in Machine Learning with TensorFlow.js and reactive design with Vue.js. Colony lets you train a colony of ants to survive and thrive in their environment.

Life Energy


In order to help determine success, the ant now has a limited lifespan. A dead ant is marked by a red square. The neural network will be trained to progress outward and locate food to replenish energy.

A Blank Brain


Modified the ant initialization to run off an untrained model. The output values are compared against a random number to allow the ant some variation when the outputs are closer to 0.5. As the model is trained, the randomness begins to disappear.

Classification Model


Changed the TensorFlow model over to a linear classification model taken from my XOR example. The sensory inputs are translated into a bit mask and output as a single action.

Manual Activation


In order to make the page more responsive, the TensorFlow model is no longer trained onLoad. Training takes a few seconds and stalls the UI completely. Training is now triggered by a button. Later, this process will be represented as the birth of a new ant.


ES6, Synaptic.js / CSS Animation / WebAudio

An experiment in machine learning. Swat the fly by swiping toward it. Each generation of fly is trained with the data from the previous. Eventually the fly will learn to evade death.

Finishing Touches


Added some wallpaper to the background and an instructional graphic that illustrates how to swipe. A pre-loader now caches all the image and sound assets before displaying the fly. To finish it off, I added an info button to explain the app, and a GreenZeta badge at the bottom.

Art Improvements


Lots of improvements to the artwork. The new hairy appearance is added to the fly head. When training, the thought bubble is replaced with a blackboard. It now shows which directional data has been added to the training set. I also added a mortarboard to the head, just for fun.



Ported over the WebAudio service I created for Hypertension to run as a stand-alone class. Sound effects courtesy of freesound.org. Couldn’t find an appropriate swatter sound so I created one by combining a woosh and a smack sound.

Fly Macabre


A secondary sprite sheet for MLFly. This one adds the gruesome swatted state of the fly.


Angular / WebAudio / CSS Animation

An experiment in the MEAN stack. Hypertension is a word association game presented in HTML 5 using CSS animation and WebAudio API.

End Screen


Added a tentative game-over screen. Playing around with 3d transforms, not sure exactly where I’m going with the design but the “lifetime” value will be used in the final version.

More Sound


Added some (final?) sound assets to the webaudio service. I was a little concerned that the javascript audio triggers wouldn’t align with the timing of the CSS animation but it seems to be working well.

Heat Map


Playing around with an idea. Red flashes along the edges of the screen when the tension value goes above a threshold.

Putting It Together


Some refactoring of the heartbeat component and bringing it together with the wordfall component.

Zeta Burger


An HTML5 game developed with Unity. Ever wonder why Zetas are so interested in cows? It's because hamburgers are the one universal delicacy. Don your delivery hat and hop in your parent's saucer to start your job in burger delivery.

Splash Sketch


Sketching out possible splash/intro screen artwork. I got the idea of Alpha Zeta driving around in a cartoonishly small ship a while ago. Finally committing it to paper.

Crumple Zone


Added the crumple animation to the ship prefab and tweaked the gravity a bit more. Also turned on rotation on collision so the ball spins around.

Ship Crumple Animation


The final (for now) ship collision animation. Almost ready for export to sprite sheet.

Crumpled Ship


A frame from what will be the ship collision animation. Upon impact, the ship will crumple up like tin foil. This will replace the red ball that’s presently in the demo.


Angular / Ionic / Firebase

A Shopping List App built with the Angular and Ionic frameworks. Listimate uses a powerful algorithm known as "rounding up" to ensure you remain under budget.



Made some UI tweaks. Put the list inside an ion-scroll component to make the total & new item panels fixed to the top. Moved the pin/unpin button to the left side, closer to its icon. Also fixed the list sorting directive that prevented some checked items from moving to the end of the list.

Progressive Web App


Not quite a PWA, but almost. Using the service worker that comes with ionic to trigger the PWA install dialog in mobile Chrome. Offline still isn’t working quite right. It caches the files, aggressively, but still requires an initial connection to start after the install.

New Color Palette


Changed the color palette to match the new icon. Still using the ionic directives for primary and secondary color.

Pinned Items


Added a flag to mark an item as “pinned”. When the checkout function is run, pinned items will be added back to the list with the price value zeroed out.

Zeta Bowling


An experiment in WebGL using Unity3D. Try a game of intergalactic bowling against a decuplet of Zetas.

Ball Selection


In addition to the Earth ball, you can now select Mars, Jupiter or Sol. Weights are 8, 12 and 16 pounds respectively.

Adding Ball Selection


Adding ball selection to Zeta Bowling. bowl.greenzeta.com

Add scoring to UI


Adding scoring to Zeta Bowling. #unity3d #gamedev #screenshotsaturday

Alternative ball type: Sol


Zeta Bowling with a star. #unity3d #webgl #gamedev bowl.grenzeta.com