Theme switcher feature & deployment ! Status: Wrapped up 🚀finally finished up the WebOS project! added the last extra feature and got it hosted online. what i did today : built the appearance settings window so you can toggle desktop themes on the fly added 3 theme options: Midnight, Sunset, and a glowing Matrix green cyber mode tested all the window buttons and dragging on different screen sizes pushed the code online so anyone can test it out without needing a password reflections: super fun project! learned a lot about handling DOM events and basic drag-and-drop logic in vanilla JavaScript.
Day 2 - Making windows draggable + z-index fix Status: Adding Interactivity spent a couple hours getting the actual OS mechanics working today. drag-and-drop took a bit of tinkering to get right. what i did today : styled all the windows, title bars, and close buttons in CSS wrote the JS event listeners (mousedown, mousemove, mouseup) so you can click and drag windows around by their headers. fixed a bug where windows overlapped weirdly by adding a zIndex counter so whatever window you click pops to the fronthooked up a real-time JS clock in the top bar. next up: finishing up the theme switcher feature so you can change the background.
Title: Day 1 - HTML layout and window structureStatus: Building basic UIdecided to start working on the WebOS project for Hack Club today! wanted to get a basic desktop layout working before adding any fancy stuff. what i did today : made my standard index.html, styles.css, and app.js files built the top bar with a logo, clock placeholder, and quick-launch buttons set up the HTML for 3 default windows (About Me, Notes, and Theme settings)added a few desktop shortcut icons so it actually feels like a real desktop. next up: styling everything in CSS so it doesn’t just look like a plain white webpage lol
So this one’s finally wrapped up. It’s a little desktop app where you pick a character — J.A.R.V.I.S., Goku, Sherlock, Raphael from Slime, or one you made yourself — and just chat with them. Runs on Groq’s API under the hood (Llama 3.3 70B), all wrapped in a Tkinter GUI.
Honestly the character creation part was the fun bit to build. You can type in a name, write a system prompt, pick an accent color with the native color picker, and upload your own image for them. It gets saved locally so it’s still there next time you open the app.
The chat screen itself doesn’t use a normal text box — I drew the whole thing manually on a canvas. Rounded bubbles, little avatar circles with initials, background art that scales to fit the window. Took a while to get the bubble sizing right based on the text’s bounding box but I like how it turned out.
A couple of small things I’m proud of:
API calls run in background threads so the UI never locks up while waiting on a response
there’s a “typing…” message that shows up and then gets swapped out once the real reply comes back
if you delete a custom character, it doesn’t just vanish — the AI sends you one last in-character goodbye message first, which feels way better than a plain confirm dialog
there’s a compact mode that shrinks the window and pins it on top of everything else, so you can keep it open while doing other stuff
First time running it, it’ll ask for your Groq API key and then just remembers it after that (checks a config file, then env var, then prompts if neither exists).
It’s a single Python file, no build process, just pip install the deps and go. Not adding anything else for now, calling this v1.0.
I’ll take that as: write the release-version devlog. Here it is (under 4000 characters):
Devlog: Space Shooter — v1.0 Complete 🚀
Status: Finished and playable
Wrapping up development on my Pygame arcade space shooter. Full loop is in, polished, and stable. Here’s the rundown of what shipped.
The game
Vertical arcade shooter — dodge and blast descending aliens, survive as long as possible, level up every 150 points. Everything renders from a single Python file with zero external art assets; every sprite is built at runtime from primitive shapes (polygons, ellipses, circles) layered with shading.
Final feature set
Ship & enemies: Hand-built ship sprite (glowing cockpit, thruster fins, nav lights) and three alien variants with distinct color palettes
Combat: Standard laser fire plus a Multi-shot power-up that fires a 3-way spread; Rapid Fire halves cooldown
Power-ups: Shield (temporary invincibility), Multi-shot, Rapid Fire, and extra Life — each spawns randomly, pulses with a glow ring, and runs on its own timed duration
Progression: Score-based leveling that scales enemy speed and spawn rate, cycling through three distinct background themes (deep space, magenta nebula, red giant) as you climb levels
Atmosphere: Three-layer parallax starfield with per-star twinkle, drifting rotating asteroids with seeded procedural craters, random comet streaks with fading tails, a soft vignette, and glow-text HUD rendering
Feedback: Explosion particles (debris + spark types), expanding shockwave rings, camera shake, and a red damage flash on hit
Game loop: Clean reset-and-restart via a single reset() call, full game-over screen with final score and level reached
Technical highlights
Asteroids generated once via seeded RNG for unique jagged silhouettes, then just rotated/tinted per frame — cheap and visually rich
Bullets share one update path regardless of straight vs. angled trajectory via a vx field
All power-up timers live in one dict, decremented per frame — no separate timer objects
Collision detection is straightforward rect-based checks; performant at this entity density
Reflection
The biggest win here was proving how much atmosphere you can generate procedurally — no sprite sheets, no external assets, just math and layered shapes. The gradient backgrounds, particle systems, and glow effects did most of the heavy lifting for “game feel.”
What’s not included (by choice)
No sound, no persistent high scores, no boss fights — kept scope tight to ship a complete, polished core loop rather than sprawl into unfinished extras.
That’s a wrap on v1.0. Solid, self-contained, single-file arcade shooter.
Devlog — Visual Pass on the Space Shooter
Went back into the shooter today because the core loop felt good but the screen was still kind of flat and empty between waves. Didn’t touch gameplay balance — this was purely a “make it feel alive” pass.
Background depth. The nebula/planet gradients were already there but nothing moved in front of them, so the parallax felt thin. Added a slow-drifting asteroid field behind the stars — reused the same “irregular polygon + a couple of craters” trick as the alien sprites, just tinted down and desaturated so they read as background clutter instead of threats. Took a bit of fiddling to get the tint right; too dark and they disappear into the gradient, too bright and they compete with the actual enemies.
Also added rare comet streaks that cut across the top of the screen every few seconds. Small thing, but it breaks up long stretches where nothing new is happening on screen.
Combat feedback. Explosions were just round particles before — added a handful of streaky “spark” debris mixed in with the dots so hits feel punchier, plus floating +10 score popups and booster name popups so pickups/kills give you something to actually read instead of just a number ticking up in the corner. Bullets now drag a short fading trail, which sounds minor but makes rapid-fire actually look rapid instead of just spawning dots.
Danger telegraph. Aliens now get a pulsing red glow under them once they cross into the bottom third of the screen — a cheap way to warn the player before a collision without adding any new mechanics. Also gave the ship a faint thruster trail so movement has some weight to it.
HUD. Added a thin progress bar under the score bar showing how close you are to the next level, since before the only signal was the banner popping up out of nowhere. Engine flame now shifts gold when rapid-fire is active, just a small color-coded readability thing.
Polish. Threw a soft vignette over the whole scene (precomputed once, not per-frame — learned that lesson the hard way on an earlier project) to pull focus toward the center. Star colors are no longer uniform blue-white; ~1 in 4 get a warm tint so the field doesn’t look like a uniform noise texture.
Didn’t touch: spawn rates, scoring, lives, booster durations. All of it should feel exactly the same to play, just louder and busier to look at. If it turns out the asteroid field is too distracting during heavy waves I’ll dial the tint/count down — for now it’s 7 rocks max on screen which felt like the sweet spot.
Next up, probably: giving the aliens some actual variation in movement patterns instead of straight-down drift, since right now the visual noise is doing more work than the AI is.
devlog: made a space shooter, drew every sprite with pygame.draw
had an itch to build a little arcade shooter — dodge and shoot aliens, grab power-ups, level up, don’t die. gave myself one dumb rule first: no image files. no sprite sheets, no downloading pixel art. every ship, alien, laser and icon gets built out of circles/polygons at startup and cached. mostly so I didn’t have to deal with asset folders, but also just to see if it’d look decent. mostly does, once you cheat with alpha blending enough.
the ship is like six polygons wearing a trenchcoat
get_ship_img() is genuinely a pile of triangles and ellipses stacked up — two wing shapes, two SMALLER brighter polygons on top of those, a nose triangle, a cockpit ellipse, a white highlight blob. that second brighter polygon on the wings does basically all the work — first draft with flat single-color wings looked like clipart from 2004. one lighter layer on top and it suddenly reads as “metal panel” instead of “shape.” cheap trick, huge payoff.
aliens (get_alien_img) are the same idea, cycling through 3 base colors so a wave doesn’t look like clones (they are clones but shh). the eyes were an afterthought that became my favorite detail — two yellow circles with dark pupils, pulsed with sin(ticks * 0.006 + phase) at draw time so each alien blinks out of sync with the others. kills the “identical enemies marching in lockstep” feeling.
backgrounds took longer than they should have
didn’t want a static black screen with some stars, so each level has a theme — gradient colors, a couple nebula blobs, a planet in a corner. gradient’s just a line per row lerping color, baked once per level into bg_cache instead of redrawing every frame (felt dumb I didn’t do that from the start).
the nebula thing (add_nebula_blob) is my favorite bit for how little code it is — ~10 shrinking, increasingly transparent circles with BLEND_RGBA_ADD so overlaps brighten instead of turning muddy. expected to need noise textures, got a for loop instead.
explosions, and the cheapest screen shake ever
on death (spawn_explosion) 16 particles fly out with gravity, plus a separate expanding ring. particles alone felt weak, ring alone felt bloodless, both together actually sells it.
screen shake: render the whole frame to an offscreen surface, blit THAT onto the real window with a random offset for a few frames after a hit. no shaking individual sprites, no camera object. one extra surface and a randint call.
power-ups + difficulty as basically one line of math
four boosters — rapid fire, shield, 3-way spread, extra life — drift down on a timer. active ones live in a dict with a countdown, so stacking effects and drawing HUD bars was just one loop, no special-casing per power-up.
difficulty is deliberately dumb: every 150 points = next level, speeds up enemies, spawns more often, capped so it’s not unplayable by level 20. background palette also cycles on level-up, which sells “progress” more than the actual curve does. never underestimate just changing the sky color.
why it’s async even though it’s not a web app yet
main loop is async def main() with await asyncio.sleep(0) per frame instead of blocking while True. weird for desktop pygame, but means I can run it through pygbag later in an actual browser tab without freezing the page. easier to start async than retrofit it.
still on the list
enemies are all “same alien but faster” — want real patterns or a boss
zero sound, biggest thing making it feel unfinished
no persistent high score
shield + multi-shot together trivialize a level, needs tuning
A space shooting game that should look like this i have made the basic outline of it which is similer but it doesnt have any spaceships or a baground it only has basic colors and shapes instead of spaceships